// ------------------------------------------------------------------------------------
// Fermeture de tout les sous menus
// ------------------------------------------------------------------------------------
function ferme_tout()
{
  noeud_table = document.getElementById("menu_gauche");
  // Récupération du nombre total d'elements tr du table contenant le menu
  nb_tr = noeud_table.getElementsByTagName("tr").length;
  // Parcours de ces éléments, quand un tr ouvert est rencontré il est refermé
  for(i=0; i < nb_tr; i++)
  {
    if(noeud_table.getElementsByTagName("tr")[i].className == "ss_menu_ouv")
    {
      noeud_table.getElementsByTagName("tr")[i].className = "ss_menu";
    }
  }

  // Changement de l'image du triangle par un carré
  nb_img = document.getElementsByName("img_totemg_carre_ci").length;
  for(i=0; i < nb_img; i++)
  {
    // Isolation du nom de l'image présente dans l'attribut src de la balise
    var pCherche_img = /^(.+)\/(\w+)\.gif/;
    pCherche_img.exec(document.getElementsByName("img_totemg_carre_ci")[i].src);
    document.getElementsByName("img_totemg_carre_ci")[i].src = RegExp.$1 + "/" + tImgCible['totemg_carre_ci'] + ".gif";
  }
}

// ------------------------------------------------------------------------------------
// Fermeture et ràz des niveaux 3 d'un niveau 2
// Le noeud passé en paramètre est le tbody contenant les tr de niveau 3
// ------------------------------------------------------------------------------------
function ferme_n3(nTbody)
{
  // Parcours de tout les tr
  for(i = 0; i < nTbody.childNodes.length; i++)
  {
    if(nTbody.childNodes[i].nodeType != 3)
    {
      if(nTbody.childNodes[i].className == "niv3_select") {nTbody.childNodes[i].className = "niv3";}
      if(nTbody.childNodes[i].className == "ss_menu_ouv") {nTbody.childNodes[i].className = "ss_menu";}
    }
  }
}

// ------------------------------------------------------------------------------------
// Ouverture d'un menu
// ------------------------------------------------------------------------------------
function ouvre_menu(id_menu)
{
  // Si le menu est fermé il s'ouvre, sinon tout reste fermé
  if(document.getElementById(id_menu).className == "ss_menu")
  {
    // Positionnement sur le tr précedent pour modifier l'image/la css
    nTr = document.getElementById(id_menu).previousSibling;
    
    // Pour mozilla/firefox si le noeud est du type #text passage à l'élément précedent
    if(nTr.nodeType == 3) nTr = nTr.previousSibling;

    // Fermeture de tout les autres sous menus de niveau 3 et ràz de leur classe1
    if(nTr.className == "niv3" || nTr.className == "niv3_select")
    {
      ferme_n3(nTr.parentNode);
    }
    else
    {
      // Si ouverture d'un menu de niveau 2 fermeture de tout les autres sous menus
      ferme_tout();
    }
    
    // Changement de la classe du tr contenant le sous menu pour le faire apparaitre
    document.getElementById(id_menu).className = "ss_menu_ouv";
   
    if(nTr.className == "niv3" || nTr.className == "niv3_select")
    {
      // Si ouverture d'un menu de niveau 3 changement de la classe
      nTr.className = "niv3_select";
    }
    else
    {
      // Si ouverture d'un menu de niveau 2 changement de l'image
      // Isolation du nom de l'image présente dans l'attribut src de la balise
      var pCherche_img = /^(.+)\/(\w+)\.gif/;
      pCherche_img.exec(nTr.getElementsByTagName("img")[0].src);
      nTr.getElementsByTagName("img")[0].src = RegExp.$1 + "/" + tImgCible['totemg_triangl_ci'] + ".gif";
    }
  }
  else
  {
    // Positionnement sur le tr précedent pour modifier l'image/la css
    nTr = document.getElementById(id_menu).previousSibling;
    
    // Pour mozilla/firefox si le noeud est du type #text passage à l'élément précedent
    if(nTr.nodeType == 3) nTr = nTr.previousSibling;

    // Fermeture de tout les autres sous menus de niveau 3 et ràz de leur classe1
    if((nTr.className == "niv3") ||(nTr.className == "niv3_select"))
    {
      ferme_n3(nTr.parentNode);
    }
    else
    {
      ferme_tout();
    }
  }
}

