/*
===================================================
XHTML/CSS/DHTML Semantically correct drop down menu 
===================================================
Author: Sam Hampton-Smith
Site: http://www.hampton-smith.com
Modified 04/10/04 SPD
Credits: Inspiration/Code borrowed from Dave Lindquist (http://www.gazingus.org)
Menu hide functionality was aided by some code I found on http://www.jessett.com/
Modified 4/15/04 SPD
edited timer (in milliseconds) to 800 in line 150 (well, line 177 as of this exact second).
*/

	var currentMenu = null;
	var mytimer = false;
	var timerOn = false;
	var IE4up = document.all && window.external ? true : false;
	var Opera = window.opera ? true : false;
	// netscape browsers
	var NN  = (navigator.userAgent.indexOf("Netscape") != -1) && !Opera;
	var is_nn6 = (navigator.product == 'Gecko') && (!window.find)?true:false;
	var is_nn7 = (navigator.product == 'Gecko') && (window.find)?true:false;

	var Moz = (navigator.userAgent.indexOf("Mozilla") != -1) && !NN;
	var is_mac = navigator.userAgent.indexOf("Mac") != -1;
	
	if (!document.getElementById)
		document.getElementById = function() { return null; }
	
	function initialiseMenu(menu, starter, root) {
		var leftstarter = false;
	
		if (menu == null || starter == null) return;
			currentMenu = menu;
	
		starter.onmouseover = function() {
			if (currentMenu) {
				//alert(this.parentNode.parentNode.id + ' ' + currentMenu.id);
				if (this.parentNode.parentNode!=currentMenu) {
					currentMenu.style.visibility = "hidden";
				}
				if (this.parentNode.parentNode==root) {
					tempCurrentMenu = currentMenu
					while (tempCurrentMenu.parentNode.parentNode!=root) {
						tempCurrentMenu.parentNode.parentNode.style.visibility = "hidden";
						tempCurrentMenu = tempCurrentMenu.parentNode.parentNode;
					}
				}
				currentMenu = null;
				this.showMenu();
	        	}
		}
	
		menu.onmouseover = function() {
			if (currentMenu) {
				currentMenu = null;
				this.showMenu();
	        	}
		}	
	
		starter.showMenu = function() {
			if (IE4up) {
				if (is_mac){
					if (this.parentNode.parentNode==root) {
						menu.style.left = this.offsetLeft + "px";
						menu.style.top = this.offsetTop + this.offsetHeight+2 + "px";
					}
					else {
						menu.style.left = this.offsetLeft + this.offsetWidth + "px";
						menu.style.top = this.offsetTop + "px";
					}
				}
				else{
					if (this.parentNode.parentNode==root) {
						menu.style.left = this.offsetLeft + "px";
						menu.style.top = this.offsetTop-2 + this.offsetHeight + "px";
					}
					else {
						menu.style.left = this.offsetLeft + this.offsetWidth + "px";
						menu.style.top = this.offsetTop-2 + "px";
					}
				}
			}
			else if (Opera) {
				if (this.parentNode.parentNode==root) {
					menu.style.left = this.offsetLeft + "px";
					menu.style.top = this.offsetHeight + "px";
				}
				else {
				 	menu.style.left = this.offsetWidth + "px";
				 	menu.style.top = this.offsetTop + "px"; //menu.style.top - menu.style.offsetHeight + "px";
				}

			}
			else if (Moz) {
			//alert("moz");
				if (this.parentNode.parentNode==root) {
					menu.style.left = this.offsetLeft+185 + "px";
					menu.style.top = this.offsetHeight+39 + "px";
				}
				else {
				 	menu.style.left = this.offsetWidth + "px";
				 	menu.style.top = this.offsetTop+39 + "px";
				}

			}
			else if (NN) {
				if (is_mac){
				//alert("macNet");
					if (this.parentNode.parentNode==root) {
							menu.style.left = this.offsetLeft+185 + "px";
							menu.style.top = this.offsetHeight+40 + "px";
						}
						else {
							menu.style.left = this.offsetWidth + "px";
							menu.style.top = this.offsetTop+40 + "px";
						}
					}
				else if (is_nn7){
				//alert("net7");
					if (this.parentNode.parentNode==root) {
						menu.style.left = this.offsetLeft+185 + "px";
						menu.style.top = this.offsetHeight+39 + "px";
					}
					else {
						menu.style.left = this.offsetWidth + "px";
						menu.style.top = this.offsetTop+39 + "px";
					}
				}
				else {
				//alert("net6");
					if (this.parentNode.parentNode==root) {
						menu.style.left = this.offsetLeft + "px";
						menu.style.top = this.offsetHeight+39 + "px";
					}
					else {
						menu.style.left = this.offsetWidth + "px";
						menu.style.top = this.offsetTop+39 + "px";
					}
				}
			}
			else {
					if (this.parentNode.parentNode==root) {
						menu.style.left = this.offsetLeft + "px";
						menu.style.top = this.offsetHeight+38 + "px";
					}
					else {
						menu.style.left = this.offsetWidth + "px";
						menu.style.top = this.offsetTop+38 + "px";
					}
				}

			menu.style.visibility = "visible";
			currentMenu = menu;
		}

		menu.hideMenu = function()  {
		//alert("hide started");
			if (!timerOn) {
				//alert(this.id);
				//mytimer = setInterval("killMenu('" + this.id + "', '" + root.id + "');", 800);
				mytimer = setTimeout("killMenu('" + this.id + "', '" + root.id + "');", 800);
				timerOn = true;
				//alert("timer set to true");
				for (var x=0;x<menu.childNodes.length;x++) {
					if (menu.childNodes[x].nodeName=="LI") {
						if (menu.childNodes[x].getElementsByTagName("UL").length>0) {
							menuItem = menu.childNodes[x].getElementsByTagName("UL").item(0);
							menuItem.style.visibility = "hidden";
						}
					}
				}
			}
		}
		
		starter.onfocus	= function() {
			starter.onmouseover();
		}

		menu.showMenu = function() {
		//alert("show");
			menu.style.visibility = "visible";
			currentMenu = menu;
			//check here
			//mytimer=false;
			clearTimeout(mytimer);
			//stopTime();
		}

		menu.onmouseout = function(event) {
		//alert("onmouseout");
		timerOn = false;
		this.hideMenu();
		}

		starter.onmouseout = function() {
		//alert("starter.onmouseout");
			for (var x=0;x<menu.childNodes.length;x++) {
				if (menu.childNodes[x].nodeName=="LI") {
					if (menu.childNodes[x].getElementsByTagName("UL").length>0) {
						menuItem = menu.childNodes[x].getElementsByTagName("UL").item(0);
						menuItem.style.visibility = "hidden";
					}
				}
			}
			menu.style.visibility = "hidden";
			//menu.hideMenu();
		}
}

	function stopTime() {
		//alert("stoptime");
		if (mytimer) {
		//alert("stoptime");
			//clearInterval(mytimer);
		 	 clearTimeout(mytimer);
			 mytimer = false;
			 //mytimer = null;
			 timerOn = false;
		}
	}
	
