
var delai,menu,dul,db,class_menu;
pause=750; 
D=document;  
ie=D.all?1:0; 
op=window.opera?1:0; 
dtd=D.compatMode=="CSS1Compat"?1:0; //



// Correction bug padding + border ie et opéra non dtd
da=10                // des liens
dul=(ie&!dtd)?4:0;   // des ul
danc=(ie&!dtd)?10:0; // hauteur du div "ancre_menu"

//////////////////////////////////////////////////////////////////////
// Désactivation d'un item de menu                                  //
// ---------------------------------------------------------------- //
//  - id_item : identidiant de l'item (balise LI)                   //
//////////////////////////////////////////////////////////////////////
function WidgetMenuItemDesactiver (id_item) {
  // Test sur l'item identifié
  if(!document.getElementById(id_item)) return;
  // On récupère l'item de menu
  var item = document.getElementById(id_item);
  // On vérfiie que l'item est bien de type LI
  if (item.tagName.toUpperCase() != "LI") return;
  // Son style de vient inactif
  item.className="item_inactif";
  item.setAttribute("etat","inactif");
  lien = false;
  // Pas de structure conforme à ce qui est attendu
  if (!item.childNodes[0]) return;
  if (!item.childNodes[0].tagName) return;
  // Récupération du lien hypertexte pour le menu action
  if (item.childNodes[0].tagName.toUpperCase() == "A") lien = item.childNodes[0];
  // Un lien de type menu action n'est pas trouvé
  if (!lien) {
    // Test sue la structure du menu navigation
    if (item.childNodes[0].childNodes[1]) {
      // On récupère le lien
      if (item.childNodes[0].childNodes[1].tagName.toUpperCase() == "A") lien = item.childNodes[0].childNodes[1];
    }
  }
  // Si le lien (balise A) est bien la ou on l'attend on poursuit
  if (lien) {
    // On test si le lien est bien actif
    if ((lien.getAttribute("actif?") == "Oui") || (lien.getAttribute("actif?") == null)) {
      // On sauvegarde les liens par des attributs
      lien.setAttribute("href_actif",lien.href);
      lien.setAttribute("onclick_actif",lien.onclick);
      lien.setAttribute("onblur_actif",lien.onblur);
      // On annules les liens de la balise
      lien.href="#";
      lien.onclick="";
      lien.onblur="";
      // On indique qu'il est actif
      lien.setAttribute("actif?","Non");
    }
  }
}

//////////////////////////////////////////////////////////////////////
// Activation d'un item de menu                                  //
// ---------------------------------------------------------------- //
//  - id_item : identidiant de l'item (balise LI)                   //
//////////////////////////////////////////////////////////////////////
function WidgetMenuItemActiver (id_item) {
  // Test sur l'item identifié
  if(!document.getElementById(id_item)) return;
  // On récupère l'item de menu
  var item =  document.getElementById(id_item);
  // On vérfiie que l'item est bien de type LI
  if (item.tagName.toUpperCase() != "LI") return;
  // Son style devient normal (actif)
  item.className="";
  item.setAttribute("etat","actif");
  lien = false;
  // Pas de structure conforme à ce qui est attendu
  if (!item.childNodes[0]) return;
  if (!item.childNodes[0].tagName) return;
  // Récupération du lien hypertexte pour le menu action
  if (item.childNodes[0].tagName.toUpperCase() == "A") lien = item.childNodes[0];
  // Un lien de type menu action n'est pas trouvé
  if (!lien) {
    // Test sue la structure du menu navigation
    if (item.childNodes[0].childNodes[1]) {
      // On récupère le lien
      if (item.childNodes[0].childNodes[1].tagName.toUpperCase() == "A") lien = item.childNodes[0].childNodes[1];
    }
  }
  // Si le lien (balise A) est bien la ou on l'attend on poursuit
  if (lien) {
    // On test si le lien a bien été désactivé
    if (lien.getAttribute("actif?") == "Non") {
      // On indique qu'il est actif
      lien.setAttribute("actif?","Oui");
      // On rétablit les liens sur la base des attributs définis par WidgetMenuItemDesactiver
      if (lien.getAttribute("href_actif")    != null) lien.href    = lien.getAttribute("href_actif");
      if (lien.getAttribute("onclick_actif") != null) lien.onclick = lien.getAttribute("onclick_actif");
      if (lien.getAttribute("onblur_actif") != null)  lien.onblur  = lien.getAttribute("onblur_actif");
     }
   }
 }

