$().ready(function() {
    jQuery.validator.addMethod("checked", function(value, element) {
        var result = false;
        $("input:checked").each(function(){
            if($(this).attr('name') == element.name){
                result = true;
            }
        });
        return result;
    }, "Champ obligatoire.");

    jQuery.validator.addMethod("lettersDigits", function(value, element) {
        return this.optional(element) || ( /^\w+$/i.test(value) && /^[^\_]+$/i.test(value) );
    }, "Ce champ est uniquement alphanumérique.");

    jQuery.validator.addMethod("notDigits", function(value, element) {
        return /^[\D]+$/i.test(value);
    }, "Ce champ est uniquement alpha.");

    jQuery.validator.addMethod("phone", function(value, element) {
        return /^(\d{2}) (\d{2}) (\d{2}) (\d{2}) (\d{2})$/i.test(value);
    }, "Ce champ est uniquement alpha.");

    jQuery.validator.addMethod("notEqualTo", function(value, element) {
        return value !== jQuery(param).val();
    }, "Ce champ doit être différent du précédent.");

    jQuery.validator.addMethod("login", function (value,element) {
        return /^[a-zA-Z0-9\.\-@]+$/.test(value);
    }, 'Cet identifiant contient des caractères invalides.');

    //Url validation enchanted
    jQuery.validator.addMethod("url",function (value,element) {
        if(value == ''){
            return true;
        }

        if(!/^(https?|ftp):\/\/(.?)+$/i.test(value)){
            value = "http://" + value;
        }
        return /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);
    });

    //	Default french method messages
    jQuery.validator.messages = {
        required: "Champ obligatoire.",
        remote: "Veuillez corriger ce champ.",
        email: "Veuillez indiquer une adresse mail valide.",
        url: "Veuillez indiquer une URL valide.",
        date: "Veuillez indiquer une date valide.",
        dateISO: "Veuillez indiquer une date valide (ISO).",
        dateDE: "Bitte geben Sie ein gültiges Datum ein.",
        number: "Veuillez indiquer un numéro valide.",
        numberDE: "Bitte geben Sie eine Nummer ein.",
        digits: "Seuls les chiffres sont autorisés",
        creditcard: "Veuillez indiquer un numéro valide de la carte bleue.",
        equalTo: "Veuillez ressaisir la même information.",
        accept: "Veuillez indiquer une extension valide.",
        maxlength: jQuery.format("Le contenu ne doit pas excéder {0} caractères."),
        maxLength: jQuery.format("Le contenu ne doit pas excéder {0} caractères."),
        minlength: jQuery.format("Veuillez entrer au minimum {0} caractères."),
        minLength: jQuery.format("Veuillez entrer au minimum {0} caractères."),
        rangelength: jQuery.format("Veuillez indiquer une valeur entre {0} et {1} caractères de long."),
        rangeLength: jQuery.format("Veuillez indiquer une valeur entre {0} et {1} caractères de long."),
        rangeValue: jQuery.format("Veuillez indiquer une valeur entre {0} et {1}."),
        range: jQuery.format("Veuillez indiquer une valeur entre {0} et {1}."),
        maxValue: jQuery.format("Veuillez indiquer une valeur inférieure ou égale à {0}."),
        max: jQuery.format("Veuillez indiquer une valeur inférieure ou égale à {0}."),
        minValue: jQuery.format("La valeur doit être supérieure ou égale à to {0}."),
        min: jQuery.format("La valeur doit être supérieure ou égale à {0}.")
    };
    //	Custom french method messages
    jQuery.validator.messages.lettersDigits = "Seuls les caractères alphanumériques sont autorisés.";
    jQuery.validator.messages.notDigits = "Seuls les caractères alpha sont autorisés.";
    jQuery.validator.messages.phone = "Veuillez indiquer le numéro de téléphone valide.";
    jQuery.validator.messages.notEqualTo = "Indiquez une valeur, différente du champ précédent.";
    jQuery.validator.messages.login = "Le pseudo contient des caractères interdits.";
    jQuery.validator.messages.checked = "Champ obligatoire.";
});
