// classes utilisées pour les menus déroulants du site fileur de verre
// nécessite les classes Layer() et Lien()
// dernière modif  -


var tab_menus = new Array();

function MenuHome(nom_layer)
    {
	this.nbSousMenus 	= 0;			// compteur d'éléments du menu
	this.layer 		= new Layer(nom_layer);	// correspondance du menu avec le layer qui le contient
	this.sousMenus 		= new Array();		// tableau des elements de classe Lien()
	this.open 		= openMenu;		// fonction pour ouvrir le menu
	this.close 		= closeMenu;		// fonction pour fermer le menu
	this.add 		= addSousMenu;		// fonction pour ajouter un élément au menu
	this.index 		= tab_menus.length;	// index du menu dans le tableau des menus
	this.contenu 		= '';			// variable pour le contenu html du layer
	tab_menus[this.index] 	= this;			// mettre le nouveau menu dans le tableau des menus

	// parties spécifiques à l'habillage
	//	* complementHTML	code html à ajouter après les éléments du menu
	//	* nullHTML		code html quand le menu n'est pas ouvert
	//	* separateurHTML	code html entre chaque élément du menu
	//	* masqueElement		code html de chaque sous-menu, doit contenir '#element#' qui sera remplacé par le lien
	//	* heightMini		hauteur minimale du menu

	this.complementHTML 	= '<img src="accueil_fichiers/filet-menu.gif" width=159 height=5 border=0>';
	this.nullHTML 		= '<img src="accueil_fichiers/filet-menu.gif" width=159 height=5 border=0>';
	this.separateurHTML 	= '';
	this.masqueElement 	= '<li class="sousmenu">#element#</li>';
	this.masquesousElement 	= '<span class="sousmenu"><img src="accueil_fichiers/spacer.gif" width=25 height=1 border=0>#element#</span><br>';
	this.heightMini 	= 15;
}

function Menu(nom_layer){
	// structure identique à la classe MenuHome mais valable pour les pages intérieures (les 5 dernières propriétés changent)
	this.nbSousMenus 	= 0;
	this.layer 		= new Layer(nom_layer);
	this.sousMenus 		= new Array();
	this.open 		= openMenu;
	this.close 		= closeMenu;
	this.add 		= addSousMenu;
	this.index 		= tab_menus.length;
	this.contenu 		= '';
	tab_menus[this.index] 	= this;

	// parties spécifiques à l'habillage du menu des pages intérieures
	this.complementHTML 	= '';
	this.nullHTML 		= '<img src="accueil_fichiers/spacer.gif" width=159 height=5 border=0>';
	this.separateurHTML 	= '<br>';
	this.masqueElement 	= '<img src="accueil_fichiers/fleche-sous-menu.gif" width=7 height=11 border=0>&nbsp;#element#';
	this.masquesousElement 	= '<img src="accueil_fichiers/spacer.gif" width=20 height=1 border=0>&nbsp;#element#';
	this.heightMini 	= 5;
	this.openDirect		= openMenuDirect;
}
//valeur initiale 5//
function y_a_t_il_un_menu_ouvert(){
	var i=0;
	var r = false;
	while (i<tab_menus.length){
		r |= (tab_menus[i].layer.getHeight()>tab_menus[i].heightMini);
		i++;
	}
	return r;
}
// parties spécifiques pour la dimension du sous-menu déployé//
//augmenter la valeur sousMenus.length*16; le 25/10/2009 (initialement à 13)//
//pour éviter le chevauchement sous Firefox du menu déroulant Infos pratiques //
function derouleMenu(n){
	var h = tab_menus[n].layer.getHeight();
	var h_old = h;
	var h_max = 2+tab_menus[n].heightMini + tab_menus[n].sousMenus.length*16;
	h += 10;
	if (h>h_max){
		h = h_max;
	}
	tab_menus[n].layer.setHeight(h);
	if (h<h_max){
		setTimeout('derouleMenu('+n+')',50);
	} else {
		tab_menus[n].layer.write(tab_menus[n].contenu);
	}
}


function enrouleMenu(n){
	var h = tab_menus[n].layer.getHeight();
	var h_min = tab_menus[n].heightMini;
	h -= 10;
	if (h<h_min){
		h = h_min;
	}
	tab_menus[n].layer.setHeight(h);
	if (h>h_min){
		setTimeout('enrouleMenu('+n+')',50);
	} else {
		tab_menus[n].layer.clear();
		tab_menus[n].layer.write(tab_menus[n].nullHTML);
	}
}

function openMenu(){
	var contenu = '<div style="font-size:0.95em;">';
	var i=0;
	this.layer.setHeight(this.heightMini);
	while (i<this.sousMenus.length){
		var t = this.sousMenus[i].texte;
		if (t.substring(0,1)=='-'){
			// élément sous forme de sous-sous-rubrique
			contenu += this.masquesousElement.replace('#element#',this.sousMenus[i].HTML());
		} else {
			// élément normal
			contenu += this.masqueElement.replace('#element#',this.sousMenus[i].HTML());
		}
		i++;
		if (i!=this.sousMenus.length){
			contenu += this.separateurHTML;
		}
	}
	contenu += '</div>'+this.complementHTML;
	this.layer.clear();
	this.contenu = contenu;
	if (y_a_t_il_un_menu_ouvert()){
		// attend la fermeture du menu qui est déjà en cours avant de lancer le déroulement du nouveau
		setTimeout('derouleMenu('+this.index+')',500);
	}
	else {
		derouleMenu(this.index);
	}
	
}

function openMenuDirect(){
	// copie de la fonction openMenu mais sans l'effet déroulé
	var contenu = '<div style="0.95em;">';
	var i=0;
	this.layer.setHeight(this.heightMini);
	while (i<this.sousMenus.length){
		var t = this.sousMenus[i].texte;
		if (t.substring(0,1)=='-'){
			// élément sous forme de sous-sous-rubrique
			contenu += this.masquesousElement.replace('#element#',this.sousMenus[i].HTML());
		} else {
			// élément normal
			contenu += this.masqueElement.replace('#element#',this.sousMenus[i].HTML());
		}
		i++;
		if (i!=this.sousMenus.length){
			contenu += this.separateurHTML;
		}
	}
	contenu += '</div>'+this.complementHTML;
	this.layer.clear();
	this.contenu = contenu;
	this.layer.setHeight(2+this.heightMini + this.sousMenus.length*13);
	this.layer.write(this.contenu);
}


function closeMenu(num_menu){
	this.layer.clear();
	this.layer.write(this.complementHTML);
	enrouleMenu(this.index);
}

function addSousMenu(texte,url,target){
	this.sousMenus[this.sousMenus.length] = new Lien(texte,url,target);
}
