<script>
// Corrige les champs conditionnels pour éviter le blocage de validation du formulaire JS
document.addEventListener('DOMContentLoaded', function() {
// 1) Cibler les 3 champs (id ou name — couvre les deux cas)
var legalInputs = Array.from(document.querySelectorAll(
'input[id^="user_legal_representative"],' +
'input[name^="data[user][user_legal_representative"]'
));
if (legalInputs.length === 0) {
return;
}
var form = legalInputs[0].form || document.querySelector('form.form-validate') || document.querySelector('form');
function isHidden(el) {
// offsetParent === null couvre display:none et les éléments non focusables
if (el.offsetParent === null) {
return true;
}
// Vérifie si HikaShop masque via visibility/height/opacity
var cs = window.getComputedStyle(el);
if (cs.visibility === 'hidden' || cs.display === 'none' || parseFloat(cs.opacity) === 0) {
return true;
}
// Vérifie si le conteneur parent est masqué
var p = el.closest('.hikashop_field, .control-group, .form-group, li, div');
if (p) {
var cps = window.getComputedStyle(p);
if (cps.display === 'none' || cps.visibility === 'hidden') {
return true;
}
}
return false;
}
function syncOne(el) {
var hidden = isHidden(el);
if (hidden) {
el.disabled = true; // Le validateur ignore un champ désactivé
el.required = false;
el.classList.remove('required', 'invalid', 'form-control-danger');
el.setAttribute('aria-invalid', 'false');
var label = form && form.querySelector('label[for="' + el.id + '"]');
if (label) {
label.classList.remove('invalid');
var fb = label.querySelector('.form-control-feedback');
if (fb) {
fb.remove();
}
}
} else {
el.disabled = false;
el.required = true; // Quand visible, le champ redevient requis
el.classList.add('required');
}
}
function syncAll() {
legalInputs.forEach(syncOne);
}
// 2) Synchroniser au chargement
syncAll();
// 3) Synchroniser avant chaque soumission (capture pour exécuter avant la validation Joomla)
if (form) {
form.addEventListener('submit', function() {
syncAll();
}, true);
}
// 4) HikaShop masque/affiche via toggleField → resynchroniser après chaque appel
if (window.hikashop && typeof window.hikashop.toggleField === 'function') {
var _origToggle = window.hikashop.toggleField;
window.hikashop.toggleField = function() {
var r = _origToggle.apply(this, arguments);
setTimeout(syncAll, 0);
return r;
};
}
// 5) Resynchroniser sur tout changement d’état
document.addEventListener('change', syncAll, true);
});
</script>