window.onload	= function(){
	list_menu.init()
} // hooks up mouseover and other events.
			
// based on a function from scottandrew.com. To Scott when you read this: You've got a nice site!
catchEvent		= function( object, type, callback ){
	if( object.addEventListener ){
		object.addEventListener( type, callback, false )
	}else{
		object.attachEvent( 'on'+type, callback)
	}
}

list_menu = {
	_inited		: false,
	_levels		: [],
	_timeout	: 0,
				
	_showMenu	: function( source ){
		var parentMenu = source.parentNode.parentNode
		var childMenu  = source.parentNode.getElementsByTagName("ul")[0]

		// close menus which should not be up
		for(l=this._levels.length-1;l!=-1;l--){
			var curLevel = this._levels[l]
			if(curLevel.menu!=parentMenu){
				curLevel.menu.style.display = 'none'
				curLevel.source.className=''
				this._levels.length = l
			}
			if(curLevel.parent==parentMenu||curLevel.menu==parentMenu){
				break;
			}
		}

		// move menu to the correct position, and set the className
		source.className = 'openMenu'
		childMenu.style.visibility='hidden'
		childMenu.style.display='block'
		if(this._levels.length==0){
			childMenu.style.left = source.offsetLeft +'px'
			childMenu.style.top = '1.5em'
		}else{
			childMenu.style.top = (source.offsetTop+6) + "px"
			childMenu.style.left= -(childMenu.getElementsByTagName("a")[0].offsetWidth-4) + 'px'
		}
		childMenu.style.visibility=''
					
		// add the menu to our menu stack.
		this._levels[this._levels.length] = ( { parent:parentMenu, menu:childMenu, source:source} )
	},
				
	_close		: function(fromLevel){
		fromLevel = parseInt(fromLevel) || 0
		for( var l=fromLevel;l!=list_menu._levels.length; l++){
			var level =list_menu._levels[l]
			level.menu.style.display='none'
			level.source.className = ''
		}
		list_menu._levels.length = 0
	},
				
	init		: function(){
		if( list_menu._inited ){
			return
		}
		list_menu._inited = true;
		// replace text titles with a titles, so the stylesheet can do it's thing
		var lis = document.getElementById("menu").getElementsByTagName("li")
		for( var i=0;i!=lis.length;i++){
			var li = lis[i]
			var item = li.firstChild
			if( item.nodeValue != null && item.nodeValue.replace(/\W/gi,"").length>1){
				var a = document.createElement("a")
				a.setAttribute("href","#")
				a.innerHTML = item.nodeValue
				li.replaceChild(a,item)
			}
		}
		
		// hook events to the menus with subs				s
		var menus = document.getElementById("menu").getElementsByTagName("ul")
		for( var m=0;m!=menus.length;m++){
			captureMouseOver( menus[m].parentNode.getElementsByTagName("a")[0] )
		}
					
		function captureMouseOver( node ){
			catchEvent( node , 'mouseover', function(e){ list_menu._showMenu( node ) } )
		}
		
		// add visualfx to top menu itmes
		var fxs = [':','*','/','#','.'], fxid = 0
		var items = document.getElementById("menu").childNodes
		for( i=0;i!=items.length;i++ ){
			if( items[i].nodeType ==1){
				var fx = document.createElement("span")
				fx.innerHTML = fxs[fxid++]
				
				var a = items[i].getElementsByTagName("a")[0]
				a.insertBefore( fx , a.childNodes[0] )
			}
		}
		
		//close the menu when user clicks document or resizes window
		catchEvent( document.body , 'click', list_menu._close )
		window.onresize = list_menu._close
	}
}