/*Ce fichier contient toutes les methodes que j'ai ajoutés pour utiliser avec le plugin validation :*/

$.validator.setDefaults({
    submitHandler:function(){refrech("index.php");}
	
});

/*methode pour verifier qu'un champ select est saisi :*/		
$.validator.addMethod(
	"isSelected",
	function(value, element) {
		// traitement :
		return ( ($("#"+element.name +" option:selected").val())!="default" );
	},
	"Veillez renseigner ce champ !"
);

/*methode pour verifier qu'un champ ne contient que des lettres minuscules ou majuscules en tolérant le "-" entre deux lettres*/
$.validator.addMethod(
	"lettersOnly",
	function(value, element) {
		// traitement :
		var reg=/^(([a-z]|[A-Z])+(\-)?([a-z]|[A-Z])+)*$/;
		var reg2=/^([a-z]|[A-Z])*$/;
		return (reg.test(value) || reg2.test(value));
	},
	"Veuillez ne saisir que des lettres! (Le caractère '-' est toléré entre deux lettres)"
);
	

/*Methode pour verifier la syntaxe d'une adresse email :*/	
$.validator.addMethod(
	"MailAddress",
	function(value, element) {
		// traitement :
		var reg= /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,})+$/;
		return (reg.test(value) ||  value=="");
	},
	"Ceci n'est pas une adresse email valide !(format attendu : 'texte@texte.texte')"
);
	

/*MEthode pour vérifier qu'au moins une des 3 coordonnées du formulaire a été saisie :*/	
$.validator.addMethod(
	"auMoins1Coord",
	function(value, element) {
		// traitement :
		if( ($("#telFixe").val() =="") && ($("#telPortable").val() =="") && ($("#email").val() =="") )return false;
			return true;
	},
	"Veuillez saisir au moins une de ces trois coordonnées.')"
);
			

/*Methode pour verifier la syntaxe d'un telephone FIXE (nb : un numéro de portable sera rejetté)*/			
$.validator.addMethod(
	"PhoneNumber",
	function(value, element) {
		// traitement :
		var reg=/^0([1-5]|[7-9])[0-9]{2}[0-9]{2}[0-9]{2}[0-9]{2}$/;
		return (reg.test(value) || value=="");
	},
	"Ceci n'est pas un numéro de téléphone fixe (format attendu : YY XX XX XX XX avec YY différent de 00 ou 06)"
);

/*Methode pour verifier la syntaxe d'un telephone mobile (et commencant par 06)*/
$.validator.addMethod(
	"MobilePhoneNumber",
	function(value, element) {
		// traitement :
		var reg=/^[0-9]{2}[0-9]{2}[0-9]{2}[0-9]{2}[0-9]{2}$/;
		return (reg.test(value) || value=="");
	},
	"Mauvais format de téléphone portable(attendu 06 XX XX XX XX)"
);
	

