const loadScriptCartx = function (url, callback) { const script = document.createElement('script'); script.type = 'text/javascript'; // If the browser is Internet Explorer. if (script.readyState) { script.onreadystatechange = function () { if (script.readyState === 'loaded' || script.readyState === 'complete') { script.onreadystatechange = null; callback(); } }; // For any other browser. } else { script.onload = function () { callback(); }; } script.src = url; document.getElementsByTagName('head')[0].appendChild(script); }; if (!window.jQuery || typeof jQuery == 'undefined' || jQuery == null) { loadScriptCartx('https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js', () => { console.log('cartx jQuery loaded'); mainCartpandaRedirect(); }); } else { mainCartpandaRedirect(); } function mainCartpandaRedirect() { let available_languages = {"global store default":"en","br":"pt-BR","pt-br":"pt-BR","us":"en","es":"es","bo":"es","cl":"es","cr":"es","cu":"es","do":"es","sv":"es","gt":"es","hn":"es","mx":"es","ni":"es","pa":"es","pe":"es","pr":"es","ve":"es","py":"es","uy":"es","ar":"es-ar","co":"es-co","fr":"fr","de":"de","nl":"nl"}, loading_cart_message_global = {"pt-BR":"Carregando carrinho seguro","br":"Carregando carrinho seguro","en":"Loading secure cart","de":"Sicherer Warenkorb wird geladen","es":"Cargando carrito seguro","es-ar":"Cargando carrito seguro","es-co":"Cargando carrito seguro","fr":"Chargement du chariot s\u00e9curis\u00e9","nl":"Beveiligde winkelwagen laden"}, cart_loading_message = 'Carregando carrinho seguro'; // Don't change this variable let cart_is_global_market = 0; var currentPage = 'index', cartEndpoint = 'https://rennval.oncartx.io/shopify/cart', shopName = 'sparkesportes-5636.myshopify.com', shop = 'https://sparkesportes.com.br', has_multiple_buttons = '0', show_spinner = '1' window.cartxCheckoutUrl = ''; var remove_cart_item = 1; var keyAnimationcss = ''; var getHtmlHead = document.getElementsByTagName('head')[0]; getHtmlHead.insertAdjacentHTML('beforeend', keyAnimationcss); var checkoutBtncss = ''; var e_param = ''; var eParamInterval = setInterval(function() { if(getEParam()) { e_param = getEParam(); } if(e_param) { clearInterval(eParamInterval); } }, 100); var utmParamInterval = setInterval(function() { var u_param = ''; if(getUtmParam()) { u_param = getUtmParam(); e_param += u_param; } if(u_param) { clearInterval(utmParamInterval); } }, 100); var srcParamInterval = setInterval(function() { var src_param = ''; if(getSrcParam()) { src_param = getSrcParam(); e_param += src_param; } if(src_param) { clearInterval(srcParamInterval); } }, 100); function showCartxLoader() { var el = document.querySelector('.cartx-loader'); el.style.display = 'block'; } function hideCartxLoader() { var el = document.querySelector('.cartx-loader'); el.style.display = 'none'; } // Cart if (currentPage == 'cart') { cartRedirect(); } function getAjax(url, success) { var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP'); xhr.open('GET', url); xhr.onreadystatechange = function() { if (xhr.readyState > 3 && xhr.status==200) success(xhr.responseText); }; // xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); xhr.send(); return xhr; } function postAjax(url, data, success) { var params = typeof data == 'string' ? data : Object.keys(data).map( function(k){ return encodeURIComponent(k) + '=' + encodeURIComponent(data[k]) } ).join('&'); var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); xhr.open('POST', url); xhr.onreadystatechange = function() { if (xhr.readyState>3 && xhr.status==200) { success(xhr.responseText); } else { if(xhr.status != 200) { hideCartxLoader(); } } }; // xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); // xhr.setRequestHeader('Content-Type', 'application/json'); xhr.send(params); return xhr; } function shuffle(s) { s = s.toString(); var arr = s.split(''); // Convert String to array arr.sort(function() { return 0.5 - Math.random(); }); s = arr.join(''); // Convert Array to string return s; // Return shuffled string } // Product var cartxData = ''; var cartEndpointResponse = null; var cartXButtonRemoved = 0; var btnSelectors = 'input[name="add"] , button[name=\'add\'], #add-to-cart, .add-to-cart, #AddToCartText ,#AddToCart, .ProductForm__AddToCart, .shopify-payment-button__button, .shopify-payment-button__button--unbranded'; if (window.$ || window.jQuery) { var checkoutButtons = $('.btn-checkout'); checkoutButtons.each(function () { var t = $(this); if (t.attr('onclick') == "window.location='/checkout'") { t.attr('onclick', "window.location='/cart'"); } }); if (currentPage == 'product' || currentPage == 'index') { productRedirect(); } } /* * Add event to detect when cart re renders * window.onpageshow = function() { document.documentElement.dispatchEvent(new CustomEvent('cart:refresh')) }; * Prestige Theme V4 has an event that re renders cart, deleting elements * This is to detect deletion and add back cartpanda buttons. */ document.addEventListener('cart:refresh', function (e) { if (currentPage == 'cart') { var getForm = document.getElementsByTagName('form'); for (var i = 0; i < getForm.length; i++) { const observer = new MutationObserver(function (mutationsList) { mutationsList.forEach(function (mutation) { mutation.removedNodes.forEach(function (removedNode) { if (removedNode?.classList?.contains('cartx-CrtpageMainFrm')) { observer.disconnect(); if (cartEndpointResponse && cartXButtonRemoved == 0) { cartXButtonRemoved = 1; handleCartEndpointResponse(cartEndpointResponse); } } }); }); }); observer.observe(getForm[i].parentNode, { subtree: true, attributes: true, attributeFilter: ['class'], childList: true, characterData: false }); } } }); function fakeClick(event) { event.preventDefault(); showCartxLoader(); getAjax('/cart.json', function (response) { var cartPayload = JSON.parse(response); var cartPayload = removeArrayKey(cartPayload); var data = { shop: shopName, host_name: window.location.host, cart_payload: cartPayload }; postAjax(cartEndpoint, JSON.stringify(data), function (response) { var resp = JSON.parse(response); if(remove_cart_item) { jQuery.ajax({ type: "POST", url: "/cart/clear.js", success: function () { window.location.href = resp.checkout_direct_url+e_param; }, dataType: "json" }); } else { window.location.href = resp.checkout_direct_url+e_param; } }); }); } function attachATCButtonHandler(cartxData) { var btn_selectors = $(btnSelectors); btn_selectors.removeAttr('disabled'); if (cartxData && cartxData.skip_cart) { btn_selectors.addClass("cartx_mainBtn cartx_elem_0"); console.log('ATC cartx event ready'); $('.cartx_mainBtn').on('click', function(event) { event.preventDefault(); const formSelector = 'form[action$="/cart/add"]'; var form_count = $(formSelector).length; if (typeof form_count != 'undefined' && form_count <= 1) { var form = $(formSelector); } else { var form = $(this).parents(formSelector); } console.log('form', form); $.post("/cart/add.js", $(form).serialize(), function( data, status, XHR ) {}).always(function() { window.location.href = '/cart?ref=cartx_buy_button' + e_param }); }); } } function productRedirect() { var btn_selectors = $(btnSelectors); btn_selectors.attr('disabled', true); fetch(cartEndpoint + '?shop=' + shopName) .then(response => response.json()) .then(json => attachATCButtonHandler(json)) .catch(err => btn_selectors.removeAttr('disabled') && console.log(err)); } function redirectGracefully(resp, e_param) { if (resp.remove_cart_item) { jQuery.ajax({ type: "POST", url: "/cart/clear.js", success: function () { window.location.href = resp.checkout_direct_url + e_param; }, dataType: "json" }); } else { window.location.href = resp.checkout_direct_url + e_param; } } function handleCartEndpointResponse(resp) { remove_cart_item = resp.remove_cart_item; if (!resp.active) { hideCartxLoader(); } else { var otherButtons = document.getElementsByClassName('cartx_check_mainBtn'); for (var i = 0; i < otherButtons.length; i ++) { otherButtons[i].setAttribute('style', 'display: none !important'); } window.cartxCheckoutUrl = resp.checkout_direct_url+e_param; var isFacebook = isFacebookApp(); var isAndroid = isAndroidApp(); if (resp.skip_cart && resp.checkout_direct_url != '' && isFacebook == false && isAndroid == false) { redirectGracefully(resp, e_param); } else if (resp.skip_cart && resp.checkout_direct_url != '' && isFacebook == true && isAndroid == false) { redirectGracefully(resp, e_param); } else if (resp.skip_cart && resp.checkout_direct_url != '' && isFacebook == false && isAndroid == true) { redirectGracefully(resp, e_param); } else { if (resp.checkout_direct_url != '' && localStorage.getItem('buynow') === "true") { // Limpa o carrinho do Shopify if(remove_cart_item) { postAjax('/cart/clear.js', JSON.stringify({}), function () { localStorage.setItem('buynow', false); window.location.href = resp.checkout_direct_url+e_param; }); } else { localStorage.setItem('buynow', false); window.location.href = resp.checkout_direct_url+e_param; } } else { hideCartxLoader(); var getHead = document.getElementsByTagName('head')[0]; getHead.insertAdjacentHTML('beforeend', checkoutBtncss); var getForm = document.getElementsByTagName('form'); var cartFrmId,getCheckoutBtn; var buttonAdded = 0; var prevent_add_button = 0; if(typeof has_multiple_buttons != 'undefined') { prevent_add_button = has_multiple_buttons; } for (var i = 0; i < getForm.length; i++) { var formAction = getForm[i].action; formAction = formAction.split(shop); var url_value = ''; if(typeof formAction[1] != 'undefined') { url_value = formAction[1]; } if (formAction.includes('/cart') == true || formAction[0].includes('/cart') == true || formAction.indexOf('/cart') !== -1 || url_value.indexOf('/cart') !== -1 || formAction.includes('/checkout') == true || formAction[0].includes('/checkout') == true || formAction.indexOf('/checkout') !== -1 || url_value.indexOf('/checkout') !== -1) { if (getForm[i].getAttribute('id')){ cartFrmId = getForm[i].getAttribute('id'); } else { getForm[i].setAttribute('id','cartx-CrtpageMainFrm'); cartFrmId = getForm[i].getAttribute('id'); } getForm[i].classList.add('cartx-CrtpageMainFrm'); getCheckoutBtn = getForm[i].elements['checkout'] || getForm[i].querySelector('a[href="/checkout"]') || getForm[i].querySelector('a[href="/checkout"]') || getForm[i].querySelector('form[action="/cart"] input[type="submit"]') || getForm[i].querySelector('form[action="/checkout"] button[type="submit"]') || getForm[i].querySelector('button[type="submit"]') || getForm[i].querySelector('form[action="/cart"] button[type="submit"]') || getForm[i].querySelector('form[action="/cart"] button[type="button"]'); if(getCheckoutBtn != null) { var button_width = 'auto'; if (getCheckoutBtn.length == undefined) { var buttonValue = getCheckoutBtn.value ? getCheckoutBtn.value : getCheckoutBtn.innerHTML; var button_width = getCheckoutBtn.style.width; } else { var lastBtnID = getCheckoutBtn.length - 1; var button_width = getCheckoutBtn[lastBtnID].style.width; var buttonValue = getCheckoutBtn[lastBtnID].value ? getCheckoutBtn[lastBtnID].value : getCheckoutBtn[lastBtnID].innerHTML; } var getSubBtnId = getCheckoutBtn.id; if (getSubBtnId) { getSubBtnId = getSubBtnId+'cartxButton'; } else { getSubBtnId = 'cartxBtn'; } var d = new Date(); var time = shuffle(d.getTime()); getSubBtnId = getSubBtnId+time; if (getCheckoutBtn.length == undefined) { if(buttonAdded == 0) { var inptBtn = ``; getCheckoutBtn.insertAdjacentHTML('afterEnd', inptBtn); if(prevent_add_button == 0) { buttonAdded++; } document.getElementById(getSubBtnId).addEventListener('click', fakeClick); if (resp.skip_cart && resp.checkout_direct_url != '') { document.getElementById(getSubBtnId).click(); } } } else { var total_button = getCheckoutBtn.length; for (var button_count = 0; button_count < total_button; button_count++) { var new_btn_id = getSubBtnId+button_count; var button_display = getCheckoutBtn[button_count].style.display; if(button_display != 'none') { var inptBtn = ``; getCheckoutBtn[button_count].insertAdjacentHTML('afterEnd', inptBtn); document.getElementById(new_btn_id).addEventListener('click', fakeClick); } } if (resp.skip_cart && resp.checkout_direct_url != '') { document.getElementById(new_btn_id).click(); } } getCheckoutBtn?.classList.add("custom_class"); } } } // Tratamento com links dentro do carrinho. if (window.$ || window.jQuery) { var btns = $('a.btn-checkout[href="/checkout"]').not('.cartx_elem_mainBtn'); btns.hide(); } } } } } function cartRedirect() { if(typeof cart_is_global_market !== 'undefined' && cart_is_global_market) { let temp_message = cart_loading_message; cart_loading_message = ' '; const xhttp = new XMLHttpRequest(); xhttp.onload = function() { const response = this.responseText ? JSON.parse(this.responseText) : {}; let countryCode = response?.detected_values?.country?.handle; if(countryCode && available_languages){ let language = available_languages[countryCode?.toLowerCase()]; if(language) { cart_loading_message = loading_cart_message_global[language]; if(cart_loading_message == undefined || cart_loading_message == null || cart_loading_message == '') { cart_loading_message = temp_message; } } else { cart_loading_message = temp_message; } } else { cart_loading_message = temp_message; } if(typeof cart_loading_message != 'undefined' && cart_loading_message != '') { var message_element = document.getElementsByClassName("spinner-text"); for(var i = 0; i < message_element.length; i++){ message_element[i].innerHTML = cart_loading_message; } } } xhttp.open('GET', 'https://sparkesportes.com.br/browsing_context_suggestions.json'); xhttp.setRequestHeader("Access-Control-Allow-Origin", "*"); xhttp.send(); } if(typeof cart_loading_message != 'undefined' && cart_loading_message != '') { var message_element = document.getElementsByClassName("spinner-text"); for(var i = 0; i < message_element.length; i++){ message_element[i].innerHTML = cart_loading_message; } } showCartxLoader(); getAjax('/cart.json', function (response) { var cartPayload = JSON.parse(response); var cartPayload = removeArrayKey(cartPayload); var data = { shop: shopName, host_name: window.location.host, cart_payload: cartPayload }; postAjax(cartEndpoint, JSON.stringify(data), function (response) { var resp = JSON.parse(response); cartEndpointResponse = resp; handleCartEndpointResponse(resp); }); }); } // Verifica se existem botões redirecionando para /a/checkout if (window.$ || window.jQuery) { var oldLinks = $('a[href="/a/checkout"]').not('.cartx-btn-finalize').addClass('cartx-btn-finalize-single'); $('.cartx-btn-finalize-single').on('click', function (e) { e.preventDefault(); if (currentPage == 'cart') { if(remove_cart_item) { jQuery.ajax({ type: "POST", url: "/cart/clear.js", success: function () { window.location.href = window.cartxCheckoutUrl; }, dataType: "json" }); } else { window.location.href = window.cartxCheckoutUrl; } } else { window.location = '/cart'; } }); } function isFacebookApp() { var ua = navigator.userAgent || navigator.vendor || window.opera; return (ua.indexOf("FBAN") > -1) || (ua.indexOf("FBAV") > -1); } function isAndroidApp() { var ua = navigator.userAgent.toLowerCase() || navigator.vendor.toLowerCase() || window.opera.toLowerCase(); return (ua.indexOf("android") > -1); } function getEParam() { var linkerParam = false; try { if(typeof ga !== "undefined") { ga(function(tracker) { linkerParam = '&' + tracker.get('linkerParam'); }); } return linkerParam; } catch (error) { return linkerParam; } } function getUtmParam() { var utm_value = getCartXCookie('_shopify_sa_p'); if(utm_value != '') { return '&'+decodeURIComponent(utm_value); } return false; } function getSrcParam() { var src_value = getCartXCookie('shop_src_notes'); if(src_value != '') { return '&src='+decodeURIComponent(src_value); } return false; } function getCartXCookie(cname) { var name = cname + "="; // var decodedCookie = decodeURIComponent(document.cookie); var decodedCookie = document.cookie; var ca = decodedCookie.split(';'); for(var i = 0; i