// Mobile navigation toggle document.addEventListener("DOMContentLoaded", () => { const navToggle = document.getElementById("navToggle") const navMenu = document.getElementById("navMenu") if (navToggle && navMenu) { navToggle.addEventListener("click", () => { navMenu.classList.toggle("active") // Animate hamburger menu const spans = navToggle.querySelectorAll("span") if (navMenu.classList.contains("active")) { spans[0].style.transform = "rotate(45deg) translate(5px, 5px)" spans[1].style.opacity = "0" spans[2].style.transform = "rotate(-45deg) translate(7px, -6px)" } else { spans[0].style.transform = "none" spans[1].style.opacity = "1" spans[2].style.transform = "none" } }) } // Close mobile menu when clicking on a link const navLinks = document.querySelectorAll(".nav-link") navLinks.forEach((link) => { link.addEventListener("click", () => { if (navMenu.classList.contains("active")) { navMenu.classList.remove("active") const spans = navToggle.querySelectorAll("span") spans[0].style.transform = "none" spans[1].style.opacity = "1" spans[2].style.transform = "none" } }) }) // Smooth scrolling for anchor links const anchorLinks = document.querySelectorAll('a[href^="#"]') anchorLinks.forEach((link) => { link.addEventListener("click", function (e) { e.preventDefault() const targetId = this.getAttribute("href") const targetElement = document.querySelector(targetId) if (targetElement) { targetElement.scrollIntoView({ behavior: "smooth", block: "start", }) } }) }) // Add scroll effect to header let lastScrollTop = 0 const header = document.querySelector(".header") window.addEventListener("scroll", () => { const scrollTop = window.pageYOffset || document.documentElement.scrollTop if (scrollTop > lastScrollTop && scrollTop > 100) { // Scrolling down header.style.transform = "translateY(-100%)" } else { // Scrolling up header.style.transform = "translateY(0)" } lastScrollTop = scrollTop }) // Add fade-in animation for elements when they come into view const observerOptions = { threshold: 0.1, rootMargin: "0px 0px -50px 0px", } const observer = new IntersectionObserver((entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { entry.target.style.opacity = "1" entry.target.style.transform = "translateY(0)" } }) }, observerOptions) // Observe elements for animation const animatedElements = document.querySelectorAll(".feature-card, .benefit-card, .pricing-card") animatedElements.forEach((el) => { el.style.opacity = "0" el.style.transform = "translateY(20px)" el.style.transition = "opacity 0.6s ease, transform 0.6s ease" observer.observe(el) }) initContactForm() }) // Utility function for form validation (if needed for future forms) function validateEmail(email) { const re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/ return re.test(email) } // Contact form validation and submission function initContactForm() { const contactForm = document.getElementById("contactForm") if (!contactForm) return contactForm.addEventListener("submit", (e) => { e.preventDefault() // Clear previous errors clearFormErrors() // Validate form const formData = new FormData(contactForm) const errors = validateContactForm(formData) if (errors.length > 0) { displayFormErrors(errors) return } }) } function validateContactForm(formData) { const errors = [] // Required fields validation const firstName = formData.get("firstName") const lastName = formData.get("lastName") const email = formData.get("email") const school = formData.get("school") const gdpr = formData.get("gdpr") if (!firstName || firstName.trim().length < 2) { errors.push({ field: "firstName", message: "Meno musí mať aspoň 2 znaky" }) } if (!lastName || lastName.trim().length < 2) { errors.push({ field: "lastName", message: "Priezvisko musí mať aspoň 2 znaky" }) } if (!email || !validateEmail(email)) { errors.push({ field: "email", message: "Zadajte platnú e-mailovú adresu" }) } if (!school || school.trim().length < 2) { errors.push({ field: "school", message: "Názov školy je povinný" }) } if (!gdpr) { errors.push({ field: "gdpr", message: "Súhlas so spracovaním osobných údajov je povinný" }) } return errors } function displayFormErrors(errors) { errors.forEach((error) => { const field = document.getElementById(error.field) if (field) { const formGroup = field.closest(".form-group") formGroup.classList.add("error") let errorMessage = formGroup.querySelector(".error-message") if (!errorMessage) { errorMessage = document.createElement("div") errorMessage.className = "error-message" formGroup.appendChild(errorMessage) } errorMessage.textContent = error.message errorMessage.style.display = "block" } }) } function clearFormErrors() { const errorGroups = document.querySelectorAll(".form-group.error") errorGroups.forEach((group) => { group.classList.remove("error") const errorMessage = group.querySelector(".error-message") if (errorMessage) { errorMessage.style.display = "none" } }) // Hide success/error messages const successMessage = document.querySelector(".form-success") const errorMessage = document.querySelector(".form-error") if (successMessage) successMessage.style.display = "none" if (errorMessage) errorMessage.style.display = "none" } function showFormSuccess(message) { let successDiv = document.querySelector(".form-success") if (!successDiv) { successDiv = document.createElement("div") successDiv.className = "form-success" const form = document.getElementById("contactForm") form.insertBefore(successDiv, form.firstChild) } successDiv.textContent = message successDiv.style.display = "block" // Scroll to success message successDiv.scrollIntoView({ behavior: "smooth", block: "center" }) } function showFormError(message) { let errorDiv = document.querySelector(".form-error") if (!errorDiv) { errorDiv = document.createElement("div") errorDiv.className = "form-error" const form = document.getElementById("contactForm") form.insertBefore(errorDiv, form.firstChild) } errorDiv.textContent = message errorDiv.style.display = "block" } // Console log for debugging console.log("Docházka website loaded successfully")