/* * 2022 ECSoft * * NOTICE OF LICENSE * * This source file is subject to the Academic Free License (AFL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://opensource.org/licenses/afl-3.0.php * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to dev.ecsoft@gmail.com so we can send you a copy immediately. * * * @author ECSoft * @copyright 2022 ECSoft * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of ECSoft */ var ecsGtmPro = { addToCart: function (product_id, attribute_id, qty, addedFromProductPage, callerElement) { if (product_id) { ecsGtmPro.pushProduct('cart-add', product_id, attribute_id, qty); } }, removeFromCart: function (product_id, attribute_id, qty) { if (product_id) { ecsGtmPro.pushProduct('cart-remove', product_id, attribute_id, qty); } }, productClick: function (product_id, attribute_id) { if (product_id) { ecsGtmPro.pushProduct('product-click', product_id, attribute_id); } }, pushProduct: function (action, product_id, attribute_id, qty) { attribute_id = attribute_id || 0; qty = qty || 1; var ecsGtmProAjax = new XMLHttpRequest(); ecsGtmProAjax.onreadystatechange = function() { if (ecsGtmProAjax.readyState == 4) { if (ecsGtmProAjax.status == 200) { var datalayerJs = ecsGtmProAjax.responseText; try { let datalayerCartAction = JSON.parse(datalayerJs); dataLayer = dataLayer || []; dataLayer.push(datalayerCartAction); } catch(e) { console.log("[ECSGTMPRO] error parsing json"); } } } }; ecsGtmProAjax.open("GET", ecsGtmAjaxGetProductUrl + "?action=" + action + "&id=" + product_id + "&id_attribute=" + attribute_id + "&qty=" + qty, true); ecsGtmProAjax.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); ecsGtmProAjax.send(); }, handleValidateShippingStep: function ($submitBtn, event, ecsGtmTriggered, shippingName) { if(typeof ecsGtmTriggered === 'undefined' || !ecsGtmTriggered) { event.preventDefault(); try { dataLayer = dataLayer || []; let cloneDatalayer = JSON.parse(JSON.stringify(ecsGtmProDatalayer)) cloneDatalayer.event = 'add_shipping_info'; cloneDatalayer.ecommerce.shipping_tier = shippingName; dataLayer.push(cloneDatalayer); } catch (e) { console.error(e); } setTimeout(function() { $submitBtn.trigger('click', [1]) }, 500); } } }; if (typeof(ajaxCart) != 'undefined') { var ajaxCartAddFunc = ajaxCart.add; ajaxCart.add = function(idProduct, idCombination, addedFromProductPage, callerElement, quantity, wishlist) { ajaxCartAddFunc(idProduct, idCombination, addedFromProductPage, callerElement, quantity, wishlist); ecsGtmPro.addToCart(idProduct, idCombination, quantity, addedFromProductPage, callerElement); }; var ajaxCartRemoveFunc = ajaxCart.remove; ajaxCart.remove = function(idProduct, idCombination, customizationId, idAddressDelivery) { ajaxCartRemoveFunc(idProduct, idCombination, customizationId, idAddressDelivery); ecsGtmPro.removeFromCart(idProduct, idCombination); }; } var deleteProductFromSummary = (function(id) { var original_deleteProductFromSummary = deleteProductFromSummary; return function(id) { var productId = 0; var productAttributeId = 0; var ids = 0; ids = id.split('_'); productId = parseInt(ids[0]); if (typeof(ids[1]) !== 'undefined') { productAttributeId = parseInt(ids[1]); } var cart_qty = parseInt($('input[name=quantity_' + id + ']').val()); ecsGtmPro.removeFromCart(productId, productAttributeId, cart_qty); original_deleteProductFromSummary(id); }; })(); var downQuantity = (function(id, qty) { var original_downQuantity = downQuantity; return function(id, qty) { var productId = 0; var productAttributeId = 0; var ids = 0; ids = id.split('_'); productId = parseInt(ids[0]); if (typeof(ids[1]) !== 'undefined') { productAttributeId = parseInt(ids[1]); } var val = $('input[name=quantity_' + id + ']').val(); var newVal = val; if(typeof(qty) == 'undefined' || !qty) { new_qty = 1; newVal = val - 1; } else if (qty < 0) { new_qty = -qty; } if(newVal > 0) { ecsGtmPro.removeFromCart(productId, productAttributeId, new_qty); } original_downQuantity(id, qty); }; })();