var g_menus = new Object();

function menu_showPopup(parentId, event, _submenuObj, parentObj, position)
{
	var _menu = g_menus["menu" + parentId];
	var submenuObj = _submenuObj;
	
	if (!_menu)
	{
		g_menus["menu" + parentId] = new Object();
		
		_menu = g_menus["menu" + parentId];
	}
	
	if (_menu.doExit)
	{
		window.clearTimeout(_menu.timerHandle);
		_menu.doExit = false;
	}

	// hide current active submenu
	if (!submenuObj || _menu.currentSubmenu != submenuObj)
		menu_exitPopup(parentId);
	
	// show selected submenu
	if (submenuObj && _menu.currentSubmenu != submenuObj)
	{
		submenuObj.style.display = "";
		var x = getEventX(event);
		var y = getEventY(event);
		var dim = getScreenDimensions();
		if (position == "right")
		{
			x = parentObj.offsetWidth + getScreenPosX(parentObj);
			y = getScreenPosY(parentObj);
		}
		else if (position == "left")
		{
			x = getScreenPosX(parentObj) - submenuObj.offsetWidth;
			y = getScreenPosY(parentObj);
		}
		else if (position == "bottom")
		{
			x = getScreenPosX(parentObj);
			y = getScreenPosY(parentObj) + parentObj.offsetHeight;
		}
		else if (position == "top")
		{
			x = getScreenPosX(parentObj);
			y = getScreenPosY(parentObj) - submenuObj.offsetHeight;
		}
		
		if (document.all)
		{
			x -= dim.scrollLeft;
			y -= dim.scrollTop;
		}
		
		var width  = submenuObj.offsetWidth;
		var height = submenuObj.offsetHeight;
		// ensure visiblity of menu
		var availHeight = document.body.offsetHeight-10;
		if (y-document.body.scrollTop + height > availHeight)
			y = availHeight + document.body.scrollTop - height; 
			
		var availWidth = document.body.offsetWidth-10;
		if (x-document.body.scrollLeft + width > availWidth)
			x = availWidth + document.body.scrollLeft - width;
		
		submenuObj.style.top =  (y-getScreenPosY(submenuObj.offsetParent)) + "px";
		submenuObj.style.left = (x-getScreenPosX(submenuObj.offsetParent)) + "px";
		
		_menu.highlighted = parentObj;
	}

	_menu.currentSubmenu = submenuObj;
}

function menu_exitPopup(parentId)
{
	var _menu = g_menus["menu" + parentId];
	if (!_menu)	
		return;
		
	if (_menu.currentSubmenu)
	{
		// exit the submenu's submenu
		menu_exitPopup(_menu.currentSubmenu.id);

		_menu.currentSubmenu.style.display = "none";
		_menu.highlighted.className = "normal";
		
	}
	_menu.currentSubmenu = null;
	_menu.highlighted = null;
}

function menu_exitPopup2(parentId)
{
	var _menu = g_menus["menu" + parentId];
	if (!_menu || !_menu.doExit)	
		return;

	menu_exitPopup(parentId);
}

function menu_exitPopupDelayed(parentId, event)
{
	var _menu = g_menus["menu" + parentId];
	if (!_menu)
		return;
		
	if (!_menu.doExit)
	{
		_menu.doExit = true;
		var callback = function() { menu_exitPopup2(parentId); }
		_menu.timerHandle = window.setTimeout(callback, 1000);
	}
}

function menu_cancelExit(parentId, event)
{
	var _menu = g_menus["menu" + parentId];
	if (!_menu)	
		return;

	_menu.doExit = false;
	window.clearTimeout(_menu.timerHandle);
}

function menu_mouseOver(obj, parent, id, event)
{
	obj.className="hover"; 
	menu_showPopup(parent, event, obj.childNodes[1], obj, "right"); 
}

function menu_mouseOut(obj, parent, id, event)
{
	var _menu = g_menus["menu" + parent];
	if (!_menu || !_menu.currentSubmenu)
		obj.className="normal";
}
