/*global document window clearTimeout setTimeout */
var ddtabmenu = {
	disabletablinks: false, 
	snap2original: [true, 2000], 

	definemenu: function(tabid, dselected)
	{
		this[tabid + "-menuitems"] = null;
		this[tabid + "-dselected"] = -1;
		//this.addEvent(window, function(){ddtabmenu.init(tabid, dselected)}, "load")
		ddtabmenu.init(tabid, dselected);
	},



	showsubmenu:function(tabid, targetitem)
	{
		var menuitems = this[tabid + "-menuitems"];
		this.clearrevert2default(tabid);
		for ( var i = 0; i < menuitems.length; i++ )
		{
			if ( menuitems[i].className != "current" )
			{
				menuitems[i].className = "";
			}
			if ( typeof menuitems[i].hasSubContent != "undefined" )
			{
				document.getElementById(menuitems[i].getAttribute("rel")).style.display="none";
			}
			if ( typeof document.getElementById(menuitems[i].getAttribute("rel")).childNodes[1] != "undefined" )
			{
				document.getElementById(menuitems[i].getAttribute("rel")).childNodes[1].className = "subnav";
			}
			else
			{
				document.getElementById(menuitems[i].getAttribute("rel")).childNodes[0].className = "subnav";
			}
		}
		/*targetitem.className=" "*/
		if ( typeof targetitem.hasSubContent != "undefined")
		{
			document.getElementById(targetitem.getAttribute("rel")).style.display = "block";
		}
		if (targetitem.className != "current")
		{
			if ( typeof document.getElementById(targetitem.getAttribute("rel")).childNodes[1] != "undefined")
			{
				document.getElementById(targetitem.getAttribute("rel")).childNodes[1].className = "subnavHover";
			}
			else
			{
				document.getElementById(targetitem.getAttribute("rel")).childNodes[0].className = "subnavHover";
			}
			targetitem.className = "hover";
		}
	},


	isSelected:function(menuurl)
	{
		menuurl = menuurl.replace("http://" + menuurl.hostname, "").replace(/^\//, "");
		return (ddtabmenu.currentpageurl == menuurl);
	},
	
	isContained:function(m, e)
	{
		e = window.event || e;
		var c = e.relatedTarget || ((e.type == "mouseover")? e.fromElement : e.toElement);
		while ( c && c != m)
		{
			try
			{
				c = c.parentNode;
			}
			catch(error)
			{
				c = m;
			}
		}
		if ( c == m )
		{
			return true;
		}
		else
		{
			return false;
		}
			
	},

	revert2default: function(outobj, tabid, e)
	{
		if ( !ddtabmenu.isContained(outobj, tabid, e))
		{
			window["hidetimer_" + tabid] = setTimeout( function()
			{
				ddtabmenu.showsubmenu(tabid, ddtabmenu[tabid + "-dselected"]);
			}, ddtabmenu.snap2original[1]);
		}
	},

	clearrevert2default: function(tabid)
	{
		if ( typeof window["hidetimer_" + tabid] != "undefined" )
		{
			clearTimeout(window["hidetimer_" + tabid]);
		}
	},

	addEvent:function(target, functionref, tasktype) 
	{ //assign a function to execute to an event handler (ie: onunload)
		tasktype = (window.addEventListener)? tasktype : "on" + tasktype;
		if (target.addEventListener)
		{
			target.addEventListener(tasktype, functionref, false);
		}
		else if (target.attachEvent)
		{
			target.attachEvent(tasktype, functionref);
		}
	},

	init:function(tabid, dselected)
	{
		var setalready, menuitems = document.getElementById(tabid).getElementsByTagName("a");
		this[tabid + "-menuitems"] = menuitems;
		for ( var x = 0; x < menuitems.length; x++ )
		{
			if ( menuitems[x].getAttribute("rel") )
			{
				this[tabid + "-menuitems"][x].hasSubContent = true;
				if ( ddtabmenu.disabletablinks )
				{
					menuitems[x].onclick = function()
					{
						return false;
					};
				}
				if ( ddtabmenu.snap2original[0] === true )
				{
					var submenu = document.getElementById(menuitems[x].getAttribute("rel"));
					menuitems[x].onmouseout = function(e){ ddtabmenu.revert2default(submenu, tabid, e); };
					submenu.onmouseover = function(){ ddtabmenu.clearrevert2default(tabid); };
					submenu.onmouseout = function(e){ ddtabmenu.revert2default(this, tabid, e); };
				}
			}
			else
			{ //for items without a submenu, add onMouseout effect
				menuitems[x].onmouseout = function(e)
				{ 
					this.className = ""; 
					if ( ddtabmenu.snap2original[0] === true )
					{
						ddtabmenu.revert2default(this, tabid, e);
					}
				};
			}
			menuitems[x].onmouseover = function()
				{
					ddtabmenu.showsubmenu(tabid, this);
				};
			if ( dselected == "auto" && typeof setalready == "undefined" && this.isSelected(menuitems[x].href) )
			{
				ddtabmenu.showsubmenu(tabid, menuitems[x]);
				this[tabid+"-dselected"] = menuitems[x];
				setalready = true;
			}
			else if ( parseInt(dselected, 10) == x )
			{
				ddtabmenu.showsubmenu(tabid, menuitems[x]);
				this[tabid + "-dselected"] = menuitems[x];
			}
		}
	}
};