 /* Implement css styles
	.selected {}
	.closed {}	
*/

var INCLUDEFIRSTLEVEL = 0;
var EXCLUDEFIRSTLEVEL = 1;

var ISOTHEREVENT = 0;
var ISMOUSEEVENT = 1;
var ISKEYEVENT = 2;

// init functions
function templateType3Init(){
	var div = document.getElementById("divrootmenu_init");
	if(div !=null){
if (document.getElementById("rootmenu")!=null)
{
		div.id="divrootmenu";
		var menuElements = getElementsByType("ul", "rootmenu");
		for(i=0; i<menuElements.length;i++){
				if(isFirstLevel(menuElements[i].id)){menuElements[i].className="closed";}
		}
}
	}
}

function genericTemplateInit(){
if (document.getElementById("rootmenu")!=null){
	elementExStr = getSelectedElement();
	if(elementExStr!=undefined){
		var nodes = getUlNodesInPath(elementExStr);
		for(j=0; j<nodes.length; j++){
			nodes[j].className="";
			if(isSecondLevel(nodes[j].id)){
				var imgNode = getImgNode(nodes[j].id);
				imgNode.className="img_opened";
			}			
		}
	}
}
}


function hEventsLoader(){
if (document.getElementById("rootmenu")!=null){
	var liElements = getElementsByType("li", "rootmenu");
	for(i=0; i<liElements .length;i++){
		if(liElements[i].id.lastIndexOf("h3container_")>=0){
			var r = ""
			liElements[i].onmouseover = function(){
				toggleMenuLayerOver(this);
				return false;
			};
			liElements[i].onmouseout= function(){
				toggleMenuLayerOut(this);
				return false;
			};
		}else if(liElements[i].id.lastIndexOf("moli_")>=0){
			liElements[i].id = liElements[i].id.substring(2,liElements[i].id.length);
			liElements[i].onmouseover = function(event){
				toggleMenu(this, event);
			};
		}
		
	}
	
	var menuElements = getElementsByType("ul", "rootmenu");
	var list = new Array();
	var cont=0;
	for(i=0; i<menuElements.length;i++){
		if(isFirstLevel(menuElements[i].id)){
			list[cont++]=menuElements[i];
		}
	}
	for(j=0;j<list.length;j++){
		var content = getElementsByType("a",list[j].id);
		if(j==list.length-1){
			content[content.length-1].onblur = function(){
				hideMenuLevels();
				hideAllLayers();
				return false;
			};	
		}else{
			content[content.length-1].onblur = function(){
				hideMenuLevels();
				return false;
			};	
		}
	}	
}
}

function vEventsLoader(){
if (document.getElementById("rootmenu")!=null){
	var spanElements = getElementsByType("span", "rootmenu");
	for(i=0; i<spanElements .length;i++){

	        if(spanElements[i].id.lastIndexOf("elem_")>=0){
		        var aelem = spanElements[i].id.replace("elem_","ref_");
			var aelemobj = document.getElementById(aelem);
			var hasLink = (aelemobj !=null && aelemobj.href.lastIndexOf('#')>=0)?true:false;
		}
		if((spanElements[i].id.lastIndexOf("img_")>=0) || (spanElements[i].id.lastIndexOf("elem_")>=0 && hasLink)){
			spanElements[i].onclick = function(event)
			{
				toggleMenu(this, event);
				return false;
			};
		}
	}
		
	var menuElements = getElementsByType("ul", "rootmenu");
	for(j=0; j<menuElements.length;j++){
		if(isFirstLevel(menuElements[j].id)){
			var lastElement = menuElements[j];
		}
	}
	if(lastElement!=undefined){
		var content = getElementsByType("a", lastElement.id);
		content[content.length-1].onblur = function(){
			hideMenuLevels();
			return false;
		};	
	}
}
}
function genericEventsLoader(){
	
	if (document.getElementById("rootmenu")!=null)	
	{
		var liElements = getElementsByType("a", "rootmenu");
		for(i=0; i<liElements .length;i++){
			if(liElements[i].id.lastIndexOf("h3ref_")>=0){
				liElements[i].onfocus = function(){
					toggleMenuLayerOver(this);
					return false;
				};
			}
			
			if(liElements[i].rel.lastIndexOf("targetBlank")>=0){
				liElements[i].onclick = function(){
					newwindow=window.open(this.href);
					if (window.focus) {newwindow.focus();}	
						return false;
					};
			}
		}	
	}	
}

