/* the stack holding the currently active menu items */
var itemStack = new Stack();



if (ns4) {
  document.captureEvents(Event.MOUSEMOVE);
  document.onmousedown = hideAll;
} else {
    document.onclick = hideAll;
}

/*
 * Display a submenu
 */
function displaySub(childId, parentId, yPos) {
   var parent = getElement(parentId); //itemStack.top();
   var child = getElement(childId);
   var top = itemStack.top();
   if (top == null) return;
   while (top != parent && itemStack.size() > 0) {
      hide(itemStack.pop());
      top = itemStack.top();
   }
   alignRight(child, parent, SUBMENU_H_OFFSET, yPos + SUBMENU_V_OFFSET);
   itemStack.push(child);
   show(child);
}


/*
 * Displays a toplevel menu below the link object "linkObj". 
 */
function displayToplevel(id, linkObj, vPos) {
   var obj = getElement(id);
   hideAll();
   if (!obj) return;
   var hPos = findLeftPos(linkObj);
   placeObject(obj, hPos + TOPLEVEL_H_OFFSET, vPos + TOPLEVEL_V_OFFSET);
   itemStack.push(obj);
   show(obj);
}


/*
 * Hides submenus of object(id)
 */
function hideSubs(id) {
   var obj = getElement(id);
   var top = itemStack.top();
   if (!obj) return;
   if (!top) return;
   if (obj == top) return;
   while (top != obj && top != null) {
      hide(itemStack.pop());
      top = itemStack.top();
   }
}

/*
 * Hides all active menus
 */
function hideAll() {
   while (itemStack.size() > 0) {
       var item = itemStack.pop();
       hide(item);
   }
   return true;
}

/*
 * Is (x, y) within rectangle (top, left, width, height)?
 */
function pointInRect(top, left, width, height, x, y) {
    if ((x > (left + width)) || (x < left)) return false;
    if ((y > (top + height)) || (y < top)) return false;
    return true;
}




/******* Set some browser specific offsets *********/

var TOPLEVEL_H_OFFSET = 0;
var TOPLEVEL_V_OFFSET = 0;
var SUBMENU_H_OFFSET = 0;
var SUBMENU_V_OFFSET = 0;


