{"version":3,"file":"ooooby.min.js","names":["m","$","temporaryMessageTimeout","deviceSizeSmallest","deviceSizeSmall","deviceSizeMedium","deviceSizeLarge","hubData","bindWindowResize","window","on","removeClass","find","addClass","bindNavigation","click","submenu","this","siblings","isVisible","is","document","e","target","closest","length","bindPublicPages","getData","notificationModal","notificationModalButtons","notificationModalButtonsJson","data","i","button","text","thisUrl","dialog","location","href","url","push","title","modal","autoOpen","resizable","draggable","buttons","blur","each","index","input","bindQuantityInput","querySelector","ajax","done","attr","cartCount","changeGoogleAnalyticsCartProductQuantity","saveGoogleAnalyticsCurrentSelectState","change","showTemporaryMessage","message","isError","clearTimeout","messageContainer","toggleClass","html","slideDown","setTimeout","slideUp","elementId","removeElement","element","getElementById","string","textContent","innerText","JSON","parse","parentNode","removeChild","createCookie","name","value","days","expires","date","Date","setTime","getTime","toUTCString","cookie","readCookie","nameEq","ca","split","c","charAt","substring","indexOf","createStaticUrl","relativeUrl","startsWith","cleanUrl","replace","StaticSite","createGoogleMapsMarkerIcon","size","google","maps","Size","origin","Point","anchor","scaledSize","el","val","oldValue","newValue","quantity","sendGoogleAnalyticsAddToCart","qty","productId","productName","productBrand","productPrice","Number","isRemove","totalValue","gtagCmd","gtag","items","id","brand","price","send_to","currency","item_id","item_name","item_brand","affiliation","getCartDetails","cart","uaItems","Items","map","item","Id","Name","Brand","Price","Quantity","ga4Items","shipping","Shipping","TotalValue","sendGoogleAnalyticsBeginCheckout","cartDetails","checkout_step","sendGoogleAnalyticsAddShippingInfo","sendGoogleAnalyticsAddPaymentInfo","sendGoogleAnalyticsPurchase","transaction_id","transactionId","coupon","validator","addMethod","params","unobtrusive","adapters","addBool","ooooby","jQuery","ready"],"sources":["ooooby.js"],"mappings":"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","ignoreList":[],"sourcesContent":["(function (m, $) {\n\n m.deviceSizeSmallest = 460;\n m.deviceSizeSmall = 600;\n m.deviceSizeMedium = 960;\n m.deviceSizeLarge = 1280;\n m.hubData = {};\n\n m.bindWindowResize = function () {\n $(window).on(\"resize\", function () {\n $(\".visible-menu\").removeClass(\"visible-menu\");\n $(\".ux-mobile-menu-button\").find(\".fa\").removeClass(\"fa-times\").addClass(\"fa-bars\");\n });\n };\n\n m.bindNavigation = function () {\n $(\".ux-submenu-button\").click(function() {\n var submenu = $(this).siblings(\".ux-submenu\");\n var isVisible = submenu.is(\":visible\");\n\n $(\".ux-submenu.visible-menu\").removeClass(\"visible-menu\");\n\n if (isVisible) {\n submenu.removeClass(\"visible-menu\");\n } else {\n submenu.addClass(\"visible-menu\");\n }\n });\n\n $(\".ux-mobile-menu-button\").click(function () {\n var submenu = $(\".ux-responsive-menu\");\n var isVisible = submenu.is(\":visible\");\n\n $(\".ux-submenu.visible-menu\").removeClass(\"visible-menu\");\n\n\n if (isVisible) {\n submenu.removeClass(\"visible-menu\");\n $(this).find(\".fa\").removeClass(\"fa-times\").addClass(\"fa-bars\");\n } else {\n submenu.addClass(\"visible-menu\");\n $(this).find(\".fa\").removeClass(\"fa-bars\").addClass(\"fa-times\");\n }\n return false;\n });\n\n $(document).click(function (e) {\n var clicked = $(e.target);\n if (clicked.closest(\".menu\").length === 0) {\n $(\".visible-menu\").removeClass(\"visible-menu\");\n $(\".ux-mobile-menu-button\").find(\".fa\").removeClass(\"fa-times\").addClass(\"fa-bars\");\n }\n });\n };\n\n m.bindPublicPages = function () {\n m.hubData = m.getData(\"data-hub\");\n \n var notificationModal = $(\".ux-notification-modal\");\n\n if (notificationModal.length) {\n var notificationModalButtons = [];\n\n var notificationModalButtonsJson = notificationModal.data(\"dialogButtons\");\n\n for (var i = 0; i < notificationModalButtonsJson.length; i++) {\n var buttonText = notificationModalButtonsJson[i].text;\n var buttonUrl = notificationModalButtonsJson[i].url;\n\n var button = {\n text: buttonText,\n click: (function (thisUrl) {\n return function () {\n if (thisUrl === \"close\")\n $(this).dialog(\"close\");\n else\n window.location.href = thisUrl;\n }\n })(buttonUrl)\n }\n\n notificationModalButtons.push(button);\n }\n\n notificationModal.dialog({\n title: notificationModal.data(\"dialogTitle\"),\n modal: true,\n autoOpen: true,\n resizable: false,\n draggable: true,\n buttons: notificationModalButtons\n });\n }\n $(\".ui-dialog :button\").blur();\n\n $(\"input[type=radio]:checked\").closest(\".ux-radio-button\").addClass(\"selected-radio-button\");\n $(\"input[type=radio]\").click(function() {\n $(\"input[type=radio]\").closest(\".ux-radio-button\").removeClass(\"selected-radio-button\");\n $(\"input[type=radio]:checked\").closest(\".ux-radio-button\").addClass(\"selected-radio-button\");\n });\n\n $(\".ux-counter-input\").each((index, input) => \n m.bindQuantityInput(\n input.querySelector(\".ux-counter-input-text\"),\n input.querySelector(\".ux-counter-less\"),\n input.querySelector(\".ux-counter-more\")\n )\n )\n\n var shoppingBasket = $(\".ux-shopping-basket\");\n if (shoppingBasket) {\n $.ajax(\"/cartcount\")\n .done(function (data) {\n $(\".ux-shopping-basket\").attr(\"data-count\", data.cartCount);\n });\n }\n\n // We use .ux-tracking-manual-addtocart-button as a class when we manually trigger the event\n // Otherwise the below will trigger other buttons\n $('.ux-tracking-addtocart-button')\n .click(m.changeGoogleAnalyticsCartProductQuantity);\n $('.ux-tracking-addtocart-counter')\n .each(m.saveGoogleAnalyticsCurrentSelectState)\n .change(m.changeGoogleAnalyticsCartProductQuantity);\n };\n\n var temporaryMessageTimeout;\n m.showTemporaryMessage = function (message, isError) {\n clearTimeout(temporaryMessageTimeout);\n var messageContainer = $(\".ux-temporary-notification\");\n messageContainer.toggleClass(\"is-error\", isError);\n messageContainer.find(\"p\").html(message);\n messageContainer.slideDown();\n\n temporaryMessageTimeout = setTimeout(function() {\n messageContainer.slideUp();\n }, isError ? 8000 : 2000);\n };\n\n m.getData = function(elementId, removeElement = true) {\n var element = document.getElementById(elementId);\n var string = element.textContent || element.innerText;\n var data = JSON.parse(string);\n \n if (removeElement)\n element.parentNode.removeChild(element);\n \n return data;\n };\n\n m.createCookie = function(name, value, days) {\n var expires = \"\";\n if (days) {\n var date = new Date();\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n expires = \"; expires=\" + date.toUTCString();\n }\n document.cookie = name + \"=\" + value + expires + \"; path=/\";\n }\n\n m.readCookie = function(name) {\n var nameEq = name + \"=\";\n var ca = document.cookie.split(';');\n for (var i = 0; i < ca.length; i++) {\n var c = ca[i];\n while (c.charAt(0) == ' ') c = c.substring(1, c.length);\n if (c.indexOf(nameEq) == 0) return c.substring(nameEq.length, c.length);\n }\n return null;\n };\n\n m.createStaticUrl = function(relativeUrl) {\n if (relativeUrl.startsWith(\"http\"))\n return relativeUrl;\n\n let cleanUrl = relativeUrl.replace(/^[\\/ ]+/g, '');\n return m.StaticSite + '/' + cleanUrl;\n };\n\n m.createGoogleMapsMarkerIcon = function(url) {\n var iconImage = {\n url: m.createStaticUrl(url),\n size: new google.maps.Size(44, 80),\n origin: new google.maps.Point(0, 0),\n anchor: new google.maps.Point(11, 40),\n scaledSize: new google.maps.Size(22, 40)\n };\n\n return iconImage;\n };\n\n m.saveGoogleAnalyticsCurrentSelectState = function(i) {\n let el = $(this);\n el.data('old', el.val());\n }\n \n m.changeGoogleAnalyticsCartProductQuantity = function(e) {\n let el = $(e.target);\n \n let oldValue = el.data('old') | 0;\n let newValue = el.val() | 0;\n el.data('old', newValue);\n \n let quantity = newValue - oldValue;\n if (quantity === 0)\n quantity = 1;\n\n m.sendGoogleAnalyticsAddToCart(el, quantity);\n }\n\n m.sendGoogleAnalyticsAddToCart = function(el, qty) {\n let productId = el.attr('tracking-addtocart-productid');\n let productName = el.attr('tracking-addtocart-productname');\n let productBrand = el.attr('tracking-addtocart-productbrand');\n let productPrice = Number(el.attr('tracking-addtocart-price'));\n let isRemove = qty < 0;\n if (isRemove)\n qty = -qty;\n let totalValue = qty * productPrice;\n\n let gtagCmd = isRemove ? 'remove_from_cart' : 'add_to_cart';\n gtag('event', gtagCmd, {\n \"items\": [\n {\n \"id\": productId,\n \"name\": productName,\n \"brand\": productBrand,\n \"quantity\": qty,\n \"price\": productPrice\n }\n ]\n });\n\n gtag('event', gtagCmd, {\n \"send_to\": \"GA4\",\n \"value\": totalValue,\n \"currency\": m.hubData.currency,\n \"items\": [\n {\n \"item_id\": productId,\n \"item_name\": productName,\n \"item_brand\": productBrand,\n \"affiliation\": m.hubData.name,\n \"quantity\": qty,\n \"price\": productPrice\n }\n ]\n });\n }\n\n m.getCartDetails = function() {\n let cart = m.getData(\"data-session-cart\", false);\n\n let uaItems = cart.Items.map(item => ({\n \"id\": item.Id,\n \"name\": item.Name,\n \"brand\": item.Brand,\n \"price\": item.Price,\n \"quantity\": item.Quantity\n }));\n\n let ga4Items = cart.Items.map(item => ({\n \"item_id\": item.Id,\n \"item_name\": item.Name,\n \"item_brand\": item.Brand,\n \"affiliation\": m.hubData.name,\n \"price\": item.Price,\n \"quantity\": item.Quantity\n }));\n\n return {\n uaItems: uaItems,\n ga4Items: ga4Items,\n shipping: cart.Shipping,\n totalValue: cart.TotalValue\n };\n }\n \n m.sendGoogleAnalyticsBeginCheckout = function() {\n let cartDetails = m.getCartDetails();\n\n gtag('event', 'begin_checkout', {\n \"checkout_step\": 1,\n \"items\": cartDetails.uaItems\n });\n\n gtag('event', 'begin_checkout', {\n \"send_to\": \"GA4\",\n \"value\": cartDetails.totalValue,\n \"currency\": m.hubData.currency,\n \"items\": cartDetails.ga4Items\n });\n }\n\n m.sendGoogleAnalyticsAddShippingInfo = function() {\n let cartDetails = m.getCartDetails();\n\n gtag('event', 'checkout_progress', {\n \"checkout_step\": 2,\n \"items\": cartDetails.uaItems\n });\n\n\n gtag('event', 'add_shipping_info', {\n \"send_to\": \"GA4\",\n \"value\": cartDetails.totalValue,\n \"currency\": m.hubData.currency,\n \"items\": cartDetails.ga4Items\n });\n }\n\n m.sendGoogleAnalyticsAddPaymentInfo = function() {\n let cartDetails = m.getCartDetails();\n\n gtag('event', 'checkout_progress', {\n \"checkout_step\": 3,\n \"items\": cartDetails.uaItems\n });\n\n\n gtag('event', 'add_payment_info', {\n \"send_to\": \"GA4\",\n \"value\": cartDetails.totalValue,\n \"currency\": m.hubData.currency,\n \"items\": cartDetails.ga4Items\n });\n }\n\n m.sendGoogleAnalyticsPurchase = function() {\n let cartDetails = m.getCartDetails();\n\n gtag('event', 'purchase', {\n \"transaction_id\": cartDetails.transactionId,\n \"value\": cartDetails.totalValue,\n \"shipping\": cartDetails.shipping,\n \"currency\": m.hubData.currency,\n \"coupon\": cartDetails.coupon,\n \"items\": cartDetails.uaItems\n });\n\n gtag('event', 'purchase', {\n \"send_to\": \"GA4\",\n \"transaction_id\": cartDetails.transactionId,\n \"value\": cartDetails.totalValue,\n \"shipping\": cartDetails.shipping,\n \"currency\": m.hubData.currency,\n \"coupon\": cartDetails.coupon,\n \"items\": cartDetails.ga4Items\n });\n }\n \n // m.gtagDummy = function(logType, logSubtype, object) {\n // console.log(\"GA Testing: \" + logType + \", \" + logSubtype + \": \" + JSON.stringify(object));\n // }\n\n $.validator.addMethod(\"mustbetrue\", function (value, element, params) {\n return $(element).is(\":checked\");\n });\n $.validator.unobtrusive.adapters.addBool(\"mustbetrue\");\n\n}(window.ooooby = window.ooooby || {}, jQuery));\n\n$(document).ready(function () {\n ooooby.bindWindowResize();\n ooooby.bindNavigation();\n ooooby.bindPublicPages();\n});"]}