1<!DOCTYPE html> 2<!--[if lt IE 7 ]><html class="ie ie6" lang="en"> <![endif]--> 3<!--[if IE 7 ]><html class="ie ie7" lang="en"> <![endif]--> 4<!--[if IE 8 ]><html class="ie ie8" lang="en"> <![endif]--> 5<!--[if IE 9 ]><html class="ie ie9" lang="en"> <![endif]--> 6<!--[if (gte IE 10)|!(IE)]><!--><html lang="en"> <!--<![endif]--> 7 <head> 8 <meta name="google-site-verification" content="B_Rl1u-cN61qWNrT7eWSFXXJxLjowPi1r0x77QibFLo" /> 9 10
10<script src="https://www.googleoptimize.com/optimize.js?id=OPT-K8GZ34C"></script>
10 11 12
12<script type="text/javascript"> 13 window._mfq = window._mfq || []; 14 (function() { 15 var mf = document.createElement("script"); 16 mf.type = "text/javascript"; mf.defer = true; 17 mf.src = "//cdn.mouseflow.com/projects/bac15ebb-1f20-4f09-baac-cfa324f69f32.js"; 18 document.getElementsByTagName("head")[0].appendChild(mf); 19 })(); 20</script>
20 21 22 <!-- Infinite Options by ShopPad --> 23
23<script src="//d1liekpayvooaz.cloudfront.net/apps/customizery/customizery.js?shop=venturi-belt-co.myshopify.com"></script>
23 24
24<script src="https://fccb8d8bede14c90924f34eca9e024b0.js.ubembed.com" async></script>
24 25 26 <meta charset="utf-8"> 27 <meta http-equiv="cleartype" content="on"> 28 <meta name="robots" content="index,follow"> 29 30 31 32 <meta name="facebook-domain-verification" content="6xbrpuzy1aq98cnjumcwah0un1getm" /> 33 34<!-- Google Tag Manager -->
35<script>
vendor: 327 bytes, lines 35-39
35(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 36new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 37j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 38'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 39})(window,document,'script','dataLayer','
39GTM-MN57ZSX
vendor: 3 bytes, line 39
39');
39</script>
39 40<!-- End Google Tag Manager --> 41 42 43 <!-- Custom Fonts --> 44 45 <link href="//fonts.googleapis.com/css?family=.|Lato:light,normal,bold|Lato:light,normal,bold|PT+Sans+Narrow:light,normal,bold|Merriweather:light,normal,bold" rel="stylesheet" type="text/css" /> 46 47 48 49 50<meta name="author" content="VENTURi Belt Co."> 51<meta property="og:url" content="https://venturi-belt-co.myshopify.com/cart"> 52<meta property="og:site_name" content="VENTURi Belt Co."> 53 54 55 <meta property="og:type" content="website"> 56 <meta property="og:title" content="Your Shopping Cart"> 57 58 59 60 61 62 <meta name="twitter:site" content="@shopify"> 63 64<meta name="twitter:card" content="summary"> 65 66 67 68 69 70 <!-- Mobile Specific Metas --> 71 <meta name="HandheldFriendly" content="True"> 72 <meta name="MobileOptimized" content="320"> 73 <meta name="viewport" content="width=device-width,initial-scale=1"> 74 <meta name="theme-color" content="#ffffff"> 75 76 <!-- Stylesheets for Retina 4.0.1 --> 77 <link href="//venturi-belt-co.myshopify.com/cdn/shop/t/20/assets/styles.scss.css?v=7779745716469687781703183784" rel="stylesheet" type="text/css" media="all" /> 78 <!--[if lte IE 9]> 79 <link href="//venturi-belt-co.myshopify.com/cdn/shop/t/20/assets/ie.css?v=16370617434440559491626271804" rel="stylesheet" type="text/css" media="all" /> 80 <![endif]--> 81 82 83 <link rel="shortcut icon" type="image/x-icon" href="//venturi-belt-co.myshopify.com/cdn/shop/files/Venturi_Belt_f24c9269-af55-424a-ac04-e5bd417e1442_small.png?v=1613602002"> 84 85 86 <link rel="canonical" href="https://venturi-belt-co.myshopify.com/cart" /> 87 88 89 90
90<script src="//venturi-belt-co.myshopify.com/cdn/shop/t/20/assets/app.js?v=150836708319549183491626271804" type="text/javascript"></script>
90 91 <!-- Hotjar Tracking Code for https://www.venturibelt.com/ -->
92<script>
vendor: 125 bytes, lines 92-95
92 93 (function(h,o,t,j,a,r){ 94 h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)}; 95 h._hjSettings={hjid:
951267116
vendor: 258 bytes, lines 95-100
95,hjsv:6}; 96 a=o.getElementsByTagName('head')[0]; 97 r=o.createElement('script');r.async=1; 98 r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv; 99 a.appendChild(r); 100 })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');
101</script>
101 102 103
103<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
103<meta name="google-site-verification" content="7Axeod_MFxZmY_iJab9lHcMi-kg94bAvvdSDq87HxnI"> 104<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/16765131/digital_wallets/dialog"> 105<meta id="in-context-paypal-metadata" data-shop-id="16765131" data-venmo-supported="false" data-environment="production" data-locale="en_US" data-paypal-v4="true" data-currency="USD"> 106<link rel="ucp" href="/.well-known/ucp" version="2026-08-25">
106<script async="async" src="/checkouts/internal/preloads.js?locale=en-US"></script>
106 107<link rel="preconnect" href="https://shop.app" crossorigin="anonymous">
108<script async="async" src="https://shop.app/checkouts/internal/preloads.js?locale=en-US&shop_id=16765131" crossorigin="anonymous"></script>
vendor: 1 bytes, line 108
108
109<script id="apple-pay-shop-capabilities" type="application/json">{"shopId":16765131,"countryCode":"US","currencyCode":"USD","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/16765131","merchantName":"VENTURi Belt Co.","requiredBillingContactFields":["postalAddress","email","phone"],"requiredShippingContactFields":["postalAddress","email","phone"],"shippingType":"shipping","supportedNetworks":["visa","masterCard","discover","amex","elo","jcb"],"total":{"type":"pending","label":"VENTURi Belt Co.","amount":"1.00"},"shopifyPaymentsEnabled":true,"supportsSubscriptions":true}</script>
vendor: 1 bytes, line 109
109
110<script id="shopify-features" type="application/json">{"accessToken":"83fb4230ec3ab2d164a4f52c7f79e555","betas":["rich-media-storefront-analytics"],"domain":"venturi-belt-co.myshopify.com","predictiveSearch":true,"shopId":16765131,"locale":"en"}</script>
vendor: 1 bytes, line 110
110
111<script>var Shopify = Shopify || {}; 112Shopify.shop = "venturi-belt-co.myshopify.com"; 113Shopify.locale = "en"; 114Shopify.currency = {"active":"USD","rate":"1.0"}; 115Shopify.country = "US"; 116Shopify.theme = {"name":"CRO Website-2-JULY-2019","id":120412536909,"schema_name":"Retina","schema_version":"4.0.1","theme_store_id":601,"role":"main"}; 117Shopify.theme.handle = "null"; 118Shopify.theme.style = {"id":null,"handle":null}; 119Shopify.cdnHost = "venturi-belt-co.myshopify.com/cdn"; 120Shopify.routes = Shopify.routes || {}; 121Shopify.routes.root = "/"; 122Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js"; 123Shopify.SignInWithShop = Shopify.SignInWithShop || {}; 124Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {}; 125Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 125
125
126<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 126
126
127<script>!function(o){function n(){var o=[];function n(){o.push(Array.prototype.slice.apply(arguments))}return n.q=o,n}var t=o.Shopify=o.Shopify||{};t.loadFeatures=n(),t.autoloadFeatures=n()}(window);</script>
vendor: 1 bytes, line 127
127
128<script> 129 window.ShopifyPay = window.ShopifyPay || {}; 130 window.ShopifyPay.apiHost = "shop.app\/pay"; 131 window.ShopifyPay.redirectState = null; 132</script>
vendor: 1 bytes, line 132
132
133<script> 134 window.Shopify = window.Shopify || {}; 135 window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {}; 136 window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 }; 137 window.Shopify.SignInWithShop.eligible = true; 138</script>
vendor: 1 bytes, line 138
138
139<script id="shop-js-analytics" type="application/json">{"pageType":"cart"}</script>
vendor: 1 bytes, line 139
139
140<script defer="defer" async type="module" src="https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"></script>
vendor: 1 bytes, line 140
140
141<script type="module"> 142 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"); 143 144 window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); 145 146</script>
vendor: 1 bytes, line 146
146
147<script> 148 window.Shopify = window.Shopify || {}; 149 if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; 150 window.Shopify.featureAssets['shop-js'] = {"avatar":["modules/v2/loader.avatar.en.esm.js"],"checkout-modal":["modules/v2/loader.checkout-modal.en.esm.js"],"init-customer-accounts-sign-up":["modules/v2/loader.init-customer-accounts-sign-up.en.esm.js"],"init-customer-accounts":["modules/v2/loader.init-customer-accounts.en.esm.js"],"init-fed-cm":["modules/v2/loader.init-fed-cm.en.esm.js"],"init-shop-cart-sync":["modules/v2/loader.init-shop-cart-sync.en.esm.js"],"init-shop-email-lookup-coordinator":["modules/v2/loader.init-shop-email-lookup-coordinator.en.esm.js"],"init-shop-for-new-customer-accounts":["modules/v2/loader.init-shop-for-new-customer-accounts.en.esm.js"],"init-shop-user-recognition":["modules/v2/loader.init-shop-user-recognition.en.esm.js"],"init-windoid":["modules/v2/loader.init-windoid.en.esm.js"],"lead-capture":["modules/v2/loader.lead-capture.en.esm.js"],"listener":["modules/v2/loader.listener.en.esm.js"],"pay-button":["modules/v2/loader.pay-button.en.esm.js"],"payment-terms":["modules/v2/loader.payment-terms.en.esm.js"],"shop-button":["modules/v2/loader.shop-button.en.esm.js"],"shop-cart-sync":["modules/v2/loader.shop-cart-sync.en.esm.js"],"shop-cash-offers":["modules/v2/loader.shop-cash-offers.en.esm.js"],"shop-follow-button":["modules/v2/loader.shop-follow-button.en.esm.js"],"shop-login-button":["modules/v2/loader.shop-login-button.en.esm.js"],"shop-login":["modules/v2/loader.shop-login.en.esm.js"],"shop-toast-manager":["modules/v2/loader.shop-toast-manager.en.esm.js"],"shop-user-recognition":["modules/v2/loader.shop-user-recognition.en.esm.js"]}; 151</script>
vendor: 1 bytes, line 151
151
152<script>(function() { 153 var isLoaded = false; 154 function asyncLoad() { 155 if (isLoaded) return; 156 isLoaded = true; 157 var urls = ["\/\/cdn.ywxi.net\/js\/1.js?shop=venturi-belt-co.myshopify.com","\/\/d1liekpayvooaz.cloudfront.net\/apps\/customizery\/customizery.js?shop=venturi-belt-co.myshopify.com","https:\/\/cdn1.stamped.io\/files\/widget.min.js?shop=venturi-belt-co.myshopify.com","https:\/\/static.klaviyo.com\/onsite\/js\/klaviyo.js?company_id=Wqn9Mc\u0026shop=venturi-belt-co.myshopify.com","https:\/\/static.klaviyo.com\/onsite\/js\/klaviyo.js?company_id=Wqn9Mc\u0026shop=venturi-belt-co.myshopify.com","https:\/\/thanhhd.com\/app\/public\/discounts-combine\/discounts-combine.js?shop=venturi-belt-co.myshopify.com\u0026shop=venturi-belt-co.myshopify.com","https:\/\/stack-discounts.merchantyard.com\/js\/integrations\/script.js?v=6611\u0026shop=venturi-belt-co.myshopify.com","\/\/cdn.secomapp.com\/promotionpopup\/cdn\/allshops\/venturi-belt-co\/1654998180.js?shop=venturi-belt-co.myshopify.com"]; 158 for (var i = 0; i < urls.length; i++) { 159 var s = document.createElement('script'); 160 s.type = 'text/javascript'; 161 s.async = true; 162 s.src = urls[i]; 163 var x = document.getElementsByTagName('script')[0]; 164 x.parentNode.insertBefore(s, x); 165 } 166 }; 167 if(window.attachEvent) { 168 window.attachEvent('onload', asyncLoad); 169 } else { 170 window.addEventListener('load', asyncLoad, false); 171 } 172})();</script>
vendor: 1 bytes, line 172
172
173<script id="__st">var __st={"a":16765131,"offset":-21600,"reqid":"75161882-5ad5-47db-a7b8-ff1828fecb05-1791580777","pageurl":"venturi-belt-co.myshopify.com\/cart","u":"67cee6600125","p":"cart"};</script>
vendor: 1 bytes, line 173
173
174<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 174
174
175<script id="captcha-bootstrap">!function(){'use strict';const t='contact',e='account',n='new_comment',o=[[t,t],['blogs',n],['comments',n],[t,'customer']],c=[[e,'customer_login'],[e,'guest_login'],[e,'recover_customer_password'],[e,'create_customer']],r=t=>t.map((([t,e])=>`form[action*='/${t}']:not([data-nocaptcha='true']) input[name='form_type'][value='${e}']`)).join(','),a=t=>()=>t?[...document.querySelectorAll(t)].map((t=>t.form)):[];function s(){const t=[...o],e=r(t);return a(e)}const i='password',u='form_key',d=['recaptcha-v3-token','g-recaptcha-response','h-captcha-response',i],f=()=>{try{return window.sessionStorage}catch{return}},m='__shopify_v',_=t=>t.elements[u];function p(t,e,n=!1){try{const o=window.sessionStorage,c=JSON.parse(o.getItem(e)),{data:r}=function(t){const{data:e,action:n}=t;return t[m]||n?{data:e,action:n}:{data:t,action:n}}(c);for(const[e,n]of Object.entries(r))t.elements[e]&&(t.elements[e].value=n);n&&o.removeItem(e)}catch(o){console.error('form repopulation failed',{error:o})}}const l='form_type',E='cptcha';function T(t){t.dataset[E]=!0}const w=window,h=w.document,L='Shopify',v='ce_forms',y='captcha';let A=!1;((t,e)=>{const n=(g='f06e6c50-85a8-45c8-87d0-21a2b65856fe',I='https://cdn.shopify.com/shopifycloud/storefront-forms-hcaptcha/ce_storefront_forms_captcha_hcaptcha.v1.5.3.iife.js',D={infoText:'Protected by hCaptcha',privacyText:'Privacy',termsText:'Terms'},(t,e,n)=>{const o=w[L][v],c=o.bindForm;if(c)return c(t,g,e,D).then(n);var r;o.q.push([[t,g,e,D],n]),r=I,A||(h.body.append(Object.assign(h.createElement('script'),{id:'captcha-provider',async:!0,src:r})),A=!0)});var g,I,D;w[L]=w[L]||{},w[L][v]=w[L][v]||{},w[L][v].q=[],w[L][y]=w[L][y]||{},w[L][y].protect=function(t,e){n(t,void 0,e),T(t)},Object.freeze(w[L][y]),function(t,e,n,w,h,L){const[v,y,A,g]=function(t,e,n){const i=e?o:[],u=t?c:[],d=[...i,...u],f=r(d),m=r(i),_=r(d.filter((([t,e])=>n.includes(e))));return[a(f),a(m),a(_),s()]}(w,h,L),I=t=>{const e=t.target;return e instanceof HTMLFormElement?e:e&&e.form},D=t=>v().includes(t);t.addEventListener('submit',(t=>{const e=I(t);if(!e)return;const n=D(e)&&!e.dataset.hcaptchaBound&&!e.dataset.recaptchaBound,o=_(e),c=g().includes(e)&&(!o||!o.value);(n||c)&&t.preventDefault(),c&&!n&&(function(t){try{if(!f())return;!function(t){const e=f();if(!e)return;const n=_(t);if(!n)return;const o=n.value;o&&e.removeItem(o)}(t);const e=Array.from(Array(32),(()=>Math.random().toString(36)[2])).join('');!function(t,e){_(t)||t.append(Object.assign(document.createElement('input'),{type:'hidden',name:u})),t.elements[u].value=e}(t,e),function(t,e){const n=f();if(!n)return;const o=[...t.querySelectorAll(`input[type='${i}']`)].map((({name:t})=>t)),c=[...d,...o],r={};for(const[a,s]of new FormData(t).entries())c.includes(a)||(r[a]=s);n.setItem(e,JSON.stringify({[m]:1,action:t.action,data:r}))}(t,e)}catch(e){console.error('failed to persist form',e)}}(e),e.submit())}));const S=(t,e)=>{t&&!t.dataset[E]&&(n(t,e.some((e=>e===t))),T(t))};for(const o of['focusin','change'])t.addEventListener(o,(t=>{const e=I(t);D(e)&&S(e,y())}));const B=e.get('form_key'),M=e.get(l),P=B&&M;t.addEventListener('DOMContentLoaded',(()=>{const t=y();if(P)for(const e of t)e.elements[l].value===M&&p(e,B);[...new Set([...A(),...v().filter((t=>'true'===t.dataset.shopifyCaptcha))])].forEach((e=>S(e,t)))}))}(h,new URLSearchParams(w.location.search),n,t,e,['guest_login'])})(!0,!0)}();</script>
vendor: 1 bytes, line 175
175
176<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//venturi-belt-co.myshopify.com/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 176
176
177<script>(function () {var userAgent = navigator.userAgent;var platform = navigator.platform;var maxTouchPoints = navigator.maxTouchPoints || 0;var isIOS = /iPad|iPhone|iPod/.test(platform) || (platform === 'MacIntel' && maxTouchPoints > 1);var isMacSafari = platform.indexOf('Mac') === 0 && /Safari/.test(userAgent) && !/Chrome|Chromium|CriOS|FxiOS|Edg|OPR|Android/.test(userAgent);var isAppleSafari = isIOS || isMacSafari;if (isAppleSafari) {fetch('/sf_private_access_tokens' + location.search).catch(function () {});}function browserMajorVersion(pattern) {var match = userAgent.match(pattern);return match ? parseInt(match[1], 10) : null;}function shouldLoadAutosizesPolyfill() {if (!window.PerformanceObserver?.supportedEntryTypes?.includes('paint')) {return false;}var chromeVersion = browserMajorVersion(/Chrome\/(\d+)/);if (chromeVersion !== null) {return chromeVersion < 126;}var firefoxVersion = browserMajorVersion(/Firefox\/(\d+)/);if (firefoxVersion !== null) {return firefoxVersion < 150;}var safariVersion = isAppleSafari ? browserMajorVersion(/Version\/(\d+).*Safari\//) : null;if (safariVersion !== null) {return safariVersion < 27;}return true;}if (shouldLoadAutosizesPolyfill()) {var autosizesScript = document.createElement('script');autosizesScript.async = true;autosizesScript.crossOrigin = 'anonymous';autosizesScript.src = "//venturi-belt-co.myshopify.com/cdn/shopifycloud/storefront/assets/storefront/autosizes-84416378.js";(document.head || document.documentElement).appendChild(autosizesScript);}window.ShopifyAnalytics = window.ShopifyAnalytics || {};window.ShopifyAnalytics.performance = window.ShopifyAnalytics.performance || {};(function () {var LONG_FRAME_THRESHOLD = 50;var longAnimationFrames = [];var activeRafId = null;function collectLongFrames() {var previousTime = null;function rafMonitor(now) {if (activeRafId === null) {return;}var delta = now - previousTime;if (delta > LONG_FRAME_THRESHOLD) {longAnimationFrames.push({startTime: previousTime,endTime: now,});}previousTime = now;activeRafId = requestAnimationFrame(rafMonitor);}previousTime = performance.now();activeRafId = requestAnimationFrame(rafMonitor);}if (!window.PerformanceObserver?.supportedEntryTypes?.includes('long-animation-frame')) {collectLongFrames();var timeoutId = setTimeout(function () {cancelAnimationFrame(activeRafId);}, 10000);window.ShopifyAnalytics.performance.getLongAnimationFrames = function (stopCollection) {if (stopCollection === undefined) {stopCollection = false;}if (stopCollection) {clearTimeout(timeoutId);cancelAnimationFrame(activeRafId);}return longAnimationFrames;};}})();})();</script>
177<script crossorigin="anonymous" defer="defer" src="//venturi-belt-co.myshopify.com/cdn/shopifycloud/storefront/assets/shopify_pay/storefront-f0e26bdf.js?v=20250812"></script>
vendor: 1 bytes, line 177
177
178<script id="shopify-origin-trials" async="async" integrity="sha256-qJbe/jEZBHtr5W/BlA2cKAz3vkXu6vJQyLjgvgCC86g=" src="//cdn.shopify.com/shopifycloud/storefront/assets/storefront/origin_trials-318ab40a.js" crossorigin="anonymous" onload="window.__shopifyOriginTrialsDone = true" onerror="window.__shopifyOriginTrialsDone = true"></script>
vendor: 1 bytes, line 178
178
179<script> 180 window.Shopify = window.Shopify || {}; 181 window.Shopify.MCP = window.Shopify.MCP || {}; 182 window.Shopify.MCP.enabled = true; 183 window.Shopify.MCP.shop = "venturi-belt-co.myshopify.com"; 184 window.Shopify.MCP.mcpEndpoint = "https:\/\/venturi-belt-co.myshopify.com\/api\/mcp"; 185 window.Shopify.MCP.tools = [{"name":"search_shop_policies_and_faqs","description":"Used to get facts about the stores policies, products, or services.\nSome examples of questions you can ask are:\n - What is your return policy?\n - What is your shipping policy?\n - What is your phone number?\n - What are your hours of operation?\"\nSet policy_types to also get the store's written policies (full text and URL).\n","inputSchema":{"$schema":"https:\/\/json-schema.org\/draft\/2020-12\/schema","type":"object","properties":{"query":{"type":"string","description":"A natural language query."},"context":{"type":"string","description":"Additional information about the request such as user demographics, mood, location, or other relevant details that could help in tailoring the response appropriately."},"policy_types":{"type":"array","items":{"type":"string","enum":["refund","shipping","privacy","terms_of_service","terms_of_sale","subscription","legal_notice","contact"]},"description":"Policy kinds to fetch, chosen from the user's question â e.g. [\"refund\"] for returns\/exchanges\/damaged items, [\"contact\"] for phone\/hours\/address. Include every kind the question touches. Omit it to get only FAQ answers."}},"required":["query"]}}]; 186</script>
vendor: 1 bytes, line 186
186
187<script>(()=>{var d="shopify:webmcp_adapter_loaded",n=Symbol.for("shopify.webmcp_adapter_loading");function s(c,a,{win:r=window,doc:o=document}={}){function p(){try{return r.localStorage.getItem(d)==="true"}catch{return!1}}function l(){try{r.localStorage.setItem(d,"true")}catch{}}function u(){return typeof(o.modelContext||r.navigator?.modelContext)?.registerTool=="function"}function f(){if(r[n]||!u())return;let t=o.head||o.getElementsByTagName("head")[0];if(!t)return;let e=o.createElement("script");e.type="module",e.crossOrigin="anonymous",a&&(e.integrity=a),e.src=c,e.addEventListener("load",l,{once:!0}),e.addEventListener("error",()=>{r[n]=!1},{once:!0}),t.appendChild(e),r[n]=!0}function _(t){let e=o.getElementById("shopify-origin-trials");if(!e||r.__shopifyOriginTrialsDone){t();return}e.addEventListener("load",t,{once:!0}),e.addEventListener("error",t,{once:!0})}function i(){_(()=>r.setTimeout(f,0))}function m(){o.addEventListener("DOMContentLoaded",i,{once:!0})}p()?i():m()}s("\/\/venturi-belt-co.myshopify.com\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-f427de6a.js","sha256-ypGF+5vIq4Psw4WG7nsVtdd\/TCfsJWnrNuACdqLCElY=");})(); 188</script>
vendor: 1 bytes, line 188
188
189<script data-source-attribution="shopify.dynamic_checkout.dynamic.init">var Shopify=Shopify||{};Shopify.PaymentButton=Shopify.PaymentButton||{isStorefrontPortableWallets:!0,init:function(){window.Shopify.PaymentButton.init=function(){};var t=document.createElement("script");t.src="https://venturi-belt-co.myshopify.com/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}}; 190</script>
vendor: 1 bytes, line 190
190
191<script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 192 function portableWalletsHideBuyerConsent(e){var t=document.getElementById("shopify-buyer-consent"),n=document.getElementById("shopify-subscription-policy-button");t&&n&&(t.classList.add("hidden"),t.setAttribute("aria-hidden","true"),n.removeEventListener("click",e))}function portableWalletsShowBuyerConsent(e){var t=document.getElementById("shopify-buyer-consent"),n=document.getElementById("shopify-subscription-policy-button");t&&n&&(t.classList.remove("hidden"),t.removeAttribute("aria-hidden"),n.addEventListener("click",e))}window.Shopify?.PaymentButton&&(window.Shopify.PaymentButton.hideBuyerConsent=portableWalletsHideBuyerConsent,window.Shopify.PaymentButton.showBuyerConsent=portableWalletsShowBuyerConsent); 193</script>
vendor: 1 bytes, line 193
193
194<script data-source-attribution="shopify.dynamic_checkout.cart.bootstrap">document.addEventListener("DOMContentLoaded",(function(){function t(){return document.querySelector("shopify-accelerated-checkout-cart, shopify-accelerated-checkout")}if(t())Shopify.PaymentButton.init();else{new MutationObserver((function(e,n){t()&&(Shopify.PaymentButton.init(),n.disconnect())})).observe(document.body,{childList:!0,subtree:!0})}})); 195</script>
195 196<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://venturi-belt-co.myshopify.com/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous"> 197<style id="shopify-accelerated-checkout-cart"> 198 #shopify-buyer-consent { 199 margin-top: 1em; 200 display: inline-block; 201 width: 100%; 202} 203 204#shopify-buyer-consent.hidden { 205 display: none; 206} 207 208#shopify-subscription-policy-button { 209 background: none; 210 border: none; 211 padding: 0; 212 text-decoration: underline; 213 font-size: inherit; 214 cursor: pointer; 215} 216 217#shopify-subscription-policy-button::before { 218 box-shadow: none; 219} 220 221 </style> 222
223<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
223 224
224<script id="dcScript"> 225 var dcCart = {"note":null,"attributes":{},"original_total_price":0,"total_price":0,"total_discount":0,"total_weight":0.0,"item_count":0,"items":[],"requires_shipping":false,"currency":"USD","items_subtotal_price":0,"cart_level_discount_applications":[],"checkout_charge_amount":0}; 226 227 228 var dcCustomerId = false; 229 var dcCustomerEmail = false; 230 var dcCustomerTags = false; 231 232 var dcCurrency = '${{amount}}'; 233</script>
233 234<link rel="dns-prefetch" href="https://cdn.secomapp.com/"> 235<link rel="dns-prefetch" href="https://ajax.googleapis.com/"> 236<link rel="dns-prefetch" href="https://cdnjs.cloudflare.com/"> 237<link rel="preload" as="stylesheet" href="//venturi-belt-co.myshopify.com/cdn/shop/t/20/assets/sca-pp.css?v=178374312540912810101654196019"> 238 239<link rel="stylesheet" href="//venturi-belt-co.myshopify.com/cdn/shop/t/20/assets/sca-pp.css?v=178374312540912810101654196019"> 240
240<script> 241 242 SCAPPLive = {}; 243 244 SCAPPShop = {}; 245 246 </script>
246 247 248<!-- Start of Judge.me Core --> 249<link rel="dns-prefetch" href="https://cdn.judge.me/">
250<script data-cfasync='false' class='jdgm-settings-script'>window.jdgmSettings={"pagination":5,"disable_web_reviews":false,"coupon_receiving_condition":"any_review","coupon_value_type":"percentage","coupon_value_percentage":10,"coupon_value_fixed_amount":0,"coupon_discount_type":"single","coupon_tier_text_enabled":false,"coupon_tier_text_percentage":10,"coupon_tier_text_fixed_amount":0,"coupon_tier_photo_enabled":false,"coupon_tier_photo_percentage":10,"coupon_tier_photo_fixed_amount":0,"coupon_tier_video_enabled":false,"coupon_tier_video_percentage":10,"coupon_tier_video_fixed_amount":0,"enable_coupons":false,"badge_no_review_text":"No reviews","badge_n_reviews_text":"{{ n }} review/reviews","hide_badge_preview_if_no_reviews":true,"badge_hide_text":false,"enforce_center_preview_badge":false,"widget_title":"Customer Reviews","widget_open_form_text":"Write a review","widget_close_form_text":"Cancel review","widget_refresh_page_text":"Refresh page","widget_summary_text":"Based on {{ number_of_reviews }} review/reviews","widget_no_review_text":"Be the first to write a review","widget_name_field_text":"Display name","widget_verified_name_field_text":"Verified Name (public)","widget_name_placeholder_text":"Display name","widget_required_field_error_text":"This field is required.","widget_email_field_text":"Email address","widget_verified_email_field_text":"Verified Email (private, can not be edited)","widget_email_placeholder_text":"Your email address","widget_email_field_error_text":"Please enter a valid email address.","widget_rating_field_text":"Rating","widget_review_title_field_text":"Review Title","widget_review_title_placeholder_text":"Give your review a title","widget_review_body_field_text":"Review content","widget_review_body_placeholder_text":"Start writing here...","widget_pictures_field_text":"Picture/Video (optional)","widget_submit_review_text":"Submit Review","widget_submit_verified_review_text":"Submit Verified Review","widget_submit_success_msg_with_auto_publish":"Thank y
250ou! Please refresh the page in a few moments to see your review. You can remove or edit your review by logging into \u003ca href='https://judge.me/login' target='_blank' rel='nofollow noopener'\u003eJudge.me\u003c/a\u003e","widget_submit_success_msg_no_auto_publish":"Thank you! Your review will be published as soon as it is approved by the shop admin. You can remove or edit your review by logging into \u003ca href='https://judge.me/login' target='_blank' rel='nofollow noopener'\u003eJudge.me\u003c/a\u003e","widget_show_default_reviews_out_of_total_text":"Showing {{ n_reviews_shown }} out of {{ n_reviews }} reviews.","widget_show_all_link_text":"Show all","widget_show_less_link_text":"Show less","widget_author_said_text":"{{ reviewer_name }} said:","widget_days_text":"{{ n }} days ago","widget_weeks_text":"{{ n }} week/weeks ago","widget_months_text":"{{ n }} month/months ago","widget_years_text":"{{ n }} year/years ago","widget_yesterday_text":"Yesterday","widget_today_text":"Today","widget_replied_text":"\u003e\u003e {{ shop_name }} replied:","widget_read_more_text":"Read more","widget_reviewer_name_as_initial":"","widget_rating_filter_color":"#fbcd0a","widget_rating_filter_see_all_text":"See all reviews","widget_sorting_most_recent_text":"Most Recent","widget_sorting_highest_rating_text":"Highest Rating","widget_sorting_lowest_rating_text":"Lowest Rating","widget_sorting_with_pictures_text":"Only Pictures","widget_sorting_most_helpful_text":"Most Helpful","widget_open_question_form_text":"Ask a question","widget_reviews_subtab_text":"Reviews","widget_questions_subtab_text":"Questions","widget_question_label_text":"Question","widget_answer_label_text":"Answer","widget_question_placeholder_text":"Write your question here","widget_submit_question_text":"Submit Question","widget_question_submit_success_text":"Thank you for your question! We will notify you once it gets answered.","verified_badge_text":"Verified","verified_badge_bg_color":"","verified_badge_text_color":"","verified_badge_placement":"left-of-reviewer-name","widget_review_max_height":"","widget_hide_border":false,"widget_social_share":false,"widget_thumb":false,"widget_review_location_show":false,"widget_location_format":"","all_reviews_include_out_of_store_products":true,"all_reviews_out_of_store_text":"(out of store)","all_reviews_pagination":100,"all_reviews_product_name_prefix_text":"about","enable_review_pictures":true,"enable_question_anwser":false,"widget_theme":"default","review_date_format":"mm/dd/yyyy","default_sort_method":"most-recent","enable_ai_review_visibility":true,"widget_product_reviews_subtab_text":"Product Reviews","widget_shop_reviews_subtab_text":"Shop Reviews","widget_other_products_reviews_text":"Reviews for other products","widget_store_reviews_subtab_text":"Store reviews","widget_product_variant_reference_text":"Review for","widget_no_store_reviews_text":"This store hasn't received any reviews yet","widget_web_restriction_product_reviews_text":"This product hasn't received any reviews yet","widget_no_items_text":"No items found","widget_show_more_text":"Show more","widget_write_a_store_review_text":"Write a Store Review","widget_product_and_store_reviews_text":"Product and store reviews","widget_reviews_in_collection_text":"Reviews in this collection","widget_other_languages_heading":"Reviews in Other Languages","widget_translate_review_text":"Translate review to {{ language }}","widget_translating_review_text":"Translating...","widget_show_original_translation_text":"Show original ({{ language }})","widget_translate_review_failed_text":"Review couldn't be translated.","widget_translate_review_retry_text":"Retry","widget_translate_review_try_again_later_text":"Try again later","show_product_url_for_grouped_product":false,"widget_sorting_pictures_first_text":"Pictures First","show_pictures_on_all_rev_page_mobile":false,"show_pictures_on_all_rev_page_desktop":false,"floating_tab_hide_mobile_install_preference":false,"floating_tab_button_name":"â
Reviews","floating_tab_title":"Let customers speak for us","floating_tab_button_color":"","floating_tab_button_background_color":"","floating_tab_url":"","floating_tab_url_enabled":false,"floating_tab_tab_style":"text","all_reviews_text_badge_text":"Customers rate us {{ shop.metafields.judgeme.all_reviews_rating | round: 1 }}/5 based on {{ shop.metafields.judgeme.all_reviews_count }} reviews.","all_reviews_text_badge_text_branded_style":"{{ shop.metafields.judgeme.all_reviews_rating | round: 1 }} out of 5 stars based on {{ shop.metafields.judgeme.all_reviews_count }} reviews","is_all_reviews_text_badge_a_link":false,"show_stars_for_all_reviews_text_badge":false,"all_reviews_text_badge_url":"","all_reviews_text_style":"text","all_reviews_text_color_style":"judgeme_brand_color","all_reviews_text_color":"#108474","all_reviews_text_show_jm_brand":true,"featured_carousel_show_header":true,"featured_carousel_title":"Let customers speak for us","testimonials_carousel_title":"Customers are saying","videos_carousel_title":"Real customer stories","cards_carousel_title":"Customers are saying","featured_carousel_count_text":"from {{ n }} reviews","featured_carousel_add_link_to_all_reviews_page":false,"featured_carousel_url":"","featured_carousel_show_images":true,"featured_carousel_autoslide_interval":5,"featured_carousel_arrows_on_the_sides":false,"featured_carousel_height":250,"featured_carousel_width":80,"featured_carousel_image_size":0,"featured_carousel_image_height":250,"featured_carousel_arrow_color":"#eeeeee","verified_count_badge_style":"vintage","verified_count_badge_orientation":"horizontal","verified_count_badge_color_style":"judgeme_brand_color","verified_count_badge_color":"#108474","is_verified_count_badge_a_link":false,"verified_count_badge_url":"","verified_count_badge_show_jm_brand":true,"widget_rating_preset_default":5,"widget_first_sub_tab":"product-reviews","widget_show_histogram":true,"widget_histogram_use_custom_color":false,"widget_pagination_use_custom_color":false,"widget_star_use_custom_color":false,"widget_verified_badge_use_custom_color":false,"widget_write_review_use_custom_color":false,"picture_reminder_submit_button":"Upload Pictures","enable_review_videos":false,"mute_video_by_default":false,"widget_sorting_videos_first_text":"Videos First","widget_review_pending_text":"Pending","featured_carousel_items_for_large_screen":3,"social_share_options_order":"Facebook,Twitter","remove_microdata_snippet":false,"disable_json_ld":false,"enable_json_ld_products":false,"preview_badge_show_question_text":false,"preview_badge_no_question_text":"No questions","preview_badge_n_question_text":"{{ number_of_questions }} question/questions","qa_badge_show_icon":false,"qa_badge_position":"same-row","remove_judgeme_branding":false,"widget_add_search_bar":false,"widget_search_bar_placeholder":"Search","widget_sorting_verified_only_text":"Verified only","widget_sorting_most_relevant_text":"Most Relevant","featured_carousel_theme":"default","featured_carousel_show_rating":true,"featured_carousel_show_title":true,"featured_carousel_show_body":true,"featured_carousel_show_date":false,"featured_carousel_show_reviewer":true,"featured_carousel_show_product":false,"featured_carousel_header_background_color":"#108474","featured_carousel_header_text_color":"#ffffff","featured_carousel_name_product_separator":"reviewed","featured_carousel_full_star_background":"#108474","featured_carousel_empty_star_background":"#dadada","featured_carousel_vertical_theme_background":"#f9fafb","featured_carousel_verified_badge_enable":true,"featured_carousel_verified_badge_color":"#108474","featured_carousel_border_style":"round","featured_carousel_review_line_length_limit":3,"featured_carousel_more_reviews_button_text":"Read more reviews","featured_carousel_view_product_button_text":"View product","all_reviews_page_load_reviews_on":"scroll","all_reviews_page_load_more_text":"Load More Reviews","disable_fb_tab_reviews":false,"enable_ajax_cdn_cache":false,"widget_advanced_speed_features":5,"widget_public_name_text":"displayed publicly like","default_reviewer_name":"John Smith","default_reviewer_name_has_non_latin":true,"widget_reviewer_anonymous":"Anonymous","medals_widget_title":"Judge.me Review Medals","medals_widget_background_color":"#f9fafb","medals_widget_position":"footer_all_pages","medals_widget_border_color":"#f9fafb","medals_widget_verified_text_position":"left","medals_widget_use_monochromatic_version":false,"medals_widget_elements_color":"#108474","show_reviewer_avatar":true,"widget_invalid_yt_video_url_error_text":"Not a YouTube video URL","widget_max_length_field_error_text":"Please enter no more than {0} characters.","widget_show_country_flag":false,"widget_show_collected_via_shop_app":true,"widget_verified_by_shop_badge_style":"light","widget_verified_by_shop_text":"Verified by Shop","widget_show_photo_gallery":false,"widget_load_with_code_splitting":true,"widget_ugc_install_preference":false,"widget_ugc_title":"Made by us, Shared by you","widget_ugc_subt
250itle":"Tag us to see your picture featured in our page","widget_ugc_arrows_color":"#ffffff","widget_ugc_primary_button_text":"Buy Now","widget_ugc_primary_button_background_color":"#108474","widget_ugc_primary_button_text_color":"#ffffff","widget_ugc_primary_button_border_width":"0","widget_ugc_primary_button_border_style":"none","widget_ugc_primary_button_border_color":"#108474","widget_ugc_primary_button_border_radius":"25","widget_ugc_secondary_button_text":"Load More","widget_ugc_secondary_button_background_color":"#ffffff","widget_ugc_secondary_button_text_color":"#108474","widget_ugc_secondary_button_border_width":"2","widget_ugc_secondary_button_border_style":"solid","widget_ugc_secondary_button_border_color":"#108474","widget_ugc_secondary_button_border_radius":"25","widget_ugc_reviews_button_text":"View Reviews","widget_ugc_reviews_button_background_color":"#ffffff","widget_ugc_reviews_button_text_color":"#108474","widget_ugc_reviews_button_border_width":"2","widget_ugc_reviews_button_border_style":"solid","widget_ugc_reviews_button_border_color":"#108474","widget_ugc_reviews_button_border_radius":"25","widget_ugc_reviews_button_link_to":"judgeme-reviews-page","widget_ugc_show_post_date":true,"widget_ugc_max_width":"800","widget_rating_metafield_value_type":true,"widget_primary_color":"#108474","widget_enable_secondary_color":false,"widget_secondary_color":"#edf5f5","widget_summary_average_rating_text":"{{ average_rating }} out of 5","widget_media_grid_title":"Customer photos \u0026 videos","widget_media_grid_see_more_text":"See more","widget_round_style":false,"widget_show_product_medals":true,"widget_verified_by_judgeme_text":"Verified by Judge.me","widget_show_store_medals":true,"widget_verified_by_judgeme_text_in_store_medals":"Verified by Judge.me","widget_media_field_exceed_quantity_message":"Sorry, we can only accept {{ max_media }} for one review.","widget_media_field_exceed_limit_message":"{{ file_name }} is too large, please select a {{ media_type }} less than {{ size_limit }}MB.","widget_review_submitted_text":"Review Submitted!","widget_question_submitted_text":"Question Submitted!","widget_close_form_text_question":"Cancel","widget_write_your_answer_here_text":"Write your answer here","widget_enabled_branded_link":true,"widget_show_collected_by_judgeme":true,"widget_reviewer_name_color":"","widget_write_review_text_color":"","widget_write_review_bg_color":"","widget_collected_by_judgeme_text":"collected by Judge.me","widget_pagination_type":"standard","widget_load_more_text":"Load More","widget_load_more_color":"#108474","widget_full_review_text":"Full Review","widget_read_more_reviews_text":"Read More Reviews","widget_read_questions_text":"Read Questions","widget_questions_and_answers_text":"Questions \u0026 Answers","widget_verified_by_text":"Verified by","widget_verified_text":"Verified","widget_number_of_reviews_text":"{{ number_of_reviews }} reviews","widget_back_button_text":"Back","widget_next_button_text":"Next","widget_custom_forms_filter_button":"Filters","custom_forms_style":"vertical","widget_show_review_information":false,"how_reviews_are_collected":"How reviews are collected?","widget_show_review_keywords":false,"widget_gdpr_statement":"How we use your data: We'll only contact you about the review you left, and only if necessary. By submitting your review, you agree to Judge.me's \u003ca href='https://judge.me/terms' target='_blank' rel='nofollow noopener'\u003eterms\u003c/a\u003e, \u003ca href='https://judge.me/privacy' target='_blank' rel='nofollow noopener'\u003eprivacy\u003c/a\u003e and \u003ca href='https://judge.me/content-policy' target='_blank' rel='nofollow noopener'\u003econtent\u003c/a\u003e policies.","widget_multilingual_sorting_enabled":false,"widget_translate_review_content_enabled":false,"widget_translate_review_content_method":"manual","popup_widget_review_selection":"automatically_with_pictures","popup_widget_round_border_style":true,"popup_widget_show_title":true,"popup_widget_show_body":true,"popup_widget_show_reviewer":false,"popup_widget_show_product":true,"popup_widget_show_pictures":true,"popup_widget_use_review_picture":true,"popup_widget_show_on_home_page":true,"popup_widget_show_on_product_page":true,"popup_widget_show_on_collection_page":true,"popup_widget_show_on_cart_page":true,"popup_widget_position":"bottom_left","popup_widget_first_review_delay":5,"popup_widget_duration":5,"popup_widget_interval":5,"popup_widget_review_count":5,"popup_widget_hide_on_mobile":true,"review_snippet_widget_round_border_style":true,"review_snippet_widget_card_color":"#FFFFFF","review_snippet_widget_text_color":"#000000","review_snippet_widget_lighter_text_color":"#7B7B7B","review_snippet_widget_slider_arrows_background_color":"#FFFFFF","review_snippet_widget_slider_arrows_color":"#000000","review_snippet_widget_star_color":"#108474","show_product_variant":false,"all_reviews_product_variant_label_text":"Variant: ","widget_show_verified_branding":true,"widget_ai_summary_title":"Customers say","widget_ai_summary_disclaimer":"AI-powered review summary based on recent customer reviews","widget_show_ai_summary":false,"widget_show_ai_summary_bg":false,"write_review_button_visibility":"everyone","store_summary_widget_heading":"Customers rate this store","store_summary_widget_button_text":"View customer reviews","store_summary_widget_button_theme_text":"See AI reviews summary","widget_show_review_title_input":true,"widget_autofill_review_title":true,"redirect_reviewers_invited_via_email":"review_widget","request_store_review_after_product_review":false,"request_review_other_products_in_order":false,"review_form_color_scheme":"default","review_form_corner_style":"square","review_form_star_color":"#108474","review_form_text_color":"#333333","review_form_background_color":"#ffffff","review_form_field_background_color":"#fafafa","review_form_button_color":"#108474","review_form_button_text_color":"#ffffff","review_form_modal_overlay_color":"#000000","review_form_theme":"multi_step","review_form_location":"in_store_popup","review_form_external_page_background_color":"#C5F7F0","review_content_screen_title_text":"How would you rate this product?","review_content_introduction_text":"We would love it if you would share a bit about your experience.","store_review_form_title_text":"How would you rate this store?","store_review_form_introduction_text":"We would love it if you would share a bit about your experience.","show_review_guidance_text":true,"one_star_review_guidance_text":"Poor","five_star_review_guidance_text":"Great","customer_information_screen_title_text":"About you","customer_information_introduction_text":"Please tell us more about you.","custom_questions_screen_title_text":"Your experience in more detail","custom_questions_introduction_text":"Here are a few questions to help us understand more about your experience.","review_submitted_screen_title_text":"Thanks for your review!","review_submitted_screen_thank_you_text":"We are processing it and it will appear on the store soon.","review_submitted_screen_email_verification_text":"Please confirm your email by clicking the link we just sent you. This helps us keep reviews authentic.","confirm_email_screen_title_text":"Confirm your email","confirm_email_screen_message_text":"To help keep reviews authentic, we'll send you a secure link to continue writing your review. It only takes a moment.","check_email_screen_title_text":"Check your email","check_email_screen_message_text":"We sent you an email to {{ email }}. Click the button on the email to continue.","check_email_screen_resend_message_text":"Email resent!","check_email_resend_hint_text":"Didn't get the email? Check your spam folder or [resend the email].","verification_email_rate_limit_error_text":"You've reached the limit for review attempts on this product. Please check your inbox or try again later.","review_submitted_request_store_review_text":"Would you like to share your experience of shopping with us?","review_submitted_review_other_products_text":"Would you like to review these products?","store_review_screen_title_text":"Would you like to share your experience of shopping with us?","store_review_introduction_text":"We value your feedback and use it to improve. Please share any thoughts or suggestions you have.","reviewer_media_screen_title_picture_text":"Share a picture","reviewer_media_introduction_picture_text":"Upload a photo to support your review.","reviewer_media_screen_title_video_text":"Share a video","reviewer_media_introduction_video_text":"Upload a video to support your review.","reviewer_media_screen_title_picture_or_video_text":"Share a picture or video","reviewer_media_introduction_picture_or_video_text":"Upload a photo or video to support your review.","reviewer_media_
250youtube_url_text":"Paste your Youtube URL here","advanced_settings_next_step_button_text":"Next","advanced_settings_close_review_button_text":"Close","modal_write_review_flow":false,"write_review_flow_required_text":"Required","write_review_flow_privacy_message_text":"We respect your privacy.","write_review_flow_anonymous_text":"Post review as anonymous","write_review_flow_visibility_text":"This won't be visible to other customers.","write_review_flow_multiple_selection_help_text":"Select as many as you like","write_review_flow_single_selection_help_text":"Select one option","write_review_flow_required_field_error_text":"This field is required","write_review_flow_invalid_email_error_text":"Please enter a valid email address","write_review_flow_max_length_error_text":"Max. {{ max_length }} characters.","write_review_flow_media_upload_text":"\u003cb\u003eClick to upload\u003c/b\u003e or drag and drop","write_review_flow_gdpr_statement":"We'll only contact you about your review if necessary. By submitting your review, you agree to our \u003ca href='https://judge.me/terms' target='_blank' rel='nofollow noopener'\u003eterms and conditions\u003c/a\u003e and \u003ca href='https://judge.me/privacy' target='_blank' rel='nofollow noopener'\u003eprivacy policy\u003c/a\u003e.","rating_only_reviews_enabled":false,"show_negative_reviews_help_screen":false,"new_review_flow_help_screen_rating_threshold":3,"negative_review_resolution_screen_title_text":"Tell us more","negative_review_resolution_text":"Your experience matters to us. If there were issues with your purchase, we're here to help. Feel free to reach out to us, we'd love the opportunity to make things right.","negative_review_resolution_button_text":"Contact us","negative_review_resolution_proceed_with_review_text":"Leave a review","negative_review_resolution_subject":"Issue with purchase from {{ shop_name }}.{{ order_name }}","coupon_promo_intro_any_review_text":"Write a review and get a coupon for {{ amount }} off your next purchase","coupon_promo_intro_with_photo_text":"Write a review and add a photo or video to get a coupon for {{ amount }} off your next purchase","coupon_promo_intro_with_video_text":"Write a review and add a video to get a coupon for {{ amount }} off your next purchase","coupon_promo_intro_up_to_any_review_text":"Write a review and get a coupon for up to {{ amount }} off your next purchase","coupon_promo_intro_up_to_with_photo_text":"Write a review and add a photo or video to get a coupon for up to {{ amount }} off your next purchase","coupon_promo_intro_external_text":"Write a review and get a reward for your next purchase","coupon_promo_intro_external_with_photo_text":"Write a review and add a photo or video to get a reward for your next purchase","coupon_promo_intro_external_with_video_text":"Write a review and add a video to get a reward for your next purchase","coupon_promo_media_photo_text":"Add a photo or video and get a coupon for {{ amount }} off your next purchase","coupon_promo_media_photo_only_text":"Add a photo and get a coupon for {{ amount }} off your next purchase","coupon_promo_media_video_text":"Add a video and get a coupon for {{ amount }} off your next purchase","coupon_promo_media_external_photo_text":"Add a photo or video and get a reward for your next purchase","coupon_promo_media_external_photo_only_text":"Add a photo and get a reward for your next purchase","coupon_promo_media_external_video_text":"Add a video and get a reward for your next purchase","coupon_promo_success_text":"You've got a coupon for your next purchase at {{ shop_name }}!","coupon_promo_success_subtext":"You'll receive your coupon email within the hour.","preview_badge_collection_page_install_status":false,"widget_review_custom_css":"","preview_badge_custom_css":"","preview_badge_stars_count":"5-stars","featured_carousel_custom_css":"","floating_tab_custom_css":"","all_reviews_widget_custom_css":"","medals_widget_custom_css":"","verified_badge_custom_css":"","all_reviews_text_custom_css":"","transparency_badges_collected_via_store_invite":false,"transparency_badges_from_another_provider":false,"transparency_badges_collected_from_store_visitor":false,"transparency_badges_collected_by_verified_review_provider":true,"transparency_badges_earned_reward":false,"transparency_badges_collected_via_store_invite_text":"Review collected via store invitation","transparency_badges_from_another_provider_text":"Review collected from another provider","transparency_badges_collected_from_store_visitor_text":"Review collected from a store visitor","transparency_badges_written_in_google_text":"Review written in Google","transparency_badges_written_in_etsy_text":"Review written in Etsy","transparency_badges_written_in_shop_app_text":"Review written in Shop App","transparency_badges_earned_reward_text":"Review earned a reward for future purchase","product_review_widget_per_page":10,"widget_other_languages_reviews_per_page":3,"widget_store_review_label_text":"Review about the store","widget_cart_mode_aggregate_heading_text":"Customers rate this store","checkout_comment_extension_title_on_product_page":"Customer Comments","checkout_comment_extension_num_latest_comment_show":5,"checkout_comment_extension_format":"name_and_timestamp","checkout_comment_customer_name":"last_initial","checkout_comment_comment_notification":true,"preview_badge_collection_page_install_preference":true,"preview_badge_home_page_install_preference":false,"preview_badge_product_page_install_preference":true,"review_widget_install_preference":"","review_carousel_install_preference":false,"floating_reviews_tab_install_preference":"none","verified_reviews_count_badge_install_preference":false,"all_reviews_text_install_preference":false,"review_widget_best_location":true,"judgeme_medals_install_preference":false,"review_widget_revamp_enabled":false,"review_widget_qna_enabled":false,"review_widget_header_theme":"minimal","review_widget_widget_title_enabled":true,"review_widget_header_text_size":"medium","review_widget_header_text_weight":"regular","review_widget_average_rating_style":"compact","review_widget_bar_chart_enabled":true,"review_widget_bar_chart_type":"numbers","review_widget_bar_chart_style":"standard","review_widget_expanded_media_gallery_enabled":false,"review_widget_show_review_highlights":false,"review_widget_show_review_keywords_in_gray":false,"review_widget_reviews_section_theme":"standard","review_widget_image_style":"thumbnails","review_widget_review_image_ratio":"square","review_widget_stars_size":"medium","review_widget_verified_badge":"standard_text","review_widget_review_title_text_size":"medium","review_widget_review_text_size":"medium","review_widget_review_text_length":"medium","review_widget_number_of_columns_desktop":3,"review_widget_carousel_transition_speed":5,"review_widget_custom_questions_answers_display":"always","review_widget_card_section_size":"small","review_widget_button_text_color":"#FFFFFF","review_widget_text_color":"#000000","review_widget_lighter_text_color":"#7B7B7B","review_widget_corner_styling":"soft","review_widget_review_word_singular":"review","review_widget_review_word_plural"
250:"reviews","review_widget_voting_label":"Helpful?","review_widget_shop_reply_label":"Reply from {{ shop_name }}:","review_widget_filters_title":"Filters","review_widget_filter_rating_title":"Rating","review_widget_filter_keyword_title":"Keyword","review_widget_clear_filters_text":"Clear filters","review_widget_expand_more_text":"More","review_widget_review_highlights_title":"Review highlights","qna_widget_question_word_singular":"Question","qna_widget_question_word_plural":"Questions","qna_widget_answer_reply_label":"Answer from {{ answerer_name }}:","qna_content_screen_title_text":"Ask a question about this product","qna_widget_question_required_field_error_text":"Please enter your question.","qna_widget_flow_gdpr_statement":"We'll only contact you about your question if necessary. By submitting your question, you agree to our \u003ca href='https://judge.me/terms' target='_blank' rel='nofollow noopener'\u003eterms and conditions\u003c/a\u003e and \u003ca href='https://judge.me/privacy' target='_blank' rel='nofollow noopener'\u003eprivacy policy\u003c/a\u003e.","qna_widget_question_submitted_text":"Thanks for your question!","qna_widget_close_form_text_question":"Close","qna_widget_question_submit_success_text":"Weâll notify you by email when your question is answered.","all_reviews_widget_v2025_enabled":false,"all_reviews_widget_v2025_header_theme":"default","all_reviews_widget_v2025_widget_title_enabled":true,"all_reviews_widget_v2025_header_text_size":"medium","all_reviews_widget_v2025_header_text_weight":"regular","all_reviews_widget_v2025_average_rating_style":"compact","all_reviews_widget_v2025_bar_chart_enabled":true,"all_reviews_widget_v2025_bar_chart_type":"numbers","all_reviews_widget_v2025_bar_chart_style":"standard","all_reviews_widget_v2025_expanded_media_gallery_enabled":false,"all_reviews_widget_v2025_show_store_medals":true,"all_reviews_widget_v2025_show_photo_gallery":true,"all_reviews_widget_v2025_show_review_keywords":false,"all_reviews_widget_v2025_show_ai_summary":false,"all_reviews_widget_v2025_show_ai_summary_bg":false,"all_reviews_widget_v2025_show_review_highlights":false,"all_reviews_widget_v2025_show_review_keywords_in_gray":false,"all_reviews_widget_v2025_add_search_bar":false,"all_reviews_widget_v2025_default_sort_method":"most-recent","all_reviews_widget_v2025_reviews_per_page":10,"all_reviews_widget_v2025_reviews_section_theme":"default","all_reviews_widget_v2025_image_style":"thumbnails","all_reviews_widget_v2025_review_image_ratio":"square","all_reviews_widget_v2025_stars_size":"medium","all_reviews_widget_v2025_verified_badge":"standard_text","all_reviews_widget_v2025_review_title_text_size":"medium","all_reviews_widget_v2025_review_text_size":"medium","all_reviews_widget_v2025_review_text_length":"medium","all_reviews_widget_v2025_number_of_columns_desktop":3,"all_reviews_widget_v2025_carousel_transition_speed":5,"all_reviews_widget_v2025_custom_questions_answers_display":"always","all_reviews_widget_v2025_review_dates":false,"all_reviews_widget_v2025_card_section_size":"small","all_reviews_widget_v2025_show_product_variant":false,"all_reviews_widget_v2025_show_reviewer_avatar":true,"all_reviews_widget_v2025_reviewer_name_as_initial":"","all_reviews_widget_v2025_review_location_show":false,"all_reviews_widget_v2025_location_format":"","all_reviews_widget_v2025_show_country_flag":false,"all_reviews_widget_v2025_widget_thumb":false,"all_reviews_widget_v2025_verified_by_shop_badge_style":"light","all_reviews_widget_v2025_social_share":false,"all_reviews_widget_v2025_social_share_options_order":"Facebook,Twitter,LinkedIn,Pinterest","all_reviews_widget_v2025_pagination_type":"standard","all_reviews_widget_v2025_button_text_color":"#FFFFFF","all_reviews_widget_v2025_text_color":"#000000","all_reviews_widget_v2025_lighter_text_color":"#7B7B7B","all_reviews_widget_v2025_corner_styling":"soft","all_reviews_widget_v2025_title":"Customer reviews","all_reviews_widget_v2025_ai_summary_title":"Customers say about this store","all_reviews_widget_v2025_no_review_text":"Be the first to write a review","all_reviews_widget_v2025_review_highlights_title":"Review highlights","reviews_grid_widget_show_sample_reviews":false,"reviews_grid_widget_review_selection":"all","reviews_grid_widget_select_products":[],"reviews_grid_widget_show_media_only":false,"reviews_grid_widget_display_order":"media_first","reviews_grid_widget_card_grouping":"per_media","reviews_grid_widget_columns_desktop":3,"reviews_grid_widget_rows_desktop":3,"reviews_grid_widget_columns_mobile":2,"reviews_grid_widget_rows_mobile":6,"reviews_grid_widget_show_stars":true,"reviews_grid_widget_show_reviewer_name":true,"reviews_grid_widget_show_review_title_on_hover_desktop":true,"reviews_grid_widget_corner_styling":"soft","reviews_grid_widget_card_spacing":"medium","reviews_grid_widget_header_text_color":"#000000","reviews_grid_widget_star_and_reviewer_name_color":"#F9F9F9","reviews_grid_widget_overlay_and_background_color":"#000000","reviews_grid_widget_content_color":"#F9F9F9","reviews_grid_widget_header_text":"From our customers","reviews_grid_widget_show_average_rating":true,"trust_badge_enabled":false,"trust_badge_structure":"outline","trust_badge_color":"black","trust_badge_star":"black","trust_badge_rating_display_default":"show_avg_text","platform":"shopify","branding_url":"https://app.judge.me/reviews/stores/venturi-belt-co.myshopify.com","branding_text":"Powered by Judge.me","locale":"en","reply_name":"VENTURi Belt Co.","shop_currency":"USD","widget_version":"3.0","footer":true,"autopublish":true,"review_dates":true,"enable_custom_form":false,"shop_use_review_site":true,"shop_locale":"en","enable_multi_locales_translations":false,"show_review_title_input":true,"autofill_review_title":true,"review_verification_email_status":"always","require_verification_before_submit":false,"sign_in_with_
250shop_enabled":false,"customer_account_validation_enabled":true,"most_relevant_sort_enabled":false,"coupon_promo_invited_eligible":true,"coupon_promo_web_eligible":false,"uses_coupon_integration":false,"uses_external_coupon":false,"can_be_branded":true,"rtl_stars_enabled_ar":true,"rtl_stars_enabled_he":true,"reply_name_text":"VENTURi Belt Co."};</script>
250 <style class='jdgm-settings-style'>.jdgm-xx{left:0}:root{--jdgm-primary-color: #108474;--jdgm-secondary-color: rgba(16,132,116,0.1);--jdgm-star-color: #108474;--jdgm-write-review-text-color: white;--jdgm-write-review-bg-color: #108474;--jdgm-paginate-color: #108474;--jdgm-border-radius: 0;--jdgm-reviewer-name-color: #108474}.jdgm-histogram__bar-content{background-color:#108474}.jdgm-rev[data-verified-buyer=true] .jdgm-rev__icon.jdgm-rev__icon:after,.jdgm-rev__buyer-badge.jdgm-rev__buyer-badge{color:white;background-color:#108474}.jdgm-review-widget--small .jdgm-gallery.jdgm-gallery .jdgm-gallery__thumbnail-link:nth-child(8) .jdgm-gallery__thumbnail-wrapper.jdgm-gallery__thumbnail-wrapper:before{content:"See more"}@media only screen and (min-width: 768px){.jdgm-gallery.jdgm-gallery .jdgm-gallery__thumbnail-link:nth-child(8) .jdgm-gallery__thumbnail-wrapper.jdgm-gallery__thumbnail-wrapper:before{content:"See more"}}.jdgm-prev-badge[data-average-rating='0.00']{display:none !important}.jdgm-author-all-initials{display:none !important}.jdgm-author-last-initial{display:none !important}.jdgm-rev-widg__title{visibility:hidden}.jdgm-rev-widg__summary-text{visibility:hidden}.jdgm-prev-badge__text{visibility:hidden}.jdgm-rev__prod-link-prefix:before{content:'about'}.jdgm-rev__variant-label:before{content:'Variant: '}.jdgm-rev__out-of-store-text:before{content:'(out of store)'}@media only screen and (min-width: 768px){.jdgm-rev__pics .jdgm-rev_all-rev-page-picture-separator,.jdgm-rev__pics .jdgm-rev__product-picture{display:none}}@media only screen and (max-width: 768px){.jdgm-rev__pics .jdgm-rev_all-rev-page-picture-separator,.jdgm-rev__pics .jdgm-rev__product-picture{display:none}}.jdgm-preview-badge[data-template="index"]{display:none !important}.jdgm-verified-count-badget[data-from-snippet="true"]{display:none !important}.jdgm-carousel-wrapper[data-from-snippet="true"]{display:none !important}.jdgm-all-reviews-text[data-from-snippet="true"]{display:none !important}.jdgm-medals-section[data-from-snippet="true"]{display:none !important}.jdgm-ugc-media-wrapper[data-from-snippet="true"]{display:none !important}.jdgm-rev__transparency-badge[data-badge-type="review_collected_via_store_invitation"]{display:none !important}.jdgm-rev__transparency-badge[data-badge-type="review_collected_from_another_provider"]{display:none !important}.jdgm-rev__transparency-badge[data-badge-type="review_collected_from_store_visitor"]{display:none !important}.jdgm-rev__transparency-badge[data-badge-type="review_earned_for_future_purchase"]{display:none !important}.jdgm-review-snippet-widget{--jdgm-snippet-card-color: #fff;--jdgm-snippet-text-color: #000;--jdgm-snippet-lighter-text-color: #7B7B7B;--jdgm-snippet-star-color: #108474;--jdgm-snippet-border-radius: 8px;--jdgm-snippet-arrows-bg-color: #fff;--jdgm-snippet-arrows-color: #000}.jdgm-review-snippet-widget .jdgm-rev-snippet-widget__cards-container .jdgm-rev-snippet-card{border-radius:8px;background:#fff}.jdgm-review-snippet-widget .jdgm-rev-snippet-widget__cards-container .jdgm-rev-snippet-card__rev-rating .jdgm-star{color:#108474}.jdgm-review-snippet-widget .jdgm-rev-snippet-widget__prev-btn,.jdgm-review-snippet-widget .jdgm-rev-snippet-widget__next-btn{border-radius:50%;background:#fff}.jdgm-review-snippet-widget .jdgm-rev-snippet-widget__prev-btn>svg,.jdgm-review-snippet-widget .jdgm-rev-snippet-widget__next-btn>svg{fill:#000}.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jm-mfp-content,.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jdgm-full-rev__icon,.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jdgm-full-rev__pic-img,.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jdgm-full-rev__reply{border-radius:8px}.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jdgm-full-rev[data-verified-buyer="true"] .jdgm-full-rev__icon::after{border-radius:8px}.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jdgm-full-rev .jdgm-rev__buyer-badge{border-radius:calc( 8px / 2 )}.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jdgm-full-rev .jdgm-full-rev__replier::before{content:'VENTURi Belt Co.'}.jdgm-full-rev-modal.rev-snippet-widget .jm-mfp-container .jdgm-full-rev .jdgm-full-rev__product-button{border-radius:calc( 8px * 6 )} 251</style> <style class='jdgm-settings-style'></style> 252 253 254 255 256 <style class='jdgm-miracle-styles'> 257 @-webkit-keyframes jdgm-spin{0%{-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);-ms-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes jdgm-spin{0%{-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);-ms-transform:rotate(359deg);transform:rotate(359deg)}}@font-face{font-family:'JudgemeStar';src:url("data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAAScAA0AAAAABrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAEgAAAABoAAAAcbyQ+3kdERUYAAARgAAAAHgAAACAAMwAGT1MvMgAAAZgAAABGAAAAVi+vS9xjbWFwAAAB8AAAAEAAAAFKwBMjvmdhc3AAAARYAAAACAAAAAj//wADZ2x5ZgAAAkAAAAEJAAABdH33LXtoZWFkAAABMAAAAC0AAAA2BroQKWhoZWEAAAFgAAAAHAAAACQD5QHQaG10eAAAAeAAAAAPAAAAFAYAAABsb2NhAAACMAAAAA4AAAAOAO4AeG1heHAAAAF8AAAAHAAAACAASgAvbmFtZQAAA0wAAADeAAABkorWfVZwb3N0AAAELAAAACkAAABEp3ubLXgBY2BkYADhPPP4OfH8Nl8ZuJkYQODS2fRrCPr/aSYGxq1ALgcDWBoAO60LkwAAAHgBY2BkYGDc+v80gx4TAwgASaAICmABAFB+Arl4AWNgZGBgYGPQYWBiAAIwyQgWc2AAAwAHVQB6eAFjYGRiYJzAwMrAwejDmMbAwOAOpb8ySDK0MDAwMbByMsCBAAMCBKS5pjA4PGB4wMR44P8BBj3GrQymQGFGkBwAjtgK
257/gAAeAFjYoAAEA1jAwAAZAAHAHgB3crBCcAwDEPRZydkih567CDdf4ZskmLwFBV8xBfCaC4BXkOUmx4sU0h2ngNb9V0vQCxaRKIAevT7fGWuBrEAAAAAAAAAAAA0AHgAugAAeAF9z79Kw1AUx/FzTm7un6QmJtwmQ5Bg1abgEGr/BAqlU6Gju+Cgg1MkQ/sA7Vj7BOnmO/gUvo2Lo14NqIO6/IazfD8HEODtmQCfoANwNsyp2/GJt3WKQrd1NLiYYWx2PBqOsmJMEOznPOTzfSCrhAtbbLdmeFLJV9eKd63WLrZcIcuaEVdssWCKM6pLCfTVOYbz/0pNSMSZKLIZpvh78sAUH6PlMrreTCabP9r+Z/puPZ2ur/RqpQHgh+MIegCnXeM4MRAPjYN//5tj4ZtTjkFqEdmeMShlEJ7tVAly2TAkx6R68Fl4E/aVvn8JqHFQ4JS1434gXKcuL31dDhzs3YbsEOAd/IU88gAAAHgBfY4xTgMxEEVfkk0AgRCioKFxQYd2ZRtpixxgRU2RfhU5q5VWseQ4JdfgAJyBlmNwAM7ABRhZQ0ORwp7nr+eZAa54YwYg9zm3ynPOeFRe8MCrciXOh/KSS76UV5L/iDmrLiS5AeU519wrL3jmSbkS5115yR2fyivJv9kx0ZMZ2RLZw27q87iNQi8EBo5FSPIMw3HqBboi5lKTGAGDp8FKXWP+t9TU01Lj5His1Ba6uM9dTEMwvrFmbf5GC/q2drW3ruXUhhsCiQOjznFlCzYhHUZp4xp76vsvQh89CQAAeAFjYGJABowM6IANLMrEyMTIzMjCXpyRWJBqZshWXJJYBKOMAFHFBucAAAAAAAAB//8AAngBY2BkYGDgA2IJBhBgAvKZGViBJAuYxwAABJsAOgAAeAFjYGBgZACCk535hiD60tn0azAaAEqpB6wAAA==") format("woff");font-weight:normal;font-style:normal}.jdgm-star{font-family:'JudgemeStar';display:inline !important;text-decoration:none !important;padding:0 4px 0 0 !important;margin:0 !important;font-weight:bold;opacity:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.jdgm-star:hover{opacity:1}.jdgm-star:last-of-type{padding:0 !important}.jdgm-star.jdgm--on:before{content:"\e000"}.jdgm-star.jdgm--off:before{content:"\e001"}.jdgm-star.jdgm--half:before{content:"\e002"}.jdgm-widget *{margin:0;line-height:1.4;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-overflow-scrolling:touch}.jdgm-hidden{display:none !important;visibility:hidden !important}.jdgm-temp-hidden{display:none}.jdgm-spinner{width:40px;height:40px;margin:auto;border-radius:50%;border-top:2px solid #eee;border-right:2px solid #eee;border-bottom:2px solid #eee;border-left:2px solid #ccc;-webkit-animation:jdgm-spin 0.8s infinite linear;animation:jdgm-spin 0.8s infinite linear}.jdgm-prev-badge{display:block !important} 258 259</style> 260 261 262 263 264 265 266
267<script data-cfasync='false' class='jdgm-script'> 268!function(e){window.jdgm=window.jdgm||{},jdgm.CDN_HOST="https://cdn.judge.me/", 269jdgm.docReady=function(d){(e.attachEvent?"complete"===e.readyState:"loading"!==e.readyState)? 270setTimeout(d,0):e.addEventListener("DOMContentLoaded",d)},jdgm.loadCSS=function(d,t,o,s){ 271!o&&jdgm.loadCSS.requestedUrls.indexOf(d)>=0||(jdgm.loadCSS.requestedUrls.push(d), 272(s=e.createElement("link")).rel="stylesheet",s.class="jdgm-stylesheet",s.media="nope!", 273s.href=d,s.onload=function(){this.media="all",t&&setTimeout(t)},e.body.appendChild(s))}, 274jdgm.loadCSS.requestedUrls=[],jdgm.loadJS=function(e,d){var t=new XMLHttpRequest; 275t.onreadystatechange=function(){4===t.readyState&&(Function(t.response)(),d&&d(t.response))}, 276t.open("GET",e),t.send()},jdgm.docReady((function(){(window.jdgmLoadCSS||e.querySelectorAll( 277".jdgm-widget, .jdgm-all-reviews-page").length>0)&&(jdgmSettings.widget_load_with_code_splitting? 278parseFloat(jdgmSettings.widget_version)>=3?jdgm.loadCSS(jdgm.CDN_HOST+"widget_v3/base.css"): 279jdgm.loadCSS(jdgm.CDN_HOST+"widget/base.css"):jdgm.loadCSS(jdgm.CDN_HOST+"shopify_v2.css"), 280jdgm.loadJS(jdgm.CDN_HOST+"loader.js"))}))}(document); 281</script>
281 282 283<noscript><link rel="stylesheet" type="text/css" media="all" href="https://cdn.judge.me/shopify_v2.css"></noscript> 284<!-- End of Judge.me Core --> 285 286 287<meta property="og:image" content="https://cdn.shopify.com/s/files/1/1676/5131/files/Venturi-Logo-Final_dec14a8e-d5e2-41e3-affc-f99ca0a7a0cc.png?height=628&pad_color=fff&v=1613646310&width=1200" /> 288<meta property="og:image:secure_url" content="https://cdn.shopify.com/s/files/1/1676/5131/files/Venturi-Logo-Final_dec14a8e-d5e2-41e3-affc-f99ca0a7a0cc.png?height=628&pad_color=fff&v=1613646310&width=1200" /> 289<meta property="og:image:width" content="1200" /> 290<meta property="og:image:height" content="628" /> 291<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
292<script>(function(){if ("sendBeacon" in navigator && "performance" in window) {try {var session_token_from_headers = performance.getEntriesByType('navigation')[0].serverTiming.find(x => x.name == '_s').description;} catch {var session_token_from_headers = undefined;}var session_cookie_matches = document.cookie.match(/_shopify_s=([^;]*)/);var session_token_from_cookie = session_cookie_matches && session_cookie_matches.length === 2 ? session_cookie_matches[1] : "";var session_token = session_token_from_headers || session_token_from_cookie || "";function handle_abandonment_event(e) {var entries = performance.getEntries().filter(function(entry) {return /monorail-edge.shopifysvc.com/.test(entry.name);});if (!window.abandonment_tracked && entries.length === 0) {window.abandonment_tracked = true;var currentMs = Date.now();var navigation_start = performance.timing.navigationStart;var payload = {shop_id: 16765131,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "cart"};window.navigator.sendBeacon("https://monorail-edge.shopifysvc.com/v1/produce", JSON.stringify({schema_id: "online_store_buyer_site_abandonment/1.1",payload: payload,metadata: {event_created_at_ms: currentMs,event_sent_at_ms: currentMs}}));}}window.addEventListener('pagehide', handle_abandonment_event);}}());</script>
vendor: 1 bytes, line 292
292
293<script> 294 window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || []; 295</script>
vendor: 1 bytes, line 295
295
296<script>(function(){var wpmLoader=function(){"use strict";var e=/Googlebot|Storebot-Google|bingbot|Baiduspider|YandexBot|DuckDuckBot|Slurp|facebookexternalhit|Twitterbot|LinkedInBot|Applebot|AdsBot-Google|Mediapartners-Google|APIs-Google|PetalBot|SemrushBot|AhrefsBot|MJ12bot|DotBot|Acunetix|PerplexityBot|Perplexity-User/i,t=/bytedance/i;function i(){try{var e=document.cookie;if(!e||"string"!=typeof e)return;for(var t=0,i=e.split(";");t<i.length;t++){var n=i[t],r=n.indexOf("=");if(-1!==r){var o=n.slice(0,r).trim();if(o){var a=void 0;try{a=decodeURIComponent(o)}catch(e){a=o}if("_shopify_s"===a){var d=n.slice(r+1).trim();try{return decodeURIComponent(d)}catch(e){return d}}}}}return}catch(e){return}}function n(e){try{"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn(e)}catch(e){}}function r(e,t){return"string"==typeof e&&e.length>0&&e.length<=t?e:void 0}function o(e){var t;switch(null==(t=null==e?void 0:e.navigation)?void 0:t.type){case 0:return"navigate";case 1:return"reload";case 2:return"back_forward";default:return}}function a(){var e,t,i;try{var n=null==(i=null==(t=null==(e=self.ShopifyAnalytics)?void 0:e.lib)?void 0:t.trekkie)?void 0:i.state;return"awaiting-consent"===n||"initialized"===n?n:void 0}catch(e){return}}return function(d,s,u,l){var c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};try{var p=c.trekkieShim;!0!==p&&"true"!==p||null!=window.__TREKKIE_SHIM_QUEUE||(window.__TREKKIE_SHIM_QUEUE=[])}catch(e){}var f,v,h,y,g=(v=(f={modern:/Edge?\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Firefox\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Chrom(ium|e)\/(9{2}|\d{3,})\.\d+(\.\d+|)|(Maci|X1{2}).+ Version\/(15\.\d+|(1[6-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(9{2}|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(15[._]\d+|(1[6-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|SamsungBrowser\/([2-9]\d|\d{3,})\.\d+/,legacy:/Edge?\/(1[6-9]|[2-9]\d|\d{3,})\.\d+(\.\d+|)|Firefox\/(5[4-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)|Chrom(ium|e)\/(5[1-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)([\d.]+$|.*Safari\/(?![\d.]+ Edge\/[\d.]+$))|(Maci|X1{2}).+ Version\/(10\.\d+|(1[1-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(3[89]|[4-9]\d|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(10[._]\d+|(1[1-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Mobile Safari.+OPR\/([89]\d|\d{3,})\.\d+\.\d+|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+(UC? ?Browser|UCWEB|U3)[ /]?(15\.([5-9]|\d{2,})|(1[6-9]|[2-9]\d|\d{3,})\.\d+)\.\d+|SamsungBrowser\/(5\.\d+|([6-9]|\d{2,})\.\d+)|Android.+MQ{2}Browser\/(14(\.(9|\d{2,})|)|(1[5-9]|[2-9]\d|\d{3,})(\.\d+|))(\.\d+|)|K[Aa][Ii]OS\/(3\.\d+|([4-9]|\d{2,})\.\d+)(\.\d+|)/}).modern,h=f.legacy,(y=navigator.userAgent).match(e)?"bot":y.match(v)?"modern":y.match(h)?"legacy":y.match(t)?"bot":"unknown"),m=function(e){var t,i,n=r(e,128);try{var a=window.performance,d=null==(t=null==a?void 0:a.getEntriesByType)?void 0:t.call(a,"navigation")[0];if(!d)return{requestId:n,navigationType:o(a)};var s="type"in d?r(d.type,64):void 0,u="serverTiming"in d&&Array.isArray(d.serverTiming)?d.serverTiming:[];return{requestId:null!=n?n:r(null==(i=u.find(function(e){return"requestID"===e.name}))?void 0:i.description,128),navigationType:s}}catch(e){return{requestId:n}}}(c.requestId),w=function(e){var t=e.version,r=e.browserTarget,o=e.surface,a=e.shopId,d=e.monorailEndpoint,s=window.location.href;return{emit:function(e){var u=e.status,l=e.errorMsg,c=e.failureReason,p=e.useKeepaliveFallback,f=void 0!==p&&p,v=e.navigationType,h=e.pagehidePersisted,y=e.requestId,g=e.trekkieState;if(d){var m,w;try{var b=(new Date).getTime();m=JSON.stringify({metadata:{event_sent_at_ms:b},events:[{schema_id:"web_pixels_manager_load/3.3",payload:{version:t,bundle_target:r,page_url:s,status:u,surface:o,error_msg:l,failure_reason:c,navigation_type:v,pagehide_persisted:h,request_id:y,trekkie_state:g,shop_id:a,visit_token:i()},metadata:{event_created_at_ms:b}}]})}catch(e){return}try{if("function"==typeof window.navigator.sendBeacon&&-1===(w=window.navigator.userAgent).indexOf("iPhone; CPU iPhone OS 12_")&&-1===w.indexOf("iPad; CPU OS 12_")&&-1===w.indexOf("iPod touch; CPU iPhone OS 12_")&&window.navigator.sendBeacon.bind(window.navigator)(d,m))return}catch(e){}if(f)try{"function"==typeof window.fetch&&window.fetch(d,{method:"POST",headers:{"Content-Type":"text/plain"},body:m,keepalive:!0}
296).catch(function(){})}catch(e){}else try{var _=new XMLHttpRequest;_.open("POST",d,!0),_.setRequestHeader("Content-Type","text/plain"),_.send(m)}catch(e){n("[Web Pixels Manager] Got an unhandled error while logging to Monorail.")}}else n("[Web Pixels Manager] No Monorail endpoint provided, skipping logging.")}}}({version:u,browserTarget:g,surface:d.surface,shopId:d.shopId,monorailEndpoint:d.monorailEndpoint});if(Boolean(null==(_=null==(b=window.Shopify)?void 0:b.analytics)?void 0:_.replayQueue))w.emit({status:"setup-skipped",errorMsg:"replay queue already initialized."});else{var b,_;w.emit({status:"setup-started"}),window.Shopify=window.Shopify||{};var S=window.Shopify;S.analytics=S.analytics||{};var P=S.analytics;P.replayQueue=[],P.publish=function(e,t,i){return P.replayQueue.push([e,t,i]),!0};try{self.performance.mark("wpm:start")}catch(e){}var k,C="modern"===g?"modern":"legacy",E=(null!=l?l:{modern:"",legacy:""})[C],I=[(k={baseUrl:s,hashVersion:u,buildTarget:C}).baseUrl,"/wpm","/b",k.hashVersion,"modern"===k.buildTarget?"m":"l",".js"].join(""),O=!1,T=!1;try{c.browserTarget=g,function(){O=!0;try{window.addEventListener("pagehide",M)}catch(e){O=!1}}(),R(function(){try{R(x)}catch(e){D(e)}}),w.emit({status:"loading",requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()})}catch(e){D(e)}}function U(){var e;if(q(),!function(){var e,t;return Boolean(null==(t=null==(e=window.Shopify)?void 0:e.analytics)?void 0:t.initialized)}()){var t,i,n;try{if("function"!=typeof(null==(e=window.webPixelsManager)?void 0:e.init))return void A();if(!(null!==(n=i=t=window.webPixelsManager.init(d))&&"function"!=typeof n&&Object(n)===n&&"publish"in i&&"function"==typeof i.publish&&"publishCustomEvent"in i&&"function"==typeof i.publishCustomEvent&&"visitor"in i&&"function"==typeof i.visitor))return void A()}catch(e){return void A(e)}var r=window.Shopify.analytics;r.replayQueue.forEach(function(e){var i=e[0],n=e[1],r=e[2];t.publishCustomEvent(i,n,r)}),r.replayQueue=[],r.publish=t.publishCustomEvent,r.visitor=t.visitor,r.initialized=!0}}function A(e){B("manager_api_unavailable",void 0===e?void 0:Q(e))}function x(){B("script_load_failed","".concat(I," has failed to load"))}function B(e,t){T||(T=!0,q(),w.emit({status:"failed",errorMsg:t,failureReason:e,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function M(e){O&&(q(),w.emit({status:"pagehide-while-loading",useKeepaliveFallback:!0,pagehidePersisted:e.persisted,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function q(){O=!1;try{window.removeEventListener("pagehide",M)}catch(e){}}function R(e){var t;!function(e){var t=e.src,i=e.async,n=void 0===i||i,r=e.onload,o=e.onerror,a=e.sri,d=e.scriptDataAttributes,s=void 0===d?{}:d,u=document.createElement("script"),l=document.querySelector("head"),c=document.querySelector("body");if(u.async=n,u.src=t,a&&(u.integrity=a,u.crossOrigin="anonymous"),s)for(var p in s)if(Object.prototype.hasOwnProperty.call(s,p))try{u.dataset[p]=String(s[p])}catch(e){}if(r&&u.addEventListener("load",r),o&&u.addEventListener("error",o),l)l.appendChild(u);else{if(!c)throw new Error("Did not find a head or body element to append the script");c.appendChild(u)}}({src:I,async:!0,onload:U,onerror:e,sri:(t=E,"string"==typeof t&&/^sha384-[A-Za-z0-9+/=]+$/.test(t)?E:""),scriptDataAttributes:c})}function D(e){B("script_append_failed",Q(e))}function Q(e){return e instanceof Error?e.message:"Unknown error"}}}();wpmLoader({shopId: 16765131,storefrontBaseUrl: "https://venturi-belt-co.myshopify.com",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://venturi-belt-co.myshopify.com/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["4c64608a","16072cab"],webPixelsConfigList: [{"id":"1521418317","configuration":"{\"accountID\":\"Wqn9Mc\",\"webPixelConfig\":\"eyJlbmFibGVBZGRlZFRvQ2FydEV2ZW50cyI6IHRydWV9\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"c63c5b72c8d77be5f2d27d14c081da38","type":"APP","apiClientId":123074,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":[]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"786268237","configuration":"{\"webPixelName\":\"Judge.me\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"8acc938b1a30dc7624e304493ca567d7","type":"APP","apiClientId":683015,"privacyPurposes":["ANALYTICS"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]}
296,"dataSharingState":"unrestricted"},{"id":"318767181","configuration":"{\"config\":\"{\\\"pixel_id\\\":\\\"G-D3YEK1FTQ8\\\",\\\"target_country\\\":\\\"US\\\",\\\"gtag_events\\\":[{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":[\\\"G-D3YEK1FTQ8\\\",\\\"AW-693493016\\\/7IpMCIrZ1-8CEJi618oC\\\"]},{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":[\\\"G-D3YEK1FTQ8\\\",\\\"AW-693493016\\\/-SCSCIfZ1-8CEJi618oC\\\"]},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":[\\\"G-D3YEK1FTQ8\\\",\\\"AW-693493016\\\/uR-VCIHZ1-8CEJi618oC\\\",\\\"MC-ZQHKK5P2DY\\\"]},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":[\\\"G-D3YEK1FTQ8\\\",\\\"AW-693493016\\\/BFCQCP7Y1-8CEJi618oC\\\",\\\"MC-ZQHKK5P2DY\\\"]},{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":[\\\"G-D3YEK1FTQ8\\\",\\\"AW-693493016\\\/nHT0CPvY1-8CEJi618oC\\\",\\\"MC-ZQHKK5P2DY\\\"]},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":[\\\"G-D3YEK1FTQ8\\\",\\\"AW-693493016\\\/EzARCI3Z1-8CEJi618oC\\\"]},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":[\\\"G-D3YEK1FTQ8\\\",\\\"AW-693493016\\\/mmvUCITZ1-8CEJi618oC\\\"]}],\\\"enable_monitoring_mode\\\":false}\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"a3321ca85cf5aaf6b57585fcd8d67b3a","type":"APP","apiClientId":1780363,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"106463309","configuration":"{\"pixel_id\":\"1888282024752711\",\"pixel_type\":\"facebook_pixel\",\"metaapp_system_user_token\":\"-\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"bd2f978c17a94bbb8a74d43de2165dc5","type":"APP","apiClientId":2329312,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"shopify-app-pixel","configuration":"{}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"APP","privacyPurposes":["ANALYTICS","MARKETING"]},{"id":"shopify-custom-pixel","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING"]}],isMerchantRequest: false,initData: {"shop":{"name":"VENTURi Belt Co.","paymentSettings":{"currencyCode":"USD"},"myshopifyDomain":"venturi-belt-co.myshopify.com","countryCode":"US","storefrontUrl":"https:\/\/venturi-belt-co.myshopify.com"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[],"purchasingCompany":null},},"https://venturi-belt-co.myshopify.com/cdn","7ec887c8w14f9f074p854094e1m1370c602",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"120412536909","themeStoreId":"601","themePublished":"true","eventMetadataId":"5f200ab0-e869-4e77-bd22-745c9e54081d","pageType":"cart","shopId":"16765131","storefrontBaseUrl":"https:\/\/venturi-belt-co.myshopify.com","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"4c64608a\", \"16072cab\"]","isMerchantRequest":"false","hashVersion":"7ec887c8w14f9f074p854094e1m1370c602","publish":"custom","events":"[[\"page_viewed\",{}]]"});})();</script>
296<script> 297 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 298 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 299 window.ShopifyAnalytics.meta.currency = 'USD'; 300 var meta = {"page":{"pageType":"cart","requestId":"75161882-5ad5-47db-a7b8-ff1828fecb05-1791580777"}}; 301 for (var attr in meta) { 302 window.ShopifyAnalytics.meta[attr] = meta[attr]; 303 } 304</script>
vendor: 1 bytes, line 304
304
305<script class="analytics"> 306 (function () { 307 var customDocumentWrite = function(content) { 308 var jquery = null; 309 310 if (window.jQuery) { 311 jquery = window.jQuery; 312 } else if (window.Checkout && window.Checkout.$) { 313 jquery = window.Checkout.$; 314 } 315 316 if (jquery) { 317 jquery('body').append(content); 318 } 319 }; 320 321 var hasLoggedConversion = function(token) { 322 if (token) { 323 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 324 } 325 return false; 326 } 327 328 var setCookieIfConversion = function(token) { 329 if (token) { 330 var twoMonthsFromNow = new Date(Date.now()); 331 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 332 333 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 334 } 335 } 336 337 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 338 window.ShopifyAnalytics.lib.trekkie = window.trekkie; 339 if (trekkie.integrations) { 340 return; 341 } 342 trekkie.methods = [ 343 'identify', 344 'page', 345 'ready', 346 'track', 347 'trackForm', 348 'trackLink' 349 ]; 350 trekkie.factory = function(method) { 351 return function() { 352 var args = Array.prototype.slice.call(arguments); 353 args.unshift(method); 354 trekkie.push(args); 355 if (method == 'track' || method == 'page') { 356 var pageUrl; 357 try { 358 pageUrl = window.location.href; 359 } catch (e) {} 360 var pageReferrer; 361 try { 362 pageReferrer = document.referrer; 363 } catch (e) {} 364 try { 365 if (window.__TREKKIE_SHIM_QUEUE == null) { 366 window.__TREKKIE_SHIM_QUEUE = []; 367 } 368 window.__TREKKIE_SHIM_QUEUE.push({ 369 from: 'trekkie-stub', 370 method: method, 371 args: args.slice(1), 372 pageContext: { 373 url: pageUrl, 374 referrer: pageReferrer 375 } 376 }); 377 } catch (e) { 378 // no-op 379 } 380 } 381 return trekkie; 382 }; 383 }; 384 for (var i = 0; i < trekkie.methods.length; i++) { 385 var key = trekkie.methods[i]; 386 trekkie[key] = trekkie.factory(key); 387 } 388 trekkie.load = function(config) { 389 trekkie.config = config || {}; 390 trekkie.config.initialDocumentCookie = document.cookie; 391 var first = document.getElementsByTagName('script')[0]; 392var script = document.createElement('script'); 393script.type = 'text/javascript'; 394script.onerror = function(e) { 395 var scriptFallback = document.createElement('script'); 396 scriptFallback.type = 'text/javascript'; 397 scriptFallback.onerror = function(error) { 398 var Monorail = { 399 produce: function produce(monorailDomain, schemaId, payload) { 400 var currentMs = new Date().getTime(); 401 var event = { 402 schema_id: schemaId, 403 payload: payload, 404 metadata: { 405 event_created_at_ms: currentMs, 406 event_sent_at_ms: currentMs 407 } 408 }; 409 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 410 }, 411 sendRequest: function sendRequest(endpointUrl, payload) { 412 // Try the sendBeacon API 413 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 414 var blobData = new window.Blob([payload], { 415 type: 'text/plain' 416 }); 417 418 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 419 return true; 420 } // sendBeacon was not successful 421 422 } // XHR beacon 423 424 var xhr = new XMLHttpRequest(); 425 426 try { 427 xhr.open('POST', endpointUrl); 428 xhr.setRequestHeader('Content-Type', 'text/plain'); 429 xhr.send(payload); 430 } catch (e) { 431 console.log(e); 432 } 433 434 return false; 435 }, 436 isIos12: function isIos12() { 437 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 438 } 439 }; 440 Monorail.produce('monorail-edge.shopifysvc.com', 441 'trekkie_storefront_load_errors/1.1', 442 {shop_id: 16765131, 443 theme_id: 120412536909, 444 app_name: "storefront", 445 context_url: window.location.href, 446 source_url: "//venturi-belt-co.myshopify.com/cdn/s/trekkie.storefront.51e69540e15035ae012ec8cc42e8f9cd792233a0.min.js"}); 447 448 }; 449 scriptFallback.async = true; 450 scriptFallback.src = '//venturi-belt-co.myshopify.com/cdn/s/trekkie.storefront.51e69540e15035ae012ec8cc42e8f9cd792233a0.min.js'; 451 first.parentNode.insertBefore(scriptFallback, first); 452}; 453script.async = true; 454script.src = '//venturi-belt-co.myshopify.com/cdn/s/trekkie.storefront.51e69540e15035ae012ec8cc42e8f9cd792233a0.min.js'; 455first.parentNode.insertBefore(script, first); 456 457 }; 458 trekkie.load( 459 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":16765131,"isMerchantRequest":null,"themeId":120412536909,"themeCityHash":"385626638857856155","contentLanguage":"en","currency":"USD","eventMetadataId":"5f200ab0-e869-4e77-bd22-745c9e54081d"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","4c64608a"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}} 460 ); 461 462 var loaded = false;
463 trekkie.ready(function() { 464 if (loaded) return; 465 loaded = true; 466 467 window.ShopifyAnalytics.lib = window.trekkie; 468 469 var originalDocumentWrite = document.write; 470 document.write = customDocumentWrite; 471 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 472 document.write = originalDocumentWrite; 473 474 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 475 var token = match? match[1]: undefined; 476 if (!hasLoggedConversion(token)) { 477 setCookieIfConversion(token); 478 479 } 480 }); 481 482 window.ShopifyAnalytics.lib.page(null,{"pageType":"cart","requestId":"75161882-5ad5-47db-a7b8-ff1828fecb05-1791580777","shopifyEmitted":true}); 483 484 var eventsListenerScript = document.createElement('script'); 485 eventsListenerScript.async = true; 486 eventsListenerScript.src = "//venturi-belt-co.myshopify.com/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js"; 487 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 488})();</script>
488 489
489<script> 490 if (!window.ga || (window.ga && typeof window.ga !== 'function')) { 491 window.ga = function ga() { 492 (window.ga.q = window.ga.q || []).push(arguments); 493 if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') { 494 window.Shopify.analytics.publish("ga_stub_called", {}, {sendTo: "google_osp_migration"}); 495 } 496 console.error("Shopify's Google Analytics stub called with:", Array.from(arguments), "\nSee https://help.shopify.com/manual/promoting-marketing/pixels/pixel-migration#google for more information."); 497 }; 498 if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') { 499 window.Shopify.analytics.publish("ga_stub_initialized", {}, {sendTo: "google_osp_migration"}); 500 } 501 } 502</script>
vendor: 1 bytes, line 502
502
503<script 504 defer 505 src="https://venturi-belt-co.myshopify.com/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.10.1.min.js" 506 data-application="storefront-renderer" 507 data-shop-id="16765131" 508 data-render-region="gcp-us-central1" 509 data-page-type="cart" 510 data-theme-instance-id="120412536909" 511 data-theme-name="Retina" 512 data-theme-version="4.0.1" 513 data-monorail-region="shop_domain" 514 data-resource-timing-sampling-rate="10" 515 data-shs="true" 516 data-shs-beacon="true" 517 data-shs-export-with-fetch="true" 518 data-shs-logs-sample-rate="1" 519 data-shs-beacon-endpoint="https://venturi-belt-co.myshopify.com/api/collect" 520></script>
520 521<meta name="shopify-y" content="2b25d32d-869f-456f-a21b-0bbc9bd498f6" data-expiration="1823138377000"><meta name="shopify-s" content="f475ecc8-197e-42f1-a7ac-14ea56192e19" data-expiration="1791582577000"> 522</head> 523 524 <body class="cart "> 525 <div id="content_wrapper"> 526<!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 526-527
526 527<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
527GTM-MN57ZSX
vendor: 83 bytes, lines 527-528
527" 528height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
529<!-- End Google Tag Manager (noscript) --> 530 <div id="shopify-section-header" class="shopify-section header-section"><div id="header" class="mm-fixed-top Fixed mobile-header" data-search-enabled="true"> 531 <a href="#nav" class="icon-menu"> <span>Menu</span></a> 532 <a href="#cart" class="icon-cart right"> <span>Cart</span></a> 533 534 <div class="formobileonly"> 535 536 <div class="promo_banner"> 537 538 <a href="https://www.venturibelt.com/collections/4-combo-collection?ose=false"> 539 <p>FREE SHIPPING ON ALL USA ORDERS OVER $50!</p> 540 </a> 541 542 </div> 543 544 </div> 545</div> 546 547<div class="hidden"> 548 <div id="nav"> 549 <ul> 550 551 552 <li ><a href="/">Home</a></li> 553 554 555 556 <li ><span>NEW ReLeases</span> 557 <ul> 558 559 560 <li ><a href="/collections/black-belt-collection">Black Belt Collection</a></li> 561 562 563 564 <li ><a href="/collections/blue-belt-collection">Blue Belt Collection</a></li> 565 566 567 568 <li ><a href="/collections/brown-belt-collection">Brown Belt Collection</a></li> 569 570 571 572 <li ><a href="/collections/gray-belt-collection">Gray Belt Collection</a></li> 573 574 575 576 <li ><a href="/collections/webbing-belt-collection">Webbing Belt Collection</a></li> 577 578 579 </ul> 580 </li> 581 582 583 584 <li ><span>Shop</span> 585 <ul> 586 587 588 <li ><a href="/pages/new-style-venturi">1 VENTURi Belt </a></li> 589 590 591 592 <li ><a href="/collections/4-combo-collection">2 Belt Combo</a></li> 593 594 595 596 <li ><a href="/collections/webbing-belt-collection">Webbing Belt (NEW)</a></li> 597 598 599 600 <li ><a href="/collections/venturi-buckles">Buckles</a></li> 601 602 603 604 <li ><a href="/collections/classic-venturi-belt">Classic VENTURi Belt </a></li> 605 606 607 608 <li ><a href="/collections/kids-belt">Kids Belts</a></li> 609 610 611 612 <li ><a href="/collections/all">Shop All Products</a></li> 613 614 615 616 <li ><a href="/products/venturi-belt-gift-cards">Gift Cards</a></li> 617 618 619 </ul> 620 </li> 621 622 623 624 <li ><a href="/pages/gallery">Gallery</a></li> 625 626 627 628 <li ><a href="/pages/how-to">- How To VENTURi -</a></li> 629 630 631 632 <li ><a href="http://www.venturibelt.com/apps/help-center">FAQs -</a></li> 633 634 635 636 637 <li> 638 <a href="https://venturi-belt-co.myshopify.com/customer_authentication/redirect?locale=en&region_country=US" id="customer_login_link">My Account</a> 639 </li> 640 641 642 643 <li class="currencies"> 644 <select id="currencies" class="currencies" name="currencies"> 645 646 647 <option value="USD" selected="selected">USD</option> 648 649 650 651 652 <option value="CAD">CAD</option> 653 654 655 656 <option value="INR">INR</option> 657 658 659 660 <option value="GBP">GBP</option> 661 662 663 664 <option value="AUD">AUD</option> 665 666 667 668 <option value="EUR">EUR</option> 669 670 671 672 <option value="JPY">JPY</option> 673 674 675</select> 676 </li> 677 678 </ul> 679 </div> 680 681 <form action="/checkout" method="post" id="cart"> 682 <ul data-money-format="${{amount}}" data-shop-currency="USD" data-shop-name="VENTURi Belt Co."> 683 <li class="mm-subtitle"><a class="mm-subclose continue" href="#cart">Continue Shopping</a></li> 684 685 686 <li class="mm-label empty_cart"><a href="/cart">Your Cart is Empty</a></li> 687 688 </ul> 689 </form> 690</div> 691 692 693<div class="header default-header mm-fixed-top Fixed behind-menu--false header_bar js-no-change"> 694 695 <div class="promo_banner"> 696 697 <a href="https://www.venturibelt.com/collections/4-combo-collection?ose=false"> 698 <p>FREE SHIPPING ON ALL USA ORDERS OVER $50!</p> 699 </a> 700 701 </div> 702 703 704 <div class="container"> 705 <div class="four columns logo "> 706 <a href="https://venturi-belt-co.myshopify.com" title="VENTURi Belt Co."> 707 708 <img src="//venturi-belt-co.myshopify.com/cdn/shop/files/[email protected]?v=1614968102" alt="VENTURi Belt Co." class="primary_logo" /> 709 710 711 712 </a> 713 </div> 714 715 <div class="twelve columns nav mobile_hidden"> 716 <ul class="menu"> 717 718 719 <li><a href="/" class="top-link ">Home</a></li> 720 721 722 723 724 725 726 727 728 729 <li><a href="/pages/new-style-venturi" class="sub-menu ">NEW ReLeases
730 <span class="arrow">â¾</span></a> 731 <div class="dropdown "> 732 <ul> 733 734 735 736 737 <li><a href="/collections/black-belt-collection">Black Belt Collection</a></li> 738 739 740 741 742 743 <li><a href="/collections/blue-belt-collection">Blue Belt Collection</a></li> 744 745 746 747 748 749 <li><a href="/collections/brown-belt-collection">Brown Belt Collection</a></li> 750 751 752 753 754 755 <li><a href="/collections/gray-belt-collection">Gray Belt Collection</a></li> 756 757 758 759 760 761 <li><a href="/collections/webbing-belt-collection">Webbing Belt Collection</a></li> 762 763 764 765 766 </ul> 767 </div> 768 </li> 769 770 771 772 773 774 775 776 777 778 <li><a href="/" class="sub-menu ">Shop 779 <span class="arrow">â¾</span></a> 780 <div class="dropdown "> 781 <ul> 782 783 784 785 786 <li><a href="/pages/new-style-venturi">1 VENTURi Belt </a></li> 787 788 789 790 791 792 <li><a href="/collections/4-combo-collection">2 Belt Combo</a></li> 793 794 795 796 797 798 <li><a href="/collections/webbing-belt-collection">Webbing Belt (NEW)</a></li> 799 800 801 802 803 804 <li><a href="/collections/venturi-buckles">Buckles</a></li> 805 806 807 808 809 810 <li><a href="/collections/classic-venturi-belt">Classic VENTURi Belt </a></li> 811 812 813 814 815 816 <li><a href="/collections/kids-belt">Kids Belts</a></li> 817 818 819 820 821 822 <li><a href="/collections/all">Shop All Products</a></li> 823 824 825 826 827 828 <li><a href="/products/venturi-belt-gift-cards">Gift Cards</a></li> 829 830 831 832 833 </ul> 834 </div> 835 </li> 836 837 838 839 <li><a href="/pages/gallery" class="top-link ">Gallery</a></li> 840 841 842 843 <li><a href="/pages/how-to" class="top-link ">- How To VENTURi -</a></li> 844 845 846 847 <li><a href="http://www.venturibelt.com/apps/help-center" class="top-link ">FAQs -</a></li> 848 849 850 851 852 <span class="js-social-icons"> 853 854 <li class="twitter"><a href="https://twitter.com/VenturiBeltCo" title="VENTURi Belt Co. on Twitter" rel="me" target="_blank"><span class="icon-twitter"></span></a></li> 855 856 857 858 <li class="facebook"><a href="https://www.facebook.com/Venturibeltco" title="VENTURi Belt Co. on Facebook" rel="me" target="_blank"><span class="icon-facebook"></span></a></li> 859 860 861 862 863 864 <li class="youtube"><a href="https://www.youtube.com/watch?v=w-s0R2dkYbQ" title="VENTURi Belt Co. on YouTube" rel="me" target="_blank"><span class="icon-youtube"></span></a></li> 865 866 867 868 869 870 871 872 873 874 875 876 <li class="instagram"><a href="https://www.instagram.com/venturibeltco/?hl=en" title="VENTURi Belt Co. on Instagram" rel="me" target="_blank"><span class="icon-instagram"></span></a></li> 877 878 879 880 881 882 883 884 <li class="email"><a href="mailto:[email protected]" title="Email VENTURi Belt Co." rel="me" target="_blank"><span class="icon-email"></span></a></li> 885 886 887 </span> 888 889 890 891 <li> 892 <a href="/account" title="My Account " class="icon-account"></a> 893 </li> 894 895 896 <li> 897 <a href="/search" title="Search" class="icon-search" id="search-toggle"></a> 898 </li> 899 900 901 <li> 902 <select id="currencies" class="currencies" name="currencies"> 903 904
905 <option value="USD" selected="selected">USD</option> 906 907 908 909 910 <option value="CAD">CAD</option> 911 912 913 914 <option value="INR">INR</option> 915 916 917 918 <option value="GBP">GBP</option> 919 920 921 922 <option value="AUD">AUD</option> 923 924 925 926 <option value="EUR">EUR</option> 927 928 929 930 <option value="JPY">JPY</option> 931 932 933</select> 934 </li> 935 936 <li> 937 <a href="#cart" class="icon-cart cart-button"> <span>Cart</span></a> 938 </li> 939 </ul> 940 </div> 941 </div> 942</div> 943 944 945 946<div class="container mobile_logo"> 947 <div class="logo"> 948 <a href="https://venturi-belt-co.myshopify.com" title="VENTURi Belt Co."> 949 950 <img src="//venturi-belt-co.myshopify.com/cdn/shop/files/[email protected]?v=1614968102" alt="VENTURi Belt Co." /> 951 952 </a> 953 </div> 954</div> 955 956<style> 957 div.formobileonly 958 { 959 position:relative; 960 top:40px; 961 display:none; 962 margin:0 -50px; 963 } 964 965 div.content.container { 966 padding: 120px 0px 0px 0px; 967 } 968 969 970 div.content { 971 padding: 120px 0px 0px 0px; 972 } 973 974 975 @media only screen and (max-width: 767px) { 976 div.content.container, div.content { 977 padding-top: 5px; 978 } 979 div.formobileonly 980 { 981 display:block; 982 } 983 } 984 985 .logo a { 986 display: block; 987 padding-top: 0px; 988 max-width: 250px; 989 } 990 991 992 .nav ul.menu { padding-top: 0px; } 993 994 995 996 997</style> 998 999 1000</div> 1001 1002 <div class="content container"> 1003 1004 1005<div id="shopify-section-cart-template" class="shopify-section cart
1005-section"><div class="sixteen columns clearfix collection_nav"> 1006 <h1 class="collection_title">Shopping Cart</h1> 1007 1008 1009</div> 1010 1011 1012 <div class="sixteen columns"> 1013 <div class="section clearfix"> 1014 <p class="quote">There are no items in your cart. <a href="/collections/all">Continue Shopping →</a></p> 1015 <br class="clear" /> 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028<div itemtype="http://schema.org/ItemList" class="products"> 1029 1030</div> 1031 </div> 1032 </div> 1033 1034 1035 1036</div> 1037 1038 </div> 1039 1040 1041 <div id="shopify-section-footer" class="shopify-section footer-section"><div class="sub-footer"> 1042 <div class="container"> 1043 1044 1045 <div class="four columns"> 1046 <h6 class="title">News & Updates</h6> 1047 <p>Sign up to get the latest on sales, new releases and more â¦</p> 1048 <div class="newsletter "> 1049 <p class="message"></p> 1050 1051 <form method="post" action="/contact#contact_form" id="contact_form" accept-charset="UTF-8" class="contact-form"><input type="hidden" name="form_type" value="customer" /><input type="hidden" name="utf8" value="â" /> 1052 1053 1054 1055 <input type="hidden" name="contact[tags]" value="prospect,newsletter"/> 1056 1057 1058 1059 <input type="email" class="contact_email" name="contact[email]" required placeholder="Enter your email address..." /> 1060 <input type='submit' class="action_button sign_up" value="Sign Up" /> 1061 </form> 1062</div> 1063 1064 1065 1066 </div> 1067 1068 1069 1070 <div class="four columns"> 1071 1072 1073 1074 <p>YOUR NEW FAVORITE BELT</p> 1075 1076 1077 1078 <ul class="social_icons"> 1079 1080 <li class="twitter"><a href="https://twitter.com/VenturiBeltCo" title="VENTURi Belt Co. on Twitter" rel="me" target="_blank"><span class="icon-twitter"></span></a></li> 1081 1082 1083 1084 <li class="facebook"><a href="https://www.facebook.com/Venturibeltco" title="VENTURi Belt Co. on Facebook" rel="me" target="_blank"><span class="icon-facebook"></span></a></li> 1085 1086 1087 1088 1089 1090 <li class="youtube"><a href="https://www.youtube.com/watch?v=w-s0R2dkYbQ" title="VENTURi Belt Co. on YouTube" rel="me" target="_blank"><span class="icon-youtube"></span></a></li> 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 <li class="instagram"><a href="https://www.instagram.com/venturibeltco/?hl=en" title="VENTURi Belt Co. on Instagram" rel="me" target="_blank"><span class="icon-instagram"></span></a></li> 1103 1104 1105 1106 1107 1108 1109 1110 <li class="email"><a href="mailto:[email protected]" title="Email VENTURi Belt Co." rel="me" target="_blank"><span class="icon-email"></span></a></li> 1111 1112 1113 </ul> 1114 1115 </div> 1116 1117 1118 1119 <div class="four columns"> 1120 <h6 class="title">Venturi Belt Co.</h6> 1121 <ul class="footer_menu"> 1122 1123 <li><a href="/pages/gallery" title="Gallery">Gallery</a></li> 1124 1125 </ul> 1126 1127 1128 </div> 1129 1130 1131 1132 <div class="four columns"> 1133 <h6 class="title">Customer Service</h6> 1134 <ul class="footer_menu"> 1135 1136 <li><a href="/search" title="Search">Search</a></li> 1137 1138 <li><a href="/pages/about-us" title="About Us">About Us</a></li> 1139 1140 <li><a href="/pages/privacy-policy" title="Privacy Policy">Privacy Policy</a></li> 1141 1142 <li><a href="/pages/refund-policy" title="Refund Policy">Refund Policy</a></li> 1143 1144 <li><a href="/pages/terms-of-service" title="Terms of Service">Terms of Service</a></li> 1145 1146 </ul> 1147 1148 1149 </div> 1150 1151 1152 </div> 1153</div> 1154 1155<div class="footer"> 1156 <div class="container"> 1157 <div class="sixteen columns"> 1158 <p class="credits"> 1159 © 2026 <a href="/" title="">VENTURi Belt Co.</a>. 1160 1161 1162 <a target="_blank" rel="nofollow" href="https://www.shopify.com?utm_campaign=poweredby&utm_medium=shopify&utm_source=onlinestore">Powered by Shopify</a> 1163 </p> 1164 1165 <div class="payment_methods"> 1166 1167 <img src="//venturi-belt-co.myshopify.com/cdn/shopifycloud/storefront/assets/payment_icons/american_express-2bdbf0e2.svg" alt="American express" /> 1168 1169 <img src="//venturi-belt-co.myshopify.com/cdn/shopifycloud/storefront/assets/payment_icons/apple_pay-1721ebad.svg" alt="Apple pay" /> 1170 1171 <img src="//venturi-belt-co.myshopify.com/cdn/shopifycloud/storefront/assets/payment_icons/diners_club-678e3046.svg" alt="Diners club" /> 1172 1173 <img src="//venturi-belt-co.myshopify.com/cdn/shopifycloud/storefront/assets/payment_icons/discover-59880595.svg" alt="Discover" /> 1174 1175 <img src="//venturi-belt-co.myshopify.com/cdn/shopifycloud/storefront/assets/payment_icons/google_pay-34c30515.svg" alt="Google pay" /> 1176 1177 <img src="//venturi-belt-co.myshopify.com/cdn/shopifycloud/storefront/assets/payment_icons/master-f5a74105.svg" alt="Master" /> 1178 1179 <img src="//venturi-belt-co.myshopify.com/cdn/shopifycloud/storefront/assets/payment_icons/paypal-a7c68b85.svg" alt="Paypal" /> 1180 1181 <img src="//venturi-belt-co.myshopify.com/cdn/shopifycloud/storefront/assets/payment_icons/shopify_pay-925ab76d.svg" alt="Shopify pay" /> 1182 1183 <img src="//venturi-belt-co.myshopify.com/cdn/shopifycloud/storefront/assets/payment_icons/visa-b614b878.svg" alt="Visa" /> 1184 1185 </div> 1186 1187 </div> 1188 </div> 1189</div> 1190 1191 1192 1193 1194</div> 1195 1196 <div id="search"> 1197 <div class="container"> 1198 <div class="ten columns offset-by-three center"> 1199 <div class="right search-close">
1200 <span class="icon-close"></span> 1201 </div> 1202 <form action="/search"> 1203 1204 <input type="hidden" name="type" value="product" /> 1205 1206 <span class="icon-search search-submit"></span> 1207 <input type="text" name="q" placeholder="Search VENTURi Belt Co...." value="" autocapitalize="off" autocomplete="off" autocorrect="off" /> 1208 </form> 1209 </div> 1210 </div> 1211 </div> 1212 </div> 1213 1214 1215 1216 1217 1218
1219<script src="/services/javascripts/currencies.js" type="text/javascript"></script>
vendor: 1 bytes, line 1219
1219
1220<script src="//venturi-belt-co.myshopify.com/cdn/shop/t/20/assets/jquery.currencies.min.js?v=165048700939037185011626271788" type="text/javascript"></script>
1220 1221
1222<script> 1223 1224 1225 Currency.format = 'money_with_currency_format'; 1226 1227 1228var shopCurrency = 'USD'; 1229 1230/* Sometimes merchants change their shop currency, let's tell our JavaScript file */ 1231Currency.money_with_currency_format[shopCurrency] = "${{amount}} USD"; 1232Currency.money_format[shopCurrency] = "${{amount}}"; 1233 1234/* Default currency */ 1235var defaultCurrency = 'USD' || shopCurrency; 1236 1237/* Cookie currency */ 1238var cookieCurrency = Currency.cookie.read(); 1239 1240/* Fix for customer account pages */ 1241jQuery('span.money span.money').each(function() { 1242 jQuery(this).parents('span.money').removeClass('money'); 1243}); 1244 1245/* Saving the current price */ 1246jQuery('span.money').each(function() { 1247 jQuery(this).attr('data-currency-USD', jQuery(this).html()); 1248}); 1249 1250// If there's no cookie. 1251if (cookieCurrency == null) { 1252 if (shopCurrency !== defaultCurrency) { 1253 Currency.convertAll(shopCurrency, defaultCurrency); 1254 } 1255 else { 1256 Currency.currentCurrency = defaultCurrency; 1257 } 1258} 1259// If the cookie value does not correspond to any value in the currency dropdown. 1260else if (jQuery('[name=currencies]').size() && jQuery('[name=currencies] option[value=' + cookieCurrency + ']').size() === 0) { 1261 Currency.currentCurrency = shopCurrency; 1262 Currency.cookie.write(shopCurrency); 1263} 1264else if (cookieCurrency === shopCurrency) { 1265 Currency.currentCurrency = shopCurrency; 1266} 1267else { 1268 Currency.convertAll(shopCurrency, cookieCurrency); 1269} 1270 1271jQuery('[name=currencies]').val(Currency.currentCurrency).change(function() { 1272 var newCurrency = jQuery(this).val(); 1273 Currency.convertAll(Currency.currentCurrency, newCurrency); 1274 jQuery('[name=currencies]').val(newCurrency); 1275 jQuery('.selected-currency').text(Currency.currentCurrency); 1276}); 1277 1278var original_selectCallback = window.selectCallback; 1279var selectCallback = function(variant, selector) { 1280 original_selectCallback(variant, selector); 1281 Currency.convertAll(shopCurrency, jQuery('[name=currencies]').val()); 1282 jQuery('.selected-currency').text(Currency.currentCurrency); 1283}; 1284 1285jQuery('.selected-currency').text(Currency.currentCurrency); 1286 1287</script>
1287 1288 1289 1290 1291 </div> 1292 1293<!-- spurit_uev-added --> 1294<!-- "snippets/spurit_uev-theme-snippet.liquid" was not rendered, the associated app was uninstalled --> 1295<!-- /spurit_uev-added --> 1296 1297<!-- BEEKETINGSCRIPT CODE START --><!-- BEEKETINGSCRIPT CODE END --> 1298<!-- spurit_sct-added -->
1299<script> 1300 var SCTParams = { 1301 "id" : "1cf40a3d66f4f82d8a42ba891d500cb5", 1302 "apiScript" : "//venturi-belt-co.myshopify.com/cdn/shopifycloud/storefront/assets/themes_support/api.jquery-7ab1a3a4.js", 1303 "product" : null, 1304 "collection": null, 1305 "template": "cart", 1306 "page": null 1307 } 1308</script>
1308 1309<!-- /spurit_sct-added --> 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348<style>.ocu-hidden.ocu-hidden.ocu-hidden,.bold_hidden.bold_hidden.bold_hidden{display:none !important}</style>
1349<script> 1350!function(){ 1351if (window.performance) { 1352 const navEntries = window.performance.getEntriesByType && window.performance.getEntriesByType('navigation'); 1353 if (navEntries && navEntries.length > 0 && navEntries[0].type === 'back_forward') { 1354 location.reload(); 1355 } else if (window.performance.navigation && window.performance.navigation.type === window.performance.navigation.TYPE_BACK_FORWARD) { 1356 location.reload(); 1357 } 1358} 1359 1360!function(){var e=[];window.Promise||e.push("Promise"),window.URLSearchParams||e.push("URL"),Element.prototype.closest||e.push("Element.prototype.closest"),Array.from||e.push("Array.from"),Object.assign||e.push("Object.assign");try{new Event("event")}catch(t){e.push("Event")}try{Symbol}catch(t){e.push("Symbol")}if(e.length){var t=document.createElement("script");t.src="https://polyfill-fastly.net/v3/polyfill.min.js?features="+e.join(",")+"&flags=gated",t.async=!0,document.head.appendChild(t)}Object.setPrototypeOf=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e}}(); 1361 1362var ajax,utils={store:Object.freeze(new Store),cookie:{options:{expires:86400,path:"/",encodeValue:!1},get:function(e){var t=document.cookie.match(new RegExp("(?:^|; )"+e.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,"\\$1")+"=([^;]*)"));return t?decodeURIComponent(t[1]):void 0},set:function(e,t,n){var i=(n=n||this.options).expires;if("number"==typeof i&&i){var r=new Date;r.setTime(r.getTime()+1e3*i),i=n.expires=r}i&&i.toUTCString&&(n.expires=i.toUTCString());var o=e+"="+(t=encodeURIComponent(t));for(var s in n){o+="; "+s;var a=n[s];!0!==a&&(o+="="+a)}document.cookie=o},remove:function(e){this.set(e,null,{expires:-1})}},queryParams:function(e){var t={};return e.replace("?","").split("&").forEach(function(e){var n=e.split("=")[0],i=e.split("=")[1];t[n]=decodeURIComponent(i)}),t},shareableDiscount:function(e){e=e||{};var t=utils.queryParams(location.search)[e.key||"discount"];t&&(utils.cookie.set(e.name||"ocu-share-discount",t,utils.cookie.options),!e.clear||history.pushState(null,null,location.href.replace(/\?.+/,"")))},serializeForm:function(e){return new URLSearchParams(new FormData(e).fd || new FormData(e)).toString()},serializeFormEdge:function(e){var t,n=[];if("object"==typeof e&&"FORM"==e.nodeName){var r=e.elements.length;for(i=0;i<r;i++)if((t=e.elements[i]).name&&!t.disabled&&"file"!=t.type&&"reset"!=t.type&&"submit"!=t.type&&"button"!=t.type)if("select-multiple"==t.type)for(j=e.elements[i].options.length-1;j>=0;j--)t.options[j].selected&&(n[n.length]=encodeURIComponent(t.name)+"="+encodeURIComponent(t.options[j].value));else("checkbox"!=t.type&&"radio"!=t.type||t.checked)&&(n[n.length]=encodeURIComponent(t.name)+"="+encodeURIComponent(t.value))}return n.join("&").replace(/%20/g,"+")},serialize:function(e,t,n,i){if(this.helpers.isFormData(t)&&(i=n,n=t,t=null),(t=t||{}).indices=t.indices||!1,n=n||new URLSearchParams,this.helpers.isUndefined(e))return n;if(this.helpers.isNull(e))n.append(i,"");else if(this.helpers.isArray(e))if(e.length)e.forEach(function(e,r){var o="object"==typeof e,s=i+"["+(t.indices&&o?r:"")+"]";this.serialize(e,t,n,s)}.bind(this));else{var r=i+"[]";n.append(r,"")}else this.helpers.isDate(e)?n.append(i,e.toISOString()):!this.helpers.isObject(e)||this.helpers.isFile(e)||this.helpers.isBlob(e)?n.append(i,e):Object.keys(e).forEach(function(r){var o=e[r];if(this.helpers.isArray(o))for(;2<r.length&&r.lastIndexOf("[]")===r.length-2;)r=r.substring(0,r.length-2);var s=i?i+"["+r+"]":r;this.serialize(o,t,n,s)}.bind(this));return n},inArray:function(e,t,n){return e.some(function(e){return e[t]===n})},filterObject:function(e,t){return t.reduce(function(t,n){return t[n]=e[n],t},{})},helpers:{isUndefined:function(e){return void 0===e},isNull:function(e){return null===e},isObject:function(e){return e===Object(e)},isArray:function(e){return Array.isArray(e)},isDate:function(e){return e instanceof Date},isBlob:function(e){return e&&"number"==typeof e.size&&"string"==typeof e.type&&"function"==typeof e.slice},isFile:function(e){return this.isBlob(e)&&("object"==typeof e.lastModifiedDate||"number"==typeof e.lastModified)&&"string"==typeof e.name},isFormData:function(e){return e instanceof FormData}}}; 1363 1364window.OCUIncart = { 1365 cart_items: [], 1366 cart_products_json: JSON.parse("[]"),
1367 cart_variants_json: [], 1368 incarts: null, 1369 subscription_tags: '', 1370 proxy_url: '', 1371 money_format: '${{amount}}', 1372 settings: null, 1373 option_selection: '//venturi-belt-co.myshopify.com/cdn/shopifycloud/storefront/assets/themes_support/option_selection-b017cd28.js', 1374 is_precheckout: false, 1375 1376 get tags() { 1377 const tags = ; 1378 return tags && tags.pre_checkout.map(function(tag) { return tag.toLowerCase(); }); 1379 }, 1380 1381 get variants() { 1382 const variants = ; 1383 return variants && variants.pre_checkout; 1384 }, 1385 1386 cartContainsPrecheckoutTriggers: function(collection, productTriggers, product) { 1387 var self = this; 1388 let triggers = ''; 1389 1390 collection.forEach(function(trigger) { 1391 if (!~productTriggers.indexOf(trigger)) return; 1392 1393 var items = self.cart_items.filter(function(item) { 1394 return item.product_id === product.id; 1395 }); 1396 1397 if (items[0]) { 1398 triggers += items[0].variant_id + ':' + trigger + ','; 1399 } 1400 1401 self.is_precheckout = true; 1402 return triggers 1403 1404 }); 1405 1406 return triggers 1407 }, 1408 1409 get triggers() { 1410 var self = this; 1411 var triggers = ''; 1412 1413 self.cart_items.forEach(function(item) { 1414 var product_id = item.product_id; 1415 1416 self.cart_products_json.forEach(function(product) { 1417 const productVariants = product.variants && product.variants.map(function(variant) { return variant.id }); 1418 const productTags = product.tags && product.tags.map(function(tag) { return tag.toLowerCase(); }); 1419 1420 if (!productTags) return; 1421 if (!Array.isArray(self.tags) && !Array.isArray(self.variants)) return; 1422 1423 triggers += self.cartContainsPrecheckoutTriggers(self.variants, productVariants, product); 1424 triggers += self.cartContainsPrecheckoutTriggers(self.tags, productTags, product); 1425 }) 1426 }); 1427 1428 return triggers; 1429 } 1430}; 1431 1432var lqd = { 1433 cart: {"note":null,"attributes":{},"original_total_price":0,"total_price":0,"total_discount":0,"total_weight":0.0,"item_count":0,"items":[],"requires_shipping":false,"currency":"USD","items_subtotal_price":0,"cart_level_discount_applications":[],"checkout_charge_amount":0}, 1434 path: '' === 'true' ? 'd56719fefdd75e95ba06caea3d9a3732' : '5965fedc7708e03e1024db4bf2ed5fe6', 1435 template_name: 'cart', 1436 shop_currency: 'USD', 1437 upsellapp_tags: , 1438 upsellapp_variants: , 1439 skip_cart: false, 1440 cart_products_json: JSON.parse("[]"), 1441 cart_collections_json: [], 1442 cart_variants_json: [], 1443 customer_id: "", 1444 customer: { id: "", email: '' }, 1445 proxy_url: '', 1446 permanent_domain: 'venturi-belt-co.myshopify.com', 1447 current_domain: 'venturi-belt-co.myshopify.com', 1448 disabled_by_subscription_app: false, 1449 subscription_app_enabled: false, 1450 subscription_products_json: '', 1451 subscription_variants_json: '', 1452 subscription_products_size: 0, 1453 integrate_with_recharge: '' === 'true', 1454 product: null, 1455 product_tags: [], 1456 amazon_pay: '' === 'true', 1457 themePopup: '' === 'true' || '' === 'true', 1458 themeSkipCart: 'ajax' === 'redirect_checkout' 1459 || '' === 'true' 1460 || '' === 'skip_cart', 1461 1462 get is_precheckout() { 1463 OCUIncart.triggers; 1464 return OCUIncart.is_precheckout || OCUIncart.subscription_tags; 1465 }, 1466 1467 get precheckout_tags() { 1468 return this.upsellapp_tags.pre_checkout; 1469 }, 1470 1471 get precheckout_variants() { 1472 return this.upsellapp_variants.pre_checkout; 1473 }, 1474 1475 get postcheckout_tags() { 1476 return this.upsellapp_tags.post_checkout.map(function(tag) { return tag.toLowerCase(); }); 1477 }, 1478 1479 get postcheckout_variants() { 1480 return this.upsellapp_variants.post_checkout; 1481 }, 1482 1483 get upsell_cart_include_subscription_upsells() { 1484 var self = this; 1485 1486 var hasSubscription = this.product_tags.reduce(function(acc, tag) { 1487 return acc || ~self.postcheckout_tags.indexOf(tag.toLowerCase()); 1488 }, false); 1489 1490 return hasSubscription; 1491 }, 1492 1493 get upsell_cart_include_upsells() { 1494 var self = this; 1495 var upsellapp_triggers = { 1496 pre_checkout: self.precheckout_tags.concat(self.precheckout_variants), 1497 post_checkout: self.postcheckout_tags.concat(self.postcheckout_variants) 1498 }; 1499 1500 return self.upsell_cart_include_subscription_upsells || Object.keys(self.upsellapp_tags).reduce(function(acc, key) { 1501 if (acc) return acc; 1502 1503 if (!self.cart_products_json.length && self.template_name === 'product') { 1504 const productVariants = self.product.variants.map(function(variant) { return variant.id }); 1505 const productTags = self.product.tags.map(function(tag) { return tag.toLowerCase(); }); 1506 1507 if (!Array.isArray(self.upsellapp_tags[key])) return false;
1508 1509 return upsellapp_triggers[key].reduce(function(acc, trigger) { 1510 if (acc) return acc; 1511 1512 if (typeof trigger === 'number') return !!~productVariants.indexOf(trigger); 1513 1514 return !!~productTags.indexOf(trigger.toLowerCase()); 1515 }, false); 1516 } 1517 1518 return self.cart_products_json.reduce(function(acc, product) { 1519 if (acc || !Array.isArray(self.upsellapp_tags[key])) return acc; 1520 1521 const productVariants = product.variants.map(function(variant) { return variant.id }); 1522 const productTags = product.tags.map(function(tag) { return tag.toLowerCase(); }); 1523 1524 return upsellapp_triggers[key].reduce(function(acc, trigger) { 1525 if (acc) return acc; 1526 1527 if (typeof trigger === 'number') return !!~productVariants.indexOf(trigger); 1528 1529 return !!~productTags.indexOf(trigger.toLowerCase()); 1530 }, false) 1531 }, false); 1532 }, false); 1533 }, 1534 1535 get incarts() { 1536 return null; 1537 }, 1538 get is_ajax_precheckout() { 1539 var isIncarts = Object.keys(this.incarts).some(function(key) { 1540 return Object.keys(this.incarts[key]).length; 1541 }.bind(this)); 1542 1543 if (!isIncarts) return; 1544 1545 var tags = utils.store.get('tags') || []; 1546 var isIncludes = Array.isArray(lqd.precheckout_tags) && lqd.precheckout_tags.some(function(tag) { 1547 return ~tags.indexOf(tag); 1548 }); 1549 1550 return isIncludes; 1551 }, 1552 get isThemePopupTag() { 1553 return this.product && this.product.tags.some(function(tag) { 1554 return /cross-sell-\d/.test(tag); 1555 }); 1556 }, 1557 get isSkipCartPage() { 1558 return /index|collection|product/.test(this.template_name); 1559 }, 1560 get isSkipCartCondition() { 1561 return (this.skip_cart || this.themeSkipCart) && this.isSkipCartPage && !this.isThemePopupTag; 1562 } 1563}; 1564 1565lqd.cart_products_json = lqd.cart_products_json.filter(function(item) { 1566 return item.handle && !item.error; 1567}); 1568 1569utils.shareableDiscount({ clear:false }); 1570 1571if (lqd.is_precheckout) requireOptionSelectors(); 1572 1573var ocuCdn="https://cdn07.zipify.com";!function(){if("cart"===lqd.template_name&&lqd.upsell_cart_include_upsells){var e;e=utils.store.get("fallback").timeout,c=setTimeout(s.bind(null,!0),e),s(!1);var n="https://cdn09.zipify.com",o=document.createElement("script"),a=document.createElement("link"),c=null;0;var t=document.createElement("script");t.src="https://zipify-ocu.s3.amazonaws.com/ocu/production/assets/"+lqd.path+"/build_number.js?ts="+Date.now(),t.onload=function(){var e=window.OCU_assets_build_number,t=n+"/"+lqd.path+"/assets."+e+".js",c=document.createElement("script");document.head.appendChild(c),c.src=t,c.onload=function(e){var t=window.ocu_precheckout_assets;o.src=t["precheckout.js"],a.href=t["precheckout.css"],l(o,a)}},document.head.appendChild(t)}function l(e,t){e.onload=function(){s(!0),clearTimeout(c)},t.rel="stylesheet",document.head.appendChild(e),document.head.appendChild(t)}function s(t){var e=document.querySelectorAll(utils.store.get("ocuSelectors"));Array.prototype.forEach.call(e,function(e){e.disabled=!t})}}(); 1574function Application() { 1575 ajax = axios.create({ timeout: 8000 }); 1576 ajax.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; 1577 1578 new PublicMethod(); 1579 new SkipCart(); 1580 new HistoryApi(); 1581 1582 this.setAttributes(); 1583} 1584 1585Application.prototype = { 1586 checkout: null, 1587 ocuSelectors: utils.store.get('ocuSelectors'), 1588 integrations: new Integrations(), 1589 helpers: new Helpers(), 1590 verify: new Verify(), 1591 cart: new Cart(), 1592 1593 setAttributes: function() { 1594 this.integrations.smar7(); 1595 if ( 1596 !lqd.upsell_cart_include_upsells 1597 && !this.helpers.isOfferProduct() 1598 && !lqd.integrate_with_recharge && !lqd.subscription_products_size 1599 && lqd.template_name === 'cart') return; 1600 1601 const forEach = Array.prototype.forEach; 1602 const checkoutButtons = document.querySelectorAll(this.ocuSelectors); 1603 const links = document.querySelectorAll('a'); // for ios 1604
1605 forEach.call(checkoutButtons, function(item) { 1606 item.dataset.ocuCheckout = true; 1607 }); 1608 1609 setTimeout(function() { 1610 var checkoutBtn = document.querySelector('[data-ocu-checkout]'); 1611 if (checkoutBtn) checkoutBtn.style.display = 'inline-block'; 1612 }); 1613 1614 forEach.call(checkoutButtons, function(item) { 1615 item.dataset.disableRecharge = true; 1616 }); 1617 1618 forEach.call(links, function(link) { 1619 var isNeededHref = utils.store.get('permalink').test(link.href); 1620 if (isNeededHref) link.dataset.ocuCheckoutLink = true; 1621 }); 1622 1623 // if (lqd.amazon_pay) { 1624 // window.onAmazonLoginReady = this.integrations.amazonPay; 1625 // if (window.onAmazonLoginReady && !utils.store.get('amazonPayInitiated')) this.integrations.amazonPay(this); 1626 // } 1627 1628 this.listenEvents(); 1629 }, 1630 1631 check: function(event, target) { 1632 event.preventDefault(); 1633 event.stopPropagation(); 1634 1635 var form = target.closest('[action="/cart"], [action="/checkout"]'); 1636 if (form && !this.validate(form)) { 1637 clearTimeout(utils.store.get('fallback').id); 1638 utils.store.set('submitted', false); 1639 return form.reportValidity(); 1640 } 1641 if (!utils.store.get('cartChanged')) return this.handle(target); 1642 1643 utils.store.listen('cartChanged').then(function() {this.handle(target)}.bind(this)); 1644 }, 1645 1646 handle: function(target) { 1647 this.integrations.discounts(); 1648 1649 if (utils.store.get('checkoutButtonState')) return; 1650 // if (utils.store.get('submitted')) return; // TODO fix_ff_multi_requests_2384 1651 utils.store.set('checkoutButtonState', true); 1652 1653 this.helpers.payPal(target); 1654 this.verify.init(target); 1655 }, 1656 1657 init: function(event, target) { 1658 var self = this; 1659 1660 if (lqd.template_name === 'cart' && utils.store.get('submitted')) { 1661 event.stopPropagation(); 1662 return event.preventDefault(); 1663 } 1664 utils.store.set('submitted', true); 1665 1666 this.fallbackRedirect(); 1667 1668 if (window.RevyApp) this.handleMonkeyPatching(); 1669 1670 if (!this.allowUpsells(target)) return; 1671 1672 if (lqd.template_name === 'product' && target.name === 'add' && !target.closest('form[action^="/cart/add"]')) { 1673 event.preventDefault(); 1674 event.stopPropagation(); 1675 const form = document.querySelector('form[action^="/cart/add"]'); 1676 return form.submit(); 1677 } 1678 1679 if ((utils.store.get('amazonPayInitiated') || lqd.is_precheckout) && !utils.cookie.get('ocu_shown_popup') && lqd.template_name === 'cart') { 1680 event.preventDefault(); 1681 event.stopPropagation(); 1682 if (utils.store.get('amazonPayInitiated')) return null; 1683 1684 const form = target.closest('[action="/cart"], [action="/checkout"]'); 1685 if (form && !this.validate(form)) { 1686 clearTimeout(utils.store.get('fallback').id); 1687 utils.store.set('submitted', false); 1688 return form.reportValidity(); 1689 } 1690 1691 const isRechargeEnabled = lqd.integrate_with_recharge && !lqd.disabled_by_subscription_app; 1692 1693 if (!window.OCUPrecheckout) return this.check(event, target); 1694 1695 const precheckoutConfig = { 1696 utils: utils, 1697 Updater: Updater, 1698 is_recharge_enabled: isRechargeEnabled 1699 }; 1700 1701 return OCUPrecheckout(precheckoutConfig); 1702 } 1703 1704 if (target.dataset.customBuyNow) { 1705 event.preventDefault(); 1706 event.stopPropagation(); 1707 1708 var id = target.dataset.varientId; 1709 var qty = target.dataset.itemQuantity; 1710 var data = { id: id, quantity: qty }; 1711 var handle = function() { self.checkout({ redirect:true }) }; 1712 var onError = function() { alert('Network Error') }; 1713 1714 this.cart.add(null, null, data).then(handle).catch(onError); 1715 } 1716 1717 var isIPhone = /iPhone/.test(navigator.userAgent); 1718 var isSmar7 = window.SMAR7 && SMAR7.bundle_app === 'yes'; 1719 var smar7Modal = document.querySelector('.sm7-popup'); 1720 var needSkipClick = (this.integrations.needSkipClick || isSmar7) 1721 && !lqd.integrate_with_recharge 1722 && (event.isTrusted || isIPhone); 1723 1724 if ((!event.isTrusted || isIPhone) && !smar7Modal) return this.check(event, target); 1725 if (needSkipClick && this.integrations.list.bold.productUpsell) { 1726 if (target.name === 'checkout') return this.check(event, target); 1727 } 1728 if (!needSkipClick && !isSmar7) return this.check(event, target); 1729 if (isSmar7 && (!event.isTrusted || isIPhone)) return; 1730 1731 if (smar7Modal) return this.integrations.smar7(); 1732 else return this.check(event, target); 1733 }, 1734 1735 validate: function(form) { 1736 var elems = form.querySelectorAll('[type="text"], [type="checkbox"], select, textarea'); 1737 1738 var requiredElems = Array.prototype.filter.call(elems, function(el) { 1739 return el && el.required; 1740 }); 1741 1742 if (!requiredElems.length) return true; 1743 1744 return !requiredElems.some(function(el) { 1745 return !el.checkValidity(); 1746 }); 1747 }, 1748 1749 allowUpsells: function(el) { 1750 if (window.mixed_cart) return; //integration with Recurring Orders & Subscriptions by Bold 1751 if (window.popup_upsell && !document.querySelector('#upsellclosebtn')) return; // integration with Product Upsell 1752 if (window.ol_checkout_ok instanceof Function && !ol_checkout_ok()) return; // integration with OrderLogic 1753 if (el.dataset.zpaSubmitButton === '') return; // integration with ZipifyPages CRM popup 1754 1755 return true; 1756 }, 1757 1758 fallbackRedirect: function() { 1759 var fallback = utils.store.get('fallback'); 1760 fallback.id = setTimeout(function() { this.checkout({ redirect:true }) }.bind(this), fallback.timeout); 1761 utils.store.set('fallback', fallback); 1762 }, 1763 1764 handleMonkeyPatching: function() { 1765 const send = utils.store.get('XHR').send; 1766 1767 if (XMLHttpRequest.prototype.send !== send) { 1768 XMLHttpRequest.prototype.send = send; 1769 } 1770 }, 1771 1772 handleClick: function(e) { 1773 if (lqd.template_name === 'page' && !e.isTrusted) return; 1774 1775 if (e.target.name === 'update' || e.target.closest('[name="update"]')) return; 1776 1777 if (!lqd.amazon_pay && e.target.closest('form[action^="https://payments.amazon"]')) return; 1778 1779 if (this.helpers.zpPreventRedirect(e.target)) return; 1780 1781 if (this.helpers.isBuyNow(e)) return new BuyNow(e); 1782 1783 if (this.helpers.checkDirectCheckoutButtons(e.target)) { 1784 e.target.dataset.ocuCheckout = true; 1785 utils.store.set('redirect_url', '/checkout'); 1786 } 1787 1788 if (e.target.dataset.ocuCheckoutLink || e.target.closest('[data-ocu-checkout-link]')) { 1789 e.preventDefault(); 1790 var href = (e.target.dataset.ocuCheckoutLink ? e.target : e.target.closest('[data-ocu-checkout-link]')).href; 1791 if (utils.store.get('isPermalinkHandling')) return; 1792 utils.store.set('isPermalinkHandling', true); 1793 var result = this.integrations.handlePermalink(href, 'redirect'); 1794 return result.promise.then(result.callback); 1795 } 1796
1797 if ((e.target.dataset.skipCart === 'true' || e.target.closest('[data-skip-cart]')) && utils.store.get('submitted')) { 1798 e.preventDefault(); 1799 e.stopPropagation(); 1800 e.stopImmediatePropagation(); 1801 return; 1802 } 1803 1804 var target = this.helpers.checkSelector(e.target); 1805 1806 if (target) this.init(e, target); 1807 }, 1808 1809 handleMousedown: function(e) { 1810 var self = this; 1811 1812 if (e.target.dataset.skipCart !== 'true' && !e.target.closest('[data-skip-cart]')) return; 1813 1814 if (e.target.name === 'update' || e.target.closest('[name="update"]')) return; // 283fa429 1815 1816 if (this.helpers.zpPreventRedirect(e.target)) return; 1817 1818 var amazonForm = e.target.closest('form[action^="https://payments.amazon"]'); 1819 if (amazonForm && lqd.amazon_pay) { 1820 e.preventDefault(); 1821 e.stopPropagation(); 1822 1823 var path = { 1824 ocu: lqd.proxy_url + '/amazon/forward', 1825 shopify: amazonForm.querySelector('[name="redirectURL"]').value 1826 }; 1827 1828 var handle = function() { 1829 self.checkout() 1830 .then(function(res) { location = path[res.status ? 'ocu' : 'shopify'] }) 1831 .catch(function(res) { location = path.shopify }) 1832 }; 1833 1834 var onError = function(form) { 1835 form.submit(); 1836 }; 1837 1838 if (!e.target.closest('form[action="/cart/add"]')) return handle(); 1839 1840 var cart = document.querySelector('form[action="/cart/add"]'); 1841 var button = amazonForm.querySelector('[type="submit"]'); 1842 return self.cart.add(cart, button, path).then(handle).catch(onError.bind(null, amazonForm)); 1843 } 1844 1845 var form = e.target.closest('form[action="/cart/add"]') || document.querySelector('form[action="/cart/add"]'); 1846 var button = e.target.dataset.skipCart === 'true' ? e.target : e.target.closest('[data-skip-cart]'); 1847 1848 if (!form) return; 1849 1850 e.preventDefault(); 1851 e.stopPropagation(); 1852 utils.store.set('submitted', true); 1853 1854 var handle = function() { self.checkout({ redirect:true }) }; 1855 var onError = function(form) { form.submit(); }; 1856 return self.cart.add(form, button).then(handle).catch(onError.bind(null, form)); 1857 }, 1858 1859 listenEvents: function() { 1860 document.addEventListener('mousedown', this.integrations.amazonPay.bind(this), true); 1861 document.addEventListener('touchstart', this.handleClick.bind(this), true); 1862 document.addEventListener('click', this.handleClick.bind(this), true); 1863 window.addEventListener('pagehide', this.helpers.disableButtons); 1864 window.addEventListener('locationchange', function() { 1865 document.removeEventListener('click', this.handleClick.bind(this), true); 1866 document.addEventListener('click', this.handleClick.bind(this), true); 1867 }.bind(this)); 1868 1869 window.addEventListener('pageshow', function(e) { 1870 if (e.persisted) location.reload(); 1871 this.helpers.disableButtons(); 1872 }.bind(this)); 1873 1874 // if (lqd.template_name !== 'cart') return; 1875 // document.addEventListener('mousedown', this.cart.update.bind(this), true); 1876 // document.addEventListener('change', this.cart.state.bind(this)); 1877 } 1878}; 1879 1880function amazonPay(e) { 1881 const self = this; 1882 const amazonForm = e.target.closest('form[action^="https://payments.amazon"]'); 1883 1884 if (!amazonForm || !lqd.amazon_pay) return; 1885 1886 e.preventDefault(); 1887 e.stopPropagation(); 1888 1889 utils.store.set('amazonPayInitiated', true); 1890 1891 const addForm = e.target.closest('form[action="/cart/add"]'); 1892 const path = lqd.proxy_url + '/amazon/forward'; 1893 1894 const getToken = function(url) { 1895 const escaped = lqd.proxy_url.replace(/\//g, '\\/'); 1896 const reg = new RegExp(escaped + '\\/((?:\\w+[-_]?)+)\\/?'); 1897 const match = reg.exec(url); 1898 1899 return match && match[1]; 1900 }; 1901 1902 const fallback = function() { 1903 amazonForm.submit(); 1904 }; 1905 1906 const onSuccess = function(res) { 1907 if (!res.status) return fallback(); 1908 1909 const token = getToken(res.checkout_url); 1910 if (!token) return fallback(); 1911 1912 utils.cookie.set('ocu_checkout_token', token); 1913 location.assign(path); 1914 }; 1915 1916 if (!addForm) { 1917 return self.checkout().then(onSuccess).catch(fallback); 1918 } 1919 1920 const cart = document.querySelector('form[action="/cart/add"]'); 1921 const button = amazonForm.querySelector('[type="submit"]'); 1922 1923 self.cart.add(cart, button) 1924 .then(self.checkout) 1925 .then(onSuccess) 1926 .catch(fallback); 1927} 1928 1929function Bold() { 1930 this.isBoldRecuring = function() { 1931 var boldRecurringEl = document.querySelector('[data-bold-recurring]'); 1932 var isBoldRecuring = boldRecurringEl && boldRecurringEl.checked; 1933 return isBoldRecuring; 1934 }; 1935 1936 this.upsellPopup = function(target) { 1937 var modalButtons = [ 1938 target.querySelector('[data-bold-component-id="upsell_continue"]'), 1939 target.querySelector('[data-bold-component-id="upsell_no_thanks"]'), 1940 target.querySelector('#bold-modal__btn-close') 1941 ]; 1942 1943 modalButtons.forEach(function(item) { 1944 if (!item) return; 1945 item.addEventListener('click', function(e) { 1946 setTimeout(function() { 1947 self.checkout({ redirect: true }); 1948 }, 500); 1949 }); 1950 }); 1951 }; 1952 1953 this.initRecurring = function() { 1954 var clones = document.querySelectorAll('[data-ocu-clone]'); 1955 var clone = Array.prototype.filter.call(clones, function(i) { return i && !i.dataset.ocuCheckout; })[0]; 1956 if (clone) clone.click(); 1957 }; 1958 1959 this.recurring = function(form, token) { 1960 var cfg = { 1961 protocol: 'https://', 1962 host: 'recurringcheckout.com', 1963 proxy: '/s/', 1964 permanent: /(\w+)\.myshopify\.com/.exec(BOLD.common.Shopify.shop.permanent_domain)[1], 1965 path: '/checkout/recurring/', 1966 query: '?shop_url=' + location.host 1967 }; 1968
1969 form.action = cfg.protocol + cfg.host + cfg.proxy + cfg.permanent + cfg.path + token + cfg.query; 1970 form.submit(); 1971 }; 1972} 1973 1974function BuyNowBtns() { 1975 if (!lqd.themeSkipCart) return; 1976 1977 const self = this; 1978 1979 const buyNowBtn = document.querySelector('button[id="AddToCart"]'); 1980 if (!buyNowBtn) return; 1981 1982 const innerTextEl = buyNowBtn.querySelector('#AddToCartText'); 1983 if (!/buy\s*(it)?\s*now/i.test(innerTextEl && innerTextEl.innerText)) return; 1984 1985 const cb = function() { self.checkout({ redirect: true }); }; 1986 const onError = function(form) { form.submit() }; 1987 1988 buyNowBtn.addEventListener('click', function(e) { 1989 e.preventDefault(); 1990 const form = buyNowBtn.closest('form[action="/cart/add"]'); 1991 self.cart.add(form, e.target).then(cb).catch(onError.bind(null, form)); 1992 }); 1993} 1994 1995function HandlePermalink(url, redirect) { 1996 var self = this; 1997 var reg = utils.store.get('permalink'); 1998 var match = reg.exec(url); 1999 var cfg = { redirect: redirect }; 2000 2001 if (!match) return { 2002 promise: new Promise(function(resolve) { resolve({ checkout_url: url }); }), 2003 callback: function(res) { 2004 return redirect ? location.assign(url) : new Promise(function(resolve) { resolve(res); }) 2005 } 2006 }; 2007 2008 var discount = match[2]; 2009 if (discount) cfg.params = [{ discount: discount }]; 2010 2011 var groups = match[1].split(','); 2012 2013 var data = groups.reduce(function(acc, item, i, arr) { 2014 var id = +item.split(':')[0]; 2015 var qty = +item.split(':')[1]; 2016 2017 var cartItem = lqd.cart_variants_json.filter(function(item) { return item.id === id })[0]; 2018 if (cartItem) qty += cartItem.quantity; 2019 2020 if (acc) acc += '&'; 2021 return acc += 'updates[' + id + ']=' + qty; 2022 }, ''); 2023 2024 return { 2025 promise: self.cart.bulkAdd(data), 2026 callback: function() { return self.checkout(cfg); } 2027 }; 2028} 2029 2030function CartDrawer(target) { 2031 var form = target.querySelector('form[action="/cart"]'); 2032 var btn = form && form.querySelector('input[type="submit"]'); 2033 if (!btn) return; 2034 2035 btn.type = 'button'; 2036 btn.addEventListener('click', function(e) { 2037 self.checkout({ redirect: true }); 2038 }); 2039} 2040 2041function CartPopup() { 2042 var btn = document.querySelector('.bkt--upsell-target-checkout'); 2043 if (!btn) return; 2044 2045 var cfg = { 2046 tag: 'input ', 2047 type: 'type="button" ', 2048 style: 'style="position:absolute;left:0;top:0;width:100%;height:100%;cursor:pointer;opacity:0" ', 2049 data: 'data-ocu-dialog-btn ' 2050 }; 2051 2052 btn.style.position = 'relative'; 2053 btn.insertAdjacentHTML('beforeend','<'+cfg.tag+cfg.type+cfg.style+cfg.data+'>'); 2054 2055 var clone = document.querySelector('[data-ocu-dialog-btn]'); 2056 clone.addEventListener('click', function(e) { 2057 e.stopPropagation(); 2058 btn.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="bkt--nc-icon" x="0px" y="0px" width="64px" height="15px" viewBox="0 0 64 64"><g><circle class="nc-dots-7-2" data-color="color-2" fill="#445FFF" cx="32" cy="32" r="26" transform="translate(6.26687999999989 6.26687999999989) scale(0.8041600000000034)" style="opacity:0.8041600000000034"></circle><circle class="nc-dots-7-1" fill="#445FFF" cx="-72" cy="32" r="26" transform="translate(3.2332800000000272 12.933120000000109) scale(0.5958399999999966)" style="opacity:0.5958399999999966"></circle><circle class="nc-dots-7-3" fill="#445FFF" cx="132" cy="32" r="26" transform="translate(33.6 19.2) scale(0.4)" style="opacity:0.4"></circle></g></svg>'; 2059 function setAttributes(e,t){for (var i in t)e.setAttribute(i,t[i]);} function dotsSevenStep(e){startDots7||(startDots7=e);var t=e-startDots7,n=Math.min(t/250,4);n=4==n?0:n,decimalRot=n%1,upperInteger=Math.ceil(n),1e3>t||(startDots7+=1e3);if (circleDots7[0][0]){window.requestAnimationFrame(dotsSevenStep);var a=[],r=[],o=[],s=[-72,32,132],c=[32,32,32];for (j = 0; circleDots7Number > j ; j++) {for (a[0]=a[1]=a[2]=.4,1==upperInteger?(a[0]=1-3*decimalRot/5,a[1]=.4+3*decimalRot/5):2==upperInteger?(a[1]=1-3*decimalRot/5,a[2]=.4+3*decimalRot/5):3==upperInteger?(a[1]=.4+3*decimalRot/5,a[2]=1-3*decimalRot/5):4==upperInteger?(a[0]=.4+3*decimalRot/5,a[1]=1-3*decimalRot/5):a[0]=1,i=0;3>i;i++)r[i]=(1-a[i])*s[i],o[i]=(1-a[i])*c[i],setAttributes(circleDots7[i][j],{ 2060transform: 'translate('+r[i]+' '+o[i]+') scale('+a[i]+')', 2061style: 'opacity:'+a[i]+';' 2062});}}}!function(){var e=0;window.requestAnimationFrame||(window.requestAnimationFrame=function(t){var i=(new Date).getTime(),n=Math.max(0,16-(i-e)),a=window.setTimeout(function(){t(i+n);},n);return e=i+n,a;});}();var circleDots7=[],startDots7=null;circleDots7[0]=document.getElementsByClassName('nc-dots-7-1'),circleDots7[1]=document.getElementsByClassName('nc-dots-7-2'),circleDots7[2]=document.getElementsByClassName('nc-dots-7-3'),circleDots7Number = circleDots7[0].length,window.requestAnimationFrame(dotsSevenStep); 2063 self.checkout({ redirect: true }); 2064 }); 2065} 2066 2067function CheckoutLinks() { 2068 var checkoutLinks = document.querySelectorAll('a[href="/checkout"]'); 2069 2070 Array.prototype.forEach.call(checkoutLinks, function(link) { 2071 if (!link) return; 2072 2073 link.addEventListener('click', function(e) { 2074 e.stopPropagation(); 2075 e.preventDefault(); 2076 self.checkout({ redirect: true }); 2077 }); 2078 }); 2079} 2080 2081function Discounts() { 2082 var discount = document.querySelector('input[name="discount"]'); 2083 var discountCC = utils.cookie.get('discount_code'); // integration with CouponCountdown
2084 var discountShare = utils.cookie.get('ocu-share-discount'); 2085 var isPopupShown = utils.cookie.get('popupcookie'); 2086 2087 if (window._chpmgr && !isPopupShown) return; // integration with chilliapps exit popup 2088 if (!discount && !discountCC && !discountShare) return; 2089 2090 var code; 2091 if (discount) code = discount.value; 2092 if (discountCC) { 2093 code = discountCC; 2094 utils.cookie.remove('discount_code'); 2095 } 2096 2097 if (discountShare) { 2098 code = discountShare; 2099 utils.cookie.remove('ocu-share-discount'); 2100 } 2101 2102 var param = { 2103 name: 'discount', 2104 value: encodeURIComponent(code) 2105 }; 2106 2107 var params = utils.store.get('params'); 2108 2109 if (discountShare && lqd.template_name === 'page' || !param.value) return; // zp & shareable discount 2110 2111 params.arr.push(param); 2112 utils.store.set('params', params); 2113} 2114 2115function Recharge() { 2116 var self = this; 2117 2118 this.isSubscription = function(res) { 2119 var cart = res.cart || res.data.cart || res.data; 2120 2121 return cart.items.some(function(item) { 2122 return item.properties && (item.properties.subscription_id || item.properties.shipping_interval_frequency); 2123 }); 2124 }; 2125 2126 this.processCart = function() { 2127 window.reChargeProcessCart = function() { 2128 self.checkout({ redirect: true }); 2129 }; 2130 }; 2131 2132 this.needRedirect = function(isError, lqd, data) { 2133 const hasError = lqd.integrate_with_recharge && (isError || !data.status); 2134 const hasSubscription = !lqd.integrate_with_recharge && self.isSubscription(lqd); 2135 return hasError || hasSubscription; 2136 }; 2137 2138 this.redirect = function(checkoutUrl) { 2139 let checkout_url = "https://checkout.rechargeapps.com"; 2140 function buildCheckoutUrl(){var t=["myshopify_domain="+Shopify.shop];return checkout_url+"/r/checkout?"+(t=t.concat(get_cart_token()).concat(get_ga_linker())).join("&")}function filterVisible(t){return t.filter(function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)})}function filterValues(t){return t.filter(function(t){var e="radio"===t.getAttribute("type")&&t.checked,n="checkbox"===t.getAttribute("type")&&t.checked,r="checkbox"!==t.getAttribute("type")&&"radio"!==t.getAttribute("type");return!!t.value&&(r||e||n)})}function getCartJSON(){return fetch("/cart.js").then(function(t){return t.json()}).then(function(t){return{cart:JSON.stringify(t)}}).catch(function(t){return console.error("Error retreiving cart: ",t),{cart:{}}})}function getTermsAndConditions(){var t=document.querySelectorAll(["#terms","#agree"].join(",")),e=filterValues(Array.prototype.slice.apply(t)).map(function(t){return t.value});return e.length?{terms_and_conditions:e.join(", ")}:{}}function getNotes(){var t=document.querySelectorAll(['[name="note"]'].join(",")),e=filterVisible(Array.prototype.slice.apply(t)).map(function(t){return t.value}),n=new URLSearchParams(decodeURIComponent(window.location.search)).get("note");return n&&e.push(n),e.length?{note:e.filter(function(t,e,n){return n.indexOf(t)===e}).join(", ")}:""}function getUTMAttributes(){var t=/^_shopify_sa_p/,e=/^utm_/,n=/^_shopify_sa_t/,r={},o="",i="";document.cookie.split(";").map(function(t){return t.trim()}).forEach(function(e){t.test(e)&&(o=e),n.test(e)&&(i=decodeURIComponent(e.split("=")[1]))});var c=o.split("=")[1];if(decodeURIComponent(c).split("&").forEach(function(t){var n=t.split("=")[0],o=t.split("=")[1];if(e.test(n))return r[n]=o}),Object.keys(r).length)return r.utm_timestamp=i,r.utm_data_source="shopify_cookie",r}function getAttributes(){var t=/attributes\[(.*?)\]/,e=/\[(.*?)\]/,n=document.querySelectorAll(['[name*="attributes"]'].join(",")),r=filterValues(Array.prototype.slice.apply(n)),o={},i=getUTMAttributes(),c=new URLSearchParams(decodeURIComponent(window.location.search));for(let n of c)if(t.test(n[0])){var u=n[0].match(e)[0];u=u.substring(1,u.length-1),o[u]=c.get(n[0])}return r.forEach(function(n){var r=n.getAttribute("name"),i=n.value;if(t.test(r)){var c=r.match(e)[0];return c=c.substring(1,c.length-1),o[c]=i}return o[r]=i}
2140),i&&Object.keys(i).forEach(function(t){o[t]=i[t]}),Object.keys(o).length?{attributes:Object.assign({},o)}:{}}function getCartData(){return getCartJSON().then(function(t){var e={};return[getTermsAndConditions(),getNotes(),getAttributes(),e=t].forEach(function(t){Object.assign(e,t)}),e})}function get_cart_token(){try{return["cart_token="+(document.cookie.match("(^|; )cart=([^;]*)")||0)[2]]}catch(t){return[]}}function get_ga_linker(){try{return[ga.getAll()[0].get("linkerParam")]}catch(t){return[]}}function buildInputs(t,e){Object.keys(e).forEach(function(n){var r=document.createElement("input");r.setAttribute("type","hidden"),r.setAttribute("name",n),r.setAttribute("value","object"==typeof e[n]?JSON.stringify(e[n]):e[n]),t.appendChild(r)})}function buildForm(t,e){var n=document.createElement("form");return n.setAttribute("method","post"),n.setAttribute("action",e),n.setAttribute("id","rc_form"),n.style.display="none",buildInputs(n,t),n}function hasSubscription(t){return[...JSON.parse(t.cart).items].some(t=>t.properties&&t.properties.shipping_interval_unit_type)}function ReChargeCartSubmit(){return getCartData().then(function(t){if(hasSubscription(t)){var e=buildCheckoutUrl();if(t){var n=new XMLHttpRequest;n.open("POST","/cart/update.js"),n.setRequestHeader("Content-Type","application/json"),n.onload=function(){200===n.status?window.console.log("done",JSON.parse(n.responseText)):200!==n.status&&window.console.log("fail",JSON.parse(n.responseText));var r=buildForm(t,e);document.body.appendChild(r),r.submit()},n.send(JSON.stringify(t))}else window.location.href=e}else window.location.href=checkoutUrl||"/checkout"})} 2141 ReChargeCartSubmit(); 2142 2143 return { redirecting: true }; 2144 }; 2145} 2146 2147function smar7() { 2148 var self = this; 2149 2150 var isSmar7Installed = ~document.head.innerHTML.indexOf('bundle-upsell'); 2151 if (!isSmar7Installed) return; 2152 2153 var ctaBtns = document.querySelectorAll("[name='checkout'], [href^='/checkout'], form[action='/checkout'] [type='submit'], #checkout, [name='goto_pp'], .checkout_button"); 2154 Array.prototype.forEach.call(ctaBtns, function(btn) { 2155 btn.disabled = true; 2156 }); 2157 2158 var i = 0; 2159 var int = setInterval(function() { 2160 if ((++i && i > 7) || (window.SMAR7 && SMAR7.bundle)) { 2161 Array.prototype.forEach.call(ctaBtns, function(btn) { 2162 btn.disabled = false; 2163 }); 2164 clearInterval(int); 2165 } 2166 }, 3000); 2167 2168 var redirect = function(discount) { 2169 var button, path, params = utils.store.get('params'); 2170 2171 if (discount) { 2172 SMAR7.util.setCookie('smar7coupon', discount, 3600); 2173 2174 params.arr.push({ 2175 name: 'discount', 2176 value: encodeURIComponent(discount) 2177 }); 2178 } else { 2179 discount = SMAR7.bundle.helper.determineCoupon && SMAR7.bundle.helper.determineCoupon(); 2180 } 2181 2182 if (SMAR7.paypal) {
2183 path = '/checkout?goto_pp=paypal_express&discount=' + encodeURIComponent(discount); 2184 button = document.querySelector('[name="goto_pp"]'); 2185 } else { 2186 path = '/checkout?discount=' + encodeURIComponent(discount); 2187 button = document.querySelector( 2188 '[name="checkout"], [href="/checkout"], form[action="/checkout"] input[type="submit"], #checkout' 2189 ); 2190 } 2191 2192 utils.store.set('params', params); 2193 self.checkout({ redirect: true }); 2194 }; 2195 2196 var handle = function() { 2197 if (window.SMAR7 && SMAR7.bundle) SMAR7.bundle.redirect = redirect; 2198 }; 2199 2200 document.addEventListener('click', handle, true); 2201}; 2202 2203function Integrations() { 2204 var self = this; 2205 var bold = new Bold(); 2206 var recharge = new Recharge(); 2207 2208 this.list = { 2209 bold: { 2210 get isInstalled() { return window.BOLD && BOLD.apps_installed; }, 2211 get productOptions() { return this.isInstalled && BOLD.apps_installed['Product Options']; }, 2212 get productUpsell() { return this.isInstalled && BOLD.apps_installed['Product Upsell']; }, 2213 }, 2214 recharge: { 2215 isSubscriptionProduct: function(cart) { 2216 return cart.items.some(function(item) { 2217 return item.properties && (item.properties.subscription_id || item.properties.shipping_interval_frequency); 2218 }); 2219 } 2220 } 2221 }; 2222 2223 2224 // for future integartion 2225 this.boldUpsellCheckoutOffer = function() { 2226 if (!window.BOLD || !window.Shopify) return; 2227 2228 var data = { 2229 data: { 2230 cart: { 2231 items: lqd.cart.items, 2232 total_price: lqd.cart.total_price 2233 } 2234 } 2235 }; 2236 2237 return ajax.request({ 2238 method: 'post', 2239 url: window.BOLD.upsell.path + window.Shopify.shop + '/validate_checkout_offer', 2240 data: JSON.stringify(data) 2241 }); 2242 }; 2243 2244 this.needSkipClick = this.list.bold.productOptions || this.list.bold.productUpsell; 2245 2246 this.start = function() { 2247 if (!lqd.upsell_cart_include_upsells) return; 2248 if (lqd.template_name !== 'cart') this.main(); 2249 // try { 2250 // this[(lqd.template_name === 'cart' ? 'cart' : 'main')](); 2251 // } catch (e) { console.warn(e); } 2252 }; 2253 2254 this.main = function() { 2255 var handleMutation = function(mutation) { 2256 if ( 2257 mutation.type !== 'attributes' 2258 || mutation.target !== document.querySelector(self.ocuSelectors) 2259 || !/cart-?(popup|container|drawer)/i.test(mutation.target.id) 2260 || !/bold-upsell-modal-window/i.test(mutation.target.id) 2261 ) return; 2262 2263 if (mutation.target.id === 'bold-upsell-modal-window') { 2264 return self.boldUpsellPopup(mutation.target); 2265 } 2266 2267 var checkoutButtons = document.querySelectorAll(self.ocuSelectors); 2268 // var dataOcuCheckoutValue = checkoutButtons[0].dataset.ocuCheckout === 'true'; 2269 var dataDisableRechargeValue = checkoutButtons[0].dataset.disableRecharge === 'true'; 2270 var forEach = Array.prototype.forEach; 2271 2272 forEach.call(checkoutButtons, function(item) { 2273 if (item.innerHTML === 'Checkout') item.removeAttribute('onclick'); // Integration with AceCase store 2274 }); 2275 2276 // if (!dataOcuCheckoutValue) { // Integration with MyDietChief store 2277 // Array.prototype.forEach.call(checkoutButtons, function(item) {s 2278 // item.dataset.ocuCheckout = true; 2279 // }); 2280 // } 2281 2282 if (lqd.disabled_by_subscription_app && dataDisableRechargeValue) return; 2283 2284 forEach.call(checkoutButtons, function(item) { 2285 item.disableRecharge = true; 2286 }); 2287 2288 self.cartPopup(); 2289 self.cartDrawer(mutation.target); 2290 self.checkoutLinks(); 2291 self.listenEvents(); 2292 }; 2293 2294 var handleMutations = function(mutations) { mutations.forEach(handleMutation); }; 2295 2296 var config = { 2297 childList: true, 2298 subtree: true, 2299 attributes: true 2300 }; 2301 2302 new MutationObserver(handleMutations).observe(document, config); 2303 2304 self.buyNowBtns(); 2305 self.recharge.processCart(); 2306 self.revy(); 2307 }; 2308 2309 // this.cart = function() { 2310 // // var handleMutation = function(mutation) { 2311 // // var target = document.querySelector(self.ocuSelectors); 2312 // // if (mutation.type === 'attributes' && mutation.target === target) { 2313 // // self.smar7(); 2314 // // } 2315 // // }; 2316 2317 // // var handleMutations = function(mutations) { mutations.forEach(handleMutation); }; 2318 2319 // // var config = { 2320 // // subtree: true, 2321 // // attributes: true 2322 // // }; 2323 2324 // // new MutationObserver(handleMutations).observe(document, config); 2325 2326 // self.revy(); 2327 // }; 2328 2329 this.revy = function() { 2330 if (window.RevyApp && RevyApp.events) RevyApp.events.updatedCart = []; 2331 }; 2332 2333 this.discounts = Discounts; 2334 this.smar7 = smar7; 2335 this.isBoldRecuring = bold.isBoldRecuring; 2336 this.boldRecurring = bold.initRecurring; 2337 this.bold = bold.recurring; 2338 this.boldUpsellPopup = bold.upsellPopup; 2339 this.cartPopup = CartPopup; 2340 this.cartDrawer = CartDrawer; 2341 this.checkoutLinks = CheckoutLinks; 2342 this.handlePermalink = window.oneClickUpsellHandlePermalink = HandlePermalink.bind(this); 2343 this.buyNowBtns = BuyNowBtns; 2344 this.recharge = recharge; 2345 this.amazonPay = amazonPay; 2346 // this.amazonPay = function() { AmazonPay(self) }; 2347 2348 this.start(); 2349} 2350 2351function HistoryApi() { 2352 history.pushState = (function(f) { 2353 return function() { 2354 var result = f.apply(this, arguments); 2355 window.dispatchEvent(new Event('pushState')); 2356 window.dispatchEvent(new Event('locationchange')); 2357 return result; 2358 }; 2359 })(history.pushState); 2360 2361 history.replaceState = (function(f) { 2362 return function() { 2363 var result = f.apply(this, arguments); 2364 window.dispatchEvent(new Event('replaceState')); 2365 window.dispatchEvent(new Event('locationchange')); 2366 return result; 2367 }; 2368 })(history.replaceState); 2369 2370 window.addEventListener('popstate', function() { 2371 window.dispatchEvent(new Event('locationchange')); 2372 }); 2373} 2374 2375function Verify() { 2376 var self = this; 2377 var target; 2378 2379 this.init = function(target) { 2380 target = target; 2381 2382 if (window.catchXHR) { 2383 catchXHR = false;
2384 XMLHttpRequest.callbacks = []; 2385 } 2386 if (window.beeketingWPJP) beeketingWPJP = {}; 2387 2388 self.checkout() 2389 .then(self.handle) 2390 .catch(self.helpers.redirect); 2391 }; 2392 2393 this.data = function() { 2394 var options = { 2395 method: 'get', 2396 url: self.helpers.getProxyUrl() + utils.store.get('lqdCart') 2397 }; 2398 2399 return ajax.request(options); 2400 }; 2401 2402 this.upsells = function(res) { 2403 if (self.integrations.recharge.isSubscription(res) && !lqd.integrate_with_recharge) { 2404 return new Promise(function(resolve) { resolve(res); }); 2405 } 2406 2407 res = self.cart.modify(res); 2408 2409 const cart = res.data; 2410 return self._addToken(cart) 2411 .then(function(c) { 2412 return self._makeCheckUpsells(c, res); 2413 }); 2414 }; 2415 2416 this.handle = function(res) { 2417 if (!res || res.redirecting) return; 2418 // var isAppSkipCart = lqd.skip_cart && /index|collection|product/.test(lqd.template_name); 2419 // var isThemeSkipCart = lqd.themeSkipCart; 2420 // if (cart.redirect_url) return location = cart.redirect_url; 2421 if (!res.status && !lqd.themeSkipCart) return self.helpers.redirect(res); 2422 // if (!res.status && !lqd.themeSkipCart) return location.assign('/cart'); 2423 2424 location = res.status || lqd.themeSkipCart 2425 ? res.redirect_url || res.checkout_url 2426 : '/cart'; 2427 }; 2428 2429 this._makeCheckUpsells = function(cart, res) { 2430 cart.items = self.helpers.filterCartItemFields(cart.items); 2431 2432 const data = { 2433 shop_domain: lqd.current_domain, 2434 cart: cart, 2435 require_paypal: utils.store.get('requirePayPal'), 2436 customer: { id: res.data.customer_id }, 2437 incarts: utils.store.get('incarts') 2438 // incarts: { 47: { status: 'declined', shopify_variant_id: 16052480475207, quantity: 1, shown_at: Date.now() }} 2439 // incarts: { 47: { status: 'offered', shopify_variant_id: 16052480475207, quantity: 1, shown_at: Date.now() }} 2440 }; 2441 2442 const options = { 2443 method: 'post', 2444 url: self.helpers.getProxyUrl() + utils.store.get('checkUpsells'), 2445 data: utils.serialize(data, { indices: true }) 2446 }; 2447 2448 return ajax.request(options); 2449 }; 2450 2451 2452 this._addToken = function(cart) { 2453 const store_token = utils.store.get('cart_token'); 2454 return new Promise(function(resolve, reject) { 2455 if (!cart.token && store_token) { 2456 cart.token = store_token; 2457 resolve(cart); 2458 } else if (!cart.token) { 2459 self.cart.get().then(function(res) { 2460 cart.token = res.data.token; 2461 resolve(cart); 2462 }); 2463 } else { 2464 resolve(cart); 2465 } 2466 }); 2467 } 2468}; 2469 2470const appendChain = window.Symbol ? Symbol('appendChain') : 'oneClickUpsellAppendChain'; 2471Object[appendChain]=function(t,o){for(var n=o,e=o2nd=oLast=t instanceof this?t:new t.constructor(t),r=this.getPrototypeOf(o2nd);r!==Object.prototype&&r!==Function.prototype;r=this.getPrototypeOf(o2nd))o2nd=r;return o.constructor===String&&(n=Function.prototype,e=Function.apply(null,Array.prototype.slice.call(arguments,1)),this.setPrototypeOf(e,oLast)),this.setPrototypeOf(o2nd,n),e}; 2472 2473function Updater(res) { 2474 this.res = res; 2475 this.cart = res && res.data.cart; 2476 this.isCartUpdated = utils.store.get('cartUpdated'); 2477 this.isOfferDeclined = utils.store.get('offerDeclined'); 2478 this.options = { 2479 add: { method: 'post', url: '/cart/add.js' }, 2480 change: { method: 'post', url: '/cart/change.js' }, 2481 update: { method: 'post', url: '/cart/update.js' } 2482 }; 2483 this.regs = { 2484 attributes: /\[(.+?)\]/, 2485 key: /(?:updates_(?:.*?))?(\d+:\w+)/, 2486 id: /(?:updates_(?:.*?))?(\d+):?/ 2487 }; 2488 this.selectors = { 2489 form: 'form[action^="/checkout"], form[action*="/cart"]:not([action*="/cart/add"])', 2490 attributes: '[name^="attributes["]', 2491 currency: '[name="currency"]', 2492 updates: '[name^="updates["], [name="quantity"]', 2493 note: '[name="note"]' 2494 }; 2495 this.data = { 2496 currency: lqd.shop_currency, 2497 attributes: {}, 2498 lineItems: [], 2499 updates: {}, 2500 changes: [], 2501 sameIds: [], 2502 note: '' 2503 }; 2504 this.payload = { 2505 updates: {}, 2506 currency: '', 2507 note: null, 2508 attributes: {} 2509 }; 2510} 2511Updater.prototype = { 2512 init: function() { 2513 const afterPopupUpdate = !this.isCartUpdated && this.hasAttributes; 2514 const skipUpdate = (this.isCartUpdated && !this.isOfferDeclined) && (!this.isNoteChanged && !afterPopupUpdate); 2515 if (skipUpdate) return this.resolve(this.res); 2516 if (!this.form) return this.updateCurrency(); 2517 2518 this.buildPayload(); 2519 if (this.res) return this.updateCart(); 2520 } 2521}; 2522const UpdaterRequests = { 2523 updateCart: function(data, isUpgrade) { 2524 const options = this._getOptions('update', data, isUpgrade); 2525 const params = isUpgrade && data.changeData; 2526 const updateCart = function() { return ajax.request(options); }; 2527 2528 return this._updateSameId(params).then(updateCart); 2529 }, 2530 addToCart: function(data) { 2531 const options = this._getOptions('add', data); 2532 2533 return ajax.request(options); 2534 }, 2535 changeCart: function(data, chain) { 2536 const options = this._getOptions('change', data); 2537 const request = !chain || chain instanceof Object 2538 ? ajax.request(options) 2539 : function() { return ajax.request(options); }; 2540 2541 return request; 2542 }, 2543 updateCurrency: function() { 2544 if (!this.needCurrencyUpdate) return this.resolve(this.res); 2545 2546 this.getCurrency(); 2547 const options = this._getOptions('update', { currency: this.data.currency }); 2548 2549 return ajax.request(options).catch(this.resolve.bind(this, this.res)); 2550 },
2551 _updateSameId: function(changeData) { 2552 if (!this.data.sameIds.length) return this.resolve(false); 2553 2554 const allRequests = this._getCartChangeRequests(changeData); 2555 const requestChain = this._requestChain(allRequests); 2556 2557 return new Promise(requestChain.bind(this)); 2558 }, 2559 _getCartChangeRequests: function(changeData) { 2560 const cb = function(acc, change) { 2561 if (!change.id && !change.line) return acc; 2562 if (changeData) { 2563 const id = changeData.id; 2564 const line = changeData.__line || changeData.line; 2565 const isUpgradeItem = change.line === line || (id && change.id === id); 2566 if (isUpgradeItem) return acc; 2567 } 2568 2569 delete change.__variantId; 2570 acc.push(this.changeCart(change, 'chain')); 2571 2572 return acc; 2573 }; 2574 2575 return this.data.changes.reduce(cb.bind(this), []); 2576 }, 2577 _requestChain: function(allRequests) { 2578 return function(resolve, reject) { 2579 if (!allRequests.length) return resolve(false); 2580 !function createRequest() { 2581 const req = allRequests.pop(); 2582 const cb = function(res) { 2583 if (allRequests.length) return createRequest(); 2584 resolve(res); 2585 }; 2586 2587 return req().then(cb).catch(reject); 2588 }(); 2589 } 2590 }, 2591 _getOptions: function(type, data, isUpgrade) { 2592 const options = Object.assign({}, this.options[type]); 2593 options.data = isUpgrade ? data.updateData : (data || this.payload); 2594 return options; 2595 } 2596}; 2597const UpdaterPayload = { 2598 buildPayload: function() { 2599 this.getUpdates(); 2600 this.getAttributes(); 2601 this.getCurrency(); 2602 this.getNote(); 2603 2604 Object.keys(this.payload).forEach(function(key) { 2605 this.payload[key] = this.data[key]; 2606 }.bind(this)); 2607 2608 return this.payload; 2609 }, 2610 getUpdates: function() { 2611 this.updateElements.forEach(function(item) { 2612 const isNoId = !item || (!item.dataset.id && !item.id); 2613 if (isNoId) return; 2614 2615 const quantity = +item.value; 2616 const line = this._getLine(item); 2617 const key = this._getKey(item); 2618 const id = this._getId(item); 2619 const isIdMissing = id.toString().length < 3; 2620 2621 this._saveLineItem(id, key, line, quantity); 2622 if (this.data.updates[id] || isIdMissing) this._saveSameId(id); 2623 this._saveChanges(); 2624 if (~this.data.sameIds.indexOf(id) || isIdMissing) return; 2625 this._saveUpdates(id, quantity); 2626 }.bind(this)); 2627 2628 return this.data.updates; 2629 }, 2630 getAttributes: function() { 2631 if (!this.attributesElements.length) return {}; 2632 2633 const cb = function(acc, item) { 2634 const attribute = this._getAttribute(item); 2635 if (!attribute.key) return acc; 2636 2637 acc[attribute.key] = attribute.value; 2638 return acc; 2639 }; 2640 2641 this.data.attributes = this.attributesElements.reduce(cb.bind(this), {}); 2642 return this.data.attributes; 2643 }, 2644 getCurrency: function() { 2645 if (!this.currencyElement) return this.data.currency; 2646 this.data.currency = this.currencyElement.value; 2647 return this.data.currency; 2648 }, 2649 getNote: function() { 2650 if (!this.noteElement) return ''; 2651 this.data.note = this.noteElement.value; 2652 return this.data.note; 2653 } 2654}; 2655const UpdaterPrecheckout = { 2656 acceptAddOffer: function(data) { 2657 return this.updateCart().then(this.addToCart.bind(this, data)); 2658 }, 2659 acceptUpgradeOffer: function(addData, cartItem, cartItemLine) { 2660 const data = this._getUpgradeOfferData(cartItem, cartItemLine); 2661 const changeData = Object.assign({}, data.changeData); 2662 delete changeData.__line; 2663 2664 return this.updateCart(data, 'upgrade') 2665 .then(this.changeCart.bind(this, changeData)) 2666 .then(this.addToCart.bind(this, addData)); 2667 }, 2668 _getUpgradeOfferData: function(cartItem, cartItemLine) { 2669 const udpateData = Object.assign({}, this.payload); 2670 const lineItemByKey = this.data.lineItems.find(function(item) { 2671 return item.id === cartItem.key; 2672 }); 2673 const lineItemById = this.data.lineItems.find(function(item) { 2674 return item.__variantId === cartItem.id; 2675 }); 2676 const lineItem = lineItemByKey || lineItemById; 2677 const quantity = lineItem.quantity ? lineItem.quantity - 1 : 0; 2678 const changeData = { 2679 // __line: cartItemLine, 2680 // id: cartItem.key, 2681 line: cartItemLine, 2682 quantity: quantity 2683 }; 2684 2685 delete udpateData.updates[cartItem.id]; 2686 2687 return { 2688 updateData: udpateData, 2689 changeData: changeData 2690 }; 2691 } 2692}; 2693const UpdaterElements = { 2694 get forms() { 2695 const forms = document.querySelectorAll(this.selectors.form); 2696 const visibleForms = this.arrayFrom(forms).filter(function(form) { 2697 return form.offsetHeight; 2698 }); 2699 2700 return visibleForms; 2701 }, 2702 get form() { 2703 const isNotePresent = this.forms.some(function(e) { 2704 return e.note && e.note.value; 2705 }); 2706 const filteredForm = this.forms.find(function(form) { 2707 return form.querySelector(this.selectors.updates) && (isNotePresent ? form.note && form.note.value : true); 2708 }.bind(this)); 2709 2710 return filteredForm; 2711 }, 2712 get updateElements() { 2713 const arr = this.arrayFrom(this.form.querySelectorAll(this.selectors.updates)); 2714 2715 return arr.filter(function(item) { 2716 return item && !item.disabled; 2717 }); 2718 }, 2719 get attributesElements() { 2720 const nodeList = this.form.querySelectorAll(this.selectors.attributes); 2721 return this.arrayFrom(nodeList); 2722 }, 2723 get noteElement() { 2724 return this.form.querySelector(this.selectors.note); 2725 }, 2726 get currencyElement() { 2727 return document.querySelector(this.selectors.currency); 2728 } 2729}; 2730const UpdaterHelpers = { 2731 resolve: function(res) { 2732 return new Promise(function(resolve) { resolve(res); }); 2733 }, 2734 arrayFrom: function(nodeList) { 2735 if (!(nodeList instanceof NodeList)) nodeList = [nodeList]; 2736 return Array.prototype.slice.call(nodeList); 2737 }, 2738 _getLine: function(item) { 2739 return +(item.dataset.quantityItem || item.dataset.lineId); 2740 }, 2741 _getKey: function(item) { 2742 const match = this.regs.key.exec(item.dataset.id || item.id); 2743 return match && match[1]; 2744 }, 2745 _getId: function(item) { 2746 const match = this.regs.id.exec(item.dataset.id || item.id); 2747 return match && +match[1]; 2748 }, 2749 _saveSameId: function(id) { 2750 delete this.data.updates[id]; 2751 this.data.sameIds.push(id); 2752 }, 2753 _saveLineItem: function(id, key, line, quantity) { 2754 const lineItem = { 2755 __variantId: id, 2756 quantity: quantity, 2757 }; 2758 2759 if (line) lineItem.line = line; 2760 else if (key) lineItem.id = key; 2761 2762 this.data.lineItems.push(lineItem); 2763 }, 2764 _saveChanges: function() { 2765 this.data.changes = this.data.lineItems.filter(function(item) { 2766 return ~this.data.sameIds.indexOf(item.__variantId); 2767 }.bind(this)); 2768 }, 2769 _saveUpdates: function(id, quantity) { 2770 this.data.updates[id] = quantity; 2771 }, 2772 _getAttribute: function(item) { 2773 const match = this.regs.attributes.exec(item.name); 2774 if (!match) return {}; 2775 return { key: match[1], value: item.value }; 2776 }, 2777 get needCurrencyUpdate() { 2778 return this.currencyElement && this.currencyElement.value !== this.data.currency; 2779 }, 2780 get isNoteChanged() { 2781 return this.form && this.res && (this.res.data.cart.note !== this.getNote()); 2782 }, 2783 get hasAttributes() { 2784 return this.form && Object.keys(this.getAttributes()).length; 2785 } 2786}; 2787 2788[UpdaterRequests, UpdaterPayload, UpdaterPrecheckout, UpdaterElements, UpdaterHelpers] 2789.forEach(function(module) { 2790 Updater.prototype = Object[appendChain](Updater.prototype, module); 2791}); 2792 2793function Cart() { 2794 var self = this; 2795 2796 this.add = function(form, button, data) { 2797 if (form) { 2798 var noId = function(serialized) { return !/id/.test(serialized); }; 2799 2800 data = self.serialize(form); 2801 2802 if (noId(data)) { 2803 data = self.serialize(document.querySelector('#AddToCartForm')); 2804 } 2805 2806 if (noId(data)) { 2807 var idOnBtn = document.querySelector('[data-cart-add]'); 2808 if (idOnBtn) data = 'id=' + idOnBtn.dataset.cartAdd; 2809 } 2810 } 2811 2812 var options = { 2813 method: 'post', 2814 url: '/cart/add.js', 2815 data: data 2816 }; 2817 2818 return ajax.request(options); 2819 }; 2820 2821 this.bulkAdd = function(data) { 2822 var options = { 2823 method: 'post', 2824 url: '/cart/update.js', 2825 data: data 2826 }; 2827 2828 return ajax.request(options) 2829 }; 2830 2831 this.get = function() { 2832 var options = { 2833 method: 'get', 2834 url: '/cart.js' 2835 }; 2836 2837 return ajax.request(options); 2838 }; 2839 2840 this.update = function(res) { 2841 return new Updater(res).init(); 2842 }; 2843 2844 this.save = function(res) { 2845 // if (self.needCurrencyUpdate()) self.updateCurrency(); 2846 self.disableMultiUpdate(res.data.cart.items); 2847 self.saveTags(res); 2848 2849 // if (!lqd.is_precheckout && lqd.is_ajax_precheckout && !utils.cookie.get('ocu_countdown_start')) { 2850 // return window.OCUPrecheckout({ utils: utils }); 2851 // } 2852 2853 lqd.cart_products_json = res.data.cart_products; 2854 lqd.cart_collections_json = res.data.cart_collections; 2855 lqd.subscription_products_json = res.data.subscription_products; 2856 lqd.subscription_variants_json = res.data.subscription_variants; 2857 2858 return self.resolve(res); 2859 }; 2860 2861 this.modify = function(res) { 2862 const cart = res.cart || res.data.cart || res.data; 2863 2864 // res.data = self.helpers.filterFields(cart); 2865 res.data = cart; 2866 res.data.subscription_products = lqd.subscription_products_json; 2867 res.data.cart_collections = lqd.cart_collections_json; 2868 res.data.cart_products = lqd.cart_products_json.filter(function(item) { return !item.error; }); 2869 res.data.customer_id = lqd.customer_id; 2870 res = self.helpers.addBuyXGetYDiscount(res); 2871 if (cart.cart_level_discount_applications) res.data.automatic_discount = cart.cart_level_discount_applications[0]; 2872 2873 return res; 2874 }; 2875 2876 this.serialize = function(form) { 2877 return /trident|edge/i.test(navigator.userAgent) 2878 ? utils.serializeFormEdge(form) 2879 : utils.serializeForm(form); 2880 }; 2881 2882 this.attrubutes = function(attr) { 2883 const options = { 2884 method: 'post', 2885 url: '/cart/update.js', 2886 data: { attributes: attr } 2887 }; 2888 2889 ajax.request(options); 2890 }; 2891 2892 this.prepareUpdate = function(items) { 2893 var handle = function(acc, item) { 2894 var id = item.id.replace(/(\w+_)(\d+)(:\w+)/, '$2'); 2895 acc[id] = item.value; 2896 2897 return acc; 2898 }; 2899 2900 items = items.length ? items : [items]; 2901 2902 var updates = Array.prototype.reduce.call(items, handle, {}); 2903 2904 return { 2905 updates: updates, 2906 currency: lqd.shop_currency 2907 }; 2908 }; 2909 2910 this.saveTags = function(res) { 2911 var tags = res.data.cart_products.reduce(function(acc, product) { 2912 return acc.concat(product.tags); 2913 }, []); 2914 2915 utils.store.set('tags', tags); 2916 }; 2917 2918 this.disableMultiUpdate = function(lineItems) { 2919 const inputs = document.querySelectorAll('input[name="updates[]"]'); 2920 const offer = utils.store.get('offer'); 2921 const isAdd = offer === 'add'; 2922 2923 if (isAdd && lineItems.length === inputs.length + 1) return; 2924 if (!isAdd && lineItems.length === inputs.length) return; 2925 2926 Array.prototype.forEach.call(inputs, function(input) { 2927 if (!input.offsetHeight) input.disabled = true; 2928 }); 2929 }; 2930 2931 this.state = function(e) { 2932 if (e.target.name !== 'updates[]') return; 2933 utils.store.set('cartChanged', true); 2934 }; 2935 2936 this.resolve = function(res) { 2937 return new Promise(function(resolve) { resolve(res); }); 2938 }; 2939 2940 this.needCurrencyUpdate = function() { 2941 return document.querySelector('[name="currency"]'); 2942 }; 2943 2944 this.updateCurrency = function() { 2945 var options = { 2946 method: 'post', 2947 url: '/cart/update.js', 2948 data: { currency: lqd.shop_currency } 2949 }; 2950 2951 ajax.request(options).then(function() { utils.store.set('cartChanged', false); }); 2952 }; 2953 2954 this.isNotePresent = function(forms) { 2955 return Array.prototype.some.call(forms, function(e) { return e.note && e.note.value }); 2956 }; 2957 2958 this.filterFormsIfNotes = function(forms, isNotePresent) { 2959 var handle = function(form) { 2960 return form['updates[]'] && (isNotePresent ? form.note && form.note.value : true); 2961 }; 2962 2963 return Array.prototype.filter.call(forms, handle)[0]; 2964 }; 2965 2966 this.error = function(e) { 2967 var desc = e.data.description; 2968 2969 if (e.status !== 422) return alert(desc || 'Something went wrong. Please try again.'); 2970 2971 var allInCart = /all/i.test(desc); 2972 var soldOut = /sold out/i.test(desc); 2973 2974 alert(desc); 2975 2976 if (allInCart) return self.checkout({ redirect: true }); 2977 if (soldOut) location.reload(); 2978 }; 2979}; 2980 2981var SyncQtyFields = { 2982 init: function() { 2983 if (!lqd.upsell_cart_include_upsells) return; 2984 if (!this.fields.length) return; 2985 this.listenEvents(); 2986 }, 2987 get fields() { 2988 return document.querySelectorAll('[data-quantity-item]'); 2989 }, 2990 getFiledsForUpdate: function(target) { 2991 var id = this.getId(target); 2992 var elems = document.querySelectorAll('[data-quantity-item="' + id + '"]'); 2993 var arr = this.getArray(elems); 2994 2995 return arr; 2996 }, 2997 getId: function(target) { 2998 return target.dataset.quantityItem; 2999 }, 3000 getArray: function(nodeList) { 3001 return Array.prototype.slice.call(nodeList); 3002 }, 3003 update: function(target, value) { 3004 this.getFiledsForUpdate(target).forEach(function(field) { 3005 field.value = value; 3006 }); 3007 }, 3008 handle: function(e) { 3009 this.update(e.target, e.target.value); 3010 }, 3011 listenEvents: function(e) {
3012 this.getArray(this.fields).forEach(function(field) { 3013 field.addEventListener('input', this.handle.bind(this)); 3014 }.bind(this)); 3015 } 3016}.init(); 3017 3018function SkipCart() { 3019 var self = this; 3020 3021 if (lqd.themePopup && lqd.isThemePopupTag) return; 3022 // if (/product/.test(lqd.template_name) && !lqd.upsell_cart_include_upsells) return; 3023 3024 this.init = function() { 3025 var isSkipCartPage = /index|collection|product/.test(lqd.template_name); 3026 lqd.skip_cart && isSkipCartPage && setTimeout(function() { self.removeEvents(); }); 3027 }; 3028 3029 this.removeEvents = function() { 3030 let forms = document.querySelectorAll('form[action*="cart"], [data-zp-add-to-cart-form], #AddToCartForm1'); 3031 forms = Array.prototype.filter.call(forms, function(form) { return form.dataset.zpLinkType !== 'zipify_page'; }); 3032 var elems = []; 3033 3034 var fakeForms = document.querySelectorAll('.product-form__cart'); 3035 // TODO: move selectors to store 3036 if (fakeForms.length) { 3037 var getArr = function(nodeList) { return Array.prototype.slice.call(nodeList); }; 3038 forms = getArr(forms).concat(getArr(fakeForms)); 3039 } 3040 3041 Array.prototype.forEach.call(forms, function(form) { 3042 var buttons = form.querySelectorAll('*[type="submit"], input[type="button"], button'); 3043 3044 Array.prototype.forEach.call(buttons, function(button) { 3045 elems.push({ 3046 button: button, 3047 sibling: button.previousElementSibling, 3048 parent: button.parentElement 3049 }); 3050 }); 3051 }); 3052 3053 elems.forEach(function(item) { 3054 if (item.button.dataset.qty) return; 3055 if (item.button.getAttribute('aria-controls')) return; 3056 if (/plus|minus|zpa-quantity/.test(item.button.className)) return; 3057 if (/error_txt|quantity|sold-out/i.test(item.button.id)) return; 3058 if (/amount|review/i.test(item.button.value)) return; 3059 3060 item.button.removeAttribute('onclick'); 3061 item.button.dataset.skipCart = true; 3062 item.button.type = 'button'; 3063 3064 // try { 3065 // item.sibling 3066 // ? item.sibling.insertAdjacentHTML('afterend', item.button.outerHTML) 3067 // : item.parent.insertAdjacentHTML('afterbegin', item.button.outerHTML); 3068 // } catch (e) { console.warn(e); } 3069 3070 // item.button.dataset.ocuClone = true; 3071 // item.button.classList.add('ocu-hidden'); 3072 }); 3073 3074 self.listenEvents(forms); 3075 }; 3076 3077 this.onSuccess = function(res) { 3078 if (self.integrations.recharge.isSubscription(res)) return location = '/cart'; 3079 3080 var handle = function(item) { return item.properties && item.properties.frequency_num; }; 3081 utils.store.set('cart_token', res.data.token); 3082 3083 var isBoldSubscription = res.data.items.some(handle); 3084 3085 if (!isBoldSubscription) return self.verify.init(); 3086 3087 try { 3088 self.integrations.bold(form, res.token); 3089 } catch (e) { 3090 console.warn(e); 3091 self.verify.init(); 3092 } 3093 }; 3094 3095 this.onError = function(form) { 3096 form.submit(); 3097 }; 3098 3099 this.listenEvents = function(forms) { 3100 Array.prototype.forEach.call(forms, function(form) { 3101 var buttons = form.querySelectorAll('[data-skip-cart]'); 3102 3103 Array.prototype.forEach.call(buttons, function(button) { 3104 button.addEventListener('click', function(e) { 3105 if (self.integrations.isBoldRecuring()) { 3106 return self.integrations.boldRecurring(); 3107 } 3108 3109 e.stopImmediatePropagation(); 3110 e.stopPropagation(); 3111 e.preventDefault(); 3112 button.disabled = true; 3113 3114 if (!button.closest('form')) form = document.querySelector('form[action="/cart/add"]'); 3115 3116 self.cart.add(form, button) 3117 .then(self.cart.get) 3118 .then(self.onSuccess) 3119 .catch(self.onError.bind(null, form)); 3120 }); 3121 }); 3122 }); 3123 }; 3124 3125 this.init(); 3126} 3127 3128function BuyNow(e) { 3129 const self = this; 3130 3131 if (lqd.themePopup && lqd.isThemePopupTag) return; 3132 if (!e.isTrusted) return; 3133 3134 const form = e.target.closest('form[action="/cart/add"]') || document.querySelector('form[action="/cart/add"]'); 3135 if (!form) return; 3136 3137 e.stopImmediatePropagation(); 3138 e.preventDefault(); 3139 e.target.disabled = true; 3140 3141 const cb = function() { self.checkout({ redirect: true }) }; 3142 const onError = function(form) { form.submit() }; 3143
3144 self.cart.add(form, e.target).then(cb).catch(onError.bind(null, form)); 3145} 3146 3147function PublicMethod() { 3148 var self = this; 3149 var proto = self.__proto__.__proto__; 3150 3151 this.init = function() { 3152 window.oneClickUpsellGetCheckoutUrl = proto.checkout = self.create; 3153 }; 3154 3155 this.create = function(config) { 3156 if (config === 'skip_cart') { 3157 return new Promise(function(resolve) { resolve(lqd.skip_cart); }); 3158 } 3159 3160 self.prepare(config); 3161 return self.check(); 3162 }; 3163 3164 this.prepare = function(config) { 3165 const params = utils.store.get('params'); 3166 self.config = config || {}; 3167 self.config.incarts && utils.store.set('incarts', self.config.incarts); 3168 self.config.path && utils.store.set('amazonPath', self.config.path); 3169 self.config.button && self.helpers.payPal(self.config.button); 3170 self.config.params && self.params(); 3171 self.integrations.discounts(); 3172 self.helpers.params(); 3173 self.handleDeclineOffer(config); 3174 3175 params.str = params.str ? '?' + params.str : ''; 3176 utils.store.set('params', params); 3177 }; 3178 3179 this.check = function() { 3180 return self.verify.data() 3181 .then(self.cart.save) 3182 .then(self.cart.update) 3183 .then(self.verify.upsells) 3184 .then(self.resolve) 3185 .catch(self.resolve); 3186 }; 3187 3188 this.resolve = function(res) { 3189 const isError = res instanceof Error; 3190 if (isError) console.log(res); 3191 3192 res = (isError || !res) ? {} : (res.data || res.response); 3193 const data = self.build(res); 3194 utils.store.set('isPermalinkHandling', false); 3195 3196 const recharge = self.integrations.recharge; 3197 if (recharge.needRedirect(isError, lqd, data)) return recharge.redirect(); 3198 3199 return self.config.redirect 3200 ? self.redirect(data) 3201 : new Promise(function(resolve) { resolve(data); }); 3202 }; 3203 3204 this.build = function(res) { 3205 const isEnabled = this._isEnabled(res); 3206 const params = utils.store.get('params'); 3207 const amazonPath = utils.store.get('amazonPath') && utils.store.get('amazonPath')[isEnabled ? 'ocu' : 'shopify']; 3208 3209 const result = { 3210 status: isEnabled, 3211 checkout_url: (isEnabled ? res.checkout_url : '/checkout') + params.str, 3212 skip_cart: lqd.skip_cart, 3213 redirect_url: amazonPath || res.redirect_url || utils.store.get('redirect_url') 3214 }; 3215 3216 params.str = ''; 3217 utils.store.set('params', params); 3218 3219 return result; 3220 }; 3221 3222 this.params = function() { 3223 var params = utils.store.get('params'); 3224 3225 self.config.params 3226 .map(function(param) { 3227 return Object.keys(param).map(function(key) { 3228 return { 3229 name: encodeURIComponent(key), 3230 value: key === 'discount' ? param[key] : encodeURIComponent(param[key]) 3231 }; 3232 })[0]; 3233 }) 3234 .forEach(function(param) { 3235 params.arr.push(param); 3236 }); 3237 3238 utils.store.set('params', params); 3239 }; 3240 3241 this.getUrl = function(res) { 3242 if (utils.store.get('amazonPath')) return res.redirect_url; 3243 return res.redirect_url || res.checkout_url; 3244 }; 3245 3246 this.redirect = function(res) { 3247 location = self.getUrl(res); 3248 }; 3249 3250 this.handleDeclineOffer = function(config) { 3251 if (!config || config && !config.incarts) return; 3252 3253 const isDeclined = Object.keys(config.incarts).some(function(key) { 3254 return config.incarts[key].status === 'declined'; 3255 }); 3256 3257 utils.store.set('offerDeclined', isDeclined); 3258 }; 3259 3260 this._isEnabled = function(res) { 3261 return res.status ? res.status && !/\d+/.test(res.status) : false; 3262 }; 3263 3264 this.init(); 3265} 3266 3267function Helpers() { 3268 var self = this; 3269 3270 this.disableButtons = function() { 3271 utils.store.set('checkoutButtonState', false); 3272 }; 3273 3274 this.params = function() { 3275 var params = utils.store.get('params'); 3276 3277 for (var i = 0; params.arr.length > i; i++) { 3278 var reg = new RegExp(params.arr[i].name); 3279 if (reg.test(params.str)) continue; 3280 3281 params.str += params.arr[i].name + '=' + params.arr[i].value; 3282 if (i + 1 !== params.arr.length) params.str += '&'; 3283 } 3284 3285 utils.store.set('params', params); 3286 }; 3287 3288 this.redirect = function(res) { 3289 if (res.redirect_url) return location.assign(res.redirect_url); 3290 if (!lqd.subscription_products_size) return location.assign(res.checkout_url); 3291 3292 const form = document.querySelector('form[action="/checkout"], form[action="/cart"]'); 3293 if (!form) return self.checkout({ redirect: true }); 3294 3295 form.submit(); 3296 }; 3297 3298 this.simulateSubmit = function() { 3299 var checkoutButtons = document.querySelectorAll(self.ocuSelectors); 3300 if (!checkoutButtons.length) return location = '/cart'; 3301 3302 var last = Array.prototype.slice.call(checkoutButtons, -1)[0]; 3303 last.dispatchEvent(new MouseEvent('click')); 3304 }; 3305 3306 this.simulateDocumentClick = function() { 3307 var event = new Event('click'); 3308 var target = document.createElement('button'); 3309 3310 target.type = 'submit'; 3311 target.name = 'checkout'; 3312 Object.defineProperty(event, 'target', { value: target }); 3313 3314 document.dispatchEvent(event); 3315 }; 3316 3317 this.preventMouseDown = function(e) { 3318 e.preventDefault(); 3319 e.stopPropagation(); 3320 // e.stopImmediatePropagation(); 3321 }; 3322 3323 this.payPal = function(el) { 3324 if (el.name !== 'goto_pp' || el.value !== 'paypal_express') return; 3325 3326 var params = utils.store.get('params'); 3327 3328 params.arr.push({ 3329 name: el.name, 3330 value: el.value 3331 }); 3332 3333 utils.store.set('requirePayPal', true); 3334 utils.store.set('params', params); 3335 }; 3336 3337 this.filterFields = function(cart) { 3338 var needed_cart_fileds = utils.store.get('neededCartFileds'); 3339 var needed_cart_items_fields = utils.store.get('neededCartItemsFields'); 3340 3341 cart = utils.filterObject(cart, needed_cart_fileds); 3342 3343 cart.items = cart.items.map(function(item) { 3344 return utils.filterObject(item, needed_cart_items_fields); 3345 }); 3346 3347 return cart; 3348 }; 3349 3350 this.filterCartItemFields = function(items) { 3351 return items.map(function(item) { 3352 return Object.keys(item).reduce(function(acc, key) { 3353 if (key === 'product_description') return acc; 3354 acc[key] = item[key]; 3355 return acc; 3356 }, {}); 3357 }); 3358 }; 3359 3360 this.getProxyUrl = function() { 3361 return lqd.proxy_url || utils.store.get('proxy'); 3362 }; 3363 3364 this.checkSelector = function(target) { 3365 if (target.dataset.ocuCheckout === 'true') return target; 3366 3367 const checkoutButtons = document.querySelectorAll(self.ocuSelectors); 3368 const isInclude = Array.prototype.some.call(checkoutButtons, function(item) { 3369 return item === target; 3370 }); 3371 3372 const isCartContentParent = target.closest('.cart_content') && target.closest('form[action="/checkout"] [type="submit"]'); 3373 const isCartTemplate = lqd.template_name === 'cart' && target.closest('form[action="/cart"] [type="submit"]'); 3374 const isCartAction = target.closest(self.ocuSelectors) || isCartContentParent || isCartTemplate; 3375 const notIncartUpsell = !target.closest('#nudge-offer'); // check if triggered Incart Upsell widget triggered 3376 3377 const addToCartButton = (lqd.template_name === 'product' && !target.closest('form[action^="/cart/add"]')) 3378 && (((target.name === 'add' && target.type === 'submit') ? target : null) 3379 || (target.closest('[name="add"]')) && target.closest('[type="submit"]')); 3380 3381 const parent = !isInclude 3382 && (isCartAction || target.closest('[name="checkout"]')) 3383 || addToCartButton; 3384 3385 if ((isInclude || parent) && notIncartUpsell) return isInclude ? target : parent; 3386 }; 3387 3388 this.checkDirectCheckoutButtons = function(target) { 3389 return /\/checkout/.test(target.onclick && target.onclick.toString()) 3390 }; 3391 3392 this.checkAddToCart = function(target) { 3393 if (target.closest('form[action="/cart/add"]')) return true; 3394 }; 3395 3396 this.zpPreventRedirect = function(target) { 3397 const condition = target.dataset.type === 'crm_dest' 3398 || target.dataset.zpProductRedirectLink === '' 3399 || target.dataset.zpAddToCart === '' 3400 || target.closest('[data-type="crm_dest"]') 3401 || target.closest('[data-zp-product-redirect-link]') 3402 || target.closest('[data-zp-add-to-cart]'); 3403 3404 if (condition) return true; 3405 }; 3406 3407 this.isOfferProduct = function() { 3408 return lqd.cart_variants_json.some(function(item) { 3409 return item.properties && item.properties._offer_id; 3410 }); 3411 }; 3412 3413 this.addBuyXGetYDiscount = function(res) { 3414 var discounts = res.data.items.reduce(function(acc, variant) { 3415 if (!variant.discounts[0]) return acc; 3416 let item = { 3417 item_key: variant.key, 3418 discount: variant.discounts, 3419 }; 3420 if (variant.line_level_discount_allocations[0]) item.discount_data = variant.line_level_discount_allocations; 3421 acc.push(item); 3422 return acc; 3423 }, []); 3424 3425 if (discounts.length) res.data.per_item_discounts = discounts; 3426 return res; 3427 }; 3428 3429 this.isBuyNow = function(e) { 3430 const selectors = utils.store.get('classList'); 3431 return e.target.classList.contains(selectors.buyNow) && !e.target.classList.contains(selectors.buyNowBranded); 3432 }; 3433} 3434 3435[Helpers, Integrations, Verify, Cart, PublicMethod, SkipCart, BuyNow].forEac
3435h(function(item) { 3436 Object.setPrototypeOf(item.prototype, Application.prototype); 3437}); 3438 3439const script = document.createElement('script'); 3440document.head.appendChild(script); 3441script.src = ocuCdn + '/axios.min.js'; 3442script.onload = function() { 3443 if (window.axios) return new Application(); 3444 if (window.require) { 3445 require([ocuCdn + '/axios.min.js'], function(e) { 3446 window.axios = e; 3447 new Application(); 3448 }); 3449 } 3450}; 3451 3452function requireOptionSelectors() { 3453 if (window.Shopify && Shopify.OptionSelectors) return; 3454 3455 const s = document.createElement('script'); 3456 document.head.appendChild(s); 3457 s.src = OCUIncart.option_selection; 3458} 3459 3460function Store() { 3461 var _private = { 3462 store: { 3463 ocuSelectors: '[name="checkout"], [href^="/checkout"], form[action^="/checkout"] [type="submit"], #checkout, [name="goto_pp"], .checkout_button, .checkout-button, [value="Checkout"], .cart-button-checkout, #btn-checkout, .ajaxCart-checkout-btn', 3464 addToCartButton: '[name="add"]', 3465 proxy: '/apps/secure-checkout', 3466 lqdCart: '/upsellapp_cart', 3467 checkUpsells: '/check_upsells', 3468 neededCartFileds: ['token','note','attributes','items', 'currency', 'cart_level_discount_applications'], 3469 neededCartItemsFields: ['product_id','variant_id','quantity','grams','price','line_price','title','properties','vendor','sku','key'], 3470 permalink: /cart\/(\d+:\d+(?:,\d+:\d+)*)(?:[?&]discount=([-\w! %205]+))*/, 3471 isAddToCartClicked: false, 3472 cartChanged: false, 3473 cartUpdated: false, 3474 requirePayPal: false, 3475 checkoutButtonState: false, 3476 submitted: false, 3477 amazonPayInitiated: false, 3478 redirect_url: null, 3479 offer: null, 3480 offerDeclined: false, 3481 incarts: {}, 3482 tags: [], 3483 isPermalinkHandling: false, 3484 cart_token: null, 3485 classList: { 3486 buyNow: 'shopify-payment-button__button', 3487 buyNowBranded: 'shopify-payment-button__button--branded' 3488 }, 3489 params: { 3490 str: '', 3491 arr: [] 3492 }, 3493 fallback: { 3494 timeout: 15000, 3495 id: 0 3496 }, 3497 XHR: { 3498 send: XMLHttpRequest.prototype.send 3499 } 3500 }, 3501 event: function(e) { 3502 return new Event('store:' + e); 3503 }, 3504 emit: function(e) { 3505 document.dispatchEvent(this.event(e)); 3506 } 3507 }; 3508 3509 this.get = function(key) { 3510 return _private.store[key]; 3511 }; 3512 3513 this.set = function(key, val) { 3514 if (!_private.store.hasOwnProperty(key)) return console.error('Unavailable key! ', key); 3515 _private.emit(key); 3516 _private.store[key] = val; 3517 }; 3518 3519 this.listen = function(e) { 3520 return new Promise(function(resolve) { 3521 document.addEventListener('store:' + e, resolve); 3522 }); 3523 }; 3524} 3525 3526}(); 3527</script>
3527 3528 3529 3530
3531<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
3531 3532</body> 3533 3534</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.