// JavaScript Document
langue_form = 'fr';
trad_JSON = null;
function trad(langue_form){
   trad_JSON = eval('trad_'+langue_form);
}

trad_fr = {
    "gvf" : {
        "infos_mal_saisies" :"INFORMATIONS MAL SAISIES",
        "infos_suiv" :"Les informations suivantes sont manquantes ou erronées :",
        "select" : "Veuillez ",
        "radio" : "Veuillez ",
        "defaut" : "Le champ ",
        "est" : " est"
    },
     "vft" : {
        "oblig_taille" : " obligatoire - taille : ",
        "a" : " à ",
        "caractere" : " caractères",
        "taille_incorrecte" : " de taille incorrecte - taille : ",
        "trop_long" : " trop long - taille maximum : ",
        "trop_court" : " trop court - taille minimum : ",
        "mal_renseigne_auto" : " mal renseigné - caractère non autorisé : ",
        "mal_renseigne" :  " mal renseigné"
    },
     "vd" : {
        "mal_formatee" : "est mal formatée",
        "invalide" : "est invalide",
        "inf" : "doit être inférieure à celle d'aujourd'hui"   
    }    
}


trad_en = {
    "gvf" : {
        "infos_mal_saisies" :"INFORMATION NOT PROPERLY KEYED IN",
        "infos_suiv" :"Following information is missing or incorrect:",
        "select" : "Please ",
        "radio" : "Please ",
        "defaut" : "The field ",
        "est" : " is"
    },
     "vft" : {
        "oblig_taille" : " compulsory – length : ",
        "a" : " to ",
        "caractere" : " characters",
        "taille_incorrecte" : " incorrect length - length : ",
        "trop_long" : " too much long  - maximum length : ",
        "trop_court" : " too much short - minimum length : ",
        "mal_renseigne_auto" : " badly well informed - unauthorized character : ",
        "mal_renseigne" :  " badly well informed"
    },
     "vd" : {
        "mal_formatee" : "is badly formatted",
        "invalide" : "invalid",
        "inf" : "must be lower than that of today"   
    }    
}


trad_es = {
    "gvf" : {
        "infos_mal_saisies" :"INFORMACIONES ERRONEAS",
        "infos_suiv" :"Las informaciones siguientes faltan o son erróneas:",
        "select" : "Por favor ",
        "radio" : "Por favor ",
        "defaut" : "El campo  ",
        "est" : " es"
    },
     "vft" : {
        "oblig_taille" : " obligatorio - tamaño : ",
        "a" : " a ",
        "caractere" : " caracteres",
        "taille_incorrecte" : " longitud incorrecta - longitud : ",
        "trop_long" : " demasiado desear - longitud máxima : ",
        "trop_court" : " demasiado cortocircuito - longitud mínima : ",
        "mal_renseigne_auto" : " gravemente bien informado - carácter desautorizado : ",
        "mal_renseigne" :  " gravemente bien informado"
    },
     "vd" : {
        "mal_formatee" : "se ajusta a formato gravemente",
        "invalide" : "inválido",
        "inf" : "debe ser más bajo que el de hoy"   
    }    
}


trad_it = {
    "gvf" : {
        "infos_mal_saisies" :"DATI ERRATI O MANCANTI",
        "infos_suiv" :"Le  informazioni seguenti sono mancanti o errate :",
        "select" : "Selezionare ",
        "radio" : "Por favor ",
        "defaut" : "Il campo   ",
        "est" : " è"
    },
     "vft" : {
        "oblig_taille" : " obbligatorio - dimensioni : ",
        "a" : " a ",
        "caractere" : " caratteri",
        "taille_incorrecte" : " lunghezza errata - lunghezza : ",
        "trop_long" : " troppo desiderare - lunghezza massima : ",
        "trop_court" : " troppo short - lunghezza minima  : ",
        "mal_renseigne_auto" : " male bene informato - carattere non autorizzato : ",
        "mal_renseigne" :  " male bene informato"
    },
     "vd" : {
        "mal_formatee" : "è formattato male",
        "invalide" : "non valido",
        "inf" : "deve essere più basso di quello di oggi"   
    }    
}


