/* ========================================================= 🎯 AI RETURN VISITOR OPTIMIZER v2.5 - CROSS-PLATFORM EDITION ΒΑΣΙΚΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ v2.0 (ΠΛΗΡΩΣ ΔΙΑΤΗΡΗΜΕΝΑ): - Μετρητής για 4 φυσικές σφυρίχτρες - Έξυπνη επιλογή 4 πιο πιθανών αγοραστών - Βελτιστοποίηση Google Adsense - Πλήρη χαρακτηριστικά v1.2 ΝΕΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ: - Ενσωμάτωση YouTube καναλιού (@e_repellent_com) - Αμφίδρομη απόδοση μετά από 4 ημέρες - Ανίχνευση προέλευσης επισκέπτη ========================================================= */ (function() { 'use strict'; if (window.__RETURN_VISITOR_OPTIMIZER_V25__) return; window.__RETURN_VISITOR_OPTIMIZER_V25__ = true; const CONFIG = { // ΠΑΡΑΜΕΤΡΟΣ ΠΑΡΑΓΓΕΛΙΩΝ: ΑΛΛΑΞΤΕ ΤΟΝ ΑΡΙΘΜΟ ΓΙΑ ΝΑ ΟΡΙΣΕΤΕ ΠΟΣΕΣ ΦΥΣΙΚΕΣ ΣΦΥΡΙΧΤΡΕΣ ΘΕΛΕΤΕ ΝΑ ΠΟΥΛΗΣΕΤΕ physicalWhistlesToSell: 4, // ΟΡΙΣΤΕ ΕΔΩ ΤΟΝ ΑΡΙΘΜΟ ΤΩΝ ΠΑΡΑΓΓΕΛΙΩΝ (Π.Χ. 4) returnThreshold: 7 * 24 * 60 * 60 * 1000, revisitReminder: 3 * 24 * 60 * 60 * 1000, returnWindowHours: 7, adRefreshInterval: 30000, // Ανανέωση Adsense κάθε 30 δευτερόλεπτα για αυξημένα έσοδα // ΝΕΟ: Ρυθμίσεις καναλιών channels: { youtube: { name: 'YouTube', url: 'https://youtube.com/@e_repellent_com?si=WHNpV5rq6ZFeRsC_', handle: '@e_repellent_com', icon: '📺', returnDays: 4, // Επιστροφή μετά από 4 μέρες returnMessage: '🎬 Επιστρέψτε στο YouTube για νέα βίντεο!' }, tiktok: { name: 'TikTok', url: 'https://tiktok.com/@e_repellent_com', // ΒΑΛΤΕ ΤΟ ΣΩΣΤΟ LINK handle: '@e_repellent_com', icon: '🎵', returnDays: 4, // Επιστροφή μετά από 4 μέρες returnMessage: '🎵 Μην χάσετε τα νέα βίντεο στο TikTok!' } }, incentives: { firstReturn: { type: 'discount', value: '10%', message: 'Επιστρέψατε! Απολαύστε 10% έκπτωση στην επόμενη αγορά σας' }, loyaltyPoints: true, exclusiveContent: true }, useCookies: true, useLocalStorage: true, useSessionStorage: true, enableReminders: true, reminderMethods: ['email', 'push'], popupDelay: 5000, exitIntent: true, enableGamification: true, returnStreak: true, useAIScoring: true, tiktokLinks: ['tiktok.com', 'vm.tiktok.com'] }; const isLocalStorageAvailable = () => { try { return 'localStorage' in window && window.localStorage !== null; } catch { return false; } }; // ΝΕΟ: Ανίχνευση προέλευσης επισκέπτη const SourceDetector = { getSource: function() { // Έλεγχος referrer const referrer = document.referrer || ''; if (referrer.includes('youtube.com') || referrer.includes('youtu.be')) { return 'youtube'; } if (referrer.includes('tiktok.com') || referrer.includes('vm.tiktok.com')) { return 'tiktok'; } // Έλεγχος URL parameters const urlParams = new URLSearchParams(window.location.search); if (urlParams.get('source') === 'youtube') return 'youtube'; if (urlParams.get('source') === 'tiktok') return 'tiktok'; // Έλεγχος cookies για προηγούμενη επίσκεψη const lastSource = this.getCookie('last_source'); if (lastSource) return lastSource; return 'direct'; }, getCookie: function(name) { const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)')); return match ? match[2] : null; }, setSourceCookie: function(source) { document.cookie = `last_source=${source}; max-age=2592000; path=/`; // 30 μέρες }, // Έλεγχος αν πρέπει να προτρέψουμε για επιστροφή (μετά από 4 μέρες) shouldPromptReturn: function(visitor) { if (!visitor || !visitor.source || visitor.source === 'direct') return false; const daysSinceLastChannelVisit = (Date.now() - (visitor.lastChannelVisit || 0)) / (24 * 60 * 60 * 1000); const targetDays = CONFIG.channels[visitor.source]?.returnDays || 4; return daysSinceLastChannelVisit >= targetDays; } }; const VisitorDB = { getVisitorId: function() { if (!isLocalStorageAvailable()) return 'visitor_' + Date.now(); let visitorId = localStorage.getItem('visitor_unique_id_v25'); if (!visitorId) { visitorId = 'visitor_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9); localStorage.setItem('visitor_unique_id_v25', visitorId); } return visitorId; }, data: null, load: function() { try { if (!isLocalStorageAvailable()) { this.data = this.getDefaultData(); return this.data; } const stored = localStorage.getItem('visitor_return_data_v25'); this.data = stored ? JSON.parse(stored) : this.getDefaultData(); } catch (e) { this.data = this.getDefaultData(); } return this.data; }, save: function() { try { if (!isLocalStorageAvailable() || !this.data) return; localStorage.setItem('visitor_return_data_v25', JSON.stringify(this.data)); // Αποθήκευση πηγής και σε cookie if (this.data.source) { SourceDetector.setSourceCookie(this.data.source); } } catch (e) {} }, getDefaultData: function() { const source = SourceDetector.getSource(); return { visitorId: this.getVisitorId(), // ΝΕΟ: Πληροφορίες προέλευσης source: source, // 'youtube', 'tiktok', ή 'direct' firstVisit: Date.now(), lastVisit: Date.now(), // ΝΕΟ: Τελευταία επίσκεψη από κανάλι lastChannelVisit: Date.now(), visitCount: 1, returnCount: 0, totalVisits: 1, pagesViewed: [window.location.pathname], timeOnSite: 0, returnProbability: 0, incentivesClaimed: [], email: null, phone: null, returnStreak: 0, longestStreak: 0, preferences: {}, conversionIntent: 0, lastInteraction: Date.now(), reminderSent: false, returnScore: 0, abandonedCart: false, lastVisitDate: new Date().toDateString(), lastVisitTimestamp: Date.now(), // ΝΕΑ ΠΕΔΙΑ ΓΙΑ ΤΟΝ ΜΕΤΡΗΤΗ ΠΑΡΑΓΓΕΛΙΩΝ purchaseIntent: 0, productInterest: { physicalWhistle: 0 }, adInteractions: 0, scrollDepth: 0, cursorHeatmap: [], timeOnProductPages: 0, quickReturns: 0, // Μετρητής παραγγελιών orders: { physicalWhistle: { count: 0, target: CONFIG.physicalWhistlesToSell, completed: false } }, // ΝΕΟ: Στατιστικά ανά κανάλι channelVisits: { youtube: source === 'youtube' ? 1 : 0, tiktok: source === 'tiktok' ? 1 : 0, direct: source === 'direct' ? 1 : 0 }, // ΝΕΟ: Πότε έκανε τελευταία φορά return στο κάθε κανάλι lastChannelReturn: { youtube: null, tiktok: null } }; } }; // ΝΕΟ: Σύστημα cross-platform προτροπών const CrossPlatformPrompter = { init: function(visitor) { if (!visitor) return; // Ενημέρωση στατιστικών καναλιού if (visitor.source !== 'direct') { visitor.channelVisits[visitor.source] = (visitor.channelVisits[visitor.source] || 0) + 1; visitor.lastChannelVisit = Date.now(); VisitorDB.save(); } // Έλεγχος για προτροπή επιστροφής (μετά από 4 μέρες) if (SourceDetector.shouldPromptReturn(visitor) && visitor.source !== 'direct') { this.showReturnPrompt(visitor); } // Εμφάνιση welcome message με βάση την πηγή (μόνο για πρώτη επίσκεψη) if (visitor.visitCount === 1 && visitor.source !== 'direct') { this.showWelcomeMessage(visitor); } }, showWelcomeMessage: function(visitor) { if (!visitor || !visitor.source) return; const channel = CONFIG.channels[visitor.source]; if (!channel) return; try { const welcome = document.createElement('div'); welcome.style.cssText = ` position: fixed; top: 20px; left: 50%; transform: translateX(-50%); background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 15px 30px; border-radius: 50px; box-shadow: 0 5px 20px rgba(0,0,0,0.2); z-index: 999999; font-family: Arial, sans-serif; animation: slideDown 0.5s ease; display: flex; align-items: center; gap: 10px; `; welcome.innerHTML = ` ${channel.icon}
Επιστρέψτε σε 4 μέρες για αποκλειστική προσφορά!
Έχουν περάσει 4 μέρες από την τελευταία σας επίσκεψη στο κανάλι μας!
Νέα βίντεο σας περιμένουν!
🔊 Φυσικές σφυρίχτρες:
${remainingWhistles}
* Επιστρέφοντας, κερδίστε πόντους επιβράβευσης!
`; document.body.appendChild(prompt); // Ανανέωση του lastChannelReturn visitor.lastChannelReturn[visitor.source] = Date.now(); VisitorDB.save(); setTimeout(() => { if (prompt.parentNode) prompt.remove(); }, 30000); } catch (e) {} } }; // OrderTracker - ΠΛΗΡΩΣ ΔΙΑΤΗΡΗΜΕΝΟ από v2.0 const OrderTracker = { getRemainingWhistles: function() { const visitor = VisitorDB.load(); if (!visitor || !visitor.orders) return CONFIG.physicalWhistlesToSell; const sold = visitor.orders.physicalWhistle?.count || 0; return Math.max(0, CONFIG.physicalWhistlesToSell - sold); }, isWhistleSoldOut: function() { return this.getRemainingWhistles() <= 0; }, registerWhistlePurchase: function(visitorId) { try { const visitors = this.getAllVisitors(); let updated = false; Object.keys(visitors).forEach(id => { const visitorData = visitors[id]; if (visitorData && visitorData.orders) { if (id === visitorId || visitorData.visitorId === visitorId) { if (!visitorData.orders.physicalWhistle.completed) { visitorData.orders.physicalWhistle.count++; if (visitorData.orders.physicalWhistle.count >= CONFIG.physicalWhistlesToSell) { visitorData.orders.physicalWhistle.completed = true; this.optimizeForRemainingVisitors(); } this.saveAllVisitors(visitors); updated = true; } } } }); return updated; } catch (e) { console.warn('Error registering purchase:', e); return false; } }, getAllVisitors: function() { try { const allData = localStorage.getItem('all_visitors_data_v25'); return allData ? JSON.parse(allData) : {}; } catch { return {}; } }, saveAllVisitors: function(visitors) { try { localStorage.setItem('all_visitors_data_v25', JSON.stringify(visitors)); } catch (e) {} }, optimizeForRemainingVisitors: function() { console.log('🎯 Target παραγγελιών συμπληρώθηκε! Βελτιστοποίηση για Adsense...'); if (typeof window.googletag !== 'undefined') { try { window.googletag.cmd.push(function() { const adSlots = window.googletag.pubads().getSlots(); adSlots.forEach(slot => { slot.setTargeting('visitor_type', 'ad_optimized'); }); window.googletag.pubads().refresh(adSlots); }); } catch (e) {} } }, getTopBuyerCandidates: function(limit = 4) { const visitors = this.getAllVisitors(); const candidates = []; Object.values(visitors).forEach(visitor => { if (visitor && !visitor.orders?.physicalWhistle?.completed) { const score = this.calculateBuyerScore(visitor); candidates.push({ visitor: visitor, score: score, id: visitor.visitorId }); } }); candidates.sort((a, b) => b.score - a.score); return candidates.slice(0, limit); }, calculateBuyerScore: function(visitor) { if (!visitor) return 0; let score = 0; score += (visitor.purchaseIntent || 0) * 30; score += (visitor.productInterest?.physicalWhistle || 0) * 25; score += Math.min(25, (visitor.timeOnProductPages || 0) / 120000); score += Math.min(15, (visitor.scrollDepth || 0) * 1.5); score += Math.min(10, (visitor.adInteractions || 0) * 5); if (visitor.returnCount > 0) score += 10; if (visitor.returnStreak > 2) score += 5; const pageViews = visitor.pagesViewed || []; if (pageViews.some(page => page.includes('whistle') || page.includes('σφυρίχτρα'))) { score += 20; } return Math.min(100, score); }, trackProductInterest: function(visitor) { if (!visitor) return; const pageContent = document.body?.innerText || ''; const whistleKeywords = ['σφυρίχτρα', 'whistle', 'φυσική σφυρίχτρα', 'physical whistle']; let interestBoost = 0; whistleKeywords.forEach(keyword => { if (pageContent.toLowerCase().includes(keyword.toLowerCase())) { interestBoost += 0.05; } }); visitor.productInterest.physicalWhistle = Math.min(1, (visitor.productInterest.physicalWhistle || 0) + interestBoost ); this.trackWhistleClicks(visitor); VisitorDB.save(); }, trackWhistleClicks: function(visitor) { document.querySelectorAll('a, button, .product, img').forEach(element => { if (!element.hasAttribute('data-whistle-tracked')) { element.addEventListener('click', function(e) { const text = e.target.innerText || e.target.alt || ''; if (text.toLowerCase().includes('σφυρίχτρ') || text.toLowerCase().includes('whistle')) { visitor.purchaseIntent = Math.min(1, (visitor.purchaseIntent || 0) + 0.1); visitor.productInterest.physicalWhistle = Math.min(1, (visitor.productInterest.physicalWhistle || 0) + 0.15 ); VisitorDB.save(); } }); element.setAttribute('data-whistle-tracked', 'true'); } }); } }; // AdsenseOptimizer - ΠΛΗΡΩΣ ΔΙΑΤΗΡΗΜΕΝΟ από v2.0 const AdsenseOptimizer = { init: function() { this.enhanceAdPerformance(); this.trackAdInteractions(); this.setupAdRefresh(); }, enhanceAdPerformance: function() { const visitor = VisitorDB.load(); if (!visitor) return; const remainingWhistles = OrderTracker.getRemainingWhistles(); if (remainingWhistles <= 0) { this.maximizeAdRevenue(visitor); } else { this.targetPotentialBuyers(visitor); } }, maximizeAdRevenue: function(visitor) { console.log('📊 Λειτουργία μεγιστοποίησης Adsense ενεργοποιημένη'); if (!visitor.orders?.physicalWhistle?.completed) { visitor.adInteractions = (visitor.adInteractions || 0) + 1; this.injectAdOpportunities(); } }, targetPotentialBuyers: function(visitor) { const topCandidates = OrderTracker.getTopBuyerCandidates(4); const isTopCandidate = topCandidates.some(c => c.id === visitor.visitorId); if (isTopCandidate) { this.showWhistleOffer(visitor); } else { visitor.adInteractions = (visitor.adInteractions || 0) + 1; } }, showWhistleOffer: function(visitor) { try { if (document.getElementById('whistleOffer')) return; const offerDiv = document.createElement('div'); offerDiv.id = 'whistleOffer'; offerDiv.style.cssText = ` position: fixed; bottom: 20px; left: 20px; background: linear-gradient(135deg, #FF6B6B 0%, #4ECDC4 100%); color: white; padding: 20px; border-radius: 15px; box-shadow: 0 10px 30px rgba(0,0,0,0.2); z-index: 1000000; max-width: 320px; font-family: Arial, sans-serif; animation: slideUp 0.5s ease; cursor: pointer; `; const remaining = OrderTracker.getRemainingWhistles(); offerDiv.innerHTML = `Μόνο ${remaining} διαθέσιμες! Αποκλειστική προσφορά για εσάς.
✅ Ευχαριστούμε για την αγορά σας!
'; setTimeout(() => offerDiv.remove(), 2000); }; } catch (e) { console.warn('Offer show failed:', e); } }, injectAdOpportunities: function() { const contentElements = document.querySelectorAll('p, h2, h3, .content'); contentElements.forEach((el, index) => { if (index % 5 === 0 && !el.querySelector('.ad-injected')) { const adBadge = document.createElement('span'); adBadge.className = 'ad-injected'; adBadge.style.cssText = ` display: inline-block; background: #f8f9fa; color: #6c757d; font-size: 11px; padding: 2px 6px; border-radius: 3px; margin-left: 5px; cursor: pointer; `; adBadge.innerHTML = '📢 Διαφήμιση'; adBadge.onclick = () => { const visitor = VisitorDB.load(); if (visitor) { visitor.adInteractions = (visitor.adInteractions || 0) + 1; VisitorDB.save(); } }; el.appendChild(adBadge); } }); }, trackAdInteractions: function() { document.addEventListener('click', function(e) { if (e.target.closest('.adsbygoogle') || e.target.closest('[class*="ad"]') || e.target.classList.contains('ad-injected')) { const visitor = VisitorDB.load(); if (visitor) { visitor.adInteractions = (visitor.adInteractions || 0) + 1; visitor.purchaseIntent = Math.max(0, (visitor.purchaseIntent || 0) - 0.02); VisitorDB.save(); } } }); }, setupAdRefresh: function() { setInterval(() => { const remaining = OrderTracker.getRemainingWhistles(); if (remaining <= 0) { if (typeof window.googletag !== 'undefined') { try { window.googletag.cmd.push(function() { window.googletag.pubads().refresh(); }); } catch (e) {} } } }, CONFIG.adRefreshInterval); } }; // ReturnAI - ΠΛΗΡΩΣ ΔΙΑΤΗΡΗΜΕΝΟ από v2.0 const ReturnAI = { calculateReturnProbability: function(visitor) { if (!visitor) return 0.5; let probability = 0.5; if (visitor.visitCount > 1) { probability += 0.15; if (visitor.visitCount > 3) probability += 0.1; if (visitor.visitCount > 10) probability += 0.1; } const timeScore = Math.min(0.2, (visitor.timeOnSite || 0) / 600000); probability += timeScore; const pageScore = Math.min(0.15, (visitor.pagesViewed || []).length / 10); probability += pageScore; if (visitor.returnCount > 0) { probability += 0.2; probability += Math.min(0.1, (visitor.returnStreak || 0) * 0.02); } if (visitor.email) probability += 0.25; if (visitor.phone) probability += 0.2; probability += (visitor.conversionIntent || 0) * 0.5; probability += (visitor.productInterest?.physicalWhistle || 0) * 0.3; const hoursSinceLast = (Date.now() - (visitor.lastVisitTimestamp || Date.now())) / (60 * 60 * 1000); if (hoursSinceLast < CONFIG.returnWindowHours) { probability += 0.3; } else if (hoursSinceLast < 24) { probability += 0.15; } else if (hoursSinceLast < 48) { probability += 0.05; } return Math.min(0.99, Math.max(0.01, probability)); }, getPersonalizedMessage: function(visitor, probability) { if (!CONFIG.incentives || !visitor) return null; const messages = []; const remaining = OrderTracker.getRemainingWhistles(); if (remaining > 0 && remaining <= 2) { messages.push({ type: 'limited', message: `⏰ Μόνο ${remaining} φυσικές σφυρίχτρες απέμειναν!`, incentive: 'Δωρεάν μεταφορικά για άμεση αγορά' }); } if (visitor.visitCount === 1) { messages.push({ type: 'welcome', message: 'Καλώς ήρθατε! Εγγραφείτε για να λαμβάνετε αποκλειστικές προσφορές', incentive: '10% έκπτωση στο πρώτο σας email' }); } if (visitor.returnCount > 0) { const hoursSinceLast = (Date.now() - (visitor.lastVisitTimestamp || Date.now())) / (60 * 60 * 1000); let returnMessage = `Χαίρομαι που σας βλέπω ξανά! Αυτή είναι η ${visitor.visitCount}η επίσκεψή σας`; if (hoursSinceLast < CONFIG.returnWindowHours) { returnMessage = `Ουάου! Επιστρέψατε μέσα σε ${Math.round(hoursSinceLast)} ώρες! Εντυπωσιακό!`; } messages.push({ type: 'return', message: returnMessage, incentive: 'Πόντοι επιβράβευσης x2 σήμερα' }); } return messages.length > 0 ? messages[Math.floor(Math.random() * messages.length)] : null; } }; // IncentiveEngine - ΠΛΗΡΩΣ ΔΙΑΤΗΡΗΜΕΝΟ από v2.0 const IncentiveEngine = { offerReturnIncentive: function(visitor) { if (!visitor) return []; const incentives = []; const remaining = OrderTracker.getRemainingWhistles(); if (remaining > 0) { incentives.push({ type: 'whistle', value: 'Φυσική Σφυρίχτρα', message: `Αποκλειστική προσφορά: Μόνο ${remaining} διαθέσιμες!`, code: 'WHISTLE20' }); } if (visitor.returnCount === 0) { incentives.push({ type: 'discount', value: '10%', code: 'WELCOMEBACK10', message: '10% έκπτωση', expires: new Date(Date.now() + 7*24*60*60*1000).toLocaleDateString() }); } const hoursSinceLast = (Date.now() - (visitor.lastVisitTimestamp || Date.now())) / (60 * 60 * 1000); if (hoursSinceLast < CONFIG.returnWindowHours && visitor.visitCount > 1) { incentives.push({ type: 'quickReturn', value: '20%', code: 'QUICKRETURN20', message: '20% έκπτωση για γρήγορη επιστροφή!' }); } return incentives; }, getGamificationStatus: function(visitor) { if (!CONFIG.enableGamification || !visitor) return null; return { level: Math.floor((visitor.visitCount || 1) / 5) + 1, points: (visitor.visitCount || 1) * 100, nextLevelAt: (Math.floor((visitor.visitCount || 1) / 5) + 1) * 5, streak: visitor.returnStreak || 0, badges: this.getBadges(visitor) }; }, getBadges: function(visitor) { if (!visitor) return []; const badges = []; if (visitor.visitCount >= 5) badges.push('Τακτικός Επισκέπτης'); if (visitor.visitCount >= 20) badges.push('VIP Member'); if (visitor.returnStreak >= 7) badges.push('Streak Master'); if (visitor.timeOnSite > 600000) badges.push('Εξερευνητής'); if (visitor.productInterest?.physicalWhistle > 0.7) badges.push('Ενδιαφέρον για Σφυρίχτρα'); if (visitor.quickReturns >= 3) badges.push('Speed Demon'); if (visitor.orders?.physicalWhistle?.completed) badges.push('Αγοραστής Σφυρίχτρας'); return badges; } }; // ReminderSystem - ΠΛΗΡΩΣ ΔΙΑΤΗΡΗΜΕΝΟ από v2.0 const ReminderSystem = { showReminderPopup: function(visitor) { if (!CONFIG.enableReminders || !visitor) return; if (visitor.reminderSent) return; if (visitor.email || visitor.phone) return; try { const popup = document.createElement('div'); popup.style.cssText = ` position: fixed; bottom: 20px; right: 20px; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 20px; border-radius: 10px; box-shadow: 0 5px 20px rgba(0,0,0,0.2); z-index: 999999; max-width: 300px; font-family: Arial, sans-serif; `; popup.innerHTML = `Θέλετε να σας ενημερώνουμε για προσφορές και νέα;
✅ Ευχαριστούμε! Θα σας ειδοποιήσουμε για νέα και προσφορές.
'; setTimeout(() => popup.remove(), 3000); } } }; } if (closeBtn) { closeBtn.onclick = function() { popup.remove(); }; } } catch (e) {} }, scheduleReminder: function(visitor) { if (!visitor || (!visitor.email && !visitor.phone)) return; const lastVisit = visitor.lastVisit || Date.now(); const daysSince = (Date.now() - lastVisit) / (24 * 60 * 60 * 1000); if (daysSince >= 3 && !visitor.reminderSent) { console.log('🔔 Υπενθύμιση αποστολής σε:', visitor.email || visitor.phone); visitor.reminderSent = true; VisitorDB.save(); } } }; // ExitIntent - ΠΛΗΡΩΣ ΔΙΑΤΗΡΗΜΕΝΟ από v2.0 const ExitIntent = { init: function(visitor) { if (!CONFIG.exitIntent || !visitor) return; let mouseLeaveTimer; document.addEventListener('mouseleave', function(e) { clearTimeout(mouseLeaveTimer); mouseLeaveTimer = setTimeout(() => { if (e.clientY < 10) { ExitIntent.showExitPopup(visitor); } }, 100); }); }, showExitPopup: function(visitor) { if (!visitor) return; if (document.getElementById('exitPopup')) return; try { const popup = document.createElement('div'); popup.id = 'exitPopup'; popup.style.cssText = ` position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background: white; padding: 30px; border-radius: 15px; box-shadow: 0 10px 40px rgba(0,0,0,0.3); z-index: 1000000; max-width: 400px; text-align: center; font-family: Arial, sans-serif; `; const probability = ReturnAI.calculateReturnProbability(visitor); const incentives = IncentiveEngine.offerReturnIncentive(visitor); const remaining = OrderTracker.getRemainingWhistles(); let incentivesHtml = ''; if (incentives.length > 0) { const incentive = incentives[0]; incentivesHtml = `Μόνο για εσάς:
🎁 ${incentive.message || 'Προσφορά επιστροφής'}
${incentive.code ? `Κωδικός: ${incentive.code}
` : ''}${probability > 0.7 ? 'Φαίνεται ότι σας αρέσει αυτό που βλέπετε!' : 'Μην φύγετε χωρίς την προσφορά σας!'}
${remaining > 0 ? `🔊 Μόνο ${remaining} φυσικές σφυρίχτρες απέμειναν!
` : ''} ${incentivesHtml}Επιστρέψτε μέσα στις επόμενες 7 ώρες για ακόμα καλύτερες προσφορές!
`; document.body.appendChild(popup); setTimeout(() => { const exitPopup = document.getElementById('exitPopup'); if (exitPopup) exitPopup.remove(); }, 10000); } catch (e) {} } }; // TikTokHandler - ΠΛΗΡΩΣ ΔΙΑΤΗΡΗΜΕΝΟ από v2.0 (με μικρή προσθήκη YouTube link) const TikTokHandler = { isTikTokLink: function(url) { if (!url) return false; return CONFIG.tiktokLinks.some(domain => url.includes(domain)); }, init: function() { this.observeNewLinks(); this.processExistingLinks(); }, processExistingLinks: function() { const allLinks = document.getElementsByTagName('a'); Array.from(allLinks).forEach(link => { if (this.isTikTokLink(link.href)) { this.modifyTikTokLink(link); } }); }, observeNewLinks: function() { const observer = new MutationObserver((mutations) => { mutations.forEach((mutation) => { if (mutation.addedNodes) { mutation.addedNodes.forEach((node) => { if (node.nodeName === 'A' && this.isTikTokLink(node.href)) { this.modifyTikTokLink(node); } if (node.querySelectorAll) { const links = node.querySelectorAll('a'); links.forEach(link => { if (this.isTikTokLink(link.href)) { this.modifyTikTokLink(link); } }); } }); } }); }); observer.observe(document.body, { childList: true, subtree: true }); }, modifyTikTokLink: function(linkElement) { if (linkElement.hasAttribute('data-tiktok-modified-v25')) return; const originalHref = linkElement.href; linkElement.addEventListener('click', (e) => { e.preventDefault(); const visitor = VisitorDB.load(); const remaining = OrderTracker.getRemainingWhistles(); const hoursSinceLast = visitor.lastVisitTimestamp ? (Date.now() - visitor.lastVisitTimestamp) / (60 * 60 * 1000) : 24; const popup = document.createElement('div'); popup.style.cssText = ` position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background: linear-gradient(135deg, #25F4EE 0%, #FE2C55 100%); color: white; padding: 30px; border-radius: 15px; box-shadow: 0 10px 40px rgba(0,0,0,0.3); z-index: 1000000; max-width: 400px; text-align: center; font-family: Arial, sans-serif; `; popup.innerHTML = `
Είστε πολύ ευχαριστημένος/η με αυτό που είδατε;
Στείλτε μου τον αριθμό του κινητού σας σε μήνυμα στο TikTok!
🔊 Μόνο ${remaining} φυσικές σφυρίχτρες απέμειναν!
` : ''}
Αν δεν είστε ακόμη έτοιμος/η να αγοράσετε τη φυσική σφυρίχτρα στο e-shop,
κάντε κοινοποίηση των βίντεο στο προφίλ μου στο TikTok!
🌟 Επιστρέψατε γρήγορα! Μπόνους προσφορά 20%!
' : 'Επιστρέψτε μέσα σε 7 ώρες για έξτρα προσφορές!
'}📺 Μην ξεχνάτε και το YouTube: @e_repellent_com
Φυσική Σφυρίχτρα Υψηλής Ποιότητας
Ιδανική για εξωτερικές δραστηριότητες
Διαθέσιμες:
${remaining}
* Προσφορά μόνο για τους πιο ενεργούς επισκέπτες
`; document.body.appendChild(offerDiv); document.getElementById('buyWhistleBtn').onclick = function() { visitor.orders.physicalWhistle.count++; OrderTracker.registerWhistlePurchase(visitor.visitorId); offerDiv.innerHTML = `✅
Ευχαριστούμε για την αγορά σας!
Η παραγγελία σας καταχωρήθηκε.
Εγγραφείτε τώρα και κερδίστε 10% έκπτωση στην πρώτη σας αγορά!
`; document.body.appendChild(banner); setTimeout(() => banner.remove(), 15000); } catch (e) {} }, showAchievement: function(visitor, gameStatus) { if (!visitor || !gameStatus) return; try { const badge = document.createElement('div'); badge.style.cssText = ` position: fixed; top: 20px; left: 50%; transform: translateX(-50%); background: #FFD700; color: #333; padding: 15px 30px; border-radius: 50px; box-shadow: 0 5px 20px rgba(255,215,0,0.3); z-index: 999999; font-family: Arial, sans-serif; animation: slideDown 0.5s ease; `; badge.innerHTML = ` 🏆 Επίτευγμα! Επίπεδο ${gameStatus.level} | ${gameStatus.points} πόντοι | Streak: ${gameStatus.streak} ημέρες ${visitor.quickReturns >= 3 ? ' | ⚡ Speed Demon' : ''} ${visitor.productInterest?.physicalWhistle > 0.7 ? ' | 🔊 Ενδιαφέρον για Σφυρίχτρα' : ''} `; document.body.appendChild(badge); setTimeout(() => badge.remove(), 5000); } catch (e) {} }, trackReturnMetrics: function(visitor) { if (!visitor) return; if (typeof gtag !== 'undefined') { try { gtag('event', 'return_visitor_metrics_v25', { 'visit_count': visitor.visitCount || 0, 'return_count': visitor.returnCount || 0, 'return_probability': Math.round((visitor.returnProbability || 0) * 100), 'purchase_intent': Math.round((visitor.purchaseIntent || 0) * 100), 'whistle_interest': Math.round((visitor.productInterest?.physicalWhistle || 0) * 100), 'streak_days': visitor.returnStreak || 0, 'quick_returns': visitor.quickReturns || 0, 'has_email': visitor.email ? 1 : 0, 'pages_viewed': (visitor.pagesViewed || []).length, 'time_on_site_seconds': Math.round((visitor.timeOnSite || 0) / 1000), 'ad_interactions': visitor.adInteractions || 0, // ΝΕΟ metrics 'source': visitor.source || 'direct', 'youtube_visits': visitor.channelVisits?.youtube || 0, 'tiktok_visits': visitor.channelVisits?.tiktok || 0 }); } catch (e) {} } } }; // Προσθήκη custom animations const style = document.createElement('style'); style.textContent = ` @keyframes slideIn { from { transform: translateX(100px); opacity: 0; } to { transform: translateX(0); opacity: 1; } } @keyframes slideInRight { from { transform: translateX(100px); opacity: 0; } to { transform: translateX(0); opacity: 1; } } @keyframes slideDown { from { transform: translate(-50%, -100px); opacity: 0; } to { transform: translate(-50%, 0); opacity: 1; } } @keyframes slideUp { from { transform: translateY(100px); opacity: 0; } to { transform: translateY(0); opacity: 1; } } `; document.head.appendChild(style); // Παρακολούθηση χρόνου στη σελίδα let startTime = Date.now(); const timeInterval = setInterval(() => { try { const visitor = VisitorDB.load(); if (visitor) { visitor.timeOnSite = Date.now() - startTime; const scrollPercent = (window.scrollY / (document.documentElement.scrollHeight - window.innerHeight)) * 100; if (scrollPercent > visitor.scrollDepth) { visitor.scrollDepth = scrollPercent; } VisitorDB.save(); } } catch (e) {} }, 5000); // Παρακολούθηση φόρτωσης σελίδας window.addEventListener('load', () => { try { const visitor = VisitorDB.load(); if (visitor) { const currentPath = window.location.pathname; if (!visitor.pagesViewed.includes(currentPath)) { visitor.pagesViewed.push(currentPath); if (currentPath.includes('product') || currentPath.includes('whistle') || currentPath.includes('σφυρίχτρα')) { visitor.timeOnProductPages = (visitor.timeOnProductPages || 0) + 1; } VisitorDB.save(); } } } catch (e) {} }); // Καθαρισμός interval κατά την αποχώρηση window.addEventListener('beforeunload', function() { clearInterval(timeInterval); try { const visitor = VisitorDB.load(); if (visitor) { visitor.timeOnSite = Date.now() - startTime; VisitorDB.save(); } } catch (e) {} }); // Εκκίνηση του optimizer ReturnOptimizer.init(); })();