var currentTarget;
var timeOut;

var fadeDelay = 750;

var displayMenuIndex = 0;

function setTarget(event)
{
	var e = event || window.event;

	currentTarget = e.target || e.srcElement;
}

addListener(document, 'mousemove', setTarget, false);

function displayMenuNew(hoverType, globalCode, menuId)
{
	if(hoverType == 'hover_out' && one_of_the_parents_was(globalCode, menuId))
	{
		return false;
	}

	var menuNormal;
	var menuHover;
	
	var i = 0;

	for(i = 0; i < menuItems.length; i++)
	{
		menuNormal = E(globalCode+'_'+menuItems[i]+"_n");
		menuHover = E(globalCode+'_'+menuItems[i]+"_h");

		if(menuItems[i] == menuId)
		{
			// hide old menu selection if exists:
			if(displayMenuIndex)
			{
				hideMenu(globalCode, displayMenuIndex, true);
				clearTimeout(timeOut);
			}
			
			// set timer for new submenu if it exists:
			timeOut = setTimeout("hideMenu('"+globalCode+"','"+menuId+"')", fadeDelay);
			if(E('submenu_'+menuId))
			{
				E('submenu_'+menuId).style.display = 'block';
			}

			// set new selected menu:
			displayMenuIndex = menuItems[i];
			
			// hide/unhide menu normal/hover state:
			menuNormal.style.display = (hoverType == 'hover_in') ? 'none' : 'block';
			menuHover.style.display = (hoverType == 'hover_in') ? 'block' : 'none';
		}
		else
		{
			menuNormal.style.display = 'block';
			menuHover.style.display = 'none';
		}
	}
}

function hideMenu(globalCode, menuId, hardReset)
{
	if(!hardReset && one_of_the_parents_was(globalCode, menuId))
	{
		return false;
	}

	if(E('submenu_'+menuId))
	{
		E('submenu_'+menuId).style.display = 'none';
		
		// only put menu selection to 0 when hovering away from menu (else current selection will be lost)
		if(displayMenuIndex == menuId)
		{
			displayMenuIndex = 0;
		}
	}

	var menuNormal = E(globalCode+'_'+menuId+"_n");
	var menuHover = E(globalCode+'_'+menuId+"_h");
	menuNormal.style.display = 'block';
	menuHover.style.display = 'none';
}

function one_of_the_parents_was(globalCode, menuIndex)
{
	//var debugScreen = E('debugScreen');
	//var debugContent = "";

	//debugContent += "START LOOP for: "+menuIndex+", ";

	//	if(currentTarget.id == 'globalBox_'+menuIndex || currentTarget.id == 'submenu_'+menuIndex || currentTarget.id == 'mainMenuholder_'+menuIndex)
	if(currentTarget.id == 'submenu_'+menuIndex || currentTarget.id == 'mainMenuholder_'+menuIndex)
	{
		//debugContent += "current target = true";

		timeOut = setTimeout("hideMenu('"+globalCode+"','"+menuIndex+"')", fadeDelay);

		return true;
	}
	else
	{
		// loop parents node:
		tempTarget = currentTarget.parentNode;

		while(tempTarget)
		{
			//if(tempTarget.id == 'globalBox_'+menuIndex || tempTarget.id == 'submenu_'+menuIndex || tempTarget.id == 'mainMenuholder_'+menuIndex)
			if(tempTarget.id == 'submenu_'+menuIndex || tempTarget.id == 'mainMenuholder_'+menuIndex)
			{
				//debugContent += "loop true: "+tempTarget+",, ";

				//debugScreen.innerHTML = "Looping: "+tempTarget+", true <br /> "+debugScreen.innerHTML;

				timeOut = setTimeout("hideMenu('"+globalCode+"','"+menuIndex+"')", fadeDelay);

				return true
				break;
			}
			else
			{
				//debugContent += "loop false: "+tempTarget+",, ";

				tempTarget = tempTarget.parentNode;
			}
		}
	}
	//debugContent += "<br /><br />";

	//debugScreen.innerHTML = debugContent+debugScreen.innerHTML;

	return false;
}
