var rootMenuId = "mymenu";
var maxWidth = 800;
var scriptLoaded = false;
var initialized = false;
var currentMenu = null;
var mytimer = null;
var timerOn = false;
var delay = 150;


var ie = (navigator.userAgent.indexOf("MSIE") != -1);
var n6 = (navigator.userAgent.indexOf("Netscape6") != -1);

if (!document.getElementById)
   document.getElementById = function() { return null; }

window.onload = function() {
   loadMenu();
   var root = document.getElementById(rootMenuId);
   positionMenus(root, root);
}

function loadMenu() {
   if (initialized) return;
   if (!scriptLoaded) return;
   var root = document.getElementById(rootMenuId);
   getMenus(root, root);
   if (!ie) { positionMenus(root, root); }
   initialized = true;
}

function initialiseMenu(menu, starter, root) {
   if (menu == null || starter == null) return;
   currentMenu = menu;
   starter.onmouseover = function() {
      if (currentMenu) {
         currentMenu.style.visibility = "hidden";
         currentMenu = null;
         this.showMenu();
      }
   }

   starter.showMenu = function() {
      currentMenu = menu;
      menu.style.visibility = "visible";
   }

   starter.onfocus = function() {
      starter.onmouseover();
   }

   menu.onmouseover = function() {
      if (currentMenu) {
         currentMenu = null;
         this.showMenu();
      }
   }

   menu.onfocus = function() {
      //          currentMenu.style.visibility = "hidden";
   }

   menu.showMenu = function() {
      menu.style.visibility = "visible";
      currentMenu = menu;
      stopTime();
   }

   menu.hideMenu = function()  {
      if (!timerOn) {
         mytimer = setInterval("killMenu('" + this.id + "', '" + root.id + "');", delay);
         timerOn = true;
      }
   }

   menu.onmouseout = function(event) {
      this.hideMenu();
   }

   starter.onmouseout = function() {
      menu.hideMenu();
   }
}

function positionMenu(menu, starter, root) {
   menu.style.left = "";
   //alert("left=" + starter.parentNode.offsetLeft + ", width=" + menu.offsetWidth + ", menu=" + menu.offsetLeft);
   var diff = maxWidth - (starter.parentNode.offsetLeft + menu.offsetWidth);
   if (diff < 0) { menu.style.left = (menu.offsetLeft + diff) + "px"; }
}

function killMenu(menu, root) {
   var menu = document.getElementById(menu);
   var root = document.getElementById(root);
   menu.style.visibility = "hidden";
   stopTime();
}

function stopTime() {
   if (mytimer) {
      clearInterval(mytimer);
      mytimer = null;
      timerOn = false;
   }
}

function getMenus(elementItem, root) {
   var menuStarter;
   var menuItem;
   for (var x = 0; x < elementItem.childNodes.length; x++) {
       if (elementItem.childNodes[x].nodeName == "TD") {
           if (elementItem.childNodes[x].getElementsByTagName("UL").length > 0) {
              menuStarter = elementItem.childNodes[x].getElementsByTagName("A").item(0);
              menuItem = elementItem.childNodes[x].getElementsByTagName("UL").item(0);
              initialiseMenu(menuItem, menuStarter, root);
           }
       }
   }
}

function positionMenus(elementItem, root) {
   var menuStarter;
   var menuItem;
   for (var x = 0; x < elementItem.childNodes.length; x++) {
       if (elementItem.childNodes[x].nodeName == "TD") {
          if (elementItem.childNodes[x].getElementsByTagName("UL").length > 0) {
             menuStarter = elementItem.childNodes[x].getElementsByTagName("A").item(0);
             menuItem = elementItem.childNodes[x].getElementsByTagName("UL").item(0);
             positionMenu(menuItem, menuStarter, root);
          }
       }
   }
}

scriptLoaded = true;
