var browser = new Browser();
var currentItem = null;

function Browser()
{
  var userAgent = navigator.userAgent;

  if ( (userAgent.indexOf("Netscape6/") >= 0) ||
       (userAgent.indexOf("Gecko") >= 0) ) {
    this.isNS = true;
    this.isIE = false;
  }
  else if ( userAgent.indexOf("MSIE") >= 0 ) {
    this.isNS = false;
    this.isIE = true;
  }
}

function activateMenu(event, menuId)
{
  var button = (browser.isIE) ? window.event.srcElement : event.currentTarget;
  button.blur();
	
  if ( button == currentItem ) {
    return false;
  }
  if ( button.menu == null ) {
    button.menu = document.getElementById(menuId);
  }
  if ( currentItem != null ) {
    resetMenu(currentItem);
  }
  if ( button != currentItem ) {
    openSubMenu(button);
    currentItem = button;
  }
  else {
    currentItem = null;
  }
  return false;
}

function menuMouseover(event, menuId)
{
  var button = (browser.isIE) ? window.event.srcElement : event.currentTarget;
  if ( currentItem != button ) {
    activateMenu(event, menuId);
  }
}

function openSubMenu(button)
{
  var x = getOffset(button, "left");
  var y = getOffset(button, "top") + button.offsetHeight - 8;
	
  button.className += " GlobalNavOptionActive";

  if ( browser.isIE ) {
    x += button.offsetParent.clientLeft;
    y += button.offsetParent.clientTop;
  }

  button.menu.style.left = x + "px";
  button.menu.style.top  = y + "px";
  button.menu.style.visibility = "visible";
}

function resetMenu(button)
{
  if ( button.menu != null ) {
    button.className = (button.className != null) ?
      button.className.replace("GlobalNavOptionActive", '') : button.className;
    closeSubMenu(button.menu);
    button.menu.style.visibility = "hidden";
  }
}

function closeSubMenu(menu)
{
  if ( menu != null && menu.activeItem != null ) {
    if ( menu.activeItem.subMenu != null ) {
      closeSubMenu(menu.activeItem.subMenu);
      menu.activeItem.subMenu.style.visibility = "hidden";
      menu.activeItem.subMenu = null;
    }
    menu.activeItem.className = (menu.activeItem.className != null) ?
      menu.activeItem.className.replace("SubMenuItemActive", '') :
      menu.activeItem.className;
    menu.activeItem = null;
  }
}

function menuMouseout(event)
{
  if ( currentItem != null ) {
    var element = null;
    if ( browser.isIE ) {
      element = window.event.toElement;
    }
    else if ( event.relatedTarget != null ) {
      element = event.relatedTarget.tagName ?
	event.relatedTarget : event.relatedTarget.parentNode;
    }
    else {
      element = event.target.parentNode;
    }
    if ( getParent(element, "SubMenu") == null ) {
      resetMenu(currentItem);
      currentItem = null;
    }
  }
}

function getParent(element, elementClass)
{
  var result = null;
  var flag = true;
  while ( flag && element != null ) {
    if ( element.tagName != null &&
	 ((elementClass == "SubMenu" && element.tagName == "DIV") ||
	  (elementClass == "SubMenuItem" && element.tagName == "A"))) {
      className = element.className.split(" ");
      for ( var x = 0; x < className.length; x++ ) {
      	if ( className[x] == elementClass ) {
          result = element;
	  flag = false;
	  break;
	}
      }
    }
    element = element.parentNode;
  }
  return result;
}

function getOffset(element, direction)
{
  var offset = (direction == "top") ? element.offsetTop : element.offsetLeft;
  if ( element.offsetParent != null ) {
    offset += getOffset(element.offsetParent, direction);
  }
  return offset;
}
