/*
	ED - 12.07.2006
	
	Script pour gerer les menus deroulants structures comme des listes <ul> imbriquees.
	Les listes <ul> parentes (ou le menu de plus haut niveau) doient avoir une classe dont
	la valeur est definie ici par la variable : classeMenuDeroulant
	
	initMenus() parcour le document a la recherche des listes <ul> possedant cette classe
	et attache des gestionnaires d evenements aux <li> qui contiennent des sous menus
	pour les faire apparaitre et disparaitre au survol
	
	Attention: la fonction addEvent() definie dans defaut.js est requise !

*/
var classeMenuDeroulant = /menu_deroulant/;
var classeMenuExtranet = /menu_extranet/;
var classeMenuCliquable = /menu_cliquable/;
var selectedItem = null;

/*
	Attache les gestionnaires d evenements aux lis qui ont des sous menus
*/
function initMenus() {
	var menu, menus, lis, liSousMenus;
	if(document.getElementById && document.getElementsByTagName){
		menus = document.getElementsByTagName("ul");
		if(menus.length > 0 ){
			for(var j=0; j<menus.length; j++){
				menu = menus[j];
				if(menu.className.match(classeMenuDeroulant)){
					lis = menu.getElementsByTagName("li");
					for (var i=0; i<lis.length; i++){
						liSousMenus = lis[i];
						if (liSousMenus.getElementsByTagName("ul").length > 0){
							// a un sous-menu
							addEvent(liSousMenus,"mouseover", montrePremierSousMenu);
							addEvent(liSousMenus,"focus", montrePremierSousMenu);
							addEvent(liSousMenus,"mouseout", cachePremierSousMenu);
							addEvent(liSousMenus,"blur", cachePremierSousMenu);
						}
					}
				}
				else if(menu.className.match(classeMenuExtranet)){
					lis = menu.getElementsByTagName("li");
					for(var i=0; i<lis.length; i++){
						liSousMenus = lis[i];
						addEvent(liSousMenus,"mouseover", remontePremierSousMenu);
						addEvent(liSousMenus,"focus", remontePremierSousMenu);
						addEvent(liSousMenus,"mouseout", redescendPremierSousMenu);
						addEvent(liSousMenus,"blur", redescendPremierSousMenu);
						if(liSousMenus.getElementsByTagName("ul").length > 0){
							liSousMenus.getElementsByTagName("ul")[0].style.visibility = "visible";
						}
						if (liSousMenus.className.match(/focus/)){
							selectedItem = liSousMenus;
							selectedItem.getElementsByTagName("ul")[0].style.zIndex = '10';
						}
					}
				}
				else if(menu.className.match(classeMenuCliquable)){
					lis = menu.getElementsByTagName("li");
					for(var i=0; i<lis.length; i++){
						liSousMenus = lis[i].getElementsByTagName("ul");
						if(liSousMenus.length > 0){
							// a un sous-menu
							addEvent(lis[i],"click", changeAffichageSousMenu);
						}
					}
				}
			}
		}
	}
}

/*
	Montre et cache les sous menus
*/
function montrePremierSousMenu(){
	this.getElementsByTagName("ul")[0].style.visibility = "visible";
}

function cachePremierSousMenu(){
	this.getElementsByTagName("ul")[0].style.visibility = "hidden";
}

function remontePremierSousMenu() {
	if(selectedItem && selectedItem.getElementsByTagName("ul").length > 0){
		selectedItem.getElementsByTagName("ul")[0].style.zIndex = "1";
	}
	if(this.getElementsByTagName("ul").length > 0){
		this.getElementsByTagName("ul")[0].style.zIndex = "10";
	}
}
function redescendPremierSousMenu() {
	if(this.getElementsByTagName("ul").length > 0){
		this.getElementsByTagName("ul")[0].style.zIndex = "1";
	}
	if(selectedItem && selectedItem.getElementsByTagName("ul").length > 0){
		selectedItem.getElementsByTagName("ul")[0].style.zIndex = "10";
	}
}

function changeAffichageSousMenu(){
	
	var styleAffichage = this.getElementsByTagName("ul")[0].style.visibility;

	if (styleAffichage == null) {
		styleAffichage = 'hidden';
	}
	else if (styleAffichage == 'visible') {
		styleAffichage = 'hidden';
	}
	else {
		styleAffichage = 'visible';
	}

	this.getElementsByTagName("ul")[0].style.visibility = styleAffichage;
}

/*
	Appelle initMenus() au chargement de la page
*/
addEvent(window,"load", initMenus);