function loadMenu() {
	var menuId = document.getElementById("listamenu");
	var menuUL = menuId.getElementsByTagName("ul")[0];
	
	var dbgUL = menuId.getElementsByTagName("ul");
	for (var a in dbgUL) {
		dbgUL[a].id = "subUL_"+a;
	}

	var menuChilds = menuUL.childNodes;
	
	for (var i = 0; i < menuChilds.length; i++) {

		/*
		 * Primeiro Nível 1
		 */
		var menu0 = menuChilds[i];
		if (!(menu0.tagName && menu0.tagName.toLowerCase() == "li")) {
			continue;
			alert("menu0 false");
		}

		/*
		 * Procura por SubNivel 2
		 */
		var menuUL = menu0.getElementsByTagName("ul")[0];
		
		if (!menuUL) { //Sem subnivel 2
			loadMenu1Link(menu0);		 	
		 	continue;
		}
		
		loadSubMenu1(menu0);
		
		/*
		 * Segundo Nível 2
		 */
		var menu0Childs = menuUL.childNodes;
		for (var j = 0; j < menu0Childs.length; j++) {
			
			var menu1 = menu0Childs[j];
			
			if (!(menu1.tagName && menu1.tagName.toLowerCase() == "li"))
				continue;
				
			/*
			 * Procura por SubNivel 3
			 */
			var menuUL = menu1.getElementsByTagName("ul")[0];
			if (!menuUL) { //Sem subnivel 3
		 		loadMenu2Link(menu1);
		 		continue;
			}
			
			loadSubMenu2(menu1);
			
			/*
			 *  Terceiro Nivel 3
			 */
			var menu1Childs = menuUL.childNodes;
			for (var k = 0; k < menu1Childs.length; k++) {
				
				var menu2 = menu1Childs[k];
				
				if (!(menu2.tagName && menu2.tagName.toLowerCase() == "li"))
					continue;
					
				/*
				 * Procura por SubNivel 4
				 */
				var menuUL = menu2.getElementsByTagName("ul")[0];
				if (!menuUL) { //Sem subnivel 4
			 		loadMenu1Link(menu2);
			 		continue;
				}
				
				loadSubMenu3(menu2);
								
				/*
				 *  Quarto Nivel 4 (sem subniveis)
				 */
				var menu2Childs = menuUL.childNodes;
				for (var m = 0; m < menu2Childs.length; m++) {
					
					var menu3 = menu2Childs[m];
					
					if (!(menu3.tagName && menu3.tagName.toLowerCase() == "li"))
						continue;
						
				} //for Nivel 4												 
			} //for Nivel 3									 
		}//for Nivel 2			
	}//for Nivel 1
}

var subMenusCount = 0;
function loadSubMenu1(menu) {
	var menuATag = getATag(menu);
	menu.id = "subMenu" + (subMenusCount++);
	menuATag.onclick = function() {
		activeSubMenu(menu);
		//return false;
	}
}

function loadSubMenu2(menu) {
	var menuATag = getATag(menu);
	menu.id = "subMenu" + (subMenusCount++);

	menu.className = "submenu";
	
	menuATag.onclick = function() {
		activeSubMenu2(menu);
		//return false;
	}
}

function loadSubMenu3(menu) {
	var menuATag = getATag(menu);
	menu.id = "subMenu" + (subMenusCount++);
	menu.className = "submenu2";		
	menuATag.onclick = function() {
		activeSubMenu3(menu);
		//return false;
	}
}

function loadMenu1Link(menu) {
	writeNv(1,menu);
	var menuATag = getATag(menu);
	menu.id = "subMenu" + (subMenusCount++);
	menuATag.onclick = function() {
		removeAllFromNivel2();		
		//return false;
	}
}
function loadMenu2Link(menu) {
	writeNv(1,menu);
	var menuATag = getATag(menu);
	menu.id = "subMenu" + (subMenusCount++);
	menuATag.onclick = function() {
		removeAllFromNivel2(menu);
		//return false;
	}
}
function loadMenu3Link(menu) {
	writeNv(3,menu);
}
function loadMenu4Link(menu) {
	writeNv(4,menu);	
}

function getATag(elem) {
	if (elem.tagName && elem.tagName.toLowerCase() == "li") 
		return elem.getElementsByTagName("a")[0];
}

function writeNv(nv, menu) {
	//document.write("nivel"+nv+": "+getATag(menu)+"\n");
}

function activeSubMenu(menu) {
	var subMenu = menu.getElementsByTagName("ul")[0];

	removeAllFromNivel2();
	if (menu.className.indexOf("over") == -1) {
		showSubMenu(menu, subMenu);		
	}
	else {
		hideSubMenu(menu, subMenu);		
	}
		
}

function activeSubMenu2(menu) {
	var subMenu = menu.getElementsByTagName("ul")[0];

	removeAllFromNivel2();

	if (menu.className.indexOf("over") == -1) {
		showSubMenu(menu, subMenu);	
	}
	else {
		hideSubMenu(menu, subMenu);
	}
		
}

function activeSubMenu3(menu) {
	var subMenu = menu.getElementsByTagName("ul")[0];

	if (menu.className && menu.className.match(/over/g))
		hideSubMenu3(menu, subMenu);			
	else
		showSubMenu3(menu, subMenu);
		
}

function showSubMenu(menu, subMenu){
	menu.className = menu.className + " over";		
	subMenu.className = subMenu.className + " over";	
}
function hideSubMenu(menu, subMenu){
	menu.className = menu.className.replace(/ over|over/g, "");
	//menu.className = menu.className.replace(/over/g, "");		
	subMenu.className = subMenu.className.replace(/ over|over/g, "");
	//subMenu.className = subMenu.className.replace(/over/g, "");
}

function showSubMenu3(menu, subMenu){
	changeClassOfAllChildren(menu.parentNode, "over", '', true);
	subMenu.className = subMenu.className + " over";
}
function hideSubMenu3(menu, subMenu){
	menu.className = menu.className.replace(/ over|over/g, "");
//	menu.className = menu.className.replace(/over/g, "");		
	subMenu.className = subMenu.className.replace(/ over|over/g, "");
//	subMenu.className = subMenu.className.replace(/over/g, "");	
}

function removeAllFromNivel2() {

	var menuId = document.getElementById('listamenu').getElementsByTagName("ul")[0];
	var childsLI = menuId.childNodes;
	for (i in childsLI) {
		var elem = childsLI[i];
		if (!(elem.tagName && elem.tagName.toLowerCase() == "li"))
			continue;

		var subElem = elem.childNodes; 
		for (j in subElem) {
			if (subElem[j].className && subElem[j].className.match(/over/g))
				changeClassOfAllChildren(subElem[j], "over", '', true);
		}
	}
}

function changeClassOfAllChildren(elem, oldClass, newClass, append) {
	if (elem == null)
		return;
	
	if (append == null)
		append = false;
		
	var childs = elem.getElementsByTagName('*');
	
	for (i in childs) {
		if (childs[i].className && childs[i].className.indexOf(oldClass) > -1) {
			childs[i].className = childs[i].className.replace(/ over|over/g, "");
			//childs[i].className = childs[i].className.replace(/over/g, "");
			if (append)
				childs[i].className += newClass;
			else
				childs[i].className = newClass;
		}
	}
}
