/*
 * Objet pour la gestion des formulaires en accordion	
 * Etape 1 si on valide on déroule l'étape 2, etc...
 * Développement Fabien CANU
 */
 
 // Creation de la class(objet) oFormAccordeon

var oFormAccordeon = new Class({
															 
	options: {
		link							: 'defaut', // Element sur lequel à lieu le click pour charger le form
		conteneurGlobal		: 'conteneurEvernetBox', // Le conteneur principal ou se chargera le formulaire
		url								: 'xhr_form-accordeon.php', // Url pour le formulaire
		params						: '', // Paramètres eventuels à transmettre
		message						: '', // Message texte au besoin
		conteneurEtape		: 'div.divEtape', // Type de l'element et nom de la classe CSS du conteneur refermable
		nEtape						: 3, // Nombre d'étape pour l'accordeon
		nomForm						: 'form', // Nom de l'id du formulaire
		
		champActif				: { // Gestion des champs activé par defaut ou non
			inactif			: true, // si "inactif" == false, on déclare qu'il y a des champ à désactiver par defaut
			classCss 		: '', // Id element conteneur parent et nom classe css des champ à desactiver
			activateur	: '' // Id de l'element activateur des champs désactivés
		},
		largeur			: 500
		
  },	
	
  initialize: function(options){		
		
		this.setOptions(options);
		// Observateur sur le menu
		var el = this.options.link;		
		
		if(this.options.link != 'defaut') {
			$(el).addEvent('click', function(e) {
				e = new Event(e).stop();
				if(!$('conteneurEvernetBox')) this.evernetBox();
				this.a(this.options.url, 'conteneurEvernetBox', this.options.params);
			
			}.bind(this));
		} else {
			if(!$('conteneurEvernetBox')) this.evernetBox();
			this.a(this.options.url, 'conteneurEvernetBox', this.options.params);
		}
		
  },
	
	evernetBox: function() {
		
		// Correction IE sur les liste, on les masque toutes
		var tabSelect = document.getElementsByTagName('select');			
		$A(tabSelect).each(function(e,j){
			e.style.display = 'none'; 
		});		

		// Assombrissement de la page
		this.assombrissement = new Element('div', {'id': 'assombrissement'}).injectInside(document.body);
		this.assombrissement.setStyles({'top': window.getScrollTop(), 'height': window.getScrollHeight()});
		
		this.fx = {
			assombrissement: this.assombrissement.effect('opacity', {duration: 500}).hide()
		};	
		
		this.fx.assombrissement.start(0.5);
		
		var largeurBloc = ((this.options.largeur+50) > document.body.offsetWidth) ? (document.body.offsetWidth)-50 : this.options.largeur;
		
		// Création du bloc conteneur
		this.conteneur = new Element('div', {'id': 'conteneurEvernetBox', 'styles': {'width': largeurBloc, 'marginLeft': -((largeurBloc/2)+14)}}).injectInside(document.body);
		this.top = window.getScrollTop() + (window.getHeight() / 15);
		this.conteneur.setStyles({top: this.top, display: ''});
	},
	
	a: function(url, cont, parametres){
		
		var r = new Ajax(url, {
			method: 'get',
			data: parametres,
			update: $(cont),
			evalScripts : true
		});
		r.request();		
		r.addEvent('onComplete', this.accordeon.bind(this));
		r.addEvent('onComplete', function() {			
			if(this.options.messsage != '' && $('validationMessage')) $('validationMessage').innerHTML = this.options.message;
			this.gestionMenu();
		}.bind(this));
		if(this.options.champActif.inactif == false) r.addEvent('onComplete', this.desactiverChamp.bind(this));
		

	},
	
	desactiverChamp: function() {				
		
		$$(this.options.champActif.classCss).each(function(el, i){
			//el.disabled = true;							 
		});	
		/*
		// On réactive les champ si case coché					
		$(this.options.champActif.activateur).addEvent('click', function(e){
					
			//e = new Event(e).stop();
			
			alert(e.getValue());
			
			if(e.checked != "checked") {
				e.checked = "checked";
				$$(this.options.champActif.classCss).each(function(el, i){
					el.disabled = false;							 
				});	
			} else {
				e.checked = "";
				$$(this.options.champActif.classCss).each(function(el, i){
					el.disabled = true;							 
				});	
			}
			
		}.bind(this));	
		*/
		
	},
	
	accordeon: function() {
		if($('etape1')) {
			this.effet = [];
			
			for(var i = 1; i <= this.options.nEtape; i++){	
			
				//this.effet[i] = new Fx.Style('etape' + i);	// On crée les instance pour l'effet accordeon
				this.effet[i] = $('etape' + i);
				//if(i != 1) this.effet[i].hide();	// Puis on les masque tous sauf le premier
				if(i != 1) this.effet[i].style.display = 'none';	// Puis on les masque tous sauf le premier
				if(i != 1) this.effet[i].style.border = '0';	// Puis on les masque tous sauf le premier
				
				// Observateurs classique pour la verif des champs
				var el = $('validerEtape-' + i);
				if(!el.hasClass('verifCommune')) el.addEvent('click', this.verificationChamp.bind(this, el));
				//else el.addEvent('click', this.verificationChamp.bind(this, el));
				else el.addEvent('click', this.loop.bind(this, el));
			}	
		}
	},
	
	verificationChamp: function(el) {

		
		var reg=new RegExp("-", "g");
		var tabN = el.id.split(reg);	
		var cmpt = tabN[1];
				
		var count = 0;
		var tabErreur = [];
		
		var etape = $('etape' + cmpt);	
		var etapeValidation = new oValidationForm(etape,{fieldClass: 'red', messageBox: 'validationMessage', dateFormat: 'dd/mm/yy'});
		if (etapeValidation.valid == true) {
			var next = cmpt++;
		
			if (cmpt <= this.options.nEtape) {
				var ec = this.effet[cmpt];
				var sui = this.effet[next]; // On réaffiche seulement si y a une étape apres
				/*
				ec.addEvent('onComplete', function() {
					//($('etape' + cmpt).getParent()).removeProperty('style');
					($('etape' + cmpt).getParent()).setStyle('height', 'auto');
				});
				
				ec.hide();
				sui.show();
				*/
				ec.style.display = 'block';
				ec.style.border = '';
				sui.style.display = 'none';
				
				
				
			} else {
				
				//alert($(this.options.nomForm).toQueryString());
				
				var log = $('validationMessage');
				
				$(this.options.nomForm).send({
					update: this.options.conteneurGlobal,					
					evalScripts : true,
					onComplete: function() {
					}
				});
			}
		}
	},
	
	gestionMenu : function() {
		// Click sur retour
		if($('retourEvernetBox')) {
			$('retourEvernetBox').addEvent('click', function() {
			
				$('assombrissement').remove();
				$('conteneurEvernetBox').remove();	
				
				// Correction IE sur les liste, on les affichent toutes
				var tabSelect = document.getElementsByTagName('select');			
				$A(tabSelect).each(function(e,j){
					e.style.display = ''; 
				});		
			}.bind(this));
		}
		
		// Click sur retour menu
		if($('menuEvernetBox')) {
			$('menuEvernetBox').addEvent('click', function() {
				var morphMenu = new Fx.Morph('conteneurEvernetBox', {wait: false});
				morphMenu.start('morphMenu');

				this.a(path+'/include/xhr_menu-utilisateur.php', 'conteneurEvernetBox', 'retour=1');	
			}.bind(this));
		}
		
		// Click sur fermer
		if($('fermerEvernetBox')) {
			$('fermerEvernetBox').addEvent('click', function() {
			
				$('assombrissement').remove();
				$('conteneurEvernetBox').remove();	
				
				// Correction IE sur les liste, on les affichent toutes
				var tabSelect = document.getElementsByTagName('select');		
				$A(tabSelect).each(function(e,j){
					e.style.visibility = 'visible';	
					e.style.display = ''; 
				});		
			}.bind(this));
		}
		
		// Click sur zone sombre
		if($('assombrissement')) {
			$('assombrissement').addEvent('click', function() {
			
				if($('assombrissement')) $('assombrissement').remove();
				if($('conteneurEvernetBox')) $('conteneurEvernetBox').remove();	
				
				// Correction IE sur les liste, on les affichent toutes
				var tabSelect = document.getElementsByTagName('select');			
				$A(tabSelect).each(function(e,j){
					e.style.display = ''; 
				});		
			}.bind(this));
		}
	},
	
	loop: function(el) {
		
		this.el = el;
		
		// Verification si deux champs hidden vide
		if(($('depart_insee') && $('depart_insee').value == '') && ($('destination_insee') && $('destination_insee').value == '')) {
			var params = 'commune_depart='+$('trajetDepart').value+'&commune_destination='+$('trajetDestination').value+'&erreur_depart=1&erreur_destination=1';
			this.rAjax(params);
		}
		// Verification si champ hidden depart_insee vide
		else if(($('depart_insee') && $('depart_insee').value == '') && ($('destination_insee') && $('destination_insee').value != '')) {
			var params = 'commune_depart='+$('trajetDepart').value+'&commune_destination='+$('trajetDestination').value+'&erreur_depart=1&erreur_destination=0';
			this.rAjax(params);
		}
		// Verification si champ hidden destination_insee vide
		else if(($('depart_insee') && $('depart_insee').value != '') && ($('destination_insee') && $('destination_insee').value == '')) {	
			var params = 'commune_depart='+$('trajetDepart').value+'&commune_destination='+$('trajetDestination').value+'&erreur_depart=0&erreur_destination=1';
			this.rAjax(params);
		}		
		else this.verificationChamp($('validerEtape-1'));
	},
	
	rAjax : function(params) {
		
		var r = new Ajax(path+'/include/xhr_confirm-commune.php', {
			method: 'post',
			data: params,
			evalScripts : true
		});
		r.request();																		
	}


});

