(function(){if(window._trackingInitialized)return;window._trackingInitialized=true;const API_ENDPOINT="https://api.iristech.dev/ir-grv-cfg";const CONVERSIONS_ENDPOINT="https://api.iristech.dev/conversions";const SESSION_ENDPOINT="https://api.iristech.dev/ir-grv-sess";const ATTR_COOKIE='ir_attrib';const ATTR_MAX_AGE_DAYS=90;function setCookie(name,value,days){try{const date=new Date();date.setTime(date.getTime()+days*24*60*60*1000);document.cookie=name+'='+encodeURIComponent(value)+'; expires='+date.toUTCString()+'; path=/; SameSite=Lax';}catch(_){}} function getCookie(name){try{const value=('; '+document.cookie).split('; '+name+'=').pop().split(';')[0];return value?decodeURIComponent(value):null;}catch(_){return null;}} function uuid(prefix){return(prefix||'')+Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10);} const urlParams=new URLSearchParams(window.location.search);const urlIrclid=urlParams.get('irclid');const urlIrcpid=urlParams.get('ircpid');const urlPubId=urlParams.get('pubId');const utm={utm_source:urlParams.get('utm_source')||null,utm_medium:urlParams.get('utm_medium')||null,utm_campaign:urlParams.get('utm_campaign')||null,utm_term:urlParams.get('utm_term')||null,utm_content:urlParams.get('utm_content')||null,gclid:urlParams.get('gclid')||null,fbclid:urlParams.get('fbclid')||null,};let attrib=null;try{const raw=getCookie(ATTR_COOKIE);attrib=raw?JSON.parse(raw):null;}catch(_){attrib=null;} if(!attrib||!attrib.ir_aid){attrib=attrib||{};attrib.ir_aid=uuid('ir_aid_');attrib.first_seen=Date.now();} const now=Date.now();let updated=false;if(urlIrclid){attrib.irclid=urlIrclid;updated=true;} if(urlIrcpid){attrib.ircpid=urlIrcpid;updated=true;} if(urlPubId){attrib.pubId=urlPubId;updated=true;} Object.keys(utm).forEach(k=>{if(utm[k]){attrib[k]=utm[k];updated=true;}});attrib.last_seen=now;if(updated){try{setCookie(ATTR_COOKIE,JSON.stringify(attrib),ATTR_MAX_AGE_DAYS);}catch(_){}}else{try{setCookie(ATTR_COOKIE,JSON.stringify(attrib),ATTR_MAX_AGE_DAYS);}catch(_){}} window.IR_ATTRIB=attrib;const irclid=attrib.irclid||null;const ircpid=attrib.ircpid||null;const pubId=attrib.pubId||null;const SESSION_KEY='ir_session_id';let SESSION_ID=sessionStorage.getItem(SESSION_KEY);if(!SESSION_ID){SESSION_ID=uuid('nsess_');try{sessionStorage.setItem(SESSION_KEY,SESSION_ID);}catch(_){}} const CUSTOMER_ID=attrib.ir_aid;const SESSION_STARTED_AT=Date.now();const LANDING_REFERRER=document.referrer||null;const LANDING_URL=window.location.href;let LAST_URL=LANDING_URL;function readJSON(key,fallback){try{const raw=sessionStorage.getItem(key);return raw?JSON.parse(raw):fallback;}catch(_){return fallback;}} function writeJSON(key,value){try{sessionStorage.setItem(key,JSON.stringify(value));}catch(_){}} let PAGE_COUNT=Number(sessionStorage.getItem('ir_page_count')||'0');PAGE_COUNT+=1;try{sessionStorage.setItem('ir_page_count',String(PAGE_COUNT));}catch(_){} let ACTIONS=readJSON('ir_session_actions',{tab_hidden:0,tab_shown:1});ACTIONS.tab_shown=(ACTIONS.tab_shown||0)+0;writeJSON('ir_session_actions',ACTIONS);let USER_METADATA=readJSON('ir_user_meta',null);if(!window.IR_SESSION){window.IR_SESSION={setUser:function(meta){USER_METADATA=Object(meta);writeJSON('ir_user_meta',USER_METADATA);sendSessionUpdate(false);}};} function sessionPayload(ended){const now=Date.now();const durationMs=now-SESSION_STARTED_AT;const payload={session_id:SESSION_ID,customer_id:CUSTOMER_ID,page_url:LAST_URL,referrer:LANDING_REFERRER,irclid:irclid||null,ircpid:ircpid||null,pub_id:pubId||null,page_count:PAGE_COUNT,last_url:LAST_URL,actions:ACTIONS,purchase:readJSON('ir_session_purchase',null),duration_ms:durationMs,ended:!!ended,user_metadata:USER_METADATA||null,};return payload;} function sendBeacon(url,dataObj){try{const blob=new Blob([JSON.stringify(dataObj)],{type:'application/json'});if(navigator.sendBeacon){return navigator.sendBeacon(url,blob);}}catch(_){} try{fetch(url,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(dataObj),keepalive:true});}catch(_){} return true;} async function sendSessionUpdate(ended){const payload=sessionPayload(ended);try{await fetch(SESSION_ENDPOINT,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(payload),keepalive:true,});}catch(_){}} async function trackEvent(eventType,eventMetadata={}){if(!irclid){return;} const payload={event_type:eventType,session_id:SESSION_ID,customer_id:CUSTOMER_ID,irclid:irclid,ircpid:ircpid,pub_id:pubId,page_url:window.location.href,page_title:document.title,event_metadata:Object.assign({ir_aid:attrib.ir_aid,utm_source:attrib.utm_source||null,utm_medium:attrib.utm_medium||null,utm_campaign:attrib.utm_campaign||null,utm_term:attrib.utm_term||null,utm_content:attrib.utm_content||null,gclid:attrib.gclid||null,fbclid:attrib.fbclid||null,},eventMetadata)};try{await fetch(API_ENDPOINT,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(payload),keepalive:true});}catch(err){console.error("[Pixel Event]: Tracking error",err);}} function getClickInfo(event){const element=event.target;if(element.tagName==='BODY'||element.tagName==='HTML')return null;return{element:element.tagName,id:element.id||null,class:element.className||null,text:(element.innerText||'').substring(0,200),href:element.href||null};} function addToLinks(){if(!irclid)return;document.querySelectorAll('a').forEach(link=>{try{const url=new URL(link.href,window.location.origin);if(url.origin===window.location.origin&&!url.searchParams.has('irclid')){url.searchParams.set('irclid',irclid);link.href=url.toString();} if(url.origin===window.location.origin&&!url.searchParams.has('ircpid')&&ircpid){url.searchParams.set('ircpid',ircpid);link.href=url.toString();} if(url.origin===window.location.origin&&!url.searchParams.has('pubId')&&pubId){url.searchParams.set('pubId',pubId);link.href=url.toString();} const host=url.hostname||'';if((host.includes('calendly.com')||host.includes('cal.com'))){if(!url.searchParams.has('utm_source')&&(attrib.utm_source||'')){url.searchParams.set('utm_source',attrib.utm_source);} if(!url.searchParams.has('utm_medium')&&(attrib.utm_medium||'')){url.searchParams.set('utm_medium',attrib.utm_medium);} if(!url.searchParams.has('utm_campaign')&&(attrib.utm_campaign||'')){url.searchParams.set('utm_campaign',attrib.utm_campaign);} if(!url.searchParams.has('utm_term')&&(attrib.utm_term||'')){url.searchParams.set('utm_term',attrib.utm_term);} if(!url.searchParams.has('utm_content')&&(attrib.ir_aid||'')){url.searchParams.set('utm_content',attrib.ir_aid);} if(!url.searchParams.has('irclid')&&irclid)url.searchParams.set('irclid',irclid);if(!url.searchParams.has('ircpid')&&ircpid)url.searchParams.set('ircpid',ircpid);if(!url.searchParams.has('pubId')&&pubId)url.searchParams.set('pubId',pubId);link.href=url.toString();}}catch(e){}});} async function syncShopifyCartAttributes(){if(!window.location.pathname.includes('/cart')){} const attributes={irclid:irclid||'',ircpid:ircpid||'',pubId:pubId||'',ir_aid:attrib.ir_aid||'',utm_source:attrib.utm_source||'',utm_medium:attrib.utm_medium||'',utm_campaign:attrib.utm_campaign||'',utm_term:attrib.utm_term||'',utm_content:attrib.utm_content||'',gclid:attrib.gclid||'',fbclid:attrib.fbclid||''};try{await fetch('/cart/update.js',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({attributes})});}catch(_){}} function init(){trackEvent('page_view');sendSessionUpdate(false);document.addEventListener('click',(event)=>{const info=getClickInfo(event);if(info)trackEvent('click',info);},true);try{document.querySelectorAll('form[action*="/cart/add"]').forEach(form=>{function addHidden(name,value){if(!value)return;if(!form.querySelector(`input[name="properties[${name}]"]`)){const input=document.createElement('input');input.type='hidden';input.name=`properties[${name}]`;input.value=value;form.appendChild(input);}} addHidden('irclid',irclid);addHidden('ircpid',ircpid);addHidden('pubId',pubId);addHidden('ir_aid',attrib.ir_aid);});}catch(e){} syncShopifyCartAttributes();addToLinks();const observer=new MutationObserver(()=>{addToLinks();});observer.observe(document.body,{childList:true,subtree:true});try{if(window.Shopify&&Shopify.checkout&&irclid){const co=Shopify.checkout;const total=(co.total_price||0);const currency=co.presentment_currency||co.currency||'USD';const orderId=co.order_id||co.order_number||co.id;const items=(co.line_items||[]).map(li=>({sku:li.sku||null,title:li.title||null,quantity:li.quantity||1,price:li.price||0}));const purchasePayload={order_id:String(orderId||''),value:total,currency,items};trackEvent('purchase',purchasePayload);writeJSON('ir_session_purchase',purchasePayload);sendSessionUpdate(false);try{fetch(CONVERSIONS_ENDPOINT,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({event_type:'purchase',value_cents:Math.round((Number(total)||0)*100),currency,order_id:String(orderId||''),booking_id:null,irclid:irclid,ircpid:ircpid?Number(ircpid):null,pub_id:pubId||null,ir_aid:attrib.ir_aid,customer_email_hash:null,page_url:window.location.href,metadata:{items}})}).catch(()=>{});}catch(_){}}}catch(_){} try{window.addEventListener('message',function(e){try{const data=e&&e.data;if(!data||typeof data!=='object')return;const ev=data.event||'';if(typeof ev==='string'&&ev.toLowerCase().includes('calendly')&&ev.toLowerCase().includes('event_scheduled')){const bookingId=(data?.payload?.invitee?.uuid)||(data?.payload?.invitee?.uri)||String(Date.now());trackEvent('book_call',{booking_id:bookingId});sendSessionUpdate(false);if(conversionsEnabled&&irclid){fetch(CONVERSIONS_ENDPOINT,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({event_type:'book_call',value_cents:null,currency:null,order_id:null,booking_id:String(bookingId),irclid:irclid,ircpid:ircpid?Number(ircpid):null,pub_id:pubId||null,ir_aid:attrib.ir_aid,customer_email_hash:null,page_url:window.location.href,metadata:{calendly:true}})}).catch(()=>{});}}}catch(_){}},false);}catch(_){} try{document.addEventListener('visibilitychange',function(){ACTIONS=readJSON('ir_session_actions',ACTIONS||{});if(document.visibilityState==='hidden'){ACTIONS.tab_hidden=(ACTIONS.tab_hidden||0)+1;}else{ACTIONS.tab_shown=(ACTIONS.tab_shown||0)+1;} writeJSON('ir_session_actions',ACTIONS);sendSessionUpdate(false);});}catch(_){} try{setInterval(function(){sendSessionUpdate(false);},15000);}catch(_){} try{window.addEventListener('pagehide',function(){sendBeacon(SESSION_ENDPOINT,sessionPayload(true));});window.addEventListener('beforeunload',function(){sendBeacon(SESSION_ENDPOINT,sessionPayload(true));});}catch(_){}} if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',init);}else{init();}})();