trad_nl = {
    "gvf" : {
        "infos_mal_saisies" :"ONGELDIGE INFORMATIE",
        "infos_suiv" :"Deze informatie ontbreekt of is ongeldig:",
        "select" : "",
        "radio" : "",
        "defaut" : " moet verplicht worden ingevuld ",
        "est" : " "
    },
     "vft" : {
        "oblig_taille" : " compulsory – length : ",
        "a" : " to ",
        "caractere" : " characters",
        "taille_incorrecte" : " incorrect length - length : ",
        "trop_long" : " too much long  - maximum length : ",
        "trop_court" : " too much short - minimum length : ",
        "mal_renseigne_auto" : " badly well informed - unauthorized character : ",
        "mal_renseigne" :  " badly well informed"
    },
     "vd" : {
        "mal_formatee" : "è formattato male ",
        "invalide" : "non valido ",
        "inf" : "deve essere più basso di quello di oggi"   
    }    
}

trad_pt= {
    "gvf" : {
        "infos_mal_saisies" :"INFORMAÇÕES MAL INSERIDAS",
        "infos_suiv" :"As informações seguintes estão omissas ou erradas:",
        "select" : "Queira ",
        "radio" : "Queira ",
        "defaut" : "O campo ",
        "est" : " é"
    },
     "vft" : {
        "oblig_taille" : " obrigatório - tamanho  : ",
        "a" : " a ",
        "caractere" : " caracteres",
        "taille_incorrecte" : " comprimento incorreto  - comprimento  : ",
        "trop_long" : " long demasiado  - comprimento máximo : ",
        "trop_court" : " demasiado short  - comprimento mínimo : ",
        "mal_renseigne_auto" : " informed mal bom - caráter desautorizado : ",
        "mal_renseigne" :  " informed mal bom "
    },
     "vd" : {
        "mal_formatee" : "é formatado mal",
        "invalide" : "inválido",
        "inf" : "deve ser mais baixo do que isso de hoje"   
    }    
}

/* gVerifFrom */
GVerifForm = Class.create();
GVerifForm.prototype = {
		initialize: function(conteneur,ancre,langue,fermeture_animee) {
		    trad(langue);
		    this.erreur ="";
			this.conteneur = $(conteneur)
			this.ancre = ancre;
			this.fermeture_animee = fermeture_animee;
			this.ligne_intro = '<span class="titre_verif_form">'+trad_JSON.gvf.infos_mal_saisies+'</span><br/><span class="intro_verif_form">'+trad_JSON.gvf.infos_suiv+'</span>';
			this.liste = "";
			this.conteneur_verif = new Array;
		},
		ecrire: function(){
			this.conteneur.innerHTML = "<div>" + this.ligne_intro + this.liste + "</div>";
		},
		supprimer: function(){
			this.conteneur.innerHTML = '';
		},
		affiche: function(){
			return (this.conteneur.innerHTML == '') ? false : true
		},
		add:function(element){
			this.conteneur_verif.push(element);
		},
		remise_a_zero:function(){
			var traitement = $A(this.conteneur_verif);
			traitement.each(function(element){
				element.changeStyle(false)					 
			});	
			this.supprimer();
		},
		traitement:function(element){
			var traitement = $A(this.conteneur_verif);
			var liste = "";
			traitement.each(function(element){
				if(element.traitement()!="")
				{
					switch(element.type)
					{
						case "select":
							liste += "<li>"+trad_JSON.gvf.select+element.intitule+".</li>";
						break;
						case "radio":
							liste += "<li>"+trad_JSON.gvf.radio+element.intitule+".</li>";
						break;
						case "condition":
							liste += "<li>"+element.intitule+".</li>";
						break;
						case "date":
							liste += "<li>"+element.intitule+" "+element.traitement()+".</li>";
						break;

						default:
							liste += "<li>"+trad_JSON.gvf.defaut+element.intitule+trad_JSON.gvf.est+element.traitement()+"</li>";
						break;
					}
					element.changeStyle(true)
				}
			});
			// si erreur
			if(liste!="")
			{
				this.liste = "<ul>"+liste+"</ul>";

				if(this.affiche())
				{
					Element.setStyle(this.conteneur,{height:'auto'});
					this.ecrire();
				}
				else
				{
					//defixer la taille pour que la liste ne prenne pas toute sa place initiale
					this.ecrire()
					new Effect.BlindDown(this.conteneur);
				}
				// test "ancre"
				if(this.ancre!="")
				{
					Element.versPosition(this.ancre)
				}

				return false
			}
			else
			{
				if(this.affiche() && this.fermeture_animee)
				{
					Element.fixeElement(this.conteneur)
					this.supprimer()
					Effect.BlindUp(this.conteneur);
				}
				return true
			}
		}
};
/* /gVerifFrom */

