jQuery().ready(function() {

	jQuery.validator.addMethod("zip", function(value, element) {
                        return this.optional(element) || value.match(/^((\d{5}-\d{4})|(\d{5})|([a-z]\d[a-z]\s?\d[a-z]\d))$/i);
                }, "US or Canadian postal code only") 
	
	jQuery.validator.addMethod("checkboxGroup", function(value, element) {
						return $("input[name='SteelX']").is(':checked') || $("input[name='Axcent']").is(':checked') || $("input[name='Boccia']").is(':checked') 
		}, "At least 1 catalogue must be selected")
	
	// Téléphone
	$.validator.addMethod("phoneNumberRequired", $.validator.methods.required, "Le numéro de téléphone n'est pas valide. Le format accepté est 000 000 0000.");
	$.validator.addMethod("phoneNumberMinlength", $.validator.methods.minlength, "Le numéro de téléphone n'est pas valide. Le format accepté est 000 000 0000.");
	$.validator.addMethod("phoneNumberMaxlength", $.validator.methods.maxlength, "Le numéro de téléphone n'est pas valide. Le format accepté est 000 000 0000.");
	$.validator.addMethod("phoneNumberDigits", $.validator.methods.digits, "Le numéro de téléphone n'est pas valide. Le format accepté est 000 000 0000.");
	
	$.validator.addClassRules({
		requiredPhoneNumber1: {phoneNumberRequired:true, phoneNumberDigits:true, phoneNumberMinlength:3, phoneNumberMaxlength:3},
		requiredPhoneNumber2: {phoneNumberRequired:true, phoneNumberDigits:true, phoneNumberMinlength:3, phoneNumberMaxlength:3},
		requiredPhoneNumber3: {phoneNumberRequired:true, phoneNumberDigits:true, phoneNumberMinlength:4, phoneNumberMaxlength:4}
	});
	
	
	// Configuration de la validation
	$("#formContact").validate({
		
		showErrors: function(errorMap, errorList) {
			this.defaultShowErrors();
		},
		
		// Conteneur de la liste d'erreurs
		errorLabelContainer: "#errorsBox ul",
		wrapper: "li", 
		
		highlight: function(element, errorClass) {
			if ($(element).attr("id") == "noTel1" || $(element).attr("id") == "noTel2" || $(element).attr("id") == "noTel3") {
				$("label[for=noTel]").addClass(errorClass);
			} else {
				$("label[for=" + element.name + "]").addClass(errorClass);
			}
		},
		
		unhighlight: function(element, errorClass) {
			if ($(element).attr("id") == "noTel1" || $(element).attr("id") == "noTel2" || $(element).attr("id") == "noTel3") {
				$("label[for=noTel]").removeClass(errorClass);
			} else {
				$("label[for=" + element.id + "]").removeClass(errorClass);
			}
		},
		

		rules: {	
			name: "required",
			organization: "required",
			email: {
				required: true,
				email: true
			}
			
		},
		
		messages: {
			name: "Your name is required.",
			organization: "Your organization is required.",
			email: {
				required: "Your email address is required.",
				email: "Your email address is not valid."
			}
			
		}
		
	});

});







function verifier_contact() {

// Liste volontairement inversée pour que le focus revienne dans le champs erroné le plus haut.
// On définit ici le type de traitement à effectuer pour chacun d'entre eux.

	champs_liste = new Array('email,check_email', 'name,vide', 'organization,vide');

	return parser(champs_liste);

}

function verifier_lost() {

// Liste volontairement inversée pour que le focus revienne dans le champs erroné le plus haut.
// On définit ici le type de traitement à effectuer pour chacun d'entre eux.

	champs_liste = new Array('email_lost,check_email', 'username_lost,vide');

	return parser(champs_liste);

}

function verifier_connect() {

// Liste volontairement inversée pour que le focus revienne dans le champs erroné le plus haut.
// On définit ici le type de traitement à effectuer pour chacun d'entre eux.

	champs_liste = new Array('username3,vide', 'password3,vide');

	return parser(champs_liste);

}


