// Menus
// Auteur : Eric Quillévéré 
// 04/11/2008
/*jsl:import 1-effets.js */
/*jsl:import divers.js */
var menu_Actuel=null;
var menu_zIndex=100;
var listeMenusEnCoursSuppr=Array(); // Menus en cours d'effacement
var listeMenusEnCoursAff=Array(); // Menus en cours d'affichage


function menu_Affiche(objAppelant, idMenu)
	{
	var objMenu=objet_Renvoie(idMenu);
	if (menu_Actuel==idMenu) 
		{
		// Menu actuellement affiché : on enlève l'éventuel suppression
		if (objMenu.timeoutMenu)
			{
			clearTimeout(objMenu.timeoutMenu);
			objMenu.timeoutMenu=null;
			}
		return; // Menu déjà affiché
		}
	if (tab_Recherche(listeMenusEnCoursAff, idMenu)!==null) return; // Menu en cours d'affichage
	
	
	if (objMenu)
		{
		var hauteur;
		var infosPosApp=objet_PosAbs(objAppelant);
		/*var infosPosParent=objet_PosAbs(objAppelant.offsetParent);*/
		
		// Calcule la taille la première fois
		if (!objMenu.hauteur)
			{
			var infosTaille=objet_TailleRenvoie(objMenu);
			hauteur=infosTaille.hauteur;
			objMenu.hauteur=hauteur;
			objMenu.style.height='2px';
			// Fixe la position gauche
			//objMenu.style.left=(infosPosApp.gauche-infosPosParent.gauche)+'px';
			//objMenu.style.left=(infosPosApp.gauche)+'px';

			// Calcule le décalage
			var temps=4;
			var decalage=(hauteur/temps)+1;
			objMenu.decalage=decalage;
			}
			
		// Menu en cours d'effacement ?
		if (tab_Recherche(listeMenusEnCoursSuppr, idMenu)!==null)
			{
			// Appelle la méthode de fin
			clearTimeout(objMenu.timeoutEffet);
			objMenu.fonctionApresFin();
			}			
		
		// Ferme les autres menus
		menu_FermeTous();

		// Style sur le nom du menu
		objMenu.objAppelant=objAppelant;
		menu_StyleMenu(idMenu, true);

		
		listeMenusEnCoursAff.push(idMenu);
		new Effet (idMenu, {effet:'Deroulant', typeAffichage:0, vitesse:objMenu.decalage, limiteH:objMenu.hauteur, padding:0, 
			cacherApres:false, opt_intervale:10, 
			fonctionFin:function()
				{
				tab_Supprime(listeMenusEnCoursAff,idMenu);
				}});	
				
		// Cache le menu si quitte le nom
		objAppelant.onmouseout=function()
			{menu_AffecteTimeout(idMenu, 300);	};
		// Cache le menu si quitte le cadre
		objMenu.onmouseout=function()	
			{menu_AffecteTimeout(idMenu, 300);	};
			

		// Réitère le timeout
		objMenu.onmouseover=function()
			{ 
			clearTimeout(objMenu.timeoutMenu);
			};
	
		menu_zIndex++;
		objMenu.style.zIndex=menu_zIndex;

		menu_Actuel=idMenu;
		}
	
	
	}
	
// Style sur le nom du menu
function menu_StyleMenu(idMenu, estSelectionne)
	{
	
	var objMenu=objet_Renvoie(idMenu);
	if (objMenu)		
		{	
		var classe=objMenu.objAppelant.className;
		/*
		if (estSelectionne)
			{
			if (classe=='li_menu_suiv')
				classe='li_menu_suiv_sel';
			else if (classe=='li_menu_prem')
				classe='li_menu_prem_sel';
			}
		else
			{
			if (classe=='li_menu_suiv_sel')
				classe='li_menu_suiv';
			else if (classe=='li_menu_prem_sel')
				classe='li_menu_prem';
			}
			*/
		if (classe=='menuDeroulant_Entete_Select')
			classe='menuDeroulant_Entete_Normal';
		else 
			classe='menuDeroulant_Entete_Select';
			
		objMenu.objAppelant.className=classe;
		
		}
		
	}	
	
	
// Ferme tous les menus immédiatement
function menu_FermeTous()
	{
	// Ferme les menus en cours d'affichage
	while (listeMenusEnCoursAff.length>0)
		{
		var idMenu=listeMenusEnCoursAff[0];
		
		var objMenu=objet_Renvoie(idMenu);
		if (objMenu)		
			{
			clearTimeout(objMenu.timeoutEffet); // Timeout de l'effet
			objMenu.fonctionApresFin();
			menu_Effacer(idMenu);
			}
		}		
	
	// Ferme le menu actuel	
	if (menu_Actuel!==null)
		{
		objMenu=objet_Renvoie(menu_Actuel);
		if (objMenu)		
			{
			menu_Effacer(menu_Actuel);
			}
		}	
	
	}
	
// Affecte un timeout de fin d'affichage
function menu_AffecteTimeout(idMenu, temps)
	{
	var objMenu=objet_Renvoie(idMenu);
	if (objMenu)
		{	
		// Efface le timeout précédent
		if (objMenu.timeoutMenu)
			clearTimeout(objMenu.timeoutMenu);
		
		var timeoutMenu=setTimeout('menu_Effacer(\'' + idMenu + '\')',temps);
		objMenu.timeoutMenu=timeoutMenu;
		}
	}
	
// Efface le menu	
function menu_Effacer(idMenu)
	{
	if (menu_Actuel==idMenu) menu_Actuel=null;
	if (tab_Recherche(listeMenusEnCoursSuppr,idMenu)!==null) return;
	
	
	var objMenu=objet_Renvoie(idMenu);
	if (objMenu)
		{	
		// Efface le timeout précédent
		if (objMenu.timeoutMenu)
			clearTimeout(objMenu.timeoutMenu);		
		
		// Si menu en cours d'affichage, force la fin
		if (tab_Recherche(listeMenusEnCoursAff,idMenu)!==null)
			{
			clearTimeout(objMenu.timeoutEffet);
			objMenu.fonctionApresFin();
			}
			
		// Change le style
		menu_StyleMenu(idMenu, false);
		
		listeMenusEnCoursSuppr.push(idMenu); // Menu en cours d'effacement
		new Effet (idMenu, {effet:'Deroulant', typeAffichage:1, vitesse:objMenu.decalage, limiteH:10, padding:0, 
			cacherApres:false, opt_intervale:10, 
			fonctionFin:function()
				{
				objMenu.style.visibility='hidden';		
				tab_Supprime(listeMenusEnCoursSuppr, idMenu);
				
				}}
			);
		}
		
	}

