var delayhide = null;
var disappeardelay = 250;
var is_busy = false;

function isContained(m, e) {
  var e=window.event || e;
  var c=e.relatedTarget || ((e.type=="mouseover")? e.fromElement : e.toElement);
  while (c && c!=m) {
    try {
      c=c.parentNode;
    } catch(e) {
      c=m;
    }
  }
  if (c==m) {
    return true;
  } else {
    return false;
  }
}

function delayhidemenu () {
  delayhide = setTimeout("hideMenu()", disappeardelay);
}

function dynamichide(m, e) {
  if (!isContained(m, e)) {
    delayhidemenu()
  }
}

function clearhidemenu() {
  if (this.delayhide!="undefined") {
    clearTimeout(delayhide)
  }
}

function dynamichide(m, e) {
  if (!isContained(m, e)){
    delayhidemenu()
  }
}

function addEvent(target, functionref, tasktype) {
  if (target.addEventListener)
    target.addEventListener(tasktype, functionref, false);
  else if (target.attachEvent)
    target.attachEvent('on'+tasktype, function(){return functionref.call(target, window.event)});
}

function showMenu(menuItem, subMenu) {

  var popups = document.getElementsByTagName('div');
  var popup = $(subMenu);
  var subMenuList = $(menuItem);
  if (!popup.visible() && !is_busy) {
    is_busy = true;
    for (var i = 0; i < popups.length; i++) {
      if (popups[i].className == 'submenu') {
        var p = $(popups[i].id);
        if (p.visible()) {
          new Effect.SlideUp(p.id, {duration: '.4', queue: 'end'});
        }
      }
    }
    //addEvent(subMenuList, hideMenu, "mouseout");
    addEvent(popup, function(e){dynamichide(this, e)}, "mouseout");
    addEvent(popup, function(){clearhidemenu()}, "mouseover");
    addEvent(popup, function(){delayhidemenu()}, "click");
    addEvent(subMenuList, function(e){dynamichide(this, e)}, "mouseout");
    addEvent(subMenuList, function(){clearhidemenu()}, "mouseover");
    addEvent(subMenuList, function(){delayhidemenu()}, "click");
    var tmp = subMenuList.cumulativeOffset(subMenuList);
    Element.clonePosition(popup, subMenuList, {setTop: true, setLeft: true, setWidth: false, setHeight: false, offsetLeft: 0, offsetTop: 24});
    new Effect.SlideDown(popup.id, {duration: '.4', queue: 'end'});
    is_busy = false;
  }
}

function hideMenu() {
  var popups = document.getElementsByTagName('div');
  for (var i = 0; i < popups.length; i++) {
    if (popups[i].className == 'submenu') {
      var p = $(popups[i].id);
      if (p.visible()) {
        new Effect.SlideUp(p.id, {duration: '.4', queue: 'end'});
      }
    }
  }
}
