﻿Menus = new Object();

// initializes the menu
Menus.initMenu = function(menu)
{
	var items = menu.getElementsByTagName("li");
	var menus = menu.getElementsByTagName("ul");
	
	for (var i = 0; i < items.length; i++)
	{
		var item = items[i];
		
		item.onmouseout = function(){this.className = this.className.replace(/\s*hover/, "");}
		item.onmouseover = function(){this.className += " hover";}
	}
	
	for (var i = 0; i < menus.length; i++)
	{
		Menus.setMenuWidth(menus[i]);
	}
}

// executes when the page has loaded
Menus.load = function()
{
	if (document.getElementsByTagName)
	{
		var className = /horizontal|vertical/gi;
		var menus = document.getElementsByTagName("ul");
		
		for (var i = 0; i < menus.length; i++)
		{
			var menu = menus[i];
			
			if (className.test(menu.className))
			{
				Menus.initMenu(menu);
			}
		}
	}
}

// sets the menu's position
Menus.setMenuPosition = function(menu)
{
	var cnode = menu.offsetParent;
	var depth = 0;
	var menux = menu.offsetLeft + menu.offsetWidth;
	
	while (cnode != null && cnode.nodeName != "DIV")
	{
		menux += cnode.offsetLeft;
		depth += 1;
		cnode = cnode.offsetParent;
	}
	
	if (cnode != null)
	{
		var mx = menux;
		var tx = cnode.offsetWidth;

		if (depth > 1)
		{
			mx += 1;
		}
				
		if (mx > tx)
		{
			menu.style.left = (tx - mx) + "px";
		}
	}
}

// sets a menu's maximum width
Menus.setMenuWidth = function(menu)
{
	var items = menu.getElementsByTagName("li");
	var width = menu.parentNode.offsetWidth;
	
	for (var i = 0; i < items.length; i++)
	{
		if (items[i].parentNode == menu)
		{
			width = Math.max(items[i].offsetWidth, width);
			items[i].style.width = "100%";
		}
	}

	menu.style.width = width + "px";
	
	Menus.setMenuPosition(menu);
}


// check for common script
if (!Tactica)
{
	alert("Required script 'scripts/tactica.js' is missing. Did you forget a script tag?");
}

// add load function
Tactica.addLoadFunction(Menus.load);