function verifier_mail(emailStr) {
	var toTest = emailStr.toLowerCase().replace(/^\s+/g,'').replace(/\s+$/g,'');
	var regExp = new RegExp(/^[a-z0-9._-]+@[a-z0-9.-]+[.][a-z]{2,4}$/);
	if (regExp.test(toTest)) {
		return true;
	}
	return false;
}

function verifier_champ_non_vide(identifiant ,text, arg1, arg2) {
	var champ = document.getElementById(identifiant);
	if (champ == null) {
		alert("Le champ " +identifiant + " correspondant " + arg1 + " " + text + " est manquant");
		return false;
	}
	if (champ.value == "") {
		alert("Veuillez indiquer " + arg2 + " " + text);
		champ.focus();
		return false;
	}
	return true;
}

function verifier_select_non_vide(identifiant ,text, arg1, arg2) {
	var champ = document.getElementById(identifiant);
	if (champ == null) {
		alert("Le champ " +identifiant + " correspondant " + arg1 + " " + text + " est manquant");
		return false;
	}
	if (champ.options.length == 0 || champ.options[champ.selectedIndex].value == "") {
		alert("Veuillez indiquer " + arg2 + " " + text);
		champ.focus();
		return false;
	}
	return true;
}

function verifier_champ_numerique(identifiant ,text, arg1, arg2, arg3) {
	var champ = document.getElementById(identifiant);
	if (champ == null) {
		alert("Le champ " +identifiant + " correspondant " + arg1 + " " + text + " est manquant");
		return false;
	}
	if (champ.value == "") {
		alert("Veuillez indiquer " + arg2 + " " + text);
		champ.focus();
		return false;
	}
	if (isNaN(champ.value)) {
		alert("La valeur " + arg3 + " " + text + " n'est pas valide.");
		champ.focus();
		return false;
	}
	return true;
}

function test_adresse(suffix) {
	var nom_voie = "nom_voie" + suffix;
	var code_postal = "code_postal" + suffix;
	var ville = "ville" + suffix;
	var tester = verifier_champ_non_vide(nom_voie, 'nom de la voie', 'au', 'le');
	if (tester) {
		tester = verifier_champ_numerique(code_postal, "code postal", "au", "le", "du");
		if (tester) {
			code_postal = document.getElementById("code_postal" + suffix);
			if (code_postal.value.length != 5 || isNaN(code_postal.value)) {
				alert("Le code postal est invalide");
				code_postal.focus();
				tester = false;
			}
		}
	}
	if (tester) {
		if (document.getElementById("ligne_ville" + suffix).style.display == "") {
			tester = verifier_select_non_vide(ville, "ville", "à la", "la");
		} else {
			code_postal = document.getElementById("code_postal" + suffix);
			if (code_postal.value.length == 5 && !isNaN(code_postal.value)) {
				alert("Veuillez indiquer la ville");
				code_postal.focus();
				tester = false;
			}
		}
	}
	return tester;
}

function verifier_rachat_immo() {
	var nombre = parseInt(document.getElementById("nombre_rachat_immo").value);
	for (i=0; i < nombre; i++) {
		identifiant = i+1;
		if(!verifier_champ_numerique("mensualite_credit_immo_" + identifiant, "mensualité du crédit", "à la", "la", "de la"))
			return false;
		if(!verifier_champ_numerique("restant_credit_immo_" + identifiant, "restant dû du crédit", "au", "le", "du"))
			return false;
		if(!verifier_champ_numerique("valeur_bien_" + identifiant, "valeur du bien", "à la", "la", "de la"))
			return false;
	}
	return true;
}

function verifier_rachat_conso() {
	var nombre = parseInt(document.getElementById("nombre_rachat_conso").value);
	for (i=0; i < nombre; i++) {
		identifiant = i+1;
		if (!verifier_select_non_vide("type_credit_conso_" + identifiant, "type du crédit", "au", "le"))
			return false;
		if(!verifier_champ_numerique("mensualite_credit_conso_" + identifiant, "mensualité du crédit à la consomation", "à la", "la", "de la"))
			return false;
		if(!verifier_champ_numerique("restant_credit_conso_" + identifiant, "restant dû du crédit à la consomation", "au", "le", "du"))
			return false;
	}
	return true;
}

