var currItem = null;
var delayItem = null;
var g_menus = new Object();
var FF = document.getElementById&&!document.all;
var IE = document.all;
var SF = navigator.vendor;

function menu_showPopup(parentId, event, _submenuObj, parentObj, position)
{
	var _menu = g_menus["menu" + parentId];
	var submenuObj = _submenuObj;
	
	if (!_menu)
	{
		g_menus["menu" + parentId] = new Object();
		
		_menu = g_menus["menu" + parentId];
	}
	
	if (_menu.doExit)
	{
		window.clearTimeout(_menu.timerHandle);
		_menu.doExit = false;
	}

	// hide current active submenu
	if (!submenuObj || _menu.currentSubmenu != submenuObj)
		menu_exitPopup(parentId);
	
	// show selected submenu
	if (submenuObj && _menu.currentSubmenu != submenuObj)
	{
		submenuObj.style.display = "";
		var x = getEventX(event);
		var y = getEventY(event);
		var dim = getScreenDimensions();
		if (position == "right")
		{
			x = parentObj.offsetWidth + getScreenPosX(parentObj);
			y = getScreenPosY(parentObj);
		}
		else if (position == "left")
		{
			x = getScreenPosX(parentObj) - submenuObj.offsetWidth;
			y = getScreenPosY(parentObj);
		}
		else if (position == "bottom")
		{
			x = getScreenPosX(parentObj);
			y = getScreenPosY(parentObj) + parentObj.offsetHeight;// + xtraY;
		}
		else if (position == "top")
		{
			x = getScreenPosX(parentObj);
			y = getScreenPosY(parentObj) - submenuObj.offsetHeight;
		}
		
		if (IE)
		{
			x -= dim.scrollLeft;
			y -= dim.scrollTop;
			x -= 1;
		}
		if (FF)
		{
			y += 1;
		}
		if (SF)
		{
			y -= 1;
		}
		
		var width  = submenuObj.offsetWidth;
		var height = submenuObj.offsetHeight;
		// ensure visiblity of menu
		if (parentId != "menu_-2" && position != "right")
		{
			var availHeight = document.body.offsetHeight-10;
			if (y-document.body.scrollTop + height > availHeight)
				y = availHeight + document.body.scrollTop - height;
		} 
			
		var availWidth = document.body.offsetWidth-10;
		if (x-document.body.scrollLeft + width > availWidth)
			x = availWidth + document.body.scrollLeft - width;
		
		submenuObj.style.top =  (y-getScreenPosY(submenuObj.offsetParent)) + "px";
		submenuObj.style.left = (x-getScreenPosX(submenuObj.offsetParent)) + "px";
		
		_menu.highlighted = parentObj;
	}

	_menu.currentSubmenu = submenuObj;
}

function menu_exitPopup(parentId)
{
	var _menu = g_menus["menu" + parentId];
	if (!_menu)	
		return;
		
	if (_menu.currentSubmenu)
	{
		// exit the submenu's submenu
		menu_exitPopup(_menu.currentSubmenu.id);

		_menu.currentSubmenu.style.display = "none";
		if (_menu.highlighted.id == delayItem[0])
			{_menu.highlighted.className = delayItem[1];}
		else
		{
			if (_menu.highlighted.childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].id != undefined)
			{
				_menu.highlighted.childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].style.display = "none";
				_menu.highlighted.childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[1].style.display = "inline";
			}
			_menu.highlighted.className = "normal";	
		}
		
	}
	_menu.currentSubmenu = null;
	_menu.highlighted = null;
}

function menu_exitPopup2(parentId)
{
	var _menu = g_menus["menu" + parentId];
	if (!_menu || !_menu.doExit)	
		return;

	menu_exitPopup(parentId);
}

function menu_exitPopupDelayed(parentId, event)
{
	var _menu = g_menus["menu" + parentId];
	if (!_menu)
		return;
		
	if (!_menu.doExit)
	{
		_menu.doExit = true;
		var callback = function() { menu_exitPopup2(parentId); }
		_menu.timerHandle = window.setTimeout(callback, 1000);
	}
}

function menu_cancelExit(parentId, event)
{
	var _menu = g_menus["menu" + parentId];
	if (!_menu)	
		return;

	_menu.doExit = false;
	window.clearTimeout(_menu.timerHandle);
}

///// Hoofdmenu

function menu_mouseOver2(parentId, event, _submenuObj, parentObj, position)
{
	currItem = new Array(parentObj.id, parentObj.className);
	
	if (document.getElementById('ttfmenu_'+parentObj.id.substr(10)+'_over') != undefined)
	{
		document.getElementById('ttfmenu_'+parentObj.id.substr(10)+'_over').style.display = "inline";
		document.getElementById('ttfmenu_'+parentObj.id.substr(10)).style.display = "none";
	}
	parentObj.className = "hover";
	menu_showPopup(parentId, event, _submenuObj, parentObj, position);
}

function menu_exitPopupDelayed2(parentId, parentObj, event)
{
	parentObj.className = currItem[1];
	if (document.getElementById('ttfmenu_'+parentObj.id.substr(10)+'_over') != undefined)
	{
		document.getElementById('ttfmenu_'+parentObj.id.substr(10)+'_over').style.display = "none";
		document.getElementById('ttfmenu_'+parentObj.id.substr(10)).style.display = "inline";
	}
	var _menu = g_menus["menu" + parentId];
	if (!_menu)
		return;
		
	if (!_menu.doExit)
	{
		_menu.doExit = true;
		delayItem = currItem;
		var callback = function() { menu_exitPopup2(parentId); }
		_menu.timerHandle = window.setTimeout(callback, 1000);
	}
}

///// Submenu

function menu_mouseOver(obj, parent, id, event)
{
	if (obj.childNodes[1] != undefined && obj.childNodes[1].id == "")
		var tmpobj = document.getElementById(id);
	else
		var tmpobj = obj.childNodes[1];
	if (obj.childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].id != undefined)
	{
		obj.childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].style.display = "inline";
		obj.childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[1].style.display = "none";
	}
	obj.className = "hover"; 
	menu_showPopup(parent, event, tmpobj, obj, "right"); 
}

function menu_mouseOut(obj, parent, id, event)
{
	var _menu = g_menus["menu" + parent];
	if (!_menu || !_menu.currentSubmenu)
	{
		if (obj.childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].id != undefined)
		{
			obj.childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].style.display = "none";
			obj.childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[1].style.display = "inline";
		}
		obj.className="normal";	
	}
}

///// Sidemenu

var side_prev_class = "";

function sideOver(x) {
	side_prev_class = x.className;
	if (document.getElementById("ttfsidemenu_"+x.id+"_over") != undefined)
	{
		document.getElementById("ttfsidemenu_"+x.id+"_over").style.display = "inline";
		document.getElementById("ttfsidemenu_"+x.id).style.display = "none";
	}
	x.className = "hover";
}

function sideOut(x) {
	if (document.getElementById("ttfsidemenu_"+x.id+"_over") != undefined)
	{
		document.getElementById("ttfsidemenu_"+x.id+"_over").style.display = "none";
		document.getElementById("ttfsidemenu_"+x.id).style.display = "inline";
	}
	x.className = side_prev_class;
}