var MENU_LOCATION_UNDER = 1;
var MENU_LOCATION_SIDE = 2;

var MENU_PANEL_NAME = "pnlMenu";

var oMenuTimer = null;
var MenuOpenItems = new Array();

var MenuPanels = new Array();

function ShowMenu(pTarget, pSource, pPlace) { ShowSubMenu(pTarget, null, pSource, pPlace, 0, 0); }
function HideMenu() { oMenuTimer = setTimeout("HideSubMenuAll()"); }
function HideMenuTimeout(pTimeout) { oMenuTimer = setTimeout("HideSubMenuAll()", pTimeout); }

function ShowSubMenu(pTarget, pParent, pSource, pPlace, pOffsetX, pOffsetY) 
{
	clearTimeout(oMenuTimer);
	pTarget = GetObject(MENU_PANEL_NAME + pTarget);
	
	if (!FindItem(MenuOpenItems, pTarget))
	{
		if (pParent != null) { HideSubMenu(pParent); }
		else { HideSubMenuAll(); }

		SetItemHover(pSource);

		if (pPlace == MENU_LOCATION_UNDER)
		{
			pTarget.style.left = GetPosX(pSource) + pOffsetX;
			pTarget.style.top = GetPosY(pSource) + GetHeight(pSource) + pOffsetY;

			pTarget.style.display = "block";
		}
		else if (pPlace == MENU_LOCATION_SIDE)
		{
			var SourcePosX = GetPosX(pSource);
			var SourceWidth = GetWidth(pSource);
			
			pTarget.style.top = GetPosY(pSource) + pOffsetY;
			pTarget.style.left = SourcePosX + SourceWidth + pOffsetX;
			
			pTarget.style.display = "block";
			
			if ((SourcePosX + SourceWidth + GetWidth(pTarget)) >= document.body.offsetWidth)
			{
				pTarget.style.left = 0;
				pTarget.style.left = SourcePosX - GetWidth(pTarget) - pOffsetX;
			}
		}

		var ItemCount = MenuOpenItems.length;
		MenuOpenItems[ItemCount] = pTarget;
	}
}

function HideSubMenuAll() 
{
	clearTimeout(oMenuTimer);

	var ItemCount = MenuOpenItems.length;
	var oLastOpen = MenuOpenItems[ItemCount - 1];
	
	if (oLastOpen)
	{ 
		oLastOpen.style.display = "none"; 
		SetItemOut(oLastOpen);
	}

	MenuOpenItems = MenuOpenItems.slice(0, ItemCount - 1);
	ItemCount = MenuOpenItems.length;
	
	if (ItemCount > 0) { HideSubMenuAll(); }
	else if (oLastOpen) 
	{ 
		for (var i=0;i<MenuPanels.length;i++)
			SetItemOut(MenuPanels[i]);
	}
}

function HideSubMenu(pTarget)
{
	clearTimeout(oMenuTimer);
	
	pTarget = GetObject(MENU_PANEL_NAME + pTarget);
	
	var Count = -1;
	
	for (var i=0;i<MenuOpenItems.length;i++) 
	{
		if (Count >= 0)
		{
			MenuOpenItems[i].style.display = "none";
			SetItemOut(MenuOpenItems[i]);
		}
		else if (MenuOpenItems[i] == pTarget) { Count = i; }
	}
	
	if (Count != -1) { MenuOpenItems = MenuOpenItems.slice(0, ++Count); }
	if (pTarget != null) { SetItemOut(pTarget); }
}

function SetItemHover(pItem)
{ 
	clearTimeout(oMenuTimer); 
	pItem.id = "TDhover"; 
}
function SetItemOut(pRootItem)
{
	var HoverTD = pRootItem.getElementsByTagName("td");
	for (var i=0;i<HoverTD.length;i++)
	{ 
		if (HoverTD[i].id == "TDhover")
			HoverTD[i].id = "";
	}
}

function RegisterMenuPanel(pPanel) { MenuPanels[MenuPanels.length] = GetObject(pPanel); }

