// CHECK FORM
/* author : eric tarillon */

function checkForm(idForm){
 	this.tabField_Require = new Array();
 	this.tabField_Email = new Array();
 	this.tabField_Captcha_Error = new Array();
 	this.tabField_Require_Error = new Array();
 	this.tabField_Email_Error = new Array();
 	this.tabField_All_Error = new Array();
 	this.lang = "fr";
 	this.contentTextError = "";
 	this.idForm = idForm;
 	this.valide = false;
 	this.styleErrorDiv = "";
 	
 	//adder
  	function addFieldRequire(idField) {
    	this.tabField_Require[this.tabField_Require.length] = idField;
  	}
  	function addFieldEmail(idField_email) {
    	this.tabField_Email[this.tabField_Email.length] = idField_email;
  	}
  	function addArrayFieldRequire(arrayField) {
    	this.tabField_Require = arrayField;
  	}
  	function addArrayFieldEmail(arrayField){
    	this.tabField_Email = arrayField;
  	}
  	
  	function setLang(lang){
  		this.lang = lang
  	}
  	
  	
  	//model
  	function submitForm(){
  		idForm = this.idForm;
  		if(this.check()){
  			$(idForm).submit();
  		}
  	}
  	
  	function check(){
  		this.tabField_Require_Error = checkFieldRequire(this.tabField_Require);
  		this.tabField_Email_Error = checkFieldEmail(this.tabField_Email);
  		this.tabField_Captcha_Error = checkFieldCaptcha();
 
 		this.contentTextError = "";
 		if(this.lang == "fr"){
	 		if(this.tabField_Require_Error.length > 0){this.contentTextError += "<br /> - Les champs color&eacute;s sont obligatoires."};
	 		if(this.tabField_Email_Error.length > 0){this.contentTextError += "<br /> - L'adresse email est invalide."};
	 		if(this.tabField_Captcha_Error.length > 0){this.contentTextError += "<br /> - La r&eacute;ponse captcha est incorrecte."};
 		}
 		if(this.lang == "de"){
	 		if(this.tabField_Require_Error.length > 0){this.contentTextError += "<br /> - Die gef&auml;rbten Felder sind Pflichtfelder."};
	 		if(this.tabField_Email_Error.length > 0){this.contentTextError += "<br /> - Bitte gib eine korrekte E-Mail-Adresse."};
	 		if(this.tabField_Captcha_Error.length > 0){this.contentTextError += "<br /> - Falscher Best&auml;tigungscode."};
 		}
 		if(this.lang == "en"){
	 		if(this.tabField_Require_Error.length > 0){this.contentTextError += "<br /> - The colored fields are required."};
	 		if(this.tabField_Email_Error.length > 0){this.contentTextError += "<br /> - The email address is invalid."};
	 		if(this.tabField_Captcha_Error.length > 0){this.contentTextError += "<br /> - The  confirmation code is invalid."};
 		}
 		if(this.lang == "ru"){
	 		if(this.tabField_Require_Error.length > 0){this.contentTextError += "<br /> - Цветные поля являются обязательными для заполнения. "};
	 		if(this.tabField_Email_Error.length > 0){this.contentTextError += "<br /> - Адрес электронной почты является недействительным."};
	 		if(this.tabField_Captcha_Error.length > 0){this.contentTextError += "<br /> - Подтверждающий код неверен."};
 		}
 		
 		
  		/*** mark errors field ***/
  		this.tabField_All_Error = this.tabField_Require_Error.concat(this.tabField_Email_Error);
  		this.tabField_All_Error = this.tabField_All_Error.concat(this.tabField_Captcha_Error);
  		this.tabField_All = this.tabField_Require.concat(this.tabField_Email);
  		markAllNoErrorField(this.tabField_All);
  		markAllErrorField(this.tabField_All_Error);
  		
  		notifyError(this.contentTextError,this.styleErrorDiv);
  		addEventremoveNotifyError(this.tabField_All);
  		/*************************/
  		valide = true;
  		if( (this.tabField_Require_Error.length > 0) || (this.tabField_Email_Error.length > 0) || (this.tabField_Captcha_Error.length > 0)  ){valide = false;}
  		if(valide){removeNotifyError();}
  		return valide;
  	}
  	
  	function checkFieldRequire(arrayField){
  		var tabField_Error = new Array();
  		for(i=0;i<arrayField.length;i++){
			if( ($(arrayField[i])) && ($F(arrayField[i]) == "" )){
				tabField_Error[tabField_Error.length] = arrayField[i];
			}
		}	
		return tabField_Error;
  	}
  	function checkFieldEmail(arrayField){
  		var tabField_Error = new Array();
  		for(i=0;i<arrayField.length;i++){
			if( $(arrayField[i]) && ($F(arrayField[i]) != "")){
				if(!estCeUnMail($F(arrayField[i]))){
					tabField_Error[tabField_Error.length] = arrayField[i];
				}
			}
		}	
		return tabField_Error;
  	}

	 function estCeUnMail(champs) {
	 	var mail = /^[\w\-]+(\.[\w\-]+)*@[\w\-]+(\.[\w\-]+)*\.[\w\-]{2,}$/;
		reponse=mail.test(champs);
		if (reponse) {
			return true;
		}else {
			return false;
		}
	 } 
  	
  	function checkFieldCaptcha(){
  		var tabField_Error = new Array();
		if($('captcha') && ($F('captcha') != "")){
			reponse = $F('captchares');
			reponseUser = $F('captcha');
			num1 =  parseInt(reponse.substring(0,1));
			num2 =  parseInt(reponse.substring(1,2));
			somme = num1+num2;
			if(somme !=  parseInt(reponseUser)){
				tabField_Error[tabField_Error.length] = "captcha";
			}
		}
  		return tabField_Error;
  	}
  	
  	function markAllErrorField(arrayError){
  		for(i=0;i<arrayError.length;i++){
			markError(arrayError[i]);
		}
  	}
  	
  	function markAllNoErrorField(arrayError){
  		for(i=0;i<arrayError.length;i++){
			Element.removeClassName(arrayError[i],"error_field");
		}
  	}
  	
  	function markError(field){
  		Element.addClassName(field,"error_field");
  	}
  
  	function notifyError(contentTextError, styleDivError){
  		contentTextError = contentTextError+="<br /><br />";
  		var div_info_error = "<div id='info_error' style='display:none;"+styleDivError+"'></div>";
  		if(!$('info_error')){
  			//creation de la div
  			$('form_error').insert({before:div_info_error});
  			$('info_error').innerHTML = contentTextError;
  			appearNotifyError();
  		}else{
  			if($('info_error').hasClassName("up")){
  				$('info_error').innerHTML = contentTextError;
  				appearNotifyError();
  			}
  		}
  	}
  	
  	function addEventremoveNotifyError(allField){
  		for(i=0;i<allField.length;i++){
  			$(allField[i]).observe('click',removeNotifyError );	
  		}
  	}
  	
  	function removeNotifyError(){
  		if($('info_error')){
  			Effect.BlindUp('info_error', { duration: 0.2 });
  			$('info_error').addClassName("up");
  		}
  	}
  	
  	function appearNotifyError(){
  		//Effect.BlindDown('info_error', { duration: 0.2 });
		$('info_error').addClassName("down");
		new Effect.BlindDown('info_error', { duration: 0.3 });
		new Effect.Highlight('info_error', { startcolor: '#eb0768',endcolor: '#272727' });
		
  	}
 	
 	function setStyleErrorDiv(style){
 		this.styleErrorDiv = style;
 	}

  	//fonctions accessibles
  	this.addFieldRequire = addFieldRequire;
  	this.addFieldEmail = addFieldEmail;
  	this.submitForm = submitForm;
  	this.check = check;
  	this.setLang = setLang;
  	this.submitForm = submitForm;
  	this.setStyleErrorDiv = setStyleErrorDiv;
}


