menuCount = 0;
menuTimer = null;

menu = new Array();

function menuObj(menuid, parentid) {
  this.id = menuid;
  this.parentid = parentid;
  this.visible = false;
}
function menuAdd(callid, dx, dy, menuid, parentid) {
  menu.push(new menuObj(menuid, parentid));
  
  var callobj = menuGetObj(callid);
  var x = menuMoveToX(dx, callobj);
  var y = menuMoveToY(dy, callobj);
  
  var obj = menuGetObj(menuid);
  obj.style.left = x + 'px';
  obj.style.top  = y + 'px';
}

function menuGetObj(objid) {
  if (document.getElementById)
    return document.getElementById(objid);
  else if (document.all)
    return document.all[objid];
  else
    return false;
}
function menuOver(menuid) {
  menuStopTimeout();
  menuShow(menuid);
}
function menuOut() {
  menuStartTimeout();
}

function menuShow(menuid) {
  var i = 0;
  // Dieses Menü (inkl Parents) anzeigen und alle anderen ausblenden
  if (menuid) {
    // Alle Menüs "theoretisch" ausblenden
    for (i = 0; i < menu.length; i++) {
      menu[i].visible = false;
    }
    // Menübaum sichtbar machen
    while (menuid) {
      for (i = 0; i < menu.length; i++) {
        if (menu[i].id == menuid) {
          menu[i].visible = true;
          menuid = menu[i].parentid;
        }
      }
    }
    // Sichtbarkeiten anwenden
    for (i = 0; i < menu.length; i++) {
      obj = menuGetObj(menu[i].id);
      obj.style.visibility = (menu[i].visible ? "visible" : "hidden");
    }
  }
}

function menuHideAll() {
  for (i = 0; i < menu.length; i++) {
    obj = menuGetObj(menu[i].id);
    obj.style.visibility = "hidden";
    menu[i].visible = false;
  }
}

function menuStartTimeout() {
  menuTimer = setTimeout("menuHideAll()", 1000);
}
function menuStopTimeout() {
  if (menuTimer) clearTimeout(menuTimer);
}

function menuMoveToX(x, obj) {
  x += obj.offsetWidth;
  var lo = 0;
  while (obj) {
    if ((obj.offsetLeft != lo) && obj.offsetLeft) x += parseInt(obj.offsetLeft);
    if (obj.offsetLeft != 0) lo = obj.offsetLeft;
    obj = obj.offsetParent;
  }
  return x;
}
function menuMoveToY(y, obj) {
  var lo = 0;
  while (obj) {
    if ((obj.offsetTop != lo) && obj.offsetTop) y += parseInt(obj.offsetTop);
    if (obj.offsetTop != 0) lo = obj.offsetTop;
    obj = obj.offsetParent;
  }
  return y;
}

