var timeOut;

var fadeDelay = 750;

function displayMenu(hoverType, globalCode, menuId)
{
	if(hoverType == '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('sm_'+menuId))
		{
			timeOut = setTimeout("hideMenu('"+globalCode+"','"+menuId+"')", fadeDelay);
			E('sm_'+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('sm_'+menuId))
				{
					timeOut = setTimeout("hideMenu('"+globalCode+"','"+menuId+"')", fadeDelay);
					E('sm_'+menuId).style.display = 'block';
				}

				// hide/unhide menu normal/hover state:
				menuNormal.style.display = (hoverType == 'in') ? 'none' : 'block';
				menuHover.style.display = (hoverType == 'in') ? 'block' : 'none';
			}
			else
			{
				menuNormal.style.display = 'block';
				menuHover.style.display = 'none';
			}
		}
	}
}

function displaySubmenu(hoverType, globalCode, menuId)
{
	if(hoverType == '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 == 'in') ? 'none' : 'block';
				menuHover.style.display = (hoverType == '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('sm_'+menuId))
	{
		E('sm_'+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)
{
	if(currentTarget.id == 'sm_'+menuIndex || currentTarget.id == 'mm_'+menuIndex+'_holder')
	{
		timeOut = setTimeout("hideMenu('"+globalCode+"','"+menuIndex+"')", fadeDelay);

		return true;
	}
	else
	{
		// loop parents node:
		tempTarget = currentTarget.parentNode;

		while(tempTarget)
		{
			if(tempTarget.id == 'sm_'+menuIndex || tempTarget.id == 'mm_'+menuIndex+'_holder')
			{
				timeOut = setTimeout("hideMenu('"+globalCode+"','"+menuIndex+"')", fadeDelay);

				return true
				break;
			}
			else
			{
				tempTarget = tempTarget.parentNode;
			}
		}
	}

	return false;
}
