/*

	Librairie des controles de surface

*/


var Surface = {

	warningMessage: function( code ) {
		errorPopInMessage(code);
	},
	
	initDevisStep1 : function() {
		$("achat_annee").observe("change", Surface.boughtInTheFutur.bindAsEventListener($("achat_annee"), 'achat'));
		$("achat_mois").observe("change", Surface.boughtInTheFutur.bindAsEventListener($("achat_mois"), 'achat'));
	},
	
	// cette fonction permet d'activer les différents selects de l'étape 1.
	cleanSelectStep1 : function() {
	},
	
	isValidValueStep1 : function( fieldValue ){
		if (fieldValue == "-1") return false;
		if ('undefined' != tErrorWarn) {
			var interdit_exp = new RegExp("^E","gi");
	    var warning_exp = new RegExp("^W","gi");
			for (index = 0; index < tErrorWarn.length; ++index ) {
				if (tErrorWarn[index][0] == fieldValue) {
					if (interdit_exp.test(tErrorWarn[index][1]))
	    			Surface.errorMessageStep1(tErrorWarn[index][1]);
			    if (warning_exp.test(tErrorWarn[index][1]))
			    	Surface.warningMessage(tErrorWarn[index][1]);
					return false;
				}
			}		
		}
		return true;
	},
	
	resetDevisStep1: function() {
		//reset total du formulaire 1 par jQuery
		$j("#left form fieldset:eq(0) select").each(function(i){
			if( i == 0 ){ $j(this).attr("selectedIndex",0); } // reset selects
			if( i != 0 ){ $j(this).attr("selectedIndex",0).attr("disabled","disabled").css({ background: "#e8e8e8" }); } // reset selects
		});
		try {
			if($j(".item1").is(":hidden") ){
				$j(".item3").animate({ height: "toggle" }, 1000, function(){
					$j(".item1").animate({ height: "toggle" }, 1000, function(){
						$j(".item2").animate({ height: "toggle" }, 1000);
					});
				});
			} 

		}catch (e) {}
	},

	errorMessageStep1: function( code ) {
		Surface.warningMessage(code);
		Surface.resetDevisStep1();
	},
	
	initDevisStep2 : function() {
		$("nb_enfants").observe("blur", Surface.checkNbEnfants.bindAsEventListener($("nb_enfants")));
		$("naissance_mois").observe("change", Surface.checkDatesForProfil.bindAsEventListener($("naissance_mois"), ''));
		$("naissance_annee").observe("change", Surface.checkDatesForProfil.bindAsEventListener($("naissance_annee"), ''));
		$("date_permis_mois").observe("change", Surface.checkDatesForProfil.bindAsEventListener($("date_permis_mois"), ''));
		$("date_permis_annee").observe("change", Surface.checkDatesForProfil.bindAsEventListener($("date_permis_annee"), ''));
		$("conjoint_naissance_mois").observe("change", Surface.checkDatesForProfil.bindAsEventListener($("conjoint_naissance_mois"), 'conjoint_'));
		$("conjoint_naissance_annee").observe("change", Surface.checkDatesForProfil.bindAsEventListener($("conjoint_naissance_annee"), 'conjoint_'));
		$("conjoint_date_permis_mois").observe("change", Surface.checkDatesForProfil.bindAsEventListener($("conjoint_date_permis_mois"), 'conjoint_'));
		$("conjoint_date_permis_annee").observe("change", Surface.checkDatesForProfil.bindAsEventListener($("conjoint_date_permis_annee"), 'conjoint_'));
		$("profession").observe("change", Surface.checkProfession.bindAsEventListener($("profession")));
		$("conjoint_profession").observe("change", Surface.checkProfession.bindAsEventListener($("conjoint_profession"), 'conjoint_'));		
		$("vol1").observe("click", Surface.clearBonus.bindAsEventListener($("vol1")));
		$("vol2").observe("click", Surface.clearBonus.bindAsEventListener($("vol2")));
		$("nb_vols").observe("blur", Surface.checkNbMalus.bindAsEventListener($("nb_vols"), 'nb_vols', 2, 'E_USER_SINISTRE_MALUS'));
		$("conjoint_vol1").observe("click", Surface.clearBonus.bindAsEventListener($("conjoint_vol1")));
		$("conjoint_vol2").observe("click", Surface.clearBonus.bindAsEventListener($("conjoint_vol2")));
		$("conjoint_nb_vols").observe("blur", Surface.checkNbMalus.bindAsEventListener($("conjoint_nb_vols"), 'conjoint_nb_vols', 2, 'E_SPOUSE_SINISTRE_MALUS'));
		$("bris_glace1").observe("click", Surface.clearBonus.bindAsEventListener($("bris_glace1")));
		$("bris_glace2").observe("click", Surface.clearBonus.bindAsEventListener($("bris_glace2")));
		$("nb_bris").observe("blur", Surface.checkNbMalus.bindAsEventListener($("nb_bris"), 'nb_bris', 4, 'E_USER_SINISTRE_MALUS'));
		$("conjoint_bris_glace1").observe("click", Surface.clearBonus.bindAsEventListener($("conjoint_bris_glace1")));
		$("conjoint_bris_glace2").observe("click", Surface.clearBonus.bindAsEventListener($("conjoint_bris_glace2")));
		$("conjoint_nb_bris").observe("blur", Surface.checkNbMalus.bindAsEventListener($("conjoint_nb_bris"), 'conjoint_nb_bris', 4, 'E_SPOUSE_SINISTRE_MALUS'));
		$("accident1").observe("click", Surface.clearBonus.bindAsEventListener($("accident1")));
		$("accident2").observe("click", Surface.clearBonus.bindAsEventListener($("accident2")));
		$("nb_accidents").observe("blur", Surface.checkNbMalus.bindAsEventListener($("nb_accidents"), 'nb_accidents', 3, 'E_USER_SINISTRE_MALUS'));
		$("conjoint_accident1").observe("click", Surface.clearBonus.bindAsEventListener($("conjoint_accident1")));
		$("conjoint_accident2").observe("click", Surface.clearBonus.bindAsEventListener($("conjoint_accident2")));
		$("conjoint_nb_accidents").observe("blur", Surface.checkNbMalus.bindAsEventListener($("conjoint_nb_accidents"), 'conjoint_nb_accidents', 3, 'E_SPOUSE_SINISTRE_MALUS'));
		$("resiliation1").observe("click", Surface.hasBeenResiliate.bindAsEventListener($("resiliation1")));
		$("conjoint_resiliation1").observe("click", Surface.hasBeenResiliate.bindAsEventListener($("conjoint_resiliation1")));
		$("conjoint_resiliation1_2").observe("click", Surface.hasBeenResiliate.bindAsEventListener($("conjoint_resiliation1_2")));
		$("profil_resiliation1").observe("click", Surface.hasBeenResiliate.bindAsEventListener($("profil_resiliation1")));
		$("suspension1").observe("click", Surface.hasBeenSuspended.bindAsEventListener($("suspension1")));
		$("conjoint_suspension1").observe("click", Surface.hasBeenSuspended.bindAsEventListener($("conjoint_suspension1")));
		$("conjoint_suspension1_2").observe("click", Surface.hasBeenSuspended.bindAsEventListener($("conjoint_suspension1_2")));
		$("profil_suspension1").observe("click", Surface.hasBeenSuspended.bindAsEventListener($("profil_suspension1")));
		$("assureur").observe("change", Surface.checkAssureur.bindAsEventListener($("assureur")));
		$("anciennete").observe("change", Surface.checkAnciennete.bindAsEventListener($("anciennete")));
	},

	isValidValueStep2 : function( fieldValue ){
		if ('undefined' != tErrorWarn) {
			var interdit_exp = new RegExp("^E","gi");
	    var warning_exp = new RegExp("^W","gi");
			for (index = 0; index < tErrorWarn.length; ++index ) {
				if (tErrorWarn[index][0] == fieldValue) {
					if (interdit_exp.test(tErrorWarn[index][1]))
	    			Surface.errorMessageStep2(tErrorWarn[index][1]);
			    if (warning_exp.test(tErrorWarn[index][1]))
			    	Surface.warningMessage(tErrorWarn[index][1]);
					return false;
				}
			}		
		}
		return true;
	},

	resetDevisStep2 : function() {
		//reset total du formulaire 2 par jQuery
		try {
			elt = $j("input[name='conducteur']:eq(0)");
			amaguiz_form_options.applyEvent(elt, 'click');
		} catch (e) {}
	},
	
	errorMessageStep2: function( code ) {
		Surface.warningMessage(code);
		Surface.resetDevisStep2();
	},
	
	initDevisStep3 : function() {
	
	},
	
	resetDevisStep3 : function() {
	
	},
	
	errorMessageStep3: function( code ) {
		Surface.warningMessage(code);
		Surface.resetDevisStep3();
	},
	
	/* souscription étape 2 : infos complémentaires */
	
	initSouscriptionStep2: function() {
		if (null != $("bdatemonth"))
			$("bdatemonth").observe("change", Surface.checkDatesInfoCompl.bindAsEventListener($("bdatemonth")));
		if (null != $("bdateyear"))
			$("bdateyear").observe("change", Surface.checkDatesInfoCompl.bindAsEventListener($("bdateyear")));
		if (null != $("licensemonth"))
			$("licensemonth").observe("change", Surface.checkDatesInfoCompl.bindAsEventListener($("licensemonth")));
		if (null != $("licenseyear"))
			$("licenseyear").observe("change", Surface.checkDatesInfoCompl.bindAsEventListener($("licenseyear")));
		if (null != $("date_contrat"))
			$("date_contrat").observe("change", Surface.contratAntidate.bindAsEventListener($("date_contrat")))
	},
	
	/* Controles de l'étape 1 du devis  */
	
	boughtInTheFutur: function () {
		var data = $A(arguments);
		data.shift();
		if (data.length > 0 && data[0].length > 0) {
			if (Surface.isInTheFutur(data[0])) {
				Surface.warningMessage("W_BOUGHT_IN_FUTUR");
				$(data[0] + "_mois").selectedIndex = 0;
				$(data[0] + "_annee").selectedIndex = 0;
			} else Surface.boughtBeforeOut();
		}
	},
	
	
	boughtBeforeOut: function() {
		achat_annee = parseInt($("achat_annee").options[$("achat_annee").selectedIndex].value, 10);
		mec = parseInt($("annee_circulation").options[$("annee_circulation").selectedIndex].value, 10);
	
		if ( ( -1 < achat_annee) && ( -1 < mec) &&  (achat_annee < mec)) {
				Surface.warningMessage("W_BOUGHT_INCORRECT_DATE");
				$("achat_mois").selectedIndex = 0;
				$("achat_annee").selectedIndex = 0;
			}
	},
	
	changeVersion : function (index) {
		try {
			$j('#recapVersion').html($j("#designation_version"+index).html());
		} catch (e) {
			//alert(e);
		}
	},
	
	cheapCar : function(index) {
		Surface.changeVersion(index);
		$('highValueWarn').addClassName('hide2');
	},
	
	expensiveCar : function(index) {
		Surface.changeVersion(index);
		try {
			$('highValueWarn').removeClassName('hide2');
			$('highValueWarn').removeClassName('hide');
		} catch(e) {
			//alert(e);
		}
	},
	
	tooExpensiveCar : function(index) {
		Surface.changeVersion(index);
		Surface.warningMessage("E_TOO_EXPENSIVE_CAR");
		$('version'+index).checked = false;
	},
	
	// le titulaire de la carte grise ne peut etre 'autre'
	errorTitulaire : function(){
		Surface.warningMessage('E_TITULAIRE_AUTRES');
		$('titulaire5').checked=false;
	},
	
	/* Controles de l'étape 2 du devis  */
	
	checkNbEnfants : function() {
	  if (isNaN($('nb_enfants').value)) {
			Surface.warningMessage('W_PRECISE_NB_KIDS');
			$('nb_enfants').focus;
			return;
		}
	
		if (!isNaN(parseInt($('nb_enfants').value, 10)) && 10 < parseInt($('nb_enfants').value, 10)) {
			Surface.warningMessage('W_TOO_MUCH_KIDS');
			$('nb_enfants').focus;
		}
	},
	
	bornInTheFuture : function() {
		if (null != $('nb_enfants') && !isNaN(parseInt($('nb_enfants').value, 10))) {
			var nb_enfants = parseInt($('nb_enfants').value, 10);
			for (index = 1; index <= nb_enfants; index++) {
				if (Surface.isInTheFutur("enfant" + index)) {
					Surface.warningMessage("W_CHILD_BORN_FUTUR");
					$("enfant" + index+ "_mois").selectedIndex = 0;
					$("enfant" + index+ "_annee").selectedIndex = 0;
					break;
				}
			}
		}
	},
	
	checkDatesForProfil : function() {
		var data = $A(arguments);
		data.shift();
		if (data.length > 0) {
			var prefix = data[0];
			if (Surface.checkAge(prefix))
				Surface.checkLicenceAge(prefix);
		}
	},
	
	// controle sur les permis de conduire : +18 ans lors du passage de permis + permis vieux de 30 mois
	checkLicenceAge : function(prefix) {
		var code1 = "E_SPOUSE_YOUNG_FOR_LICENCE";
		var code2 = "E_LICENCE_SPOUSE_YOUNG";
		if (prefix.length == 0) {
			code1 = "E_USER_YOUNG_FOR_LICENCE";
			code2 = "E_LICENCE_USER_YOUNG";
		}
		var date_permis_mois = prefix + 'date_permis_mois';
		var date_permis_annee = prefix + 'date_permis_annee';
		var naissance_mois = prefix + 'naissance_mois';
		var naissance_annee = prefix + 'naissance_annee';
		
		if ($(date_permis_mois).selectedIndex > 0 && $(date_permis_annee).selectedIndex > 0
			&& $(naissance_mois).selectedIndex > 0 && $(naissance_annee).selectedIndex > 0) {
				var today = Surface.today();
				var licenceDate = new Date(parseInt($(date_permis_annee).options[$(date_permis_annee).selectedIndex].value, 10),
					parseInt($(date_permis_mois).options[$(date_permis_mois).selectedIndex].value, 10) -1, 
					1);
				var naissance = new Date(parseInt($(naissance_annee).options[$(naissance_annee).selectedIndex].value, 10),
					parseInt($(naissance_mois).options[$(naissance_mois).selectedIndex].value, 10) -1, 
					1);
					
				naissance.setFullYear(naissance.getFullYear() + 18);
				if (naissance > licenceDate) {
					$(date_permis_mois).selectedIndex=0;
					$(date_permis_annee).selectedIndex=0;
					Surface.warningMessage(code1);
				}
				// il faut que le permis ait plus de 30 mois
				licenceDate.setMonth(licenceDate.getMonth() + 30);	
				if (today < licenceDate) {
					$(date_permis_mois).selectedIndex=0;
					$(date_permis_annee).selectedIndex=0;
					Surface.warningMessage(code2);
				}
		}	
	},
	
	// conducteur +23 ans
	checkAge : function(prefix) {
		var code = "E_SPOUSE_YOUNG";
		if (prefix.length == 0)
			code = "E_USER_YOUNG";
		
		var naissance_mois = prefix + 'naissance_mois';
		var naissance_annee = prefix + 'naissance_annee';
		if ($(naissance_mois).selectedIndex > 0 && $(naissance_annee).selectedIndex > 0) {
				var today = Surface.today();
				var naissance = new Date(parseInt($(naissance_annee).options[$(naissance_annee).selectedIndex].value, 10),
					parseInt($(naissance_mois).options[$(naissance_mois).selectedIndex].value, 10) -1, 
					1);
				// il faut que le gars ait plus de 23 ans 
				naissance.setFullYear(naissance.getFullYear() + 23);
				if (today < naissance) {
					$(naissance_mois).selectedIndex=0;
					$(naissance_annee).selectedIndex=0;
					Surface.warningMessage(code);
					return false;
				}
		}
		return true;
	},
	
	//lance le message d'erreur sur les responsabilités et réinitialise les accidents.
	errorResponsability : function( suffix, code ) {
		Surface.warningMessage(code);
		$(suffix + "nb_accidents").value='';
		// lancement de l'évenement de base.js associé à nb_accidents
		try {
			elt = $j("input[name='" + suffix + "nb_accidents']");
			amaguiz_form_options.applyEvent(elt, 'change');
		} catch (e) {}
		// réinit des dates d'accident
		$(suffix + "date_accident1_mois").selectedIndex = 0;
		$(suffix + "date_accident1_annee").selectedIndex = 0;
	},
	
	clearBonus: function() {
		$('conjoint_bonus').value='';
		$('bonus').value='';
	},
	
	// responsabilité accidents : < 1 dans les 12 derniers mois et <2 dans les 5 ans
	checkResponsability : function(suffix) {
		Surface.clearBonus();
		var code = "E_SPOUSE_SINISTRE_MALUS";
		if (null == suffix) suffix = '';
		if (suffix.length == 0) code = "E_USER_SINISTRE_MALUS";
		var nb_accidents = suffix + 'nb_accidents';
		var date_accident = suffix + 'date_accident';
		if (isNaN(parseInt($(nb_accidents).value, 10))) return;
		var nb_responsability = 0;
		var today = Surface.today();
		for (index = 1; index <= parseInt($(nb_accidents).value, 10); index++) {
			if (parseInt($(date_accident + index + "_annee").options[$(date_accident + index + "_annee").selectedIndex].value, 10) == 0) continue;
			if (parseInt($(date_accident + index + "_mois").options[$(date_accident + index + "_mois").selectedIndex].value, 10) == 0) continue;
			var date_accident_value = new Date(parseInt($(date_accident + index + "_annee").options[$(date_accident + index + "_annee").selectedIndex].value, 10),
					parseInt($(date_accident + index + "_mois").options[$(date_accident + index + "_mois").selectedIndex].value, 10) -1, 
					1);	
			if (today < date_accident_value) { // futur 		
				Surface.warningMessage("W_FUTUR_DATE");
				$(date_accident + index + "_annee").selectedIndex=0;
				$(date_accident + index + "_mois").selectedIndex=0;
				break;
			}
			if ($(suffix + 'responsable'+index+'_oui').checked) {
				// test sur la dernière année
				date_accident_value.setFullYear(date_accident_value.getFullYear() + 1);
				if (today < date_accident_value) {
					// accident responsable dans la dernière année : pas élligible
					Surface.errorResponsability(suffix, code);
					break;
				}
				// test sur les 5 dernières années
				date_accident_value.setFullYear(date_accident_value.getFullYear() + 4);
				if (today < date_accident_value) nb_responsability++; // + 1 accident responsable sur les 5 dernières années
			}
		}
		//alert(nb_responsability);
		if (2 <= nb_responsability) {
				Surface.errorResponsability(suffix, code);
		}
	},

	// le conducteur ne peut etre 'autre'
	errorConducteur : function(){
		Surface.errorMessageStep2('E_CONDUCTEUR_AUTRE');
	},

	// un check tout bête qui vérifie que l'utilisateur (ou le conjoint) n'a pas + de 4 malus en tout
	checkNbMalusGlobal : function() {
		// check scp
		var nbMalusGlobal = 0
		if (!isNaN(parseInt($("nb_vols").value, 10)))
			nbMalusGlobal += parseInt($("nb_vols").value, 10)
		if (!isNaN(parseInt($("nb_bris").value, 10)))
			nbMalusGlobal += parseInt($("nb_bris").value, 10)
		if (!isNaN(parseInt($("nb_accidents").value, 10)))
			nbMalusGlobal += parseInt($("nb_accidents").value, 10)
		if (4 <= nbMalusGlobal) {
			$("nb_accidents").value = "";
			$("nb_bris").value = "";
			$("nb_vols").value = "";
			Surface.warningMessage("E_USER_SINISTRE_MALUS");
		}
		// check cj
		nbMalusGlobal = 0
		if (!isNaN(parseInt($("conjoint_nb_vols").value, 10)))
			nbMalusGlobal += parseInt($("conjoint_nb_vols").value, 10)
		if (!isNaN(parseInt($("conjoint_nb_bris").value, 10)))
			nbMalusGlobal += parseInt($("conjoint_nb_bris").value, 10)
		if (!isNaN(parseInt($("conjoint_nb_accidents").value, 10)))
			nbMalusGlobal += parseInt($("conjoint_nb_accidents").value, 10)
		if (4 <= nbMalusGlobal) {
			$("conjoint_nb_accidents").value = "";
			$("conjoint_nb_bris").value = "";
			$("conjoint_nb_vols").value = "";
			Surface.warningMessage("E_SPOUSE_SINISTRE_MALUS");
		}
	},

	// check des malus : >= data[0] : impossible
	checkNbMalus : function() {
		// 0 : champs à checker
		// 1 : valeur à checker
		// 2 : message d'erreur
		Surface.clearBonus();
		var data = $A(arguments);
		data.shift();
		if (!isNaN(parseInt($(data[0]).value, 10))) {
			if ( parseInt($(data[0]).value, 10) >= $(data[1])) {
				Surface.warningMessage(data[2]);
				$(data[0]).value = '';
			}
		}
		Surface.checkNbMalusGlobal();
	},
	
	// a été résilié par son assurance
	hasBeenResiliate: function() {
		Surface.warningMessage('E_RESILIATE');
		$("resiliation1").checked = false;
		$("conjoint_resiliation1").checked = false;
		$("conjoint_resiliation1_2").checked = false;
		$("profil_resiliation1").checked = false;
	},

	// a eu son permis suspendu
	hasBeenSuspended: function() {
		Surface.warningMessage('E_RESILIATE');
		$("suspension1").checked = false;
		$("conjoint_suspension1").checked = false;
		$("conjoint_suspension1_2").checked = false;
		$("profil_suspension1").checked = false;
	},

	// affiche un message de warning ou erreur suivant les cas
	checkAssureur : function() {
		Surface.isValidValueStep2($F('assureur'));
	},
	
	// il faut que l'ancienneté soit <= à l'age du permis 
	checkAnciennete: function() {
		if (null != $('anciennete') && $('anciennete').selectedIndex > 0) {
			var nbAnc = $F('anciennete');
			var tempDate = Surface.today();
			var date_permis_annee = '';
			var date_permis_mois = '';
			if ($('date_permis_annee').selectedIndex > 0 && $('date_permis_mois').selectedIndex > 0) {
				date_permis_annee = 'date_permis_annee';
				date_permis_mois = 'date_permis_mois';
			}
			if ($('conjoint_date_permis_annee').selectedIndex > 0 && $('conjoint_date_permis_mois').selectedIndex > 0) {
			  date_permis_annee = 'conjoint_date_permis_annee';
			  date_permis_mois = 'conjoint_date_permis_mois';
			}
			if ('' == date_permis_annee && '' == date_permis_mois) return false;
			var licenceDate = new Date(parseInt($(date_permis_annee).options[$(date_permis_annee).selectedIndex].value, 10),
					parseInt($(date_permis_mois).options[$(date_permis_mois).selectedIndex].value, 10) -1, 
					1);
			tempDate.setFullYear(tempDate.getFullYear() - nbAnc);
			if (licenceDate > tempDate) {
				Surface.warningMessage("W_ASSUREUR_ANCIENNETE");
				$('anciennete').selectedIndex = 0;
			}			
		}
	},
	
	cleanType_voiture : function() {
		$('type_voiture1').checked= false;
		$('type_voiture2').checked= false;
		$('type_voiture3').checked= false;
		return false;
	},
	
	cleanAchat_voiture : function() {
		$('achat_mois').selectedIndex= 0;
		$('achat_annee').selectedIndex= 0;
		return false;
	},
	
	checkProfession : function() {
		var suffix = '';
		var data = $A(arguments);
		data.shift();
		if (data.length > 0 && data[0].length > 0) 
			suffix = data[0];
		Surface.isValidValueStep2($F(suffix + 'profession'));
	},

	/* Controles de l'étape 3 du devis  */


	/* Contrôles de l'étape 2 de souscription */
	
	checkDatesInfoCompl : function() {
		if (Surface.checkAgeInfoCompl())
			Surface.checkLicenceAgeInfoCompl();
	},
	
	// controle sur les permis de conduire : +18 ans lors du passage de permis + permis vieux de 30 mois
	checkLicenceAgeInfoCompl : function(prefix) {
		var code1 = "E_SPOUSE_YOUNG_FOR_LICENCE";
		var code2 = "E_LICENCE_SPOUSE_YOUNG";
		var date_permis_mois = 'licensemonth';
		var date_permis_annee = 'licenseyear';
		var naissance_mois = 'bdatemonth';
		var naissance_annee = 'bdateyear';
		
		if ($(date_permis_mois).selectedIndex > 0 && $(date_permis_annee).selectedIndex > 0
			&& $(naissance_mois).selectedIndex > 0 && $(naissance_annee).selectedIndex > 0) {
				var today = Surface.today();
				var licenceDate = new Date(parseInt($(date_permis_annee).options[$(date_permis_annee).selectedIndex].value, 10),
					parseInt($(date_permis_mois).options[$(date_permis_mois).selectedIndex].value, 10) -1, 
					1);
				var naissance = new Date(parseInt($(naissance_annee).options[$(naissance_annee).selectedIndex].value, 10),
					parseInt($(naissance_mois).options[$(naissance_mois).selectedIndex].value, 10) -1, 
					1);
					
				naissance.setFullYear(naissance.getFullYear() + 18);
				if (naissance > licenceDate) {
					$(date_permis_mois).selectedIndex=0;
					$(date_permis_annee).selectedIndex=0;
					Surface.warningMessage(code1);
				}
				// il faut que le permis ait plus de 30 mois
				licenceDate.setMonth(licenceDate.getMonth() + 30);	
				if (today < licenceDate) {
					$(date_permis_mois).selectedIndex=0;
					$(date_permis_annee).selectedIndex=0;
					Surface.warningMessage(code2);
				}
		}	
	},
	
	// conducteur +23 ans
	checkAgeInfoCompl : function(prefix) {
		var code = "E_SPOUSE_YOUNG";
		
		var naissance_mois = 'bdatemonth';
		var naissance_annee = 'bdateyear';
		if ($(naissance_mois).selectedIndex > 0 && $(naissance_annee).selectedIndex > 0) {
				var today = Surface.today();
				var naissance = new Date(parseInt($(naissance_annee).options[$(naissance_annee).selectedIndex].value, 10),
					parseInt($(naissance_mois).options[$(naissance_mois).selectedIndex].value, 10) -1, 
					1);
				// il faut que le gars ait plus de 23 ans 
				naissance.setFullYear(naissance.getFullYear() + 23);
				if (today < naissance) {
					$(naissance_mois).selectedIndex=0;
					$(naissance_annee).selectedIndex=0;
					Surface.warningMessage(code);
					return false;
				}
		}
		return true;
	},
	
	contratAntidate : function() {
		var today = new Date();
    today.setHours(0);
    today.setMinutes(0);
    today.setSeconds(0);
    today.setMilliseconds(0);
		if (null != $("date_contrat") && /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/.test($("date_contrat").value)) {
		 // alert("date de contrat : "+$("date_contrat").value);		  
			var text = $("date_contrat").value;
		  var dateContrat = new Date(parseInt(text.substr(6,4), 10), parseInt(text.substr(3,2), 10) - 1, parseInt(text.substr(0,2), 10));
		  dateContrat.setHours(0);
    	dateContrat.setMinutes(0);
    	dateContrat.setSeconds(0);
    	dateContrat.setMilliseconds(0);
			if (today > dateContrat ) {
				Surface.warningMessage("E_CONTRAT_ANTIDATE");
			}
			today.setFullYear(today.getFullYear() + 1);
			if (today < dateContrat)
				Surface.warningMessage("E_CONTRAT_1_YEAR_TOO_LATE");
		}
	},

	/* Fonctions communes */
	
	// controle qu'une date n'est pas supèrieur à la date d'aujourd'hui. la base du nom des select est passé en argumen (date_permis, enfantx ..
	isInTheFutur : function(fieldBaseName) {
		if (fieldBaseName.length > 0 && null != $(fieldBaseName + "_mois") && null != $(fieldBaseName + "_annee")) {
			if ($(fieldBaseName + "_mois").selectedIndex > 0 && $(fieldBaseName + "_annee").selectedIndex > 0) {
				var date_to_test = new Date(parseInt($(fieldBaseName + "_annee").options[$(fieldBaseName + "_annee").selectedIndex].value, 10),
					parseInt($(fieldBaseName + "_mois").options[$(fieldBaseName + "_mois").selectedIndex].value, 10) - 1, 
					1);
				var today = Surface.today();
				if (today < date_to_test)
					return true;
			}
		}
		return false;
	},
	
	today: function() {
		var today = new Date();
		today.setDate(1);
		today.setHours(0);
		today.setMinutes(0);
		today.setSeconds(0);
		today.setMilliseconds(0);
		return today;
	}
}