﻿    var hideTimer = null;
    var doNotHide = false;
    
    function showMenu(refElement, menuID)
    {
      var menu = document.getElementById(menuID);
 
      if (refElement != null && menu != null && menu.style != null)
      {
        if (menu.style.visibility == 'visible')
        {
          slideMenuIn(refElement.id, menuID);
          return;
        }
      }
      var show = true;
      if (show && hideTimer != null) { clearTimeout(hideTimer); hideTimer = null; }
          		     
      if (menu != null && refElement != null && show) { positionDivAtElement(refElement, menu); }
      menu.style.visibility = (show ? 'visible' : 'hidden');
      menu.style.display = (show ? 'block' : 'none');
      setFullWidthAndHeight(menu);
    }  
    function setDoNotHide(val) { doNotHide = val; }
    
    function slideMenuIn(refElementID, menuID)
    {
      var menu = document.getElementById(menuID);
      
      if (menu == null || menu.style == null)
        return;
      
      if (menu.style.height == '' || menu.style.width == '')
        setFullWidthAndHeight(menu);
      
      var h = parseInt(menu.style.height.substring(0, menu.style.height.length - 2));
      var w = parseInt(menu.style.width.substring(0, menu.style.width.length - 2));
      h = h - 16;
      w = w - 16;
      menu.style.height = h+'px';
      menu.style.width = w+'px';          
      
      var refElement = document.getElementById(refElementID);
      positionDivAtElement(refElement, menu);
      
      if (w <= 20 )
      {
        menu.style.visibility = 'hidden';
        menu.style.display = 'none';
        setFullWidthAndHeight(menu);
        clearTimeout(hideTimer); 
        hideTimer = null;
      }
      else
        hideTimer = setTimeout("slideMenuIn('"+refElementID+"','"+menuID+"')", 0);
    }
    
    function positionDivAtElement(refElement, div)
    {
      var refLeft = offsetByAttr(refElement, 'offsetLeft');
      var refTop  = offsetByAttr(refElement, 'offsetTop');
      
      div.style.position = 'absolute'; 
      div.style.left = (refLeft + refElement.offsetWidth + 4) +  'px';
      div.style.top = refTop + 'px';
    }
    
    function setFullWidthAndHeight(div)
    {
      var table = div.childNodes[(document.all ? 0 : 1)];
      div.style.width = table.clientWidth+'px';
      div.style.height = table.clientHeight+'px';
    }
    
    function offsetByAttr(i, attr)
    {
      var offset = 0;
      while(i) { offset += i[attr]; i = i.offsetParent; }
      return offset;
    }    
    function hideMenu(menuID, refElementID, ms) 
    { 
      var menu = document.getElementById(menuID); 
      if (doNotHide || (menu && menu.style && menu.style.visibility == 'hidden')) 
        return; 
      hideTimer = setTimeout("slideMenuIn('"+refElementID+"','"+menuID+"')", ms);
    } 
    function documentClickEvent(e)
    {
      var e = (e ? e : window.event);
      var srcElement = (document.all ? e.srcElement : e.target);
      var menuLink = document.getElementById('MenuLink');
      var div = document.getElementById('divMenu');
      
      if (srcElement == null || srcElement == menuLink || isParent(div, srcElement) || isParent(menuLink, srcElement))
        return;
       
      setDoNotHide(false);
      hideMenu('divMenu', 'MenuLink', 0);

    }
    
    function isParent(parent, child)
    {
      
      if (child != null)
      {
        var p = child.parentNode;
        while (p) { if (!p || p == parent) { return true; } p = p.parentNode; }
      }
      return false;
    }

    if (document.all)
      document.documentElement.attachEvent("onclick", documentClickEvent);
    else
      document.documentElement.addEventListener("click", documentClickEvent, false);
      
