var hideTimers = Array();
var menunames = Array();
var menuIDs = Array();

//This is called when the mouse enteres a menu.
function ShowMenu(menuname, menuID)
{
	if(!isChild(menuname, menuID))
	{
		clearMenus();
	}
	
	var menudivID = "menu_" + menuname + "_" + menuID;
	var menudiv = document.getElementById(menudivID);
	
	if(menudiv != null)
	{
		menudiv.style.display = "block";	
	}
}


function isChild(menuname, menuID)
{
	for(var i = 0; i<hideTimers.length ; i++)
	{
		var menudivID = "menu_" + menunames[i] + "_" + menuIDs[i];
		var menudiv = document.getElementById(menudivID);
		
		var NewmenudivID = "menu_" + menuname + "_" + menuID;
		var Newmenudiv = document.getElementById(menudivID);
		
		var f = menudiv.firstChild;
		
		do
		{
			if(f == Newmenudiv) return true;
			
			f = f.nextSibling;
		}
		while(f != null)
	}

}

//Hides all of the menus that are currently visible.
function clearMenus()
{
	while(hideTimers.length != 0 && menunames != 0 && menuIDs != 0)
	{
		HideMenu(menunames[menunames.length - 1], menuIDs[menuIDs.length - 1]);
	}
}

//This does the actual hiding of menus.
function HideMenu(menuname, menuID)
{
	var menudivID = "menu_" + menuname + "_" + menuID;
	var menudiv = document.getElementById(menudivID);
	menudiv.style.display = "none";
	
	//Our arrays aren't out of whack, right?
	if(hideTimers.length == menunames.length && menunames.length == menuIDs.length && menunames[menunames.length - 1] == menuname && menuID == menuIDs[menuIDs.length - 1])
	{
		clearTimeout(hideTimers[hideTimers.length - 1]);
		hideTimers.pop();
		menunames.pop();
		menuIDs.pop();
	}
}

//This is called when the mouse leaves a menu
function HideMenuSetup(menuname, menuID)
{
	var hideTimer = setTimeout("HideMenu('" + menuname + "', '" + menuID + "');", 1500);
	
	hideTimers.push(hideTimer);
	menunames.push(menuname);
	menuIDs.push(menuID);
	
}