﻿

jQuery(document).ready(function() {

    // Formulaire de contact
    $('#contactFormSubmit').click(function() {

        var requiredFields = {
            Nom: 'required',
            Prenom: 'required',
            Email: 'required|email|testmail',
            Telephone: 'minlength: 6, maxlength: 15, testphone',
            Commentaires: 'required'
        };

        var content = validateForm('contactForm', requiredFields);
        if (content) {
            var dataFields = new Array("Civilite", "Nom", "Prenom", "Fonction", "Societe", "Siret", "Email", "TelephoneIndex",
                                "Fax", "Telephone", "Adresse", "Adresse2", "CodePostal", "Ville", "Pays", "Commentaires", "Subject");
            sendAjaxForm("contactForm", dataFields, new Array(), baseUrl + "contactValid");
        }
    });


    // Formulaire de demande d'informations
    $('#demandeInfosFormSubmit').click(function() {
        var requiredFields = {
            Nom: 'required',
            Prenom: 'required',
            Email: 'required|email|testmail',
            Subject: 'required',
            Telephone: 'minlength: 6, maxlength: 15, testphone',
            Commentaires: 'required'
        };
        var content = validateForm('demandeInfosForm', requiredFields);
        if (content) {
            var dataFields = new Array("Civilite", "Nom", "Prenom", "Fonction", "Societe", "Email", "TelephoneIndex",
                                "Fax", "Telephone", "Adresse", "Adresse2", "CodePostal", "Ville", "Pays", "Commentaires", "Subject");
            sendAjaxForm("demandeInfosForm", dataFields, new Array(), baseUrl + "demandes-informations");
        }
    });


    // Formulaire de callback
    $('#callbackFormSubmit').click(function() {
        var requiredFields = {
            Nom: 'required',
            Prenom: 'required',
            Email: 'testmail|required',
            Telephone: 'minlength: 6, maxlength: 15, testphone|required',
            Subject: 'required',
            Commentaires: 'required'
        };
        var content = validateForm('callbackForm', requiredFields);
        if (content) {
            var dataFields = new Array("Civilite", "Nom", "Prenom", "Fonction", "Societe", "Email", "TelephoneIndex",
                                    "Telephone", "Rappel", "CreneauHoraire", "Commentaires", "Subject");
            sendAjaxForm("callbackForm", dataFields, new Array(), baseUrl + "rappel");
        }
    });

    // Formulaire d'e-mails
    $('#inscriptionFormSubmit').click(function() {
        var requiredFields = {
            Nom: 'required',
            Prenom: 'required',
            Email: 'required|email|testmail',
            Telephone: 'minlength: 6, maxlength: 15, testphone'
        };

        var content = validateForm('inscriptionForm', requiredFields);
        if (content) {

            var dataFields = new Array("Civilite", "Nom", "Prenom", "Fonction", "Societe", "Email", "TelephoneIndex",
                                "Fax", "Telephone", "Adresse", "Adresse2", "CodePostal", "Ville", "Pays");
            sendAjaxForm("inscriptionForm", dataFields, new Array("CitiesListResult"), baseUrl + "inscriptionValid");
        }
    });


    // Formulaire de projet-intra
    $('#projetIntraFormSubmit').click(function() {
        var requiredFields = {
            Nom: 'required',
            Prenom: 'required',
            Email: 'required|email|testmail',
            Telephone: 'minlength: 6, maxlength: 15, testphone',
            Subject: 'required',
            Commentaires: 'required'
        };
        var content = validateForm('projetIntraForm', requiredFields);
        if (content) {
            var dataFields = new Array("Civilite", "Nom", "Prenom", "Societe", "Email", "TelephoneIndex",
                                "Telephone", "Commentaires", "Subject");
            sendAjaxForm("projetIntraForm", dataFields, new Array(), baseUrl + "formations-intra/projet");
        }
    });

    // Formulaire de catalogue
    $('#catalogueFormSubmit').click(function() {
        var requiredFields = {
            Nom: 'required',
            Prenom: 'required',
            Societe: 'required',
            Email: 'required|email|testmail',
            Telephone: 'minlength: 6, maxlength: 15, testphone|required',
            Adresse: 'required',
            CodePostal: 'required',
            Ville: 'required'
        };
        var content = validateForm('catalogueForm', requiredFields);
        if (content) {
            var dataFields = new Array("Civilite", "Nom", "Prenom", "Societe", "Email", "Telephone", "Adresse", "Adresse2", "CodePostal", "Ville", "CatalogueValue");
            sendAjaxForm("catalogueForm", dataFields, new Array(), baseUrl + "catalogueValid");
        }
    });


    // Formulaire de SaveEtape3 Panier
    $('#saveEtape3').click(function() {
        var requiredFields = {
            Nom: 'required',
            Prenom: 'required',
            Societe: 'required',
            Telephone: 'minlength: 6, maxlength: 15, testphone|required',
            Email: 'required|email|testmail'
        };
        var content = validateForm('OrderInfosForm', requiredFields);
        if (content) {
            var dataFields = new Array("Civilite", "Nom", "Prenom", "Fonction", "Societe", "Siret", "Email", "TelephoneIndex",
                                "Fax", "Telephone", "Adresse", "Adresse2", "CodePostal", "Ville", "Pays", "Commentaires");

            for (var field = 0; field < dataFields.length; field++) {
                var formatedString = purgeUnwantedCharacters($('#' + dataFields[field]).val());
                $('#' + dataFields[field]).val(formatedString);
            }
            submitAForm("OrderInfosForm");
        }
    });

    // Formulaire de formulaire indépendants
    $('#formateurFormSubmit').click(function() {
        var requiredFields = {
            Nom: 'required',
            Prenom: 'required',
            Email: 'required|email|testmail',
            CodePostal: 'required',
            Ville: 'required',
            Mobile: 'verifMobile',
            AutreStatut: 'verifstatut'
        };
        var content = validateForm('formateurForm', requiredFields);
        if (content) {
            var dataFields = new Array("Civilite", "Nom", "Prenom", "Fonction", "Societe", "Siret", "TelephoneIndex",
                                "Fax", "Telephone", "MobileIndex", "Mobile", "Adresse", "Adresse2", 
                                "CodePostal", "Ville", "Pays", "Commentaires");

            for (var field = 0; field < dataFields.length; field++) {
                var formatedString = purgeUnwantedCharacters($('#' + dataFields[field]).val());
                $('#' + dataFields[field]).val(formatedString);
            }
            submitAForm("formateurForm");
        }
    });


    // Etape 3 du formulaire sur mesure
    $('#savePeach').click(function() {
        var requiredFields = {
            Nom: 'required',
            Prenom: 'required',
            Societe: 'required',
            Telephone: 'minlength: 6, maxlength: 15, testphone|required',
            Email: 'required|email|testmail',
            CodePostal: 'required',
            Ville: 'required',
            NbPerson: 'verifNbPerson'
        };
        var content = validateForm('SurMesureForm', requiredFields);
        if (content) {
            var dataFields = new Array("Civilite", "Nom", "Prenom", "Fonction", "Societe", "Siret", "Email", "TelephoneIndex",
                                "Fax", "Telephone", "Adresse", "Adresse2", "CodePostal", "Ville", "Pays", "Commentaires");

            for (var field = 0; field < dataFields.length; field++) {
                var formatedString = purgeUnwantedCharacters($('#' + dataFields[field]).val());
                $('#' + dataFields[field]).val(formatedString);
            }
            submitAForm("SurMesureForm");
        }
    });
    
});


