// Afficher ou masquer les sous-catégories dans le menu
function fnSousCategories ()
{
  if (!document.implementation.hasFeature ('Core', '2.0') || !document.implementation.hasFeature ('HTML', '2.0')) return;
  
  // On atteint l'élément ul qui suit l'id "categories"
  var oCategories = document.getElementById ('categories');
  var oUl = oCategories.nextSibling;
  while (oUl.nodeName != 'UL')
  {
    oUl = oUl.nextSibling;
  }
  
  // On parcourt chaque élément li
  var aLi = oUl.childNodes;
  for (var i = 0; i < aLi.length; i ++)
  {
    if (aLi[i].nodeName != 'LI') continue;
    else
    {
      // On vérifie si l'élément li comporte un élément ul
      // On récupère le nom de la catégorie
      var aLiEnfants = aLi[i].childNodes;
      var sCategorie;
      for (var j = 0; j < aLiEnfants.length; j ++)
      {
        if (aLiEnfants[j].nodeName == 'A') sCategorie = aLiEnfants[j].firstChild.nodeValue;
        if (aLiEnfants[j].nodeName == 'UL')
        {
          // On ajoute un lien permettant d'afficher et masquer
          var oImg = document.createElement ('img');
          var oA = document.createElement ('a');
          oImg.src = '/images/plus.png';
          oImg.alt = 'Afficher les sous-catégories de la catégorie ' + sCategorie;
          oImg.width = 16;
          oImg.height = 16;
          oA.href = '#';
          oA.title = oImg.alt;
          oA.appendChild (oImg);
          if (oA.addEventListener) oA.addEventListener ('click', fnAfficher, false);
          else if (oA.attachEvent) oA.attachEvent ('onclick', fnAfficher);
          aLi[i].insertBefore (oA, aLiEnfants[j]);
          
          // On masque par défaut l'élément ul imbriqué
          aLi[i].className = 'liste-masquee';
          break;
        }
      }
    }
  }
}

function fnAfficher (event)
{
  var cible = event.target || event.srcElement;
  while (cible.nodeName != 'IMG')
  {
    cible = cible.childNodes[0];
  }
  
  // On change l'état du lien et de l'élément ul imbriqué
  var regPlus = /plus(\.png)/;
  var regMoins = /moins(\.png)/;
  var regAfficher = /Afficher/;
  var regMasquer = /Masquer/;
  if (regPlus.test (cible.src) && regAfficher.test (cible.alt))
  {
    cible.src = cible.src.replace (regPlus, 'moins$1');
    cible.alt = cible.alt.replace (regAfficher, 'Masquer');
    cible.parentNode.parentNode.className = '';
  }
  else
  {
    cible.src = cible.src.replace (regMoins, 'plus$1');
    cible.alt = cible.alt.replace (regMasquer, 'Afficher');
    cible.parentNode.parentNode.className = 'liste-masquee';
  }
  cible.parentNode.title = cible.alt;
  
  if (event.preventDefault) event.preventDefault ();
  else event.returnValue = false;
}

if (window.addEventListener) window.addEventListener ('load', fnSousCategories, false);
else if (window.attachEvent) window.attachEvent ('onload', fnSousCategories);