//////////////////////////////////////////////////////////////////////
// Initialisation du menu                                           //
// ---------------------------------------------------------------- //
//  - id_menu    : identifiant du menu (première balise)            //
//  - class_menu : type de menu (menu_navig ou menu_action)         //
//////////////////////////////////////////////////////////////////////
function WidgetMenuInitialiser (id_menu,class_menu) {
  if(!document.getElementById(id_menu)) return;

  de=ie&!op&&dtd?D.documentElement:D.body //exception IE6 dtd
  fx=ie&!op?de.clientWidth:innerWidth-20  //l fenêtre
  wul=[] // tableau des largeurs de sous-menus

  // Récupération des éléments de base
  menu     = document.getElementById(id_menu);
  t_select = document.getElementsByTagName('select');
  as       = menu.getElementsByTagName('a');
  sousMenu = menu.getElementsByTagName('ul');
  lis      = menu.getElementsByTagName('li');

  // Cas du menu action qui est tout simple
  if (class_menu == "menu_action") {
    menu.className="menu_action";
    for(i=0;i<lis.length;i++) {
      lis[i].onmouseover = function(){WidgetMenuActionSurvolGerer(this);}
      lis[i].onmouseout  = function(){WidgetMenuActionSurvolGerer(this);}

      // L'item possède un sous menu
      if (lis[i].getElementsByTagName('ul').length > 0 ) {
        // On agmente sa largeur pour lui ajouter la fleche vers le bas
        lis[i].style.width= lis[i].offsetWidth+12+"px";
        lis[i].getElementsByTagName('a')[0].className = 'menu_action_fleche_bas';
       }

      // On gère la fermeture
      if (lis[i].childNodes[0].tagName.toUpperCase() == "A") {
        // Si le père de l'item n'est pas le menu (== item de niveau 2)
        if (lis[i].parentNode.id != id_menu) {
          // On récupère le lein hypertexte
          var lien=lis[i].childNodes[0];
          // Mémorisation des evenements
          lien.setAttribute("href_actif",lien.href);
          lien.setAttribute("onclick_actif",lien.onclick);
          lien.setAttribute("onblur_actif",lien.onclick);

          /*
          // Alternative au code ci dessous mais moins bien
          var old = lien.onclick;
          lien.onclick = null;
          lien.attachEvent('onclick',WidgetMenuActionFermer2);
          lien.attachEvent('onclick',old);
          */

          // onclick est associé à onblur
          if (lien.onclick != null) {
            lien.onblur=  lien.onclick;
           }
          // On associe au clic la fermeture du menu
          lien.onclick = function () {
            // Appel de la fonction dédiée qui lancera la fonction associé à la perte de focus
            WidgetMenuActionFermer(this);
            }
          }
        }
      }
     // Fin de traitement pour le menu action
     return;
    }

   menu_navigation = document.getElementById(id_menu);

   // Parcours des LI pour reglage du style et test sur balise A fille
   for(i=0;i<lis.length;i++) {
     // On test si la balise A est fille du LI
     if(lis[i].firstChild.tagName!="A") {
       // On récupére le texte de l'item
       var titre=lis[i].firstChild.data;
       // On supprime l'item; on le reconstruit en ajoutant la balise A et son style
       lis[i].removeChild(lis[i].firstChild);
       lis[i].innerHTML='<a href="#">'+titre+'</a>'+lis[i].innerHTML;
       lis[i].className="menu_titre";
      }
     else { // La balise A est deja présente, on règle juste le style
       lis[i].className="menu_lien";
      }
    }

   // Parcours des balises UL (bloc de sous-menus) pour traitement
 	 for(j=0;j<sousMenu.length;j++) {
 	   // Définition de l'identifiant
     sousMenu[j].id="ul"+j;
     // Intialisation de la table des largeur des balise UL
     wul[j]=0;
    }

   // Construction du menu : Parcours des balises A d'origine
	 for(i=0;i<as.length;i++){
     // Largeur de la balise A
     wa=as[i].offsetWidth;
     // smenu renvois Vrai (1) si la balise A fait partie d'un bloc ul
     smenu=as[i].parentNode.getElementsByTagName('ul')[0]?1:0;
     // On augmente la largeur de la balise pour meilleu affcihage des fleches
   	 if (smenu) wa+=12;
     // Test si l'item en cours est de 1er niveau
     if(as[i].parentNode.parentNode.id==id_menu) {
       // On ajoute 2 espaces après le libellé de l'item
       if(smenu && as[i].innerHTML!="") as[i].innerHTML+="&nbsp;&nbsp;";
      }
     else { // Autres niveaux verticaux
       // On récupère l'indice du bloc UL contenant la balise A en cours
       n=eval(as[i].parentNode.parentNode.id.substr(2,2));
       // Si la largeur de la balise est supérieur à la largeur du bloc en cours, on garde cette largeur
       if(wa>wul[n]) wul[n]=wa;
       // On ajoute les fléches pour les liens vers les sous menus
       if(smenu) as[i].innerHTML+=flg;
      }
    }

   // Largeur des sous-menu verticaux et de leurs liens :
   for(var x=0;x<wul.length;x++) {
     // Récupération des balise A filles du bloc
     ula=sousMenu[x].getElementsByTagName('a');
     // Largeur à prendre en comptes pour balise A et pour IE
     dda=(ie&!dtd)?da:0;
     // Largeur des balises A filles du  bloc
     for(var i=0;i<ula.length;i++) {
       ula[i].style.width=wul[x]+dda+12+"px";
      }
     // Largeur du sous menu (bloc) UL (12 pour la fleche de sous menu)
     sousMenu[x].style.width=wul[x]+da+dul+12+"px";
    }

   // On ajoute une iframe sous chaque item de menu pour bug ie (affichage par dessus balise INPUT,SELECT,..)
   for(i=0;i<lis.length;i++) {
     // On traite les items sous le premier nieau
     if (lis[i].parentNode.id != id_menu) {
       // On regles la balise li
       lis[i].style.position="relative";
       lis[i].firstChild.style.position="absolute";
       lis[i].firstChild.style.zIndex="1000";
       lis[i].firstChild.style.left="1px";
       // On mémorise le contenu de la balise et sa largeur
       var t = lis[i].innerHTML;
       var largeur=lis[i].firstChild.style.width;
       largeur=parseInt(largeur)+0+"px";
       // Descritpion de l'iframe
       var iframe="<iframe scrolling='no' frameborder='0' style='position:absolute; z-index:999; top:0px; left:0px; width="+largeur+";'></iframe>";
       // On remplace la balise li par DIV + IFRAME
       lis[i].innerHTML="<div style=' width:"+largeur+";'>"+iframe+t+"</div>";
      }
    }

   // On récupère les balises A du menu
   as = menu.getElementsByTagName('a');

   // Construction du menu : Déclaration des fonction sur onmouseover, et onmouse out
	 for(i=0;i<as.length;i++){
     lien=as[i];

     // On ajoute les évènements.
		 lien.onmouseover=lien.onfocus=function(){
		   // Début de la fonction
       if(this.parentNode.parentNode.tagName=="UL")            ul_parent=this.parentNode.parentNode;
       if(this.parentNode.parentNode.parentNode.tagName=="UL") ul_parent=this.parentNode.parentNode.parentNode;
       ul=this.parentNode.getElementsByTagName('ul')[0]
       // cache tout après l'ul parent
       WidgetMenuEffacer(ul_parent);
       // Si il ya une balise UL fille
       if(ul) { // on l'affiche et on active le style de suivi
          ul.style.visibility="visible";
          ul.style.display="block";

         (ul_parent.id!=id_menu)?ul.style.left="100%":0;
         this.className="suivi";
        }
      }; // Fin de la fonction de survol

     // Evnement sur perte de focus pour effacer le menu
     lien.onmouseout=function(){delai=setTimeout('WidgetMenuEffacerTout()',pause)};
    }

   // Au click sur un item, on ferme le menu
   lien.onblur=D.onclick=WidgetMenuEffacerTout;

   //activation retardée de la feuille de style
   menu.className=class_menu;

   // Replace les flèches des menus verticaux au bons endroits.
   span = menu.getElementsByTagName('span');

	 for(i=0;i<span.length;i++){
     A=span[i].parentNode;
     c=span[i].style;
     if(span[i].className=="menu_navigation_fleche"){
        c.top  = A.offsetTop+6+"px";
        c.left = A.offsetWidth-8+"px";
       }
    }

    WidgetMenuEffacerTout();
  }