function test_rachat() {
	if (document.getElementById("a_rachat_immo_oui").checked) {
		if (!verifier_rachat_immo())
			return false;	
	}
	if (document.getElementById("a_rachat_conso_oui").checked) {
		if (!verifier_rachat_conso())
			return false;	
	}
	if (document.getElementById("tresorerie_oui").checked) {
		if(!verifier_champ_numerique("montant_tresorerie", "montant de la trésorerie souhaitée", "au", "le", "du"))
			return false;
	}
	return true;
}

function verifier_compromis() {
	var compromis_0 = document.getElementById("compromis_0");
	var compromis_1 = document.getElementById("compromis_1");
	var compromis_2 = document.getElementById("compromis_2");
	if (!compromis_0.checked && !compromis_1.checked && !compromis_2.checked) {
		alert("Veuillez indiquer à quel stade en est votre projet");
		compromis_0.focus();
		return false;
	}
	return true; 
}

function test_acquisition() {
	if (!verifier_compromis())
		return false;
	if (!verifier_champ_numerique("code_postal_bien", "Code postal de bien", "au", "le", "du"))
		return false;
	var object = document.getElementById("nature_bien");
	var selectedOption = object.options[object.selectedIndex];
	var montant_total = 0;
	if (selectedOption.value == 1 || selectedOption.value == 2 || selectedOption.value == 6) {
		if (!verifier_champ_numerique("valeur_bien", "estimation du prix d'achat", "à l'", "l'", "de l'"))
			return false;
	}
	if (selectedOption.value == 4 || selectedOption.value == 3) {
		if (!verifier_champ_numerique("prix_terrain", "estimation du prix du terrain", "à l'", "l'", "de l'"))
			return false;	
	}
	if (selectedOption.value == 4 || selectedOption.value == 15) {
		if (!verifier_champ_numerique("prix_construction", "estimation du prix de la construction", "à l'", "l'", "de l'"))
			return false;
	}
	if (selectedOption.value != 15) {
		var notaire = document.getElementById("notaire").value;
		if (!verifier_champ_numerique("notaire", "estimation des fraix de notaire", "à l'", "l'", "de l'"))
			return false;
	}
	if (document.getElementById("question_apport_oui").checked) {
		if (!verifier_champ_numerique("apport", "apport personnel", "à l'", "l'", "de l'"))
				return false;
	}
	return true;
}

function test_consommation() {
	if (!verifier_champ_numerique("montant_crd_conso", "montant du crédit", "au", "le", "du"))
		return false;
	return true;
}

function test_description_bien() {
	var question_rachat = document.getElementById("type_projet_rch");
	var question_acquisition = document.getElementById("type_projet_acq");
	if (question_rachat.checked)
		return test_rachat();
	else if (question_acquisition.checked)
		return test_acquisition();
	else
		return test_consommation();
}

function verifier_date(identifiant) {
	var tester = verifier_select_non_vide(identifiant + "_jour", "jour", "au", "le");
	if (tester)
		tester = verifier_select_non_vide(identifiant + "_mois", "mois", "au", "le");
	if (tester)
		tester = verifier_champ_numerique(identifiant + "_annee", "année", "à l'", "l'", "de l'");
	return tester;
}

function test_donnees_personnel() {
	if (!verifier_champ_non_vide("nom_emprunteur", "nom de l'emprunteur", "au", "le"))
		return false;
	if (!verifier_champ_non_vide("prenom_emprunteur", "prénom de l'emprunteur", "au", "le"))
		return false;
	if (!verifier_date("date_de_naissance_emprunteur"))
		return false;
	if (!verifier_champ_non_vide("departement_de_naissance_emprunteur", "département de naissance", "au", "le", "du"))
		return false;
	if (!verifier_champ_numerique("enfants_emprunteur", "enfants à charge", "aux", "les", "des"))
		return false;
	if (!verifier_select_non_vide("situation_familiale", "situation familiale", "à la", "la", "de la"))
		return false;
	var choix_situation = document.getElementById("situation_familiale");
	var valeur_situation = choix_situation.options[choix_situation.selectedIndex].value;
	var question_accompagne = document.getElementById("plusieur_oui");
	if (valeur_situation == 1 || valeur_situation == 8 || question_accompagne.checked) {
		if (!verifier_champ_non_vide("nom_co_emprunteur", "nom de l'emprunteur", "au", "le"))
			return false;
		if (!verifier_champ_non_vide("prenom_co_emprunteur", "prénom de l'emprunteur", "au", "le"))
			return false;
		if (!verifier_champ_non_vide("prenom_co_emprunteur", "prénom de l'emprunteur", "au", "le"))
			return false;
		if (!verifier_date("date_de_naissance_co_emprunteur"))
			return false;
		if (!verifier_champ_non_vide("departement_de_naissance_co_emprunteur", "département de naissance", "au", "le", "du"))
			return false;
		if (valeur_situation != 1 && valeur_situation != 2 && valeur_situation != 6) {
			if (! verifier_champ_numerique("enfants_co_emprunteur", "enfants à charge", "aux", "les", "des"))
				return false;
		}
	}
	if (!verifier_select_non_vide("situation_habitation", "qualité d'occupation de logement actuelle", "à la", "la"))
		return false;
	var question_rachat = document.getElementById("type_projet_rch");
	var situation_habitation = document.getElementById("situation_habitation");
	var selectedValue = situation_habitation.options[situation_habitation.selectedIndex].value;
	if (selectedValue == 0) {
		if (! verifier_champ_numerique("montant_loyer", "montant du loyer", "au", "le", "du"))
			return false;
	}
	if (selectedValue == 1 && question_rachat.checked && !getElementById("a_rachat_immo_oui").checked) {
		if (! verifier_champ_numerique("valeur_propriete", "valeur de votre bien", "au", "le", "du"))
			return false;
	}
	return true;
}

