js.module('menu');

menu = {
	shown : new Array(),
	
	hide : function(ev, top)
	{
		var toElement = ev.toElement ? ev.toElement : ev.relatedTarget;
		var fromElement = ev.fromElement ? ev.fromElement : ev.currentTarget;
		if(!top)
		{
			if(toElement.parentNode == fromElement) return;
			if(fromElement.parentNode == toElement) return;
		}
		var par = toElement;

		if(par)
		{
			while(par)
			{
				if(par.id && par.id.substring(0,5)=='menu_') return ;
				par = par.parentNode;
			}
		}
		
		if(this.shown)
		{
			this.shown.reverse(); 
			
			for(var m in this.shown)
			{
				visual.hide(this.shown[m]);
				delete(this.shown[m]);
			}
			
			this.shown.reverse();
		}
	}
	,
	hideOther : function(e)
	{
		var parentMenus = new Array();
		
		var par = e;
		
		while(par)
		{
			if(par.id && par.id.substring(0,5)=='menu_')
			{
				parentMenus[parentMenus.length] = par;
			}
			par = par.parentNode;
		}
	
		this.shown.reverse();
	
		for(var m in this.shown)
		{
			var found = false;
			
			for(var pm in parentMenus)
			{
				if(parentMenus[pm] == this.shown[m])
				{
					found = true;
					break;
				}
			}
			
			if(!found)
			{
				visual.hide(this.shown[m]);
				delete(this.shown[m]);
			}
	
			this.shown.reverse();
		}
	}
	,
	hideAll : function()
	{
		for(var m in this.shown)
		{
				visual.hide(this.shown[m]);
				delete(this.shown[m]);
		}
	}
	,
	getHover : function(e)
	{
		var tag = e.tagName.toLowerCase();
		switch(tag)
		{
			case 'a':
				return e.parentNode;	
			break;
			case 'td':
				return e;
			break;
		}
	}
	,
	hover : function(e)
	{
		if(this.shown == null) this.shown=new Array();
		
		el = this.getHover(e); 
		el.style.backgroundImage = "url('/images/skins/menu_hover.jpg')";
		
		if($A(el, 'menuid')!=null)
		{
			var divel = $('menu_'+$A(el, 'menuid'));
			
			this.hideOther(divel);
			
			this.shown[this.shown.length] = divel;
			
			if($A(el, 'subitem')=='true')
			{
				divel.style.marginLeft=el.clientWidth-9+10;
				divel.style.marginTop=-el.clientHeight;
			}
			else
			{
				divel.style.top = 114;
				divel.style.left = el.offsetLeft + $('maintable').offsetLeft + 6;
			}
			visual.show(divel);
		}	
	}
	,
	unhover : function(e)
	{
		this.getHover(e).style.backgroundImage = "";
	}
}