//////////////////////////////////////////////////////////////////////
// Masque les uls qui suivent l'ul spécifié                         //
// ---------------------------------------------------------------- //
// 27/03/2006 MFL  Création                                         //
//////////////////////////////////////////////////////////////////////
function WidgetMenuEffacer(ul) {
   clearTimeout(delai);
   var li=ul.getElementsByTagName('li');
   // Parours des balises LI
   for(i=0;i<li.length;i++) {
     // Pour trouver un bloc UL fils
     var ul=li[i].getElementsByTagName('ul')[0];
     if(ul) {
       // Un bloc fils existe, il est caché

       ul.style.visibility="hidden";
       ul.style.display="none";

       // On rétabli les styles (sans focus)
      li[i].firstChild.className="";
       if (li[i].firstChild.children[1]){
         li[i].firstChild.children[1].className="";
        }
      }
    }
  }

//////////////////////////////////////////////////////////////////////
// Masque l'ensemble des menus du type navigation                   //
// ---------------------------------------------------------------- //
// 27/03/2006 MFL  Création                                         //
//////////////////////////////////////////////////////////////////////
function WidgetMenuEffacerTout() {
  WidgetMenuEffacer(menu_navigation);
 }

//////////////////////////////////////////////////////////////////////
// Gestion du survol des elements de menu action                    //
// ---------------------------------------------------------------- //
// 27/03/2006 MFL  Création                                         //
// ---------------------------------------------------------------- //
//  - obj    : balise de type LI                                    //
//////////////////////////////////////////////////////////////////////
function WidgetMenuActionSurvolGerer(obj){
  // Si l'itme est inactif, on ne fait rien
  if (obj.getAttribute("etat") == "inactif" ) return;
  // On recherche les les elmeent UL de la balise
  uls = obj.getElementsByTagName('ul');

  // il y en a
  if(uls.length > 0){
    // Test sur l'affichage du sous menu associé a la balise
    if(uls[0].style.display == 'none' || uls[0].style.display == '') {
      // On affiche le sous menu car il est masqué
      uls[0].style.display = 'block';
      uls[0].style.visibility="visible";
     }
    else{
      // On masque le sous menu car il est affiché
      uls[0].style.display = 'none';
      uls[0].style.visibility="hidden";
     }
   }
 }

