function init()
{
  cssjsmenu('navbar');
  if (document.getElementById) {
    var kill = document.getElementById('hoverJS'); 
    kill.disabled = true;
  }
}

function elementContains(elmOuter, elmInner)
{
  while (elmInner && elmInner != elmOuter) {
    elmInner = elmInner.parentNode;
  }
  if (elmInner == elmOuter) {
    return true;
  }
  return false;
}

function getPageXY(elm)
{
  var point = { x: 0, y: 0 };
  while (elm) {
    point.x += elm.offsetLeft;
    point.y += elm.offsetTop;
    elm = elm.offsetParent;
  }
  return point;
}

function setPageXY(elm, x, y)
{
  var parentXY = {x: 0, y: 0 };

  if (elm.offsetParent) {
    parentXY = getPageXY(elm.offsetParent);
  }

  elm.style.left = (x - parentXY.x) + 'px';
  elm.style.top  = (y - parentXY.y) + 'px';
}

function cssjsmenu(menuid)
{
  var i;
  var j;
  var node;
  var child;
  var parent;

  // if the browser doesn't even support
  // document.getElementById, give up now.
  if (!document.getElementById) {
    return true;
  }

  // check for downlevel browsers
  // Opera 6, IE 5/Mac are not supported

  var version;
  var offset;

  if ((offset = navigator.userAgent.indexOf('Opera')) != -1 && parseInt('0' + navigator.userAgent.substr(offset + 6), 10) < 7) {
      return true;
  }

  if ((offset = navigator.userAgent.indexOf('MSIE')) != -1 && navigator.userAgent.indexOf('Mac') != -1) {
      return true;
  }

  var menudiv = document.getElementById(menuid);

  // ul
  var ul = new Array();

  for (i = 0; i < menudiv.childNodes.length; i++) {
    node = menudiv.childNodes[i];
    if (node.nodeName == 'UL') {
      ul[ul.length] = node;
    }
  }

  // ul > li
  var ul_gt_li = new Array();

  for (i = 0; i < ul.length; i++) {
    node = ul[i];
    for (j = 0; j < node.childNodes.length; j++) {
      child = node.childNodes[j];
      if (child.nodeName == 'LI') {
        ul_gt_li[ul_gt_li.length] = child;
        child.style.display = 'inline';
        child.style.listStyle = 'none'; 
        child.style.position = 'static';
      }
    }
  }

  // ul > li > ul
  var ul_gt_li_gt_ul = new Array();

  for (i = 0; i < ul_gt_li.length; i++) {
    node = ul_gt_li[i];
    for (j = 0; j < node.childNodes.length; j++) {
      child = node.childNodes[j];
      if (child.nodeName == 'UL') {
        ul_gt_li_gt_ul[ul_gt_li_gt_ul.length] = child;
        child.style.position = 'absolute';
        child.style.left = '-13em';
        child.style.visibility = 'hidden';

        // attach hover to parent li
        parent = child.parentNode;
        parent.onmouseover = function (e) {
          var i;
          var child;
          var point;

          // stop the pure css hover effect
          // this.style.paddingBottom = '0';

          for (i = 0; i < this.childNodes.length; i++) {
            child = this.childNodes[i];
            if (child.nodeName == 'UL') {
              point = getPageXY(this);
              setPageXY(child, point.x, point.y + this.offsetHeight);
              child.style.visibility = 'visible';
            }
          }
          return false;
        };
        parent.onmouseout = function (e) {
          var relatedTarget = null;
          if (e) {
            relatedTarget = e.relatedTarget;
            // work around Gecko Linux only bug where related target is null
            // when clicking on menu links or when right clicking and moving
            // into a context menu.
	    if (navigator.product == 'Gecko' && navigator.platform.indexOf('Linux') != -1 && !relatedTarget) {
	      relatedTarget = e.originalTarget;
	    }
          } else if (window.event) {
            relatedTarget = window.event.toElement;
          }

          if (elementContains(this, relatedTarget)) {
            return false;
          }

          var i;
          var child;
          for (i = 0; i < this.childNodes.length; i++) {
            child = this.childNodes[i];
            if (child.nodeName == 'UL') {
                child.style.visibility = 'hidden';
            }
          }
          return false;
        };
      }
    }
  }

  // ul > li > ul > li
  var ul_gt_li_gt_ul_gt_li = new Array();

  for (i = 0; i < ul_gt_li_gt_ul.length; i++) {
    node = ul_gt_li_gt_ul[i];
    for (j = 0; j < node.childNodes.length; j++) {
      child = node.childNodes[j];
      if (child.nodeName == 'LI') {
        ul_gt_li_gt_ul_gt_li[ul_gt_li_gt_ul_gt_li.length] = child;
        // child.style.display = 'inline';
        child.style.listStyle = 'none'; 
        child.style.position = 'static';
      }
    }
  }

  // ul > li > ul > li > ul
  for (i = 0; i < ul_gt_li_gt_ul_gt_li.length; i++) {
    node = ul_gt_li_gt_ul_gt_li[i];
    for (j = 0; j < node.childNodes.length; j++) {
      child = node.childNodes[j];
      if (child.nodeName == 'UL') {
        child.style.position = 'absolute';
        child.style.left = '-13em';
        child.style.visibility = 'hidden';

        // attach hover to parent li
        parent = child.parentNode;
        parent.onmouseover = function (e) {
          var i;
          var child;
          var point;

          // stop the pure css hover effect
          // this.style.paddingBottom = '0';

          for (i = 0; i < this.childNodes.length; i++) {
            child = this.childNodes[i];
            if (child.nodeName == 'UL') {
              point = getPageXY(this);
              setPageXY(child, point.x + 50, point.y + this.offsetHeight);
              child.style.visibility = 'visible';
            }
          }
          return false;
        };
        parent.onmouseout = function (e) {
          var relatedTarget = null;
          if (e) {
            relatedTarget = e.relatedTarget;
            // work around Gecko Linux only bug where related target is null
            // when clicking on menu links or when right clicking and moving
            // into a context menu.
	    if (navigator.product == 'Gecko' && navigator.platform.indexOf('Linux') != -1 && !relatedTarget) {
	      relatedTarget = e.originalTarget;
	    }
          } else if (window.event) {
            relatedTarget = window.event.toElement;
          }

          if (elementContains(this, relatedTarget)) {
            return false;
          }

          var i;
          var child;
          for (i = 0; i < this.childNodes.length; i++) {
            child = this.childNodes[i];
            if (child.nodeName == 'UL') {
                child.style.visibility = 'hidden';
            }
          }
          return false;
        };
      }
    }
  }
  return true;
}


