
var currentMenu = null;
var menuTimer = null;

if (!document.getElementById)
  document.getElementById = function() { return null; }

/*
 *
 * Load the declarations for the MenuBar from the HTML document
 * This should be done on load of the page.
 *
 */

window.onload = function() { loadMenuBar(document.getElementById("menuList"), null); }

//
// Read the document recursively to get the submenus too.
function loadMenuBar(root, elementItem)
{
  var menuStarter;
  var menuItem;
  
  if (elementItem == null)
    elementItem = root;

  for (var i = 0; i < elementItem.childNodes.length; i++)
    {
      if ((elementItem.childNodes[i].nodeName == "LI") &&
	  (elementItem.childNodes[i].getElementsByTagName("UL").length > 0))
	    {
	      menuStarter = elementItem.childNodes[i].getElementsByTagName("A").item(0);
	      menuItem = elementItem.childNodes[i].getElementsByTagName("UL").item(0);
	      loadMenuBar(root, menuItem);
	      createMenuBarEntry(root, menuItem, menuStarter);
	    }
    }
}

//
// Create the menus.
function createMenuBarEntry(root, menu, menuEntry)
{
  if (menu == null || menuEntry == null)
    return;
  
  currentMenu = menu;
  
  menuEntry.onfocus = function() { menuEntry.onmouseover(); }
  
  menuEntry.onmouseover = function()
    {
      if (currentMenu)
	{
	  if (this.parentNode.parentNode!=currentMenu)
	    currentMenu.style.visibility = "hidden";
	  
	  if (this.parentNode.parentNode==root)
	    {
	      tempCurrentMenu = currentMenu;
	      while (tempCurrentMenu.parentNode.parentNode != root)
		{
		  tempCurrentMenu.parentNode.parentNode.style.visibility = "hidden";
		  tempCurrentMenu = tempCurrentMenu.parentNode.parentNode;
		}
	    }

	  currentMenu = null;
	  this.showMenu();
	}
    }
  
  menuEntry.showMenu = function()
    {
      if (this.parentNode.parentNode == root)
	{
	  menu.style.left = this.offsetLeft + "px";
	  menu.style.top = this.offsetTop + this.offsetHeight + "px";
	}
      else
	{
	  menu.style.left = this.offsetLeft + this.offsetWidth + "px";
	  menu.style.top = this.offsetTop + "px";
	}

      menu.style.visibility = "visible";
      currentMenu = menu;
    }
  
  menuEntry.onmouseout = function()
    {
      for (var i = 0; i < menu.childNodes.length; i++)
	{
	  if ((menu.childNodes[i].nodeName == "LI") &&
	      (menu.childNodes[i].getElementsByTagName("UL").length > 0))
	    {
	      menuItem = menu.childNodes[i].getElementsByTagName("UL").item(0);
	      menuItem.style.visibility = "hidden";
	    }
	}
      menu.style.visibility = "hidden";
    }

  menu.onfocus = function() { }
  
  menu.onmouseout = function(event) { this.hideMenu(); }

  menu.onmouseover = function()
    {
      if (currentMenu)
        {
	  currentMenu = null;
	  this.showMenu();
	}
    }	
  
  menu.showMenu = function()
    {
      menu.style.visibility = "visible";
      currentMenu = menu;
      clearTimer();
    }
  
  menu.hideMenu = function()
    {
      if (!queryTimer())
	{
	  setTimer(root.id, this.id, 1000);
	  for (var i = 0; i < menu.childNodes.length; i++)
	    {
	      if ((menu.childNodes[i].nodeName=="LI") &&
		  (menu.childNodes[i].getElementsByTagName("UL").length > 0))
		{
		  menuItem = menu.childNodes[i].getElementsByTagName("UL").item(0);
		  menuItem.style.visibility = "hidden";
		}
	    }
	}
    }
}

function removeMenu(root, menu)
{
  var root = document.getElementById(root);
  var menu = document.getElementById(menu);

  menu.style.visibility = "hidden";
  
  for (var i = 0; i < menu.childNodes.length; i++)
    {
      if ((menu.childNodes[i].nodeName=="LI") &&
	  (menu.childNodes[i].getElementsByTagName("UL").length > 0))
	{
	  menuItem = menu.childNodes[i].getElementsByTagName("UL").item(0);
	  menuItem.style.visibility = "hidden";
	}
    }

  while (menu.parentNode.parentNode != root)
    {
      menu.parentNode.parentNode.style.visibility = "hidden";
      menu = menu.parentNode.parentNode;
    }

  clearTimer();
}

function queryTimer()
{
  if (menuTimer != null)
    return true;

  return false;
}

function setTimer(rootId, objectId, interval)
{
  menuTimer = setInterval("removeMenu('" + rootId + "', '" + objectId + "');", interval);
}

function clearTimer()
{
  if (menuTimer)
    {
      clearInterval(menuTimer);
      menuTimer = null;
    }
} 