//////////////////////////////////////////////////////////////////////
// On ferme le menu action ouvert                                   //
// ---------------------------------------------------------------- //
//  - obj : balise de type LI                                      //
//////////////////////////////////////////////////////////////////////
function WidgetMenuActionFermer(obj) {
  // On récupére le conteneur (balise UL)
  var ul_pere = obj.parentNode.parentNode;
  // On vérifie qu'on est bien dans un menu action
  if (ul_pere.className == "menu_action") return;
  // On vérifie que l'on est bien sur une balise UL
  if (ul_pere.tagName == "UL") {
    //  On efface le bloc ou se trouve la balise li de référence (provoque l'appel de la fonction onblur)ÿÿÿÿ  ul_perÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿtyÿÿhiddenÿÿ
   }
 }

function WidgetMenÿÿÿÿioÿÿÿÿmer2() {
  var uls= document.getElementsByTagName("ul");

     // il y en a
  if(uls.length > 0) {
    for(i=0;i<uls.length;i++) {
      ul_pere = uls[i];


      // On vérifie qu'on est bien dans un menu action
      if (ul_pere.className != "menu_action") {
        ul_pere.style.visibility="hidden";
     // alert(ul_pere.innerHTML);
      }

      // On vérifie que l'on est bien sur une balise UL
     // if (ul_pere.tagName == "UL") {
        //  On efface le bloc ou se trouve la balise li de référence (provoaque l'appel de la fonction onblur)
     //   ul_pere.style.visibility="hidden";
     //  }

     }

   }

 }



