var activeTab, newTab, popup, menuShowTimer;
var menuShowMethod;
var menuUL;

/* ------- normal mode ------- */

function mainMenuMouseOver(ev)
{
	if (!ev) var ev = window.event;
	var buff = "";
	for (x in ev) buff += x + ", ";
	var src = ev.srcElement ? ev.srcElement : ev.target;
	if (src.tagName == "A")
	{
		var li = src.parentNode;
		var ul = li.parentNode;
		if (li == ul.activeTab) return;
		if (ul.activeTab) mainMenuCollapseTree(ul.activeTab);
		ul.activeTab = 0;
		if (li.childNodes.length == 2) 
		{
			li.childNodes[0].className = "sel";
			li.childNodes[1].className = "sel";
			ul.activeTab = li;
		}
		mainMenuShowHideSelects();
	}
}

function mainMenuCollapseTree(li)
{
	if (li.childNodes.length == 2) {
		var div = li.childNodes[1];
		var ul = div.childNodes[0];
		if (ul.activeTab) 
		{
			mainMenuCollapseTree (ul.activeTab);
		}
		div.className = "";
	}
	li.childNodes[0].className = "";
	li.parentNode.activeTab = 0;
}

function mainMenuShowHideSelects()
{
	var selects = document.getElementsByTagName("SELECT");
	for (var i = 0; i < selects.length; i++){
		var sel = selects[i];
		var l = leftPosition(sel);
		var t = topPosition(sel);
		var vis = !mainMenuIsOverriden(l, t, sel.offsetWidth, sel.offsetHeight, window.menuUL);
		var knowold = ((sel.oldvis == "") || (sel.oldvis));
		if (vis)
		{
			if (knowold)
			{
				sel.style.visibility = sel.oldvis;
				sel.oldvis = void 0;
			}
		}
		else
		{
			if (!knowold)
			{
				sel.oldvis = sel.style.visibility;
				sel.style.visibility = "hidden";
			}
		}
	}
}

function mainMenuIsOverriden(x, y, w, h, menu)
{
	var menuL = leftPosition(menu);
	var menuT = topPosition(menu);
	var menuW = menu.offsetWidth;
	var menuH = menu.offsetHeight;
	if (((x + w) < menuL) || (x > (menuL + menuW)) ||
		((y + h) < menuT) || (y > (menuT + menuH)))
	{
		if (menu.activeTab)		// this menu doesn't overlap obj
		{
			if (mainMenuIsOverriden(x, y, w, h, menu.activeTab.childNodes[1].childNodes[0]))
			{
				return true;	// child menu overlap obj
			}
			return false;		// child menu doesn't overlap obj
		}
		return false;			// child menu doesn´t exist
	}
	else
	{
		return true;			// this menu overlap obj
	}
}

function leftPosition(obj)
{
	return obj.offsetLeft + (obj.offsetParent ? leftPosition(obj.offsetParent) : 0);
}

function topPosition(obj)
{
	return obj.offsetTop + (obj.offsetParent ? topPosition(obj.offsetParent) : 0);
}

function mainMenuBlur(ev)
{
	if (!ev) var ev = window.event;
	var src = ev.srcElement ? ev.srcElement : ev.target;
	src.blur();
}

/* ------- / normal mode ------- */

/* ------- popup mode ------- */
function mainMenuMouseOverPopup(ev)
{
	if (!ev) var ev = window.event;
	var src = ev.srcElement;
	if (src.tagName == "A") 
	{
		var li = src.parentNode;
		if (li.parentNode.id != "mainMenu") return;
		var ul = src.nextSibling;
		if (ul) 
		{
			window.newTab = ul;
		} 
		else 
		{
			window.newTab = 0;
		}
	}
}

function mainMenuSwitch()
{
	var popup = window.popup;
	var ul = window.newTab;
	if (ul == window.activeTab) return;
	if (ul) 
	{
		popup.document.body.innerHTML = ul.outerHTML;
		mainMenuSetClickEvent(popup.document.body.childNodes);
		popup.show(ul.offsetLeft, ul.offsetTop,
				ul.offsetWidth, ul.offsetHeight, ul.offsetParent);
	} 
	else 
	{
		popup.hide();
	}
	window.activeTab = ul;
}

function mainMenuSetClickEvent(childs)
{
	for (var i = 0; i < childs.length; i++) 
	{
		var child = childs[i];
		if (child.tagName == "A") 
		{
			child.onclick = mainMenuClick;
		}
		mainMenuSetClickEvent(child.childNodes)
	}
}

function mainMenuClick(ev)
{
	//var src = this.window.event.srcElement;
	window.mainMenuGoToUrl(this.href);
}

function mainMenuGoToUrl(url)
{
	window.popup.hide();
	location.href = url;
}

/* ------- / popup mode ------- */

function mainMenuCollapse() 
{
	if (menuShowMethod == "popup") 
	{
		window.popup.hide();
		window.newTab = 0;
	} 
	else 
	{
		if(window.menuUL)
		{
			if (window.menuUL.activeTab) 
			{
				mainMenuCollapseTree(window.menuUL.activeTab);
				mainMenuShowHideSelects();
			}
		}
	}
}

function mainMenuInit()
{
	var menu = document.getElementById("mainMenu");
	if (0 && window.createPopup) 
	{
		menuShowMethod = "popup";
		var tab = window.createPopup();
		tab.document.createStyleSheet(this.document.styleSheets[0].href);
		tab.document.body.id = "mainMenu";
		window.popup = tab;
		menu.onmouseover = mainMenuMouseOverPopup;
		setInterval("mainMenuSwitch();", 20)
	} 
	else 
	{
		window.menuUL = menu;
		menu.onmouseover = mainMenuMouseOver;
		menu.onclick = mainMenuBlur;
	}
}
