function rollout(objMenuitem, objEvent) {
  var iKeyCode;
 
  // Vérifie si le navigateur sait gérer l'évènement "keypress".
  if (objEvent && objEvent.type == 'keypress') {
    if (objEvent.keyCode)
      iKeyCode = objEvent.keyCode;
    else if (objEvent.which)
      iKeyCode = objEvent.which;
 
    // Si la touche pressée ne correspond ni au bouton "Entrée" ni à la barre "Espace", la fonction sera alors ignorée.
    if (iKeyCode != 13 && iKeyCode != 32)
      return true;
  }
 
  // On vérifie si la liste du titre choisi est affichée ou non, et on garde en mémoire l'état inverse.
  if (objMenuitem.nextSibling.style.display == 'block')
    var strDisplay = 'none'
  else
    var strDisplay = 'block';
 
  var objMenu = document.getElementById('lien');
  var objNested = objMenu.getElementsByTagName('ul');
 
  // Cache l'ensemble des listes
  for (var i=0; i<objNested.length; i++) {
    if (objNested[i].style.display == 'block')
	{
      objNested[i].style.display = 'none';
	  if(objNested[i].className == 'afficheImage')
	  {
		  objNested[i].className = '';
	  }
	}
  }
 
  // On applique l'état gardé en mémoire sur la liste du titre choisi.
  objMenuitem.nextSibling.style.display = strDisplay;
  if(strDisplay == "block")
  	objMenuitem.parentNode.className = 'afficheImage';
  else
  	objMenuitem.parentNode.className = '';
  
 
  // Laisse les listes parentes de l'élément choisi affichée.
  while (objMenuitem.parentNode.parentNode.id != 'lien') {
    objMenuitem = objMenuitem.parentNode.parentNode;
    objMenuitem.style.display = 'block';
	objMenuitem.className = 'afficheImage';
  }
 
  return false;
}
 
function initMenus() {
  var bRollup, objLinks, objNode, objAnchor;
 
  // Vérifie si le navigateur est compatible avec le DOM.
  if (document.getElementById && document.createElement) {
    var strLocation = window.location;
	
    if(document.getElementById('lien'))
    {
	    var objMenu = document.getElementById('lien');
		if(objMenu.getElementsByTagName('ul'))
		{
		    var objNested = objMenu.getElementsByTagName('ul');
		 
		    // Vérifie l'ensemble des listes du menu.
		    for (var i=0; i<objNested.length; i++) {
		      bRollup = true;
		      objLinks = objNested[i].getElementsByTagName('a');
		 
		      // Vérifie l'ensemble des liens contenus dans les listes.
		      for (var j=0; j<objLinks.length; j++) {
		 
		        // On supprime le lien lorsque celui-ci correspondant à l'url de la page et on le place dans une balise "strong".
		        if (objLinks[j].href == strLocation) {
		          bRollup = false;
		          objNode = objLinks[j];
		          strContent = objNode.firstChild.data;
		          var objCurrentPage = document.createElement('strong');
		          objCurrentPage.appendChild(document.createTextNode(strContent));
		          objNode.parentNode.replaceChild(objCurrentPage, objNode);
		 
		          // On donne un id à la liste devant rester ouverte.
		          objCurrentPage.id = 'keepOpen';
		        }
		      }
		 
		      // Si la liste contient l'url de la page on l'affiche, sinon on la cache.
		      if (bRollup == true)
		        objNested[i].style.display = 'none';
		      else
		        objNested[i].style.display = 'block';
		 
		      // Transforme le titre de la liste en lien
		      objNode = objNested[i].parentNode;
		      strContent = objNode.firstChild.data;
		      objAnchor = document.createElement('a');
		      objAnchor.href = '#';
		      objAnchor.onclick = function(event) {
		        return rollout(this, event);
		      }
		      objAnchor.onkeypress = function(event) {
		        return rollout(this, event);
		      }
		      objAnchor.appendChild(document.createTextNode(strContent));
		      objNode.replaceChild(objAnchor, objNode.firstChild);
		    }
		 
		    // Affiche les listes parentes du lien correspondant à l'url.
		    if (document.getElementById('keepOpen')) {
		      var objKeepOpen = document.getElementById('keepOpen');
		      while (objKeepOpen.parentNode.id != 'lien') {
		        objKeepOpen = objKeepOpen.parentNode;
		        objKeepOpen.style.display = 'block';
		      }
		    }
		}
	}
  }
}
 
function initPrimary() {
   // Quitte si la fonction a déjà été appellée
   if (arguments.callee.done) return;
   // Marque la fonction pour éviter un second rappel
   arguments.callee.done = true;
 
   // Kill le timer (pour Safari)
   if (_timer) {
      clearInterval(_timer);
      _timer = null;
   }
 
   // Liste des fonctions à exécuter
   initMenus();
}

/* Pour Mozilla */
if (document.addEventListener) {
   document.addEventListener("DOMContentLoaded", initPrimary, false);
}
 
/* Pour Internet Explorer */
/*@cc_on @*/
/*@if (@_win32)
   document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
   var script = document.getElementById("__ie_onload");
   script.onreadystatechange = function() {
      if (this.readyState == "complete") {
         initPrimary();
      }
   };
/*@end @*/
 
/* Pour Safari */
if (/WebKit/i.test(navigator.userAgent)) {
   var _timer = setInterval(function() {
      if (/loaded|complete/.test(document.readyState)) {
         initPrimary();
      }
   }, 10);
}
 

 
 function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}
