var currentObject;

function setCurrentObject(object)
{
	currentObject = object;	
}

var isIE = navigator.userAgent.match(/MSIE/);

var extensible =
{
	menus : [],
	current : null,
	timer : 0,
	initialize : function()
	{
		var uls = $('extensible-menu').getElementsByTagName('ul');
		for(var i = 0; i < uls.length; i++)
		{
			if(uls[i].className == 'extensible-menu')
			{
				extensible.anchor(uls[i]);
			}
		}
	},
	anchor : function(ul)
	{
		extensible.menus[extensible.menus.length] = ul;
		ul.parentNode.onmouseover = function()
		{
			extensible.show(this, ul);
		};
	},
	show : function(anchor, ul)
	{
		if(extensible.current != null && extensible.current != ul)
		{
			if(extensible.timer) extensible.clearTimer();
			extensible.hide(extensible.getID(extensible.current));
		}
		extensible.current = ul;
		var coords = extensible.findPos(anchor);
		ul.style.position = 'absolute';
		ul.style.top = (coords[1]+anchor.offsetHeight) + 'px';
		ul.style.left = coords[0] + 'px';
		ul.style.display = 'block';				
		
		extensible.setBehaviours(ul);
		extensible.startListener(ul);
		ul.onmouseover = function()
		{			
			extensible.clearTimer();
		}
	},
	setBehaviours : function(ul)
	{
		for(var i = 0; i < ul.childNodes.length; i++)
		{
			if(ul.childNodes[i].nodeName.toLowerCase() == 'li')
			{
				ul.childNodes[i].onmouseover = function()
				{
					for(var i = 0; i < this.childNodes.length; i++)
					{
						if(this.childNodes[i].nodeName.toLowerCase() == 'ul')
						{
							if(this.childNodes[i].style.display == 'block') return;
						}
					}
					
					
					
					setCurrentObject(this);
					//this.style.backgroundColor = '#D36068';
					for(var i = 0; i < this.parentNode.childNodes.length; i++)
					{
						if(this.parentNode.childNodes[i].nodeName.toLowerCase() == 'li')
						{
							extensible.closeSubMenu(this.parentNode.childNodes[i]);
						}
					}
					for(var i = 0; i < this.childNodes.length; i++)
					{
						if(this.childNodes[i].nodeName.toLowerCase() == 'ul')
						{
							this.childNodes[i].style.display = 'block';
						}
					}
				}
				ul.childNodes[i].onmouseout = function()
				{
					/*if (this != currentObject) {
						this.style.backgroundColor = '#C6CBC0';
					}*/
				}
				for(var j = 0; j < ul.childNodes[i].childNodes.length; j++)
				{
					if(ul.childNodes[i].childNodes[j].nodeName.toLowerCase() == 'ul')
					{
						extensible.setBehaviours(ul.childNodes[i].childNodes[j]);
					}
				}
			}
		}
	},
	closeSubMenu : function(li)
	{
		for(var i = 0; i < li.childNodes.length; i++)
		{
			if(li.childNodes[i].nodeName.toLowerCase() == 'ul')
			{
				var ul = li.childNodes[i];
				for(var j = 0; j < ul.childNodes.length; j++)
				{
					if(ul.childNodes[j].nodeName.toLowerCase() == 'li')
					{
						extensible.closeSubMenu(ul.childNodes[j]);
					}
				}
				ul.style.display = 'none';
			}
		}
		return true;
	},
	findPos : function(el)
	{
		var l = t = 0;
		if(el.offsetParent)
		{
			l = el.offsetLeft;
			t = el.offsetTop;
			while(el = el.offsetParent)
			{
				l += el.offsetLeft;
				t += el.offsetTop;
			}
		}
		return [l,t];
	},
	startListener : function(ul)
	{
		document.body.onmouseover = function(e)
		{
			if(isIE)
			{
				var e = window.event;
				var o = e.srcElement;
			}
			else
			{
				var o = e.target;
			}
			if(!extensible.timer)
			{
				var h = 1;
				while(o.nodeName.toLowerCase() != 'body')
				{
					if(o == ul.parentNode) h = 0;
					o = o.parentNode;
				}
				if(h)
				{
					extensible.timer = setTimeout('extensible.hide(' + extensible.getID(ul) + ')', 500);
				}
			}
		}
	},
	getID : function(ul)
	{
		for(var i = 0; i < extensible.menus.length; i++)
		{
			if(extensible.menus[i] == ul) return i;
		}
	},
	clearTimer : function()
	{
		if(extensible.timer)
		{
			clearTimeout(extensible.timer);
			extensible.timer = 0;
		}
	},
	hide : function(id)
	{
		var ul = extensible.menus[id];
		for(var i = 0; i < ul.childNodes.length; i++)
		{
			if(ul.childNodes[i].nodeName.toLowerCase() == 'li')
			{
				extensible.closeSubMenu(ul.childNodes[i]);
			}
		}
		ul.style.display = 'none';
	}
}


