var timeOut;

var fadeDelay = 750;

function displayMenuNew(hoverType, globalCode, menuId)
{
	if(hoverType == 'hover_out' && one_of_the_parents_was(globalCode, menuId))
	{
		return false;
	}
	
	var menuNormal;
	var menuHover;

	// if hovering the selected main menu:
	if(menuId == displayMenuIndex)
	{
		// set timer for new submenu if it exists:
		if(E('submenuHolder_'+menuId))
		{
			timeOut = setTimeout("hideMenu('"+globalCode+"','"+menuId+"')", fadeDelay);
			E('submenuHolder_'+menuId).style.display = 'block';
		}
	}

	// else remove active submenu holder of the selected main menu if it exists
	else
	{
		hideMenu(globalCode, displayMenuIndex, true);
		clearTimeout(timeOut);
	}
	
	var i = 0;

	for(i = 0; i < menuItems.length; i++)
	{
		if(menuItems[i] != displayMenuIndex)
		{
			menuNormal = E(globalCode+'_'+menuItems[i]+"_n");
			menuHover = E(globalCode+'_'+menuItems[i]+"_h");

			hideMenu(globalCode, menuItems[i], true);
			clearTimeout(timeOut);

			if(menuItems[i] == menuId)
			{
				// set timer for new submenu if it exists:
				if(E('submenuHolder_'+menuId))
				{
					timeOut = setTimeout("hideMenu('"+globalCode+"','"+menuId+"')", fadeDelay);
					E('submenuHolder_'+menuId).style.display = 'block';
				}

				// 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 displaySubmenu(hoverType, globalCode, menuId)
{
	if(hoverType == 'hover_out' && one_of_the_parents_was(globalCode, menuId))
	{
		return false;
	}

	if(menuId == displaysubMenuIndex)
	{
		return false;
	}

	var menuNormal;
	var menuHover;
	
	var i = 0;

	for(i = 0; i < submenuItems.length; i++)
	{
		if(submenuItems[i] != displaysubMenuIndex)
		{
			menuNormal = E(globalCode+'_'+submenuItems[i]+"_n");
			menuHover = E(globalCode+'_'+submenuItems[i]+"_h");

			if(submenuItems[i] == menuId)
			{
				// 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('submenuHolder_'+menuId))
	{
		E('submenuHolder_'+menuId).style.display = 'none';
	}
	
	if(menuId != displayMenuIndex && !hardReset)
	{
		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 == 'submenuHolder_'+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 == 'submenuHolder_'+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;
}