(function() { function bxBootstrap() { var re = /bot|crawl|slurp|spider|mediapartners|headlesschrome|snap-prefetch|remotasks|woorank|uptime\.com|facebookexternalhit|facebookcatalog/i; if (re.test(navigator.userAgent) || navigator.userAgent == '') { return; } if (!(window.bouncex&&bouncex.website)) { var pushedData = []; if(window.bouncex && bouncex.push && bouncex.length){ pushedData = bouncex; } window.bouncex = {}; bouncex.pushedData = pushedData; bouncex.website = {"id":4695,"name":"Halo Collar","cookie_name":"bounceClientVisit4695","domain":"halocollar.com","ct":"fp_local_storage","ally":0,"ei":0,"tcjs":"","cjs":"/* enable.feature.DISABLE_RELOAD_CAMPAIGNS_V2 */","force_https":false,"waypoints":false,"content_width":900,"gai":"UA-157182974-1","swids":"","sd":0,"ljq":"auto","campaign_id":0,"is_preview":false,"aco":{"first_party_limit":"3500","local_storage":"1"},"cmp":{"gdpr":0,"gmp":0,"whitelist_check":0},"burls":[],"ple":false,"fbe":true,"ffs":"","mas":2,"map":1,"gar":true,"ete":1,"ettm":false,"etjs":"/* --------------------------- HELPER FUNCTIONS -------------------------- */\nfunction initializeGeographyTracking() {\n var geography = bouncex.utils.getNestedProp('bouncex.state.geo.country');\n if(!bouncex.vars.geography_identified && geography === 'CA'){\n bouncex.push(['suppress_ca']);\n bouncex.setVar('geography_identified', true);\n }\n}\n\n/* --------------------------- ITEM TRACKING -------------------------- */\nfunction extractItemId(text) {\n if (text.indexOf('/shop-wireless-dog-fence/') > -1 || text.indexOf('shop-wireless-dog-fence-universal') > -1) {\n return 'halo-collar';\n }\n\n text = text.split('product/') || [];\n text = text[1] || '';\n text = text.split('/')[0] || '';\n\n return text;\n}\n\nfunction getItemImage(){\n var imgUrl = jQuery('#mainImage img').first().attr('src') || jQuery('.product-collar .swiper-container .swiper-slide-active img:visible').attr('src');\n\n if (!imgUrl){\n return false;\n }\n\n imgUrl = bouncex.utils.url.allowParams([], imgUrl.replace(/\\s+/g, ''));\n\n if (imgUrl.indexOf(window.location.protocol) > -1){ // we only need to append the origin if the image url does not include https\n return imgUrl;\n }\n\n if (imgUrl.indexOf(window.location.origin) === -1){\n return window.location.origin + imgUrl;\n }\n\n return false;\n}\n\nfunction buildItem(){\n var id = extractItemId(bouncex.utils.url.allowParams());\n return{\n 'id': id || '',\n 'copy': jQuery('[name=\"gtm4wp_name\"]').val() || jQuery('.product-title h1').text().trim() || '',\n 'category': jQuery('[name=\"gtm4wp_category\"]').val() || 'Global',\n 'imageurl': getItemImage(),\n 'url': bouncex.utils.url.allowParams() || '',\n 'instock': true\n };\n}\n\nfunction trackItem(){\n var item;\n bouncex.et.onTrue(\n function(){\n item = buildItem();\n return item.id && item.imageurl && item.copy && item.category && item.url;\n },\n function(){\n bouncex.push(['item', item]);\n bouncex.push(['view item', {'item:id': item.id}]);\n\n trackAddToCart(item.id);\n }\n );\n}\n\n/* --------------------------- CATEGORY TRACKING --------------------------\n----------------------Not in current spec as of 11/2/2021------------------\nfunction getItemIds(){\n var collarDuplicate = false;\n return jQuery('a:contains(\"Learn More\")').map(function(){\n var href = jQuery(this).attr('href') || '';\n itemId = href.indexOf('shop-halo') > -1 ? 'halo-collar' : extractProductId(href);\n if(itemId !== 'halo-collar' || !collarDuplicate){\n if (itemId === 'halo-collar') {\n collarDuplicate = true;\n }\n return itemId;\n }\n }).toArray().join(',')\n}\n\nfunction trackCategory(){\n var itemIds = getItemIds();\n if(itemIds && itemIds.length > 0){\n bouncex.push(['view category',\n {\n 'items:ids': itemIds,\n 'page:url': getUrl()\n }\n ])\n }\n}\n*/\n\n/* --------------------------- CART TRACKING -------------------------- */\nfunction trackAddToCart(itemId){\n var ATCButton = '.single_add_to_cart_button';\n bouncex.off(jQuery(document), 'click.bx', ATCButton);\n bouncex.on(jQuery(document), 'click.bx', function(){\n if(jQuery('.woocommerce-variation-add-to-cart-disabled').length < 1){\n fireAddToCart(itemId);\n }\n }, ATCButton);\n}\n\nfunction fireAddToCart(itemId){\n bouncex.push(['add to cart', {'item:id': itemId}]);\n if(!bouncex.vars.cart){\n bouncex.setVar('cart', true);\n }\n}\n\nfunction initializeCartTracking(){\n bouncex.et.cart.init({\n replenish: function() { },\n replenishmentType: 'single'\n });\n trackEmptyCart();\n}\n\n/* --------------------------- EMPTY CART TRACKING -------------------------- */\nfunction trackEmptyCart(){\n bouncex.et.onVarChange('cart_qty', function(oldVal, newVal){\n if(bouncex.vars.cart && newVal === 0 && oldVal > 0){\n bouncex.push(['empty cart']);\n bouncex.setVar('cart', false);\n }\n });\n if(bouncex.website.pts === 'cart'){\n if(jQuery('.cart-empty_hang:visible').length > 0){\n bouncex.push(['empty cart']);\n bouncex.setVar('cart', false);\n }\n }\n}\n\n/* --------------------------- USER TRACKING -------------------------- */\nfunction trackLoggedInUser(){\n if(bouncex.vars.logged_in && bouncex.vars.logged_in_identified === false){\n var userEmail = bouncex.utils.getNestedProp('klUser.current_user_email', '') || bouncex.utils.getNestedProp('kl_checkout.email', '');\n if(bouncex.utils.validate.email(userEmail)){\n bouncex.push(['user',\n {\n 'email': userEmail,\n 'source': 'LoggedIn'\n }\n ]);\n bouncex.setVar('logged_in_identified', true);\n }\n }\n}\n\n/* **************************** Browse Home Tracking ********************* */\nfunction trackBrowseEvent() {\n bouncex.push(['view_browse', {}]);\n}\n\n/* --------------------------- INITIALIZE TRACKING -------------------------- */\nfunction getUrl(){\n return bouncex.utils.url.allowParams();\n}\n\nfunction isValidDomain() {\n return getUrl().indexOf('www.halocollar.com') > -1;\n}\n\nfunction isEn() {\n return jQuery('html').attr('lang') === 'en-US';\n}\n\nfunction isValidForTracking() {\n return isValidDomain() && isEn();\n}\n\nfunction init() {\n if(isValidForTracking()){\n initializeCartTracking();\n trackLoggedInUser();\n trackBrowseEvent();\n initializeGeographyTracking();\n switch(bouncex.website.pts){\n case 'product':\n trackItem();\n break;\n default:\n break;\n }\n }\n}\n\ninit();\n","dge":true,"bxidLoadFirst":false,"pie":true,"cme":true,"gbi_enabled":0,"bpush":false,"pt":{"cart":{"testmode":false,"val":[[{"activation":"current_page_url","prop":"contains","prop2":"","prop3":"","val":"/cart/"}]]},"category":{"testmode":false,"val":[[{"activation":"current_page_url","prop":"contains","prop2":"","prop3":"","val":"/main-shop/"}]]},"checkout":{"testmode":false,"val":[[{"activation":"current_page_url","prop":"contains","prop2":"","prop3":"","val":"/checkout/"}]]},"home":{"testmode":false,"val":[[{"activation":"js","prop":"","prop2":"","prop3":"","val":"document.querySelectorAll('link[rel=\"canonical\"][href=\"https://www.halocollar.com/\"]').length > 0;"}]]},"product":{"testmode":false,"val":[[{"activation":"current_page_url","prop":"contains","prop2":"","prop3":"","val":"https://www.halocollar.com/shop-wireless-dog-fence/"}]]}},"els":{"header":"header"},"vars":[{"name":"logged_in","polling":"all","persist":"no","page_types":[],"testmode":false,"default":"false","code":"bouncex.utils.getNestedProp('klUser.current_user_email',\"\") !== \"\" || jQuery('#logout').length > 0;","trigger":""},{"name":"ever_logged_in","polling":"none","persist":"permanent","page_types":[],"testmode":false,"default":"false","code":"bouncex.vars.logged_in || null;","trigger":""},{"name":"cart_qty","polling":"all","persist":"visit","page_types":[],"testmode":false,"default":"0","code":"(function() {\n var count = 0;\n \n if (bouncex.website.pts === 'cart') {\n return Number(jQuery('.woocommerce__box-title').text().replace(/[^0-9.]/g, ''));\n }\n \n jQuery('.mini-qty').each(function() {\n count += Number(jQuery(this).val());\n })\n \n return count;\n})();","trigger":""},{"name":"cart_value","polling":"all","persist":"no","page_types":[],"testmode":false,"default":"0","code":"Number(jQuery('.mini_shopping_cart_content strong:contains(\"Subtotal\"), .order-total .amount').next().text().replace(/[^0-9.]/g, ''));","trigger":""},{"name":"submitted_onsite","polling":"all","persist":"permanent","page_types":[],"testmode":false,"default":"false","code":"jQuery('.error-message.active').text().indexOf('Success!') > -1 || null;","trigger":""},{"name":"page_url","polling":"none","persist":"no","page_types":["category","search"],"testmode":true,"default":"false","code":"","trigger":""},{"name":"cart","polling":"none","persist":"permanent","page_types":[],"testmode":false,"default":"false","code":"null;","trigger":"pageload"},{"name":"cookie_modal_present","polling":"all","persist":"no","page_types":[],"testmode":false,"default":"false","code":"jQuery('#onetrust-banner-sdk').is(':visible');","trigger":"pageload"},{"name":"lo","polling":"none","persist":"no","page_types":[],"testmode":true,"default":"false","code":"null;","trigger":"pageload"},{"name":"logged_in_identified","polling":"none","persist":"visit","page_types":[],"testmode":false,"default":"false","code":"null;","trigger":"pageload"},{"name":"geography_identified","polling":"none","persist":"visit","page_types":[],"testmode":false,"default":"false","code":"null;","trigger":"pageload"},{"name":"original_source","polling":"none","persist":"visit","page_types":[],"testmode":false,"default":"false","code":"(function() {\n\tvar utm_source = bouncex.utils.getParam('utm_source');\n\tif(utm_source) {\n \t\treturn utm_source;\n\t}\n\treturn null;\n})();","trigger":"pageload"}],"dgu":"pixel.cdnwidget.com","dgp":false,"ba":{"enabled":0,"fbte":0},"biu":"assets.bounceexchange.com","bau":"api.bounceexchange.com","beu":"events.bouncex.net","ibx":{"tjs":"","cjs":"","miw":0,"mibcx":1,"te":1,"cart_rep":{"get":"","set":""},"ulpj":{"bxid":"espemailid"},"cus":"","miw_exclude":"","enabled":1},"etjson":null,"osre":true,"osru":"osr.bounceexchange.com/v1/osr/items","checkDfp":false,"gamNetwork":"","spa":0,"spatm":1,"preinit_cjs":"var segments = {\n /* PROPERTIES */\n testMode: false,\n interceptEnabled: true,\n mirrorEnabled: true,\n dlWatcherEnabled: false,\n /* METHODS */\n useMirror: function () {\n if (this.mirrorEnabled) {\n bouncex.utils.shqMirrorEvent = {\n // defined functions run after designated shq_wknd_event to process event or source names\n 'reloadcampaigns': false,\n 'pageview': function(obj) {\n var catCode = bouncex.utils.getNestedProp('location.href','',window).split('/').pop().replace(/\\#/gi, '');\n if (bouncex.website.pts === 'category' && catCode){\n _shq.push([ 'pageView', \n {\n 'pageType': 'category',\n 'catName': catCode,\n 'catId': catCode\n }]); \n } \n },\n 'add to cart': function(){\n var atcObj = window.dataLayer.filter(e => e.event === 'gtm4wp.addProductToCart');\n var prodId = atcObj && atcObj.length > 0 && atcObj[atcObj.length -1].productID ? atcObj[atcObj.length -1].productID: '';\n var atcObjB = window.dataLayer.filter(e => e.event === 'gtm4wp.addProductToCartEEC');\n var price=null, qty=null;\n var atcArray = [];\n \n if (atcObjB && atcObjB.length > 0){\n price = window.bouncex.utils.getNestedProp('ecommerce.add.products[0].price','',atcObjB[atcObjB.length-1]);\n price = price ? Number(price).toFixed(2):price;\n \n qty = window.bouncex.utils.getNestedProp('ecommerce.add.products[0].quantity','',atcObjB[atcObjB.length-1]);\n }\n \n if(prodId && qty && price){\n atcArray.push({\n 'ProductId': prodId,\n 'UnitPrice': price,\n 'Quantity': qty\n });\n if (atcArray){\n _shq.push(['onCartAdd', {'Items': atcArray }]);\n }\n }\n }\n };\n }\n },\n /* Intercept Events */\n useIntercept: function() {\n if (this.interceptEnabled) {\n bouncex.utils.shqInterceptEvent = {\n 'cartAdd': true,\n 'categoryView': true,\n 'checkout': true,\n 'purchase': function(wkndEventParams){\n\t\t\t var prodErr = false;\n\t\t\t var orderId = bouncex.utils.getNestedProp('obj.order_id', null, wkndEventParams);\n\t\t\t var purchTotal =Number(bouncex.utils.getNestedProp('obj.amount', 0, wkndEventParams)) - ( Number(bouncex.utils.getNestedProp('obj.tax', 0, wkndEventParams)) + Number(bouncex.utils.getNestedProp('obj.shipping', 0, wkndEventParams)) );\n\t\t\t var orderInfo = bouncex.utils.getNestedProp('obj.item', null, wkndEventParams);\n\t\t\t var orderArray = orderInfo && orderInfo.map(function (ea) {\n\t\t\t\t return { productId: ea.product_id, price: ea.price, qty: ea.quantity };\n\t\t\t });\n\t\t\t\t \n\t\t\t \tif (orderArray.length < 1) {\n\t\t\t prodErr = true;\n\t\t\t }\n\t\t\t \n\t\t\t if (!prodErr && orderId){\n\t\t\t \t\t_shq.push(['pageView', \n\t\t\t \t {\n\t\t\t \t 'pageType': 'purchase', \n\t\t\t \t\t \t'orderItems' : orderArray,\n\t\t\t \t\t \t'orderId': orderId,\n\t\t\t \t\t \t'total': purchTotal\n\t\t\t \t\t}]);\n\t\t\t }else{\n\t\t\t \t_shq.push(['pageView', \n\t\t\t \t {\n\t\t\t \t 'pageType': 'purchase', \n\t\t\t 'orderId' : orderId,\n\t\t\t 'usebasket': true\n\t\t\t \t\t}]);\n\t\t\t }\n \n \t\t\t}\n };\n }\n },\n capturePDP: function(){\n setTimeout(function () {\n //bouncex.log('pdp!!!');\n if(bouncex.website.pts === 'product'){\n var pID = '';\n if(window.bouncex.utils.getNestedProp('window.item.ItemId')){\n pID = window.item.ItemId;\n }else{\n pID = document.querySelector('.variations_form.cart') ? document.querySelector('.variations_form.cart').dataset.product_id :'';\n }\n if(pID){\n _shq.push(['pageView',\n {\n 'pageType': 'product',\n 'productId': pID.toString()\n }]);\n }\n }else if(bouncex.website.pts ==='checkout'){\n _shq.push(['onCheckout']);\n }\n }, 1200);\n },\n captureCustomCategory: function(){\n setTimeout(function () {\n var catCode = bouncex.utils.getNestedProp('location.pathname','',window).replace(/\\//gi, '');\n if (catCode && catCode === 'reviews'){\n _shq.push([ 'pageView', \n {\n 'pageType': 'category',\n 'catName': catCode,\n 'catId': catCode\n }]); \n } \n }, 1000);\n },\n /* Initialize Segments Tracking */\n init: function() {\n // test mode\n if (this.testMode && !bouncex.testmode.bxdev) return;\n // attach object to window & bouncex.utils\n if (window.bouncex.utils) bouncex.utils.segments = this;\n\n // initialize intercept and mirror, comment out if not needed\n this.useIntercept();\n this.useMirror();\n this.capturePDP();\n this.captureCustomCategory();\n\n }\n}\n\nsegments.init();","crs":{"integrations":null,"pageCount":null},"mat":0,"math":0,"cpnu":"coupons.bounceexchange.com","dfpcms":0,"sms":{"optm":"Hit 'Send' to sign-up for automated, recurring Halo Collar mktg txts (like cart reminders) to this #, per terms.","eventSharing":true,"shqId":"2xkdbhvjlg-1","enabled":1},"pde":true,"fmc":["US"],"fme":true,"fmx":"","sdk":{"android":{"enabled":false,"enabledVersions":[],"eventModifications":null},"ios":{"enabled":false,"enabledVersions":[],"eventModifications":null}},"onsite":{"enabled":1},"ads":{"enabled":0},"pubs":{"enabled":0},"websdk":{"enabled":0},"ga4_property_id":"332946169","ga4_measurement_id":"G-FJCH89P7CZ","tag_state_domain":"api.bounceexchange.com"} ; bouncex.tag = 'tag3'; bouncex.$ = window.jQuery; bouncex.env = 'production'; bouncex.restrictedTlds = {"casl":{"ca":1},"gdpr":{"ad":1,"al":1,"at":1,"ax":1,"ba":1,"be":1,"bg":1,"by":1,"xn--90ais":1,"ch":1,"cy":1,"cz":1,"de":1,"dk":1,"ee":1,"es":1,"eu":1,"fi":1,"fo":1,"fr":1,"uk":1,"gb":1,"gg":1,"gi":1,"gr":1,"hr":1,"hu":1,"ie":1,"im":1,"is":1,"it":1,"je":1,"li":1,"lt":1,"lu":1,"lv":1,"mc":1,"md":1,"me":1,"mk":1,"xn--d1al":1,"mt":1,"nl":1,"no":1,"pl":1,"pt":1,"ro":1,"rs":1,"xn--90a3ac":1,"ru":1,"su":1,"xn--p1ai":1,"se":1,"si":1,"sj":1,"sk":1,"sm":1,"ua":1,"xn--j1amh":1,"va":1,"tr":1}}; bouncex.client = { supportsBrotli: 1 }; bouncex.assets = {"ads":"07d5b82cf97935025a59bf55f6552b1c","creativesBaseStyles":"a53944a2","gpsAuction":"0aafcb326e2e52aae2936349578031e7","inbox":"02aca5df0e176b8810a86da97ac05424","onsite":"0e56ab6ba004ee080ce3deb3edae35e9","sms":"e39203556bab2366e56296ce42e974a7","websdk":"437a9f1c542faaacb49577b266dc4d73"}; bouncex.push = function(pushData) { bouncex.pushedData.push(pushData); } var runtime = document.createElement('script'); runtime.setAttribute('src', '//assets.bounceexchange.com/assets/smart-tag/versioned/runtime_6459738026535cda4232dc813c61447d.br.js'); runtime.setAttribute('async', 'async'); runtime.setAttribute('onload', 'bouncex.initializeTag()'); bouncex.initializeTag = function() { var script = document.createElement('script'); script.setAttribute('src', '//assets.bounceexchange.com/assets/smart-tag/versioned/main-v2_efcf4183cfe60de21aa43976b713ebd6.br.js'); script.setAttribute('async', 'async'); document.body.appendChild(script); var deviceGraphScript = document.createElement('script'); deviceGraphScript.setAttribute('src', '//assets.bounceexchange.com/assets/smart-tag/versioned/cjs_min_3a843477d8e318f67237a66d0a58c542.js'); deviceGraphScript.setAttribute('async', 'async'); var dgAttrs = [{"Key":"id","Value":"c.js"},{"Key":"async","Value":"true"},{"Key":"data-apikey","Value":"2^HIykD"},{"Key":"data-cb","Value":"bouncex.dg.initPostDeviceGraph"},{"Key":"data-bx","Value":"1"},{"Key":"data-gm","Value":"1"},{"Key":"data-fire","Value":"1"}]; if (dgAttrs) { for (var i = 0; i < dgAttrs.length; i++) { deviceGraphScript.setAttribute(dgAttrs[i].Key, dgAttrs[i].Value); } } document.body.appendChild(deviceGraphScript); bouncex.initializeTag = function() {}; }; document.body.appendChild(runtime); } window._shq = window._shq || []; var eventSharingCartridge = document.createElement('script'); eventSharingCartridge.setAttribute('src', '//assets.bounceexchange.com/assets/smart-tag/versioned/wknd_audiences_2648fa8509e4b3a98a2790bb8171ddc1.js'); eventSharingCartridge.setAttribute('async', 'async'); document.body.appendChild(eventSharingCartridge); } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", bxBootstrap); } else { bxBootstrap(); }})();