$(function() {
		// on cache les blocs
		// si conjoint pas selectionne
		if (!$("#conjointOui").attr("checked")) {
			$("#blocConjoint").css("display", "none");
		}
		// si enfants pas selectionnes
		if (!$("#enfantsOui").attr("checked")) {
			$("#blocEnfants").css("display", "none");
		}
		// si conjoint ou enfant, on cache le produit GO
		if ($("#conjointOui").attr("checked") || $("#enfantsOui").attr("checked")) {
			afficherGarantieObseque(false);
		}
		// on recupere le nb d'enfants selectionnés
		var nbEnfantsSelect = $("#nombreEnfants").val();
		var nbBlocsEnfants = $(".blocEnfant").length;
		// on cache les blocs enfants supérieurs aux nombres selectionnés
		index = 0;
		for (index = nbBlocsEnfants - 1; index >= nbEnfantsSelect; index--) {
			$("#blocEnfant" + index).css("display", "none");
		}
});

	function afficherBloc(idBloc, afficher) {
		if (afficher) {
			$("#"+idBloc).slideDown("slow");
		} else {
			$("#"+idBloc).slideUp("slow");
		}
	}

	function afficherBlocsEnfants() {
		// on recupere le nb d'enfants selectionnés
		var nbEnfantsSelect = $("#nombreEnfants").val();
		// on recupere le nb de blocs visibles
		var nbBlocsVisible = $(".blocEnfant:visible").length;
		// si nb de visibles supérieur au nb voulu, on cache ceux en trop
		if (nbBlocsVisible > nbEnfantsSelect) {
			for (index = nbBlocsVisible - 1; index >= nbEnfantsSelect; index--) {
				$("#blocEnfant" + index).slideUp("slow");
			}
		}
		// sinon on affiche les autres
		else {
			for (index = nbBlocsVisible; index < nbEnfantsSelect; index++) {
				$("#blocEnfant" + index).slideDown("slow");
			}
		}
	}

	function afficherGarantieObseque(afficher) {
		if (afficher) {
			$("#bloc_PRODUIT_GARANTIE_OBSEQUES").slideDown("slow");
		} else {
			$("#bloc_PRODUIT_GARANTIE_OBSEQUES").slideUp("slow");
			$(".checkbox_PRODUIT_GARANTIE_OBSEQUES").removeAttr("checked");
		}
	}
	
	function validerDonnees(source) {
		var nbErreurs = validerProspect(source);
		// si conjoint selectionne
		if ($("#conjointOui").attr("checked") && $("#selectionneConjoint").attr("checked") && $("#nomConjoint").is(":visible")) {
			nbErreurs += validerConjoint(source);
		}
		// si enfants selectionnes
		if ($("#enfantsOui").attr("checked")) {
			nbErreurs += validerEnfants(source);
		}
		if (nbErreurs > 0) {
			return false;
		} else {
			return true;
		}
	}
	
	function validerProspect(source) {
		nbErreurs = 0;
		// validation de la civilite
		var champ = $("select[name='prospect.civilite']");
		if (jQuery.trim(champ.val()) != '') {
			afficherValidation(source, champ, true);
		} else {
			nbErreurs++;
			afficherValidation(source, champ, false);
		}
		// validation du nom
		var champ = $("input[name='prospect.nom']");
		var valeur = jQuery.trim(champ.val());
		if (valeur != '' && valeur.length <= 20) {
			afficherValidation(source, champ, true);
		} else {
			nbErreurs++;
			afficherValidation(source, champ, false);
		}
		// validation du prenom
		var champ = $("input[name='prospect.prenom']");
		var valeur = jQuery.trim(champ.val());
		if (valeur != '' && valeur.length <= 18) {
			afficherValidation(source, champ, true);
		} else {
			nbErreurs++;
			afficherValidation(source, champ, false);
		}
		// validation de l'email
		var champ = $("input[name='prospect.email']");
		var valeur = jQuery.trim(champ.val());
		if (valeur != '' && valeur.length <= 38 && isEmail(valeur)) {
			afficherValidation(source, champ, true);
		} else {
			nbErreurs++;
			afficherValidation(source, champ, false);
		}
		// validation du telephone
		var champ = $("input[name='prospect.telephone']");
		var valeur = jQuery.trim(champ.val());
		if (valeur != '' && valeur.length == 10 && /[0-9]{10}/.test(valeur)) {
			afficherValidation(source, champ, true);
		} else {
			nbErreurs++;
			afficherValidation(source, champ, false);
		}
		// validation du code postal
		var champ = $("input[name='prospect.adresse.codePostal']");
		var valeur = jQuery.trim(champ.val());
		if (valeur != '' && valeur.length == 5 && /[0-9]{5}/.test(valeur)) {
			afficherValidation(source, champ, true);
		} else {
			nbErreurs++;
			afficherValidation(source, champ, false);
		}
		// validation de la date de naissance
		var champ = $("input[name='prospect.dateDeNaissance']");
		var valeur = jQuery.trim(champ.val());
		if (valeur != '' && valeur.length == 10 && isDate(valeur)) {
			afficherValidation(source, champ, true);
		} else {
			nbErreurs++;
			afficherValidation(source, champ, false);
		}
		return nbErreurs;
	}
	
	function validerConjoint(source) {
		nbErreurs = 0;
		// validation de la civilite
		var champ = $("select[name='prospect.conjoint.civilite']");
		if (jQuery.trim(champ.val()) != '') {
			afficherValidation(source, champ, true);
		} else {
			nbErreurs++;
			afficherValidation(source, champ, false);
		}
		// validation du nom
		var champ = $("input[name='prospect.conjoint.nom']");
		var valeur = jQuery.trim(champ.val());
		if (valeur != '' && valeur.length <= 20) {
			afficherValidation(source, champ, true);
		} else {
			nbErreurs++;
			afficherValidation(source, champ, false);
		}
		// validation du prenom
		var champ = $("input[name='prospect.conjoint.prenom']");
		var valeur = jQuery.trim(champ.val());
		if (valeur != '' && valeur.length <= 18) {
			afficherValidation(source, champ, true);
		} else {
			nbErreurs++;
			afficherValidation(source, champ, false);
		}
		// validation de la date de naissance
		var champ = $("input[name='prospect.conjoint.dateDeNaissance']");
		var valeur = jQuery.trim(champ.val());
		if (valeur != '' && valeur.length == 10 && isDate(valeur)) {
			afficherValidation(source, champ, true);
		} else {
			nbErreurs++;
			afficherValidation(source, champ, false);
		}
		return nbErreurs;
	}
	
	function validerEnfants(source) {
		nbErreurs = 0;
		// on recupere le nb d'enfants selectionnés
		var nbEnfantsSelect = $("#nombreEnfants").val();
		// on traite les enfants
		for (i = 0; i < nbEnfantsSelect; i++) {
			// on verifie que si l'enfant est selectionné
			if ($("#selectionneEnfant" + i).attr("checked") && $("#nomEnfant" + i).is(":visible")) {
				// validation du nom
				var champ = $("input#nomEnfant" + i);
				var valeur = jQuery.trim(champ.val());
				if (valeur != '' && valeur.length <= 20) {
					afficherValidation(source, champ, true);
				} else {
					nbErreurs++;
					afficherValidation(source, champ, false);
				}
				// validation du prenom
				var champ = $("input#prenomEnfant" + i);
				var valeur = jQuery.trim(champ.val());
				if (valeur != '' && valeur.length <= 18) {
					afficherValidation(source, champ, true);
				} else {
					nbErreurs++;
					afficherValidation(source, champ, false);
				}
				// validation de la date de naissance
				var champ = $("input#dateNaissanceEnfant" + i);
				var valeur = jQuery.trim(champ.val());
				if (valeur != '' && valeur.length == 10 && isDate(valeur)) {
					afficherValidation(source, champ, true);
				} else {
					nbErreurs++;
					afficherValidation(source, champ, false);
				}
			}
		}
		return nbErreurs;
	}
	
	function afficherValidation(source, champ, validation) {
		// on recupere l'image dans la cellule d'a coté
		var img = champ.parent().next().children("img.validation");
		//alert(img.src);
		// on change la source et le alt suivant la validation
		if (validation) {
			img.attr("src", "images/validation.gif");
			img.attr("alt", "valide");
		} else {
			img.attr("src", "images/erreur.gif");
			img.attr("alt", "erreur");
		}
		// on affiche l'image si le champ correspond à la source ou si la source est nulle
		if (source == null || source.id == champ.attr("id")) {
			img.css("visibility", "visible");
		}
	}
	
	function isDate(chaineDate) {
		// Je regarde tout d'abord si la chaîne n'est pas vide, sinon pas la peine d'aller plus loin
		if (chaineDate == "") return false;
	
		// J'utilise split pour créer un tableau dans lequel je récupère les jour mois année
		// J'attends bien sûr une date formatée en JJ/MM/AAAA
		var ladate = (chaineDate).split("/");
	
		// Si je n'ai pas récupéré trois éléments ou bien s'il ne s'agit pas d'entiers, pas la peine non plus d'aller plus loin
		if ((ladate.length != 3) || isNaN(parseInt(ladate[0])) || isNaN(parseInt(ladate[1])) || isNaN(parseInt(ladate[2]))) return false;
	
		// Sinon, c'est maintenant que je crée la date correspondante. Attention, les mois sont étalonnés de 0 à 11
		var unedate = new Date(eval(ladate[2]),eval(ladate[1])-1,eval(ladate[0]));
	
		// Bug de l'an 2000 oblige, lorsque je récupère l'année, je n'ai pas toujours 4 chiffres selon les navigateurs, je rectifie donc ici le tir.
		var annee = unedate.getYear()
		if ((Math.abs(annee)+"").length < 4) annee = annee + 1900;
	
		// Il ne reste plus qu'à vérifier si le jour, le mois et l'année obtenus sont les mêmes que ceux saisis par l'utilisateur.
		return ((unedate.getDate() == eval(ladate[0])) && (unedate.getMonth() == eval(ladate[1])-1) && (annee == eval(ladate[2])));
	}
	
	function isEmail(email) {
		var expression = new RegExp("[0-9a-zA-Z_\-]{2}[0-9a-zA-Z_\-]*@[0-9a-zA-Z_\-]{2}[0-9a-zA-Z_\-]*[\.][0-9a-zA-Z_\-]{2}[0-9a-zA-Z_\-]*");
		return expression.test(email);
	}
