﻿var
	menu_timer   = null,
	menu_active  = null,
	menu_timeout = 2000;


function MenuFindPosLeft(el)
{
	var left = 0;
	if (el.offsetParent) {
		while (el.offsetParent) {
			left += el.offsetLeft
			el = el.offsetParent;
		}
	} else if (el.x)
		left += el.x;
	return left;
}


function MenuFindPosTop(el)
{
	var top = 0;
	if (el.offsetParent) {
		while (el.offsetParent) {
			top += el.offsetTop
			el = el.offsetParent;
		}
	} else if (el.y)
		top += el.y;
	return top;
}


function MenuFindPosBottom(el)
{
	var bottom;
	if (el.offsetParent) {
		bottom = el.offsetHeight;
		while (el.offsetParent) {
			bottom += el.offsetTop
			el = el.offsetParent;
		}
	} else if (el.y)
		bottom += el.y + el.height;
	return bottom;
}


function MenuHide()
{
	if (menu_active != null) {
		var el = document.getElementById("menu_"+menu_active);

		if (el)
			el.style.visibility = "hidden";

		menu_active = null;
	}
}


function MenuAbandon()
{
	menu_timer = window.setTimeout(MenuHide, menu_timeout);
}


function MenuPopup(id, caller)
{
	// If there is any other menus pending to hide, do it now.
	if (menu_timer) {
		window.clearTimeout(menu_timer);
		menu_timer = null;
	}
	if (menu_active != id)
		MenuHide();

	var el = document.getElementById("menu_"+id);

	if (el) {
		if (caller) {
			el.style.left = MenuFindPosLeft(caller) + "px";
			el.style.top = (MenuFindPosBottom(caller) + 1) + "px";
		}
		el.style.visibility = "visible";
	}

	menu_active = id;
}


function MenuHighlight(url)
{
	var
		els = document.getElementsByTagName("a"),
		i, j, n, m,
		sel_els = new Array(),
		re_url = new RegExp("^((\\w+):///?)?((\\w+):?(\\w+)?@)?([^/\\?:]+):?(\\d+)?(/?[^\\?#;\\|]+)?([;\\|])?([^\\?#]+)?\\??([^#]+)?#?(\\w*)", "i");
		re_menuid = new RegExp("^menu_(\\d+)$", "i"),
		i_best = -1, k_best = 0;
	
	url = url.toLowerCase();

	for (i = 0, n = els.length; i < n; i++) {
		if (els[i].className == "menu" && els[i].parentElement.className == "menuitem") {
			var
				r = re_url.exec(els[i].href);
			
			if (r) {
				var
					url_el = new String(r[8]).toLowerCase(),
					k;
				
				for (k = 0; k < url_el.length && k < url.length && url_el.charAt(k) == url.charAt(k); k++);
				
				if (k > k_best) {
					i_best = i;
					k_best = k;
				}
			}
		}
	}
	
	if (i_best != -1)
		sel_els.push(els[i_best]);
	
	for (j = 0, m = sel_els.length; j < m; j++) {
		sel_els[j].parentElement.className = "selmenuitem";
		
		// See if there is a parent menu item.
		var
			r = re_menuid.exec(sel_els[j].parentElement.parentElement.parentElement.parentElement.id);
		
		if (r) {
			for (i = 0, n = els.length; i < n; i++) {
				if (els[i].className == "menu" && els[i].parentElement.className == "menuitem" && els[i].href == "javascript:MenuPopup(" + r[1] + ")")
					els[i].parentElement.className = "selmenuitem";
			}
		}
	};
}

