//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) {
		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);
		}
	}
}