// Mobile menu toggle document.addEventListener('DOMContentLoaded', function() { const mobileMenuToggle = document.querySelector('.mobile-menu-toggle'); const navMenu = document.querySelector('.nav-menu'); if (mobileMenuToggle && navMenu) { mobileMenuToggle.addEventListener('click', function() { navMenu.classList.toggle('active'); mobileMenuToggle.setAttribute('aria-expanded', navMenu.classList.contains('active')); }); // Close menu when clicking outside document.addEventListener('click', function(event) { if (!event.target.closest('nav') && navMenu.classList.contains('active')) { navMenu.classList.remove('active'); mobileMenuToggle.setAttribute('aria-expanded', 'false'); } }); } // Contact form handling const contactForm = document.getElementById('contactForm'); const formMessage = document.getElementById('formMessage'); if (contactForm && formMessage) { contactForm.addEventListener('submit', function(e) { e.preventDefault(); // Simple validation const name = document.getElementById('name').value; const email = document.getElementById('email').value; const subject = document.getElementById('subject').value; const message = document.getElementById('message').value; if (!name || !email || !subject || !message) { formMessage.textContent = 'Please fill in all fields.'; formMessage.className = 'form-message error'; return; } // Email validation const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!emailRegex.test(email)) { formMessage.textContent = 'Please enter a valid email address.'; formMessage.className = 'form-message error'; return; } // Simulate form submission formMessage.textContent = 'Thank you for your message! We\'ll get back to you soon.'; formMessage.className = 'form-message success'; // Reset form contactForm.reset(); // Clear message after 5 seconds setTimeout(() => { formMessage.textContent = ''; formMessage.className = 'form-message'; }, 5000); }); } // Smooth scrolling 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', block: 'start' }); } }); }); // Current page highlighting const currentPage = location.pathname.split('/').pop(); const navLinks = document.querySelectorAll('.nav-menu a'); navLinks.forEach(link => { const linkPage = link.getAttribute('href'); if (currentPage === linkPage || (currentPage === '' && linkPage === 'index.html')) { link.classList.add('active'); } else { link.classList.remove('active'); } }); // Lazy loading for images (would be implemented with actual images) if ('IntersectionObserver' in window) { const lazyImages = document.querySelectorAll('img[data-src]'); const imageObserver = new IntersectionObserver((entries, observer) => { entries.forEach(entry => { if (entry.isIntersecting) { const img = entry.target; img.src = img.dataset.src; img.classList.remove('lazy'); imageObserver.unobserve(img); } }); }); lazyImages.forEach(img => { imageObserver.observe(img); }); } });