function getMenus(elementItem, root) {
	var selectedItem;
	var menuStarter;
	var menuItem;
	//alert("in getmenus");
	//alert(elementItem.childNodes.length);
	for (var x=0;x<elementItem.childNodes.length;x++) {
		//alert(elementItem.childNodes[x].nodeName);
		if (elementItem.childNodes[x].nodeName=="LI") {
			//alert("Yes!");
			if (elementItem.childNodes[x].getElementsByTagName("UL").length>0) {
				//alert("Set up");
				menuStarter = elementItem.childNodes[x].getElementsByTagName("A").item(0);
				menuItem = elementItem.childNodes[x].getElementsByTagName("UL").item(0);
				getMenus(menuItem, root);
				initialiseMenu(menuItem, menuStarter, root);
			}
		}
	}
	//return true;
}

	function killMenu(menu, root) {
	//alert("killstarted");
		var menu = document.getElementById(menu);
		var root = document.getElementById(root);
		menu.style.visibility = "hidden";
		for (var x=0;x<menu.childNodes.length;x++) {
			if (menu.childNodes[x].nodeName=="LI") {
				if (menu.childNodes[x].getElementsByTagName("UL").length>0) {
					menuItem = menu.childNodes[x].getElementsByTagName("UL").item(0);
					menuItem.style.visibility = "hidden";
				}
			}
		}
		while (menu.parentNode.parentNode!=root) {
			menu.parentNode.parentNode.style.visibility = "hidden";
			menu = menu.parentNode.parentNode;
		}
		stopTime();
	}
	
	window.onload = function() {
		//alert("loaded");
		var root = document.getElementById("menuList");
		//alert("About to execute getmenus");
		getMenus(root, root);
	}