/***************************************************************\
*							*
*	(c) 2003-2005 Wouter van der Harg			*
*		Particially created for Getronics PinkRoccade	*
*							*
*		100% Drempelsweg compatible			*
*		Mozilla 1.0 / MSIE 5.0 (PC) compatible		*
*							*
*		contact:	wouter.vanderharg@getronics.com	*
*							*
* --------------------------------------------------------------------------------------- *
*		 Small code parts used of Matt Kruse 		*
* --------------------------------------------------------------------------------------- *
*  20071003 - Added code to hide dropdown selectboxes                               *
\***************************************************************/
var navroot = null;

var w3cdom = (document.getElementsByTagName && document.createElement); 

var findPosX = function(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; 
} 

var findPosY = function(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; 
} 

var isUnderlyingDropdown = function(menuX1, menuY1, menuX2, menuY2, elementX1, elementY1, elementX2, elementY2) 
{ 
	var overlapLeft = (elementX1 > menuX1 && elementX1 < menuX2); 
	var overlapRight = (menuX1 > elementX1 && menuX1 < elementX2); 
	var overlapTop = (elementY1 > menuY1 && elementY1 < menuY2); 
	var overlapBottom = (elementY2 < menuY2 && menuY2 > elementY2); 
	return( (overlapTop&&(overlapLeft||overlapRight)) || (overlapBottom&&(overlapLeft||overlapRight)) ); 
} 

var hideUnderlyingDropdowns = function(menuX1, menuY1, menuX2, menuY2) 
{ 
	if(w3cdom) 
	{ 
		var selectElements = document.getElementsByTagName("select"); 
		for(var i=0; i<selectElements.length; i++) 
		{ 
			var current = selectElements[i]; 
			var elementX1 = findPosX(current); 
			var elementY1 = findPosY(current); 
			var elementX2 = elementX1 + current.offsetWidth; 
			var elementY2 = elementY1 + current.offsetHeight; 
			if(isUnderlyingDropdown(menuX1, menuY1, menuX2, menuY2, elementX1, elementY1, elementX2, elementY2)) 
			{
				current.style.visibility = "hidden"; 
			} 
			current = null; 
		} 
	selectElements = null; 
	} 
return(true); 
} 

var showUnderlyingDropdowns = function() 
{ 
	if(w3cdom) 
	{ 
		var selectElements = document.getElementsByTagName("select"); 
		for(var i=0; i<selectElements.length; i++) 
		{ 
			var current = selectElements[i]; 
			if(current && current.style.visibility == "hidden") 
			{ 
				current.style.visibility = "visible"; 
			} 
			current = null; 
		} 
		selectElements = null; 
	} 
return(true); 
} 

// HIDE DROPDOWN 
var initDropDowns = function(e) 
{ 
	var nav = document.getElementById("mainMenu"); 
	nav.onmouseover = hideDD; 
	nav.onmouseout = showDD; 
	
} 

var hideDD = function()
{ 
	var result; 
	if(document.all) 
	{ 
		var nodes = [this]; 
		for(var i=0; i<nodes.length; i++) 
		{ 
			topstackingnodes = nodes[i].all.tags("ul"); 
			for(var i=0; i<topstackingnodes.length; i++) 
			{ 
				var menunode = topstackingnodes[i]; 
				var x1 = findPosX(menunode); 
				var y1 = findPosY(menunode); 
				var x2 = x1 + menunode.offsetWidth; 
				var y2 = y1 + menunode.offsetHeight; 
				hideUnderlyingDropdowns(x1,y1,x2,y2); 
				menunode = null; 
			} 
		} 
	topstackingnodes = null; 
	} 
return true; 
} 

var showDD = function()
{ 
	showUnderlyingDropdowns(); 
	return(true); 
} 
// END HIDE DROPDOWN 

function activateMenu(nav)
{
	/* DOM browsers only */
	if (document.getElementById)
	{
		navroot = nav;
		
		/* Test if menu exists */
		if (navroot != null)
		{
			// Get all leaves in the branch (no mather how deep they are)
			var lis = navroot.getElementsByTagName("LI");
			for (i=0; i<lis.length; i++) 
			{
				if (testForNestedBranch(lis[i]) && testForDOMaddition(lis[i]))
				{
					// on mouse over, show embedded list
					lis[i].onmouseover=function()
					{
						showThree(this);
					}
			
					// on mouse out, hide all lists
					lis[i].onmouseout=function()
					{
						hideAll();
					}
				}
			}
		}
	}
}

function hideAll()
{
	var lis = navroot.getElementsByTagName("ul");
	for (i=0; i<lis.length; i++)
	{
		if (testForDOMaddition(lis[i].parentNode))
		{
			lis[i].style.display="none";
		}
	}
}

function showThree(element)
{
	initDropDowns();
	element.getElementsByTagName("ul")[0].style.display="block";
	if (element.parentNode.tagName=="ul")
	{
		showThree(element.parentNode.parentNode);
	}
}

function testForNestedBranch(leave)
{
	// Test if the leave contains an UL
	if (document.getElementById)
	{
		return (leave.getElementsByTagName("ul").length>0);
	}
	else
	{
		return null;
	}
}

function testForDOMaddition(leave)
{
	// Test if the leave has 'DOM_menu' in it's class list
	if (document.getElementById)
	{
		var pattern = new RegExp("\\bDOM_menu\\b");				// Bevat de opgegeven class
		return pattern.test(leave.className);
	}
	else
	{
		return null;
	}
}