/* VerifFormTxt */
VerifFormTxt = Class.create();
VerifFormTxt.prototype = {
	initialize: function(element,intitule,obligatoire,taille_min,taille_max,carac_autorise,type) {
	    this.element = $(element);
		this.intitule = intitule;
		this.valeur = $F(this.element);
		this.obligatoire = obligatoire;
		this.type=type;
		this.taille_min = taille_min;
		this.taille_max = (taille_max=='max') ? this.element.maxLength : taille_max;
		this.regex = null;
		switch (carac_autorise)
		{
			case "chiffre":
				this.carac_autorise = "0123456789";
			break;
			case "nombre":
				this.carac_autorise = "0123456789., -";
			break;
			case "tel":
				this.carac_autorise = "0123456789. -";
			break;
			case "alpha":
				this.carac_autorise = "abcdefghijklmnopqrstuvwxyzéèêëôöîïàâäûüç";
			break;
			case "alphachiffre":
				this.carac_autorise = "abcdefghijklmnopqrstuvwxyzéèêëôöîïàâäûüç0123456789";
			break;
			case "alphanombre":
				this.carac_autorise = "abcdefghijklmnopqrstuvwxyzéèêëôöîïàâäûüç0123456789., -";
			break;
			case "alpha_2":
				this.carac_autorise = "abcdefghijklmnopqrstuvwxyzéèêëôöîïàâäûüç0123456789.,- '()€$£%[]{}&=+@?!/°;:*~_’";
			break;
			default:
				this.carac_autorise = "";
			break;
		}
		this.type = type;
	},
	changeStyle: function(change){
		if(change)
		{
			Element.addClassName(this.element,"verif_form_erreur")
		}
		else
		{
			Element.removeClassName(this.element,"verif_form_erreur")
		}
	},
	traitement: function(){
		this.changeStyle(false)
		switch (this.type)
		{
			/* texte */
			case "texte" :
				return this.verification()
			break;

			/* email */
			case "email" :
				this.regex = /^[a-z0-9_.-]+@[a-z0-9_.-]+\.([a-z]{2,4})$/;
				return this.verification()
			break;

			/* date */
			case "date" :
				this.regex = /^([0123])([0123456789])\/([01])([0123456789])\/([012])([0123456789])([0123456789])([0123456789])$/;
				return this.verification()
			break;

			/* date_j */
			case "date_j" :
				this.regex = /^([0123])([0123456789])$/;
				return this.verification()
			break;

			/* date_m */
			case "date_m" :
				this.regex = /^([01])([0123456789])$/;
				return this.verification()
			break;

			/* date_a */
			case "date_a" :
				this.regex = /^([012])([0123456789])([0123456789])([0123456789])$/;
				return this.verification()
			break;

			/* defaut */
			default:
				return ""
			break;
		}
	},
	verification: function(){
		var valeur_t = this.valeur.toLowerCase();
		if (valeur_t.length==0) {
			if(this.obligatoire) return trad_JSON.vft.oblig_taille+this.taille_min+((this.taille_min!=this.taille_max)? trad_JSON.vft.a+this.taille_max:"")+trad_JSON.vft.caractere+"."
		}
		else {
			if (this.taille_min==this.taille_max&&valeur_t.length!=this.taille_min) return trad_JSON.vft.taille_incorrecte+  this.taille_max+trad_JSON.vft.caractere+"."
			if (this.taille_max!=0 && valeur_t.length>this.taille_max) return trad_JSON.vft.trop_long+this.taille_max+trad_JSON.vft.caractere+"."
			if (valeur_t.length<this.taille_min) return trad_JSON.vft.trop_court+this.taille_min+trad_JSON.vft.caractere+"."
		}

		if (this.carac_autorise=="") return "" // si rien ? v?rifier renvoi ok

		for (var i=0;i<valeur_t.length;i++) {
			if (this.carac_autorise.indexOf(valeur_t.charAt(i))==-1 && valeur_t.charAt(i)!="\n" && escape(valeur_t.charAt(i))!="%0D" ) {
				return trad_JSON.vft.mal_renseigne_auto+valeur_t.charAt(i)+".";
			}
		}

		if(this.regex != null)
		{
			if(!this.regex.test(valeur_t)&&valeur_t.length!=0) {return trad_JSON.vft.mal_renseigne+"."}
		}
		return ""
	}

};
/* VerifFormTxt */

