// JavaScript Document

var openMenus=new Array();
var opentimer;
var closeAllTimer;
var openingMenu;
var openingEntry;

/*
Array.prototype.push = function() {
  var n = this.length >>> 0;
  for (var i = 0; i < arguments.length; i++) {
    this[n] = arguments[i];
    n = n + 1 >>> 0;
  }
  this.length = n;
  return n;
};

Array.prototype.pop = function() {
  var n = this.length >>> 0, value;
  if (n) {
	  value = this[--n];
	  delete this[n];
  }
  this.length = n;
  return value;
};
*/
function registerMenuEvents() {
  base2.DOM.bind(document);
	var entries = document.querySelectorAll("#mainmenu li");
	for (var i=0; i < entries.length; i++) {
    var entry = entries.item(i);
    entry.addEventListener("mouseover", mouseEnter, true);
    entry.addEventListener("mouseout", mouseLeave, true);	      	          
	}
  document.addEventListener("click", closeAllMenus, false);

}

function mouseEnter() {
  this.className="sfhover";
  clearTimeout(closeAllTimer);
  clearTimeout(opentimer);  	
  openingMenu=getChildMenu(this);  
  openingEntry=this;	  
  opentimer = setTimeout(openMenu,100);
 
  return false;
}

function mouseLeave() {
  this.className="";
  clearTimeout(closeAllTimer);
  closeAllTimer = setTimeout(closeAllMenus,1000);
}

function openMenu() {  
  if (openingMenu) {
    closeMenu(getParentMenu(openingMenu.parentNode));    

    openMenus.push(openingMenu);      
    openingMenu.className="showmenu";
    if (base2.detect("MSIE")) {
      restackMenus(openingMenu);
    }
    //Move children to the left if needed (bur not top level)
    var parentmenu=getParentMenu(openingMenu.parentNode);
    if (parentmenu && parentmenu.id != "mainmenu") {
      windowWidth=xClientWidth();       
      thisEdge = xPageX(openingMenu);
      menuWidth=xWidth(openingMenu);  
      if (thisEdge+menuWidth > windowWidth){
        openingMenu.style.left="-"+(menuWidth)+"px"; 
      }
    }
  } else {
    closeMenu(getParentMenu(openingEntry));    
  }
  openingMenu=false;
  openingEntry=false;
}  

function restackMenus(menu) {
   var parent = null;
   if (menu && menu.parentNode) {
     parent = menu.parentNode;
     var ancestors = new Array();
     ancestors.push(menu);
     while (parent && parent.id != "#mainmenu") {      
        ancestors.push(parent);
        parent = parent.parentNode;
     };
     
     var entry = ancestors.pop();
     var counter = 100*ancestors.length;
     while (entry) {
       if (entry.style) {    
         entry.style.zIndex = counter;
         counter = counter - 100;
         debug (entry)
         debug (counter);
       }
       entry = ancestors.pop();
     };
    
 	 }
}

function closeAllSiblings(menuEntry) {
  var parent = menuEntry.parentNode;
  
  if (parent.hasChildNodes()) {
    var siblings = parent.childNodes;
    for(var c=0; c < siblings.length; c++) {
      if (siblings[c].nodeName=="LI") {
        var sibling = siblings[c];
        var menu = getChildMenu(sibling);        
       	if (menu) {
         	menu.className="";    
       	}        
      } 
    }
  } 	
}

function getChildMenu(listentry) {
  if (listentry && listentry.hasChildNodes()) {
    var children = listentry.childNodes;
    for(var c=0; c < children.length; c++) {
      if (children[c].nodeName=="UL") return children[c];      
    }
  }
  return null;
}

function getParentMenu(listentry) {
  if (listentry) {
    var parent = listentry.parentNode;
    debug(listentry);
    debug(parent);
    if (parent && parent.nodeName=="UL") return parent;      
  }
  debug("ouch, null");
  return null;
}


function closeAllMenus() {
  openMenus=new Array();
  var entries = document.getElementById("mainmenu").getElementsByTagName("LI");
  for (var i=0; i<entries.length; i++) {
    entries[i].className="";
  }
  
  var menus = document.getElementById("mainmenu").getElementsByTagName("UL");
  for (var i=0; i<menus.length; i++) {
    menus[i].className="";
  }
}

function closeMenu(menuToKeepOpen) {
	var lastMenu = openMenus[openMenus.length-1];
  while (lastMenu != menuToKeepOpen && openMenus.length > 0) {      
      if (lastMenu) {
        lastMenu.className="";
      }
      //Next please
      openMenus.pop();
    	lastMenu = openMenus[openMenus.length-1];
 	};
}

function debug(message) {
  //if (base2.detect("(console.log)")) console.log(message);
}
