// source --> https://inshalytics.com/wp-content/plugins/handl-utm-grabber/js/handl-utm-grabber.js?ver=6.9.4 
jQuery(function($) {
    var qvars = getUrlVars()

    $.each([ 'utm_source','utm_medium','utm_term', 'utm_content', 'utm_campaign', 'gclid', 'email', 'username' ], function( i,v ) {

        var cookie_field = GetQVars(v,qvars)

        if ( cookie_field != '' )
            Cookies.set(v, cookie_field, { expires: 30 });

        var curval = Cookies.get(v)

        if (curval != undefined) {
            curval = decodeURIComponent(curval).replace(/[%]/g,' ')
            if (v == 'username') {
                //Maybe this should apply to all... We'll see...
                curval = curval.replace(/\+/g, ' ')
            }

            jQuery('input[name=\"'+v+'\"]').val(curval)
            jQuery('input#'+v).val(curval)
            jQuery('input.'+v).val(curval)
        }
    });

    $('.utm-out').each(function(){
        // Only process if this is an anchor tag with href
        if (this.tagName.toLowerCase() !== 'a' || !this.href) {
            return;
        }
        
        // Sanitize URL parameters and handl_utm object
        var urlParams = getSearchParams(this.href);
        var sanitizedParams = {};
        
        // Only include parameters that exist in handl_utm
        for(var key in urlParams) {
            if(handl_utm.hasOwnProperty(key)) {
                sanitizedParams[key] = encodeURIComponent(urlParams[key]);
            }
        }
        
        // Sanitize handl_utm values
        var sanitizedHandlUtm = {};
        for(var key in handl_utm) {
            sanitizedHandlUtm[key] = encodeURIComponent(handl_utm[key]);
        }

        // Merge sanitized objects
        var merged = $.extend({}, sanitizedHandlUtm, sanitizedParams);
        
        // Reset href and append sanitized parameters
        this.href = this.href.split('?')[0]; // Keep base URL only
        if(!$.isEmptyObject(merged)) {
            this.href += "?" + $.param(merged);
        }
    });
});

function getSearchParams(url,k){
    var p={};
    var a = document.createElement('a');
    a.href = url;
    a.search.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(s,k,v){p[k]=v})
    return k?p[k]:p;
}

function GetQVars(v,qvars){
    if (qvars[v] != undefined) {
        return qvars[v]
    }
    return ''
}

function getUrlVars() {
    var vars = {};
    var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
        vars[key] = value;
    });
    return vars;
};
// source --> https://inshalytics.com/wp-content/plugins/track-your-traffic/assets/js/aop-traffic-tracker.min.js?ver=1.0.0 
/**
 * AddOnePlugins — First-Party Traffic Attribution Tracker
 * ========================================================
 * 
 * Lightweight script that identifies incoming traffic sources and stores
 * attribution data in first-party cookies. No external dependencies.
 * 
 * What it tracks:
 * ─────────────────
 * - UTM parameters (utm_source, utm_medium, utm_campaign, utm_term, utm_content)
 * - Google Ads (gclid), Facebook (fbclid), TikTok (ttclid), Microsoft (msclkid)
 * - Google's srsltid (Merchant Center auto-tagging)
 * - document.referrer (organic search, social, referring sites)
 * - Direct traffic (no referrer)
 * 
 * How it works:
 * ─────────────────
 * 1. On every page load, reads URL params and document.referrer
 * 2. Classifies the visit into a channel (organic, paid, social, email, referral, direct)
 * 3. Stores FIRST-TOUCH attribution in `aop_first_touch` cookie (never overwritten)
 * 4. Stores LAST-TOUCH attribution in `aop_last_touch` cookie (updated on each new source)
 * 5. Stores current session source in `aop_session` cookie (expires on session end)
 * 
 * Cookie consent:
 * ─────────────────
 * This script only sets FIRST-PARTY, FUNCTIONAL cookies required for analytics.
 * No personal data is collected. Compliant with GDPR functional cookie exemption.
 * If you use a consent banner, you can gate this behind consent by checking
 * before calling AopTracker.init().
 * 
 * Installation:
 * ─────────────────
 * Add to your site <head> or before </body>:
 * <script src="/path/to/aop-traffic-tracker.js"><\/script>
 * <script>AopTracker.init();</script>
 * 
 * Or inline in Elementor Custom Code / WP Customizer:
 * <script>
 *   // Paste the minified version here, then:
 *   AopTracker.init();
 * </script>
 * 
 * Reading attribution data (for forms, WooCommerce, etc.):
 * ─────────────────
 * const firstTouch = AopTracker.getFirstTouch();
 * const lastTouch  = AopTracker.getLastTouch();
 * const session    = AopTracker.getSession();
 * 
 * // Example: append to WooCommerce checkout as hidden fields
 * AopTracker.injectHiddenFields('form.checkout');
 * 
 * @version 1.0.0
 * @author  Inshalytics / AddOnePlugins
 * @license MIT
 */
