
var hideTimer = null;
var rootMenu = null;
var menuId = -1;
var menuItems = new Array();

if (!document.getElementById)
	document.getElementById = function() { return null; }
	
function MenuItem(title, href)
{
	menuId++;

	this.id = menuId;
	this.title = title;
	this.href = href;
	this.menuItems = new Array();
}

function writeMenus()
{	
	document.write('<div id="menuList">');

	var index;

	for (index = 0 ; index < menuItems.length ; index++)
	{
		writeMenuItems(menuItems[index]);
		initializeMenu(menuItems[index].id);
	}

	document.write('</div>');
}

function writeMenuItems(menuItem)
{
	var index;
	
	if (menuItem.menuItems.length > 0)
	{
		document.write('<ul id="menu' + menuItem.id + '">');
		for (index = 0 ; index < menuItem.menuItems.length ; index++)
		{
			var item = menuItem.menuItems[index];

			document.write('<li><a href="' + item.href + '" id="actuator' + item.id + '"' );

			if (item.menuItems.length > 0)
				document.write(' class="subMenu"');

			document.write('>' + item.title + '</a></li>');
		}
		document.write('</ul>');

		for (index = 0 ; index < menuItem.menuItems.length ; index++)
		{
			var item = menuItem.menuItems[index];

			writeMenuItems(item);

			if (item.menuItems.length > 0)
				initializeSubMenu(menuItem.id, item.id);
			else
				initializeMenuItem(menuItem.id, item.id);
		}
	}	
}

function initializeMenu(menuId) 
{
	var menu = document.getElementById("menu" + menuId);
	var actuator = document.getElementById("actuator" + menuId);

	if (actuator == null) return;

	actuator.onmouseover = function() 
	{
		clearDelayedHide();
		hideMenus();

		if (menu != null)
		{
			rootMenu = menu;

			menu.style.left = getRealLeft(actuator) - 1 + "px";
			menu.style.top = getRealTop(actuator) + actuator.offsetHeight + - 18 + "px";
			menu.style.visibility = "visible";
		}
	}
	actuator.onmouseout = function() { setDelayedHide(); }

	if (menu != null)
	{
		menu.onmouseover = function() { clearDelayedHide(); }
		menu.onmouseout = function() { setDelayedHide(); }
		menu.activeMenu = null;
	}
}

function initializeSubMenu(parentId, menuId)
{
	var parentMenu = document.getElementById("menu" + parentId);
	var menu = document.getElementById("menu" + menuId);
	var actuator = document.getElementById("actuator" + menuId);

	if (menu == null || actuator == null || parentMenu == null) return;

	actuator.onmouseover = function()
	{
		clearDelayedHide();
		hideSubMenus(parentMenu);

		realLeft = getRealLeft(actuator) + actuator.offsetWidth + 1;
		realTop = getRealTop(actuator)

		if ((realLeft + menu.offsetWidth) > getAvailWidth())
			realLeft = realLeft - menu.offsetWidth * 2 - 2;

		menu.style.left = realLeft + "px";
		menu.style.top = realTop + "px";
		menu.style.visibility = "visible";

		parentMenu.activeMenu = menu;
	}
	
	menu.onmouseover = function() { clearDelayedHide(); }
	menu.onmouseout = function() { setDelayedHide(); }
}

function initializeMenuItem(parentId, menuId)
{
	var menu = document.getElementById("menu" + parentId);
	var item = document.getElementById("actuator" + menuId);

	if (menu == null || item == null) return;

	item.onmouseover = function()
	{
		clearDelayedHide();
		hideSubMenus(menu);
	}
}

function setDelayedHide()
{
	hideTimer = window.setTimeout("hideMenus()", 500);
}

function clearDelayedHide()
{
	if (hideTimer) 
	{
		window.clearTimeout(hideTimer);
		hideTimer = null;
	}
}

function hideMenus()
{
	if (rootMenu != null)
	{
		rootMenu.style.visibility = "hidden";
		hideSubMenus(rootMenu);
	}
}

function hideSubMenus(parentMenu)
{
	menu = parentMenu.activeMenu;

	while (menu != null)
	{
		menu.style.visibility = "hidden";
		menu = menu.activeMenu;
	}
}

function getRealLeft(el) 
{
	xPos = el.offsetLeft;
	tempEl = el.offsetParent;
	while (tempEl != null) 
	{
		xPos += tempEl.offsetLeft;
		tempEl = tempEl.offsetParent;
	}
	return xPos;
}

function getRealTop(el) 
{
	yPos = el.offsetTop;
	tempEl = el.offsetParent;
	while (tempEl != null) 
	{
		yPos += tempEl.offsetTop;
		tempEl = tempEl.offsetParent;
	}
	return yPos;
}

function getAvailWidth()
{
		var width;
		
		width = document.body.clientWidth;
		
		return width;
}
