Your IP : 216.73.217.68


Current Path : /home/icmq6107/clients/naddaf/
Upload File :
Current File : /home/icmq6107/clients/naddaf/script.php

// Performance and UX Optimizations for Esbet
(function() {
    'use strict';

    // Check if DOM is ready
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', init);
    } else {
        init();
    }

    function init() {
        // Initialize all features
        initSmoothScroll();
        initLazyLoading();
        initPerformanceOptimizations();
        initAnalytics();
        initSecurityFeatures();
        initAccessibility();
        initSchemaUpdater();
    }

    // Smooth Scroll for Navigation Links
    function initSmoothScroll() {
        document.querySelectorAll('a[href^="#"]').forEach(anchor => {
            anchor.addEventListener('click', function(e) {
                e.preventDefault();
                const target = document.querySelector(this.getAttribute('href'));
                if (target) {
                    const headerOffset = 80;
                    const elementPosition = target.getBoundingClientRect().top;
                    const offsetPosition = elementPosition + window.pageYOffset - headerOffset;

                    window.scrollTo({
                        top: offsetPosition,
                        behavior: 'smooth'
                    });
                }
            });
        });
    }

    // Lazy Loading for Images (if any added later)
    function initLazyLoading() {
        if ('IntersectionObserver' in window) {
            const imageObserver = new IntersectionObserver((entries, observer) => {
                entries.forEach(entry => {
                    if (entry.isIntersecting) {
                        const img = entry.target;
                        if (img.dataset.src) {
                            img.src = img.dataset.src;
                            img.classList.add('loaded');
                            observer.unobserve(img);
                        }
                    }
                });
            }, {
                rootMargin: '50px 0px',
                threshold: 0.01
            });

            document.querySelectorAll('img[data-src]').forEach(img => {
                imageObserver.observe(img);
            });
        }
    }

    // Performance Optimizations
    function initPerformanceOptimizations() {
        // Debounce scroll events
        let scrollTimer;
        const header = document.querySelector('header');
        let lastScrollTop = 0;

        window.addEventListener('scroll', () => {
            if (scrollTimer) {
                window.cancelAnimationFrame(scrollTimer);
            }

            scrollTimer = window.requestAnimationFrame(() => {
                const scrollTop = window.pageYOffset || document.documentElement.scrollTop;

                // Add/remove header shadow based on scroll
                if (scrollTop > 10) {
                    header.classList.add('scrolled');
                } else {
                    header.classList.remove('scrolled');
                }

                // Hide/show header on scroll (mobile optimization)
                if (window.innerWidth <= 768) {
                    if (scrollTop > lastScrollTop && scrollTop > 100) {
                        header.style.transform = 'translateY(-100%)';
                    } else {
                        header.style.transform = 'translateY(0)';
                    }
                }

                lastScrollTop = scrollTop;
            });
        }, { passive: true });

        // Preload critical resources
        const preloadLink = document.createElement('link');
        preloadLink.rel = 'preload';
        preloadLink.as = 'style';
        preloadLink.href = 'styles.css';
        document.head.appendChild(preloadLink);

        // Prefetch DNS for external resources
        const dnsPrefetch = document.createElement('link');
        dnsPrefetch.rel = 'dns-prefetch';
        dnsPrefetch.href = 'https://www.google-analytics.com';
        document.head.appendChild(dnsPrefetch);
    }

    // Analytics (Google Analytics or similar)
    function initAnalytics() {
        // Track button clicks
        document.querySelectorAll('.btn-primary').forEach(button => {
            button.addEventListener('click', function() {
                // Track event
                if (typeof gtag !== 'undefined') {
                    gtag('event', 'click', {
                        'event_category': 'engagement',
                        'event_label': this.textContent.trim()
                    });
                }
            });
        });

        // Track FAQ interactions
        document.querySelectorAll('.faq-card').forEach(item => {
            item.addEventListener('toggle', function() {
                if (this.open && typeof gtag !== 'undefined') {
                    gtag('event', 'faq_open', {
                        'event_category': 'engagement',
                        'event_label': this.querySelector('summary').textContent.trim()
                    });
                }
            });
        });

        // Track time on page
        let startTime = Date.now();
        window.addEventListener('beforeunload', () => {
            const timeSpent = Math.round((Date.now() - startTime) / 1000);
            if (typeof gtag !== 'undefined' && timeSpent > 0) {
                gtag('event', 'timing_complete', {
                    'name': 'time_on_page',
                    'value': timeSpent,
                    'event_category': 'engagement'
                });
            }
        });
    }

    // Security Features
    function initSecurityFeatures() {
        // Prevent right-click on buttons (optional)
        document.querySelectorAll('.btn-primary').forEach(button => {
            button.addEventListener('contextmenu', e => {
                e.preventDefault();
                return false;
            });
        });

        // Add rel="noopener noreferrer" to external links
        document.querySelectorAll('a[target="_blank"]').forEach(link => {
            link.rel = 'noopener noreferrer nofollow';
        });

        // Content Security Policy meta tag (if not server-side)
        const cspMeta = document.createElement('meta');
        cspMeta.httpEquiv = 'Content-Security-Policy';
        cspMeta.content = "default-src 'self'; script-src 'self' 'unsafe-inline' https://www.google-analytics.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:;";
        document.head.appendChild(cspMeta);
    }

    // Accessibility Improvements
    function initAccessibility() {
        // Add keyboard navigation for FAQ items
        document.querySelectorAll('.faq-card summary').forEach(summary => {
            summary.setAttribute('tabindex', '0');
            summary.addEventListener('keypress', function(e) {
                if (e.key === 'Enter' || e.key === ' ') {
                    e.preventDefault();
                    this.click();
                }
            });
        });

        // Skip to content link
        const skipLink = document.createElement('a');
        skipLink.href = '#giris';
        skipLink.className = 'skip-link';
        skipLink.textContent = 'Ana içeriğe geç';
        skipLink.style.cssText = 'position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden;';
        skipLink.addEventListener('focus', function() {
            this.style.left = '50%';
            this.style.transform = 'translateX(-50%)';
            this.style.top = '10px';
            this.style.width = 'auto';
            this.style.height = 'auto';
            this.style.padding = '10px';
            this.style.background = 'linear-gradient(135deg, #c08a33, #e6b345)';
            this.style.color = '#0e1b1d';
            this.style.zIndex = '9999';
            this.style.borderRadius = '5px';
        });
        skipLink.addEventListener('blur', function() {
            this.style.left = '-10000px';
        });
        document.body.insertBefore(skipLink, document.body.firstChild);

        // Announce dynamic content changes
        const announcer = document.createElement('div');
        announcer.setAttribute('aria-live', 'polite');
        announcer.setAttribute('aria-atomic', 'true');
        announcer.style.position = 'absolute';
        announcer.style.left = '-10000px';
        announcer.style.width = '1px';
        announcer.style.height = '1px';
        announcer.style.overflow = 'hidden';
        document.body.appendChild(announcer);
    }

    // Update Schema.org data with current date
    function initSchemaUpdater() {
        const today = new Date().toISOString();
        const schemaScripts = document.querySelectorAll('script[type="application/ld+json"]');

        schemaScripts.forEach(script => {
            try {
                const data = JSON.parse(script.textContent);

                // Update dateModified for WebPage
                if (data['@graph']) {
                    data['@graph'].forEach(item => {
                        if (item['@type'] === 'WebPage') {
                            item.dateModified = today;
                        }
                    });
                    script.textContent = JSON.stringify(data);
                }
            } catch (e) {
                console.error('Schema update error:', e);
            }
        });
    }

    // Progressive Enhancement - Add modern features for capable browsers
    if ('serviceWorker' in navigator && location.protocol === 'https:') {
        // Register service worker for offline functionality (create sw.js separately)
        navigator.serviceWorker.register('/sw.js').catch(() => {
            // Silent fail - service worker is enhancement only
        });
    }

    // Add Web Vitals tracking
    function initWebVitals() {
        // Largest Contentful Paint (LCP)
        new PerformanceObserver((entryList) => {
            const entries = entryList.getEntries();
            const lastEntry = entries[entries.length - 1];
            console.log('LCP:', lastEntry.renderTime || lastEntry.loadTime);
        }).observe({ entryTypes: ['largest-contentful-paint'] });

        // First Input Delay (FID)
        new PerformanceObserver((entryList) => {
            const entries = entryList.getEntries();
            entries.forEach((entry) => {
                console.log('FID:', entry.processingStart - entry.startTime);
            });
        }).observe({ entryTypes: ['first-input'] });

        // Cumulative Layout Shift (CLS)
        let clsValue = 0;
        new PerformanceObserver((entryList) => {
            const entries = entryList.getEntries();
            entries.forEach((entry) => {
                if (!entry.hadRecentInput) {
                    clsValue += entry.value;
                    console.log('CLS:', clsValue);
                }
            });
        }).observe({ entryTypes: ['layout-shift'] });
    }

    // Initialize Web Vitals if supported
    if (PerformanceObserver && PerformanceObserver.supportedEntryTypes) {
        if (PerformanceObserver.supportedEntryTypes.includes('largest-contentful-paint')) {
            initWebVitals();
        }
    }

    // Dynamic copyright year
    const yearElement = document.querySelector('.footer-bottom p');
    if (yearElement) {
        const currentYear = new Date().getFullYear();
        yearElement.textContent = yearElement.textContent.replace(/2025/, currentYear);
    }

    // Add loading state for buttons
    document.querySelectorAll('.btn-primary').forEach(button => {
        button.addEventListener('click', function(e) {
            if (this.href && this.href.includes('http')) {
                this.classList.add('loading');
                this.style.pointerEvents = 'none';

                // Add loading spinner
                const spinner = document.createElement('span');
                spinner.className = 'spinner';
                spinner.style.cssText = 'display:inline-block;width:16px;height:16px;border:2px solid #fff;border-radius:50%;border-top-color:transparent;animation:spin 0.6s linear infinite;margin-left:10px;';
                this.appendChild(spinner);

                // Add spinning animation
                const style = document.createElement('style');
                style.textContent = '@keyframes spin { to { transform: rotate(360deg); } }';
                document.head.appendChild(style);

                // Allow navigation after small delay
                setTimeout(() => {
                    this.style.pointerEvents = 'auto';
                }, 500);
            }
        });
    });

})();

// Google Analytics is loaded in HTML head for better performance