// dropdown hiding timeout, mseconds
var hidingTimeout = 300;
// dropdown offset, [x, y]
var submenuOffset = [1, 31];

var prevMenu	= null;
var prevSubMenu	= null;
function paintHover(id, state)
{
	obj = getObj('menuitem'+id);
	if(!obj) return;

	if(!state && id == prevMenu) return;
//	obj.style.background = state ? 'url(images/menu_arrow.gif) no-repeat 4px 15px' : 'none';
}


function setupPage()
{
	var i = 1;
	while(true)
	{
		var menuitem = getObj('menuitem'+i);
		if(menuitem) setupMenuitem(i);
		else break;
		i++;
	}
	var holder = getObj('menu_holder');
	if(holder) holder.style.visibility = 'visible';
}
function setupMenuitem(id)
{
	var obj		= getObj('menuitem'+id);
	var submenu	= getObj('submenu'+id);

	obj.onmouseout = function() {
		if(id != prevMenu) paintHover(id, false);
		fadeout(id);
	}
	obj.onmouseover = function() {
		if(prevMenu != id) hideSubMenu(prevMenu);
		paintHover(id, true);
		stopFadeout(id);
		showSubMenu(id);
	}

	if(submenu) {
		submenu.onmouseout = function() {
			fadeout(id);
		}
		submenu.onmouseover = function() {
			stopFadeout(id);
		}
	}
}

function showSubMenu(id)
{
	var menuitem	= getObj('menuitem'+id);
	var submenu		= getObj('submenu'+id);
	if(!menuitem || !submenu) return false;

	moveObj(submenu, menuitem, submenuOffset);

	if(prevMenu && prevMenu != id) {
		hideSubMenu(prevMenu);
	}
	prevMenu = id;

	submenu.style.display = 'block';
}
function hideSubMenu(id)
{
	var submenu = getObj('submenu'+id);
	if(!submenu) return false;

	submenu.style.display = 'none';
	if(timeouts[submenu.id]) clearTimeout(timeouts[submenu.id]);
	prevMenu = null;
	paintHover(id, false);
}


var timeouts = [];
function fadeout(id)
{
	var menuitem	= getObj('menuitem'+id);
	var submenu		= getObj('submenu'+id);
	if(!menuitem || !submenu) return false;

	timeouts[submenu.id] = setTimeout(function() {
		submenu.style.display = 'none';
		prevMenu = null;
		paintHover(id, false);
	}, hidingTimeout);
}
function stopFadeout(id)
{
	var menuitem	= getObj('menuitem'+id);
	var submenu		= getObj('submenu'+id);
	if(!menuitem || !submenu) return false;

	if(timeouts[submenu.id]) clearTimeout(timeouts[submenu.id]);
}


function moveObj(move_id, from_id, delta) // delta = [x, y]
{
	var move = getObj(move_id);
	var from = getObj(from_id);
	if(!move || !from) return false;

	var x = findPosX(from) + delta[0];
	var y = findPosY(from) + delta[1];
	move.style.left = x + 'px';
	move.style.top = y + 'px';
}

function getObj(obj)
{
	if(!document.getElementById) return false;
	return (typeof(obj) == 'string') ? document.getElementById(obj) : obj;
}



// borrowed from
// http://www.quirksmode.org/js/findpos.html
function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft;
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}