| // Main JavaScript file for shared functionality across all pages | |
| document.addEventListener('DOMContentLoaded', function() { | |
| // Mobile menu toggle functionality would go here if needed | |
| // Smooth scroll for anchor links | |
| document.querySelectorAll('a[href^="#"]').forEach(anchor => { | |
| anchor.addEventListener('click', function (e) { | |
| e.preventDefault(); | |
| const targetId = this.getAttribute('href'); | |
| if (targetId === '#') return; | |
| const targetElement = document.querySelector(targetId); | |
| if (targetElement) { | |
| targetElement.scrollIntoView({ | |
| behavior: 'smooth' | |
| }); | |
| } | |
| }); | |
| }); | |
| // Form validation example | |
| const contactForm = document.querySelector('#contact form'); | |
| if (contactForm) { | |
| contactForm.addEventListener('submit', function(e) { | |
| const requiredFields = this.querySelectorAll('[required]'); | |
| let isValid = true; | |
| requiredFields.forEach(field => { | |
| if (!field.value.trim()) { | |
| isValid = false; | |
| field.classList.add('border-red-500'); | |
| } else { | |
| field.classList.remove('border-red-500'); | |
| } | |
| }); | |
| if (!isValid) { | |
| e.preventDefault(); | |
| alert('Por favor, complete todos los campos obligatorios.'); | |
| } | |
| }); | |
| } | |
| // Dynamic year for footer | |
| const yearSpan = document.getElementById('current-year'); | |
| if (yearSpan) { | |
| yearSpan.textContent = new Date().getFullYear(); | |
| } | |
| }); |