// Raccourci et création d'un objet
var d = document,    o = {};
// Définition des propriétés de l'objet
o.Menu ={    
// Chargement du menu   
__Load__: function()    {        
// On lance le test pour s'assurer du bon fonctionnement        
o.Menu.__Test__();    },    
// Test d'existence des méthodes et de la syntaxe xhtml    
__Test__: function()    {        
// Si l'une des méthodes du script n'est pas interprétée ou si le menu n'existe pas, on stoppe le script.
if ( !d.getElementById ||         !d.getElementsByTagName ||         !d.createElement ||         !d.createTextNode ||         !d.getElementById('menu') ||         !d.getElementById('menu').setAttribute ||         !d.getElementById('menu').replaceChild ||         !d.getElementById('menu').appendChild ||         !d.getElementById('menu').getElementsByTagName('dl') ) return false;
/*        ----- Tests facultatifs et non exhaustifs de bon augure ^^ -----        ----- Les codes contenus dans la zone suivante peuvent -----        ----- être virés si vous êtes sûr de votre syntaxe xhtml. -----*/        
// Une fois le premier test effectué, on définit les variables nécessaires.        
var iA, iB, iC, iD,            oMenu = d.getElementById('menu'),            oDl = oMenu.getElementsByTagName('dl');        
// Pour chaque élément dl du tableau oDl,        
for ( iA = oDl.length - 1; iA >= 0; iA-- )        {            
// on récupère les éléments dt dans un tableau.            
var oDt = oDl[iA].getElementsByTagName('dt');            
// Si le tableau oDt est vide, on stoppe le script.            
if ( !oDt ) return false;        }                
// Pour chaque élément dl du tableau oDl,        
for ( iA = oDl.length - 1; iA >= 0; iA-- )        {            
// on récupère les éléments dd dans un tableau oDd.            
var oDd = oDl[iA].getElementsByTagName('dd');            
// Si le tableau oDd est vide, on stoppe le script.            
if ( !oDd ) return false;            
// sinon            
else            {                
// pour chaque élément dd du tableau oDd,                
for ( iB = oDd.length - 1; iB >= 0; iB-- )                {                    
// on récupère les éléments ul dans un tableau oUl.                    
var oUl=oDd[iB].getElementsByTagName('ul');                    
// S'il n'y a pas d'élément ul, on stoppe le script.                    
if( !oUl ) return false;                    
// sinon
else                    {                        
// pour chaque élément ul du tableau oUl,                        
for ( iC = oUl.length - 1; iC >= 0; iC-- )                        {
// on récupère les éléments li dans un tableau oLi.
var oLi = oUl[iC].getElementsByTagName('li');
// S'il n'y a aucun objet oLi, on stoppe le script.
if( !oLi ) return false;                            
// sinon                            
else                            {                                
// pour chaque élément li du tableau oLi,                                
for ( iD = oLi.length - 1; iD >= 0; iD-- )                                {
// on récupère l'élément a dans un objet oA.
var oA = oLi[iD].getElementsByTagName('a')[0];
// S'il n'y a pas d'objet oA, on stoppe le script.
if( !oA ) return false;
}
}
}                    
}                
}            
}        
}        
/*        ----- -----        ----- Fin des tests facultatifs de bon augure ^^ -----        ----- -----*/        // Une fois le test effectué, on initialise le menu.        
return o.Menu.__Init__();    },
    
// Méthode d'initialisation du menu    
__Init__:function()    
{        
		 // On définit les variables nécessaires.        
		 var iA,   
		 oMenu = d.getElementById('menu'),            
		 oDl = oMenu.getElementsByTagName('dl');
		 // On cache tous les éléments dd en lançant la méthode dédiée à cette tâche.        
		 o.Menu.__HideLists__();        
		 // Pour chaque élément dl du tableau oDl,        
		 for ( iA = oDl.length - 1; iA >= 0; iA-- )        
		 {            
		 			  // On récupère l'élément dt.            
					  var oDt = oDl[iA].getElementsByTagName('dt')[0];
					  // On crée un élément dt et un élément a            
					  var oNewDt =d.createElement('dt'),oA = d.createElement('a'),oTextA = d.createTextNode('');            
					  // On définit les propriétés de l'objet oA            
					  // (récupération du noeud texte de l'élément dt pour définir celui de l'élément a)
					  oA.setAttribute('href','#');            
					  oTextA.data = oDt.firstChild.nodeValue;            
					  // On constitue l'arbre DOM en remplaçant l'élément dt du code xhtml            
					  // par celui qu'on vient de créer.            
					  oA.appendChild(oTextA);            
					  oNewDt.appendChild(oA);            
					  oDl[iA].replaceChild(oNewDt,oDt);            
					  // On définit des méthodes en fonction des actions de l'utilisateur.            
					  oA.onclick = o.Menu.__Discard__;            
					  oDl[iA].onmouseover = o.Menu.__MouseDisplay__;            
					  oA.onfocus = o.Menu.__TabDisplay__;            
					  oA.onkeypress = o.Menu.__TabDisplay__;
		 }
},
// Méthode d'affichage de l'élément dd lorsqu'on le survole.    
__MouseDisplay__:function()    
{        
		 // On cache tous les éléments dd en lançant la méthode dédiée à cette tâche.        
		 o.Menu.__HideLists__();        
		 // On récupère l'élément dd de l'élément dl qu'on survole dans un objet.        
		 var oDd = this.getElementsByTagName('dd')[0];        
		 // On affecte la propriété css "display: block;" à l'objet oDd (affichage)        
		 oDd.style.display = 'block';        
		 // On cache l'élément dd lorsqu'on ne survole plus l'élément dl.        
		 this.onmouseout = o.Menu.__HideLists__;    
},    

// Méthode d'affichage de l'élément dd lorsqu'il prend le focus.    
__TabDisplay__:function()    
{        
		 // On cache tous les éléments dd en lançant la méthode dédiée à cette tâche.        
		 o.Menu.__HideLists__();        
		 // On récupère l'élément dd de l'élément dl qui a le focus dans un objet.        
		 var oDd = this.parentNode.parentNode.getElementsByTagName('dd')[0];       
		 // On affecte la propriété css "display: block;" à l'objet oDd (affichage)
		 oDd.style.display = 'block';        
		 // On donne le focus au premier lien de l'élément dd traité.
         oDd.getElementsByTagName('a')[0].focus();
},    

// Méthode de masquage des éléments dd    
__HideLists__:function()    
{        
		 // On définit les variables nécessaires.        
		 var iA,            
		 oDd = d.getElementById('menu').getElementsByTagName('dd');        
		 // Pour chaque élément dd du tableau oDd,        
		 for (iA = oDd.length - 1; iA >= 0; iA-- )        
		 {            
		 			  // On affecte la propriété css "display: none;" à l'objet oDd (masquage)            
					  oDd[iA].style.display = 'none';
         }
},    

// Fonction d'annulation     
__Discard__:function()
{        
		 // On annule l'action.        
		 return false;
}
};
// Une fois que le document est chargé en mémoire, on charge le script.
window.onload=o.Menu.__Load__;

