function validateRequired(value, fieldName) { if (!value || value.trim() === '') { return `${fieldName} is required`; } return null; } function validateUsername(username) { if (!username || username.trim() === '') { return 'Username is required'; } if (username.length < 3) { return 'Username must be at least 3 characters'; } if (username.length > 50) { return 'Username must be less than 50 characters'; } if (!/^[a-zA-Z0-9_]+$/.test(username)) { return 'Username can only contain letters, numbers, and underscores'; } return null; } function validatePassword(password) { if (!password || password.trim() === '') { return 'Password is required'; } if (password.length < 6) { return 'Password must be at least 6 characters'; } return null; } function showFieldError(field, error) { field.classList.add('error'); let errorDiv = field.nextElementSibling; if (!errorDiv || !errorDiv.classList.contains('field-error')) { errorDiv = document.createElement('div'); errorDiv.className = 'field-error'; field.parentNode.insertBefore(errorDiv, field.nextSibling); } errorDiv.textContent = error; } function clearFieldError(field) { field.classList.remove('error'); const errorDiv = field.nextElementSibling; if (errorDiv && errorDiv.classList.contains('field-error')) { errorDiv.remove(); } }