(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":5736,"name":"Hanna Andersson","cookie_name":"bounceClientVisit5736","domain":"hannaandersson.com","ct":"fp_local_storage","ally":0,"ei":0,"tcjs":"","cjs":"","force_https":false,"waypoints":false,"content_width":900,"gai":"UA-6112906-3","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,"mas":2,"map":1,"gar":true,"ete":1,"ettm":false,"etjs":"/* ---------------------------- SHARED VARIABLES ---------------------------- */\n\nvar CART_COOKIE_KEY = 'dwanonymous_e4fdf894e6616217dca137d1f8a3f000',\n CLEAN_URL = bouncex.utils.url.allowParams();\n\n/* --------------------------------- HELPERS -------------------------------- */\n\nfunction mergeIfTrue(groupId, variant) {\n if (!groupId || !variant) {\n return false;\n }\n return groupId + '-' + variant;\n}\nfunction getUrlWithParamsFiltered(){\n var splitParams = window.location.href.split(/\\?|&/gm).slice(1),\n allowedParams = splitParams.filter(function(x){ return !x.match(/utm/gm) });\n if(splitParams.length > 0){\n return bouncex.utils.url.allowParams()+'?'+allowedParams.join('&');\n }\n return window.location.href;\n}\nfunction getEmailFromDl() {\n var dl = bouncex.utils.getNestedProp('dataLayer', []),\n initialData = dl.filter(function (e) {\n return e.event === \"dataLayer-initialized\";\n });\n return bouncex.utils.getNestedProp('userDetails.customerEmail', '', initialData[0]);\n}\n//for Product page\nfunction getProductVariantId() {\n return jQuery('.pdp-aplus-swatch.selectable.selected').data('swatchId');\n}\n// For Category Quickview\nfunction currentQVProductId() {\n return jQuery('.js-product-ids').eq(0).data('pid');\n}\n\nfunction getCouponFromUrl(){\n\tbouncex.et.onVarChange('coupon_code_url', function(oldVal, newVal){\n\t\tif (newVal){\n\t\t bouncex.push(['coupon', {\n\t\t \t\"coupon:code\": newVal\n\t\t }]);\n\t\t \n\t bouncex.setv('coupon_code_url', newVal);\n setBounceCookie();\n\t\t}\n\t});\n}\n\nfunction getStars() {\n var stars = jQuery('.pdp-aplus__titleblock__reviews [data-starrating]').first(),\n starsRounded;\n\n if (!stars.length || !!stars.find('button:contains(Be the first)').length){\n return 0;\n }\n\n stars = stars.data('starrating');\n starsRounded = (Math.round(stars * 2) / 2).toFixed(1);\n\n return parseFloat(starsRounded) || '';\n}\n\n/* ------------------------------ ITEM TRACKING ----------------------------- */\n\nfunction getItem() {\n return {\n id: bouncex.utils.getNestedProp('pageContext.productID'),\n copy: bouncex.vars.prod_name || '',\n category: bouncex.utils.url.getParam('cgid') || 'global',\n url: CLEAN_URL,\n imageurl: jQuery('img#pdp-image-0').attr('src') ? bouncex.utils.url.allowParams([], jQuery('img#pdp-image-0').attr('src')) : false,\n instock: bouncex.vars.in_stock,\n stars: getStars()\n };\n}\n\nfunction fireViewItem(id) {\n bouncex.push(['view item', {\n 'item:id': id,\n 'item:itemgroupid': id\n }]);\n}\nfunction fireSelectSku(itemId, feedId) {\n bouncex.push([\n 'select_sku',\n {\n 'item:id': itemId,\n 'item:itemgroupid': itemId,\n 'item:feedid': feedId\n }\n ]);\n}\n\nfunction fireItemEvent(i,pid){\n if(!i || !pid){\n return;\n }\n var item = getItem();\n var getImage = bouncex.utils.getNestedProp('target.src',false,i);\n var pidImg = getImage ? bouncex.utils.url.allowParams([], getImage) : false;\n var newUrl = CLEAN_URL.split('/');\n newUrl.pop();\n newUrl = newUrl.concat([pid+'.html']);\n newUrl = newUrl.join('/');\n if(!newUrl || !pidImg){\n return;\n } \n item.id = pid;\n item.url = newUrl;\n item.imageurl = pidImg;\n bouncex.push(['item', item]);\n}\nfunction initializeItemEvents() {\n var item;\n bouncex.et.onTrue(\n function () {\n item = getItem();\n return !!item.id &&\n !!item.copy &&\n !!item.category &&\n !!item.url &&\n !!item.imageurl;\n },\n function () {\n if (!isValidForTracking()) {\n return;\n }\n bouncex.push(['item', item]);\n initializeSkuEvents(item.id);\n fireViewItem(item.id);\n },\n 10\n );\n}\n/* ------------------------------ SKU TRACKING ------------------------------ */\n/* There two functions here because some products detail pages will \n have similar styled products on the same product page. \n We need to be able to track the size variant for those products\n As well as tracking view item events for the different products on the page.\n*/\nfunction initializeSkuEvents(itemId) {\n var lastSkuFired,\n skuId,\n lastColorFired = itemId,\n colorId;\n\n bouncex.et.on(\n bouncex.document,\n 'click.bxsku',\n function () {\n bouncex.et.onTrue(function () {\n swatchId = getProductVariantId();\n skuId = mergeIfTrue(itemId, swatchId);\n return skuId && swatchId !== lastSkuFired;\n }, function () {\n fireSelectSku(itemId, skuId);\n lastSkuFired = swatchId;\n }, 5);\n },\n '.pdp-aplus-swatch.selectable'\n );\n if (jQuery('.pdp-aplus-bucketed-color a').length > 1) {\n bouncex.et.on(\n bouncex.document,\n 'click.bxsku',\n function (i) {\n bouncex.et.onTrue(function () {\n colorId = jQuery('.pdp-aplus-bucketed-color.selected a').data('analytics') ? jQuery('.pdp-aplus-bucketed-color.selected a').data('analytics').variationGroup : false;\n return colorId && colorId !== lastColorFired;\n }, function () {\n fireViewItem(colorId, colorId);\n lastColorFired = colorId;\n itemId = colorId;\n fireItemEvent(i,colorId);\n \n }, 5);\n },\n '.pdp-aplus-bucketed-color a'\n );\n }\n}\n/* ---------------------------- QUICKVIEW TRACKING --------------------------- */\n//Tracks variant changes on Quickview modal\nfunction trackQuickViewSkuEvents() {\n var lastSkuFired,\n skuId;\n bouncex.et.on(\n bouncex.document,\n 'click.bxsku',\n function () {\n var pid;\n bouncex.et.onTrue(function () {\n pid = currentQVProductId();\n swatchId = getProductVariantId();\n skuId = mergeIfTrue(pid, swatchId);\n return skuId && skuId !== lastSkuFired;\n }, function () {\n fireSelectSku(pid, skuId);\n lastSkuFired = skuId;\n }, 5);\n },\n '.pdp-aplus-swatch.selectable'\n );\n}\n//grabs the current QuickView modal productId\nfunction fireQuickViewItem() {\n var pid;\n bouncex.et.onTrue(function () {\n pid = currentQVProductId();\n return pid;\n }, function () {\n fireViewItem(pid);\n }, 5);\n}\n//sets up select sku and view item for QuickView modal.\nfunction initializeQuickViewEvents() {\n trackQuickViewSkuEvents();\n bouncex.et.on(\n bouncex.document,\n 'click.bxsku',\n function () {\n fireQuickViewItem();\n },\n '.quickbuy-btn'\n );\n}\n/* ---------------------------- CATEGORY TRACKING --------------------------- */\n\nfunction getItemIdsCat() {\n var ids = [];\n jQuery('.product .product__image--link').each(function (i, e) {\n var id = jQuery(e).data('productId');\n if (id && ids.indexOf(id) < 0) {\n ids.push(id);\n }\n });\n\n return ids.join(',');\n}\n\nfunction getCategoryObject() {\n return {\n 'page:url': getUrlWithParamsFiltered(),\n 'items:ids': getItemIdsCat()\n };\n}\n\nfunction initializeCategoryEvents() {\n var categoryObj;\n\n bouncex.et.onTrue(\n function () {\n categoryObj = getCategoryObject();\n return !!categoryObj['items:ids'].length &&\n !!categoryObj['page:url'];\n },\n function () {\n bouncex.push(['view category', categoryObj]);\n },\n 10\n );\n}\n\n/* ------------------------------- CART EVENTS ------------------------------ */\n\nfunction fireAddToCart(itemId) {\n bouncex.push(['add to cart', { 'item:id': itemId }]);\n if (bouncex.vars.cart) {\n return;\n }\n bouncex.setVar('cart', true);\n}\nfunction trackAJAXCart(e, xhr, settings) {\n if (\n settings.url.indexOf('/Cart-AddProduct') > -1\n && xhr.status === 200\n ) {\n var id = bouncex.utils.url.getParam('pid',settings.data);\n if (!id) {\n return;\n }\n id = id.split('-').slice(0, 2).join('-');\n fireAddToCart(id);\n }\n}\n\nfunction emptyCart() {\n if(!!bouncex.vars.cart && bouncex.vars.cart_qty === 0 && bouncex.website.pts === 'cart'){\n bouncex.push(['empty_cart']);\n bouncex.setVar('cart', false);\n }\n}\n\nfunction initializeCartEvents() {\n bouncex.et.cart.init({\n replenish: function () { },\n replenishmentType: 'single'\n });\n\n bouncex.et.on(bouncex.document, 'ajaxComplete.wknd', trackAJAXCart);\n emptyCart();\n}\n\n/* ------------------------------ USER TRACKING ----------------------------- */\n\nfunction initializeUserTracking() {\n if (!bouncex.vars.logged_in || !!bouncex.vars.logged_in_identified) {\n return;\n }\n\n var userEmail;\n\n bouncex.et.onTrue(\n function () {\n userEmail = getEmailFromDl();\n return bouncex.utils.validate.email(userEmail);\n },\n function () {\n bouncex.push([\n 'user',\n {\n 'email': userEmail,\n 'source': 'LoggedIn'\n }\n ]);\n bouncex.setVar('logged_in_identified', true);\n },\n 5\n );\n}\n\n/* --------------------------- INITIALIZE TRACKING -------------------------- */\n\nfunction isValidDomain() {\n return CLEAN_URL.indexOf('www.hannaandersson.com') > -1;\n}\n\nfunction isEn() {\n return bouncex.html.attr('lang') === 'en';\n}\n\nfunction isValidForTracking() {\n var item = getItem();\n return isValidDomain() && isEn() && !(item.url.indexOf('gift-card') > -1 || item.copy.indexOf('Gift Card') > -1);\n}\n\nfunction init() {\n if (!isValidForTracking()) {\n getCouponFromUrl();\n return;\n }\n initializeUserTracking();\n initializeCartEvents();\n\n switch (bouncex.website.pts) {\n case 'category':\n case 'search':\n initializeCategoryEvents();\n initializeQuickViewEvents();\n break;\n case 'product':\n initializeItemEvents();\n break;\n default:\n break;\n }\n}\n\ninit();\n","dge":true,"bxidLoadFirst":false,"pie":true,"cme":true,"gbi_enabled":0,"bpush":false,"pt":{"cart":{"testmode":false,"val":[[{"activation":"js","prop":"","prop2":"","prop3":"","val":"bouncex.utils.getNestedProp('pageContext.analyticstype') === 'my bag';"}]]},"category":{"testmode":false,"val":[[{"activation":"js","prop":"","prop2":"","prop3":"","val":"bouncex.utils.getNestedProp('pageContext.analyticstype') === 'product list';"}]]},"checkout":{"testmode":false,"val":[[{"activation":"js","prop":"","prop2":"","prop3":"","val":"bouncex.utils.getNestedProp('pageContext.analyticstype') === 'checkout';"}]]},"home":{"testmode":false,"val":[[{"activation":"js","prop":"","prop2":"","prop3":"","val":"bouncex.utils.getNestedProp('pageContext.analyticstype') === 'home';"}]]},"product":{"testmode":false,"val":[[{"activation":"js","prop":"","prop2":"","prop3":"","val":"bouncex.utils.getNestedProp('pageContext.analyticstype') === 'product detail';"}]]},"search":{"testmode":false,"val":[[{"activation":"current_page_url","prop":"contains","prop2":"","prop3":"","val":"/search?q="}]]}},"els":{"blank_site_element":"","loyalty_terms":".loyaltyTerms"},"vars":[{"name":"logged_in","polling":"none","persist":"no","page_types":[],"testmode":false,"default":"false","code":"bouncex.utils.getNestedProp('sessionDetails.loggedIn',false,window.dataLayer[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":"no","page_types":[],"testmode":false,"default":"0","code":"jQuery('.minicart-quantity.js-minicart-quantity').eq(0).text();","trigger":""},{"name":"cart_value","polling":"all","persist":"no","page_types":[],"testmode":false,"default":"0","code":"jQuery('[data-bag-value]').data('bagValue');","trigger":""},{"name":"prod_price","polling":"all","persist":"no","page_types":["product"],"testmode":false,"default":"false","code":"(function () {\n var item = dataLayer.filter(function (e) { return e.event === 'view_item' }).pop();\n return bouncex.utils.getNestedProp('ecommerce.items[0][0].price', null, item);\n})();","trigger":""},{"name":"prod_name","polling":"none","persist":"no","page_types":["product"],"testmode":false,"default":"false","code":"bouncex.utils.getNestedProp('pageContext.title');","trigger":""},{"name":"in_stock","polling":"none","persist":"no","page_types":["product"],"testmode":false,"default":"false","code":"jQuery('.pdp-aplus__titleblock__pricing .is-sold-out').length === 0;","trigger":""},{"name":"submitted_onsite","polling":"all","persist":"permanent","page_types":[],"testmode":false,"default":"false","code":"jQuery('.footer-mailing-list .footer-mailing-title.news-success.hidden').length === 0 || null;","trigger":""},{"name":"page_url","polling":"none","persist":"no","page_types":["category","search"],"testmode":false,"default":"false","code":"bouncex.utils.url.allowParams();","trigger":""},{"name":"cart_token","polling":"none","persist":"no","page_types":[],"testmode":false,"default":"false","code":"null;","trigger":"pageload"},{"name":"cart_items","polling":"none","persist":"no","page_types":[],"testmode":true,"default":"false","code":"null;","trigger":"pageload"},{"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":true,"default":"false","code":"null;","trigger":"pageload"},{"name":"page_type","polling":"none","persist":"no","page_types":[],"testmode":false,"default":"false","code":"bouncex.website.pts;","trigger":"pageload"},{"name":"attentive_visible","polling":"all","persist":"no","page_types":[],"testmode":false,"default":"false","code":"jQuery('#attentive_overlay').length > 0;","trigger":"pageload"},{"name":"logged_in_identified","polling":"none","persist":"visit","page_types":[],"testmode":false,"default":"false","code":"null;","trigger":"pageload"},{"name":"has_carted","polling":"none","persist":"no","page_types":[],"testmode":true,"default":"false","code":"null;","trigger":"pageload"},{"name":"coupon_code_url","polling":"none","persist":"visit","page_types":[],"testmode":false,"default":"false","code":"bouncex.utils.url.getParam('clickthrough_url_coupon') || null;","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":{"sc_uid":"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":"// enable.feature.PERSISTENT_COUPONS","crs":{"integrations":null,"pageCount":null},"mat":0,"math":0,"cpnu":"coupons.bounceexchange.com","dfpcms":0,"sms":{"optm":"","eventSharing":false,"shqId":"","enabled":1},"pde":true,"fmc":["US"],"fme":true,"fmx":"#ToEmail","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":"","ga4_measurement_id":""} ; 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: 0 }; bouncex.assets = {"ads":"060c82010be32c8940e5ef98bcf77a22","creativesBaseStyles":"a53944a2","gpsAuction":"1375a7b38c31e98d14fe7f396b72da14","inbox":"02aca5df0e176b8810a86da97ac05424","onsite":"0e56ab6ba004ee080ce3deb3edae35e9","sms":"e39203556bab2366e56296ce42e974a7","websdk":"0704dae1eb637cbeb4a847506058402d"}; 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.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_e6aef002e162dc3c3a947c6f327cd93d.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); } } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", bxBootstrap); } else { bxBootstrap(); }})();