
var MENU_ITEM_HOVER_CLASS = "hover";
var MENU_ID = 'primary-menu';

function Menu()
{
	this.getMenuElement = function() { return document.getElementById(MENU_ID); }
	
	this.focusedItem = null;
	
	this.hasFocusedItem = function() { return this.focusedItem != null }
	this.getFocusedItem = function() { return this.focusedItem; }
	this.setFocusedItem = function(item) { this.focusedItem = item; }
	this.clearFocusedItem = function() { this.setFocusedItem(null); }
	
	this.openMenuForItem = function(item)
	{
		if ( this.hasFocusedItem() ) this.clearHoverClassForItem(this.getFocusedItem());
		item.className += ' ' + MENU_ITEM_HOVER_CLASS;
	}
	
	this.clearHoverClassForItem = function(item)
	{
		item.className = item.className.replace(MENU_ITEM_HOVER_CLASS, "");
	}
	
	this.closeMenuForItem = function(item)
	{
		this.clearHoverClassForItem(item);
	}
	
	this.menuItemMouseOver = function(item)
	{
		this.openMenuForItem(item);
	}
	
	this.menuItemMouseOut = function(item)
	{
		this.closeMenuForItem(item);
		if ( this.hasFocusedItem() )
		{
			this.openMenuForItem(this.getFocusedItem());
		}
	}
	
	this.menuItemFocus = function(item)
	{
		this.openMenuForItem(item);
		this.setFocusedItem(item);
	}
	
	this.menuItemBlur = function(item)
	{
		this.closeMenuForItem(item);
		this.clearFocusedItem();
	}
}

function initMenu()
{
	var menu = new Menu();
	var liArray = document.getElementById('primary-menu').getElementsByTagName('LI');
	for ( var i = 0; i < liArray.length; i++ )
	{
		var li = liArray[i];
		li.onfocus = function() { menu.menuItemFocus(this); };
		li.onblur = function() { menu.menuItemBlur(this); };
		li.onmouseover = function() { menu.menuItemMouseOver(this); };
		li.onmouseout = function() { menu.menuItemMouseOut(this); };
	}
}

if ( window.attachEvent )
{
	window.attachEvent('onload', initMenu);
}
else
{
	window.addEventListener('load', initMenu, true);
}