// namespace for top menu related scripts
function TopMenu(){};
////////////////////////////////////
// handle the mouse enter event
function TopMenu.MouseEnter(oMenuItem,window)
{	
	TopMenu.Initialize();
	// set the current active item
	TopMenu.ActiveMenuItem = oMenuItem;
	// clear time out is one exists
	TopMenu.TopWindow.clearTimeout(TopMenu.iHideTimeout);

	TopMenu.MenuItemChangeState(oMenuItem,"img","On","src");
	TopMenu.MenuItemChangeState(oMenuItem,"class","On","className");
	TopMenu.MenuItemChangeState(oMenuItem.style,"style","On","cssText");
}
//////////////////////////////////////
// handle the mouse leave event
function TopMenu.MouseLeave(oMenuItem,window)
{	
	TopMenu.Initialize();
	
	if(TopMenu.ActiveMenuItem == oMenuItem)
	{
		TopMenu.ActiveMenuItem = null;
	}
	// clear time out is one exists
	TopMenu.TopWindow.clearTimeout(TopMenu.iHideTimeout);

	TopMenu.MenuItemChangeState(oMenuItem,"img","Off","src");
	TopMenu.MenuItemChangeState(oMenuItem,"class","Off","className");
	TopMenu.MenuItemChangeState(oMenuItem.style,"style","Off","cssText");
	// hide after 1 sec if not entered to another
	TopMenu.iHideTimeout = TopMenu.TopWindow.setTimeout("TopMenu.HideAll()",1000);
}
//////////////////////////////////
// hides all the menus
function TopMenu.HideAll()
{
	if(TopMenu.ActiveMenuItem != null)return;
	try{TopMenu.TopWindow.oCtxPopup.hide()}catch(e){}
}
///////////////////////////////////////////////////////////
// opens the current item sub menu if there is one
function TopMenu.SubMenuOpen(oMenuItem,oWindow)
{
	TopMenu.Initialize();
	// clear time out is one exists
	clearTimeout(TopMenu.iSubMenuOpenTimeout);
	// set method arguments
	TopMenu.SubMenuOpen.oMenuItem = oMenuItem;
	TopMenu.SubMenuOpen.oWindow = oWindow;
	// set open timeout
	TopMenu.iSubMenuOpenTimeout  = TopMenu.TopWindow.setTimeout("TopMenu._SubMenuOpen(TopMenu.SubMenuOpen.oMenuItem,TopMenu.SubMenuOpen.oWindow)",1);
}
//////////////////////////////////////////////
// opens the current item sub menu if there is one
function TopMenu._SubMenuOpen(oMenuItem,oWindow)
{
	try{
		// try to get sub menu
		var oSubMenu = TopMenu.Menus.Hash[oMenuItem.category];
		// if sub menu was found
		if(oSubMenu)
		{
			if(oWindow.oCtxPopup) oWindow.oCtxPopup.hide();
			// create the popup object if needed
			if(!oSubMenu.oCtxPopup) oSubMenu.oCtxPopup = oWindow.createPopup();
			// get local reference to popup inner references
			var oCtxPopup	= oSubMenu.oCtxPopup;
			var oPopupDoc	= oCtxPopup.document
			var oPopWin		= oPopupDoc.parentWindow;
			var oPopBody	= oPopupDoc.body;
		
			// create and set the stylesheet
			with(oPopupDoc.createStyleSheet())
			{
				// set the css style sheet content
				cssText = TopMenu.ActiveStyleSheet.cssText;
			}
			// set the reference to the topmenu code
			oPopWin.TopMenu	= TopMenu;
			// get the popup size
			var iHeight = oSubMenu.offsetHeight;
			var iWidth	= oSubMenu.offsetWidth;
			var iPosX	= 0;
			var iPosY	= 0;

			// if is beside layout open submenu beside menu
			if(oMenuItem.submenu=="beside_me")
			{	
				// if right to left layouting
				if(oMenuItem.dir=="rtl"){ 
					//iPosX = -1*iWidth+1;
					iPosX = 500;
				}
				// if left to right layouting
				else{
					//if(!isNaN(oMenuItem.offsetWidth)) iPosX = oMenuItem.offsetWidth - 1;
					if(!isNaN(oMenuItem.offsetWidth)) iPosX = 500;
				}
			}
			// else open submenu under menu
			else{
				// if right to left layouting
				if(oMenuItem.dir=='rtl'){ 
					if(!isNaN(oMenuItem.offsetWidth)) iPosX = oMenuItem.offsetWidth - iWidth;
					//if(!isNaN(oMenuItem.offsetWidth)) iPosX = 0;
				}
				else{
					//if(!isNaN(oMenuItem.offsetWidth)) iPosX = iWidth;
					if(!isNaN(oMenuItem.offsetWidth)) iPosX = 0;
				}
				if(!isNaN(oMenuItem.offsetHeight)) iPosY = oMenuItem.offsetHeight;

				iPosY=iPosY+TopMenu.iToolbarSubmenuOffset;
			}
			// cause the window to focus the body
			oPopBody.tabIndex=0;

			// set the sub menu html
			oPopBody.innerHTML = oSubMenu.outerHTML;
			// set global window reference
			oWindow.oCtxPopup = oCtxPopup;
			// show context menu
			oCtxPopup.show(iPosX, iPosY, iWidth, iHeight, oMenuItem);
		}
		else
		{
			// if there is an active popup
			if(oWindow.oCtxPopup)
			{
				// hide current sub popup
				oWindow.oCtxPopup.hide();
			}
		}
	}
	catch(e){}
}
/////////////////////////////////////
// handle the mouse leave event
function TopMenu.MenuItemChangeState(oMenuItem,sPrefix,sMode,sAttribute)
{
	// if attribute is defined
	if(oMenuItem[sPrefix+sMode]) oMenuItem[sAttribute]=oMenuItem[sPrefix+sMode];
}
///////////////////////////////////////////////////////////
// handle the onclick event
function TopMenu.MenuItemSelect(oMenuItem,window)
{
	TopMenu.sActionHref = ''+oMenuItem.href;
	TopMenu.sActionTarget = ''+oMenuItem.target;
	try{TopMenu.TopWindow.oCtxPopup.hide();}catch(e){}
	TopMenu.TopWindow.open(TopMenu.sActionHref,TopMenu.sActionTarget);
}
/////////////////////////////////////////////
// bind the controls to the TopMenu engine
function TopMenu.Initialize()
{
	// if allready initialized
	if(TopMenu.bInitialized) return;
	// indicate initialized
	TopMenu.bInitialized = true;
	// get toolbar reference
	TopMenu.Toolbar = window.__Toolbar?window.__Toolbar:{};
	// set default toolbar submenu offset
	TopMenu.iToolbarSubmenuOffset = 0;
	// tmp local variable
	var iToolbarSubmenuOffset = 0;
	// check valid value
	if(!isNaN(iToolbarSubmenuOffset = parseInt(TopMenu.Toolbar.submenuOffset)))
	{
		TopMenu.iToolbarSubmenuOffset = iToolbarSubmenuOffset;
	}
// set reference to top window
	TopMenu.TopWindow = window;
	// get the TopMenu active style sheet
	for(index=0;index<document.styleSheets.length;index++)
	{
		// check if right style sheet
		if(document.styleSheets(index).title=="TopMenu")
		{
			// set the active style sheet
			TopMenu.ActiveStyleSheet = document.styleSheets(index);
			break;
		}
	}
	// get toolbar menu items object
	TopMenu.ToolbarItems	= {};
	TopMenu.ToolbarItems.Item	= window.__ToolbarItem;
	try{
		TopMenu.ToolbarItems.Count = TopMenu.ToolbarItems.Item.length;
	}catch(e){}
	try
	{
		// get menu items object
		TopMenu.Menus	= {};
		TopMenu.Menus.Item	= window.__Menu;
		TopMenu.Menus.Count = TopMenu.Menus.Item.length;
		TopMenu.Menus.Hash	= {};

		// loop all menus
		for(var index=0;index<TopMenu.Menus.Count;index++)
		{
			// get the current control
			var current = TopMenu.Menus.Item[index];

			// insert current menu to hash
			TopMenu.Menus.Hash[current.category] = current;
		}
		// get menu items object
		TopMenu.MenuItems	= {};
		TopMenu.MenuItems.Item	= window.__MenuItem;
		TopMenu.MenuItems.Count = TopMenu.MenuItems.Item.length;
	}catch(e){}	
}