///////////////////////////////Form validation functions//////////
/* function pour la construction dynamique du objet jquery pour la validation des formulaires (sauf le succes et ignore, a faire plus tard)
    $("#FormId").validate({
        rules: {
        Nom: {
         required: true
        },
        Prenom: {
            required: true
        },
        Email: {
            required: true,
            email: true
        },
        Telephone: {
         number: true                               
        },
        Commentaires: {
            required: true
        }
        },
        messages: {
            Email: 'Le courriel semble incorrect',
            Nom: 'Le nom est requis',
            Prenom: 'Le prénom est requis',
            Telephone: 'Le téléphone semble incorrect',
            Commentaires: 'Un commentaire est requis'
        },
        success: function(label) {
            //label.addClass("valid").fadeOut(5000);
        },
                        
        ignore: ".ignore"
    });
*/
function validateForm(formId, requiredFields) {

    var rules = "rules: {";
    var table = null;
    var tmpRules = "";
    var messages = "messages: {Email: 'L\\'adresse semble incorrecte', Telephone: 'Le téléphone semble incorrect', Nom: 'Le nom est requis',Prenom: 'Le prénom est requis',Telephone: 'Le téléphone semble incorrect',Commentaires: 'Un commentaire est requis', CodePostal: 'Le code postal semble incorrect',Societe: 'La société est requise',Adresse: 'L\\'adresse est requise', CodePostal: 'Le Code postal est requis', Ville: 'La ville est requise', Subject: 'Le sujet est requis', AutreStatut: 'le statut est requis', Mobile: 'Le téléphone et/ou le mobile doivent être requis', NbPerson: 'Veuillez renseigner le nombre de stagiaire'} ";
    var validation = "";

    for (key in requiredFields) {

        //begin declaration
        rules += key + ": {";

        //split in case we have several items
        table = requiredFields[key].split('|');

        //place them in a temp variable to remove last extra comma
        for (var i = 0; i < table.length; i++)
            tmpRules += table[i] + ": true ,";

        //remove extra comma
        tmpRules = tmpRules.substring(0, tmpRules.length - 1);

        //reassemble rules string
        rules += tmpRules + "},";

        //reset tmp variable
        tmpRules = "";
    }

    rules = rules.substring(0, rules.length - 1);
    rules = rules + "}";
    
   validation = '$("#' + formId + '").validate({ ' + rules + ',' + messages + '} );';

    jQuery.validator.addMethod("testphone", function(value, element) {
        var stripped = value.replace(/[\(\)\.\-\ ]/g, '');

        return this.optional(element) || !isNaN(parseInt(stripped));
    }, "Please specify a valid phone number");

    jQuery.validator.addMethod("testmail", function(value, element) {
        var email = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/;

        return this.optional(element) || (email.exec(value) != null);
    }, "Please specify a valid email");

    jQuery.validator.addMethod("checkInput", function(value, element) {
        var inputValue = /^[A-Za-z0-9é&éèâàîôêöüïç-]+$/;

        return this.optional(element) || (inputValue.exec(value) != null);
    }, "The field contains unwanted characters");

    jQuery.validator.addMethod("verifstatut", function(value, element) {
        if ($("option:selected", "#Statut").val() == "Autre") {
            if (value == "")
                return false;
        }
        return true;
    }, "The field must contains a value if the select list was setted at the 'Autre' value");

    jQuery.validator.addMethod("verifNbPerson", function(value, element) {
    return this.optional(element) || !isNaN(parseInt(value));
    }, "The field must contains a value if the select list was setted at the 'Autre' value");

    jQuery.validator.addMethod("verifMobile", function(value, element) {
        if ($("#Telephone").val() == "" && $("#Mobile").val() == "") {
            return false;
        }
        else if ($("#Telephone").val() != "" && $("#Mobile").val() == "") {
            var telephone = $("#Telephone").val().replace(/[\(\)\.\-\ ]/g, '');
            return !isNaN(parseInt(telephone));
        }
        else if ($("#Telephone").val() == "" && $("#Mobile").val() != "") {
            var mobile = $("#Mobile").val().replace(/[\(\)\.\-\ ]/g, '');
            return !isNaN(parseInt(mobile));
        }
        else if ($("#Telephone").val() != "" && $("#Mobile").val() != "") {
            var mobile = $("#Mobile").val().replace(/[\(\)\.\-\ ]/g, '');
            var telephone = $("#Telephone").val().replace(/[\(\)\.\-\ ]/g, '');
            return !isNaN(parseInt(mobile)) && !isNaN(parseInt(telephone));
        }
        return false;
    }, "The telephone or the mobile must contain a value");

    eval(validation);

    
    return $("form#" + formId).valid();

}

