(function($){
if(typeof FrankBSP217==='undefined') return;
var activeSeconds=0;
var lastSentActive=0;
var lastActivityAt=0;
var lastTickAt=Date.now();
var lastAddCartAt=0;
var lastAddCartProduct=0;
var idleLimitMs=5000;
function markActive(){
lastActivityAt=Date.now();
}
['mousemove','mousedown','keydown','scroll','touchstart','touchmove','click'].forEach(function(ev){
window.addEventListener(ev, markActive, {passive:true});
});
function tickActive(){
var now=Date.now();
var diff=Math.round((now - lastTickAt) / 1000);
lastTickAt=now;
if(document.visibilityState==='hidden') return;
if(!lastActivityAt) return;
if((now - lastActivityAt) > idleLimitMs) return;
if(diff > 0&&diff < 10) activeSeconds +=diff;
}
setInterval(tickActive, 1000);
function activeDuration(){
tickActive();
return Math.max(0, Math.round(activeSeconds));
}
function landing(){
try {
var k='frank_bsp217_landing';
var v=sessionStorage.getItem(k);
if(!v){
v=window.location.href;
sessionStorage.setItem(k, v);
}
return v;
} catch(e){
return window.location.href;
}}
function campaign(){
try {
var u=new URL(window.location.href);
return u.searchParams.get('utm_campaign')||u.searchParams.get('utm_content')||u.searchParams.get('utm_term')||'';
} catch(e){
return '';
}}
function getProductId(){
var id=parseInt(FrankBSP217.product_id||0, 10);
if(id > 0) return id;
var cls=document.body.className||'';
var m=cls.match(/postid-(\d+)/);
if(m&&m[1]) return parseInt(m[1], 10);
var btn=$('[name="add-to-cart"]').first();
if(btn.length){
var v=parseInt(btn.val()||btn.attr('value')||'0', 10);
if(v > 0) return v;
}
return 0;
}
function getProductName(){
if(FrankBSP217.product_name) return FrankBSP217.product_name;
var h=$('.product_title').first().text().trim();
if(h) return h;
h=$('h1').first().text().trim();
return h||'';
}
function send(eventType, extra, useBeacon){
extra=extra||{};
var pid=extra.product_id||getProductId();
if(eventType==='add_cart'){
var now=Date.now();
if(pid&&pid===lastAddCartProduct&&(now - lastAddCartAt) < 30000){
return;
}
lastAddCartAt=now;
lastAddCartProduct=pid||0;
}
var data={
action: 'frank_bsp217_track',
nonce: FrankBSP217.nonce,
event_type: eventType,
product_id: pid,
product_name: extra.product_name||FrankBSP217.product_name||getProductName(),
page_url: window.location.href,
page_title: document.title||'',
landing_page: landing(),
referrer: document.referrer||'',
duration: extra.duration||0,
qty: extra.qty||0,
campaign: campaign()
};
if(useBeacon&&navigator.sendBeacon){
var form=new FormData();
Object.keys(data).forEach(function(k){ form.append(k, data[k]); });
navigator.sendBeacon(FrankBSP217.ajaxurl, form);
return;
}
$.ajax({
url: FrankBSP217.ajaxurl,
method: 'POST',
data: data,
timeout: 3000
});
}
$(function(){
if(FrankBSP217.is_product||getProductId() > 0){
send('product_view', {duration: 0});
}else if(FrankBSP217.is_checkout){
send('checkout_view', {duration: 0});
}else if(FrankBSP217.is_cart){
send('cart_view', {duration: 0});
}else{
send('page_view', {duration: 0});
}
function sendActiveTime(force){
var current=activeDuration();
var delta=current - lastSentActive;
if(!force&&delta < 5) return;
if(force&&delta < 1) return;
if(delta > 60) delta=60;
lastSentActive=current;
send('time', {duration: delta}, force);
}
setInterval(function(){ sendActiveTime(false); }, 15000);
$(document.body).on('added_to_cart', function(event, fragments, cart_hash, button){
markActive();
var pid=getProductId();
if(button&&button.length){
var bpid=parseInt(button.data('product_id')||button.val()||button.attr('value')||'0', 10);
if(bpid > 0) pid=bpid;
}
send('add_cart', {product_id: pid, qty: 1, duration: 1});
});
$(document).on('click', '.single_add_to_cart_button, button[name="add-to-cart"]', function(){
markActive();
var qty=parseInt($('form.cart input.qty').val()||'1', 10);
setTimeout(function(){
send('add_cart', {qty: qty, duration: 1});
}, 800);
});
$(document).on('click', '.frank-secure-btn, .secure-checkout, button[name="frank_buy_now"], a[href*="/checkout"], a[href*="checkout"]', function(){
markActive();
send('secure_checkout', {duration: 1});
});
$(document).on('click', '.add_to_wishlist, a[href*="wishlist"], .wishlist-button, [class*="wishlist"]', function(){
markActive();
send('wishlist', {duration: 1});
});
window.addEventListener('pagehide', function(){
sendActiveTime(true);
});
document.addEventListener('visibilitychange', function(){
if(document.visibilityState==='hidden'){
sendActiveTime(true);
}else{
lastTickAt=Date.now();
}});
});
})(jQuery);