var Web = Web || {};
Web.TabBarMenu = Web.TabBarMenu || {};

Web.TabBarMenu.loadTabBarMenu = function()
{
	if (document.getElementsByTagName)
	{
		var tabBarMenu = document.getElementById("TabBarMenu");
		if (tabBarMenu)
		{
			var listitems = tabBarMenu.getElementsByTagName("li");
			
			for (var i = 0, n = listitems.length; i < n; i++)
			{
				if (listitems[i].className && listitems[i].className.match(/\btab\b/))
				{
					// mouse events
					var tab = listitems[i];
					
					if (typeof(tab.onmouseenter) != "undefined")
					{
						tab.onmouseenter = Web.TabBarMenu.openMenuWithFilter;
						tab.onmouseleave = Web.TabBarMenu.closeMenu;
					}
					else
					{
						tab.onmouseover = Web.TabBarMenu.openMenu;
						tab.onmouseout = Web.TabBarMenu.closeMenu;
					}
					// keyboard events
					var links = tab.getElementsByTagName("a");
					
					for (var j = 0, m = links.length; j < m; j++)
					{
						var link = links[j];
						link.tab = tab;
						
						link.onfocus = Web.TabBarMenu.openMenu;
						link.onblur = Web.TabBarMenu.closeMenu;
						link.onkeydown = Web.TabBarMenu.onMenuKeyPress;
					}
				}
			}
		}
	}
},

Web.TabBarMenu.openMenuWithFilter = function()
{
	var tab = this;
	var menu = this.getElementsByTagName("ul")[0];
	
	if (tab && tab.className && menu)
	{
		menu.style.visibility = "hidden";
		tab.className = tab.className + " open";
		
		try
		{
			menu.style.filter = "progid:DXImageTransform.Microsoft.GradientWipe(GradientSize=.1, wipestyle=1, motion=forward)";
			menu.filters[0].apply();
			menu.style.visibility = "visible";
			menu.filters[0].play();
		}
		catch(e)
		{
			menu.style.visibility = "visible";		
		}
	}
}

Web.TabBarMenu.openMenu = function()
{
	var tab = this.tab || this;
	
	if (tab && tab.className)
	{
		tab.className = tab.className + " open";
	}
}

Web.TabBarMenu.closeMenu = function()
{
	var tab = this.tab || this;
	
	if (tab && tab.className)
	{
		tab.className = tab.className.replace(" open", "");
	}
}

Web.TabBarMenu.onMenuKeyPress = function(e)
{
	var keyEvent = Utility.Events.getEvent();

	switch(keyEvent.keyCode)
	{
		case 37: //left arrow
			var menuItem = Web.TabBarMenu.isTopLevelMenuItem(this) == true ? Utility.DOM.getPreviousSiblingElement(this.parentNode) : Utility.DOM.getPreviousSiblingElement(this.parentNode.parentNode.parentNode);
			
			if(menuItem != null)
			{
				menuItem.getElementsByTagName("a")[0].focus();
			}
			
			break;
		case 38: //up arrow
			//move focus to the previous menu item in the column.
			//if the user is on a top level item move focus to the last menu item in the submenu.
			var menuItem;
			
			if(Web.TabBarMenu.isTopLevelMenuItem(this) == true)
			{
				menuItem = this.parentNode.getElementsByTagName("li")[this.parentNode.getElementsByTagName("li").length - 1];
			}

			//see if the link is the first one in the submenu.			
			else if(this.parentNode.parentNode.getElementsByTagName("li")[0].getElementsByTagName("a")[0] == this)
			{
				menuItem = this.parentNode.parentNode.parentNode;
			}
			
			else
			{
				menuItem = Utility.DOM.getPreviousSiblingElement(this.parentNode);
			}

			if(menuItem != null)
			{
				menuItem.getElementsByTagName("a")[0].focus();
			}
			
			break;
		case 39: //right arrow
			//move focus to the top menu item in the column to the right.
			var menuItem = Web.TabBarMenu.isTopLevelMenuItem(this) == true ? Utility.DOM.getNextSiblingElement(this.parentNode) : Utility.DOM.getNextSiblingElement(this.parentNode.parentNode.parentNode);
			
			if(menuItem != null)
			{
				menuItem.getElementsByTagName("a")[0].focus();
			}
			
			break;
		case 40: //down arrow
			//move focus to the next menu item in the column.
			//if the user is on the last menu item move focus to the top level menu item.
			
			var menuItem;
			
			if(Web.TabBarMenu.isTopLevelMenuItem(this) == true)
			{
				menuItem = this.nextSibling;
			}
			
			//see if it is the last link in the menu.
			else if(this.parentNode.parentNode.getElementsByTagName("a")[this.parentNode.parentNode.getElementsByTagName("a").length - 1] == this)
			{
				menuItem = this.parentNode.parentNode.parentNode;
			}
			
			else
			{
				menuItem = Utility.DOM.getNextSiblingElement(this.parentNode);
			}
			
			if(menuItem != null)
			{
				menuItem.getElementsByTagName("a")[0].focus();
			}

			break;
		default:
			return true;
	}

	keyEvent.preventDefault();
	keyEvent.stopPropagation();
	return false;
}

///	isTopLevelMenuItem - Returns true if the link passed in is a top level menu item.
Web.TabBarMenu.isTopLevelMenuItem = function(menuItemLink)
{
	return menuItemLink.parentNode.parentNode == document.getElementById("TabBarMenu");
}