/* =========================================================
🎯 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}
Καλωσήρθατε από το ${channel.name}!
Επιστρέψτε σε 4 μέρες για αποκλειστική προσφορά!
✕
`;
document.body.appendChild(welcome);
setTimeout(() => welcome.remove(), 8000);
} catch (e) {}
},
showReturnPrompt: function(visitor) {
if (!visitor || !visitor.source) return;
if (document.getElementById('returnPrompt')) return;
const channel = CONFIG.channels[visitor.source];
if (!channel) return;
try {
const prompt = document.createElement('div');
prompt.id = 'returnPrompt';
prompt.style.cssText = `
position: fixed;
bottom: 30px;
left: 50%;
transform: translateX(-50%);
background: linear-gradient(135deg, #FF6B6B 0%, #4ECDC4 100%);
color: white;
padding: 25px;
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;
animation: slideUp 0.5s ease;
`;
const remainingWhistles = OrderTracker.getRemainingWhistles();
prompt.innerHTML = `
${channel.icon}
${channel.returnMessage}
Έχουν περάσει 4 μέρες από την τελευταία σας επίσκεψη στο κανάλι μας!
Νέα βίντεο σας περιμένουν!
${remainingWhistles > 0 ? `
🔊 Φυσικές σφυρίχτρες:
${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} διαθέσιμες! Αποκλειστική προσφορά για εσάς.
Αγορά Τώρα
Αργότερα
`;
document.body.appendChild(offerDiv);
setTimeout(() => {
if (offerDiv.parentNode) offerDiv.remove();
}, 30000);
offerDiv.querySelector('button:first-child').onclick = function() {
visitor.orders.physicalWhistle.count++;
OrderTracker.registerWhistlePurchase(visitor.visitorId);
offerDiv.innerHTML = '✅ Ευχαριστούμε για την αγορά σας!
';
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 = `
🔔 Μην χάσετε νέα!
Θέλετε να σας ενημερώνουμε για προσφορές και νέα;
Υπενθύμιση
✕
Κερδίστε 10% έκπτωση με την εγγραφή!
`;
document.body.appendChild(popup);
const saveBtn = document.getElementById('saveReminder');
const closeBtn = document.getElementById('closeReminder');
if (saveBtn) {
saveBtn.onclick = function() {
const emailInput = document.getElementById('reminderEmail');
const phoneInput = document.getElementById('reminderPhone');
if (emailInput && phoneInput) {
const email = emailInput.value;
const phone = phoneInput.value;
if (email || phone) {
if (email) visitor.email = email;
if (phone) visitor.phone = phone;
visitor.reminderSent = true;
VisitorDB.save();
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}
` : ''}
`;
}
const hoursSinceLast = visitor.lastVisitTimestamp ?
(Date.now() - visitor.lastVisitTimestamp) / (60 * 60 * 1000) : 24;
popup.innerHTML = `
⏳ Περιμένετε!
${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
Είστε πολύ ευχαριστημένος/η με αυτό που είδατε;
Στείλτε μου τον αριθμό του κινητού σας σε μήνυμα στο TikTok!
${remaining > 0 ? `
🔊 Μόνο ${remaining} φυσικές σφυρίχτρες απέμειναν!
` : ''}
Αν δεν είστε ακόμη έτοιμος/η να αγοράσετε τη φυσική σφυρίχτρα στο e-shop,
κάντε κοινοποίηση των βίντεο στο προφίλ μου στο TikTok!
${hoursSinceLast < CONFIG.returnWindowHours ?
'🌟 Επιστρέψατε γρήγορα! Μπόνους προσφορά 20%!
' :
'Επιστρέψτε μέσα σε 7 ώρες για έξτρα προσφορές!
'}
📺 Μην ξεχνάτε και το YouTube: @e_repellent_com
Συνέχεια στο TikTok
Αργότερα
`;
document.body.appendChild(popup);
setTimeout(() => {
if (popup.parentNode) popup.remove();
}, 15000);
});
linkElement.setAttribute('data-tiktok-modified-v25', 'true');
}
};
const ReturnOptimizer = {
init: function() {
try {
const visitor = VisitorDB.load();
if (!visitor) return;
const now = Date.now();
const timeSinceLast = now - (visitor.lastVisitTimestamp || now);
const hoursSinceLast = timeSinceLast / (60 * 60 * 1000);
if (hoursSinceLast <= CONFIG.returnWindowHours && visitor.visitCount > 0) {
visitor.returnCount = (visitor.returnCount || 0) + 1;
visitor.returnStreak = (visitor.returnStreak || 0) + 1;
visitor.quickReturns = (visitor.quickReturns || 0) + 1;
if (visitor.returnStreak > (visitor.longestStreak || 0)) {
visitor.longestStreak = visitor.returnStreak;
}
} else if (hoursSinceLast > CONFIG.returnWindowHours) {
visitor.returnStreak = 0;
}
visitor.lastVisit = now;
visitor.lastVisitTimestamp = now;
visitor.lastVisitDate = new Date().toDateString();
visitor.visitCount = (visitor.visitCount || 0) + 1;
visitor.totalVisits = (visitor.totalVisits || 0) + 1;
// Παρακολούθηση ενδιαφέροντος για προϊόντα
OrderTracker.trackProductInterest(visitor);
// Υπολογισμός πιθανότητας αγοράς
visitor.purchaseIntent = OrderTracker.calculateBuyerScore(visitor) / 100;
visitor.returnProbability = ReturnAI.calculateReturnProbability(visitor);
VisitorDB.save();
// ΝΕΟ: Cross-platform προτροπές
CrossPlatformPrompter.init(visitor);
// Ενέργειες με βάση την πιθανότητα
this.actOnProbability(visitor);
// Εμφάνιση popup για νέους επισκέπτες
if (visitor.visitCount === 1) {
setTimeout(() => ReminderSystem.showReminderPopup(visitor), CONFIG.popupDelay);
}
// Προγραμματισμός υπενθυμίσεων
ReminderSystem.scheduleReminder(visitor);
// Αρχικοποίηση exit intent
ExitIntent.init(visitor);
// Αρχικοποίηση TikTok handler
TikTokHandler.init();
// Αρχικοποίηση Adsense Optimizer
AdsenseOptimizer.init();
// Gamification επιτεύγματα
if (CONFIG.enableGamification && visitor.visitCount % 5 === 0) {
const gameStatus = IncentiveEngine.getGamificationStatus(visitor);
if (gameStatus) {
this.showAchievement(visitor, gameStatus);
}
}
// Tracking metrics
this.trackReturnMetrics(visitor);
// Εμφάνιση των top υποψηφίων για debugging
const topCandidates = OrderTracker.getTopBuyerCandidates(4);
const remaining = OrderTracker.getRemainingWhistles();
console.log('🎯 Return Visitor Optimizer v2.5 - Cross-Platform Edition', {
visitorId: visitor.visitorId,
source: visitor.source,
visitCount: visitor.visitCount,
returnCount: visitor.returnCount,
returnProbability: Math.round((visitor.returnProbability || 0) * 100) + '%',
purchaseIntent: Math.round((visitor.purchaseIntent || 0) * 100) + '%',
whistleInterest: Math.round((visitor.productInterest?.physicalWhistle || 0) * 100) + '%',
streak: visitor.returnStreak,
quickReturns: visitor.quickReturns || 0,
remainingWhistles: remaining,
isTopCandidate: topCandidates.some(c => c.id === visitor.visitorId),
email: visitor.email ? '✓' : '✗',
hoursSinceLast: Math.round(hoursSinceLast * 10) / 10,
lastVisitTimestamp: new Date(visitor.lastVisitTimestamp).toLocaleString(),
daysSinceChannelVisit: visitor.source !== 'direct' ?
Math.round((Date.now() - visitor.lastChannelVisit) / (24*60*60*1000) * 10) / 10 + ' ημέρες' : 'N/A'
});
if (topCandidates.length > 0) {
console.log('🏆 Top 4 υποψήφιοι για αγορά φυσικής σφυρίχτρας:',
topCandidates.map(c => ({
score: Math.round(c.score),
visits: c.visitor.visitCount,
interest: Math.round((c.visitor.productInterest?.physicalWhistle || 0) * 100) + '%'
}))
);
}
} catch (e) {
console.error('Return optimizer init failed:', e);
}
},
actOnProbability: function(visitor) {
if (!visitor) return;
const remaining = OrderTracker.getRemainingWhistles();
const topCandidates = OrderTracker.getTopBuyerCandidates(4);
const isTopCandidate = topCandidates.some(c => c.id === visitor.visitorId);
if (isTopCandidate && remaining > 0 && !visitor.orders?.physicalWhistle?.completed) {
this.showWhistleOffer(visitor);
}
if (visitor.returnProbability > 0.8) {
const incentives = IncentiveEngine.offerReturnIncentive(visitor);
if (incentives.length > 0) {
this.showReturnOffer(visitor, incentives);
}
}
if (visitor.returnProbability < 0.3 && visitor.visitCount === 1) {
this.showWelcomeOffer(visitor);
}
},
showWhistleOffer: function(visitor) {
if (!visitor) return;
if (document.getElementById('whistleOfferV2')) return;
try {
const offerDiv = document.createElement('div');
offerDiv.id = 'whistleOfferV2';
offerDiv.style.cssText = `
position: fixed;
bottom: 20px;
right: 20px;
background: linear-gradient(135deg, #FF416C 0%, #FF4B2B 100%);
color: white;
padding: 25px;
border-radius: 15px;
box-shadow: 0 10px 30px rgba(255,75,43,0.3);
z-index: 1000000;
max-width: 320px;
font-family: Arial, sans-serif;
animation: slideInRight 0.5s ease;
cursor: pointer;
border: 2px solid gold;
`;
const remaining = OrderTracker.getRemainingWhistles();
offerDiv.innerHTML = `
🔊
Ειδική Προσφορά!
Φυσική Σφυρίχτρα Υψηλής Ποιότητας
Ιδανική για εξωτερικές δραστηριότητες
Αγορά Τώρα
✕
* Προσφορά μόνο για τους πιο ενεργούς επισκέπτες
`;
document.body.appendChild(offerDiv);
document.getElementById('buyWhistleBtn').onclick = function() {
visitor.orders.physicalWhistle.count++;
OrderTracker.registerWhistlePurchase(visitor.visitorId);
offerDiv.innerHTML = `
✅
Ευχαριστούμε για την αγορά σας!
Η παραγγελία σας καταχωρήθηκε.
`;
setTimeout(() => offerDiv.remove(), 3000);
};
document.getElementById('closeWhistleOffer').onclick = function() {
offerDiv.remove();
};
setTimeout(() => {
if (offerDiv.parentNode) offerDiv.remove();
}, 60000);
} catch (e) {
console.warn('Whistle offer failed:', e);
}
},
showReturnOffer: function(visitor, incentives) {
if (!visitor || !incentives || incentives.length === 0) return;
if (visitor.incentivesClaimed && visitor.incentivesClaimed.includes('return_offer')) return;
try {
const offer = incentives[0];
if (!offer) return;
const banner = document.createElement('div');
banner.style.cssText = `
position: fixed;
top: 20px;
right: 20px;
background: #4CAF50;
color: white;
padding: 15px 25px;
border-radius: 50px;
box-shadow: 0 5px 15px rgba(76,175,80,0.3);
z-index: 999999;
font-family: Arial, sans-serif;
cursor: pointer;
animation: slideIn 0.5s ease;
`;
banner.innerHTML = `
🎁 Επιστρέψατε!
${offer.message || 'Αποκλειστική προσφορά για εσάς'}
`;
document.body.appendChild(banner);
banner.onclick = function() {
this.remove();
if (!visitor.incentivesClaimed) visitor.incentivesClaimed = [];
visitor.incentivesClaimed.push('return_offer');
VisitorDB.save();
};
setTimeout(() => banner.remove(), 10000);
} catch (e) {}
},
showWelcomeOffer: function(visitor) {
if (!visitor) return;
try {
const banner = document.createElement('div');
banner.style.cssText = `
position: fixed;
bottom: 20px;
left: 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;
`;
banner.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();
})();
The AI needs about four days to learn the cow’s daily habits and behavior patterns in order to create realistic predictions
NEW version whith new experence try now free for smartphone
Impressed by how the AI detection works? Take your protection to the next level with the real whistle. 💨 Works even without internet or battery.
AI Animal Detection & Tracking - ΠΡΑΓΜΑΤΙΚΟΣ
🎯 REAL Animal Detector with AI & Microphone
Detection and Prediction of Animal Position Using Real-Time Sound Analysis – A Scientific Approach
🧠 AI ATHENA-PRO | SCIENTIFIC ANALYSIS
STATUS: Awaiting Instructions...
Ακρίβεια: 0% | Samples: 0 | Cache: 0
🎯 First, Select ANIMAL for Accurate Prediction
Select Only One Animal for Accurate Prediction:
🎤 REAL MOBILE MICROPHONE AUDIO ANALYSIS
🎤(1) Microphone Access
⏹️ STOP ANALYSIS
🎚️(2) MICROPHONE CALIBRATION
📊 (3) Restore 1-Week History
🗑️ Clear Locked Data
🔄 Reload Pre-training (28 samples)
0.000
RMS (Root Mean Square)
⚠️ Rule 18.5%: Detection is Reliable ONLY When Confidence ≥ 18.5%
🔒 Locked Directions - For the same animal and time, direction and distance remain constant.
🔮 Real-Time Prediction
--%
Probability of Correct Predictions
Based on Real Audio Data and Scientific Analysis
🗺️Real Prediction & Tracking Map
🔵 Start Point | 🎯 Predicted Target | 🟢 Route to Target
🧭 Compass & Distance
Κατεύθυνση: -- |
Απόσταση: -- meters
📊 Real Analysis Statistics
Scientific Database:
FFT analysis, identification of dominant frequencies, comparison with animal sound patterns.
Accuracy: ±5 meters at a distance of 50 meters. Database.: {nfft=2048, sample_rate=44100Hz}
⚠️ OUT OF EFFECTIVE RANGE!
Confidence < 18.5%
Ανίχνευση σε παύση