!function(e,o){"use strict";var t={cookieFirstTouch:"aop_first_touch",cookieLastTouch:"aop_last_touch",cookieSession:"aop_session",cookieExpiry:180,cookieDomain:"",cookiePath:"/",cookieSameSite:"Lax",searchEngines:{google:"google",bing:"bing",yahoo:"yahoo",duckduckgo:"duckduckgo",baidu:"baidu",yandex:"yandex",ecosia:"ecosia","ask.com":"ask",aol:"aol",naver:"naver"},socialPlatforms:{"facebook.com":"facebook","fb.com":"facebook","l.facebook":"facebook","lm.facebook":"facebook","t.co":"twitter","twitter.com":"twitter","x.com":"twitter","linkedin.com":"linkedin","lnkd.in":"linkedin","instagram.com":"instagram","l.instagram":"instagram","pinterest.com":"pinterest","pin.it":"pinterest","youtube.com":"youtube","youtu.be":"youtube","reddit.com":"reddit","tiktok.com":"tiktok","threads.net":"threads",mastodon:"mastodon","bsky.app":"bluesky","tumblr.com":"tumblr","snapchat.com":"snapchat","whatsapp.com":"whatsapp","wa.me":"whatsapp","t.me":"telegram",telegram:"telegram"},emailPlatforms:{"mail.google":"gmail","mail.yahoo":"yahoo_mail","outlook.live":"outlook","outlook.office":"outlook","mail.zoho":"zoho_mail","mailchimp.com":"mailchimp","campaign-archive.com":"mailchimp","list-manage.com":"mailchimp","sendgrid.net":"sendgrid",constantcontact:"constantcontact","klaviyo.com":"klaviyo",hubspot:"hubspot",convertkit:"convertkit"},clickIds:{gclid:{source:"google",medium:"cpc"},gbraid:{source:"google",medium:"cpc"},wbraid:{source:"google",medium:"cpc"},msclkid:{source:"bing",medium:"cpc"},fbclid:{source:"facebook",medium:"paid_social"},ttclid:{source:"tiktok",medium:"paid_social"},twclid:{source:"twitter",medium:"paid_social"},li_fat_id:{source:"linkedin",medium:"paid_social"},srsltid:{source:"google",medium:"merchant_center"}}};function i(e,o){if(!e)return null;for(var t in o)if(o.hasOwnProperty(t)&&-1!==e.indexOf(t))return o[t];return null}function a(){return(new Date).toISOString()}function r(){return e.location.pathname+e.location.search}function n(i,a,r){var n="";if(r){var c=new Date;c.setTime(c.getTime()+24*r*60*60*1e3),n="; expires="+c.toUTCString()}var s=i+"="+encodeURIComponent(a)+n+"; path="+t.cookiePath+"; SameSite="+t.cookieSameSite;t.cookieDomain&&(s+="; domain="+t.cookieDomain),"https:"===e.location.protocol&&(s+="; Secure"),o.cookie=s}function c(e){for(var t=e+"=",i=o.cookie.split(";"),a=0;a<i.length;a++){var r=i[a].trim();if(0===r.indexOf(t))return decodeURIComponent(r.substring(t.length))}return null}function s(e){n(e,"",-1)}var m={init:function(s){if(s&&"object"==typeof s)for(var u in s)s.hasOwnProperty(u)&&t.hasOwnProperty(u)&&(t[u]=s[u]);var l=function(){var n,c,s=function(){var o={},t=e.location.search.split("?")[1];if(!t)return o;for(var i=(t=t.split("#")[0]).split("&"),a=0;a<i.length;a++){var r=i[a].split("="),n=decodeURIComponent(r[0]||""),c=decodeURIComponent(r[1]||"");n&&(o[n.toLowerCase()]=c)}return o}(),m=o.referrer||"",u=function(e){try{if(!e)return"";-1===e.indexOf("//")&&(e="//"+e);var t=o.createElement("a");return t.href=e,(t.hostname||"").toLowerCase()}catch(e){return""}}(m);if(s.utm_source)return{source:s.utm_source,medium:s.utm_medium||"(not set)",campaign:s.utm_campaign||"(not set)",term:s.utm_term||"",content:s.utm_content||"",channel:(n=s.utm_source,c=s.utm_medium||"",n=(n||"").toLowerCase(),"cpc"===(c=(c||"").toLowerCase())||"ppc"===c||"paid_search"===c||"paidsearch"===c||"sem"===c?"paid_search":"paid_social"===c||"paidsocial"===c||"social_paid"===c||"cpm"===c?"paid_social":"display"===c||"banner"===c||"cpm"===c?"display":"email"===c||"e-mail"===c||"newsletter"===c?"email":"affiliate"===c||"partner"===c?"affiliate":"social"===c||"organic_social"===c?"organic_social":"organic"===c?"organic_search":"referral"===c?"referral":"(direct)"===n||"(none)"===c?"direct":"other"),landing_page:r(),referrer:u,timestamp:a()};for(var l in t.clickIds)if(t.clickIds.hasOwnProperty(l)&&s[l]){var p=t.clickIds[l];return{source:p.source,medium:p.medium,campaign:s.utm_campaign||"(auto-tagged)",term:s.utm_term||"",content:s.utm_content||"",click_id:l+"="+s[l].substring(0,20)+"...",channel:"cpc"===p.medium?"paid_search":"paid_social"===p.medium?"paid_social":"merchant_center"===p.medium?"google_shopping":"paid",landing_page:r(),referrer:u,timestamp:a()}}if(function(o){if(!o)return!1;var t=e.location.hostname.toLowerCase();return o===t||-1!==o.indexOf(t)||-1!==t.indexOf(o)}(u))return null;if(!m||!u)return{source:"(direct)",medium:"(none)",campaign:"(not set)",term:"",content:"",channel:"direct",landing_page:r(),referrer:"",timestamp:a()};var d=i(u,t.searchEngines);if(d)return{source:d,medium:"organic",campaign:"(not set)",term:"",content:"",channel:"organic_search",landing_page:r(),referrer:u,timestamp:a()};var g=i(u,t.socialPlatforms);if(g)return{source:g,medium:"social",campaign:"(not set)",term:"",content:"",channel:"organic_social",landing_page:r(),referrer:u,timestamp:a()};var h=i(u,t.emailPlatforms);return h?{source:h,medium:"email",campaign:"(not set)",term:"",content:"",channel:"email",landing_page:r(),referrer:u,timestamp:a()}:{source:u,medium:"referral",campaign:"(not set)",term:"",content:"",channel:"referral",landing_page:r(),referrer:u,timestamp:a()}}();if(l){var p=JSON.stringify(l);c(t.cookieFirstTouch)||n(t.cookieFirstTouch,p,t.cookieExpiry);var d=c(t.cookieLastTouch);"direct"===l.channel&&d||n(t.cookieLastTouch,p,t.cookieExpiry),n(t.cookieSession,p,0),-1!==e.location.search.indexOf("aop_debug=1")&&(console.log("[AOP Tracker] Attribution resolved:",l),console.log("[AOP Tracker] First touch:",m.getFirstTouch()),console.log("[AOP Tracker] Last touch:",m.getLastTouch()))}},getFirstTouch:function(){return u(t.cookieFirstTouch)},getLastTouch:function(){return u(t.cookieLastTouch)},getSession:function(){return u(t.cookieSession)},getAll:function(){return{first_touch:this.getFirstTouch(),last_touch:this.getLastTouch(),session:this.getSession()}},injectHiddenFields:function(e,t){var i;if(i="first_touch"===(t=t||"last_touch")?this.getFirstTouch():"session"===t?this.getSession():this.getLastTouch()){var a=o.querySelectorAll(e);if(a.length)for(var r=[{name:"aop_source",value:i.source},{name:"aop_medium",value:i.medium},{name:"aop_campaign",value:i.campaign},{name:"aop_channel",value:i.channel},{name:"aop_landing_page",value:i.landing_page},{name:"aop_referrer",value:i.referrer},{name:"aop_timestamp",value:i.timestamp}],n=0;n<a.length;n++)for(var c=a[n],s=0;s<r.length;s++)if(!c.querySelector('input[name="'+r[s].name+'"]')){var m=o.createElement("input");m.type="hidden",m.name=r[s].name,m.value=r[s].value||"",c.appendChild(m)}}},toQueryString:function(e){var o;if(!(o="first_touch"===(e=e||"last_touch")?this.getFirstTouch():"session"===e?this.getSession():this.getLastTouch()))return"";for(var t=[],i=["source","medium","campaign","channel","referrer"],a=0;a<i.length;a++)o[i[a]]&&"(not set)"!==o[i[a]]&&t.push("aop_"+i[a]+"="+encodeURIComponent(o[i[a]]));return t.join("&")},reset:function(){s(t.cookieFirstTouch),s(t.cookieLastTouch),s(t.cookieSession)}};function u(e){var o=c(e);if(!o)return null;try{return JSON.parse(o)}catch(e){return null}}e.AopTracker=m}(window,document);