/* VerifDate */
VerifDate = Class.create();
VerifDate.prototype = {
initialize: function(intitule,obligatoire,jour,mois,annee,verif_date_actuelle) {
		this.intitule = intitule;
		this.obligatoire = obligatoire;
		this.jour = $(jour);
		this.mois = $(mois);
		this.annee = $(annee);
		this.date_aujourdhui = new Date();
		this.type="date";
		this.verif_date_actuelle = verif_date_actuelle;
		this.date = ($F(this.jour).length == 2 && $F(this.jour) > 0 && $F(this.jour) < 32 && $F(this.mois).length == 2 && $F(this.mois) > 0 && $F(this.mois) < 13 && $F(this.annee).length == 4 && $F(this.annee) > 0  && $F(this.annee) < 2100) ? new Date(eval($F(this.annee)),eval($F(this.mois)-1),eval($F(this.jour))) : null;
	},
	changeStyle: function(change){
		if(change)
		{
			Element.addClassName(this.jour,"verif_form_erreur")
			Element.addClassName(this.mois,"verif_form_erreur")
			Element.addClassName(this.annee,"verif_form_erreur")
		}
		else
		{
			Element.removeClassName(this.jour,"verif_form_erreur")
			Element.removeClassName(this.mois,"verif_form_erreur")
			Element.removeClassName(this.annee,"verif_form_erreur")
		}
	},
	traitement: function(){
		this.changeStyle(false)
		
		if(this.obligatoire){
			if(!($F(this.jour).length >= 1 && $F(this.mois).length >= 1 && $F(this.annee).length >= 1)) return "obligatoire";
		}
		
		// si un des 3 champs est rempli
		if(($F(this.jour).length >= 1 || $F(this.mois).length >= 1 || $F(this.annee).length >= 1))
		{
			// erreur sur le format de la date
			if(this.date == null){return trad_JSON.vd.mal_formatee}
	
			if(this.date != null)
			{		
				// date valide ?
				var date_invalide = this.date.getMonth()!=eval($F(this.mois))-1 && this.date.getDate()!=eval($F(this.jour));
				if(date_invalide){return trad_JSON.vd.invalide}
				
				if(this.verif_date_actuelle == "avant")
				{
					if($F(this.annee) > this.date_aujourdhui.getFullYear() || ($F(this.annee) == this.date_aujourdhui.getFullYear() && $F(this.mois) > (this.date_aujourdhui.getMonth()+1)) || ($F(this.annee) == this.date_aujourdhui.getFullYear() && $F(this.mois) == (this.date_aujourdhui.getMonth()+1) && $F(this.jour) >= this.date_aujourdhui.getDate()))
					{
						return trad_JSON.vd.inf;
					}
				}
			}
		}
		return ""
	}
};
/* VerifDate */

