/*************************************************************************
  This code is from Dynamic Web Coding at http://www.dyn-web.com/
  Copyright 2003 by Sharon Paine 
  See Terms of Use at http://www.dyn-web.com/bus/terms.html
  regarding conditions under which you may use this code.
  This notice must be retained in the code as is!
*************************************************************************/

var menuLayers = {
  timer: null,
  activeMenuID: null,

  offX: 4,   // horizontal offset 
  offY: 6,   // vertical offset 

  show: function(id, e, pid) {
    var mnu = document.getElementById? document.getElementById(id): null;
    var pmnu = document.getElementById? document.getElementById(pid): null;

    if (!mnu) return;
    this.activeMenuID = id;
    if ( mnu.onmouseout == null ) mnu.onmouseout = this.mouseoutCheck;
    if ( mnu.onmouseover == null ) mnu.onmouseover = this.clearTimer;
    viewport.getAll();
    this.position(mnu,e,pid);
  },
  
  hide: function() {
    this.clearTimer();
    if (this.activeMenuID && document.getElementById) 
      this.timer = setTimeout("document.getElementById('"+menuLayers.activeMenuID+"').style.visibility = 'hidden'; ", 200);

  },
  
  position: function(mnu, e, pid) {

    var x = this.findPosX(pid);
    var y = this.findPosY(pid)+20;
    
    mnu.style.left = x + "px"; mnu.style.top = y + "px";
    this.timer = setTimeout("document.getElementById('" + menuLayers.activeMenuID + "').style.visibility = 'visible'", 200);

  },
  
  mouseoutCheck: function(e) {
    e = e? e: window.event;
    // is element moused into contained by menu? or is it menu (ul or li or a to menu div)?
    var mnu = document.getElementById(menuLayers.activeMenuID);
    var toEl = e.relatedTarget? e.relatedTarget: e.toElement;
    if ( mnu != toEl && !menuLayers.contained(toEl, mnu) ) menuLayers.hide();
  },
  
  // returns true of oNode is contained by oCont (container)
  contained: function(oNode, oCont) {
    if (!oNode) return; // in case alt-tab away while hovering (prevent error)
    while ( oNode = oNode.parentNode ) 
      if ( oNode == oCont ) return true;
    return false;
  },

  clearTimer: function() {
    if (menuLayers.timer) clearTimeout(menuLayers.timer);
  },

  findPosX: function(obj) {
       var curleft = 0;
       if (obj.offsetParent)
       {
            while (obj.offsetParent)
            { 
                 curleft += obj.offsetLeft;
                 obj = obj.offsetParent;
            }
       }
       else if (obj.x)
            curleft += obj.x;
       return curleft;
  },

  findPosY: function(obj) {
       var curtop = 0;
       if (obj.offsetParent)
       {
            while (obj.offsetParent)
            {
                 curtop += obj.offsetTop;
                 obj = obj.offsetParent;
            }
       }
       else if (obj.y)
            curtop += obj.y;
       return curtop;
  }

  
}