$(document).ready(function() { // Fonctions de gestion de l'affichage showOrHide(); if ($('#codeVerif_ts').val() == '' || $('#codeVerif_ts').val() == undefined || $('#codeVerif_ts').val() == null) { $('.valider').hide(); } else { $('.verifier').hide(); } $(".adresse_complement input[name^='adresse']").each(function (index, element) { if ($(element).val().trim() == '') { $(element).closest('.adresse_complement').hide(); } }); $('#addComplement').click(function (e) { ajouterChamp(); }); $("input").keyup((event) => { if (event.target.id != 'codeVerif_ts') { hideCodeArea(); } }); $("select").change((event) => { hideCodeArea(); }); // Fonctions de validation des champs $('input').blur((e) => { if ($(e.target).hasClass('validateMe')) { validerChamp($(e.target)); } }); $('input').change((e) => { if ($(e.target).hasClass('validateMe')) { validerChamp($(e.target)); } }); $('select').change((e) => { if ($(e.target).hasClass('validateMe')) { validerChamp($(e.target)); } }); $('#cp_ts').blur((e) => { verifierCodePostal(); }); $('#cp_ts').change((e) => { verifierCodePostal(); }); $('#departementUE_ts').change((e) => { verifierCodePostal(); }); $('#departementFieldNonUE').change((e) => { verifierCodePostal(); }); $('form').submit((e) => { if (!validateForm()) { e.preventDefault(); } }); }); function showOrHide() { if ($('input[name^="statut"]:checked').size()!=0 && $('input[name="lieuResidence_ts"]:checked').size()!=0) { $('#detailCompte').show(); loadFieldsAndRequirements(); } else { $('#detailCompte').hide(); } } // Gère l'aspect du formulaire et les classes de validation pour les champs spécifiques function loadFieldsAndRequirements() { if ($('input[name="lieuResidence_ts"]:checked').val() == 'UE') { $('#departementFieldUE').show(); $('#departementFieldNonUE').hide(); $('#departementFieldAutre').hide(); switchChampsObligatoiresFrancais(true); $('#departementUE_ts').addClass('validateMe'); resetValidation($('#departementUE_ts'), $('#departementUE_ts').parent().children('div[class="fr-messages-group"]')); $('#departementNonUE_ts').removeClass('validateMe'); resetValidation($('#departementNonUE_ts'), $('#departementNonUE_ts').parent().children('div[class="fr-messages-group"]')); $('#pays_ts').removeClass('validateMe'); resetValidation($('#pays_ts'), $('#pays_ts').parent().children('div[class="fr-messages-group"]')); } else if ($('input[name="lieuResidence_ts"]:checked').val() == 'horsUE') { $('#departementFieldUE').hide(); $('#departementFieldNonUE').show(); $('#departementFieldAutre').hide(); switchChampsObligatoiresFrancais(true); $('#departementUE_ts').removeClass('validateMe'); resetValidation($('#departementUE_ts'), $('#departementUE_ts').parent().children('div[class="fr-messages-group"]')); $('#departementNonUE_ts').addClass('validateMe'); resetValidation($('#departementNonUE_ts'), $('#departementNonUE_ts').parent().children('div[class="fr-messages-group"]')); $('#pays_ts').removeClass('validateMe'); resetValidation($('#pays_ts'), $('#pays_ts').parent().children('div[class="fr-messages-group"]')); } else if ($('input[name="lieuResidence_ts"]:checked').val() == 'autre') { $('#departementFieldUE').hide(); $('#departementFieldNonUE').hide(); $('#departementFieldAutre').show(); switchChampsObligatoiresFrancais(false); $('#departementUE_ts').removeClass('validateMe'); resetValidation($('#departementUE_ts'), $('#departementUE_ts').parent().children('div[class="fr-messages-group"]')); $('#departementNonUE_ts').removeClass('validateMe'); resetValidation($('#departementNonUE_ts'), $('#departementNonUE_ts').parent().children('div[class="fr-messages-group"]')); $('#pays_ts').addClass('validateMe'); resetValidation($('#pays_ts'), $('#pays_ts').parent().children('div[class="fr-messages-group"]')); } if ($('input[name^="statut"]:checked').val() == 'particulier') { $('#partieCoordonnee').show(); $('.societe').hide(); $('.organisme').hide(); $('.particulier').show(); $('#formeJuri_ts').removeClass('validateMe'); $('#siret_ts').removeClass('validateMe'); $('#raisonSociale_ts').removeClass('validateMe'); $('#categoriePrinc_ts').removeClass('validateMe'); $('#categorieSec_ts').removeClass('validateMe'); $('#champsSocieteOrganisme').find('.validateMe').each(function() { resetValidation($(this), $(this).parent().children('div[class="fr-messages-group"]')) }); } else if ($('input[name^="statut"]:checked').val() == 'societe') { $('#partieCoordonnee').show(); $('.particulier').hide(); $('.organisme').hide(); $('.societe').show(); $('#inscription_raisonSociale').removeClass('fr-col-md-5').addClass('fr-col-lg-12'); $('#textErrorNomOrgaSociete').text($.errorTextRaisonSocialeSociete); $('#formeJuri_ts').addClass('validateMe'); // Le SIRET n'est pas toujours présent pour des sociétés non françaises if ($('input[name="lieuResidence_ts"]:checked').val() != 'autre') { $('#siret_ts').addClass('validateMe'); $('#siret_ts_label').addClass('fr-obligatoire-custom'); } else { $('#siret_ts').removeClass('validateMe'); $('#siret_ts_label').removeClass('fr-obligatoire-custom'); } $('#raisonSociale_ts').addClass('validateMe'); $('#categoriePrinc_ts').addClass('validateMe'); $('#categorieSec_ts').addClass('validateMe'); $('#champsSocieteOrganisme').find('.validateMe').each(function() { resetValidation($(this), $(this).parent().children('div[class="fr-messages-group"]')); }); } else if ($('input[name^="statut"]:checked').val() == 'organisme') { $('#partieCoordonnee').show(); $('.particulier').hide(); $('.societe').hide(); $('.organisme').show(); $('#inscription_raisonSociale').removeClass('fr-col-lg-12').addClass('fr-col-md-5'); $('#textErrorNomOrgaSociete').text($.errorTextNomOrganisme); $('#formeJuri_ts').addClass('validateMe'); $('#siret_ts').removeClass('validateMe'); $('#raisonSociale_ts').addClass('validateMe'); $('#categoriePrinc_ts').addClass('validateMe'); $('#categorieSec_ts').addClass('validateMe'); $('#champsSocieteOrganisme').find('.validateMe').each(function() { resetValidation($(this), $(this).parent().children('div[class="fr-messages-group"]')) }); } } function switchChampsObligatoiresFrancais(france) { if (france) { $('#idSpanPaysFrance').show(); $('#idSpanPays_ts').hide(); $('#cp_ts_label').addClass('fr-obligatoire-custom'); } else { $('#idSpanPaysFrance').hide(); $('#idSpanPays_ts').show(); $('#cp_ts_label').removeClass('fr-obligatoire-custom'); } } function ajouterChamp() { let maxAddrComp = $('.adresse_complement'); for (let i = 0; i < maxAddrComp.length; i++) { if (maxAddrComp[i].style.display == 'none') { maxAddrComp[i].style.display = 'block'; $(maxAddrComp[i]).find("input[type='text']").focus(); if (i == maxAddrComp.length - 1){ $('#addComplement').hide(); } break; } } } function validerChamp(champ) { let valide = false; // Cas particulier pour ce champ if (champ.attr('id') == 'categoriePrinc_ts' || champ.attr('id') == 'categorieSec_ts') { valide = verifierCategoriePro(champ); // Un select n'a pas de 'type' } else if (champ.prop("tagName").toLowerCase() == 'select') { valide = verifierSelect(champ); } else if (champ.attr('type') == 'radio') { valide = verifierRadio(champ); } else if (champ.attr('type') == 'text') { valide = verifierText(champ); } else if (champ.attr('type') == 'email') { valide = verifierEmail(champ); } return valide; } function verifierCategoriePro(champ) { let valide = false; let messages = champ.parent().children('div[class="fr-messages-group"]'); resetValidation($('#categorieSec_ts'), $('#categorieSec_ts').parent().children('div[class="fr-messages-group"]')); if (champ.attr('id') == 'categoriePrinc_ts') { resetValidation($('#categoriePrinc_ts'), $('#categoriePrinc_ts').parent().children('div[class="fr-messages-group"]')); } if (champ.attr('id') == 'categoriePrinc_ts' && (champ.val() == 0 || champ.val() == undefined || champ.val() == null)) { champ.addClass('fr-select--error'); champ.parent().addClass('fr-select-group--error'); messages.children('p[class="fr-error-text"]').show(); } else if ($('#categorieSec_ts').val() != '' && $('#categorieSec_ts').val() != undefined && $('#categorieSec_ts').val() == $('#categoriePrinc_ts').val()) { $('#categorieSec_ts').addClass('fr-select--error'); $('#categorieSec_ts').parent().addClass('fr-select-group--error'); $('#categorieSec_ts').parent().children('div[class="fr-messages-group"]').children().show(); if (champ.attr('id') == 'categoriePrinc_ts') { champ.addClass('fr-select-valid'); champ.parent().addClass('fr-select-group--valid'); } } else { if (champ.attr('id') == 'categoriePrinc_ts') { champ.addClass('fr-select-valid'); champ.parent().addClass('fr-select-group--valid'); } valide = true; } return valide; } function verifierSelect(champ) { let valide = false; let messages = champ.parent().children('div[class="fr-messages-group"]'); resetValidation(champ, messages); if (champ.val() == 0 || champ.val() == undefined || champ.val() == null) { champ.addClass('fr-select--error'); champ.parent().addClass('fr-select-group--error'); messages.children('p[class="fr-error-text"]').show(); } else { champ.addClass('fr-select-valid'); champ.parent().addClass('fr-select-group--valid'); valide = true; } return valide; } function verifierText(champ) { let valide = false; let messages = champ.parent().children('div[class="fr-messages-group"]'); resetValidation(champ, messages); if (champ.val().trim() == '' || champ.val() == undefined || champ.val() == null) { champ.addClass('fr-input--error'); champ.parent().addClass('fr-input-group--error'); messages.children('p[class="fr-error-text"]').show(); } else { champ.addClass('fr-input--valid'); champ.parent().addClass('fr-input-group--valid'); valide = true; } return valide; } function verifierRadio(champ) { let valide = false; let fieldsetParent = champ.parent().parent().parent(); let selection = fieldsetParent.children().children().children('input:checked'); let messages = fieldsetParent.children('div[class="fr-messages-group"]'); resetValidation(fieldsetParent, messages); if (selection.val() == 0 || selection.val() == undefined || selection.val() == null) { fieldsetParent.addClass('fr-fieldset--error'); messages.children('p[class="fr-error-text"]').show(); } else { fieldsetParent.addClass('fr-fieldset--valid'); valide = true; } return valide; } function verifierEmail(champ) { let valide = false ; let format = new RegExp(/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/); let messages = champ.parent().children('div[class="fr-messages-group"]'); resetValidation(champ, messages); if (champ.val().trim() == '' || champ.val() == undefined || champ.val() == null || format.test(champ.val()) == false) { champ.addClass('fr-input--error'); champ.parent().addClass('fr-input-group--error'); messages.children('p[class="fr-error-text"]').show(); } else { champ.addClass('fr-input--valid'); champ.parent().addClass('fr-input-group--valid'); valide = true; } return valide ; } function resetValidation(champ, messages) { messages.children().hide(); champ.removeClass('fr-input--error').removeClass('fr-input--valid').removeClass('fr-select--error').removeClass('fr-select--valid'); champ.parent().removeClass('fr-input-group--error').removeClass('fr-input-group--valid').removeClass('fr-select-group--error') .removeClass('fr-select-group--valid').removeClass('fr-fieldset--error').removeClass('fr-fieldset--valid'); } function verifierCodePostal() { let valide = false; let messages = $('#cp_ts').parent().children('div[class="fr-messages-group"]'); resetValidation($('#cp_ts'), messages); // Le code postal doit avoir 5 chiffres const reqSize = new RegExp(/^\d{5}$/); // Le code postal et le département doivent correspondre (y compris pour les outre-mer) let countyCodeInput = $('#cp_ts').val().trim().substring(0, 3); let countyCodeSelect = ($('input[name="lieuResidence_ts"]:checked').val() == 'UE') ? $('#departementUE_ts option:selected').text().trim().substring(0, 3) : $('#departementNonUE_ts option:selected').text().trim().substring(0, 3); if (countyCodeInput < 970) { countyCodeInput = countyCodeInput.substring(0, 2); countyCodeSelect = countyCodeSelect.substring(1, 3); } if ($('input[name="lieuResidence_ts"]:checked').val() != 'autre') { if ($('#cp_ts').val().trim() == '') { $('#cp_ts').addClass('fr-input--error'); $('#cp_ts').parent().addClass('fr-input-group--error'); $('#errorFill').show(); valide = false; } else if (!reqSize.test($('#cp_ts').val().trim())) { $('#cp_ts').addClass('fr-input--error'); $('#cp_ts').parent().addClass('fr-input-group--error'); $('#errorFormat').show(); valide = false; } else if (countyCodeInput != countyCodeSelect) { $('#cp_ts').addClass('fr-input--error'); $('#cp_ts').parent().addClass('fr-input-group--error'); $('#errorMatch').show(); valide = false; } else { $('#cp_ts').addClass('fr-input--valid'); $('#cp_ts').parent().addClass('fr-input-group--valid'); valide = true; } } else { valide = true; } return valide; } // Gère les modalités de validation du formulaire function validateForm() { let champsValides = []; $('.validateMe').each(function() { champsValides.push(validerChamp($(this))); }); if ($('input[name="lieuResidence_ts"]:checked').val() != 'autre') { champsValides.push(verifierCodePostal($('#cp_ts'))); } if (champsValides.includes(false)) { return false; } else { return true; } } // Affiche le champ du code de vérification function verifyAndSendCode() { if (validateForm()) { $('.verifier').hide(); $('.valider').show(); $('#codeVerif_ts').addClass('validateMe'); sendCode(); } } // Envoie le code de vérification à l'email indiqué function sendCode() { let token = $("meta[name='_csrf']").attr("content"); let header = $("meta[name='_csrf_header']").attr("content"); let url = $.contextPath + "/envoyerCodeVerificationAjax.do"; let dataIn = { utilisation : $('#utilisation').val(), emailUtilisateur : $('#email_ts').val() }; $.ajax({ beforeSend: function(xhr){xhr.setRequestHeader(header, token);}, url: url, dataType: "json", cache: false, async: false, data: dataIn, success: function(data) { if (data.envoi == 'ok') { $('#banner-messages-alerte').show(); setTimeout(() => {$('#banner-messages-alerte').hide();}, 8000); } } }); } // Cache le champ du code de vérification function hideCodeArea() { $('#codeVerif_ts').val(''); $('#codeVerif_ts').removeClass('validateMe'); resetValidation($('#codeVerif_ts'), $('#codeVerif_ts').parent().children('div[class="fr-messages-group"]')); $('.valider').hide(); $('.verifier').show(); }