/**************************************************************

	Script		: Validate

	Version		: 2.1 

	Authors		: Samuel Birch

	Desc		: Form validation

	Licence		: Open Source MIT Licence

**************************************************************/

var Validate = new Class({

	Implements: Options,

	options: {

			phpconnectfichier: '',

			validateOnBlur: true,

			errorClass: '',

			errorMsgClass: 'errorMessage',

			dateFormat: 'dd/MM/yy',

			onFail: Class.empty,

			onSuccess: false,

			showErrorsInline: true, 

			siReussit: '',

			label: 'Please wait...',

			upload: '', 

			form:'',

			formAction:'',

			myFormShow:'',

			obligFichierOuMission:'', 

			action:'',

			emailCompare1:'',

			emailCompare2:''

	},

	initialize: function( options){	

		this.setOptions(options);		

		this.form = $(this.options.form);

		this.elements = $(this.options.form).getElements('.required');

		this.list = []; 

		this.elements.each(function(el,i){ 

			if(this.options.validateOnBlur){

				el.addEvent('blur', this.validate.bind(this, el)); 

			}

		}.bind(this));

	$(this.options.form).getElements('input[name=lancerformulaire]').addEvent('click', function(e){

			var event = new Event(e);

			var doSubmit = true;

			this.elements.each(function(el,i){

				if(! this.validate(el)){//si les champs sont correctement renseigner alerte n'affiche rien

					if($('messagesajax') != null){					

						$('messagesajax').set('html', "<span style='color:red'>L'email est incomplet ou erroné, veuillez le ressaisir</span>");

					}

					event.stop();

					doSubmit = false 

					this.list.include(el);

				}else{

					this.list.erase(el);

				}

			}.bind(this));

			if(doSubmit){

				if(this.options.onSuccess){

					event.stop();

					this.options.onSuccess(this.options.form);// ancien code si marche pas : avec this.form = $(this.options.form); en initialize this.options.onSuccess(this.form);

				}else{

					this.request(this.options.form);

					//this.form.getElement('input[type=submit]').setProperty('value',this.options.label);

				}

			}else{

				//this.getList();

			}

		}.bind(this));

	},

	getList: function(){

		var list = new Element('ul');

		this.list.each(function(el,i){

			if(el.title != ''){

			var li = new Element('li').inject(list);

			new Element('label').setProperty('for', el.name).set('text', el.title).inject(li);

			}

		});

		return list;

	},

	validate: function(el){		

		var valid = true;

		this.clearMsg(el);

		switch(el.type){

			case 'file':

					if(el.hasClass('file')){			

							if(this.options.obligFichierOuMission.value == "" && el.value == "" ){

								this.setMsg(this.options.obligFichierOuMission, '');							

								valid = false;

								

							}else{

									valid = true;	

							}							

					}

	

				break;			

			

			case 'textarea':

					if(el.hasClass('mission')){ // alternative, si le fichier est introduit, pas d'obligation pour mission

							

							this.options.obligFichierOuMission = el;

					}

					

					if(el.hasClass('textarea')){ 

					        if(el.value !=""){

								valid = true;

								

							}else{	

								valid = false;

								this.setMsg(el, '');

							}

					}

	

				break;

			case 'select-multiple':/*

					if(el.hasClass('selectmultiple')){

						

						//pour selectdomaine2 et  selectdomaine2

						if(el.id == 'selectdomaine2' && $('domaineautres').value.length>=1){ 

							valid = true;

						}else{

							

							if(el.id == 'selectdomaine2' && $(el.id).options[0]){											

								valid = true;

							}else if(el.id == 'selectdomaine2'){	

								valid = false;

								this.setMsg(el, '');

								

							}

						}

					

						//pour selectsecteur2 et secteurautres

						if(el.id == 'selectsecteur2' && $('secteurautres').value.length>=1){ 

							valid = true;

						}else{

							

							if(el.id == 'selectsecteur2' && $(el.id).options[0]){											

								valid = true;

							}else if(el.id == 'selectsecteur2'){	

								valid = false;

								this.setMsg(el, '');

								

							}

						}

						

						//pour selectreferentiel2 et selectreferentiel2 	

						if(el.id == 'selectreferentiel2' && $('referentielautres').value.length>=1){ 

							valid = true;

						}else{

							

							if(el.id == 'selectreferentiel2' && $(el.id).options[0]){											

								valid = true;

							}else if(el.id == 'selectreferentiel2'){	

								valid = false;

								this.setMsg(el, '');

								

							}

						}

						

					}*/

				break;

			case 'select-one':

			

					if(el.hasClass('select')){

					

							if(el.value != "0"){

								valid = true;

							}else{	

								valid = false;

								this.setMsg(el, '');//Pas de selection(exzmplz)

							}

					}

					

					

				if(el.hasClass('selecttype')){

					

							if(el.value != "0"){

								valid = true;

							}else{	

								valid = false;

								this.setMsg(el, '');

							}

					

				}

					

				break;

				

			case 'password': //problème récent

					if(el.hasClass('password')){

						

							var inputPassValue = [];

							var  inputPassInco = [];

							$(this.options.form).getElements('input[type=password]').each(function(el,i){

									inputPassValue.extend([el.value]);

									inputPassInco.extend([el.name]);

							});

							

							

							if(el.value.length > 6){

									if(inputPassValue[0] == inputPassValue[1]){

										valid = true;

									}else{

										

										if(el.name == inputPassInco[1]){

											valid = false;

											this.setMsg(el, '');			

										}

									}

								

							}else{	

								valid = false;

								this.setMsg(el, '');

							}

					}

				break;

			case 'text':

				if(el.hasClass('emailcontrol')){

						

						

						var regEmail = /^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/;

						if(el.value.toUpperCase().match(regEmail)){

							valid = true;

						}else{

							valid = false;

							this.setMsg(el, '');

						}

						

						

						

						if(el.name == "login_email_entrep"){

							this.options.emailCompare1 = el.value;

						}	

						

						if(el.name == "login_email_entrep2"){

							this.options.emailCompare2 = el.value;

						}	

						

						

						if(el.name == "login_email_entrep2"){

							if(this.options.emailCompare1 == this.options.emailCompare2){

								valid = true;

							}else{

								valid = false;

								this.setMsg(el, '');

							}

						}

						

				 }

				if(el.value != ''){

					if(el.hasClass('departement')){

				

						if(el.value.length >= 1){

							valid = true;

						}else{	

							valid = false;

							this.setMsg(el, '');

						}

					}

					

					if(el.hasClass('defaut')){

						

						if(el.value.length > 2){

							valid = true;

						}else{	

							valid = false;

							this.setMsg(el, '');

						}

					}

	

					

					if(el.hasClass('email')){

						var regEmail = /^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/;

						if(el.value.toUpperCase().match(regEmail)){

							valid = true;

						}else{

							valid = false;

							this.setMsg(el, '');

						}

				 	}

					

					if(el.hasClass('number')){

						var regNum = /[-+]?[0-9]*\.?[0-9]+/;

						if(el.value.match(regNum)){

							valid = true;

						}else{

							valid = false;

							this.setMsg(el, '');

						}

					}

					

					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)){

							valid = true;

						}else{

							valid = false;

							this.setMsg(el, 'Please enter a valid postcode');

						}

						*/

					} 

					

					if(el.hasClass('date')){

						var e = /^[0-9]{2}\/[0-9]{2}\/([0-9]{4})$/; 

						if(e.test(el.value)){

							

							valid = true;

						}else{

							valid = false;

							this.setMsg(el, '');

						}

						

			

					}

					

				}else{

				

					valid = false;

					this.setMsg(el);

					

				}

				break;

				

			case 'checkbox': 			

				if(!el.checked){

					valid = false;

					this.setMsg(el);

				}else{

					valid = true;

				}

				break;

			case 'radio':

					var rad = $A(this.form[el.name]);							

					var ok = false;

					rad.each(function(e,i){

						if(e.checked){

							ok = true;

						}

					});

					if(!ok){

						valid = false;

						this.setMsg(rad.getLast(), '');

					}else{

						valid = true;

						this.clearMsg(rad.getLast());

					}

					break;

		}

		return valid;

	},

	setMsg: function(el, msg){

		if(msg == undefined){

			msg = el.title;

		} 

		if(this.options.showErrorsInline){ 

			if(el.error == undefined){

				//el.error = new Element('span').addClass(this.options.errorMsgClass).set('text',msg).injectAfter(el); 

			}else{

				el.error.set('text',msg);

			}

			el.removeClass('required');

			el.addClass(this.options.errorClass);

		}

	},

	clearMsg: function(el){ 

		el.removeClass(this.options.errorClass);

		el.addClass('required');

		if(el.error != undefined){

			el.error.destroy();

			el.error = undefined;

		}

	}, 

	selectAll: function(selectBox){

		var myArray = new Array(); 

		var select = document.getElementById(selectBox).options; 

		for(var i=0; i<select.length; i++){ 

			myArray.push(select[i].value);

		}

		return myArray;

	},

	testDuFichier: function(param2, param4){ 	

		this.hiddiv(this.options.myFormShow, this.options.form);

		var extenVerif = param2;

		var tailleVerif = param4;

	},

	hiddiv: function(param1, param2){

		$(param1).setStyle('display', 'none');

		$(param1).setStyle('visibility', 'hidden');

		$(param2).setStyle('display', 'block');

		$(param2).setStyle('visibility', 'visible');

	},

	request: function(form){	

					

					if($('gifloading') != null){

						$('gifloading').show();	

					}	

					if($('messagesajax') != null){

						$('messagesajax').empty();	

					}					

					

					

					

					

					var inputId    = [];

					var inputValue = [];

					$(this.options.form).getElements('.skini').each(function(el,i){

							inputId.extend([el.name]);

							inputValue.extend([el.value]);

					});

					inputId.extend(["form"]);

					inputValue.extend([this.options.form]);																				

					inputId.extend(["action"]);

					inputValue.extend([this.options.action]);																				

					var assoc = inputValue.associate(inputId);

					var assoc = assoc;

					var req = new Request({ 

					method: 'post',

					test: $(this.options.form),

					url: this.options.phpconnectfichier,

					data:  assoc,

					onRequest: function() {  

					},								

					onComplete: function(response) { 	

					

							if(response.test("demandepassenvoyer") == true){
												$('emailinexistant').set('text', 'Vous aller recevoir un e-mail pour votre mot de passe');
												$('login_email_entrep').value="";	
							

							}	


							if(response.test("sans-fichier") == true){

								if($('gifloading') != null){

									$('gifloading').hide();	

								}							

								$('formulaire').hide();

								$('visibilite2').show();								

							}	

							

							if(response.test("sessionrefresh") == true){

								window.location.reload(true);

							}							

							

							if(response.test("leloginexistedeja") == true){

								$('messagesajax').show();

								$('messagesajax').set('text', "Cet e-mail est déjà utilisé");	

								if($('gifloading') != null){

									$('gifloading').hide();	

								}	

							}

							

							if(response.test("articletransmis") == true){

								$('formulaire').hide();														

								$('visibilite2').show();						

							}					

					

							if(response.test("emailinexistant") == true){

								$('emailinexistant').set('text', 'Cet e-mail est inexistant');						

							}

							

				

							

							if(response.test('messagetransmis') == true){

									$('visibilite2').show();

									$('formulaire').empty(); 

							}

							

							if(response.test('avec-fichier') == true){				

									$('formname').submit();	

							}

							

							if(response.test('etape2etfin') == true){

									$('formreset').reset(); 

									$('inscriptionsursite').hide();

							}

							

							if(response.test('refresh') == true){							

									window.location.reload();						

							}

							

							if(response.test('nomloginexist') == true){														

									alert("test alert: inscription pas réussit");

							}

																				

					}

				}).send();

		}

});
