(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":2197,"name":"HC - Checks Super Store","cookie_name":"bounceClientVisit2197","domain":"checks-superstore.com","ct":"bind_to_domain","ally":1,"ei":0,"tcjs":"// PD 8/30/2018: Trigger omniture event on post conversion only if bx ad has impressed\n(function() {\n for (var ca_id in bouncex.cookie.campaigns) {\n if (bouncex.cookie.campaigns.hasOwnProperty(ca_id) && bouncex.cookie.campaigns[ca_id].lavid) {\n bouncex.omnitureLinkTrack2('BounceX Conversion - Campaign ' + ca_id, 'event30');\n }\n }\n})();","cjs":"/*\nGO: Omniture event tracking\nPD 08/29/18 - We are disabling this version and replacing with omnitureLinkTrack2 which is called in Custom Campaign JS. Can't remove the function entirely to maintain backwards compatibility for old campaigns.\n*/\nbouncex.omnitureLinkTrack = function(campaignLabel, eventId) {\n // try{\n // window.s.linkTrackVars = 'eVar34,events';\n // window.s.linkTrackEvents = eventId;\n // window.s.eVar34 = campaignLabel;\n // window.s.events = eventId;\n // window.s.tl(true, 'o', campaignLabel);\n // } catch (e) {\n // console.error('BX Omniture Error: ' + e);\n // }\n};\n\n// omitureLinkTrack2 is called in Custom Campaign JS\nbouncex.omnitureLinkTrack2 = function(campaignLabel, eventId) {\n var parsedLabel = eventId !== 'event30' ? '' : campaignLabel;\n // PD: Post conversion events get unique label formatting sine GA label isn't available\n if (eventId !== 'event30') {\n var campaignNameRegex = /(?:variation|control) - (.*)(?:\\([^)]*\\))/;\n var campaignIDRegex = /[^(]\\d{3,10}[^)]/g;\n var campaignName = campaignNameRegex.exec(campaignLabel)[1] || [];\n var parentId = campaignLabel.match(campaignIDRegex)[0] || [];\n var variationId = campaignLabel.match(campaignIDRegex)[1] || [];\n parsedLabel = parentId + ' ' + variationId + ' : ' + campaignName;\n }\n\n\n try{\n window.s.linkTrackVars = 'eVar34,events';\n window.s.linkTrackEvents = eventId;\n window.s.eVar34 = parsedLabel;\n window.s.events = eventId;\n window.s.tl(true, 'o', parsedLabel);\n } catch (e) {\n console.error('BX Omniture Error: ' + e);\n }\n};\n\n/* enable.feature.COMPLIANCE_REFACTOR_ENABLED */","force_https":false,"waypoints":false,"content_width":0,"gai":"","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":0,"ettm":true,"etjs":"","dge":false,"bxidLoadFirst":false,"pie":false,"cme":false,"gbi_enabled":0,"bpush":false,"pt":{"cart":{"testmode":true,"val":[[{"activation":"js","prop":"","prop2":"","prop3":"","val":"window.location.pathname === '/Cart.aspx';"}]]},"category":{"testmode":true,"val":[[{"activation":"js","prop":"","prop2":"","prop3":"","val":"window.location.href.indexOf('/c/') > -1 && [\"/c/support-services/about-us/20968\", \"/c/support-services/help-faq/20965\",\"/c/support-services/privacy-policy/20966\", \"/c/best-value-checks/support-and-services/terms-of-service/21076\", \"/c/support-services/security/20967\", \"/c/support-services/sitemap/20970\"].indexOf(window.location.pathname) === -1;"}]]},"checkout":{"testmode":true,"val":[[{"activation":"js","prop":"","prop2":"","prop3":"","val":"jQuery('.checkOutCrumb_menu').length > 0;"}]]},"home":{"testmode":true,"val":[[{"activation":"js","prop":"","prop2":"","prop3":"","val":"window.location.pathname === '/home';"}]]},"product":{"testmode":true,"val":[[{"activation":"js","prop":"","prop2":"","prop3":"","val":"window.location.href.indexOf('/p/') > -1;"}]]},"search":{"testmode":true,"val":[[{"activation":"js","prop":"","prop2":"","prop3":"","val":"window.location.pathname.indexOf(\"/search/q/x\") > -1;"}]]}},"els":null,"vars":[{"name":"ibx_test","polling":"none","persist":"visit","page_types":[],"testmode":false,"default":"false","code":"location.href.indexOf('ibx_test') >= 0 || null;","trigger":""},{"name":"cart","polling":"none","persist":"visit","page_types":[],"testmode":false,"default":"false","code":"null;","trigger":""},{"name":"cart_qty","polling":"all","persist":"permanent","page_types":[],"testmode":false,"default":"0","code":"(function() {\n var cart_val = Number(jQuery(\"#MiniLinks1_MiniCart1_lblCartCost\").text().replace(/[^0-9.]/g,''));\n if (/Cart.aspx/.test(window.location.pathname)) {\n return jQuery('.productName').length;\n } else if (cart_val === 0){\n return 0;\n } \n return null;\n})();","trigger":""},{"name":"coupon_applied","polling":"none","persist":"visit","page_types":[],"testmode":false,"default":"false","code":"(function() {\n var $couponField = jQuery('#MainContent_ShoppingCart_PromotionTextBox');\n var $discountDiv = jQuery('#MainContent_ShoppingCart_PromoSavingsDiv');\n \n if ($couponField.length > 0 && $discountDiv.length > 0) {\n var minus10CouponEntered = $couponField.val() === 'MINUS10';\n var discountApplied = parseFloat($discountDiv.text().replace(/[^0-9.]/g,'')) > 0;\n \n return minus10CouponEntered && discountApplied;\n \n }\n})();","trigger":""},{"name":"previous_customer","polling":"none","persist":"permanent","page_types":[],"testmode":false,"default":"false","code":"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":"bouncex.util = {\n\n\taddNamespace: function(obj, name) {\n\t\tvar namespacedObj = {};\n\t\tfor (var k in obj) {\n\t\t\tif (obj.hasOwnProperty(k)) {\n\t\t\t\tvar namespacedKey = k;\n\t\t\t\tif (k.indexOf(':') === -1) {\n\t\t\t\t\tnamespacedKey = name + ':' + k;\n\t\t\t\t}\n\t\t\t\tnamespacedObj[namespacedKey] = obj[k];\n\t\t\t}\n\t\t}\n\t\treturn namespacedObj;\n\t},\n\n\tgetOrigin: function() {\n\t\treturn window.location.origin || window.location.protocol + '//' + window.location.hostname + (window.location.port ? (':' + window.location.port) : '');\n\t},\n\n\t//copied from bouncex.ibx\n\tgetParam: function(name, qstring) {\n\t\tvar param_string = qstring ? ('?' + qstring) : window.location.href;\n\t\tname = name.replace(/[\\[]/,\"\\\\\\[\").replace(/[\\]]/,\"\\\\\\]\");\n\t\tvar regexS = \"[\\\\?&#]\"+name+\"=([^&#]*)\";\n\t\tvar regex = new RegExp( regexS );\n\t\tvar results = regex.exec( param_string );\n\t\tif( results == null ) return \"\";\n\t\telse return decodeURIComponent(results[1]);\n\t},\n\n\tgetTimeMs: function() {\n\t\treturn (new Date().getTime());\n\t},\n\n\tisValidInteger: function(val) {\n\t\t// returns true for 0, '0', 1, '1'. False for '', undefined\n\t\treturn !isNaN(parseInt(val));\n\t},\n\n\t//copied from bouncex.ibx\n\tisValidEmail: function(email) {\n\t\tvar regex = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\t\treturn regex.test(email);\n\t},\n\n\tisValidUrl: function(url, type) {\n\t\t//JKMD: type could differentiate between absolute/relative, allow mailto links, etc\n\t\tvar regex = /^(http|https):\\/\\/(([a-zA-Z0-9$\\-_.+!*'(),;:&=]|%[0-9a-fA-F]{2})+@)?(((25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|[1-9][0-9]|[0-9])(\\.(25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|[1-9][0-9]|[0-9])) {3})|localhost|([a-zA-Z0-9\\-\\u00C0-\\u017F]+\\.)+([a-zA-Z]{2,}))(:[0-9]+)?(\\/(([a-zA-Z0-9$\\-_.+!*'(),;:@&=]|%[0-9a-fA-F]{2})*(\\/([a-zA-Z0-9$\\-_.+!*'(),;:@&=]|%[0-9a-fA-F]{2})*)*)?(\\?([a-zA-Z0-9$\\-_.+!*'(),;:@&=\\/?]|%[0-9a-fA-F]{2})*)?(\\#([a-zA-Z0-9$\\-_.+!*'(),;:@&=\\/?]|%[0-9a-fA-F]{2})*)?)?$/;\n\t\treturn regex.test(url);\n\t},\n\n\tmakeQuerystring: function(o) {\n\t\tvar a=[],s='';\n\t\tfor(var k in o) {\n\t\t\tif(!o.hasOwnProperty(k)) continue;\n\t\t\ta.push(k+'='+encodeURIComponent(o[k]));\n\t\t}\n\t\treturn a.join('&');\n\t},\n\n\tmergeObject: function () {\n\t\tvar o = {};\n\t\tfor (var k in arguments) {\n\t\t\tvar a = arguments[k];\n\t\t\tif (typeof a == 'object') {\n\t\t\t\tfor (var k in a) {\n\t\t\t\t\tif (a.hasOwnProperty(k)) o[k] = a[k];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn o;\n\t}\n};\n\nbouncex.util.cookies = {\n\n\tdomain: window.bouncex.cookie_domain,\n\n\tcreate: function(obj){\n\t\tdefaults = {\n\t\t\tname : '',\n\t\t\tvalue : '',\n\t\t\tdomain : false,\n\t\t\tdays : 14\n\t\t};\n\t\tobj = bouncex.util.mergeObject(defaults, obj);\n\n\t\tif (!obj.name) { return false; }\n\n\t\tvar date = new Date();\n\t\tdate.setTime(date.getTime() + obj.days * 24 * 60 * 60 * 1e3);\n\t\tvar exp = '; expires=' + date.toGMTString();\n\n\t\tvar cookieString = obj.name + '=' + obj.value + exp + '; path=/;';\n\t\tif (obj.domain){\n\t\t\tcookieString += 'domain=' + obj.domain + ';';\n\t\t}\n\t\tdocument.cookie = cookieString;\n\t},\n\n\tdestroy: function (name) {\n\t\treturn this.create({\n\t\t\tname : name,\n\t\t\tdays : -1,\n\t\t});\n\t},\n\n\tread: function (name) {\n\t\t//return this.multi.get(name);\n\t\tvar t = name + \"=\", vars = document.cookie.split(\";\");\n\t\tfor (var r = 0; r < vars.length; r++) {\n\t\t\tvar i = vars[r];\n\t\t\twhile (i.charAt(0) == \" \")i = i.substring(1, i.length);\n\t\t\tif (i.indexOf(t) == 0)return i.substring(t.length, i.length);\n\t\t}\n\t\treturn null;\n\t}\n};\n\n// if utk is already defined persist whatever listeners it has before wipe\nvar previousListeners = bouncex.utk && bouncex.utk.listeners;\n\nbouncex.utk = {\n\n\tlisteners: previousListeners || {},\n\n\taddMetadata: function(obj) {\n\t\tvar m = this.getMetadata();\n\t\treturn bouncex.util.mergeObject(obj, m);\n\t},\n\n\tgetMetadata: function() {\n\t\treturn {\n\t\t\t'page:type': this.getPageType(),\n\t\t\t'customer:hasconverted': (bouncex.cookie.lc?1:0)\n\t\t};\n\t},\n\n\tgetPageType: function() {\n\t\treturn \"\";\n\t},\n\n\thoverItem: function(obj) {\n\t\tvar defaults = {\n\t\t\teventName: 'hover item',\n\t\t\titemTracking: false,\n\t\t\tselector: '',\n\t\t\tmaxItems: 5,\n\t\t\ttimeoutMs: 1000,\n\t\t\tgetItemData: function(el) { return null; },\n\t\t};\n\n\t\tobj = bouncex.util.mergeObject(defaults, obj);\n\n\t\t//validation here\n\t\tif (!obj.selector) { return null; }\n\n\t\t//register the tracker\n\t\tobj.stop = removeHoverTracking;\n\t\tvar trackerId = bouncex.utk.register(obj);\n\t\tvar timeout;\n\t\tvar ids = [];\n\n\t\tfunction onMouseenter() {\n\t\t\tclearTimeout(timeout);\n\t\t\tvar el = this;\n\t\t\ttimeout = setTimeout(function() {\n\t\t\t\tvar item = obj.getItemData(el);\n\t\t\t\tif (!item.id) { return; }\n\t\t\t\t//if not already tracked\n\t\t\t\tif (ids.indexOf(item.id) === -1) {\n\t\t\t\t\t//add id to list of tracked items\n\t\t\t\t\tids.push(item.id);\n\t\t\t\t\t//track the event\n\t\t\t\t\tvar itemEventData = { eventName: obj.eventName, item: item };\n\t\t\t\t\tbouncex.utk.trackItemInteraction(itemEventData);\n\t\t\t\t\t//track the item\n\t\t\t\t\tif (obj.itemTracking) {\n\t\t\t\t\t\tbouncex.utk.trackItem(item);\n\t\t\t\t\t}\n\t\t\t\t\t//check limits\n\t\t\t\t\tif (ids.length >= obj.maxItems) {\n\t\t\t\t\t\tremoveHoverTracking();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, obj.timeoutMs);\n\t\t}\n\n\t\tfunction onMouseleave() {\n\t\t\tclearTimeout(timeout);\n\t\t}\n\n\t\tfunction addHoverTracking() {\n\t\t\tjQuery(document).on('mouseenter.bx-tracking-hover.' + trackerId, obj.selector, onMouseenter);\n\t\t\tjQuery(document).on('mouseleave.bx-tracking-hover.' + trackerId, obj.selector, onMouseleave);\n\t\t}\n\n\t\tfunction removeHoverTracking() {\n\t\t\tjQuery(document).off('mouseenter.bx-tracking-hover.' + trackerId);\n\t\t\tjQuery(document).off('mouseleave.bx-tracking-hover.' + trackerId);\n\t\t\tclearTimeout(timeout);\n\t\t}\n\n\t\taddHoverTracking();\n\t\treturn trackerId;\n\t},\n\n\tisIdentified: function(){\n\t\treturn !!(bouncex.cookie.uid || bouncex.getBounceCookie('__ibxu'));\n\t},\n\n\tmiw: function(obj) {\n\t\tvar defaults = {\n\t\t\tselector: 'input:not(input[type=button], :input[type=submit], :input[type=reset], :input[type=hidden], :input[type=radio], :input[type=checkbox], :input[type=image], :input[type=password])',\n\t\t\tgetUserData: function(el) {\n\t\t\t\treturn {\n\t\t\t\t\temail : jQuery(el).val(),\n\t\t\t\t\tsource : el.id,\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\n\t\tobj = bouncex.util.mergeObject(defaults, obj);\n\t\tif (!obj.selector) { return null; }\n\n\t\t//register the tracker\n\t\tobj.stop = removeUserTracking;\n\t\tvar trackerId = bouncex.utk.register(obj);\n\n\t\tfunction onBlur() {\n\t\t\tvar user = obj.getUserData(this);\n\t\t\tbouncex.utk.trackUser(user);\n\t\t}\n\n\t\tfunction removeUserTracking() {\n\t\t\tjQuery(document).off('blur.miw.' + trackerId);\n\t\t}\n\n\t\tjQuery(document).on('blur.miw.' + trackerId, obj.selector, onBlur);\n\n\t\treturn trackerId;\n\t},\n\n\tmuu: function(){\n\t\tvar match = location.href.match(/([a-zA-Z0-9._\\+-]+(?:@|%40)[a-zA-Z0-9._-]+\\.[a-zA-Z0-9._-]+)/gi);\n\t\tif (match){\n\t\t\tbouncex.utk.trackUser({\n\t\t\t\temail: decodeURIComponent(match[0]),\n\t\t\t\tsource: 'URL'\n\t\t\t});\n\t\t}\n\t},\n\n\tquickviewItem: function(obj) {\n\t\tvar defaults = {\n\t\t\teventName: 'view item',\n\t\t\titemTracking: false,\n\t\t\tselector: '',\n\t\t\tgetItemData: function(el) { return null; }\n\t\t};\n\n\t\tobj = bouncex.util.mergeObject(defaults, obj);\n\t\t//validation here\n\t\tif (!obj.selector) { return null; }\n\n\t\tvar prevVisible = false,\n\t\t\tvisible;\n\n\t\treturn bouncex.utk.setInterval({\n\t\t\tcallback: function() {\n\t\t\t\tvisible = jQuery(obj.selector).is(':visible');\n\t\t\t\tif (visible && !prevVisible) {\n\t\t\t\t\tvar item = obj.getItemData(obj.selector);\n\n\t\t\t\t\tvar itemEventData = { eventName: obj.eventName, item: item };\n\t\t\t\t\tbouncex.utk.trackItemInteraction(itemEventData);\n\t\t\t\t\t//track the item\n\t\t\t\t\tif (obj.itemTracking) {\n\t\t\t\t\t\tbouncex.utk.trackItem(item);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tprevVisible = visible;\n\t\t\t}\n\t\t});\n\t},\n\n\trequestEmail: function(obj) {\n\t\t//make sure email is specified and valid\n\t\tif (!obj['email'] && !obj['user:email']){\n\t\t\treturn false;\n\t\t}\n\n\t\tif (obj['email'] && !bouncex.util.isValidEmail(obj['email'])){\n\t\t\treturn false;\n\t\t}\n\n\t\tif (obj['user:email'] && !bouncex.util.isValidEmail(obj['user:email'])){\n\t\t\treturn false;\n\t\t}\n\n\t\t//JKMD: bouncex.push right now automatically adds namespacing, which would mess up \"campaignid\"\n\t\tparams = {};\n\t\tfor (var k in obj) {\n\t\t\tif (obj.hasOwnProperty(k)){\n\t\t\t\tparams[k.toLowerCase()] = obj[k];\n\t\t\t}\n\t\t}\n\t\tevent_stream_report('requestemail', params);\n\t},\n\n\t//JKMD: long-term plan is to put all of our polling into a single setInterval\n\tsetInterval: function(obj) {\n\t\tvar defaults = {\n\t\t\tmilliseconds: 1000,\n\t\t\tcallback: function() { return null; }\n\t\t};\n\t\tobj = bouncex.util.mergeObject(defaults, obj);\n\t\tvar intervalId = setInterval(obj.callback, obj.milliseconds);\n\n\t\tobj.stop = removeInterval;\n\t\tvar trackerId = bouncex.utk.register(obj);\n\t\tfunction removeInterval() {\n\t\t\tclearInterval(intervalId);\n\t\t}\n\t\treturn trackerId;\n\t},\n\n\ttrackItem: function(item) {\n\t\tif (typeof(item.id) === 'string'){\n\t\t\titem.id = item.id.trim().toLowerCase();\n\t\t}\n\t\tif (!this.validateItem(item)) {\n\t\t\t//bouncex.log('item failed validation', item);\n\t\t\treturn false;\n\t\t}\n\t\titem = bouncex.util.addNamespace(item, 'item');\n\t\tbouncex.push(['item', item]);\n\t},\n\n\ttrackItemInteraction: function(obj) {\n\t\tvar id = obj.item.id;\n\t\tif (typeof(id) === 'string'){\n\t\t\tid = id.trim().toLowerCase();\n\t\t}\n\t\tvar o = { 'item:id': id };\n\t\to = this.addMetadata(o);\n\t\tbouncex.push([obj.eventName, o]);\n\t},\n\n\ttrackListPage: function(obj){\n\t\tvar defaults = {\n\t\t\teventName: 'view ' + this.getPageType(),\n\t\t\tmaxItems: 6,\n\t\t\tselector: '',\n\t\t\ttitle: '',\n\t\t\turl: jQuery('link[rel=canonical]').attr('href') || window.location.href.split('?')[0],\n\t\t\titemTracking : false,\n\t\t\tgetItemData: function(el) { return null;},\n\t\t\textraEventData: {}\n\t\t};\n\n\t\tobj = bouncex.util.mergeObject(defaults, obj);\n\n\t\tvar items = jQuery(obj.selector);\n\t\tif (!items || !items.length){\n\t\t\treturn false;\n\t\t}\n\t\tvar itemsTracked = 0;\n\t\tvar itemIds = [];\n\t\tfor (var i = 0; i < items.length && itemsTracked < obj.maxItems; i++) {\n\t\t\tvar item = obj.getItemData(items[i]);\n\t\t\tif (item.id){\n\t\t\t\tif (typeof(item.id) === 'string'){\n\t\t\t\t\titem.id = item.id.trim().toLowerCase();\n\t\t\t\t}\n\t\t\t\t// add id to list\n\t\t\t\titemIds.push(item.id);\n\t\t\t\tif (obj.itemTracking){\n\t\t\t\t\t//track full item\n\t\t\t\t\tthis.trackItem(item);\n\t\t\t\t}\n\t\t\t\titemsTracked++;\n\t\t\t}\n\t\t}\n\n\t\tvar o = {'items:ids' : itemIds.join(','), 'page:url' : obj.url};\n\t\tif (obj.title){\n\t\t\to['page:title'] = obj.title;\n\t\t}\n\t\to = this.addMetadata(o);\n\t\to = bouncex.util.mergeObject(o, obj.extraEventData);\n\t\tbouncex.push([obj.eventName, o]);\n\t},\n\n\ttrackUser: function(user) {\n\t\tif (!user.email && !user.emailHash) {\n\t\t\treturn false;\n\t\t}\n\t\tif (user.email && !bouncex.util.isValidEmail(user.email)){\n\t\t\treturn false;\n\t\t}\n\t\tvar params = bouncex.util.addNamespace(user, 'user');\n\t\tif (user.email) {\n\t\t\tparams['user:email'] = user.email;\n\t\t}\n\t\tif (user.emailHash) {\n\t\t\tparams['user:emailhash'] = user.emailHash;\n\t\t}\n\t\tif (user.campaignId) {\n\t\t\tparams['campaignid'] = user.campaignId;\n\t\t}\n\t\tparams['user:gcr'] = (bouncex && bouncex.cookie) ? bouncex.cookie.gcr : 99;\n\t\tparams['agent'] = 'js';\n\t\tparams['eq'] = 1;\n\n\t\tevent_stream_report('user', params);\n\n\t\tbouncex.cookie.uid = 1;\n\t\tsetBounceCookie();\n\t\t//legacy support\n\t\tbouncex.util.cookies.create({\n\t\t\tname: '__ibxu',\n\t\t\tvalue : '1',\n\t\t\tdomain : '.' + bouncex.util.cookies.domain,\n\t\t\tdays : 365,\n\t\t});\n\n\t},\n\n\tvalidateItem: function(item) {\n\t\tif (!item) { return false; }\n\t\tif (!item.id) { return false; }\n\t\tif (!item.copy) { return false; }\n\t\tif (!item.imageurl || !bouncex.util.isValidUrl(item.imageurl)) { return false; }\n\t\tif (!item.url || !bouncex.util.isValidUrl(item.url)) { return false; }\n\t\treturn true;\n\t},\n\n\tviewItem: function(obj) {\n\t\tvar defaults = {\n\t\t\teventName: 'view item',\n\t\t\titemTracking: true,\n\t\t\tgetItemData: function() { return null; }\n\t\t};\n\n\t\tobj = bouncex.util.mergeObject(defaults, obj);\n\n\t\tvar item = obj.getItemData();\n\n\t\tif (obj.itemTracking) {\n\t\t\tthis.trackItem(item);\n\t\t}\n\n\t\tif (item.id) {\n\t\t\tvar itemEventData = { eventName: obj.eventName, item: item };\n\t\t\tbouncex.utk.trackItemInteraction(itemEventData);\n\t\t} else {\n\t\t\t//bouncex.log('no item id', obj.eventName, item);\n\t\t}\n\t},\n\n\t//keeping track of the listeners inside tracking\n\tregister: function(obj) {\n\t\tvar id = bouncex.util.getTimeMs() + Math.random();\n\t\tbouncex.utk.listeners[id] = obj;\n\t\treturn id;\n\t},\n\n\t//remove single tracker\n\tstop: function(id) {\n\t\tif (bouncex.utk.listeners.hasOwnProperty(id)) {\n\t\t\tbouncex.utk.listeners[id].stop();\n\t\t\tdelete bouncex.utk.listeners[id];\n\t\t}\n\t},\n\n\t//remove all listeners\n\tstopAll: function() {\n\t\tfor (var id in bouncex.utk.listeners) {\n\t\t\tbouncex.utk.stop(id);\n\t\t}\n\t}\n};\n\nbouncex.utk.cart = {\n\n\tgetCart: function() {\n\t\tif (this.state) {\n\t\t//cached here once we look it up or save\n\t\t\treturn this.state;\n\t\t}else if (this.config.storeCartVariable && bouncex.vars[this.config.storeCartVariable]) {\n\t\t//look up from cvar if it exists\n\t\t\tthis.state = JSON.parse(bouncex.vars[this.config.storeCartVariable]);\n\t\t\treturn this.state;\n\t\t}else {\n\t\t\treturn {};\n\t\t}\n\t},\n\n\tgetCount: function(){\n\t\treturn bouncex.vars[this.config.cartCountVariable];\n\t},\n\n\tinferCount: function(cart) {\n\t\t// return cart.count if specified and valid\n\t\tif (bouncex.util.isValidInteger(cart.count)) {\n\t\t\treturn parseInt(cart.count);\n\t\t} else if (cart.items) {\n\t\t\t// deduce from items length (using qty property if specified)\n\t\t\tvar count = 0;\n\t\t\tfor (var i = 0; i < cart.items.length; i++) {\n\t\t\t\tvar qty = parseInt(cart.items[i].qty) || 1;\n\t\t\t\tcount += qty;\n\t\t\t}\n\t\t\treturn count;\n\t\t}else if (bouncex.util.isValidInteger(this.getCount())){\n\t\t\treturn parseInt(this.getCount());\n\t\t}else{\n\t\t\treturn 0;\n\t\t}\n\t},\n\n\tinit: function(obj) {\n\t\tvar defaults = {\n\t\t\t// lastReplenishment: false,\n\t\t\tstoreCartVariable: 'cart',\n\t\t\tcartCountVariable: 'cart_qty',\n\t\t\tmaxVariableSize: 400,\n\t\t\tstoreValues: ['count', 'items'],\n\t\t\tmaxItems: 10\n\t\t};\n\t\tobj = bouncex.util.mergeObject(defaults, obj);\n\t\tthis.config = obj;\n\n\t\t//JKMD: should we do this via init, or just override explicitly...?\n\t\tthis.replenish = obj.replenish || this.replenish;\n\t\tthis.validateReplenishment = obj.validateReplenishment || this.validateReplenishment;\n\t\tthis.reportReplenishment = obj.reportReplenishment || this.reportReplenishment;\n\n\t\tthis.initFromQuerystring();\n\t\tthis.reportReplenishment();\n\t},\n\n\tinitFromQuerystring: function() {\n\t\tvar bx_cart = bouncex.util.getParam('bx_cart');\n\t\tvar cart = {};\n\t\tthis.replenishing = false;\n\n\t\tif (bx_cart) {\n\t\t\t//JKMD: support base64\n\t\t\tif (bx_cart.charAt(0) !== '{') {\n\t\t\t\tbx_cart = atob(bx_cart);\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tcart = JSON.parse(bx_cart);\n\t\t\t} catch(e) { console.log(e); return false; }\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!this.validateReplenishment(cart)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar cartCopy = jQuery.extend(true,{},cart);\n\t\tthis.save(cartCopy);\n\t\tthis.replenishing = true;\n\t\treturn this.replenish(cart);\n\t},\n\n\treplenish: function(cart) {\n\t\treturn null;\n\t},\n\n\tsave: function(cart) {\n\t\tif (!cart) { return false; }\n\t\tthis.state = cart;\n\t\tif (this.config.storeCartVariable) {\n\t\t\tvar storedCart = {};\n\t\t\tif (cart.count === 0) {\n\t\t\t\t// if count is 0, don't store any other info\n\t\t\t\tstoredCart = { count: 0 };\n\t\t\t}else{\n\t\t\t\t//store values specified in settings\n\t\t\t\tfor (var i = 0; i < this.config.storeValues.length; i++) {\n\t\t\t\t\tvar k = this.config.storeValues[i];\n\t\t\t\t\tif (cart.hasOwnProperty(k)) {\n\t\t\t\t\t\tstoredCart[k] = cart[k];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.checkAndSetVar(storedCart);\n\t\t}\n\t},\n\n\tcheckAndSetVar: function(storedCart) {\n\t\tvar cartString = JSON.stringify(storedCart);\n\t\tif (cartString.length <= this.config.maxVariableSize) {\n\t\t\tbouncex.setv(this.config.storeCartVariable, cartString);\n\t\t\tsetBounceCookie();\n\t\t} else if (storedCart.items && storedCart.items.length) {\n\t\t\tvar lastItemLength = JSON.stringify(storedCart.items[storedCart.items.length-1]).length;\n\t\t\tif ( lastItemLength >= this.config.maxVariableSize) {\n\t\t\t\tstoredCart.items.pop();\n\t\t\t} else {\n\t\t\t\tstoredCart.items.shift();\n\t\t\t}\n\t\t\tthis.checkAndSetVar(storedCart);\n\t\t}\n\t},\n\n\ttrack: function(cart) {\n\t\tvar trackCart = bouncex.util.mergeObject(cart);\n\t\tif (trackCart.items) trackCart.items = JSON.stringify(trackCart.items);\n\t\t if (trackCart.ids) trackCart.ids = trackCart.ids.join(',');\n\t\ttrackCart = bouncex.util.addNamespace(trackCart, 'cart');\n\t\tbouncex.push(['cart', trackCart]);\n\t},\n\n\tupdate: function (cart) {\n\n\t\tif (this.replenishing){\n\t\t\t/* don't fire cart events while replenishing */\n\t\t\treturn false;\n\t\t}\n\n\t\tif (cart.newItem) {\n\t\t\t//if partial, merge new item with stored items\n\t\t\tvar oldCart = this.getCart();\n\t\t\tvar allItems = oldCart.items || [];\n\t\t\tallItems.push(cart.newItem);\n\t\t\tcart.items = allItems;\n\t\t}\n\n\t\t//set count\n\t\tcart.count = this.inferCount(cart);\n\n\t\t// remove items from beginning of items array if over limit\n\t\tif (this.config.maxItems && cart.items && cart.items.length > this.config.maxItems) {\n\t\t\tcart.items = cart.items.slice(cart.items.length - this.config.maxItems);\n\t\t}\n\n\t\t//auto parse ids from items variable if no ids specified\n\t\tif (!cart.ids && cart.items) {\n\t\t\tvar ids = [];\n\t\t\tfor (var i = 0; i < cart.items.length; i++) {\n\t\t\t\tif (cart.items[i].id) {\n\t\t\t\t\tids.push(cart.items[i].id);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (ids.length) { cart.ids = ids; }\n\t\t}\n\n\t\tif (cart.newItem || cart.addToCart){\n\t\t\tbouncex.push(['add to cart', bouncex.utk.getMetadata()]);\n\t\t}\n\n\t\tdelete cart.newItem;\n\t\tdelete cart.addToCart;\n\t\t// save in cart.state, and in cvar if specified\n\t\tthis.save(cart);\n\t\t//track cart\n\t\tthis.track(cart);\n\t\t//fire add to cart event if new item or addToCart flag\n\t},\n\n\tvalidateReplenishment: function(cart) {\n\t\tvar cartCount = bouncex.utk.cart.getCount();\n\t\tif (bouncex.util.isValidInteger(cartCount) && cartCount > 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!cart) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!cart.value && !cart.token && !cart.items) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t},\n\n\treportReplenishment: function() {\n\t\tvar bx_replen = bouncex.util.getParam('bx_replen');\n\t\tif (bx_replen) {\n\t\t\tsetTimeout(function(){\n\t\t\t\tvar cartCount = bouncex.utk.cart.getCount();\n\t\t\t\tbouncex.push(['cart replenish', {'cart:count': cartCount, 'cart:success': cartCount > 0}]);\n\t\t\t}, 1100);\n\t\t}\n\t}\n};\n\n/* SITE SPECIFIC */\n\nfunction isPersonalCategory() {\n\treturn (window.s && window.s.eVar4 === 'Personal Checks') ||\n\t\tjQuery('.breadcrumb:contains(\"Personal Checks\")').length > 0 ||\n\t\tjQuery('.breadcrumb:contains(\"Personal Accessories\")').length > 0;\n}\n\nfunction isBusinessCategory() {\n\treturn (window.s && window.s.eVar4 === 'Business Checks') ||\n\t\tjQuery('.breadcrumb:contains(\"Business Checks\")').length > 0 ||\n\t\tjQuery('.breadcrumb:contains(\"Business Accessories\")').length > 0;\n}\n\nfunction isCategoryPage() {\n\treturn window.location.pathname.slice(0, 3) === '/c/';\n}\n\nfunction isProductPage() {\n\treturn window.location.pathname.slice(0, 3) === '/p/';\n}\n\nfunction isCartPage() {\n\treturn /cart\\.aspx/i.test(window.location.pathname);\n}\n\nfunction isSearchPage() {\n\treturn window.location.pathname.indexOf('search/') > -1;\n}\n\nfunction getItemIdFrom(sourceText) {\n\tvar productIdRegEx = /\\/p\\/[^\\/]+\\/([0-9]+)/;\n\tvar productIdMatch = sourceText.match(productIdRegEx);\n\n\tif (productIdMatch && productIdMatch.length > 1) {\n\t\treturn productIdMatch[1];\n\t}\n\telse {\n\t\treturn '';\n\t}\n}\n\nfunction getItemCategory() {\n var $breadcrumbs = jQuery('.breadcrumb span');\n var lastItemIndex = $breadcrumbs.length - 1;\n var $breadcrumb;\n\t\n\tfor (var i = lastItemIndex; i >= 0; i--) {\n\t $breadcrumb = $breadcrumbs.eq(i);\n\t \n\t if (!/View All/.test($breadcrumb.text())) {\n\t return $breadcrumb.text().trim();\n\t }\n\t}\n\t\n\treturn $breadcrumbs.eq(lastItemIndex).text().trim();\n}\n\nfunction getProductType() {\n\tif (isPersonalCategory()) {\n\t\treturn 'personal';\n\t}\n\telse if (isBusinessCategory()) {\n\t\treturn 'business';\n\t}\n\telse {\n\t\treturn '';\n\t}\n}\n\nfunction getItemCopy() {\n\treturn jQuery('#MainContent_ProductName').text().trim();\n}\n\nfunction getDataFromHref(selector) {\n\tvar $itemElement = jQuery(selector);\n\n\treturn {\n\t\tid: getItemIdFrom($itemElement.attr('href'))\n\t};\n}\n\nfunction getCartItems() {\n\tvar items = {\n\t\tlist: [],\n\t\tcount: 0\n\t};\n\tvar products = jQuery('.productName').parent().parent();\n\n\tif (products.length > 0) {\n\t\tjQuery.each(products, function(idx, ele) {\n\t\t\tvar id = getItemIdFrom(jQuery(this).find('.itemEditBtn a').attr('href'));\n\t\t\tvar qty = 1;\n\n\t\t\titems.count += Number(qty);\n\t\t\titems.list.push({\n\t\t\t\tid: id,\n\t\t\t\tqty: qty\n\t\t\t});\n\t\t});\n\t}\n\n\treturn items;\n}\n\nfunction getImageUrl() {\n var url = window.location.origin + '/' + jQuery('#MainContent_ProductDisplayImage').attr('src').replace(/\\.\\.\\//g, '');\n var isPreviewImage = /PreviewImage\\.ashx/.test(url);\n var hasSelectedSceneParam = /&SelectedScene=[0-9]+/.test(url);\n \n if (isPreviewImage && hasSelectedSceneParam) {\n var selectedScene = url.match(/&SelectedScene=[0-9]+/);\n \n if (selectedScene && selectedScene.length) {\n return url.replace(/&[\\s\\S]+$/, '') + selectedScene[0];\n }\n }\n else if (isPreviewImage) {\n return url.replace(/&[\\s\\S]+$/, '');\n }\n \n return url;\n}\n\nfunction generateTimestamp() {\n\treturn Date.now();\n}\n\nfunction itemsDetectedInCart() {\n var $cart = (function() { return jQuery('#MiniLinks1_MiniCart1_lblCartCost'); })();\n\tvar cartTotal = parseFloat($cart.text().replace(/[^0-9.]/g, ''));\n\n\tif (!isNaN(cartTotal) && cartTotal > 0) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction isMainDomain() {\n return window.location.hostname === 'www.checks-superstore.com';\n}\n\n\t// Monitor inputs for email\nbouncex.utk.miw = function(obj) {\n\tvar defaults = {\n\t\tselector: 'input:not(input[type=button], :input[type=submit], :input[type=reset], :input[type=hidden], :input[type=radio], :input[type=checkbox], :input[type=image], :input[type=password])',\n\t\tgetUserData: function(el) {\n\t\t\treturn {\n\t\t\t\temail : jQuery(el).val()\n\t\t\t};\n\t\t}\n\t};\n\n\tobj = bouncex.util.mergeObject(defaults, obj);\n\n\t//validation here\n\tif (!obj.selector) { return null; }\n\n\t//register the tracker\n\tobj.stop = removeUserTracking;\n\tvar trackerId = bouncex.utk.register(obj);\n\n\tfunction onBlur() {\n\t\tvar user = obj.getUserData(this);\n\t\tbouncex.utk.trackUser(user);\n\t}\n\n\tfunction removeUserTracking() {\n\t\tjQuery(document).off('blur.miw.' + trackerId);\n\t}\n\n\tjQuery(document).on('blur.miw.' + trackerId, obj.selector, onBlur);\n\n\treturn trackerId;\n};\n\nbouncex.utk.getPageType = function() {\n if (!isMainDomain()) {\n return '';\n }\n\tif (isCartPage()) {\n\t\treturn 'cart';\n\t}\n\tif (isSearchPage()) {\n\t\treturn 'search';\n\t}\n\tif (isCategoryPage()) {\n\t\tif (isPersonalCategory()) {\n\t\t\treturn 'category(personal)';\n\t\t}\n\t\telse if (isBusinessCategory()) {\n\t\t\treturn 'category(business)';\n\t\t}\n\t\telse {\n\t\t\treturn 'category';\n\t\t}\n\t}\n\tif (isProductPage()) {\n\t\tif (isPersonalCategory()) {\n\t\t\treturn 'product(personal)';\n\t\t}\n\t\telse if (isBusinessCategory()) {\n\t\t\treturn 'product(business)';\n\t\t}\n\t\telse {\n\t\t\treturn 'product';\n\t\t}\n\t}\n\treturn '';\n};\n\nbouncex.utk.cart.init({\n\tstoreCartVariable: 'cart',\n\tcartCountVariable: 'cart_qty',\n\tstoreValues: ['count', 'items'],\n\tmaxVariableSize: bouncex.local_storage_enabled ? 1500 : 400,\n\tmaxItems: 10,\n\treplenish: function() {\n\t\twindow.setTimeout(function() {\n\t\t if (itemsDetectedInCart()) {\n \t\t\twindow.location.href = 'https://www.checks-superstore.com/Cart.aspx?bx_replen=true';\n \t\t}\n\t\t}, 1000);\n\t},\n\tvalidateReplenishment: function() {\n\t\treturn true;\n\t}\n});\n\nbouncex.utk.trackCartOnCountChange = function() {\n\tvar currentCount = getCartItems().count;\n\tvar oldCount = bouncex.utk.cart.getCart().count || 0;\n\tvar addToCart = false;\n\n\tif (typeof currentCount === 'number' && currentCount !== oldCount) {\n\t\tif (currentCount > oldCount) {\n\t\t\taddToCart = true;\n\t\t}\n\t\tbouncex.utk.cart.update({\n\t\t\tcount: currentCount,\n\t\t\titems: getCartItems().list,\n\t\t\taddToCart: addToCart\n\t\t});\n\t}\n};\n\nbouncex.utk.init = function() {\n\tvar pageType;\n\n\t// Single page app fix: remove listeners from the previous page view\n\tbouncex.utk.stopAll();\n\tbouncex.utk.muu();\n\tbouncex.utk.miw({\n\t\tselector: 'input:not([type=button]):not([type=password]):not([type=submit]):not([type=reset]):not([type=radio]):not([type=checkbox]):not([type=image]):not([id=q])',\n\t});\n\n\tpageType = bouncex.utk.getPageType();\n\n\tif (pageType === 'cart') {\n\t\tbouncex.utk.trackCartOnCountChange();\n\t}\n\telse if (pageType === 'search' && jQuery('a.recThumbnail_Link').length) {\n\t\tbouncex.utk.hoverItem({\n\t\t\tselector: 'a.recThumbnail_Link',\n\t\t\titemTracking: false,\n\t\t\tgetItemData: getDataFromHref\n\t\t});\n\t\tbouncex.utk.trackListPage({\n\t\t\tselector: 'a.recThumbnail_Link',\n\t\t\titemTracking: false,\n\t\t\turl: window.location.origin + window.location.pathname + window.location.search,\n\t\t\tgetItemData: getDataFromHref\n\t\t});\n\t}\n\telse if (pageType.indexOf('category') > -1) {\n\t\tbouncex.utk.hoverItem({\n\t\t\tselector: 'a.recThumbnail_Link',\n\t\t\titemTracking: false,\n\t\t\tgetItemData: getDataFromHref\n\t\t});\n\t\tbouncex.utk.trackListPage({\n\t\t\teventName: 'view category',\n\t\t\tselector: 'a.recThumbnail_Link',\n\t\t\titemTracking: false,\n\t\t\tgetItemData: getDataFromHref\n\t\t});\n\t}\n\telse if (pageType.indexOf('product') > -1) {\n\t\tbouncex.utk.viewItem({\n\t\t\tgetItemData: function() {\n\t\t\t\treturn {\n\t\t\t\t\tid: getItemIdFrom(window.location.pathname),\n\t\t\t\t\tcopy: getItemCopy(),\n\t\t\t\t\timageurl: getImageUrl(),\n\t\t\t\t\tcategory: getItemCategory(),\n\t\t\t\t\tproductType: getProductType(),\n\t\t\t\t\turl: jQuery('link[rel=canonical]').attr('href'),\n\t\t\t\t\ttimestamp: generateTimestamp()\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\t}\n};\n\n// Delays initialization until on-site data dependencies are loaded.\nfunction initDataCheck() {\n\tvar dataCheck;\n\n\tfunction dataIsLoaded() {\n\t\treturn window.s;\n\t}\n\n\tfunction checkForNecessaryData() {\n\t\tif (dataIsLoaded()) {\n\t\t\twindow.clearInterval(dataCheck);\n\t\t\tbouncex.utk.init();\n\t\t}\n\t}\n\n\tdataCheck = window.setInterval(checkForNecessaryData, 500);\n}\n\ninitDataCheck();","cjs":"","miw":1,"mibcx":1,"te":1,"cart_rep":{"get":"","set":""},"ulpj":null,"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":"","crs":{"integrations":null,"pageCount":null},"mat":0,"math":0,"cpnu":"coupons.bounceexchange.com","dfpcms":0,"sms":{"optm":"","eventSharing":false,"shqId":"","enabled":0},"pde":false,"fmc":["US","CA"],"fme":true,"fmx":"","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":"","ga4_measurement_id":"","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":"7b352b1295e35e9c90089d9dd48e488f","creativesBaseStyles":"a53944a2","gpsAuction":"bbb80866120d17013073bb6d284cbd6b","inbox":"75060a85c1a4aebcc6f779b9e84db722","onsite":"abbdf7a49be9b52b097917b7b527b262","sms":"e39203556bab2366e56296ce42e974a7","websdk":"fd6a81d9d51cda3a3a55d6ab16eb7ac5"}; 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_5a114136d61ff5a1340c5ba91977f308.br.js'); script.setAttribute('async', 'async'); document.body.appendChild(script); bouncex.initializeTag = function() {}; }; runtime.onload = bouncex.initializeTag; document.body.appendChild(runtime); } } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", bxBootstrap); } else { bxBootstrap(); }})();