/**
 * Dropmenu
 * See enclosed example
 *
 * @author Nick Nettleton / nick@plumdigitalmedia.com
 * @copyright 2005
 * @package UI
 * @version 0.1
 */

// settings
var dropmenu_hide_delay = 250 ; //ms

// globals
var dropmenus_supported = document.getElementById ? 1:0 ;
var dropmenus = [] ;
var dropmenu_to_hide = null ;
var dropmenu_timer = null ;

// auto-init
queue(dropmenu_auto) ;

/**
 * initialises all ul elements with the class name 'dropmenu' as a dropmenu
 */
function dropmenu_auto()
{
	if(!dropmenus_supported) return ;
	var els = document.getElementsByTagName('ul') ;
	for(var i=0, l=els.length; i<l; i++){
		if(els[i].className == 'dropmenu') dropmenu_init(els[i]) ;
	}
}

/**
 * applies dropmenu interactivity to the given element
 */
function dropmenu_init(element)
{
	if(!dropmenus_supported) return ;

	var c = element.childNodes ;

	// loop over menus
	for(var i=0, l=c.length; i<l; i++){

		var menu = c[i] ;
		dropmenus[dropmenus.length] = menu ; // global ref
		
		menu.show = function()
		{
			clearTimeout(dropmenu_timer) ;
			dropmenu_hide_all(this) ;
			this.className = 'over' ;
		}

		menu.hide = function(no_delay)
		{
			if(no_delay){
				this.className = '' ;
				clearTimeout(dropmenu_timer) ;
			} else {
				dropmenu_to_hide = this ;
				dropmenu_timer = setTimeout('if(dropmenu_to_hide) dropmenu_to_hide.hide(true)', 250) ;
			}
		}
		
		menu.onmouseout = function(){ this.hide() } ;
		menu.onmouseover = function(){ this.show() } ;
	}
}

/**
 * hides all dropmenus, execept the one given in except
 */
function dropmenu_hide_all(except)
{
	if(!dropmenus_supported) return ;
	for(var i=0, l=dropmenus.length; i<l; i++){
		if(dropmenus[i] != except) dropmenus[i].hide(true) ; // hide without delay
	}
}