// Send the given form in ajax method 
function sendAjaxForm(formId, dataFields, dataCheckboxes, url) {
    var type = "POST";
    var data = "";

    // Build the url
    for (var field = 0; field < dataFields.length; field++) {
        data += "&" + dataFields[field] + "=" + purgeUnwantedCharacters($('#' + dataFields[field]).val());
    }
    data = data.substring(1, data.length);

    
    // Add if the checkbox information, if needed
    //!!\\ Warning //!!\\ The following works only from JQuery 1.3 !!
    for (var acheckBox = 0; acheckBox < dataCheckboxes.length; acheckBox++) {
        var chekboxes = "&" + dataCheckboxes[acheckBox] + "=";
        $('#' + dataCheckboxes[acheckBox] + ' :checked').each(function() {
            chekboxes += $(this).val() + ";";
        });
        chekboxes = chekboxes.substring(0, chekboxes.length - 1);
        data += chekboxes;
    }
    data = data.replace('+', '_');

    $.ajax({
        type: type,
        url: url,
        data: data,
        async: false,
        success: function(msg) {
            $('#popup_success').modal({ onOpen: function(dialog) {
                dialog.overlay.fadeIn('slow', function() {
                    dialog.container.slideDown('slow', function() {
                        dialog.data.show();
                    });
                });
            },
            onClose: function(dialog) {
        dialog.data.fadeOut('slow', function() {
            dialog.container.hide('slow', function() {
                dialog.overlay.slideUp('slow', function() {
                    $.modal.close();
                    document.location.href = baseUrl;
                });
            });
        });
    }
            });
        },
        error: function(msg) {
            $('#popup_fail').modal({ onOpen: function(dialog) {
                dialog.overlay.fadeIn('slow', function() {
                    dialog.container.slideDown('slow', function() {
                        dialog.data.show();
                    });
                });
            }
            });
        }
    });
}

function purgeUnwantedCharacters(stringToPurge) {
    stringToPurge = stringToPurge.replace(/\[/g, '');
    stringToPurge = stringToPurge.replace(/\]/g, '');
    stringToPurge = stringToPurge.replace(/\{/g, '');
    stringToPurge = stringToPurge.replace(/\}/g, '');
    stringToPurge = stringToPurge.replace(/\;/g, '');
    return stringToPurge;
}

function displaySuccess() {
    $('#popup_success').modal({ onOpen: function(dialog) {
    dialog.overlay.fadeIn('slow', function() {
            dialog.container.slideDown('slow', function() {
                dialog.data.show();
            });
        });
    },
        onClose: function(dialog) {
            dialog.data.fadeOut('slow', function() {
                dialog.container.hide('slow', function() {
                    dialog.overlay.slideUp('slow', function() {
                        $.modal.close();
                        document.location.href = baseUrl;
                    });
                });
            });
        }
    });
}

function displayFailure() {
    $('#popup_fail').modal({ onOpen: function(dialog) {
        dialog.overlay.fadeIn('slow', function() {
            dialog.container.slideDown('slow', function() {
                dialog.data.show();
            });
        });
    }
    });
}