$(document)
.ready( function() {
	//global vars
	var validationform = $("#validationForm");
	var form = $("#coordForm");
	var nom_fac = $("#nom_fac");
	var prenom_fac = $("#prenom_fac");
	var nom_facInfo = $("#nom_facInfo");
	var adresse_fac = $("#adresse_fac");
	var adresse_facInfo = $("#adresse_facInfo");
	var cp_fac = $("#cp_fac");
	var cp_facInfo = $("#cp_facInfo");
	var ville_fac = $("#ville_fac");
	var ville_facInfo = $("#ville_facInfo");
	var pays_fac = $("#pays_fac");
	var pays_facInfo = $("#pays_facInfo");
	var tel_fac = $("#tel_fac");
	var tel_facInfo = $("#tel_facInfo");
	var mail_fac = $("#mail_fac");
	var mail_facInfo = $("#mail_facInfo");
	var confirmemail_fac = $("#confirmemail_fac");
	var confirmemail_facInfo = $("#confirmemail_facInfo");

	var nom_liv = $("#nom_liv");
	var prenom_liv = $("#prenom_liv");
	var nom_livInfo = $("#nom_livInfo");
	var adresse_liv = $("#adresse_liv");
	var adresse_livInfo = $("#adresse_livInfo");
	var cp_liv = $("#cp_liv");
	var cp_livInfo = $("#cp_livInfo");
	var ville_liv = $("#ville_liv");
	var ville_livInfo = $("#ville_livInfo");
	var pays_liv = $("#pays_liv");
	var pays_livInfo = $("#pays_livInfo");
	var tel_liv = $("#tel_liv");
	var tel_livInfo = $("#tel_livInfo");
	var mail_liv = $("#confirmemail_liv");
	var mail_livInfo = $("#confirmemail_livInfo");
	var confirmemail_liv = $("#confirmemail_liv");
	var confirmemail_livInfo = $("#confirmemail_livInfo");

	var cgv = $("#cgv");
	var cgvInfo = $("#cgvInfo");

	var message = $("#message");
	var messageInfo = $("#messageInfo");

	$("#add_liv").toggle();
	$("#diff_fac").click( function() {
		$("#add_liv").toggle();
	});
	// On blur
	nom_fac.blur(validateChampRequis);
	prenom_fac.blur(validateChampRequis);
	adresse_fac.blur(validateChampRequis);
	cp_fac.blur(validateChampRequis);
	ville_fac.blur(validateChampRequis);
	pays_fac.blur(validateChampRequis);
	tel_fac.blur(validateTelRequis);
	mail_fac.blur(validateEmail);
	confirmemail_fac.blur(validateConfirmEmail);
	message.blur(validateMessage);

	confirmemail_fac.change(validateConfirmEmail);
	// On key press
	nom_fac.keyup(validateChampRequis);
	prenom_fac.keyup(validateChampRequis);
	adresse_fac.keyup(validateChampRequis);
	cp_fac.keyup(validateChampRequis);
	ville_fac.keyup(validateChampRequis);
	pays_fac.keyup(validateChampRequis);
	tel_fac.keyup(validateTelRequis);
	mail_fac.keyup(validateEmail);
	confirmemail_fac.keyup(validateConfirmEmail);
	message.keyup(validateMessage);
	// On blur
	nom_liv.blur(validateChampRequis);
	prenom_liv.blur(validateChampRequis);
	adresse_liv.blur(validateChampRequis);
	cp_liv.blur(validateChampRequis);
	ville_liv.blur(validateChampRequis);
	pays_liv.blur(validateChampRequis);
	tel_liv.blur(validateTelRequis);
	mail_liv.blur(validateEmail);
	confirmemail_liv.blur(validateConfirmEmail);

	// On key press
	nom_liv.keyup(validateChampRequis);
	prenom_liv.keyup(validateChampRequis);
	adresse_liv.keyup(validateChampRequis);
	cp_liv.keyup(validateChampRequis);
	ville_liv.keyup(validateChampRequis);
	pays_liv.keyup(validateChampRequis);
	tel_liv.keyup(validateTelRequis);
	mail_liv.blur(validateEmail);
	confirmemail_liv.blur(validateConfirmEmail);

	cgv.click(validateCGV);

	// On Submitting
	$("#coordForm").submit( function() {

		if (validateEmail() & validateConfirmEmail()
				& validateRequis() & validateMessage()){
			return true;
		}
		else{
			return false;
		}
	});

	validationform.submit( function() {

		if (validateCGV())
			return true;
		else
			return false;
	});
	// function de validation des cgv
	function validateCGV() {
		if ('on' == $("#cgv:checked").val()) {
			cgvInfo.html("Merci.");
			cgvInfo.removeClass("error");
			return true;
		} else {
			cgvInfo
			.html("vous devez cocher cette case &darr;&nbsp;");
			cgvInfo.addClass("error");
			return false;
		}
	}
	// validation fonctions
	function validateEmail() {
		var a = $("#mail_fac").val();
		var b = $("#confirmemail_fac").val();
		var filter = /^[a-zA-Z0-9]+[a-zA-Z0-9_.-]+[a-zA-Z0-9_-]+@[a-zA-Z0-9]+[a-zA-Z0-9.-]+[a-zA-Z0-9]+.[a-z]{2,4}$/;
		// mail invalide
		if (filter.test(a)) {
			mail_fac.removeClass("error");
			mail_facInfo
			.text("Une adresse e-mail valide est nécessaire au bon traitement de la commande.");
			mail_facInfo.removeClass("error");
			validateConfirmEmail();
			return true;
		} else {
			mail_fac.addClass("error");
			mail_facInfo.text("Adresse mail non valide !");
			mail_facInfo.addClass("error");
			return false;
		}
	}
	function validateConfirmEmail() {
		var a = $("#mail_fac").val();
		var b = $("#confirmemail_fac").val();
		var filter = /^[a-zA-Z0-9]+[a-zA-Z0-9_.-]+[a-zA-Z0-9_-]+@[a-zA-Z0-9]+[a-zA-Z0-9.-]+[a-zA-Z0-9]+.[a-z]{2,4}$/;
		// mail invalide
		if (mail_fac.val() != confirmemail_fac.val()) {
			confirmemail_fac.addClass("error");
			confirmemail_facInfo
			.text("Adresses E-mail différentes !");
			confirmemail_facInfo.addClass("error");
			return false;
		} else {
			confirmemail_fac.removeClass("error");
			confirmemail_facInfo
			.text("Vous avez confirmé votre adresse mail.");
			confirmemail_facInfo.removeClass("error");

			return true;
		}
	}
	function validateMessage() {
		var a = $("#message").val();
		var illegalChars = /[?\/.;:<>$+="&*\\]+/;
		if (illegalChars.test(a)) {
			message.addClass("error");
			messageInfo
			.text("Ce message contient des caratères illégaux.");
			message.Info.addClass("error");
			return false;

		} else {

			message.removeClass("error");
			messageInfo.text("Valide");
			messageInfo.removeClass("error");
			return true;

		}
	}
	function validateChampRequis() {
		var illegalChars = /[?\/.;:<>$+="&*\\]+/;
		if (($(this).val().length < 2)
				|| (illegalChars.test($(this).val()))) {
			$(this).addClass("error");
			$(this)
			.next('span')
			.text(
			"Ce champ doit être rempli et/ou contient des caratères illégaux.");
			$(this).next('span').addClass("error");
			return false;
		} else {
			$(this).removeClass("error");
			$(this).next('span').text("Valide");
			$(this).next('span').removeClass("error");
			return true;
		}
	}
	function validateTelRequis() {
		var filter = /^[0-9]{8,14}$/;
		if (filter.test($(this).val())) {
			$(this).removeClass("error");
			$(this).next('span').text("Valide");
			$(this).next('span').removeClass("error");
			return true;

		} else {
			$(this).addClass("error");
			$(this)
			.next('span')
			.text(
			"Ce champ ne peut être vide et n'accepte que les chiffres.");
			$(this).next('span').addClass("error");
			return false;

		}
	}
	function validateRequis() {
		var valide = true;
		if ('block' == $("#add_liv").css("display")) {
			var req = [ nom_fac, prenom_fac, adresse_fac, cp_fac,
			            ville_fac, pays_fac, prenom_liv, adresse_liv,
			            cp_liv, ville_liv, pays_liv ];
			var reqTel = [ tel_fac, tel_liv ];
		} else {
			var req = [ nom_fac, prenom_fac, adresse_fac, cp_fac,
			            ville_fac, pays_fac ];
			var reqTel = [ tel_fac ];

		}
		for ( var i = 0; i < req.length; i++) {
			var illegalChars = /[?\/.;:<>$+="&*\\]+/;
			if ((req[i].val().length < 2)
					|| (illegalChars.test(req[i].val()))) {
				req[i].addClass("error");
				req[i]
				    .next('span')
				    .text(
				    "Ce champ doit être rempli et/ou contient des caratères illégaux.");
				req[i].next('span').addClass("error");
				valide = false;
			}
		}
		for ( var i = 0; i < reqTel.length; i++) {
			var illegalChars = /[?\/.;:<>$+="&*\\]+/;
			var filter = /^[0-9]{8,14}$/;
			if (false == filter.test(reqTel[i].val())) {
				reqTel[i].addClass("error");
				reqTel[i]
				       .next('span')
				       .text(
				       "Ce champ ne peut être vide et n'accepte que les chiffres.");
				reqTel[i].next('span').addClass("error");
				valide = false;

			}
		}
		return valide;
	}

});