
var clearTimer;
var visibleMenu;
var visibleSubs = new Array;

function showMenu(topItemId, subMenuId){
  endClearMenus();
  clearMenus();

  var subMenu = document.all['menu_' + subMenuId];
  var topItem = document.all['menuitem_' + topItemId];

  subMenu.style.posLeft = topItem.offsetLeft;
  subMenu.style.posTop = topItem.offsetTop + topItem.offsetHeight;

  subMenu.style.visibility = 'visible';
  visibleMenu = subMenuId;

  hideDropdowns(subMenu);
}

function showSubmenu(menuId, menuItemId, subMenuId){
  clearSubMenus(menuId);
  visibleSubs[menuId] = subMenuId;

  var menu = document.all['menu_' + menuId];
  var subMenu = document.all['menu_' + subMenuId];
  var menuItem = document.all['menuitem_' + menuItemId];

  subMenu.style.posLeft = menu.offsetLeft + menuItem.offsetWidth;
  subMenu.style.posTop = menu.offsetTop + menuItem.offsetTop;

  subMenu.style.visibility = 'visible';

  hideDropdowns(subMenu, true);
}

function clearSubMenus(menuId){
  if (typeof visibleSubs[menuId] != 'undefined'){
    var subMenuId = visibleSubs[menuId];
    document.all['menu_' + subMenuId].style.visibility = 'hidden';
    visibleSubs[menuId] = undefined;

    hideDropdowns(document.all['menu_' + subMenuId], false);

    clearSubMenus(subMenuId);
  }
}

function clearMenus(){
  if (typeof visibleMenu != 'undefined'){
    document.all['menu_' + visibleMenu].style.visibility = 'hidden';
    hideDropdowns(document.all['menu_' + visibleMenu], false);
    clearSubMenus(visibleMenu);
  }
}

function startClearMenus(){
  clearTimer = setTimeout(clearMenus, 200);
}

function endClearMenus(){
  clearTimeout(clearTimer);
}

function hideDropdowns(menu){
  if (typeof menu.dd_to_hide == 'undefined')
    findDropdownsToHide(menu);

  for (var i = 0; i < menu.dd_to_hide.length; i++)
    menu.dd_to_hide[i].style.visibility = menu.style.visibility == 'visible' ? 'hidden' 
                                                                             : 'visible'
                                                                             ;
}

function findDropdownsToHide(menu){
  menu.dd_to_hide = new Array();

  for (var i = 0; i < document.forms.length; i++)
    for (var e = 0; e < document.forms[i].elements.length; e++){
      elem = document.forms[i].elements[e]; 

      if (elem.type.indexOf('select') == 0){
        // determine positions relative to the document body

        var el = 0, et = 0, ml = 0, mt = 0;
        var ew = elem.offsetWidth, eh = elem.offsetHeight;
        var mw = menu.offsetWidth, mh = menu.offsetHeight;
        
        var ope = elem;
        var opm = menu;
        
        while(ope != document.body){
          el += ope.offsetLeft;
          et += ope.offsetTop;
          ope = ope.offsetParent;
        }
        
        while(opm != document.body){
          ml += opm.offsetLeft;
          mt += opm.offsetTop;
          opm = opm.offsetParent;
        }
        
        // alert("el: " + el + "\net: " + et + "\new: " + ew + "\neh: " + eh + "\n" +
        //       "\nml: " + ml + "\nmt: " + mt + "\nmw: " + mw + "\nmh: " + mh);
        
        if (!(el + ew < ml || el > ml + mw || et + eh < mt || et > mt + mh))
          menu.dd_to_hide.push(elem);
      }
    }
}