oFormAccordeon.implement(new Options);


/*
Script: oValidationForm.js // Modifié
	basic form validation script.

Authors:
	Sam Birch

License:
	MIT-style license.
	
	OPTIONS pour une validation optimal :
	Ajouter la class correspondante au type de vérification du champ
	Ex : champ texte pour adresse mail -> <input type="text" class="verif email" ...
	
	Liste des type de vérif :
	"email" 			Pour la vérif des adresse mails
	"postcode"		Pour les codes postaux
	"date"				Pour les dates, passer en options le format de la date
	"number"			Pour les champs de type tél, fax...
*/


var oValidationForm = new Class({

	initialize: function(myForm,options){
		options = Object.extend({
			custom: false,
			messageBox: false,
			dateFormat: false,
			fieldClass: false,
			showList:  true
		}, options || {});
		
		this.form = $(myForm);
		this.myElements = $$('#'+this.form.id+' .verif');
		this.form.myElements = this.myElements;
		options.messageBox = $(options.messageBox);
		this.form.messageBox = options.messageBox;
		
		//this.formAnchor = new Element('a').setProperties({name: this.form.id+'Anchor'}).injectInside('validationMessage');
		//this.form.formAnchor = this.formAnchor;
		
		// Modif fab
		options.list = new Element('p').setProperty('id', 'retourInformation')
		if(options.showList){
			//options.list.injectInside(options.messageBox);
		}
		// Fin modif
		
		this.myElements.each(function(el,i){
			el.oValidationForm = function(){				
				//TEXTBOX
				if(el.type == 'text' || el.type == 'password'){
					if(el.value != ''){
						if(el.hasClass('email')){
							var regEmail = /^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/;
							if(el.value.toUpperCase().match(regEmail)){
								el.removeClass(options.fieldClass);
								el.getPrevious().removeClass(options.fieldClass);
								return(true);
							}else{
								el.getPrevious().addClass(options.fieldClass);
								return(false);
							}
							
						}else if(el.hasClass('number')){
							var regNum = /[-+]?[0-9]*\.?[0-9]+/;
							if(el.value.match(regNum)){
								el.getPrevious().removeClass(options.fieldClass);
								return(true);
							}else{
								el.getPrevious().addClass(options.fieldClass);
								return(false);
							}
						}else if(el.hasClass('postcode')){
							var regPC = /^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]{2})$/
							if(el.value.match(regPC)){
								el.removeClass(options.fieldClass);
								el.getPrevious().removeClass(options.fieldClass);
								return(true);
							}else{
								el.getPrevious().addClass(options.fieldClass);
								return(false);
							}
							
						}else if(el.hasClass('date')){
							if(Date.isValid(el.value, options.dateFormat)){
								el.getPrevious().removeClass(options.fieldClass);
								return(true);
							}else{
								el.getPrevious().addClass(options.fieldClass);
								return(false);
							}
							
						}else{
							el.getPrevious().removeClass(options.fieldClass);
							return(true);
						}
					}else{
						el.getPrevious().addClass(options.fieldClass);
						return(false);	
					}
				}
				//TEXTAREA
				if(el.type == 'textarea'){
					if(el.value == ''){
						el.getPrevious().addClass(options.fieldClass);
						return(false);
					}else{
						el.getPrevious().removeClass(options.fieldClass);
						return(true);
					}
				}
				//CHECKBOX
				if(el.type == 'checkbox'){
					if(!el.checked){
						el.getPrevious().addClass(options.fieldClass);
						return(false);
					}else{
						el.getPrevious().removeClass(options.fieldClass);
						return(true);
					}
				}
				//DROPDOWN
				if(el.type == 'select-one'){
					if(el.value == ''){
						el.addClass(options.fieldClass);
						return(false);
					}else{
						el.removeClass(options.fieldClass);
						return(true);
					}
				}
				//RADIO
				if(el.type == 'radio'){
					var rad = $A(this.form[el.name]);
					var ok = false;
					rad.each(function(e,j){
						if(e.checked){
							ok = true;
						}
					});
					if(!ok){						
						rad.each(function(e,j){
							if(el.getPrevious()){
								el.getPrevious().addClass(options.fieldClass);
							} 
							else if(el.getNext()){
								el.getNext().addClass(options.fieldClass);
							} 
						});
						return(false);
					}else{
						rad.each(function(e,j){
							if(el.getPrevious()){
								el.getPrevious().removeClass(options.fieldClass);
							}
							else if(el.getNext()){
								el.getNext().removeClass(options.fieldClass);
							} 
						});
						return(true);
					}
				}
			}
		});
		
		var valid = true;
		this.myElements.each(function(el,i){
			if(!el.oValidationForm()){valid=false};
		});
		if(options.custom != false){
			validC = options.custom(options.list);
			if(valid && !validC){valid = false};
		}
		
		if(!valid){
			this.form.messageBox.setStyle('display','block');
			//document.location = '#'+this.formAnchor.name;
		}else{
			this.form.messageBox.setStyle('display','none');
			//this.form.messageBox.setHTML('<p><b>Veuillez corriger les champs en rouge.</b></p>');
		}
		
		this.valid = valid;
	}
});