jQuery(document).ready(function($) { // FAQ Toggle functionality $('.pc-faq-toggle').on('click', function(e) { e.preventDefault(); var $button = $(this); var $faqItem = $button.closest('.pc-faq-item'); var $answer = $faqItem.find('.pc-faq-answer'); var isExpanded = $button.attr('aria-expanded') === 'true'; // Close all other FAQs (optional accordion behavior) $('.pc-faq-item').each(function() { if ($(this)[0] !== $faqItem[0]) { $(this).removeClass('is-open'); $(this).find('.pc-faq-answer').slideUp(300); $(this).find('.pc-faq-toggle').attr('aria-expanded', 'false'); } }); // Toggle current FAQ if (isExpanded) { $faqItem.removeClass('is-open'); $answer.slideUp(300); $button.attr('aria-expanded', 'false'); } else { $faqItem.addClass('is-open'); $answer.slideDown(300); $button.attr('aria-expanded', 'true'); // Smooth scroll to the FAQ setTimeout(function() { $('html, body').animate({ scrollTop: $faqItem.offset().top - 20 }, 300); }, 100); } }); // Keyboard navigation $('.pc-faq-toggle').on('keydown', function(e) { var $button = $(this); var $faqItem = $button.closest('.pc-faq-item'); var $allItems = $('.pc-faq-item'); var currentIndex = $allItems.index($faqItem); switch (e.keyCode) { case 38: // Up arrow e.preventDefault(); if (currentIndex > 0) { $allItems.eq(currentIndex - 1).find('.pc-faq-toggle').focus(); } break; case 40: // Down arrow e.preventDefault(); if (currentIndex < $allItems.length - 1) { $allItems.eq(currentIndex + 1).find('.pc-faq-toggle').focus(); } break; case 36: // Home e.preventDefault(); $allItems.first().find('.pc-faq-toggle').focus(); break; case 35: // End e.preventDefault(); $allItems.last().find('.pc-faq-toggle').focus(); break; } }); // Search functionality (if search box is added) function initSearch() { var $searchBox = $('#pc-faq-search'); if ($searchBox.length === 0) return; $searchBox.on('input', function() { var searchTerm = $(this).val().toLowerCase(); var $faqs = $('.pc-faq-item'); var visibleCount = 0; $faqs.each(function() { var $faqItem = $(this); var question = $faqItem.find('.pc-faq-question-text').text().toLowerCase(); var answer = $faqItem.find('.pc-faq-answer-content').text().toLowerCase(); if (question.includes(searchTerm) || answer.includes(searchTerm)) { $faqItem.show(); visibleCount++; } else { $faqItem.hide(); } }); // Show no results message var $noResults = $('.pc-faq-no-results'); if (visibleCount === 0 && searchTerm !== '') { if ($noResults.length === 0) { $noResults = $('
'); $('.pc-faq-items').append($noResults); } $noResults.text('No FAQs found matching "' + searchTerm + '"'); } else { $noResults.remove(); } // Update count var $count = $('.pc-faq-count'); if ($count.length > 0) { if (searchTerm === '') { $count.text($faqs.length + ' FAQs available'); } else { $count.text(visibleCount + ' of ' + $faqs.length + ' FAQs matching "' + searchTerm + '"'); } } }); } // Initialize search if present initSearch(); // Expand/Collapse All functionality function initExpandCollapseAll() { var $expandAll = $('#pc-faq-expand-all'); var $collapseAll = $('#pc-faq-collapse-all'); if ($expandAll.length === 0 && $collapseAll.length === 0) return; $expandAll.on('click', function() { $('.pc-faq-item').addClass('is-open'); $('.pc-faq-answer').slideDown(300); $('.pc-faq-toggle').attr('aria-expanded', 'true'); }); $collapseAll.on('click', function() { $('.pc-faq-item').removeClass('is-open'); $('.pc-faq-answer').slideUp(300); $('.pc-faq-toggle').attr('aria-expanded', 'false'); }); } initExpandCollapseAll(); // Print functionality function initPrintButton() { var $printButton = $('#pc-faq-print'); if ($printButton.length === 0) return; $printButton.on('click', function(e) { e.preventDefault(); window.print(); }); } initPrintButton(); // URL hash functionality function initHashNavigation() { if (window.location.hash) { var hash = window.location.hash.substring(1); var $targetFaq = $('#pc-faq-' + hash); if ($targetFaq.length > 0) { // Close all FAQs first $('.pc-faq-item').removeClass('is-open'); $('.pc-faq-answer').slideUp(300); $('.pc-faq-toggle').attr('aria-expanded', 'false'); // Open the target FAQ setTimeout(function() { $targetFaq.find('.pc-faq-toggle').trigger('click'); }, 500); } } } initHashNavigation(); // Update hash when FAQ is opened $('.pc-faq-toggle').on('click', function() { var $faqItem = $(this).closest('.pc-faq-item'); var faqId = $faqItem.attr('id'); if (faqId && $faqItem.hasClass('is-open')) { history.pushState(null, null, '#' + faqId.replace('pc-faq-', '')); } else { if (window.location.hash) { history.pushState(null, null, window.location.pathname); } } }); // Analytics tracking (if available) function trackFAQInteraction(action, faqId) { if (typeof gtag !== 'undefined') { gtag('event', 'faq_' + action, { 'faq_id': faqId }); } else if (typeof ga !== 'undefined') { ga('send', 'event', 'FAQ', action, faqId); } } // Track FAQ opens $('.pc-faq-toggle').on('click', function() { var $faqItem = $(this).closest('.pc-faq-item'); var faqId = $faqItem.data('faq-id') || $faqItem.attr('id'); var question = $faqItem.find('.pc-faq-question-text').text(); trackFAQInteraction('open', faqId); trackFAQInteraction('open_question', question); }); // Performance optimization: Lazy load images in answers function lazyLoadImages() { if ('IntersectionObserver' in window) { var imageObserver = new IntersectionObserver(function(entries, observer) { entries.forEach(function(entry) { if (entry.isIntersecting) { var img = entry.target; if (img.dataset.src) { img.src = img.dataset.src; img.removeAttribute('data-src'); observer.unobserve(img); } } }); }); $('.pc-faq-answer-content img[data-src]').each(function() { imageObserver.observe(this); }); } } lazyLoadImages(); // Smooth scroll behavior for anchor links within answers $('.pc-faq-answer-content a[href^="#"]').on('click', function(e) { var target = $(this.getAttribute('href')); if (target.length) { e.preventDefault(); $('html, body').animate({ scrollTop: target.offset().top - 20 }, 300); } }); });