// dynamicMenu.js



var dMenu = 
{
	animate: true,
	//subMenuVisible: false,
	
	//---------------------------------------------------------
	// addEvent
	//---------------------------------------------------------
	addEvent: function(elm,evType,fn,useCapture)
	{
		if (elm.addEventListener)
		{
			//DOM compliant browser
			elm.addEventListener(evType,fn,useCapture);
			return true;
		}
		else if (elm.attachEvent)
		{
			//MS proprietary
			var truefalse = elm.attachEvent('on' + evType, fn);
			EventCache.add(elm, evType, fn);
			return truefalse;
		}
		else
		{
			//otherwise attach event directly to the element manually
			elm['on' + evType] = fn;
		}
	},
	
	
	//---------------------------------------------------------
	// init
	//---------------------------------------------------------
	init: function()
	{
		if(!document.getElementsByTagName){return};
		
		
		/////////////////////////////////////////////////////////////////////
		//main menu
		var menu = document.getElementsByTagName('table');
		if(!menu){return;}
		for(var u = 0; u < menu.length; u++)
		{
			var mitems = menu[u].getElementsByTagName('span');
			if(!mitems){return;}
			// for each menu item, hookup listeners to show and hide its submenu
			for(var i = 0; i < mitems.length; i++)
			{			
				var node = mitems[i];				
				if(node.nodeName.toLowerCase() == 'span')
				{
					dMenu.addEvent(node, 'mouseover', dMenu.getMoverForMM(node), false);
					dMenu.addEvent(node, 'mouseout', dMenu.getMoutForMM(node), false);
				}				
			}			
		}	
		/////////////////////////////////////////////////////////////////////
		
		
		// sub menus
		var uls = document.getElementsByTagName('ul');
		if(!uls){return;}
		for(var u = 0; u < uls.length; u++)
		{
			if(uls[u].className.search(/\bslidingmenu\b/) == -1){continue;}
			
			var lis = uls[u].getElementsByTagName('li');
			if(!lis){return;}
			for(var i = 0; i < lis.length; i++)
			{
				var node = lis[i];
				if(node.nodeName.toLowerCase() == 'li') // && node.getElementsByTagName('ul').length > 0)
				{
					dMenu.addEvent(node, 'mouseover', dMenu.getMoverFor(node), false);
					dMenu.addEvent(node, 'mouseout', dMenu.getMoutFor(node), false);
					node.getElementsByTagName('a')[0].className += ' subheader';
				}				
			}			
		}		
	},
	
	//---------------------------------------------------------
	// mover
	//---------------------------------------------------------
	mover: function(e, targetElement)
	{
		var el = window.event ? targetElement : e ? e.currentTarget : null ;
		if(!el){return;}
		clearTimeout(el.outTimeout);
		clearTimeout(el.outParentTimeout);
		if(!el.isIn)
		{
			for(var i = 0; i < el.childNodes.length; i++)
			{
				var node = el.childNodes[i];
				if(node.nodeName.toLowerCase() == 'ul')
				{	
					if(!dMenu.animate)
					{
						node.style.display = 'block';
					} else
					{
						clearInterval(node.intervalID);
						node.clippingRectangle = [0, 0, 4, 0];
						node.style.display = 'block';
						node.savedOW = node.offsetWidth;
						node.savedOH = node.offsetHeight;
						node.style.display = 'none';
						node.intervalID = setInterval(function() {dMenu.showMenu(node);}, 10);
					}
					break;
				}
			}
		}
		el.isIn = true;
	},
	
	//---------------------------------------------------------
	// mout
	//---------------------------------------------------------
	mout: function(e, targetElement)
	{
		var el = window.event ? targetElement : e ? e.currentTarget : null ;
		if(!el){return;}		
		
		el.outTimeout = setTimeout(function() { dMenu.mout2(el); }, 300);
		
		
		//if child node then set outParentTimeout
		var parent = el.parentNode;
		if (parent)
		{
			if(parent.className == 'slidingmenu')
			{								
				parent.outParentTimeout = setTimeout(function() { dMenu.mout3(parent); }, 300);				
				var parentMM = parent.parentNode;
				parentMM.outParentTimeout = parent.outParentTimeout;
				for(var i = 0; i < parent.childNodes.length; i++)
				{
					var node = parent.childNodes[i];
					node.outParentTimeout = parent.outParentTimeout
				}
			}
		}
		
		
	},
	
	//---------------------------------------------------------
	// mout2
	//---------------------------------------------------------
	mout2: function(el)
	{
		if(!el){return;}
		
		for(var i = 0; i < el.childNodes.length; i++)
		{
			var node = el.childNodes[i];
			if(node.nodeName.toLowerCase() == 'ul')
			{
				if(!dMenu.animate)
				{
					node.style.display = 'none';
				} else
				{
					clearInterval(node.intervalID);
					node.intervalID = setInterval(function() {dMenu.hideMenu(node);}, 10);
				}
				break;
			}
		}
		el.isIn = false;
	},
	
	//---------------------------------------------------------
	// mout3
	//---------------------------------------------------------
	mout3: function(el)
	{
		if(!el){return;}
				
		el.style.display = 'none'; 
		el.isIn = false;
	},
	
	//---------------------------------------------------------
	// getMoverForMM
	//---------------------------------------------------------
	getMoverForMM: function(node)
	{
		return function(e){dMenu.showSubMenu(e,node);};
	},
	
	//---------------------------------------------------------
	// getMoverFor
	//---------------------------------------------------------
	getMoverFor: function(node)
	{
		return function(e){dMenu.mover(e,node);};
	},
	
	//---------------------------------------------------------
	// getMoutForMM
	//---------------------------------------------------------
	getMoutForMM: function(node)
	{
		return function(e){dMenu.hideSubMenu(e,node);};
	},
	
	//---------------------------------------------------------
	// getMoutFor
	//---------------------------------------------------------
	getMoutFor: function(node)
	{
		return function(e){dMenu.mout(e,node);};
	},
	
	//---------------------------------------------------------
	// showMenu
	//---------------------------------------------------------
	showMenu: function(el)
	{
		if(!el){return;}
		
		el.clippingRectangle[1] += 20
		if(el.clippingRectangle[1] >= el.savedOW)
		{
			el.clippingRectangle[1] = el.savedOW;
			el.clippingRectangle[2] += 20;
			if(el.clippingRectangle[2] >= el.savedOH)
			{
				el.clippingRectangle[2] = el.savedOH;
				clearInterval(el.intervalID);
				
				//reset the clip (browser specific)
				if(document.all && !window.opera)
				{
					el.style.clip = 'rect(auto)';
				} else
				{
					el.style.clip = 'auto';
				}
				return;
			}
		}
		
		el.style.clip = 'rect(' + el.clippingRectangle.join('px ') + 'px)';
		el.style.display = 'block';
	},
	
	//---------------------------------------------------------
	// hideMenu
	//---------------------------------------------------------
	hideMenu: function(el)
	{
		if(!el){return;}
		
		el.clippingRectangle[2] -= 20
		if(el.clippingRectangle[2] <= 4)
		{
			el.clippingRectangle[2] = 4;
			el.clippingRectangle[1] -= 20;
			if(el.clippingRectangle[1] <= 0)
			{
				clearInterval(el.intervalID);
				
				//reset the clip (browser specific)
				if(document.all && !window.opera)
				{
					el.style.clip = 'rect(auto)';					
				} else
				{
					el.style.clip = '';
				}
				el.style.display = 'none';
				return;
			}
		}
		
		el.style.clip = 'rect(' +el.clippingRectangle.join('px ') + 'px)';				
	},
	
	
	//---------------------------------------------------------
	// showSubMenu
	//---------------------------------------------------------
	showSubMenu: function(e, targetElement)
	{
		var el = window.event ? targetElement : e ? e.currentTarget : null ;
		if(!el){return;}
		var pNode = el.parentNode;
		var left = parseInt(pNode.offsetLeft);
		var top = parseInt(pNode.offsetHeight);
		var el = document.getElementById('smnu' + el.innerHTML);
		clearTimeout(el.outParentTimeout);
		if(el)
		{
			el.style.position = 'absolute';
			el.style.left = left + 'px';
			el.style.top = top + 'px';
			el.style.display = 'block';
		}
	},

	//---------------------------------------------------------
	// hideSubMenu
	//---------------------------------------------------------
	hideSubMenu: function(e, targetElement)
	{
		var el = window.event ? targetElement : e ? e.currentTarget : null ;
		if(!el){return;}
		
		var el = document.getElementById('smnu' + el.innerHTML);
		if(el)
		{		
			for(var i = 0; i < el.childNodes.length; i++)
			{
				var node = el.childNodes[i];
				if(node.nodeName.toLowerCase() == 'li')
				{	
					node.outParentTimeout = setTimeout(function() { el.style.display = 'none'; }, 300);
					break;
				}
			}
		}
	},
	
	//----------------------------------------------
	//findPosX
	//----------------------------------------------
	findPosX: function(obj)
	{
		var curLeft = 0;
		if(obj.offsetParent)
		{
			do
			{
				curLeft += obj.offsetLeft;
				
			} while(obj = obj.offsetParent);
		}
		else if (obj.x)
		{
			curLeft += obj.x;
		}
		return curLeft;
	},
	
	//----------------------------------------------
	//findPosY
	//----------------------------------------------
	findPosY: function(obj)
	{
		var curTop = 0;
		if(obj.offsetParent)
		{
			do
			{
				curTop += obj.offsetTop;
				
			} while(obj = obj.offsetParent);
		}
		else if (obj.y)
		{
			curTop += obj.y;
		}
		return curTop;
	}

	
	
};

dMenu.animate = false;
//dMenu.addEvent(window, 'load', dMenu.init, false);
//dMenu.addEvent(window, 'unload', EventCache.flush, false);
//
