document.addEventListener('DOMContentLoaded', function () { const passwordInput = document.getElementById('password'); const confirmPasswordInput = document.getElementById('confirmPassword'); const passwordToggle = document.getElementById('password-toggle'); const eyeIcon = document.getElementById('password-eye-icon'); const eyeSlashIcon = document.getElementById('password-eye-slash-icon'); const isLoginForm = document.getElementById('login_label'); const signUpBtn = document.getElementById('submitButton'); let passwordFeedback = document.getElementById('password-feedback'); function onTypeValidate(value) { const requirements = [ { id: 'length', test: v => v.length >= 8 }, { id: 'upper', test: v => /[A-Z]/.test(v) }, { id: 'lower', test: v => /[a-z]/.test(v) }, { id: 'number', test: v => /[0-9]/.test(v) }, { id: 'special', test: v => /[!@#$%^&*()_+\-=[\]{};':"\\|,.<>/?]/.test(v) }, { id: 'passwordMatch', test: v => (v && confirmPasswordInput && confirmPasswordInput.value) ? v === confirmPasswordInput.value : false }, ] let allMet = true; requirements.forEach(req => { const li = document.getElementById('pw-req-' + req.id); if (!li) return; const icon = li.querySelector('.pw-icon'); const text = li.querySelector('.pw-req-text'); if (req.test(value)) { icon.innerHTML = ''; text.style.color = '#ffffff'; } else { icon.innerHTML = ''; // cross mark text.style.color = '#f15757ff'; allMet = false; } }); passwordFeedback.style.color = allMet ? '#059669' : '#ff5c5c'; if (signUpBtn) { signUpBtn.disabled = !allMet; signUpBtn.classList.toggle('opacity-50', !allMet); signUpBtn.classList.toggle('cursor-not-allowed', !allMet); } } function disableSubmitButton() { if (isLoginForm === null && signUpBtn) { signUpBtn.disabled = true; }else { signUpBtn.disabled = false; } } if(confirmPasswordInput){ confirmPasswordInput.addEventListener('input', function () { onTypeValidate(passwordInput ? passwordInput.value : ''); }); } if (isLoginForm == null && passwordInput && passwordFeedback) { passwordFeedback.hidden = false; passwordInput.addEventListener('input', function () { onTypeValidate(passwordInput.value); }); // Initial validation in case of pre-filled value onTypeValidate(passwordInput.value); } disableSubmitButton(); if (passwordToggle && passwordInput) { passwordToggle.addEventListener('click', function () { const type = passwordInput.getAttribute('type') === 'password' ? 'text' : 'password'; passwordInput.setAttribute('type', type); if (type === 'text') { eyeIcon.classList.add('hidden'); eyeSlashIcon.classList.remove('hidden'); } else { eyeIcon.classList.remove('hidden'); eyeSlashIcon.classList.add('hidden'); } }); } const confirmPasswordToggle = document.getElementById( 'confirmPassword-toggle', ); const confirmPasswordEyeIcon = document.getElementById( 'confirmPassword-eye-icon', ); const confirmPasswordEyeSlashIcon = document.getElementById( 'confirmPassword-eye-slash-icon', ); if (confirmPasswordToggle && confirmPasswordInput) { confirmPasswordToggle.addEventListener('click', function () { const type = confirmPasswordInput.getAttribute('type') === 'password' ? 'text' : 'password'; confirmPasswordInput.setAttribute('type', type); if (type === 'text') { confirmPasswordEyeIcon.classList.add('hidden'); confirmPasswordEyeSlashIcon.classList.remove('hidden'); } else { confirmPasswordEyeIcon.classList.remove('hidden'); confirmPasswordEyeSlashIcon.classList.add('hidden'); } }); } });