/**
 *
 * Base class for expanding menus
 * @class Base class for expanding menus
 * <p>Usage: var mainnav = new W.Menu('mainnav', mainnav_rollovers);</p>
 * @requires W
 * @requires W.Event
 * @requires W.Util
 * @constructor
 * @param {String}	menu	for the div that contains the menu
 * @param {Object}	object	Preload object (optional)
*/

W.Menu = function(menu, rollover)
{
	this.menu		= menu;
	this.rollover	= false || rollover;
	this.rollOn		= false;
	var obj			= this;

	W.Event.add(window, 'load', function() { obj.init(); });
};

W.Menu.prototype = {

	menu 			: null,
	//timers		: null,
	overDelay		: 0,
	outDelay		: 300,
	$				: W.Util.$,



	init : function() 
	{
		this.attachEvents();
	},
	
	
	
	attachEvents : function()
	{
		var uls			= this.$(this.menu).getElementsByTagName('ul');
		var lis			= uls[0].getElementsByTagName('li');
		var node		= null;
		var addEvent	= W.Event.add;
		var obj			= this;
		
		for (var i = 0, max = lis.length; i < max; ++i) {
			node = lis[i];
			if (node.nodeName.toLowerCase() == 'li' && node.getElementsByTagName('ul').length > 0) {
				addEvent(node, 'mouseover', obj.getMoverFor(node), false);
				addEvent(node, 'mouseout', obj.getMoutFor(node), false);
			}
		}
	},
	
	
	
	getMoverFor : function(node)
	{
		var obj = this;
		
		return function(e) { obj.mover(e, node); };
	},
	
	
	
	getMoutFor : function(node)
	{
		var obj = this;
		
		return function(e) { obj.mout(e, node); };
	},
	
	
	
	mover : function(e, targetElement)
	{
		var el		= W.Event.target(e, targetElement);
		var obj		= this;
		
		if (this.rollover) { this.setRollover(el, true); }
		
		if (!el) { return; }
		//el.overTimeout = setTimeout(function() { obj.mover2(el); }, this.overDelay);
		this.mover2(el);
		//el.overTimeout = TimedQue(function() { obj.mover2(el); })
	},
	
	
	
	mover2 : function(el)
	{
		var node	= null;
		
		//W.Util.$('debug').innerHTML = W.Util.$('debug').innerHTML +  el.outTimeout + '<br>';
		clearTimeout(el.outTimeout);
		
		for (var i = 0, max = el.childNodes.length; i < max; ++i) {
			node = el.childNodes[i];
			if (node.nodeName.toLowerCase() == 'ul') { node.style.display = 'block'; }
		}
	},
	
	
	
	mout : function(e, targetElement)
	{
		var el		= W.Event.target(e, targetElement);
		var obj		= this;
		
		if (!el) { return; }
		//el.outTimeout = setTimeout(function() { obj.mout2(el); }, this.outDelay);
		obj.mout2(el);
		//el.outTimeout = TimedQue(function() { obj.mout2(el); })
	},
	
	
	
	mout2 : function(el)
	{
		var node	= null;
		
		for (var i = 0, max = el.childNodes.length; i < max; ++i) {
			node = el.childNodes[i];
			if (node.nodeName.toLowerCase() == 'ul') {
				node.style.display = 'none';
			}
		}
		
		this.setRollover(el, false);
	},
	
	
	
	setRollover : function(el, state)
	{
		var img = el.getElementsByTagName('img')[0];	// el is the <li> that contains the rollover image, and the nested <ul> submenu
														// assume the first <img> in <li> is the rollover image
		if (img.name !== '') { this.rollover.rollover(img.name, state); }
	},
	
	
	
	rolloverOff : function()
	{
		
	}
};