← Kapat

packages.js

// Packages page functionality - optimized for performance
(function() {
    'use strict';
    
    // Cache frequently used elements
    let packageCards, packageData;
    
    // Optimized package data
    const PACKAGE_CONFIGS = {
        0: { // Antreman Programı
            durations: [
                {
                    price: '600 TL',
                    oldPrice: '750 TL',
                    addonPrice: '+450 TL (4 Haftalık)',
                    features: [
                        'Kişiye özel antrenman programı',
                        '24 saat içinde program teslimi',
                        'Hedeflerinize uygun egzersiz planı',
                        '4 haftalık sürdürülebilir planlama'
                    ]
                },
                {
                    price: '1000 TL',
                    oldPrice: '1200 TL',
                    addonPrice: '+900 TL (8 Haftalık)',
                    features: [
                        'Kişiye özel antrenman programı',
                        '24 saat içinde program teslimi',
                        'Hedeflerinize uygun egzersiz planı',
                        '8 haftalık sürdürülebilir planlama',
                        'Daha uzun vadeli ilerleme takibi',
                        '4 haftalık programa göre ekonomik avantaj'
                    ]
                },
                {
                    price: '1350 TL',
                    oldPrice: '1800 TL',
                    addonPrice: '+1350 TL (12 Haftalık)',
                    features: [
                        'Kişiye özel antrenman programı',
                        '24 saat içinde program teslimi',
                        'Hedeflerinize uygun egzersiz planı',
                        '12 haftalık sürdürülebilir planlama',
                        'Uzun vadeli ilerleme takibi',
                        'En ekonomik seçenek',
                        'Maksimum sonuç için ideal süre'
                    ]
                }
            ],
            popularIndex: 1
        },
        1: { // Antreman + Ölçüm + WhatsApp
            durations: [
                {
                    price: '2490 TL',
                    oldPrice: '3000 TL',
                    addonPrice: '+900 TL (8 Haftalık)',
                    features: [
                        'Kişiye özel antrenman programı',
                        '24 saat içinde program teslimi',
                        'WhatsApp üzerinden düzenli takip ve iletişim',
                        'Haftalık ölçüm takibi ve rapor analizi',
                        'Motivasyonunuzu artırmaya yönelik rehberlik',
                        '8 haftalık sürdürülebilir planlama'
                    ]
                },
                {
                    price: '3350 TL',
                    oldPrice: '4000 TL',
                    addonPrice: '+1350 TL (12 Haftalık)',
                    features: [
                        'Kişiye özel antrenman programı',
                        '24 saat içinde program teslimi',
                        'WhatsApp üzerinden düzenli takip ve iletişim',
                        'Haftalık ölçüm takibi ve rapor analizi',
                        'Motivasyonunuzu artırmaya yönelik rehberlik',
                        '12 haftalık sürdürülebilir planlama',
                        'Uzun vadeli ilerleme takibi',
                        'Maksimum sonuç için ideal süre'
                    ]
                }
            ],
            popularIndex: 1
        },
        2: { // Online Ders
            durations: [
                {
                    price: '8000 TL',
                    oldPrice: '9000 TL',
                    addonPrice: '',
                    features: [
                        '8 adet 1 saatlik birebir ders',
                        'Online platform üzerinden canlı dersler',
                        'Hareket ve form geliştirme üzerine rehberlik',
                        'Kişisel hedeflerinize uygun egzersiz planlaması',
                        'WhatsApp üzerinden iletişim desteği'
                    ]
                },
                {
                    price: '11500 TL',
                    oldPrice: '13000 TL',
                    addonPrice: '',
                    features: [
                        '12 adet 1 saatlik birebir ders',
                        'Online platform üzerinden canlı dersler',
                        'Hareket ve form geliştirme üzerine rehberlik',
                        'Kişisel hedeflerinize uygun egzersiz planlaması',
                        'WhatsApp üzerinden iletişim desteği',
                        'Daha uzun süreli destek ve motivasyon',
                        'Ekonomik avantaj'
                    ]
                }
            ],
            popularIndex: 1
        }
    };

    // SVG icons (cached)
    const ICONS = {
        check: '<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"></path></svg>',
        checkSmall: '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"></path></svg>',
        star: '<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"></path><path d="M20 3v4"></path><path d="M22 5h-4"></path><path d="M4 17v2"></path><path d="M5 18H3"></path></svg>'
    };

    // Optimized duration selection - no animations
    function selectDuration(button, packageData) {
        const tabContainer = button.parentElement;
        const card = button.closest('.package-card');
        
        // Update tabs immediately
        tabContainer.querySelectorAll('.duration-tab').forEach(tab => 
            tab.classList.remove('active'));
        button.classList.add('active');
        
        // Update content immediately
        updatePackageContent(card, packageData);
    }

    // Batch DOM updates for better performance
    function updatePackageContent(card, data) {
        const elements = {
            price: card.querySelector('[id^="price-"]'),
            oldPrice: card.querySelector('[id^="old-price-"]'),
            addonPrice: card.querySelector('.addon-price'),
            features: card.querySelector('.package-features ul'),
            badge: card.querySelector('.package-badge')
        };

        // Update prices
        if (elements.price) elements.price.textContent = data.price;
        if (elements.oldPrice) elements.oldPrice.textContent = data.oldPrice;
        if (elements.addonPrice) elements.addonPrice.textContent = data.addonPrice;

        // Update features efficiently
        if (data.features && elements.features) {
            elements.features.innerHTML = data.features.map(feature => 
                `<li>${ICONS.check}<span>${feature}</span></li>`
            ).join('');
        }

        // Handle badge visibility
        updateBadge(card, elements.badge);
    }

    // Optimized badge update
    function updateBadge(card, badgeElement) {
        if (!badgeElement) return;
        
        const activeTab = card.querySelector('.duration-tab.active');
        const title = card.querySelector('.package-image-title')?.textContent;
        const shouldShow = 
            (title?.includes('Antreman Programı') && !title?.includes('Whatsapp') && activeTab?.textContent.trim() === '8 Hafta') ||
            (title?.includes('Whatsapp') && activeTab?.textContent.trim() === '12 Hafta') ||
            (title?.includes('Online Ders') && activeTab?.textContent.trim() === '12 Ders');

        badgeElement.style.display = shouldShow ? '' : 'none';
        if (shouldShow) {
            badgeElement.innerHTML = `${ICONS.star} En Popüler Seçim`;
        }
    }

    // Optimized addon toggle
    function toggleAddon(element) {
        const checkbox = element.querySelector('.addon-checkbox');
        const card = element.closest('.package-card');
        const isChecked = checkbox.innerHTML.includes('svg');

        if (isChecked) {
            checkbox.style.backgroundColor = 'transparent';
            checkbox.innerHTML = '';
        } else {
            const colors = {
                popular: '#8b5cf6',
                premium: '#ec4899',
                default: '#4f46e5'
            };
            
            const bgColor = card.classList.contains('popular') ? colors.popular :
                           card.classList.contains('premium') ? colors.premium :
                           colors.default;

            checkbox.style.backgroundColor = bgColor;
            checkbox.innerHTML = ICONS.checkSmall;
        }
    }

    // Purchase handler
    function purchasePackage(packageName, price) {
        if (confirm(`${packageName} paketini seçtiniz. Fiyat: ${price}\n\nSatın alma işlemi için iletişim sayfasına yönlendirileceksiniz. Devam etmek istiyor musunuz?`)) {
            window.location.href = 'contact.php';
        }
    }

    // No animations - removed for performance

    // Initialize package defaults efficiently
    function initializeDefaults() {
        packageCards.forEach((card, index) => {
            const config = PACKAGE_CONFIGS[index];
            if (config) {
                const activeTabIndex = config.popularIndex;
                const tabs = card.querySelectorAll('.duration-tab');
                if (tabs[activeTabIndex]) {
                    selectDuration(tabs[activeTabIndex], config.durations[activeTabIndex]);
                }
            }
        });
    }



    // Initialize when DOM is ready
    function init() {
        packageCards = document.querySelectorAll('.package-card');
        if (!packageCards.length) return;

        // Initialize defaults immediately
        initializeDefaults();
    }

    // Expose functions globally for inline handlers (temporary)
    window.selectDuration = selectDuration;
    window.toggleAddon = toggleAddon;
    window.purchasePackage = purchasePackage;

    // Initialize
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', init);
    } else {
        init();
    }
})();