// JavaScript Document
var optMenu = Class.create();
// Objet d'une option de menu
optMenu.prototype = 
{
	// Constructeur
	initialize: function(blocMenu,cache) 
	{
		this.unDiv = document.getElementsByClassName(blocMenu);
		this.DivFils = [];
		this.nbFils = 0;
		// on cache cette option suivant le paramètre
		this.unDiv.each(function(mDiv) 
			{
			if (cache==0) {
				mDiv.style.display='none'; }
			else {
				mDiv.style.display='block'; }
			});
	},

	// Initialisation du lien des Fils
	estFils: function(menuInf) 
	{
		// Assignation de l'object menuInf au fils
		this.DivFils.push(menuInf);
		this.nbFils++;
	},
	
	aUnFils: function(){
		var filsExiste=false;
		if (this.nbFils>0) filsExiste=true;
		return filsExiste;
	},
	
	// Initialisation de la surveillance de l'événement 'click'
	initEvent: function() 
	{
		var nbF = this.nbFils;
		var tbFils = this.DivFils;
		/*this.unDiv.each(function(mDiv) {
			Event.observe(mDiv,'mouseover',function(event) {
				tbFils.each(function(unFils,idF) {
					affiche_menu(unFils,'');
					});
				});
			}); */
		this.unDiv.each(function(mDiv) {
			Event.observe(mDiv,'click',function(event) {
				tbFils.each(function(unFils,idF) {
					affiche_menu(unFils,'');
					});
				});
			});
	}
	
};
// fonction d'affichage ou masquage ***
// ATTENTION récurcivité pour masquer les frères et les fils
// permet la fermeture en cascade de toute l'arborescence
function affiche_menu(MnuAff,pAff) {
	MnuAff.DivFils.each(function(fCh) {
		affiche_menu(fCh,'none');
		});
	MnuAff.unDiv.each(function(aDiv) {
		if (pAff=='') {
			if (aDiv.style.display=='none') {
				aDiv.style.display='block';
				}
			else {
				aDiv.style.display='none';
				}
			}
		else {
			aDiv.style.display=pAff;
			}
		});
	}

// *** FONCTION A APPELER DANS LE CODE DE MENU ***
function initMenu3A() {
	Event.observe(window, 'load', function() {
		// ****** PRINCIPE DE FONCTIONNEMENT ******************************************************
		// Dans la page HTML, créer des balises DIV avec "menu" comme nom de classe.
		// Les classes n'ont pas être déclarées dans le CSS
		// Chaque niveau peut avoir 10 options de 0 à 9
		// exemple :
		// <DIV class="menu0">
		//	Option 1
		// <DIV>
		// 		<DIV class="menu00">
		//		Option 11
		// 		<DIV>
		// 		<DIV class="menu01">
		//		Option 12
		// 		<DIV>
		// <DIV class="menu1">
		//	Option 2
		// <DIV>
		// 		<DIV class="menu10">
		//		Option 21
		// 		<DIV>
		//	 		<DIV class="menu100">
		//			Option 211
		// 			<DIV>
		//	 		<DIV class="menu101">
		//			Option 212
		// 			<DIV>
		// 		<DIV class="menu11">
		//		Option 22
		// 		<DIV>
		// *** Parcours des DIV de la page et compte les DIV dont la classe commence par "menu" ***
		var lstDiv = document.getElementsByTagName('div');
		var nbNiv=0;
		var nbOpt=0;
		// *** Recherche des DIV contenant "menu" et du nombre de niveau ***
		for (iTag=0; iTag<lstDiv.length; iTag++) {
			var tOpt = lstDiv[iTag].className;
			if (tOpt.substr(0,4)=='menu') {
				nbOpt++;
				if (nbNiv<(tOpt.length-4)) nbNiv++;
				}
			}
		// *** Création d'un tableau des objets de menu et du tableau des niveaux ***
		var tbDiv = new Array();
		var idN=new Array();
		for (iTag=0; iTag<nbNiv; iTag++) {
			idN.push(0);
			tbDiv.push(null);
			}
		var nivCr = 0;
		var nivVisible = 0;
		var uneOpt=null;
		var tOpt = '';
		// *** parcours de DIV de la page
		for (iTag=0; iTag<lstDiv.length; iTag++) {
			tOpt = lstDiv[iTag].className;
			if (tOpt.substr(0,4)=='menu') {
				// Recherche du niveau en cours
				nivCr = tOpt.length-5
				// le niveau 0 est visible (sinon aucune option n'est visible !!)
				nivVisible = 0;
				if (nivCr==0) nivVisible=1;
				// Création de l'object de menu
				uneOpt = new optMenu(tOpt,nivVisible);
				// Assignation au tableau des options de menu
				tbDiv[iTag] = uneOpt;
				// Récupération de l'indice de l'objet en cours qui deviendra parent pour le prochain
				idN[nivCr]=iTag;
				if (nivCr>0) {
					tbDiv[idN[nivCr-1]].estFils(tbDiv[iTag]);
					}
				uneOpt=null;
			}
		} 
		tbDiv.each(function(evDiv) {
			if (evDiv!=null) {
				if (evDiv.aUnFils()) evDiv.initEvent();
				}
			});
	});

}