// Settings can be made like this, setting the className of the main menu, and the mouseout delay in milliseconds:
// SimpleMenu.Settings('hoofdmenu', 1000)

var SimpleMenu =
{
	Current: null,
	CurrentClosing: null,
	Delay: 100,
	ClassName: 'main',

	/// Do settings	
	/// - className is the given main menu css-class (default "main")
	/// - delay is the hiding delay at mouseout, in milliseconds (default 100)
	Settings: function(className, delay)
	{
		if (className) this.ClassName = className
		if (delay) this.Delay = delay
	},
	
	/// Initialize
	Init: function()
	{
		var mainUls = this.GetMainMenus()
		for(var i=0; i<mainUls.length; i++)
		{
			this.SetUpMenu(mainUls[i])
		}
	},
	
	/// Gets all UL elements, with class="main", of the class defined in the init.
	GetMainMenus: function()
	{
		var uls = document.getElementsByTagName('ul')
		var mainUls = new Array()
		for(var i=0; i<uls.length; i++)
		{
			var ul = uls[i]
			if (this.HasClass(ul, this.ClassName))
				mainUls[mainUls.length] = ul
		}
		return mainUls
	},
	
	HasClass: function(item, className)
	{
		var classes = item.className.split(' ')
		for(var i=0; i<classes.length; i++)
		{
			if (classes[i] == className)
				return true
		}
		return false
	},
	
	AddClass: function(item, className)
	{
		var classes = item.className.split(' ')
		for(var i=0; i<classes.length; i++)
		{
			if (classes[i] == className)
				return
		}
		if (!item.className) item.className = ''
		if (item.className != '') item.className += ' '
		item.className += className
	},
	
	RemoveClass: function(item, className)
	{
		var classes = item.className.split(' ')
		var newClasses = ''
		for(var i=0; i<classes.length; i++)
		{
			if (classes[i] != className)
			{
				newClasses += ' ' + classes[i]
			}
		}
		item.className = newClasses;
	},
	
	/// Read all LI's and UL's, to append mouseover and mouseout events
	SetUpMenu: function(ul)
	{
		var lis = ul.childNodes
		for(var i=0; i<lis.length; i++)
		{
			if(lis[i].nodeName.toLowerCase() == 'li')
			{
				var li = lis[i]
				var children = li.childNodes
				var ul = null
				for(var j=0; j<children.length; j++)
				{
					if(children[j].nodeName.toLowerCase() == 'ul')
					{
						ul = children[j]
					}
				}
				if (ul != null)
				{
					this.AddHandlers(ul, li)
				}
			}
		}
	},
	
	/// Add handlers
	AddHandlers: function(ul, li)
	{
		li.onmouseover = function() { SimpleMenu.Hover(li, ul) }
		li.onmouseout = function() { SimpleMenu.Unhover(li, ul) }
	},
	
	/// Hover this, remember current, hide others
	Hover: function(li, ul)
	{
		this.Current = ul
		if (this.CurrentClosingUl != this.Current)
		{
			this.Remove()
		}
		clearTimeout(this.Timeout)
		this.Current.style.display = 'block'
		this.AddClass(li, 'selected')
	},

	/// Remember current to hide, set timeout
	Unhover: function(li, ul)
	{
		this.CurrentClosingUl = ul
		this.CurrentClosingLi = li
		this.Current = null
		this.Timeout = setTimeout('SimpleMenu.Remove()', this.Delay)
	},
	
	/// Hide, if it's not the current.
	Remove: function()
	{
		if (this.CurrentClosingUl && this.CurrentClosingUl != this.Current)
		{
			this.CurrentClosingUl.style.display = 'none'
			this.RemoveClass(this.CurrentClosingLi, 'selected')
		}
		this.CurrentClosingUl = null
	}
}

var oldOnload = window.onload;

window.onload = function()
{
	if (oldOnload)
	{
		oldOnload()
	}
	SimpleMenu.Init()
}