function verifier_salarie (suffix) {
	if (!document.getElementById("revenu_salarie" + suffix + "_oui").checked)
		return true;
	if (!verifier_select_non_vide("nature_salaire" + suffix, "nature du salaire", "à la", "la"))
		return false;
	var element = document.getElementById("nature_salaire" + suffix);
	var selectedValue = element.options[element.selectedIndex].value;
	if (selectedValue != "1" && selectedValue != "4" && selectedValue != "5") {
		if (!verifier_select_non_vide("anciennete" + suffix, "anciennete", "à l'", "l'"))
			return false;
	}
	if (!verifier_champ_numerique("montant_salaire" + suffix, "salaire", "au", "le", "du"))
		return false;
	if (document.getElementById("prime" + suffix + "_oui").checked) {
		if (!verifier_champ_numerique("montant_prime" + suffix, "prime perçue", "à la", "lz", "de la"))
			return false;
	}
	return true;
}

function verifier_non_salarie (suffix) {
	if (!document.getElementById("revenu_non_salarie" + suffix + "_oui").checked)
		return true;
	if (!verifier_select_non_vide("nature_non_salarie" + suffix, "nature du revenu", "à la", "la"))
		return false;
	if (!verifier_champ_numerique("montant_non_salarie" + suffix, "revenu non salarié", "au", "le", "du"))
		return false;
	return true;
}

function verifier_pensions (suffix) {
	if (!document.getElementById("pensions" + suffix + "_oui").checked)
		return true;
	if (!verifier_select_non_vide("nature_pensions" + suffix, "nature de la pension/rente", "à la", "la"))
		return false;
	if (!verifier_champ_numerique("montant_pensions" + suffix, "montant de la pension/rente", "au", "le", "du"))
		return false;
	return true;
}

function test_revenus(suffix, autre) {
	if (!verifier_salarie(suffix))
		return false;
	if (!verifier_non_salarie(suffix))
		return false;
	if (!verifier_pensions(suffix))
		return false;
	if (autre) {
		var question_foncier = document.getElementById("revenu_fonciers" + suffix + "_oui");
		if (question_foncier.checked && !verifier_champ_numerique("montant_fonciers" + suffix, "revenus foncier", "au'", "le", "du"))
			return false;
		var question_autre = document.getElementById("revenu_autres" + suffix + "_oui");
		if (question_autre.checked && !verifier_champ_numerique("montant_autres" + suffix, "autres revenus", "aux", "les", "des"))
			return false;
	}
	return true;
}

function test_credit_en_cours() {
	var question_avoir_credit = document.getElementById("a_credits_oui");
	if (!question_avoir_credit.checked)
		return true;
	var nombre = parseInt(document.getElementById("nombre_credit").value);
	for (i=0; i < nombre; i++) {
		identifiant = i+1;
		if (!verifier_champ_numerique("mensualite_credit_" + identifiant, "mensualité du crédit", "à la", "la", "de la"))
			return false;
		if (!verifier_champ_numerique("restant_credit_" + identifiant, "restant dû", "au", "le", "du"))
			return false;
	}
	return true;
}

function test_charges() {
	if (!test_credit_en_cours())
		return false;
	if (document.getElementById("pensions_alimentaires_oui").checked) {
		if (!verifier_champ_numerique("montant_pensions", "montant versé en pensions alimentaire", "au", "le", "du"))
			return false;
	}
	return true;
}

