/*-----------------------------------------------------------------------------------------------*/
//
// AccordeonEffect.js v2.5
//
// Copyright (c) 2008 Agence Clark (http://www.agence-clark.com)
//
/*-----------------------------------------------------------------------------------------------*/

var AccordeonEffect = Class.create();
AccordeonEffect.prototype =
{
	initialize: function(AccConteneur) {
		//-- Récupération des variables optionnelles --//
		var options = Object.extend({AccConteneur:AccConteneur}, arguments[1] || {});
		if (!options.AccLien) 		options.AccLien = 'a';
		if (!options.AccContenu) 	options.AccContenu = 'div.accordeon div';
		if (!options.AccDuree) 		options.AccDuree = 0.3;
		if (!options.AccClassAct) 	options.AccClassAct = 'in';
		if (!options.AccClassInact) options.AccClassInact = 'off';
		if (!options.AccBtOuvrir) 	options.AccBtOuvrir = 'open';
		if (!options.AccBtFermer) 	options.AccBtFermer = 'close';
		
		//-- Récupération des variables --//
		this.AccConteneur  = AccConteneur; 				// Id ou classe du conteneur des accordeon
		this.AccLien  = options.AccLien; 				// Balise entourant correspondant au lien
		this.AccContenu  = options.AccContenu; 			// Balise correspondant au contenu à cacher
		this.AccDuree  = options.AccDuree; 				// Durée de l'effet
		this.AccClassAct  = options.AccClassAct; 		// Nom de la classe active
		this.AccClassInact  = options.AccClassInact;	// Nom de la classe inactive
		this.AccBtOuvrir  = options.AccBtOuvrir; 		// ID du bouton ouvrir
		this.AccBtFermer  = options.AccBtFermer; 		// ID du bouton fermer
		myAccordeon = this;
		
		//-- Mise en place des liens --//
		$$(this.AccConteneur+' '+this.AccLien).each(
			function(a_elm, a_ind){
				Event.observe(a_elm, 'click', myAccordeon.openclose.bindAsEventListener(this, a_elm, a_ind));	
			}
		);
		
		//-- Mise en place des boutons ouvrir et fermer --//
		if($(this.AccBtOuvrir)) Event.observe($(this.AccBtOuvrir), 'click', myAccordeon.openall.bindAsEventListener(this), false);
		if($(this.AccBtFermer)) Event.observe($(this.AccBtFermer), 'click', myAccordeon.closeall.bindAsEventListener(this), false);
		
	},
	
	openclose : function(evt, a_elm, a_ind){
		//-- Recherche du contenu correspondant --//
		$$(myAccordeon.AccConteneur+' '+myAccordeon.AccContenu).each(
			 function(div_elm, div_ind){
				if(div_ind == a_ind){
					if(a_elm.hasClassName(myAccordeon.AccClassInact)){
						//-- Effet d'ouverture --//
						EffectOpen = new Array();
						EffectOpen[0] = new Effect.BlindDown(div_elm,{duration:myAccordeon.AccDuree});
						EffectOpen[1] = new Effect.Appear(div_elm,{duration:myAccordeon.AccDuree});
						new Effect.toggle(div_elm,'slide');
						EffectOpen = null;
						//-- Changement de la classe --//
						a_elm.removeClassName(myAccordeon.AccClassInact);
						a_elm.addClassName(myAccordeon.AccClassAct);
					}else{
						//-- Effet de fermeture --//
						EffectClose = new Array();
						EffectClose[0] = new Effect.BlindUp(div_elm,{duration:myAccordeon.AccDuree});
						EffectClose[1] = new Effect.Fade(div_elm,{duration:myAccordeon.AccDuree});
						new Effect.toggle(div_elm,'slide');
						EffectClose = null;
						//-- Changement de la classe --//
						a_elm.removeClassName(myAccordeon.AccClassAct);
						a_elm.addClassName(myAccordeon.AccClassInact);
					}
			 	}
			 }
		);		
	},
	
	openall : function(){
		$$(myAccordeon.AccConteneur+' '+myAccordeon.AccLien, myAccordeon.AccConteneur+' '+myAccordeon.AccContenu).each(
			function(e, i){
				if(e.nodeName.toLowerCase() == 'a' && e.hasClassName(myAccordeon.AccClassInact)){
					e.removeClassName(myAccordeon.AccClassInact);
					e.addClassName(myAccordeon.AccClassAct);
				}else{
					if(e.nodeName.toLowerCase() == 'div' && e.getStyle('display') == 'none'){
						EffectOpen = new Array();
						EffectOpen[0] = new Effect.BlindDown(e,{duration:myAccordeon.AccDuree});
						EffectOpen[1] = new Effect.Appear(e,{duration:myAccordeon.AccDuree});
						new Effect.Parallel(EffectOpen,{duration:myAccordeon.AccDuree});
					}
				}
			}
		);
	},
	
	closeall : function(){
		$$(myAccordeon.AccConteneur+' '+myAccordeon.AccLien, myAccordeon.AccConteneur+' '+myAccordeon.AccContenu).each(
			function(e, i){
				if(e.nodeName.toLowerCase() == 'a' && e.hasClassName(myAccordeon.AccClassAct)){
					e.removeClassName(myAccordeon.AccClassAct);
					e.addClassName(myAccordeon.AccClassInact);
				}else{
					if(e.nodeName.toLowerCase() == 'div' && e.getStyle('display') == 'block'){
						EffectClose = new Array();
						EffectClose[0] = new Effect.BlindUp(e,{duration:myAccordeon.AccDuree});
						EffectClose[1] = new Effect.Fade(e,{duration:myAccordeon.AccDuree});
						new Effect.Parallel(EffectClose,{duration:myAccordeon.AccDuree});
					}
				}
			}
		);
	},
	
	activate : function(a_ind){
		$$(myAccordeon.AccConteneur+' '+myAccordeon.AccLien).each(
			 function(a_elm, i){
				if(i == a_ind){
					$$(myAccordeon.AccConteneur+' '+myAccordeon.AccContenu).each(
						 function(div_elm, div_ind){
							if(div_ind == a_ind){
								if(a_elm.hasClassName(myAccordeon.AccClassInact)){
									EffectOpen = new Array();
									EffectOpen[0] = new Effect.BlindDown(div_elm,{duration:myAccordeon.AccDuree});
									EffectOpen[1] = new Effect.Appear(div_elm,{duration:myAccordeon.AccDuree});
									new Effect.toggle(div_elm,'slide');
									EffectOpen = null;
									
									a_elm.removeClassName(myAccordeon.AccClassInact);
									a_elm.addClassName(myAccordeon.AccClassAct);
								}
							}
						 }
					);
			 	}
			 }
		);		
	}
};