/* VerifFormSelect */
VerifFormSelect = Class.create();
VerifFormSelect.prototype = {
	initialize: function(element,intitule,obligatoire,value_defaut) {
		this.element = $(element);
		this.intitule = intitule;
		this.valeur = $F(this.element);
		this.obligatoire = obligatoire;
		this.value_defaut = value_defaut
		this.type="select";
	},
	changeStyle: function(change){
		if(change)
		{
			Element.addClassName(this.element,"verif_form_erreur")
		}
		else
		{
			Element.removeClassName(this.element,"verif_form_erreur")
		}
	},
	traitement: function(){
		this.changeStyle(false)
		if(Form.Element.getValue(this.element)==this.value_defaut)
		{return "erreur"}
		return ""
	}
};
/* VerifFormSelect */

/* VerifFormRadio */
VerifFormRadio = Class.create();
VerifFormRadio.prototype = {
	initialize: function(element,intitule,obligatoire,choix) {
		this.element = $(element);
		this.intitule = intitule;
		this.obligatoire = obligatoire;
		this.type="radio";
		this.choix = choix;
	},
	changeStyle: function(change){
		if(change)
		{
			Element.addClassName(this.element,"verif_form_erreur")
		}
		else
		{
			Element.removeClassName(this.element,"verif_form_erreur")
		}
	},
	traitement: function(){
		this.changeStyle(false)
		var enfants = this.element.childNodes;
		var check = false;
		var dd = (this.choix == null)? $A(enfants) : $A(this.choix);
		dd.each(function(element){
			if($(element).type == "radio"){if($(element).checked){check = true}}
			if($(element).type == "checkbox"){if($(element).checked){check = true}}
		});
		if(check){return ""}
		return "erreur"
	}
};
/* VerifFormRadio */

/* VerifFormCondition */
VerifFormCondition = Class.create();
VerifFormCondition.prototype = {
	initialize: function(intitule,elements) {
		this.intitule = intitule;
		this.type="condition";
		this.elements = elements;
	},
	changeStyle: function(change){
		if(this.elements != null)
		{
			for(var i = 0 ; i < this.elements.length ; i++)
			{
				if(change)
				{
					Element.addClassName(this.elements[i],"verif_form_erreur")
				}
				else
				{
					Element.removeClassName(this.elements[i],"verif_form_erreur")
				}
			}
		}
	},
	traitement: function(){
		return "intitule"
	}

};
/* VerifFormCondition */

/* Checkbox_all */
Checkbox_all = Class.create();
Checkbox_all.prototype = {
	initialize: function(checkbox,checkbox_all) {
		this.checkbox = $A(checkbox);
		this.checkbox_all = checkbox_all;
		this.checkboxs = $A(checkbox);
		this.checkboxs.push(checkbox_all);

		for (var i=0 ; i < this.checkbox.length ; i++)
		{
			$(this.checkbox[i]).onclick = this.evt_check.bindAsEventListener(this);
		}

		$(this.checkbox_all).onclick = this.evf_check_all.bindAsEventListener(this);
	},
	evt_check: function(){
		var all_check = true;

		this.checkbox.each(function(element){
			if($(element).checked == false){all_check = false;}
		})

		if(all_check)
			{$(this.checkbox_all).checked = true}
		else
			{$(this.checkbox_all).checked = false}
	},
	evf_check_all: function(){
		if($(this.checkbox_all).checked)
		{
			this.checkboxs.each(function(element){
				$(element).checked = true
			})
		}
		else
		{
			this.checkboxs.each(function(element){
				$(element).checked = false
			})
		}
	}

};
/* Checkbox_all */