function test_bancaire(rachat, conserne_conso, a_co_emprunteur) {
	var tester = verifier_select_non_vide("banque_emprunteur", "banque emprunteur", "à la", "la");
	if (tester && a_co_emprunteur)
		tester = verifier_select_non_vide("banque_co_emprunteur", "banque co emprunteur", "à la", "la");
	if (tester && rachat && conserne_conso && document.getElementById("restructuration_oui").checked )
		tester = verifier_date("restructuration_de_dettes");
	return tester;
}

function test_complement_coordonnees() {
	var telephone = document.getElementById("telephone");
	var mobile = document.getElementById("mobile");
	if (telephone == null ||  mobile == null ) {
		alert("Les champ correspondant aux telephone sont manquant");
		return false;
	}
	if (telephone.value == "" && mobile.value == "") {
		alert("Veuillez indiquer au moins un numéro de téléphone (domicile ou mobile)");
		telephone.focus();
		return false;
	}
	var mail = document.getElementById("mail");
	if (!verifier_mail(mail.value)) {
		alert("Veuillez indiquer une adresse mail valide.");
		mail.focus();
		return false;
	}
	return true;
}

function test_coordonnees() {
	var tester = test_adresse("");
	if (tester)
		tester = test_complement_coordonnees();
	return tester;
}

function verifier_duree() {
	var duree_credit_15 = document.getElementById("duree_credit_15");
	var duree_credit_20 = document.getElementById("duree_credit_20");
	var duree_credit_25 = document.getElementById("duree_credit_25");
	var duree_credit_30 = document.getElementById("duree_credit_30");
	var duree_credit_autre = document.getElementById("duree_credit_autre");
	if (!duree_credit_15.checked && !duree_credit_20.checked
		&& !duree_credit_25.checked && !duree_credit_30.checked
		&& !duree_credit_autre.checked) {
		alert("Veuillez indiquer la durée souhaitée de l'emprunt");
		duree_credit_15.focus();
		return false;
	}
	if (duree_credit_autre.checked) {
		if (!verifier_champ_numerique("valeur_autre_duree", "nombre d'années", "au", "le", "du"))
			return false;
		var annees = parseInt(document.getElementById("valeur_autre_duree").value);
		if (annees < 1 || annees > 40) {
			alert("Veuillez indiquer un monbre d'année entre 1 at 40 ans");
			document.getElementById("valeur_autre_duree").focus();
			return false;
		}
	}
	return true;
}

function test_financement() {
	if (!verifier_champ_numerique("montant_total", "montant total du crédit", "au", "le", "du"))
		return false;
	return verifier_duree();
}

function verifier_relais() {
	if (!verifier_champ_numerique("valeur_relais", "valeur actuelle du bien à vendre", "à la", "la", "de la"))
		return false;
	if (!verifier_champ_numerique("restant_relais", "capital restant à rembourser", "au", "le", "du"))
		return false;
	if (!verifier_champ_numerique("apport_relais", "apport généré par le relais", "au", "le", "du"))
		return false;
	return true;
}

function test_formulaire() {
	var choix_situation = document.getElementById("situation_familiale");
	var valeur_situation = choix_situation.options[choix_situation.selectedIndex].value;
	var question_accompagne = document.getElementById("plusieur_oui");
	var a_co_emprunteur = valeur_situation == 1 || valeur_situation == 8 || question_accompagne.checked;
	if  (!test_description_bien())
		return false;
	if (!test_donnees_personnel())
		return false;
	var situation_habitation = document.getElementById("situation_habitation");
	var selectedValue = situation_habitation.options[situation_habitation.selectedIndex].value;
	var question_rachat = document.getElementById("type_projet_rch");
	var question_acquisition = document.getElementById("type_projet_acq");
	if (selectedValue == 1 && question_acquisition.checked) {
		var relais = document.getElementById("veut_relais_oui");
		if (relais.checked && !verifier_relais())
			return false;
	}
	if (!test_revenus("_emprunteur", true))
		return false;
	if (a_co_emprunteur && !test_revenus("_co_emprunteur", valeur_situation != 1 && valeur_situation != 8))
		return false;
	if (!test_charges())
		return false;
	if (question_acquisition.checked) {
		if (!test_financement())
			return false;
	}
	if (!test_bancaire(question_rachat.checked, document.getElementById("a_rachat_conso_oui").checked, a_co_emprunteur && valeur_situation != 1 && valeur_situation != 8))
		return false;
	return test_coordonnees();
}