/*Methode pour verifier la syntaxe d'une date au format "JJ/MM/AAAA" et verifier sa validité ainsi que son antériorité à la date actuelle*/	
$.validator.addMethod(
	"frenchDateOfBirth",
	function(value, element) {
		var reg= /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/ ;
		if(reg.test(value)==false)return false;
		// on recupere jour mois et année dans un tableau
		var recup = (value).split("/");
		//creation d'une date correspondante , format année, mois, jour
		var unedate;
		try{
			unedate = new Date(recup[2],recup[1] - 1,recup[0]);
		}
		catch(err){
			return false;
		}
		//on verifie que la date créée correspond à celle lue
		if( (unedate.getDate()!= recup[0])
		|| (unedate.getMonth()!=(recup[1]-1))
		|| (unedate.getFullYear()!=recup[2]) ){
			return false;    
		}
					
		//on verifie enfin que la date est passée :
		var today = new Date();
		if( unedate.getFullYear() > today.getFullYear() )return false;
		if( unedate.getFullYear() == today.getFullYear() ){
			if( unedate.getMonth()  > today.getMonth())return false;
			if( unedate.getMonth()  == today.getMonth()){
				if(unedate.getDate() > today.getDate())return false;
			}
		}
		//tout c'est bien passé :
		return true;
	},
	"Veuillez saisir une date <u>(antérieure à aujourd'hui)</u> au format 'JJ/MM/AAAA'."
);
				
			
/*Methode executée au chargement de la page :*/	
$().ready(function(){

	/*Validation du formulaire*/
	$("#monFormulaire").validate({
        //regles de saisie 
        rules:{
			numCarte:{
                required:true,
                digits:true,
				minlength:12,
				maxlength:12
			},
			nationalite:{
				required:true,
				isSelected:true
			},
			nom:{
				required:true,
				maxlength:50, 
				lettersOnly:true
			},
			statutMarital:"isSelected",
			prenom1:{
				required:true,
				maxlength:100, 
				lettersOnly:true
			},
			prenom2:{
				maxlength:100, 
				lettersOnly:true
			},
			prenom3:{
				maxlength:100, 
				lettersOnly:true
			}, 
			dateNaiss:{
				required:true,
				frenchDateOfBirth:true
			},
			lieuNaiss:{
				required:true,
				maxlength:100, 
				lettersOnly:true
			},
			taille:{
				range:[0.30,2.70]
			},
			rue:{
				required:true,
				maxlength:100
			},
			complementRue:{
				maxlength:100
			},
			codePostal:{
				required:true,
				minlength:5,
				maxlength:5,
				digits:true
			},
			ville:{
				required:true,
				isSelected:true
			},
			telFixe:{
				PhoneNumber:true,
				auMoins1Coord:true
			},
			telPortable:{
				MobilePhoneNumber:true,
				auMoins1Coord:true
			},
			email:{
				MailAddress:true,
				auMoins1Coord:true
			}
		},
		messages:{
            numCarte:{
                required:"Vous devez saisir votre numéro de carte d'identité",
				digits:"Saisissez seulement des chiffres !",
                minlength:"Le numéro de carte d'identité doit être composé de 12 caractères.",
				maxlength:"Le numéro de carte d'identité doit être composé de 12 caractères."
			},
			nationalite:"Veuillez renseigner votre nationalité.",
			statutMarital:"Veuillez renseigner ce champ.",
			nom:{
				required:"Veuillez saisir votre nom de famille.",
				maxlength:"Le nom de famille ne doit pas dépasser 50 caractères", 
				lettersOnly:"Entrez seulement des lettres (les '-' sont tolérés entre deux lettres)"
			},
			prenom1:{
				required:"Veuillez saisir au moins votre premier prénom.",
				maxlength:"Le prenom ne doit pas dépasser 100 caractères.", 
				lettersOnly:"Entrez seulement des lettres (les '-' sont tolérés entre deux lettres)"
			},
			prenom2:{
				maxlength:"Ce prenom ne doit pas dépasser 100 caractères.",
				lettersOnly:"Entrez seulement des lettres (les '-' sont tolérés entre deux lettres)"
			},
			prenom3:{
				maxlength:"Ce prenom ne doit pas dépasser 100 caractères.",
				lettersOnly:"Entrez seulement des lettres (les '-' sont tolérés entre deux lettres)"
			}, 
			dateNaiss:{
				required:"Veuillez saisir votre date de naissance.",
				frenchDateOfBirth:"Veuillez saisir une date (<u>antérieure à aujourd'hui</u>) au format 'JJ/MM/AAAA'"
			},
			lieuNaiss:{
				required:"Veuillez saisir votre lieu de naissance.",
				maxlength:"Le lieu de naissance ne doit pas dépasser 100 caractères.",
				lettersOnly:"Entrez seulement des lettres (les '-' sont tolérés entre deux lettres)"
			},
			taille:"Veuillez entrer une valeur entre 0.30 et 2.70",
			rue:{
				required:"Veuillez saisir votre rue",
				maxlength:"Le nom de la rue ne doit pas dépasser 100 caractères."
			},
			complementRue:{
				maxlength:"Le complément de rue ne doit pas dépasser 100 caractères."
			},
			codePostal:{
				required:"Veuillez saisir votre code postal",
				minlength:"Le code postal est composé de 5 chiffres",
				maxlength:"Le code postal est composé de 5 chiffres",
				digits:"Saisissez seulement des chiffres !"
			},
			ville:"Veuillez saisir votre Ville",
			telFixe:{
				PhoneNumber:"Veuillez saisir un numéro de téléphone (format : 'yyxxxxxxxx' avec yy différent de 00 ou 06)",
				auMoins1Coord:"Veuillez saisir au moins une coordonnée."
			},
			telPortable:{
				MobilePhoneNumber:"Veuillez saisir un numéro de téléphone portable valide (format : '06 xx xx xx xx' )",
				auMoins1Coord:"Veuillez saisir au moins une coordonnée."
			},
			email:{
				MailAddress:"Veuillez saisir une adresse mail(format : texte@texte.domaine)",
				auMoins1Coord:"Veuillez saisir au moins une coordonnée."
			}
		} 
	})
			
	/*Lorsqu'on selectionne l'une des trois coordonnées, on teste les 3*/
	$("#coordonnees input").focus(function(){
		$("#coordonnees input").valid();
	});
	
	/*On teste également les 3 sur la déselection de l'une d'entre elles*/
	$("#coordonnees input").blur(function(){
		$("#coordonnees input").valid();
	});

	/*sur le click du bouton effacer :*/
	$("#effacer").click(function(){
		//on retire tous les labels d'erreurs ajoutés par la validation...
		$("label.error").remove();
		$(".error").removeClass("error");
		//on reinitialise les liste déroulantes :
		$("option[selected]").removeAttr("selected");
		$("select option:first-child").attr("selected","selected");
		//pour la ville, on retire toutes les options sauf l'option par défaut "choisissez.." :
		$("#ville option").remove();
		$("#ville").append('<option selected value="default">Choisissez...</option>');
	});
			
	/*On désactive l'ouverture du calendrier sur le click du champ correspondant pour permettre la saisie "a la main"*/
	$('.date-pick').datePicker({clickInput:false});

	/*Effacement du champs DateNaiss lors du click sur celui-ci pour eviter d'avoir à retirer a la main la valeur par défaut*/
	$('#dateNaiss').click(function(){
		$(this).val("");
	});

	/*Validation de la date de naissance dès qu'elle a été modifiée (manuellement ou par le calendrier)*/
	$('#dateNaiss').change(function(){
		$(this).valid();
	});
	
	/*Cherche mise a jour de la liste déroulante "ville" lors de la sortie du champ codePostal :*/
	$('#codePostal').blur(function(){
		var code=$(this).val();
		//suppression de toutes options de la ville :
		$("#ville option").remove();
		//remplissage de la liste avec les villes transmises par le script php
		getVilles(code);
		
	});
				
});
			