function verifier_register() {

// Liste volontairement inversée pour que le focus revienne dans le champs erroné le plus haut.
// On définit ici le type de traitement à effectuer pour chacun d'entre eux.

	champs_liste = new Array('email_register,check_email', 'password2_register,vide', 'password_register,vide', 'organisation_register,vide', 'fullname_register,vide', 'username_register,vide');

	return parser(champs_liste);

}


function parser(champs_liste) {
			
// On enlève les messages d'erreurs précédents
			
	var erreurs_total = 0;

	for (i=0; i<champs_liste.length; i++) {

		var champ = champs_liste[i].split(/,/);

		if ((champ[1] == 'vide') && (vide(champ[0]) == 1)) {
			
			erreurs_total++;

		}

		if ((champ[1] == 'check_email') && (check_email(champ[0]) == 1)) {
			
			erreurs_total++;
			
		}

		if ((champ[1] == 'noselect') && (noselect(champ[0]) == 1)) {
			
			erreurs_total++;

		}

	}

	if (erreurs_total != 0){
		alert ('Please fill the form correctly');
		return false;
	}
	else return true;

}

function classe_changer(champ, etat) {
	
// Change la classe du champ pourqu'il soit encadré ou non comme indiqué dans la feuille de style

	if (etat == 0) {

		if (document.getElementById('inner_'+champ)) {
			
			document.getElementById('inner_'+champ).style.display='inline';

			document.getElementById('inner_'+champ).style.visibility='visible';

			document.getElementById(champ).focus();

	}

	} else if (document.getElementById('inner_'+champ)) {
		
		document.getElementById('inner_'+champ).style.visibility='hidden';

	}

}

function trim(string) {

	return string.replace(/^\s+/, '').replace(/\s+$/, '');

}

function vide(champ) { 

	var erreur = 0;

	if (document.getElementById(champ)) {

		if (trim(document.getElementById(champ).value) == '') {

			erreur = 1;

		}

	}

	if (erreur == 1) {
		
		classe_changer(champ, 0);

		if (document.getElementById('inner_'+champ)) {
			
			if (champ == "commentaires")
				{
				document.getElementById('inner_'+champ).innerHTML='Les commentaires sont obligatoires';
				}
			else if (champ == "objet")
				{
				document.getElementById('inner_'+champ).innerHTML='L\'objet est obligatoire';
				}
			else if (champ == "prenom")
				{
				document.getElementById('inner_'+champ).innerHTML='Le pr&eacute;nom est obligatoire';
				}
			else if (champ == "nom")
				{
				document.getElementById('inner_'+champ).innerHTML='Le nom est obligatoire';
				}
			else
				{
				document.getElementById('inner_'+champ).innerHTML='Please complete';
				}

			classe_changer(champ, 0);

		}
		
		return erreur;
		
	} else {
		
		classe_changer(champ, 1);
		
	}

}
   
function noselect(champ) { 

	var erreur = 0;

	if (document.getElementById(champ)) {

		if (trim(document.getElementById(champ).value) == "") {

			erreur = 1;

		}

	}

	if (erreur == 1) {
		
		classe_changer(champ, 0);

		if (document.getElementById('inner_'+champ)) {

			document.getElementById('inner_'+champ).innerHTML='Choice please';

			classe_changer(champ, 0);

		}
		
		return erreur;
		
	} else {
		
		classe_changer(champ, 1);
		
	}

}

function check_email(champ) {

	erreur = 0;

	chaine = document.getElementById(champ).value;

	expression = new RegExp("^[a-z]+[-._a-z0-9]{2,}(@){1}[a-z]+[-a-z0-9]{1,}(\.){1}([a-z]{2,4}\.?)+$","i");

	result = expression.test(chaine);

	if (result == false) { erreur = 1; }

	if (erreur == 1) {

		classe_changer(champ, 0);

		if (document.getElementById('inner_'+champ)) {
			
			if (champ == "courriel" || champ == "courriel1" || champ == "courriel2")
				{
				document.getElementById('inner_'+champ).innerHTML='Le courriel n\'est pas valide';						
				}
			else
				{
				document.getElementById('inner_'+champ).innerHTML='Invalid email address';			
				}
			

			classe_changer(champ, 0);

		}

		return erreur;

	} else {

		classe_changer(champ, 1);

	}
				
}
	