
/*
 * menuDropdown.js - implements an dropdown menu based on a HTML list
 * Author: Dave Lindquist (http://www.gazingus.org)
 * Extensively modified by Mike Foster, cross-browser.com, 19Dec03
 */

var currentMenu = null;

if (!document.getElementById)
    document.getElementById = function() { return null; }

function initdrpdn(drpdnId, menuId)

{
  var drpdn = document.getElementById(drpdnId);
  var menu = document.getElementById(menuId);
  if (drpdn == null || menu == null) return;

  drpdn.menu = menu;
  menu.drpdn = drpdn;
  
  drpdn.onmouseover = function()
  {
    if (currentMenu) {
      this.hideMenu();
    }
    this.showMenu();
  }

  drpdn.onmouseout = function(evnt)
  {
    var e = evnt || window.event;
    if (e) {
      var oTo = e.relatedTarget || e.toElement;
      var li = this.parentNode || this.parentElement; // assumes drpdn is child of LI
      // has mouse moved out of LI?
      while (oTo && oTo != li) {
        oTo = oTo.parentNode || oTo.parentElement;
      }
      if (!oTo) {
        this.hideMenu();
      }
    }
  }

  menu.onmouseout = function(evnt)
  {
    var e = evnt || window.event;
    if (e) {
      var oTo = e.relatedTarget || e.toElement;
      // has mouse moved out of UL?
      while (oTo && oTo != this) {
        oTo = oTo.parentNode || oTo.parentElement;
      }
      if (!oTo) {
        this.drpdn.hideMenu();
      }
    }
  }

  drpdn.showMenu = function()
  {
    var m = this.menu;
    m.style.left = this.offsetLeft + "px";
    m.style.top = this.offsetTop + this.offsetHeight + "px";
    m.style.visibility = "visible";
    currentMenu = m;
  }

  drpdn.hideMenu = function()
  {
    if (currentMenu) {
      currentMenu.style.visibility = "hidden";
      currentMenu = null;
    }
  }
}
