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.split(';');
	for(i=0;i<cookies.length;i++){
		thisCookie = cookies[i].split('=');
		thisCookie.length = 2;
		if( thisCookie[0] == "page_menu" && thisCookie[1] > -1){

		// A value of -1 is interpreted as FALSE and no menu will open
			openMenu = document.getElementById("leftMenu").getElementsByTagName('div')[thisCookie[1]];
			thisMenu = justClicked = openMenu;
			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 == "menuItem" ){
		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;
		document.cookie = "page_menu=-1";
		closeOldMenu();
	}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 = justClicked;
		openingComplete = false;
		var delay = closeOldMenu();
		setTimeout("openNewMenu()", delay+30 );

		// 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] ){
				document.cookie = "page_menu="+i;
			}
		}

	}
}

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";
}