let bhrCart = { cart: {}, contactId: '', cookieExpiryTime: 43200000, cartCreationTime: '', }; let bhrUser = { shoprenterId: '', contactId: '', newsletter: '', smid: '' }; const salesmanagoAppUrl = 'https://shoprenter.salesmanago.com/index.php/salesmanago/front/'; function contactUpsert(data){ if (ShopRenter.customer.email !== ""){ ShopRenter.customer['smid'] = _smid; request(ShopRenter.customer, data, setClient); } } function addContact() { contactUpsert('addContact'); } function editContact(){ contactUpsert('editContact'); } function newsletterUpdate(){ getBhrUser(); if (bhrUser.newsletter !== document.getElementsByName('newsletter')[0].checked) { ShopRenter.customer['newsletter'] = document.getElementsByName('newsletter')[0].checked; contactUpsert('newsletterUpdate'); } } function newsletterAdd(){ request(getNewsletterData(), 'newsletterAdd', setClient) } window.onload = () => { ShopRenter.onCartUpdate(function(event) { if (getCookie('smclient')) { fetchCart(); addCart(event.detail); } }); if (ShopRenter.customer.userId !== 0 && (!localStorage.getItem('bhrUser') || !getCookie('smclient'))){ contactUpsert('addContact'); } if (ShopRenter.customer.userId === 0 && localStorage.getItem('bhrUser')){ clearClient() } if (document.querySelector('#newsletter_emailsubscribe')){ document.querySelector('#newsletter_emailsubscribe').setAttribute('onsubmit', 'newsletterAdd()'); } if (document.querySelector('#edit')){ document.querySelector('#edit').setAttribute('onsubmit', 'editContact()'); } if (document.querySelector('#newsletter')){ document.querySelector('#newsletter').setAttribute('onsubmit', 'newsletterUpdate()'); } if (ShopRenter.lastOrder) { sendOrder(); } } function setClient(data){ clearClient(); deleteCookie('smclient', '', 1, document.location.host); setCookie('smclient', data.contactId, 3650, document.location.host); ShopRenter.customer['contactId'] = data.contactId; ShopRenter.customer['smid'] = _smid; ShopRenter.customer['newsletter'] = data.optStatus; parseBhrUser(ShopRenter.customer); setBhrUser(bhrUser); checkAuthUser(); } function getBhrUser(){ return parseBhrUser(localStorage.getItem('bhrUser')) } function setBhrUser(data){ localStorage.setItem('bhrUser', JSON.stringify(data)); } function parseBhrUser(data){ bhrUser.newsletter = data.newsletter; bhrUser.smid = data.smid; bhrUser.contactId = data.contactId; bhrUser.shoprenterId = data.userId; } function clearClient(){ localStorage.removeItem('bhrUser'); } function setCookie(cname, cvalue, exdays, cdomain){ let d = new Date(), expires = ''; d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000)); expires = "expires=" + d.toUTCString(); document.cookie = cname + "=" + cvalue + ";" + expires + ";domain=" + cdomain + ";path=/" + ";SameSite=none; Secure"; } function deleteCookie(cname, cvalue, exdays, cdomain){ let d = new Date(), expires = ''; d.setTime(d.getTime() - (exdays * 24 * 60 * 60 * 1000)); expires = "expires=" + d.toUTCString(); document.cookie = cname + "=" + cvalue + ";" + expires + ";domain=" + cdomain + ";path=/" + ";SameSite=none; Secure"; } function getCookie(name){ let m = document.cookie.match(new RegExp(name + '=([^;]+)')); return m ? m[1] : false; } function saveCart(){ localStorage.setItem('bhrCart', JSON.stringify(bhrCart)); } function fetchCart(){ let Cart = localStorage.getItem('bhrCart'); if (Cart) { bhrCart = JSON.parse(Cart); } } function addCart(data){ let productsId = [], productsTitle = [], sku = [], quantities = [], currency = [], total = 0; if (data.products.length !== 0) { for (let i = 0; i < data.products.length; i++) { productsTitle.push(data.products[i].name); sku.push((data.products[i].sku !== null) ? data.products[i].sku : ''); quantities.push(data.products[i].quantity); productsId.push(data.products[i].productId); currency.push(data.products[i].currency); total += (parseInt(data.products[i].priceWithoutCurrency) * parseInt(data.products[i].quantity)); } bhrCart.cart.productsId = sku.join(','); bhrCart.cart.productsTitle = productsTitle.join(','); bhrCart.cart.sku = productsId.join(','); bhrCart.cart.quantities = quantities.join(','); bhrCart.cart.value = total; bhrCart.cart.currency = currency.join(','); saveCart(); if (checkAuthUser() && checkCart()) { addCartEvent(); } } else { clearCart(); saveCart(); } } function clearCart(){ bhrCart.cart = {}; bhrCart.cookieExpiryTime = ''; bhrCart.cartCreationTime = ''; saveCart(); } function addCartEvent(){ let data = { type: 'CART', products: bhrCart.cart.productsId, variantsId: bhrCart.cart.variantsId, detail1: bhrCart.cart.productsTitle, detail3: bhrCart.cart.sku, detail4: bhrCart.cart.quantities, detail5: bhrCart.cart.currency, value: bhrCart.cart.value, smid: window._smid, shop: ShopRenter.shop.domain, contactId: bhrCart.contactId }; if (bhrCart.cart.eventId) { data.eventId = bhrCart.cart.eventId; } request(data, 'cart', addEventId); } function sendOrder(){ let productsId = [], productsTitle = [], sku = [], quantities = []; for (let i = 0; i < ShopRenter.lastOrder.products.length; i++) { productsTitle.push(ShopRenter.lastOrder.products[i].title); sku.push((ShopRenter.lastOrder.products[i].sku !== null) ? ShopRenter.lastOrder.products[i].sku : ''); quantities.push(ShopRenter.lastOrder.products[i].quantity); productsId.push(ShopRenter.lastOrder.products[i].id); } let data = { id: ShopRenter.lastOrder.id, total: ShopRenter.lastOrder.total, productsId: sku, detail1: productsTitle, detail2: productsId, detail3: quantities, detail4: ShopRenter.lastOrder.currency, detail5: ShopRenter.lastOrder.shipping.methodName, payment: ShopRenter.lastOrder.payment.methodName, smid: _smid, shop: window.location.host } request(data, 'order', setClient); } function checkCart(){ return parseInt(Object.keys(bhrCart.cart).length) >= 6; } function addEventId(data){ if (bhrCart.cart.eventId !== data.eventId && data.success) { if (!bhrCart.cart.eventId) { let d = new Date(); bhrCart.cartCreationTime = d.getTime(); } bhrCart.cookieExpiryTime = 3600 * 1000; bhrCart.cart.eventId = data.eventId; self.saveCart(); } } function checkAuthUser(){ if (bhrCart.contactId && bhrCart.contactId !== "") { return true; } else if (getCookie('smclient')) { bhrCart.contactId = getCookie('smclient'); saveCart(); return true; } return false; } function getNewsletterData(){ return { name: document.getElementsByName('subscriber_firstname')[0].value + ' ' + document.getElementsByName('subscriber_lastname')[0].value , email: document.getElementsByName('subscriber_email')[0].value, status: 1, smid: _smid } } function transformRequest(obj){ let str = []; Object.keys(obj).forEach(function (p) { str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); }); return str.join("&"); } function request(data, url, callback, ev = false, uri = salesmanagoAppUrl, method = 'POST'){ let xhr = new XMLHttpRequest(); xhr.open(method, uri + url); xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.onreadystatechange = function () { if (xhr.readyState === 4 && xhr.status === 200) { let response = JSON.parse(xhr.responseText); callback(response, ev); } else if (ev) { ev.target.submit(); } }; if (data){ xhr.send(self.transformRequest(data)); } else { xhr.send(); } }