var OPEN_CLASSNAME = "submenu-open";
var CLOSED_CLASSNAME = "submenu-closed";
var IGNORED_CLASSNAME = "submenu-ignore";
/*
 * Permet d'ajouter plusieurs événements sur le onload du body
 */
function addLoadListener(func) {
   if (window.addEventListener) {
      window.addEventListener("load", func, false);
   } else if (document.addEventListener) {
      document.addEventListener("load", func, false);
   } else if (window.attachEvent) {
      window.attachEvent("onload", func);
   }
}

/*
 * Retourne l'élément précédent l'objet "element", et étant de type "nodeName"
 * Exemple : getPreviousElement(element, "A"); // retourne le lien précédent l'élément
 */
function getPreviousElement(element, nodeName) {
  var previous = element.previousSibling;
  while(previous != null && previous.nodeName != nodeName)
    previous = previous.previousSibling;
  return previous;
}
/*
 * Retourne l'élément suivant l'objet "element", et étant de type "nodeName"
 */
function getNextElement(element, nodeName) {
  var next = element.nextSibling;
  while(next != null && next.nodeName != nodeName) 
    next = next.nextSibling;
  return next;
}

/*
 * initialisation des éléments de menu
 */
function initMenu(){
  var tUl = document.getElementsByTagName("ul");
  for(var i=0; i<tUl.length; i++){
    if( tUl[i].className == OPEN_CLASSNAME || tUl[i].className == CLOSED_CLASSNAME ){
		var previousElement = getPreviousElement(tUl[i], "A");
		while (previousElement.className == IGNORED_CLASSNAME) {
			previousElement = getPreviousElement(previousElement, "A");
		}
      	previousElement.onclick = createMenuAction; // on affecte une action au lien "a"
      	previousElement.href = "";
    }
  } 
}

/*
 * Retourne l'objet "ul" correspondant au lien "a" en paramètre
 * Si le lien "a" est null, alors on retourne le "ul" de classe OPEN_CLASSNAME
 */
function getOpenedMenu(a){
	if(a != null){ // le lien parent est connu
		return getNextElement(a, "UL");
	}
	else { // lien parent inconnu : on cherche l'élément de classe OPEN_CLASSNAME
	  	var tUl = document.getElementsByTagName("ul");
	  	for(var i=0; i<tUl.length; i++){
	      	if(tUl[i].className == OPEN_CLASSNAME){
	        	return tUl[i];
	    	}
		} 		
	}
	return null;
}

/*
 * Ouvre exclusivement le sous-menu courant
 */
function toggleMenu(a){
	var tUl = document.getElementsByTagName("ul");
	for(var i=0; i<tUl.length; i++){
		if(tUl[i] == getOpenedMenu(a) && tUl[i].className != OPEN_CLASSNAME)
			tUl[i].className = OPEN_CLASSNAME;    
		else if(tUl[i].className == OPEN_CLASSNAME)
			tUl[i].className = CLOSED_CLASSNAME;
	} 
}

function createMenuAction(){
  toggleMenu(this);
  return false;
}

// Ajoute l'initialisation au onload
addLoadListener(initMenu);