// ------------------------------------------------------------------------------------
//
// ------------------------------------------------------------------------------------
function initialise_menu(){
  // Déclarations des variables propres au niveau 3
  var sN3 = "niv3";
  var sN3_sel = "niv3_select";
  var sN4 = "niv4";
  var sN4_sel = "niv4_select";
  
  // Récupération du paramètre np dans l'adresse
  sUrlNp = document.location.search;
  var pCherche_np = /np=(\w+)&?/;
  pCherche_np.exec(sUrlNp);
  sNpUrl = RegExp.$1;
   
  // Boucle sur les liens du menu
  noeud_table = document.getElementById("menu_gauche");
  tLiensPage = noeud_table.getElementsByTagName("a");
  var reNp = /np=(\w+)/i;
  for(i=0 ; i < tLiensPage.length ; i++){
    resultatReNp = reNp.test(tLiensPage[i].href);
    if(resultatReNp == false){
      npLien = null;
    }
    else {
      resultatReNp = reNp.exec(tLiensPage[i].href);
      npLien = resultatReNp[1];
    }
    // Quand on trouve le lien concernant cet élément on le met en évidence
    // sRubrique est écrit dans la page html et permet de connaitre le composant
    // auquel appartient le composant affiché
    if((sNpUrl == npLien) || (sRubrique == npLien)){
      // noeud correspond au tr contenant le lien
      nTrOrigine = tLiensPage[i].parentNode.parentNode;
     
      // ---------------------------------------
      // Traitement d'un niveau 2
      // ---------------------------------------
      if(nTrOrigine.className == "niv2"){
        nTrOrigine.className = "niv2_select";
        
        // Changement de l'image
        if(nTrOrigine.getElementsByTagName("img").length > 0){
          // Isolation du nom de l'image présente dans l'attribut src de la balise
          var pCherche_img = /^(.+)\/(\w+)\.gif/;
          pCherche_img.exec(nTrOrigine.getElementsByTagName("img")[0].src);
          nTrOrigine.getElementsByTagName("img")[0].src = RegExp.$1 + "/" + tImgCible['totemg_triangl_ci'] + ".gif";
        }
        
        // Parcours des noeuds suivants pour savoir si ce sont des sous menus
        nTr = nTrOrigine.nextSibling;
        
        if(nTr == null) { break;}
        
        // Pour mozilla si le noeud est un #text entre des elements tr on passe au noeud suivant
        if(nTr.nodeType == 3) {nTr = nTr.nextSibling;}
       
        if(nTr.className == "ss_menu"){
          nTr.className = "ss_menu_ouv";
        }
        
        // On sort de la boucle for afin de ne pas parser les autres liens
        break;
      }
      
      // ---------------------------------------
      // Traitement d'un niveau 3
      // ---------------------------------------
      if(nTrOrigine.className == sN3){
        // On change sa classe
        nTrOrigine.className = sN3_sel;
        
        // Remontée au tr contenant le table parent pour l'afficher ne pas oublier que l'éditeur ajoute de lui meme un tbody!!
        nTable = nTrOrigine.parentNode.parentNode.parentNode.parentNode;

        // Affichage du tableau
        if(nTable.className == "ss_menu"){
          nTable.className = "ss_menu_ouv";
        }
        
        // Remontée au tr précedant
        nTr = nTable.previousSibling;
        
        if(nTr == null) break;
        
        // Pour mozilla si le noeuds est un #text entre des elements tr on passe au noeud precedant
        if(nTr.nodeType == 3) {nTr = nTr.previousSibling;}
        
        // On teste que ce soit bien un lien de n2 et on change sa classe
        if((nTr != null) && (nTr.className.search(/^niv2$/) != -1)){
          nTr.className = nTr.className + "_select";
          
          // Isolation du nom de l'image présente dans l'attribut src de la balise
          var pCherche_img = /^(.+)\/(\w+)\.gif/;
          pCherche_img.exec(nTr.getElementsByTagName("img")[0].src);
          nTr.getElementsByTagName("img")[0].src = RegExp.$1 + "/" + tImgCible['totemg_triangl_ci'] + ".gif";
        }
        
        // Le lien est trouvé on sort de la boucle for
        break;
      } // Fin si niveau 3

      // ---------------------------------------
      // Traitement d'un niveau 4
      // ---------------------------------------
      if(nTrOrigine.className == sN4){
        // On change sa classe
        nTrOrigine.className = sN4_sel;
        
        // Changement de l'image (puce gris foncé => puce gris clair)
        nTrOrigine.getElementsByTagName("img")[1].src = sPuce_claire;
        
        // Remontée au tr contenant le table parent pour l'afficher ne pas oublier que l'éditeur ajoute de lui meme un tbody!!
        nTable = nTrOrigine.parentNode.parentNode.parentNode.parentNode;

        // Affichage du tableau
        if(nTable.className == "ss_menu"){
          nTable.className = "ss_menu_ouv";
        }
        
        // Remontée au tr précedant
        nTr = nTable.previousSibling;

        // Remontée au tr le menu niveau trois pour l'afficher lui aussi
        nTable = nTable.parentNode.parentNode.parentNode.parentNode;

        // Affichage du tableau
        if(nTable.className == "ss_menu"){
          nTable.className = "ss_menu_ouv";
        }

        if(nTr == null) break;
        
        // Pour mozilla si le noeuds est un #text entre des elements tr on passe au noeud precedant
        if(nTr.nodeType == 3) {nTr = nTr.previousSibling;}
        
        // On teste que ce soit bien un lien de n3 et on change sa classe
        if(nTr != null)
        {
          if(nTr.className == sN3)
          {
            nTr.className = sN3_sel;
          }
          if(nTr.className == sN3_sel)
          {
            nTr.className = sN3_sel;
          }
        }
        
        // Le lien est trouvé on sort de la boucle for
        break;
      } // Fin si niveau 4

    } // Fin si element trouvé
  } // Fin boucle for
}