/*
Cette classe va permetrre d'effectuer les vérifications des différents formulaires.
On va y stocker tous les champs pour pouvoir les vérifier.
On retournera enfin un message d'alerte avec les différents champs faux, ainsi que l'endroit de la faute.

@Othantic Conseil
*/
function Verification(){
	var tab_champ;
	var tab_champ_faux_message;
	
	/*
	Description : Ajoute un champ au formulaire virtuel de vérification.
	Parametres : mon_champ : c'est un objet du type champ.
	Sortie : Aucune.
	*/
	this.ajouter_champ = function(mon_champ){
		tab_champ.push(mon_champ);
	}
	
	/*
	Description : Vérifie tous les champs pour afficher (ou non) un message d'erreur.
	Parametres : Aucun.
	Sortie : Message d'erreur contenant les différents champs faux.
	*/
	this.verifier_champs = function(){
		tab_champ_faux_message =  new Array();
		var cpt_chkb = 0;
		var cpt_rb = 0;
		var cpt_chkb_checked = 0;
		var cpt_rb_checked = 0;
		var i = 0;
		while(i < tab_champ.length){
			var valeur_champ = document.getElementById(tab_champ[i].get_id()).value;
			//on vérifie si le champ est obligatoire, et ensuite s'il est rempli. S'il ne l'est pas, on envoie un message d'erreur.
			if(tab_champ[i].get_obligatoire == 1 && valeur_champ == ""){
				tab_champ_faux_message.push("Le champ "+ tab_champ[i].get_label() + " est un champ obligatoire !");
				i++;
				continue;
			}
			
			// on vérifie si le champ a la bonne taille.
			if(valeur_champ.length < tab_champ[i].get_min_carac()){
				tab_champ_faux_message.push("Le champ "+ tab_champ[i].get_label() + " doit contenir au moins "+ tab_champ[i].get_min_carac() +" caract\350re(s) !");
				i++;
				continue;
			}
			if(valeur_champ.length > tab_champ[i].get_max_carac()){
				tab_champ_faux_message.push("Le champ "+ tab_champ[i].get_label() + " doit contenir moins de "+ tab_champ[i].get_min_carac() +" caract\350re(s) !");
				i++;
				continue;
			}
			
			// vérifie selon le type du champ.
			switch(tab_champ[i].get_type()){
				case 'cp':
					//si c'est un code postal, il faut que ce soit du type numérique
					if(valeur_champ != parseFloat(valeur_champ)){
						tab_champ_faux_message.push("Le champ "+ tab_champ[i].get_label() + " doit \352tre compos\351 uniquement de chiffres !");
					}
					break;
				case 'email':
					//si c'est une adresse email, il faut qu'on trouve un "@" puis un "."
					if(valeur_champ.lastIndexOf("@") == -1 || valeur_champ.lastIndexOf(".") == -1 || valeur_champ.lastIndexOf("@") > valeur_champ.lastIndexOf(".")){
						tab_champ_faux_message.push("Le champ "+ tab_champ[i].get_label() + " doit \352tre sous la forme monadressemail@moi.com !");
					}
					break;
				case 'year':
					var annee = valeur_champ;
					if(parseInt(annee) >= parseInt(2999) || parseInt(annee) <= parseInt(1990)){
						tab_champ_faux_message.push("Veuillez remplir le champ " + tab_champ[i].get_label() + " sous le format AAAA !");
					}
					break;
				case 'date':
					//si c'est une date, il faut conserver le format JJ/MM/AAAA
				    var date = valeur_champ
				    var jour = date.substring(0,2);
				    var mois = date.substring(3,5);
				    var annee = date.substring(6,10);
				    if(jour != parseFloat(jour) || mois != parseFloat(mois) || annee != parseFloat(annee) || valeur_champ.charAt(2) != "/" || valeur_champ.charAt(5) != "/"){
						tab_champ_faux_message.push("Le champ "+ tab_champ[i].get_label() + " doit \352tre sous la forme JJ/MM/AAAA !");
				    }
					break;
				case 'num':
					if(valeur_champ != parseFloat(valeur_champ)){
						tab_champ_faux_message.push("Le champ "+ tab_champ[i].get_label() + " doit \352tre une valeur num\351rique !");	
					}
					break;
				case 'tel':
					// on vérifie si le tel est donné sous la forme XX.XX.XX.XX.XX
					var tel = valeur_champ
				    var tel_1 = tel.substring(0,2);
				    var tel_2 = tel.substring(3,5);
				    var tel_3 = tel.substring(6,8);
					var tel_4 = tel.substring(9,11);
					var tel_5 = tel.substring(12,14);
					if(tel_1 != parseFloat(tel_1) || tel_2 != parseFloat(tel_2) || tel_3 != parseFloat(tel_3) || tel_4 != parseFloat(tel_4) || tel_5 != parseFloat(tel_5)){
						if(valeur_champ.charAt(2) != "." || valeur_champ.charAt(5) != "." || valeur_champ.charAt(8) != "." || valeur_champ.charAt(11) != "."){
							tab_champ_faux_message.push("Le champ "+ tab_champ[i].get_label() + " doit \352tre sous la forme 00.00.00.00.00 !");
						}
					}
					break;
				case 'chkb':
					// on vérifie si la case est cochée
					cpt_chkb++					
					if(document.getElementById(tab_champ[i].get_id()).checked){
						cpt_chkb_checked
					}
					break;
				case 'radio':	
					//on vérifie si un des radios boutons est choisi.
					if(document.getElementById(tab_champ[i].get_id()).value == ""){
						cpt_rb_checked++;
					}
					break;	
			}
			//affichage des messages d'erreurs liés aux boutons.
			if(cpt_chkb > 0 && cpt_chkb_checked == 0){
				tab_champ_faux_message.push("Vous devez au moins cocher un des choix propos\351s.");
			}
			if(cpt_rb > 0 && cpt_rb_checked == 0){
				tab_champ_faux_message.push("Vous devez au moins cocher un des choix propos\351s.");
			}
			i++;
		}
		if(tab_champ_faux_message.length != 0){
			var message = "";
			for(i = 0; i < tab_champ_faux_message.length; i++){
				message += tab_champ_faux_message[i] + "\n";
			}
			alert(message);
			return false;
		}else{
			return true	;
		}
		
	}
	//Constructeur du tableau de champs
	tab_champ = new Array();

}
