/****************************************************************************************************************************/
/* Get all elements with specified attribute properties																							
/****************************************************************************************************************************/ 
function getElementsByAttribute(oElm, strTagName, strAttributeName, strAttributeValue){
    var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    var oAttributeValue = (typeof strAttributeValue != "undefined")? new RegExp("(^|\\s)" + strAttributeValue + "(\\s|$)") : null;
    var oCurrent;
    var oAttribute;
    for(var i=0; i<arrElements.length; i++){
        oCurrent = arrElements[i];
        oAttribute = oCurrent.getAttribute(strAttributeName);
        if(typeof oAttribute == "string" && oAttribute.length > 0){
            if(typeof strAttributeValue == "undefined" || (oAttributeValue && oAttributeValue.test(oAttribute))){
                arrReturnElements.push(oCurrent);
            }
        }
    }
    return arrReturnElements;
}

/****************************************************************************************************************************/
/* Gives x, y, width and heigth of an object																								
/****************************************************************************************************************************/
function getObjectDimensions(obj){
	var arr = new Array;
	var offsetX = 0;
	var offsetY = 0;
	var offsetW = obj.offsetWidth;
	var offsetH = obj.offsetHeight;

	if (obj.offsetParent){
		while(1){
			offsetX += obj.offsetLeft;
			offsetY += obj.offsetTop;

			if (!obj.offsetParent){
				break;
			}
			obj=obj.offsetParent;
		}
	}else if(obj.x) {
		offsetX += obj.x;
		offsetY += obj.y;
	}

	arr['x'] = offsetX;
	arr['y'] = offsetY;
	arr['w'] = offsetW;
	arr['h'] = offsetH;

	return arr;
}

function mouseCoords(ev){
	if(ev.pageX || ev.pageY){
		return {x:ev.pageX, y:ev.pageY};
	}
	
	return {
		x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
		y:ev.clientY + document.body.scrollTop  - document.body.clientTop
	};
}	

function isIn(object,mouseX,mouseY) {
	var menuPos = getObjectDimensions(object);
	
	var X_min = menuPos['x'];
	var X_max = menuPos['x']+menuPos['w'];
	var Y_min = menuPos['y'];
	var Y_max = menuPos['y']+menuPos['h'];
	
	if(mouseX < X_min || mouseX > X_max)	{
		return false;
	} else if(mouseY < Y_min || mouseY > Y_max)	{
		return false;	
	}
    
	return true;
}

function checkAllMenusMouseout(menu, event)	{
	if(!event){
		event=window.event;
	}
	
	var mousePos = mouseCoords(event);
	var mouseover = false;
	
	var menus = getElementsByAttribute(root_menu,"DIV","u:menu_horizontal","true");
	for(var i =0;i < menus.length && !mouseover; i++)	{
		if(menus[i].style.display == "block")	{
			// Controleren of de muis zich hierboven bevind
			if(isIn(menus[i],mousePos.x,mousePos.y))	{
				mouseover = true;
				break;
			}
		}
	}
	
	if(!mouseover)	{
		hideAllMenusFromLevelDocument();
	} 

}

function showMenu(menu)	{
	
	// Level van menu bepalen 
	var level = menu.attributes['u:menu_level'].nodeValue;
	
	// Alle menu van deze level bepalen
	hideAllMenusFromLevel(parseInt(level)+1);
	
	// Alle elementen ophalen die u:parent="" hebben gelijk aan huidige id
	var child_menus = getElementsByAttribute(root_menu,'DIV','u:menu_parent',menu.id);

	var dimension = getObjectDimensions(menu);
	if(level == 1)	{
		// Begint onder het menu
		var menu_height = 29;
	} else {
		// Begint gelijk recht van het menu op gelijke hoogte
		var menu_height = 0;
	}
	
	// Alle child loopen om ze te tonen
	for(var i=0; i < child_menus.length; i++){
        var child_menu = child_menus[i];
        
        // Uitklap menu tonen
		child_menu.style.display = "block";
		child_menu.style.position = "absolute";
		var currentMenu = getObjectDimensions(child_menu);
		
		if(level == 1)	{
			// level 1 klapt recht naar beneden uit
			child_menu.style.left = dimension['x']+"px";
			child_menu.style.top = (dimension['y']+menu_height)+"px";
		} else {
			// Andere level klappen naar rechts uit
			child_menu.style.left = (dimension['x']+dimension['w'])+"px";
			child_menu.style.top = (dimension['y']+menu_height)+"px";
		}
		
		menu_height += currentMenu['h'];
    }
}

function hideAllMenusFromLevel(level)	{
	var menus = getElementsByAttribute(root_menu,"DIV","u:menu_level",level);
	for(var i =0;i < menus.length; i++)	{
		//alert("DEL::"+menus[i].id);
		menus[i].style.display = "none";
	}
	if(menus.length > 0)	{
		hideAllMenusFromLevel(level+1);
	}
}

function hideAllMenusFromLevelDocument()	{
	hideAllMenusFromLevel(2);
}


