/*-----------------------------------------------------------------------------------------------*/
//
// menuMaker.js v1.0
//
// Copyright (c) 2008 Agence Clark (http://www.agence-clark.com)
//
/*-----------------------------------------------------------------------------------------------*/

var menuMaker = Class.create();
menuMaker.prototype =
{
	initialize: function(MenuId) {
		//-- Récupération des variables optionnelles --//
		var options = Object.extend({MenuId:MenuId}, arguments[1] || {});
		if (!options.MenuEffect) 		options.MenuEffect = 'blind';
		if (!options.MenuDuree) 		options.MenuDuree = 0.3;
		if (!options.MenuFirst) 		options.MenuFirst = false;
		if (!options.MenuLast) 			options.MenuLast = false;
		if (!options.MenuClassOn) 		options.MenuClassOn = 'on';
		if (!options.MenuClassFirst) 	options.MenuClassFirst = 'first';
		if (!options.MenuClassLast) 	options.MenuClassLast = 'last';
		
		//-- Récupération des variables --//
		this.MenuId  = MenuId; 							// ID du conteneur du menu
		this.MenuEffect  = options.MenuEffect; 			// Type d'effet ('slide, 'blind', 'appear')
		this.MenuDuree  = options.MenuDuree; 			// Durée de l'effet
		this.MenuFirst  = options.MenuFirst; 			// Prise en charge de la classe sur les premiers li
		this.MenuLast  = options.MenuLast; 				// Prise en charge de la classe sur les derniers li
		this.MenuClassOn  = options.MenuClassOn; 		// Classe active
		this.MenuClassFirst  = options.MenuClassFirst; 	// Classe premier li
		this.MenuClassLast  = options.MenuClassLast; 	// Classe dernier li
		myMenuMaker = this;		
		
		//-- Mise en place des classes sur les li --//
		if(this.MenuLast == true) this.last('#'+this.MenuId+'>ul>li');
		if(this.MenuFirst == true) this.first('#'+this.MenuId+'>ul>li');
		
		//-- Mise en place des évènements sur les liens --//
		$$('#'+this.MenuId+' ul li a').each(
			function(e_a, i_a){
				if(!e_a.hasClassName('in')){
					$$('#'+myMenuMaker.MenuId+' ul li ul').each(
						function(e_ul, i_ul){
							if(e_a.parentNode == e_ul.parentNode) Event.observe(e_a, 'click', function(){ myMenuMaker.toggle(e_a, e_ul); }, false);
						}
					);
				}
			}
		);
	},
	
	toggle : function(a, ul){
		//-- Gestion de la classe du lien --//
		if(a.hasClassName(myMenuMaker.MenuClassOn)) a.removeClassName(myMenuMaker.MenuClassOn);
		else a.addClassName(myMenuMaker.MenuClassOn);
		//-- Gestion de l'ouverture/fermeture du sous menu --//
		new Effect.toggle(ul,myMenuMaker.MenuEffect,{duration:myMenuMaker.MenuDuree});
	},
	
	first : function(recherche){
		var nb = $$(recherche).size();
		//-- Recherche du premier li --//
		if(nb > 0){
			var older = '';
			$$(recherche).each(function(e_li, i_li){
				if((i_li == 0)) e_li.addClassName(myMenuMaker.MenuClassFirst);
				else if((e_li.parentNode != older.parentNode)) e_li.addClassName(myMenuMaker.MenuClassFirst);
				older = e_li;				
			});
		}
		//-- Recherche suivante --//
		recherche += '>ul>li';
		if(nb > 0) myMenuMaker.first(recherche);
	},
	
	last : function(recherche){
		var nb = $$(recherche).size();
		//-- Recherche du dernier li --//
		if(nb > 0){
			var older = '';
			$$(recherche).each(function(e_li, i_li){
				if(older != ''){
					if((e_li.parentNode == older.parentNode) && (i_li == (nb - 1))) e_li.addClassName(myMenuMaker.MenuClassLast);
					else if((e_li.parentNode != older.parentNode)) older.addClassName(myMenuMaker.MenuClassLast);
				}
				older = e_li;				
			});
		}
		//-- Recherche suivante --//
		recherche += '>ul>li';
		if(nb > 0) myMenuMaker.last(recherche);
	}
};