//menu actions functions
function hideAllLayers(){
if (document.getElementById("rootmenu")!=null)
{
	var menuElements = getElementsByType("ul", "rootmenu");
	for(i=0; i<menuElements.length;i++){
		if(isOnFirstLevel(menuElements[i].id)){
			menuElements[i].className="closed";
			var imgNode = getImgNode(menuElements[i].id);
			if(imgNode!=null){imgNode.className="img";}
		}
	}	
}
}

function hideMenuLevels(){

     if (document.getElementById("rootmenu")!=null)
       { 
	var menuElements = getElementsByType("ul", "rootmenu");
	for(i=0; i<menuElements.length;i++){
		if(!isOnFirstLevel(menuElements[i].id)){
			menuElements[i].className="closed";
				if(isSecondLevel(menuElements[i].id)){
					var imgNode = getImgNode(menuElements[i].id);
					imgNode.className = "img";
				}
		}
	}
       }
}

function toggleMenu(selectedUl, e){ 
	var ulNode = getUlNode(selectedUl.id);
	var imgNode = getImgNode(selectedUl.id);
	if(ulNode.className=="closed"){ //if node is closed
		hideMenuLevels();
		var ulNodes = getUlNodesInPath(selectedUl.id);
		for(i=0; i<ulNodes.length;i++){
			ulNodes[i].className="";
		}
		imgNode.className="img_opened";
	}else if(ulNode.className=="" && getEventType(e)!=ISKEYEVENT){ //if node is opened
		ulNode.className="closed";
		imgNode.className="img";
	}
}

function toggleMenuLayerOut(menuObj){
	hideMenuLevels();
	var ul = document.getElementById(getFirstChild(menuObj));
	ul.className="closed";
}

function toggleMenuLayerOver(menuObj){
if (document.getElementById("rootmenu")!=null){
	var menuUlStr = getFirstChild(menuObj);
	var menuElements = getElementsByType("ul", "rootmenu");
	for(i=0; i<menuElements.length;i++){
		if(isOnFirstLevel(menuElements[i].id)){
			if(menuElements[i].id == menuUlStr){
				menuElements[i].className="";
			}else{
				menuElements[i].className="closed";
			}
		}
	}
}
}

function toggleUpMenu(suffixStr, e){
	var ulElementStr = "menu" + suffixStr.substring(0, suffixStr.lastIndexOf("_"));
	var ulElement = document.getElementById(ulElementStr);
	if(ulElement!=null){
		toggleMenu(ulElement, e);
	}
}

// DOM element & event functions
function getEventType(e){
	var eventObj = window.event || e;
	var eventType=eventObj.type;
	if(eventType=="blur" || eventType=="focus" || eventType=="keyup"){
		return ISKEYEVENT;
	}else if(eventType=="click"){
		return ISMOUSEEVENT;		
	}else{
		return ISOTHEREVENT;
	}	
}

function getElementsByType(typeStr, containerStr){
	var dv = document.getElementById(containerStr);
	return dv.getElementsByTagName(typeStr);
}

function isOnFirstLevel(menuElementStr){
	return menuElementStr.split("_").length<3;
}

function isFirstLevel(menuElementStr){
	return menuElementStr.split("_").length==2;
}

function isSecondLevel(menuElementStr){
	return menuElementStr.split("_").length==3;
}

function getFirstChild(obj){
	var spl = obj.id.split("_");
	if(spl.length<0)
		return null;
	return 	"menu_" + spl[1];
}

function getUlNode(nodeIdStr){
	return document.getElementById("menu" + nodeIdStr.substring(nodeIdStr.indexOf("_"),nodeIdStr.length));
}

function getImgNode(nodeIdStr){
	var imgNode = "img" + nodeIdStr.substring(nodeIdStr.indexOf("_"),nodeIdStr.length);
	return document.getElementById(imgNode);
}


function getUlNodesInPath(nodeIdStr){
	var cadena = nodeIdStr.split("_");
	var cadena1 = "menu";
	var nodeList = new Array();

	for(i=1; i<cadena.length; i++){
		cadena1 = cadena1 + "_" + cadena[i];
		var element = document.getElementById(cadena1);
		if(element!=null && element!=undefined){
			nodeList.splice(nodeList.length, 0, "");
			nodeList[nodeList.length-1]=element;
		}
	}
	return nodeList;
}


function getSelectedElement(){
	var menuElements = getElementsByType("li", "rootmenu");
	for(i=0; i<menuElements.length;i++){
		if(menuElements[i].className.lastIndexOf("selected")>=0){
			var selectedElement = menuElements[i].id;
		}
	}

	return selectedElement;
}
