// DOM Content Loaded document.addEventListener('DOMContentLoaded', function() { // Mobile Menu Functionality const mobileMenuBtn = document.getElementById('mobileMenuBtn'); const mobileMenu = document.getElementById('mobileMenu'); const menuIcon = document.getElementById('menuIcon'); mobileMenuBtn.addEventListener('click', function() { mobileMenu.classList.toggle('active'); // Toggle icon between hamburger and X if (mobileMenu.classList.contains('active')) { menuIcon.className = 'fas fa-times'; } else { menuIcon.className = 'fas fa-bars'; } }); // Hero Carousel Functionality const slides = document.querySelectorAll('.slide'); const indicators = document.querySelectorAll('.indicator'); const prevBtn = document.getElementById('prevBtn'); const nextBtn = document.getElementById('nextBtn'); let currentSlide = 0; let slideInterval; function showSlide(index) { // Hide all slides slides.forEach(slide => slide.classList.remove('active')); indicators.forEach(indicator => indicator.classList.remove('active')); // Show current slide slides[index].classList.add('active'); indicators[index].classList.add('active'); currentSlide = index; } function nextSlide() { const next = (currentSlide + 1) % slides.length; showSlide(next); } function prevSlide() { const prev = (currentSlide - 1 + slides.length) % slides.length; showSlide(prev); } function startAutoSlide() { slideInterval = setInterval(nextSlide, 5000); } function stopAutoSlide() { clearInterval(slideInterval); } // Event listeners for carousel nextBtn.addEventListener('click', function() { stopAutoSlide(); nextSlide(); startAutoSlide(); }); prevBtn.addEventListener('click', function() { stopAutoSlide(); prevSlide(); startAutoSlide(); }); // Indicator click handlers indicators.forEach((indicator, index) => { indicator.addEventListener('click', function() { stopAutoSlide(); showSlide(index); startAutoSlide(); }); }); // Start auto-slide startAutoSlide(); // Pause auto-slide on hover const carousel = document.getElementById('heroCarousel'); carousel.addEventListener('mouseenter', stopAutoSlide); carousel.addEventListener('mouseleave', startAutoSlide); // Newsletter Form Functionality const newsletterForm = document.getElementById('newsletterForm'); const emailInput = document.getElementById('emailInput'); const subscribeBtn = document.getElementById('subscribeBtn'); const formMessage = document.getElementById('formMessage'); newsletterForm.addEventListener('submit', function(e) { e.preventDefault(); const email = emailInput.value.trim(); if (!email) { showMessage('Please enter a valid email address.', 'error'); return; } // Validate email format const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!emailRegex.test(email)) { showMessage('Please enter a valid email address.', 'error'); return; } // Disable button and show loading state subscribeBtn.disabled = true; subscribeBtn.textContent = 'Subscribing...'; // Simulate API call (replace with actual API endpoint) setTimeout(() => { // Reset button state subscribeBtn.disabled = false; subscribeBtn.textContent = 'Subscribe'; // Show success message showMessage('Successfully subscribed to newsletter!', 'success'); emailInput.value = ''; }, 1500); }); function showMessage(message, type) { formMessage.textContent = message; formMessage.className = `form-message ${type}`; formMessage.style.display = 'block'; // Hide message after 5 seconds setTimeout(() => { formMessage.style.display = 'none'; }, 5000); } // Smooth Scrolling for Anchor Links document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener('click', function(e) { e.preventDefault(); const target = document.querySelector(this.getAttribute('href')); if (target) { target.scrollIntoView({ behavior: 'smooth', block: 'start' }); // Close mobile menu if open if (mobileMenu.classList.contains('active')) { mobileMenu.classList.remove('active'); menuIcon.className = 'fas fa-bars'; } } }); }); // Add scroll effect to header const header = document.querySelector('.header'); let lastScrollTop = 0; window.addEventListener('scroll', function() { const scrollTop = window.pageYOffset || document.documentElement.scrollTop; if (scrollTop > 100) { header.style.boxShadow = '0 2px 10px rgba(0,0,0,0.1)'; } else { header.style.boxShadow = 'none'; } lastScrollTop = scrollTop; }); // Intersection Observer for fade-in animations const observerOptions = { threshold: 0.1, rootMargin: '0px 0px -50px 0px' }; const observer = new IntersectionObserver(function(entries) { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.style.opacity = '1'; entry.target.style.transform = 'translateY(0)'; } }); }, observerOptions); // Add fade-in animation to sections const sections = document.querySelectorAll('section:not(.hero-carousel)'); sections.forEach(section => { section.style.opacity = '0'; section.style.transform = 'translateY(30px)'; section.style.transition = 'opacity 0.6s ease, transform 0.6s ease'; observer.observe(section); }); // Phone number click tracking document.querySelectorAll('a[href^="tel:"]').forEach(phoneLink => { phoneLink.addEventListener('click', function() { console.log('Phone number clicked:', this.getAttribute('href')); }); }); // Form validation helper function validateEmail(email) { const re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; return re.test(email); } // Add loading states to buttons document.querySelectorAll('.btn-primary').forEach(button => { button.addEventListener('click', function(e) { if (this.type === 'submit') return; // Skip for form submissions const originalText = this.textContent; this.textContent = 'Loading...'; this.disabled = true; setTimeout(() => { this.textContent = originalText; this.disabled = false; }, 1000); }); }); // Lazy loading for images const imageObserver = new IntersectionObserver(function(entries) { entries.forEach(entry => { if (entry.isIntersecting) { const img = entry.target; if (img.dataset.src) { img.src = img.dataset.src; img.removeAttribute('data-src'); imageObserver.unobserve(img); } } }); }); // Observe images with data-src attribute for lazy loading document.querySelectorAll('img[data-src]').forEach(img => { imageObserver.observe(img); }); // Add ripple effect to buttons document.querySelectorAll('.btn-primary').forEach(button => { button.addEventListener('click', function(e) { const ripple = document.createElement('span'); const rect = this.getBoundingClientRect(); const size = Math.max(rect.width, rect.height); const x = e.clientX - rect.left - size / 2; const y = e.clientY - rect.top - size / 2; ripple.style.cssText = ` position: absolute; border-radius: 50%; background: rgba(255,255,255,0.3); transform: scale(0); animation: ripple 0.6s linear; width: ${size}px; height: ${size}px; left: ${x}px; top: ${y}px; pointer-events: none; `; this.style.position = 'relative'; this.style.overflow = 'hidden'; this.appendChild(ripple); setTimeout(() => { ripple.remove(); }, 600); }); }); // Add CSS for ripple animation const style = document.createElement('style'); style.textContent = ` @keyframes ripple { to { transform: scale(4); opacity: 0; } } `; document.head.appendChild(style); console.log('WP Organic Funeral Home website loaded successfully'); }); let current = 0; const items = document.querySelectorAll('.testimonial-item'); const dots = document.querySelectorAll('.dot'); function showTestimonial(index) { items[current].classList.remove('active'); dots[current].classList.remove('active'); current = index; items[current].classList.add('active'); dots[current].classList.add('active'); } setInterval(() => { let next = (current + 1) % items.length; showTestimonial(next); }, 5000); document.querySelectorAll('.faq-item').forEach(item => { item.addEventListener('click', () => { const isActive = item.classList.contains('active'); // Close all document.querySelectorAll('.faq-item').forEach(i => { i.classList.remove('active'); i.querySelector('.faq-icon').textContent = '+'; }); // Toggle current if (!isActive) { item.classList.add('active'); item.querySelector('.faq-icon').textContent = '−'; } }); });