


/*
	list menu script by Brothercake (http://www.brothercake.com/)
	you may use the code providing this message remains intact
*/




//trigger initialiser
function menuInitTrigger(menuTrigger)
{

	//null menu object
	var menuMenu = null;

	//if menu exists
	if(menuTrigger.getElementsByTagName('ul').length > 0)
	{
		//get menu object
		menuMenu = menuTrigger.getElementsByTagName('ul')[0];
	}




	//bind menu mouse-opener
	menuTrigger.onmouseover = function()
	{
		this.menuShowMenu();
	}

	//bind menu mouse-closer
	menuTrigger.onmouseout = function(e)
	{
		this.menuHideMenu(e);
	}
	
	


	//menu opening function
	menuTrigger.menuShowMenu = function()
	{

		//add hover classname
		menuTrigger.getElementsByTagName('a')[0].className = 'hover';

		//if trigger has menu
		if(menuMenu != null)
		{
			//tweak top position
			menuMenu.style.marginTop = (0-menuTrigger.offsetHeight)+'px';

			//show menu
			menuMenu.style.visibility = 'visible';

		}

	}



	//menu mouse-closing function
	menuTrigger.menuHideMenu = function(e)
	{
		if(!e) { e = window.event; e.relatedTarget = e.toElement; }

		//if event came from outside current trigger branch
		if(!menuTrigger.contains(e.relatedTarget))
		{
			//remove hover classname
			menuTrigger.getElementsByTagName('a')[0].className = '';

			//if trigger has menu
			if(menuMenu != null)
			{
				//hide menu
				menuMenu.style.visibility = 'hidden';
			}
		}
	}




	//prototyped contains method
	//obviously not necessary for win/ie5, and errs in mac/ie5 anyway
	//not actually necessary for O7 either .. but I'm superstitious
	if(!menu.ie)
	{
		//contains method by jkd (http://www.jasonkarldavis.com/)
		menuTrigger.contains = function(node)
		{
			if (node == null) { return false; }
			if (node == this) { return true; }
			else { return this.contains(node.parentNode); }
		}
	}


}












//navbar object constructor
function menuNavbar(ulTree)
{
	//ul tree
	menu.tree = ulTree;

	//get trigger elements
 	menu.listItems = menu.tree.getElementsByTagName('li');
 	menu.listLen = menu.listItems.length;

 	//initialise
 	for(var i=0; i<menu.listLen; i++)
 	{
 		menuInitTrigger(menu.listItems[i]);
 	}
}







//menu tree
var tree = null;

//menu script object
var menu = new Object;

//identify support level
menu.ua = navigator.userAgent.toLowerCase();
menu.op6 = (menu.ua.indexOf("opera 6")!=-1 || menu.ua.indexOf("opera/6")!=-1);
menu.dom = (typeof document.getElementById!="undefined" && typeof document.createElement!="undefined" && !menu.op6);

//identify ie
menu.ie = (menu.dom&&typeof document.all!="undefined" && typeof window.opera=="undefined");

//initialise
window.onload = function()
{

	//if browser is supported
	if(menu.dom)
	{

		//tree object
		tree = document.getElementById('menu');
		
		//if it exists
		if(tree != null)
		{
			//create navbar object
			menu.nav = new menuNavbar(tree)
		}

	}


}









