(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":3634,"name":"Shinesty","cookie_name":"bounceClientVisit3634","domain":"shinesty.com","ct":"multi_cookie","ally":0,"ei":1,"tcjs":"","cjs":"/* https://www.wrike.com/open.htm?id=876092036 */\n\nbouncex.setCouponCookie = function(cookie, domain) {\n domain = domain || location.host;\n var domains = [\n domain, /* with subdomain */\n domain.replace('www', ''), /* no subdomain i.e. .forever21.com */\n ];\n\n for (var k = 0; k < domains.length; k++) {\n /* delete any existing cookie */\n bouncex.utils.cookies.create({\n name: \"discount_code\",\n value: cookie,\n days: -1,\n domain: domains[k]\n });\n /* write cookie value saved from previous session */\n bouncex.utils.cookies.create({\n name: \"discount_code\",\n value: cookie,\n domain: domains[k]\n });\n }\n}\n\nbouncex.infoStore = {\n sessionStorageIdentifier: 'bxInfoStore',\n set: function(data) {\n var hashedData = bouncex.lz.compressToURI(JSON.stringify(data));\n try {\n sessionStorage.setItem(this.sessionStorageIdentifier, hashedData);\n } catch(e) {\n bouncex.err('session storage failure');\n }\n },\n \n get: function() {\n var info = sessionStorage.getItem(this.sessionStorageIdentifier);\n return info ? JSON.parse(bouncex.lz.decompressFromURI(info)) : '';\n },\n \n infoIsStored: function() {\n return !!sessionStorage.getItem(this.sessionStorageIdentifier);\n },\n \n populateFields: function(fields) {\n if (!this.infoIsStored()) return;\n \n var data = this.get();\n for (var field in fields) {\n if (fields.hasOwnProperty(field)) {\n fields[field].val(data[field]);\n }\n }\n }\n};\n\n/* https://www.wrike.com/open.htm?id=887224652 */\n(function() {\n if (bouncex.website.pts === 'checkout') {\n var coupon = bouncex.cookie.cpn,\n cartValueOver30 = bouncex.vars.cart_value > 30,\n subscriptionCheckout = bouncex.utils.url.allowParams().indexOf('subscription') > -1,\n couponCodeAlreadyVisible = jQuery('span.reduction-code__text:visible').length > 0 || jQuery('span[data-discount-code]:visible').length > 0,\n $couponField;\n\n if (couponCodeAlreadyVisible || !(coupon)) {\n return;\n }\n\n if (subscriptionCheckout) {\n $couponField = jQuery('#discount_code');\n } else {\n $couponField = jQuery('#checkout_reduction_code');\n }\n\n if (cartValueOver30 && coupon['10off30']) {\n $couponField.val(coupon['10off30']);\n if (subscriptionCheckout) {\n jQuery('#apply-discount').click();\n } else {\n jQuery('form.edit_checkout').last().submit();\n }\n } else if (subscriptionCheckout && ['thong', 'cheeky'].indexOf(bouncex.vars.subscriptions_in_cart) > - 1) {\n var cheekyOrThong = Object.keys(coupon)[0];\n if (cheekyOrThong.indexOf('thong') > -1 || cheekyOrThong.indexOf('cheeky') > -1) {\n $couponField.val(Object.values(coupon)[0]);\n jQuery('#apply-discount').click();\n }\n }\n }\n})();\n\n\n// (function() {\n// if (bouncex.testmode.bxdev && bouncex.utils.url.allowParams().indexOf('monthly-boxer-subscription') > -1) {\n// bouncex.et.onVisible('main.visible', function () {\n// bouncex.log('working');\n// bouncex.website.pts = 'product';\n// });\n// }\n// })();","force_https":false,"waypoints":false,"content_width":900,"gai":"UA-41002306-19","swids":"","sd":0,"ljq":"auto","campaign_id":0,"is_preview":false,"aco":{"first_party_limit":"3500","local_storage":"1"},"cmp":{"gdpr":1,"gmp":0,"whitelist_check":0},"burls":[],"ple":false,"fbe":true,"ffs":"","mas":2,"map":1,"gar":true,"ete":1,"ettm":false,"etjs":"var CLEAN_URL = bouncex.utils.url.allowParams(),\n EXCLUDE_URLS = [\n 'gift-card',\n 'pack-builder',\n 'build-a-boxer-pack',\n 'fathers-day-build-a-ball-hammock'\n ],\n EXCLUDED_ATC_IDS = [\n '190780105', // gift-card ID\n ],\n SUBSCRIPTION_IDS = [\n '1881099141189', // thong subscription\n '6785612775493', // thong subscription\n '6785612841029', // thong subscription\n '6785612873797', // boxer subscription\n '1653430157381', // boxer subscription\n '2079872581701', // couples subscription\n '6785613103173' // couples subscription\n ];\n\n/* --------------------------------- HELPERS -------------------------------- */\n\nfunction isExcludedFromTracking(pdpUrl){\n var match = EXCLUDE_URLS.filter(function(excludedUrl) {\n return pdpUrl.indexOf(excludedUrl) > -1;\n });\n\n return match.length === 0;\n}\n\n/* ------------------------------ ITEM TRACKING ----------------------------- */\n\nfunction getItem() {\n var productViewEvents = (window.wunderkindEvents || []).filter(e => e.eventName === 'productView'),\n pdpData = (productViewEvents.pop() || {data: []}).data[0];\n\n return {\n id: pdpData.shopifyProductId,\n copy: pdpData.name,\n category: pdpData.itemCategory,\n imageurl: pdpData.image,\n url: pdpData.url,\n instock: pdpData.productInStock,\n excluded: pdpData.productIsExcluded,\n subscription: pdpData.isSubscriptionPage\n };\n}\n\nfunction fireViewItem(itemId){\n bouncex.push(['view item', {\n 'item:id': itemId,\n 'item:itemgroupid': itemId\n\t}]);\n}\n\nfunction initializeItemEvents() {\n var item;\n\n bouncex.et.onTrue(\n function () {\n item = getItem();\n return !!item.id &&\n !!item.copy &&\n !!item.category &&\n !!item.url;\n },\n function () {\n if (!isExcludedFromTracking(item.url)) {\n return;\n }\n\n if(item.imageurl) {\n bouncex.push(['item', item]);\n }\n\n fireViewItem(item.id);\n\n if (item.subscription || item.url.indexOf('subscription') > -1){\n pushSubscriptionEvent(item.id, true, false);\n }\n },\n 10\n );\n}\n\n/* ------------------------------ SUBSCRIPTION TRACKING ------------------------------ */\n\n// On the \"All Subscriptions\" page we are firing view item for each subscription.\nfunction initializeAllSubscriptionsTracking(){\n var productViewEvents = (window.wunderkindEvents || []).filter(e => e.eventName === 'productView'),\n subIds = [ '6785613103173' ]; // client is not currently pushing an event for the Couples Subscription on the All Subs page, so adding manually\n\n productViewEvents.forEach(function(e){\n var eventData = (e.data || [])[0] || {},\n itemId = eventData.shopifyProductId;\n\n if (eventData.name === 'Monthly Underwear Subscription' && subIds.indexOf(itemId) === -1) {\n subIds.push(itemId);\n }\n });\n\n subIds.forEach(id => fireViewItem(id));\n}\n\nfunction pushSubscriptionEvent(id, pushEvent, wunderkindEvent){\n var eventName,\n itemId;\n\n if (wunderkindEvent && wunderkindEvent.data && wunderkindEvent.data.subscriptionType) {\n eventName = wunderkindEvent.data.subscriptionType;\n }\n\n switch (id) {\n case '1653430157381':\n\t\tcase '6785612873797':\n eventName = 'boxer_subscription';\n itemId = 6785612873797;\n break;\n case '1881099141189':\n\t\tcase '6785612841029':\n case '6785612775493':\n eventName = 'thong_subscription';\n itemId = 6785612841029;\n break;\n case '2079872581701':\n case '6785613103173':\n eventName = 'matching_subscription';\n itemId = 6785613103173;\n break;\n default:\n break;\n }\n\n if (pushEvent && eventName){\n bouncex.push([eventName]);\n }\n\n return itemId;\n}\n\n/* ------------------------------ CATALOG TRACKING ------------------------------ */\n\nfunction trackSkuChange(event){\n if (event.data) {\n var feedId = event.data.shopifyVariantId,\n itemId = event.data.shopifyProductId;\n\n if(itemId && feedId){\n bouncex.push(['select_sku', {\n 'item:id': itemId,\n 'item:itemgroupid': itemId,\n 'item:feedid': feedId\n }]);\n }\n }\n}\n\n/* ---------------------------- NOTIFY ME TRACKING --------------------------- */\n\n// Identify users who sign up for waistlist on out of stock products.\nfunction trackNotfiyMe(event){\n if (event.data) {\n bouncex.push(['notify me', {'item:id': event.data.shopifyProductId}]);\n }\n}\n\n/* ---------------------------- CATEGORY TRACKING --------------------------- */\n\nfunction getCategoryObject() {\n var viewItemListEvents = (window.wunderkindEvents || []).filter(e => e.eventName === 'viewItemList'),\n categoryData = (viewItemListEvents.pop() || {'data': {}}).data,\n pageUrl = bouncex.website.pts === 'search' ? bouncex.utils.url.allowParams('q') : categoryData.collectionUrl;\n\n return {\n 'page:url': pageUrl,\n 'items:ids': categoryData.collectionProductIds\n };\n}\n\nfunction fireCouplesEvents(){\n\tif(CLEAN_URL.indexOf('couples-matching-underwear') > -1){\n\t\tbouncex.push(['matching_subscription']);\n\t}\n}\n\nfunction initializeCategoryEvents() {\n var categoryObj;\n\n bouncex.et.onTrue(\n function() {\n categoryObj = getCategoryObject();\n return !!categoryObj['items:ids'] && !!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 pushAddToCartEvent(itemId, cartId) {\n bouncex.push(['add to cart',{'item:id': itemId }]);\n bouncex.setVar('cart_set', true);\n\n if (!bouncex.vars.cart_id && cartId) {\n bouncex.push(['cart_id', {'id': cartId}]);\n bouncex.setVar('cart_id', cartId);\n }\n}\n\nfunction trackAddToCart(event) {\n var cartId = (window.wunderkindEvents.filter(e => e.eventName === 'cartUpdate').pop() || {'data':{}}).data.cartId,\n eventIdsArr = event.data || [],\n itemId = eventIdsArr[0];\n\n // If add to cart ID array contains a subscripton ID, push an ATC event\n // for the subscription ID only and fire corresponding subscription event.\n if (eventIdsArr.some(id => SUBSCRIPTION_IDS.includes(id))) {\n for (var i = 0; i < eventIdsArr.length; i++) {\n itemId = eventIdsArr[i];\n\n if (SUBSCRIPTION_IDS.indexOf(itemId) > -1) {\n pushAddToCartEvent(itemId, cartId);\n pushSubscriptionEvent(itemId, true, false);\n return;\n }\n }\n }\n\n if (EXCLUDED_ATC_IDS.indexOf(itemId) > -1) { return; }\n\n pushAddToCartEvent(itemId, cartId);\n}\n\nfunction initializeWkdEventStreamTracking() {\n bouncex.et.onVarChange('wknd_events_obj', function(oldVal, newVal) {\n var eventsObj = bouncex.parseJSON(newVal, {}),\n lastEvent = eventsObj.lastEvent;\n\n if (!lastEvent) { return; }\n\n switch(lastEvent.eventName) {\n case 'cartEmpty':\n trackEmptyCart();\n break;\n case 'addToCart':\n trackAddToCart(lastEvent);\n break;\n case 'variantSelect':\n trackSkuChange(lastEvent);\n break;\n case 'backInStockSubscribe':\n trackNotfiyMe(lastEvent);\n break;\n case 'subscriptionSelect':\n pushSubscriptionEvent('', true, lastEvent);\n break;\n default:\n break;\n }\n });\n}\n\nfunction trackEmptyCart() {\n if (bouncex.vars.cart_set) {\n bouncex.push(['empty_cart']);\n bouncex.setVar('cart_set', false);\n }\n}\n\nfunction initializeCartEvents() {\n if (bouncex.utils.url.getParam('cartId').length && !bouncex.vars.replen_success){\n replenishmentSuccessful();\n }\n}\n\n// If the cartId in the param matches the cartId in localStorage and the cart_qty > 0,\n// we set an RTV for replen_success to true if needed for continuities.\nfunction replenishmentSuccessful(){\n bouncex.setTimeout2(function(){\n if (!bouncex.vars.cart_qty){\n return;\n }\n\n var paramCartId = bouncex.utils.url.getParam('cartId'),\n localCartId = localStorage['shinesty:shopify:cartId'] || '';\n\n if (paramCartId === localCartId){\n bouncex.setVar('replen_success', true);\n }\n }, 1000);\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 = bouncex.utils.getNestedProp('customer.email', '') ||\n bouncex.utils.getNestedProp('heap.identity', '') ||\n jQuery('#customer_detail .email.note').text().trim();\n\n if (!bouncex.utils.validate.email(userEmail)) {\n return;\n }\n\n bouncex.push([\n 'user',\n {\n 'email': userEmail,\n 'source': 'LoggedIn'\n }\n ]);\n bouncex.setVar('logged_in_identified', true);\n}\n\n/* --------------------------- INITIALIZE TRACKING -------------------------- */\n\nfunction isValidDomain() {\n return CLEAN_URL.indexOf('www.shinesty.com') > -1 || CLEAN_URL.indexOf('account.shinesty.com') > -1;\n}\n\nfunction isEn() {\n var lang = bouncex.html.attr('lang') || window.navigator && window.navigator.language || '';\n return /^en/.test(lang);\n}\n\nfunction init() {\n if (!isValidDomain() || !isEn()) {\n return;\n }\n\n initializeUserTracking();\n initializeCartEvents();\n initializeWkdEventStreamTracking();\n\n bouncex.setTimeout2(function(){\n switch (bouncex.website.pts) {\n case 'category':\n case 'search':\n initializeCategoryEvents();\n fireCouplesEvents();\n break;\n case 'product':\n initializeItemEvents();\n break;\n case 'all_subscriptions':\n initializeAllSubscriptionsTracking();\n break;\n default:\n break;\n }\n }, 1000);\n}\n\ninit();\n","dge":true,"bxidLoadFirst":false,"pie":true,"cme":true,"gbi_enabled":0,"bpush":false,"pt":{"all_subscriptions":{"testmode":false,"val":[[{"activation":"current_page_url","prop":"contains","prop2":"","prop3":"","val":"/all-subscriptions"}]]},"cart":{"testmode":false,"val":[[{"activation":"js","prop":"","prop2":"","prop3":"","val":"/\\/cart/.test(window.location.pathname);"}],[{"activation":"current_page_url","prop":"contains","prop2":"","prop3":"","val":"shinesty.com"}]]},"category":{"testmode":false,"val":[[{"activation":"js","prop":"","prop2":"","prop3":"","val":"/\\/collections\\/(?!.*\\/products\\/)/.test(window.location.pathname);"}],[{"activation":"current_page_url","prop":"contains","prop2":"","prop3":"","val":"shinesty.com"}]]},"checkout":{"testmode":false,"val":[[{"activation":"js","prop":"","prop2":"","prop3":"","val":"/\\/checkout/.test(window.location.pathname);"}],[{"activation":"current_page_url","prop":"contains","prop2":"","prop3":"","val":"shinesty.com"}]]},"home":{"testmode":false,"val":[[{"activation":"js","prop":"","prop2":"","prop3":"","val":"window.location.pathname === '/' && !/shopifypreview/.test(window.location.href);"}],[{"activation":"current_page_url","prop":"contains","prop2":"","prop3":"","val":"shinesty.com"}]]},"product":{"testmode":false,"val":[[{"activation":"js","prop":"","prop2":"","prop3":"","val":"/\\/products\\//.test(window.location.pathname);"}],[{"activation":"current_page_url","prop":"contains","prop2":"","prop3":"","val":"shinesty.com"}]]},"search":{"testmode":false,"val":[[{"activation":"js","prop":"","prop2":"","prop3":"","val":"/\\/search/.test(window.location.pathname);"}],[{"activation":"current_page_url","prop":"contains","prop2":"","prop3":"","val":"shinesty.com"}]]}},"els":{"CART - Checkout Button":".mini-cart-checkout-wrapper div.col-xs-12:not(.note_container)","CART - Promo Code Apply Button":".order-summary__section--discount button","CART - Promo Code Box":"input#checkout_reduction_code","CAT - Product Grid Image":"","Footer":".footer","Navigation bar":".row.fixit:visible","PDP - Add to Cart Button":"","PDP - Hero Image":".product_image_container","PDP - Product Name":".product_name:visible","PDP - Product Price":".product_info_container .modal_price:visible","PDP - Size Option":"#select_smaller_2","SEARCH - Product Grid Image":""},"vars":[{"name":"logged_in","polling":"none","persist":"visit","page_types":[],"testmode":false,"default":"false","code":"(function(){\n if(window.location.href.indexOf('/account/login') > -1) {\n return false;\n } else if(!!bouncex.utils.getNestedProp('customer.email')) {\n return true;\n } else {\n return null;\n }\n})();","trigger":""},{"name":"ever_logged_in","polling":"all","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":"(function() {\n var checkoutQty = 0;\n jQuery('.product-thumbnail__quantity').each(function() {\n checkoutQty += parseInt(jQuery(this).text());\n });\n\n return jQuery('button[title$=\"Cart\"]').first().text() || checkoutQty;\n})();","trigger":""},{"name":"cart_value","polling":"all","persist":"visit","page_types":[],"testmode":false,"default":"0","code":"jQuery('.total-line--subtotal .total-line__price').text().replace(/[^0-9.]/g, '')\n || jQuery('div[aria-modal=\"true\"] div:contains(\"Subtotal\")').last().text().replace(/[^0-9.]/g, '')\n || null;","trigger":""},{"name":"prod_price","polling":"all","persist":"no","page_types":["product"],"testmode":false,"default":"false","code":"(function(){\n var productViewEvents = (window.wunderkindEvents || []).filter(function(e){\n return e.eventName === 'productView';\n }),\n pdpData = (productViewEvents.pop() || {data: []}).data[0];\n\n return Number(pdpData.price || '');\n})();","trigger":""},{"name":"prod_name","polling":"vars","persist":"no","page_types":["product"],"testmode":false,"default":"false","code":"(function(){\n var productViewEvents = (window.wunderkindEvents || []).filter(function(e){\n return e.eventName === 'productView';\n }),\n pdpData = (productViewEvents.pop() || {data: []}).data[0];\n\n return pdpData.name;\n})();","trigger":""},{"name":"in_stock","polling":"all","persist":"no","page_types":["product"],"testmode":false,"default":"false","code":"(function(){\n var productViewEvents = (window.wunderkindEvents || []).filter(function(e){\n return e.eventName === 'productView';\n }),\n pdpData = (productViewEvents.pop() || {data: []}).data[0];\n\n return pdpData.productInStock;\n})();","trigger":""},{"name":"submitted_onsite","polling":"all","persist":"permanent","page_types":[],"testmode":false,"default":"false","code":"jQuery('p span:contains(Felt good)').is(':visible') || null;","trigger":""},{"name":"item_id","polling":"vars","persist":"no","page_types":["product"],"testmode":false,"default":"false","code":"(function(){\n var productViewEvents = (window.wunderkindEvents || []).filter(function(e){\n return e.eventName === 'productView';\n }),\n pdpData = (productViewEvents.pop() || {data: []}).data[0];\n\n return pdpData.shopifyProductId;\n})();","trigger":""},{"name":"items_ids","polling":"none","persist":"no","page_types":["category","search"],"testmode":false,"default":"false","code":"(function(){\n var viewItemListEvents = (window.wunderkindEvents || []).filter(function(e){\n return e.eventName === 'viewItemList';\n }),\n categoryData = (viewItemListEvents.pop() || {'data': {}}).data;\n\n return categoryData.collectionProductIds;\n})();","trigger":""},{"name":"item_category","polling":"none","persist":"no","page_types":["product"],"testmode":false,"default":"false","code":"(function(){\n var productViewEvents = (window.wunderkindEvents || []).filter(function(e){\n return e.eventName === 'productView';\n }),\n pdpData = (productViewEvents.pop() || {data: []}).data[0];\n\n return pdpData.itemCategory || '';\n})();","trigger":""},{"name":"page_url","polling":"none","persist":"no","page_types":[],"testmode":false,"default":"false","code":"window.location.origin + window.location.pathname;","trigger":""},{"name":"item_copy","polling":"none","persist":"no","page_types":["product"],"testmode":false,"default":"false","code":"(function(){\n var productViewEvents = (window.wunderkindEvents || []).filter(function(e){\n return e.eventName === 'productView';\n }),\n pdpData = (productViewEvents.pop() || {data: []}).data[0];\n\n return pdpData.name;\n})();","trigger":"pageload"},{"name":"cart","polling":"none","persist":"permanent","page_types":[],"testmode":false,"default":"false","code":"null;","trigger":"pageload"},{"name":"cart_set","polling":"none","persist":"permanent","page_types":[],"testmode":false,"default":"false","code":"null;","trigger":"pageload"},{"name":"previous_sku","polling":"none","persist":"visit","page_types":[],"testmode":false,"default":"false","code":"null;","trigger":"pageload"},{"name":"subscriptions_in_cart","polling":"all","persist":"visit","page_types":[],"testmode":false,"default":"false","code":"(function(){\n var subscriptionTypes = [\n [\"boxer\", \"boxer\"],\n [\"trunks\", \"boxer\"],\n [\"brief\", \"boxer\"],\n [\"cheeky\", \"cheeky\"],\n [\"bikini\", \"bikini\"],\n [\"thong\", \"thong\"],\n [\"matching\", \"couples\"],\n [\"boyshort\", \"boyshort\"]\n ],\n subSelector = jQuery('.product__description__property:contains(\"isSubscription: true\") ~ span:contains(\"subscriptionTitle:\")').first().text().toLowerCase();\n\n \n if ((bouncex.website.pts ===\"checkout\" || window.location.href.indexOf('subscription/checkout') > -1) && !!subSelector) {\n \n for (var i = 0; i < subscriptionTypes.length; i++) {\n if (subSelector.indexOf(subscriptionTypes[i][0]) > -1) {\n return subscriptionTypes[i][1];\n }\n } \n }\n })();","trigger":"pageload"},{"name":"cart_id","polling":"none","persist":"visit","page_types":[],"testmode":false,"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":"replen_success","polling":"none","persist":"visit","page_types":[],"testmode":false,"default":"false","code":"null;","trigger":"pageload"},{"name":"sku","polling":"vars","persist":"visit","page_types":[],"testmode":false,"default":"false","code":"(function(){\n var variantEvents = (window.wunderkindEvents || []).filter(function(e){\n return e.eventName === 'variantSelect';\n }),\n variantData = (variantEvents.pop() || {'data': {}}).data;\n\n return variantData.shopifyProductId;\n})();","trigger":"pageload"},{"name":"prev_sku","polling":"none","persist":"visit","page_types":[],"testmode":true,"default":"false","code":"null;","trigger":"pageload"},{"name":"cart_total_gtm","polling":"all","persist":"visit","page_types":[],"testmode":true,"default":"false","code":"(function(){\n var gtmID = bouncex.utils.url.getParam('id', jQuery('script[src*=\"googletagmanager\"]').attr('src'));\n \n return gtmID && window.google_tag_manager[gtmID] ? bouncex.utils.gtmLookup('cart_total') : jQuery('[title=\"Open Cart\"] span:first').text().trim() || 0;\n})()","trigger":"pageload"},{"name":"qv_id","polling":"all","persist":"visit","page_types":["category","product","search"],"testmode":true,"default":"false","code":"(function(){\n var gtmID = bouncex.utils.url.getParam('id', jQuery('script[src*=\"googletagmanager\"]').attr('src'));\n \n if(gtmID && window.google_tag_manager[gtmID]){\n return bouncex.utils.gtmLookup(\"ecommerce\") && bouncex.utils.gtmLookup(\"ecommerce\").detail && bouncex.utils.gtmLookup(\"ecommerce\").detail.products[0].product_id;\n }\n return false;\n})()","trigger":"pageload"},{"name":"sub_id","polling":"none","persist":"no","page_types":["all_subscriptions"],"testmode":true,"default":"false","code":"null;","trigger":"pageload"},{"name":"cart_names","polling":"all","persist":"permanent","page_types":[],"testmode":false,"default":"false","code":"(function(){\n\tvar names = [],\n\t\t$cartNames = jQuery('.px-2 .mt-2, .px-2 span.tracking-wider[class*=\"text-\"]'),\n\t\tcurrName;\n\n\t\t$cartNames.each(function(i) {\n\t\t\tcurrName = $cartNames.eq(i).text().trim();\n\n\t\t\tif (currName) {\n\t\t\t\tnames.push(currName);\n\t\t\t}\n\t\t})\n\n\t\treturn names.join(',') || null;\n})();","trigger":"pageload"},{"name":"cart_images","polling":"all","persist":"permanent","page_types":[],"testmode":false,"default":"false","code":"(function(){\n\tvar imgs = [],\n\t\t$cartImgs = jQuery('.items-center .flex-grow img[data-nimg=\"intrinsic\"], .px-2 img[alt=\"placeholder icon\"]'),\n\t\tcurrImg;\n\n\t\t$cartImgs.each(function(i) {\n\t\t\tcurrImg = $cartImgs.eq(i).attr('src');\n\n\t\t\tif (currImg) {\n\t\t\t\timgs.push(currImg);\n\t\t\t}\n\t\t})\n\n\t\treturn imgs.join(',') || null;\n})();","trigger":"pageload"},{"name":"wknd_events_obj","polling":"vars","persist":"visit","page_types":[],"testmode":false,"default":"false","code":"(function(){\n var wkndEvents = window.wunderkindEvents || [];\n \n return JSON.stringify({\n eventCount: wkndEvents.length,\n lastEvent: wkndEvents[wkndEvents.length - 1]\n });\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":1,"mibcx":1,"te":1,"cart_rep":{"get":"","set":""},"ulpj":{"bxid":"espemailid"},"cus":"","miw_exclude":"#conjured_emails","enabled":1},"etjson":null,"osre":true,"osru":"osr.bounceexchange.com/v1/osr/items","checkDfp":false,"gamNetwork":"","spa":1,"spatm":0,"preinit_cjs":"/** \n * Segments - Cartridge Boilerplate\n * This code belongs in pre-init.js. If you want to write code\n * that runs when the page loads but does not leverage the intercept\n * or mirror methods use the Event Tracking code block. Don't forget\n * to change testMode to false to set your code live.\n */\nvar segments = {\n /* PROPERTIES */\n testMode: false,\n interceptEnabled: true,\n mirrorEnabled: true,\n dlWatcherEnabled: true,\n /* METHODS */\n /* Intercept Events */\n useIntercept: function() {\n if (this.interceptEnabled) {\n bouncex.utils.shqInterceptEvent = {\n 'cartAdd': true,\n 'categoryView': false,\n 'productView':false,\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 \t\t\t}\n };\n }\n },\n dlFuncs: function (e) {\n var sEvent = \"\", eObj;\n \n //Get the Ecommerce Obj\n for(i=0; i < e.length; i++){\n var thisOne = e[i];\n if(thisOne.ecommerce && thisOne.event){\n sEvent = thisOne.event;\n eObj = thisOne;\n }\n }\n \n //PDP\n if (sEvent === 'dl_view_item') {\n var pID = eObj?.ecommerce?.detail?.products[0]?.product_id;\n if(pID){\n _shq.push(['pageView',\n {\n 'pageType': 'product',\n 'productId': pID.toString()\n }]);\n }\n }\n if(sEvent === 'dl_view_item_list'){\n this.captureCategory();\n }\n //Cart\n if(sEvent === 'dl_view_cart'){\n this.captureCart(eObj);\n }\n //Add to Cart\n if(sEvent === 'dl_add_to_cart'){\n this.captureATC(eObj);\n }\n //Remove Cart\n if(sEvent === 'dl_remove_from_cart'){\n this.removeCart(eObj);\n }\n if(sEvent === 'dl_search_results'){\n var searchTerm = bouncex.utils.getParam('q').replace(/\\+/gi,' ');\n if (searchTerm){\n _shq.push([ 'pageView', \n {\n 'pageType': 'search',\n 'searchPhrase': searchTerm\n }]);\n }\n }\n },\n \n WatchArray: function (a, cb, settings = {}){\n let len = settings.catchUp ? 0 : a.length,\n getUpdatedArr = () => settings.filter ? a.filter(settings.filter) : [...a];\n arr = getUpdatedArr();\n watcher = () => {\n let arrUpdated = getUpdatedArr();\n //console.log(len, arrUpdated.length, len < arrUpdated.length);\n if(len < arrUpdated.length){\n let deltaStart = arrUpdated.length - (arrUpdated.length - len);\n //console.log(\"delta start\", deltaStart, len, arrUpdated.length, len < arrUpdated.length)\n len = arrUpdated.length;\n let delta = arrUpdated.splice(deltaStart);\n this.subs.forEach(e => e(delta));\n }\n setTimeout(watcher, (settings.intervalMs || 1000)); \n };\n this.subs = [];\n this.removeSub = i => this.subs.splice(i,1);\n this.replaceSub = (i, f = () => {}) => this.subs.splice(i, 1, f);\n if(cb){this.subs.push(cb)}\n watcher();\n },\n removeCart: function(obj){\n var prodId = bouncex.utils.getNestedProp('ecommerce.remove.products[0].variant_id','',obj); \n var qty = bouncex.utils.getNestedProp('ecommerce.remove.products[0].quantity','',obj); \n \n if(prodId){\n _shq.push([ 'onCartRemove', { \n Items: [{\n 'ProductId': prodId,\n 'Quantity': qty\n }], \n }]);\n }\n },\n captureCart: function(obj){\n var arrItems = bouncex.utils.getNestedProp('ecommerce.impressions',[],obj);\n if (arrItems && arrItems.length > 0) {\n var cartTotal = bouncex.utils.getNestedProp('cart_total',0,obj);\n var cartItems = arrItems.map(function (ea) {\n return { ProductId: ea.variant_id, UnitPrice: ea.price, Quantity: ea.quantity };\n });\n \n if (cartItems && cartTotal > 0) {\n _shq.push([ 'onCartView', { \n \"Items\": cartItems,\n \"Total\": cartTotal\n }]);\n }\n }else{\n _shq.push(['onCartEmpty']);\n }\n },\n captureATC: function(obj){\n\t\tvar prodId = bouncex.utils.getNestedProp('ecommerce.add.products[0].variant_id','',obj);\n\t\tvar price = bouncex.utils.getNestedProp('ecommerce.add.products[0].price','',obj);\n\t\tvar qty = bouncex.utils.getNestedProp('ecommerce.add.products[0].quantity','',obj);\n\t\tvar atcArray = [];\n \n if(prodId && qty && price){\n atcArray.push({\n 'ProductId': prodId,\n 'UnitPrice': price,\n 'Quantity': qty\n });\n if (atcArray){\n \t_shq.push(['onCartAdd', {'Items': atcArray }]);\n }\n }\n },\n captureCategory: function(){\n\t\tvar catCode = bouncex.utils.url.removeParams().split('/').pop().trim();\n\t\tif (catCode){\n _shq.push([ 'pageView', \n {\n 'pageType': 'category',\n 'catName': catCode,\n 'catId': catCode\n }]);\n }\n },\n captureEmail: function(){\n var sURL = bouncex.utils.getNestedProp('location.href','',window).split('/').pop();\n var accEmail = document.querySelector(\"input[id='customer_email']\") || document.querySelector(\"input[id='email']\");\n\n \tif (accEmail){\n \t accEmail.addEventListener('change', function(){\n \t if(accEmail.value){\n _shq.push([ 'onEmail', \n {\n 'email': accEmail.value,\n 'type': 'account'\n }]);\n \t }\n \t });\n }\n \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.captureEmail();\n var watchyTower = new this.WatchArray(window.dataLayer, function(a){segments.dlFuncs(a)}, {catchUp: false}); \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 Shinesty mktg txts (like cart reminders) to this #, per terms.","eventSharing":true,"shqId":"nhvkd095to-1","enabled":1},"pde":true,"fmc":["US","CA"],"fme":true,"fmx":"#conjured_emails","uid2":false,"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,"devMode":0},"ga4_property_id":"354512592","ga4_measurement_id":"G-99C5J4EW70","tag_state_domain":"api.bounceexchange.com","tag_state_domain_enabled":false} ; 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":"ba8ae19a5bf9548f3d50df1e54121805","creativesBaseStyles":"a53944a2","gpsAuction":"bbb80866120d17013073bb6d284cbd6b","inbox":"c5ffeacd3b77d074a53f2878c1332dc9","onsite":"c05f8c5551fa6b964660ad61916291c1","sms":"e39203556bab2366e56296ce42e974a7","websdk":"9c2817e65e803cb8c86d0410c88f20c1","website_campaigns_3634":"643b75205b4d5168cd63a8dd6cfd3865"}; bouncex.push = function(pushData) { bouncex.pushedData.push(pushData); } var runtime = document.createElement('script'); runtime.setAttribute('src', '//assets.bounceexchange.com/assets/smart-tag/versioned/runtime_c81e76ee00d795b1eebf8d27949f8dc5.br.js'); runtime.setAttribute('async', 'async'); bouncex.initializeTag = function() { var script = document.createElement('script'); script.setAttribute('src', '//assets.bounceexchange.com/assets/smart-tag/versioned/main-v2_d92654ef80b404e10948396caee3f7d0.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_e28899bed33dd2712b5b7495c7e979b8.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() {}; }; runtime.onload = bouncex.initializeTag; 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(); }})();