/*
 * Gestion des Majuscules dans les emails
 */
var transformToLowerCase = function(id){
    var val = jQuery("#"+id).val();
    if(val.length>0){
    	jQuery("#"+id).val(val.toLowerCase());
    }
};

/*

 Pour la validation des formulaires

 */

var js_tools = {
    validateField: function(field) {
        if (js_error_messages.length < 1) {
            return false;
        }
        if (jQuery(field).size() < 1) {
            return false;
        }
        if (jQuery(field).parents("div.hide, p.hide").is(":hidden")) // No check if hidden
            return true;
        if (jQuery(field).parents("div.hors, p.hors").is(":hidden")) // No check if hidden
            return true;

        var error = false;
        var msg = js_error_messages[0];
        var otherField;

        // required fields
        if (jQuery(field).attr("class").indexOf("required") != -1) {
            if (!jQuery(field).val().length)
                error = true;
            msg = js_error_messages[1];
        }
        if (jQuery(field).attr("class").indexOf("required") != -1 && jQuery(field)[0].nodeName.toLowerCase() == "select") { // select
            if (jQuery(field).prev("select").size() > 0) { // if 2 selects (ex: month+year)
                var n = parseInt(jQuery(field).prev("select").get(0).selectedIndex);
                if (!isNaN(n))
                    if (jQuery(field).prev("select").get(0).selectedIndex == 0)
                        error = true;
                msg = js_error_messages[2];
            } else if (jQuery(field).prev("input").size() > 0) { // if input tel before
                if (jQuery(field).prev("input").is(".phoneNoMsg") && (!/^[0-9]{10}$/.test(jQuery(field).prev("input").val())))
                    error = true;
                msg = js_error_messages[3];
            }

            if (jQuery(field)[0].selectedIndex == 0) {
                error = true;
                msg = js_error_messages[2];
            }
        }
        if (jQuery(field).attr("class").indexOf("radio") != -1 && jQuery(field).attr("type") && jQuery(field).attr("type").toLowerCase() == "radio") { // input radio
            name = jQuery(field).attr("name");

            if (!jQuery("input[name='" + name + "']").is(":checked"))
                error = true;
        }
        if (jQuery(field).attr("class").indexOf("checkbox") != -1 && jQuery(field).attr("type") && jQuery(field).attr("type").toLowerCase() == "checkbox") { // input checkbox
            name = jQuery(field).attr("name");

            if (!jQuery("input[name='" + name + "']").is(":checked"))
                error = true;
        }
        if (jQuery(field).attr("class").indexOf("requiredNoMsg") != -1) {
            if (!jQuery(field).val().length)
                error = true;
        }
        // numeric fields
        if (jQuery(field).attr("class").indexOf("numeric") != -1) {
            if (!/^[0-9]*$/.test(jQuery(field).val()))
                error = true;
            msg = js_error_messages[5];
        }
        // phone fields
        if (jQuery(field).attr("class").indexOf("phoneNoMsg") != -1) {
            if (!/^[0-9]{10}$/.test(jQuery(field).val()))
                error = true;
        } else if (jQuery(field).attr("class").indexOf("phone") != -1) {
            if (jQuery(field).val().length && !/^[0-9]{10}$/.test(jQuery(field).val()))
                error = true;
            msg = js_error_messages[6];
        }
        // characters (letters)
        if (jQuery(field).attr("class").indexOf("character") != -1) {
            if (jQuery(field).val().length) {
                if (!/^[-' a-zA-Z]*$/.test(jQuery(field).val()))
                    error = true;
                msg = js_error_messages[7];
            }
        }
        // emails
        if (jQuery(field).attr("class").indexOf("email") != -1) {
            if (jQuery(field).val().length) {
                if (!/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/.test(jQuery(field).val()))
                    error = true;
                msg = js_error_messages[8];
            }
        }

        // check max 3
        if (jQuery(field).attr("class").indexOf("check999") != -1) {
            if (!/^[0-9]*$/.test(jQuery(field).val())) {
                error = true;
                msg = js_error_messages[5];
            } else if (jQuery(field).val() > 999) {
                error = true;
                msg = js_error_messages[9];
            }
        }

        // check max 20
        if (jQuery(field).attr("class").indexOf("check20") != -1) {
            if (!/^[0-9]*$/.test(jQuery(field).val())) {
                error = true;
                msg = js_error_messages[5];
            } else if (jQuery(field).val() > 20) {
                error = true;
                msg = js_error_messages[10];
            }
        }

        // passwords auth
        if (jQuery(field).attr("id").indexOf("pwd") != -1 || jQuery(field).attr("id").indexOf("pwd2") != -1) {
            temp = jQuery(field).val();

            if (temp.length) {
                if (temp.length <= 6)
                    error = true;
                msg = js_error_messages[11];

                if (jQuery(field).attr("id") == "pwd")
                    pwd1 = jQuery(field).val();

                if (jQuery(field).attr("id") == "pwd2")
                    pwd2 = jQuery(field).val();

                if (temp.length > 6) {
                    if (jQuery(field).attr("id").indexOf("pwd2") != -1 && pwd1 != "" && pwd2 != "")
                        if (pwd1 != pwd2)
                            error = true;
                    msg = js_error_messages[12];
                }
            }
        }

        // zip code
        if (jQuery(field).attr("class").indexOf("zipcode") != -1) {
            if (jQuery(field).val().length && !/^[0-9]{5}$/.test(jQuery(field).val())) {
                error = true;
                msg = js_error_messages[13];
            }
        }

        // date format
        if (jQuery(field).attr("class").indexOf("dateFormat") != -1) {
            if (!/^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/.test(jQuery(field).val())) {
                error = true;
                msg = js_error_messages[14];
            }
        }

        // same
        if (jQuery(field).attr("class").indexOf("same") != -1) {
            if (jQuery(field).val().length) {
                otherField = jQuery(field).attr("rel");
                if (jQuery(field).val() != jQuery("#" + otherField).val())
                    error = true;
                msg = js_error_messages[15];
            }
        }

        if (error) {
            js_tools.showError(field, msg);
        } else {
            js_tools.hideError(field);
        }
        if (jQuery(".error").size() > 0) jQuery("#formError").show();

        return !error;
    },
    showError: function(field, msg) {
        jQuery(field).prevAll("label").addClass("error");
        jQuery(field).addClass("error");
        jQuery("em.required").addClass("error");
        jQuery("#formError").show();

        if (jQuery(field).attr("type") && jQuery(field).attr("type").toLowerCase() == "radio") {
            jQuery(field).parents("span").prevAll("label").addClass("error");
            jQuery(field).parents("ul").prevAll(".label").addClass("error");
        }
        else if (jQuery(field).attr("type") && jQuery(field).attr("type").toLowerCase() == "checkbox") {
            jQuery(field).next("label").addClass("error");
            checkname = jQuery(field).attr("name");
            jQuery("input[name='" + checkname + "']").each(function() {
                jQuery(this).next("label").addClass("error")
            });
        } else if (jQuery(field).attr("class").indexOf("NoMsg") == -1) {
            var error1 = document.createElement("span");

            var error2 = document.createElement("span");
            jQuery(error2).addClass("msgError");
            jQuery(error2).html(msg);

            if (jQuery(field).nextAll().is("span.unit")) {
                jQuery(field).nextAll("span.unit").next(".error").remove();
                jQuery(field).nextAll("span.unit").next(".msgError").remove();
                jQuery(field).nextAll("span.unit").after(error2);
                jQuery(field).nextAll("span.unit").after(error1);
            } else {
                jQuery(field).nextAll("span.error").remove();
                jQuery(field).nextAll("span.msgError").remove();

                jQuery(field).prevAll("span.error").remove();
                jQuery(field).prevAll("span.msgError").remove();

                var n = parseInt(jQuery(field)[0].selectedIndex);
                if (!isNaN(n) && jQuery(" + select", field).size() > 0 && (jQuery(field)[0].selectedIndex == 0 )) {
                    jQuery(" + select", field).after(error2);
                    jQuery(" + select", field).after(error1);
                } else {
                    jQuery(error2).insertAfter(field);
                    jQuery(error1).insertAfter(field);
                }
            }
        }
    },
    hideError : function(field) {
        jQuery("em.required").removeClass("error");
        jQuery("#formError").hide();
        if (jQuery(field).attr("type") && jQuery(field).attr("type").toLowerCase() == "radio") {
            jQuery(field).parents("span").prevAll("label").removeClass("error");
            jQuery(field).parents("ul").prevAll(".label").removeClass("error");
        }
        else if (jQuery(field).attr("type") && jQuery(field).attr("type").toLowerCase() == "checkbox") {
            jQuery(field).next("label").removeClass("error");
            checkname = jQuery(field).attr("name");
            jQuery("input[name='" + checkname + "']").each(function() {
                jQuery(this).next("label").removeClass("error")
            });
        } else {
            jQuery(field).prevAll("label").removeClass("error");
            jQuery(field).removeClass("error");

            if (jQuery(field).nextAll().is("span.unit")) {
                jQuery(field).nextAll("span.unit").next(".error").remove();
                jQuery(field).nextAll("span.unit").next(".msgError").remove();
            } else {
                jQuery(field).next("span.error").remove();
                jQuery(field).next("span.msgError").remove();
            }
        }
    },
    roundNumber: function(num, nbChiffres) {
        var total = 1 * nbChiffres;
        return Math.round(num * total) / total;
    },
    convertToDot: function(str) {
        return str.replace(new RegExp(",", "g"), ".");
    },
    convertToComma: function(str) {
        return str.toString().replace(new RegExp("[.]", "g"), ",");
    },
    debug: function(str) {
        if (jQuery("#debug").size() < 1) {
            debug = document.createElement("div");
            jQuery(debug).attr("id", "debug").css({ position:"absolute", left:0, top:0, width:"250px", height:"250px", overflow:"auto", border:"1px solid #000", background:"#fff", margin:"10px", padding:"10px" });
            jQuery("body").append(debug);
        }
        jQuery("#debug").append(str + "<br />");
    }
};

var js_error_messages = [
    "Un ou plusieurs champs n'ont pas &eacute;t&eacute; remplis correctement",
    "Veuillez remplir ce champ",
    "Veuillez s&eacute;lectionner une valeur",
    "Votre num&eacute;ro de t&eacute;l&eacute;phone n'est pas correct",
    "Votre r&eacute;ponse doit &ecirc;tre au format 0.00",
    "Votre r&eacute;ponse ne doit contenir que des chiffres",
    "Le num&eacute;ro de t&eacute;l&eacute;phone doit comporter 10 chifres",
    "Ce champ ne peux contenir de caract&egrave;res sp&eacute;ciaux ni de caract&egrave;res accentu&eacute;s",
    "L'e-mail doit &ecirc;tre de type utilisateur@nomdommaine.extension",
    "Votre r&eacute;ponse ne doit pas &ecirc;tre sup&eacute;rieur &agrave; 999",
    "Votre r&eacute;ponse ne doit pas &ecirc;tre sup&eacute;rieur &agrave; 20",
    "Le mot de passe doit comporter plus de 6 caract&egrave;res",
    "Les mots de passe saisis sont diff&eacute;rents",
    "Le code postal doit comporter 5 chiffres",
    "Votre r&eacute;ponse n'est pas au format JJ/MM/AAAA",
    "Les emails saisis sont diff&eacute;rents"
];


