var menuItems = new Array();
var subToClose = new Array();
var subToOpen = new Array();
var thisMenu;
var justClicked;
var pageMenu;

thisMenu = 0;
openingComplete = true;
closingComplete = true;
firstTime = true;

function initializeMenu(){
// Called immediately after "leftMenu" div closing tab inside document body.

	// Set all submenus' style.display properties to none. Without this step, closeOldMenu() causes a delay the first time the menu is clicked
	var leftMenuNode = document.getElementById("leftMenu");
	var items = leftMenuNode.getElementsByTagName("a");
	for(i=0;i<items.length;i++){
		if(items[i].className != "direct"){
			items[i].style.display = 'none';
		}
	}

	// Look for a page_menu cookie and open the menu associated with that value
	var cookies = document.cookie;
	var pageMenuStart = cookies.indexOf("page_menu");
	var pageMenuStop = cookies.indexOf(";", pageMenuStart);
	var pageMenuCookie;
	if( pageMenuStop == -1 ){
		pageMenuCookie = cookies.substring(pageMenuStart);
	}else{
		pageMenuCookie = cookies.substring(pageMenuStart, pageMenuStop);
	}
	var pageMenuValue = pageMenuCookie.split("=")[1];

	var allMenus = document.getElementById("leftMenu").getElementsByTagName('div');
	if( pageMenuValue > -1 && pageMenuValue < allMenus.length ){
	// A value of -1 is interpreted as FALSE and no menu will open
		openMenu = allMenus[pageMenuValue];
		thisMenu = justClicked = openMenu;
		justClicked.className = "menuItem expanded";
		openSubs = openMenu.getElementsByTagName('a');
		for(i=0;i<openSubs.length;i++){
			openSubs[i].style.display = 'block';
		}
	}	
}

function recordElement(e){
// Called for all body.onclick events.
// This function assesses whether the item clicked was part of the navigation menu.

        var targ;
	if(!e){
		 var e = window.event;
	}
	if(e.target){ 
		targ = e.target;
	}
	else if (e.srcElement){
		targ = e.srcElement;
	}
	justClicked = targ;
	if( targ.className.match("menuItem") && !( targ.className.match("direct") ) ){
		openSubMenu();
	}
}

function openSubMenu(){
// Called by recordElement when the user clicks on a navigation menu item.
// This function first closes any open submenus, and then opens the submenu specified by 'menu'.

	if( thisMenu == justClicked && closingComplete && openingComplete ){ 
		// Check whether menu is already open and set the page_menu cookie to a false value,
		// but only if the last menu finished opening and/or closing

		thisMenu = 0;
		closingComplete = false;

		var expireOn = new Date();
		var expireMin = expireOn.getMinutes() + 15;
		expireOn.setMinutes(expireMin);
		document.cookie = "page_menu=-1;expires=" + expireOn.toString() + ";path=/";

		closeOldMenu();
		justClicked.className = "menuItem";
	}else if( closingComplete && openingComplete ){ 
		// Close open menu(s) and open the one that was just clicked,
		// but only if the last menu finished opening and/or closing

		thisMenu.className = "menuItem";
		thisMenu = justClicked;
		openingComplete = false;
		var delay = closeOldMenu();
		setTimeout("openNewMenu()", delay+30 );
		justClicked.className = "menuItem expanded";

		// Set the page_menu cookie value to the index of the menu item just opened

		menuArray = document.getElementById("leftMenu").getElementsByTagName('div');
		for(i=0;i<menuArray.length;i++){
			if( justClicked == menuArray[i] ){
				var expireOn = new Date();
				var expireMin = expireOn.getMinutes() + 30;
				expireOn.setMinutes(expireMin);
				document.cookie = "page_menu=" + i + ";expires=" + expireOn.toString() + ";path=/";
			}
		}

	}
}

function closeOldMenu(){
// Called by openSubMenu() to close all currently open menu items. Returns amount of time until all menus are closed in milliseconds.
	
	// Reset subToClose array
	subToClose.length = 0;
	
	// Collect all open submenus into subToClose array

	var leftMenuNode = document.getElementById("leftMenu");
	var items = leftMenuNode.getElementsByTagName("a");
	for(i=0;i<items.length;i++){
		if( items[i].style.display != 'none' && items[i].className != "direct"){
			subToClose.push( items[i] );
		}
	}
	var delay = subToClose.length*30;

	// Tell each submenu item to close 30 milliseconds after the previous one

	for(i=0;i<subToClose.length;i++){
		setTimeout("closeSubMenus()", i*30);
	}
        setTimeout( "closingComplete = true", delay );
	return delay;
}

function openNewMenu(){
// Called by openSubMenu() to open a menu after open menus are all closed.

	// Reset subToOpen array
	subToOpen.length = 0;

	// Collect submenu items into subToOpen array for menu just clicked by user

	var liItems = document.getElementsByTagName("a");
	for(i=0;i<liItems.length;i++){
		if(liItems[i].parentNode == justClicked){
			subToOpen.push(liItems[i]);
		}
	}

	// Tell each submenu item to open 70 milliseconds after the previous one

	var delay = -70;
	for(i=0,d=70;i<subToOpen.length;i++,d=d+70){
		setTimeout("openSubMenus()", d);
		delay = d;
	}
        setTimeout( "openingComplete = true", delay );
}

function closeSubMenus(){
// Called by closeOldMenu() to close individual submenu times.

	var me = subToClose.shift();
	me.style.display = "none";
}

function openSubMenus(){
// Called by openNewMenu() to open individual submenu times.

	var me = subToOpen.shift();
	me.style.display = "block";
}
