1window.clickAndCollect={location:window.location,stores:{},settingsStores:[],excludedStores:"REK, RE3, REN, VUO, ESE, SEO, ARA, KUU, RII, TDU, TMH, MAL, IMA, KER, TIK, HFO, TAI, OL1, MVU, LAK, VAA".replace(/\s+/g,"").toUpperCase().split(","),productId:!1,productSku:!1,productName:!1,productType:!1,productPrice:!1,productUrl:!1,productThumbnail:!1,productAuthor:!1,quantity:0,totalPrice:0,chosenProducts:{},selectedStore:!1,isEmptyObject:function(obj){return!(Object.getPrototypeOf(obj)===Object.prototype&&Object.keys(obj).length!==0)},isValidStoresArray:function(stores){if(!(stores instanceof Array))return!1;let len=stores.length;if(!len)return!1;let availabilityCount=0;for(let i2=0;i2<len;i2++){let store=stores[i2];if(!store.hasOwnProperty("location")||!store.hasOwnProperty("availability")||!store.location||!Number.isInteger(store.availability))return!1;this.settingsStores.includes(store.location.trim())&&(availabilityCount+=store.availability)}return!(0>=availabilityCount)},sessionStorageKey:"ClickAndCollectProducts",isOutOfStockProduct:!1,reservationSend:!1,initElements:function(){let self2=this,cncSubmit=document.querySelector(".cnc-modal .cnc-submit"),cncModalOverlay=document.querySelector(".cnc-modal-overlay"),cncReserveMore=document.querySelector(".cnc-modal .cnc-reserve-more"),modalClose=document.querySelector(".cnc-modal__toolbar .close-button"),innerOverlay=document.querySelector(".cnc-modal .cnc-inner-overlay"),notificationClose=document.querySelector(".cnc-modal .cnc-notification-modal .cnc-notification-modal-close");self2.populateChosenProductsList(),cncReserveMore.addEventListener("click",function(event){event.detail!==0&&self2.onReserveMoreClicked.bind(self2)(event)}),cncReserveMore.addEventListener("keydown",function(event){(event.key==="Enter"||event.key===" ")&&(event.preventDefault(),self2.onReserveMoreClicked.bind(self2)(event))}),cncSubmit.addEventListener("click",self2.onFormSubmit.bind(self2)),modalClose.addEventListener("click",function(e){cncModalOverlay.classList.remove("cnc-modal-overlay_active"),self2.deselectStores(),self2.hideMessage(),document.getElementById("cnc-button").focus()}),notificationClose.addEventListener("click",function(e){cncModalOverlay.classList.remove("cnc-modal-overlay_active"),innerOverlay.classList.remove("cnc-inner-overlay_active"),self2.deselectStores(),self2.hideMessage(),document.getElementById("cnc-button").focus()}),document.addEventListener("keydown",function(e){e.key==="Escape"&&(cncModalOverlay.classList.remove("cnc-modal-overlay_active"),innerOverlay.classList.remove("cnc-inner-overlay_active"),self2.deselectStores(),self2.hideMessage(),document.getElementById("cnc-button").focus())})},initObjectFields:function(){let self2=this,invalidTypes=["Digikirja","E-kirja","\xC4\xE4nikirja"],sessionStorageProducts=sessionStorage[this.sessionStorageKey];sessionStorageProducts&&(this.chosenProducts=JSON.parse(sessionStorageProducts)),self2.productId=document.querySelector("#sk-product-data #sk-product-id").dataset.id,self2.productSku=document.querySelector("#sk-product-data #sk-product-sku").dataset.sku,self2.productThumbnail=document.querySelector("#sk-product-data #sk-product-thumbnail").dataset.thumbnail,self2.productName=document.querySelector("#sk-product-data #sk-product-title").dataset.title,self2.productPrice=document.querySelector("#sk-product-data #sk-product-price").dataset.price,self2.productUrl=self2.getProductUrl(),self2.productAuthor=document.querySelector("#sk-product-data #sk-product-author").dataset.author,self2.productType=document.querySelector("#sk-product-data #sk-product-type").dataset.type,invalidTypes.forEach(function(item,index,arr){if(self2.productType===item){let cncButton=document.getElementById("cnc-button");return cncButton.disabled=!0,!1}});let listElements=document.querySelectorAll(".cnc-stores .store-availability-list .store-item");[].forEach.call(listElements,function(item){self2.settingsStores.push(item.dataset.storeId)})},init:function(){let self2=this,cncButton=document.getElementById("cnc-button");self2.initObjectFields(),self2.initElements(),cncButton.addEventListener("click",this.onCncButtonClick.bind(this)),document.addEventListener("click",function(e){let cncModalOverlay=document.querySelector(".cnc-modal-overlay");if(!cncModalOverlay.classList.contains("cnc-modal-overlay_active"))return;let modal=document.querySelector(".cnc-modal"),targetElement=e.target;do{if(targetElement==modal||targetElement==cncButton||targetElement.classList&&targetElement.classList.contains("item-control
1s"))return;targetElement=targetElement.parentNode}while(targetElement);cncModalOverlay.classList.contains("cnc-modal-overlay_active")&&cncModalOverlay.classList.remove("cnc-modal-overlay_active"),self2.deselectStores(),self2.hideMessage()}),cncButton.addEventListener("keydown",function(event){(event.key==="Enter"||event.key===" ")&&(event.preventDefault(),self2.onCncButtonClick.bind(self2)(event))});let policyApproveCheckbox=document.getElementById("policy_approve");policyApproveCheckbox.addEventListener("keydown",function(event){event.key==="Enter"&&(event.preventDefault(),policyApproveCheckbox.checked=!policyApproveCheckbox.checked)})},populateChosenProductsList:function(){if(!this.isEmptyObject(this.chosenProducts)){let noProducts=document.querySelector(".cnc-chosen-products .cnc-no-products");noProducts.classList.contains("is-hidden")||noProducts.classList.add("is-hidden");for(const productId in this.chosenProducts){let chosenProduct=this.chosenProducts[productId];this.addChosenProductListItem(productId,chosenProduct)}this.checkChosenProductQuantities()}},onReserveMoreClicked:function(e){e.preventDefault(),this.showNotification()},validateEmail:function(email){return/\S+@\S+\.\S+/.test(email)},validatePhoneNumber:function(phoneNumber){return/^\+?\d{1,3}\d{10}$/.test(phoneNumber)},formatPhoneNumber:function(phoneNumber){return phoneNumber.startsWith("0")?"+358"+phoneNumber.substring(1):phoneNumber.startsWith("358")&&!phoneNumber.startsWith("+358")?"+"+phoneNumber:phoneNumber},onFormSubmit:function(){let i2;self=this,emptyInputs=[],cncInputs=[],textInputs=document.querySelectorAll(".cnc-modal .cnc-form .cnc-text-input"),cncStores=document.querySelector(".cnc-modal .cnc-form .cnc-stores"),selectedStore=document.querySelector(".cnc-stores .selected-store"),checkbox=document.querySelector(".cnc-modal .cnc-form .cnc-checkbox"),cncInputs[0]=textInputs[0],cncInputs[1]=textInputs[1],cncInputs[2]=textInputs[2],cncInputs[3]=cncStores,cncInputs[4]=checkbox,self.disableSubmitButton(),self.removeInputClass(cncInputs,"cnc-required"),self.clearFormErrors(),setTimeout(()=>{let cncFormErrors=document.getElementById("cncFormErrors"),len=textInputs.length;for(i2=0;i2<len;i2++)i2!==3&&textInputs[i2].value.length===0&&emptyInputs.push(textInputs[i2]);if(selectedStore||emptyInputs.push(cncStores),emptyInputs.length)return self.showFormError("Sinun tulee t\xE4ytt\xE4\xE4 kaikki t\xE4hdell\xE4 (*) merkityt kent\xE4t."),self.addInputClass(emptyInputs,"cnc-required"),self.enableSubmitButton(),cncFormErrors.setAttribute("tabindex","-1"),cncFormErrors.focus(),!1;if(checkbox.checked===!1)return self.showFormError("Sinun tulee hyv\xE4ksy\xE4 myynti- ja toimitusehdot tehd\xE4ksesi varauksen!"),self.enableSubmitButton(),cncFormErrors.setAttribute("tabindex","-1"),cncFormErrors.focus(),!1;if(!self.validateEmail(textInputs[2].value))return self.showFormError("S\xE4hk\xF6postiosoite on virheellisess\xE4 muodossa"),self.enableSubmitButton(),cncFormErrors.setAttribute("tabindex","-1"),cncFormErrors.focus(),!1;if(textInputs[3].value.length>0&&(textInputs[3].value=self.formatPhoneNumber(textInputs[3].value),!self.validatePhoneNumber(textInputs[3].value)))return self.showFormError("Puhelinnumero on virheellisess\xE4 muodossa"),self.enableSubmitButton(),cncFormErrors.setAttribute("tabindex","-1"),cncFormErrors.focus(),!1;self.submitButtonLoading();let shopNameStr=selectedStore.textContent;shopNameStr=shopNameStr.trim();let postData={first_name:textInputs[0].value,last_name:textInputs[1].value,email:textInputs[2].value,phone_number:textInputs[3].value,shop_id:self.selectedStore,products:self.chosenProducts,total_price:String(self.totalPrice.toFixed(2))};self.sendReservation(postData,function(response){self.reservationSend=!0,self.enableSubmitButton(),self.showMessage("success"),analyticsEvent(shopNameStr,postData.total_price),self.resetLocalData()})},300)},submitButtonLoading:function(){let cncSubmit=document.querySelector(".cnc-modal .cnc-submit");cncSubmit.disabled=!0,cncSubmit.textContent="L\xE4hetet\xE4\xE4n varausta..."},disableSubmitButton:function(){let cncSubmit=document.querySelector(".cnc-modal .cnc-submit");cncSubmit.disabled=!0},enableSubmitButton:function(){let cncSubmit=document.querySelector(".cnc-modal .cnc-submit");cncSubmit.disabled=!1,cncSubmit.textContent="Vahvista varaus"},showNotification:function(){let innerOverlay=document.querySelector(".cnc-inner-overlay");innerOverlay.classList.contains("cnc-inner-overlay_active")||innerOverlay.classList.add("cnc-inner-overlay_active");let notificationModal=innerOverlay.querySelector(".cnc-notification-modal");notificationModal&&(notificationModal.setAttribute("tabindex","-1"),notificationModal.focus())},showMessage:function(status){let self2=this;switch(status){case"availability-error":self2.showTitle("error");break;case"reservation-error":self2.showTitle("error");break;case"success":self2.showTitle("success");break;case"out-of-stock":self2.showTitle("out-of-stock");break}let cncFormContainer=document.querySelector(".cnc-modal .cnc-form-container");cncFormContainer.classList.contains("cnc-form-container_hidden")||cncFormContainer.classList.add("cnc-form-container_hidden");let messageContainer=document.querySelector(".cnc-modal .cnc-message-container"),message=message
1Container.querySelector('.cnc-message[data-status="'+status+'"]');message&&(messageContainer.classList.contains("cnc-message-container_visible")||messageContainer.classList.add("cnc-message-container_visible"),message.classList.contains("is-hidden")&&message.classList.remove("is-hidden")),document.querySelector(".cnc-modal").focus()},hideMessage:function(){let successMessage=document.querySelector('.cnc-modal .cnc-message[data-status="success"]'),outOfStockMessage=document.querySelector('.cnc-modal .cnc-message[data-status="out-of-stock"]');if(!successMessage.classList.contains("is-hidden")||!outOfStockMessage.classList.contains("is-hidden"))return;let cncFormContainer=document.querySelector(".cnc-modal .cnc-form-container"),messageContainer=document.querySelector(".cnc-modal .cnc-message-container"),messages=messageContainer.querySelectorAll(".cnc-message");[].forEach.call(messages,function(item){item.classList.contains("is-hidden")||item.classList.add("is-hidden")}),messageContainer.classList.contains("cnc-message-container_visible")&&messageContainer.classList.remove("cnc-message-container_visible"),cncFormContainer.classList.contains("cnc-form-container_hidden")&&cncFormContainer.classList.remove("cnc-form-container_hidden"),this.showTitle("default")},showTitle:function(status){this.hideTitles();let title=document.querySelector('.cnc-modal .cnc-title h3[data-status="'+status+'"]');title&&(title.classList.contains("is-hidden")&&title.classList.remove("is-hidden"),title.setAttribute("tabindex","-1"),title.focus())},hideTitles:function(){let titleEls=document.querySelectorAll(".cnc-modal .cnc-title h3");[].forEach.call(titleEls,function(item){item.classList.contains("is-hidden")||item.classList.add("is-hidden")})},showFormError:function(message){let cncFormErrors=document.querySelector(".cnc-modal .cnc-form-container .cnc-form-errors");cncFormErrors.textContent=message,cncFormErrors.classList.contains("cnc-form-errors_visible")||cncFormErrors.classList.add("cnc-form-errors_visible")},clearFormErrors:function(){let cncFormErrors=document.querySelector(".cnc-modal .cnc-form-container .cnc-form-errors");cncFormErrors.textContent="",cncFormErrors.classList.contains("cnc-form-errors_visible")&&cncFormErrors.classList.remove("cnc-form-errors_visible")},addInputClass:function(inputs,className){let i2,len=inputs.length;for(i2=0;i2<len;i2++)inputs[i2].classList.contains(className)||inputs[i2].classList.add(className)},removeInputClass:function(inputs,className){let i2,len=inputs.length;for(i2=0;i2<len;i2++)inputs[i2].classList.contains(className)&&inputs[i2].classList.remove(className)},onAccordionToggle:function(){let storeAvail=document.querySelector(".cnc-modal .store-availability"),accordionItem=storeAvail.children[0].children[0],availabilityList=document.querySelector(".cnc-stores .store-availability-list"),accordionContent=document.querySelector(".cnc-stores .accordion-content"),accordionTitle=document.querySelector(".cnc-stores .accordion-title");accordionItem.classList.contains("is-active")?(accordionItem.classList.remove("is-active"),accordionTitle.setAttribute("aria-expanded",!1),accordionTitle.setAttribute("aria-selected",!1),accordionContent.setAttribute("aria-hidden",!0),accordionContent.style.display="none"):(accordionItem.classList.add("is-active"),accordionTitle.setAttribute("aria-expanded",!0),accordionTitle.setAttribute("aria-selected",!0),accordionContent.setAttribute("aria-hidden",!1),accordionContent.style.display="block",availabilityList.classList.contains("no-data")&&availabilityList.classList.remove("no-data"))},openAccordions:function(){document.querySelectorAll(".cnc-modal .cnc-accordion").forEach(function(node){let accordionItem=node.querySelector(".accordion-item"),accordionTitle=node.querySelector(".accordion-title"),accordionContent=node.querySelector(".accordion-content"),verticalMenu=node.querySelector(".menu.vertical");accordionItem.classList.contains("is-active")||(accordionItem.classList.add("is-active"),accordionTitle.setAttribute("aria-expanded",!0),accordionTitle.setAttribute("aria-selected",!0),accordionContent.setAttribute("aria-hidden",!1),accordionContent.style.display="block",verticalMenu.classList.contains("no-data")&&verticalMenu.classList.remove("no-data"))})},onCncButtonClick:function(){let self2=this,productSku=self2.productSku,cncModal=document.querySelector(".cnc-modal");if(document.querySelector(".cnc-modal-overlay").classList.add("cnc-modal-overlay_active"),cncModal.setAttribute("tabindex","-1"),cncModal.focus(),cncModal.addEventListener("keydown",function(e){let focusableElements=cncModal.querySelectorAll('a[href], button, textarea, input, select, [tabindex]:not
1([tabindex="-1"])'),firstFocusableElement=document.querySelector(".cnc-modal__toolbar .close-button"),lastFocusableElement=focusableElements[focusableElements.length-1];e.key==="Tab"&&(e.shiftKey?document.activeElement===firstFocusableElement&&(e.preventDefault(),lastFocusableElement.focus()):document.activeElement===lastFocusableElement&&(e.preventDefault(),firstFocusableElement.focus()))}),self2.isOutOfStockProduct||self2.reservationSend)return;if(!self2.productSku||typeof self2.productSku!="string"){self2.showMessage("availability-error");return}self2.addProductToChosenProducts(),self2.addBundledProductsToChosenProducts(),self2.openAccordions();let missingProducts=self2.getMissingProducts();missingProducts.length?self2.fetchstores(missingProducts,function(){let productStores=self2.stores.hasOwnProperty(self2.productId)?self2.stores[self2.productId]:null;if(!self2.isValidStoresArray(productStores)){self2.removeProductFromChosenProducts(self2.productId),self2.isOutOfStockProduct=!0,self2.showMessage("out-of-stock");return}self2.updateStoresListItems(),self2.storesAvailabilityLabels(!1),self2.hideLoadingElement()}):self2.hideLoadingElement()},addProductToChosenProducts:function(){let noProducts=document.querySelector(".cnc-chosen-products .cnc-no-products");if(!this.chosenProducts.hasOwnProperty(this.productId)){noProducts.classList.contains("is-hidden")||noProducts.classList.add("is-hidden"),this.quantity=1;let product={sku:this.productSku,name:this.productName,author:this.productAuthor,price:this.productPrice,thumbnail:this.productThumbnail,url:this.getProductUrl(),quantity:this.quantity};this.addChosenProductListItem(this.productId,product),this.chosenProducts[this.productId]=product,sessionStorage[this.sessionStorageKey]=JSON.stringify(this.chosenProducts)}},addBundledProductsToChosenProducts:function(){if(document.getElementById("bundled-products")!=null){let bundleCheckboxes=document.getElementsByClassName("bundled_product_checkbox"),bundledProducts=JSON.parse(sessionStorage.getItem(this.sessionStorageKey));for(i=0;i<bundleCheckboxes.length;i++){if(bundleCheckboxes[i].value==""||bundleCheckboxes[i].checked==!1)continue;let singleBundleProductId=bundleCheckboxes[i].value;if(bundledProducts[singleBundleProductId.toString()]==null){let singleBundleProduct={sku:bundleCheckboxes[i].getAttribute("data-bundled-product-sku").toString(),name:bundleCheckboxes[i].getAttribute("data-bundled-product-title"),author:bundleCheckboxes[i].getAttribute("data-bundled-product-author"),quantity:parseInt(bundleCheckboxes[i].getAttribute("data-bundled-product-quantity")),price:(bundleCheckboxes[i].getAttribute("data-bundled-product-price")/100).toString(),thumbnail:bundleCheckboxes[i].getAttribute("data-bundled-product-thumbnail"),url:bundleCheckboxes[i].getAttribute("data-bundled-product-url")};this.addChosenProductListItem(singleBundleProductId,singleBundleProduct),this.chosenProducts[singleBundleProductId]=singleBundleProduct,sessionStorage[this.sessionStorageKey]=JSON.stringify(this.chosenProducts),bundleCheckboxes[i].checked=!1,bundleCheckboxes[i].dataset.bundledProductQuantity=0;let countIndicator=bundleCheckboxes[i].closest(".individual-bundled-product").querySelector(".count-indicator");countIndicator.innerHTML=0,countIndicator.style.display="none"}}let bundlePriceDiv=document.getElementById("bundle-price");bundlePriceDiv.innerHTML=bundlePriceDiv.getAttribute("data-current-variant-price")}},storesAvailabilityLabels:function(reset){if(reset){let storeItems=document.querySelectorAll(".cnc-stores .store-item");[].forEach.call(storeItems,function(item){let storeStockElement=item.querySelector(".cnc-store-stock");storeStockElement.classList.remove("cnc-out-of-stock","cnc-few-left","cnc-in-stock"),storeStockElement.textContent=""})}function updateStockLabel(item){const storeItem=document.querySelector('.cnc-stores .store-availability-list .store-item[data-store-id="'+item.location+'"]');if(storeItem){const storeStockElement=storeItem.querySelector(".cnc-store-stock");item.availability<=0?(storeStockElement.classList.remove("cnc-in-stock","cnc-few-left"),storeStockElement.classList.add("cnc-out-of-stock"),storeStockElement.textContent="Ei saatavilla"):item.availability>0&&item.availability<=5?storeStockElement.classList.contains("cnc-out-of-stock")||(storeStockElement.classList.remove("cnc-in-stock"),storeStockElement.classList.add("cnc-few-left"),storeStockElement.textContent="V\xE4hiss\xE4"):item.availability>5&&!storeStockElement.classList.contains("cnc-out-of-stock")&&!storeStockElement.classList.contains("cnc-few-left")&&(storeStockElement.classList.remove("cnc-few-left"),storeStockElement.classList.add("cnc-in-stock"),storeStockElement.textContent="Saatavilla")}}for(let id in clickAndCollect.stores)clickAndCollect.stores[id].forEac
1h(item=>{requestAnimationFrame(()=>updateStockLabel(item))})},increaseChosenProductQuantity:function(id){if(this.chosenProducts.hasOwnProperty(id)){let newQuantity=this.chosenProducts[id].quantity+1;this.chosenProducts[id].quantity=newQuantity,sessionStorage[this.sessionStorageKey]=JSON.stringify(this.chosenProducts);let productItem=document.querySelector('.cnc-chosen-products .chosen-products-item[data-id="'+id+'"]');productItem.querySelector(".count-indicator").innerHTML=newQuantity;let newPriceFloat=newQuantity*this.chosenProducts[id].price,newPriceString=String(newPriceFloat.toFixed(2)).replace(".",",")+" \u20AC";productItem.querySelector(".chosen-products-item__price").innerHTML=newPriceString,this.totalPrice+=parseFloat(this.chosenProducts[id].price),document.querySelector(".cnc-total-price span").innerHTML=String(this.totalPrice.toFixed(2)).replace(".",","),this.checkChosenProductQuantities(),this.storesAvailabilityLabels(!0)}},decreaseChosenProductQuantity:function(id){if(this.chosenProducts.hasOwnProperty(id)){let productPrice=this.chosenProducts[id].price;if(this.chosenProducts[id].quantity>1){let newQuantity=this.chosenProducts[id].quantity-1;this.chosenProducts[id].quantity=newQuantity,sessionStorage[this.sessionStorageKey]=JSON.stringify(this.chosenProducts);let productItem=document.querySelector('.cnc-chosen-products .chosen-products-item[data-id="'+id+'"]');productItem.querySelector(".count-indicator").innerHTML=newQuantity;let newPriceFloat=newQuantity*productPrice,newPriceString=String(newPriceFloat.toFixed(2)).replace(".",",")+" \u20AC";productItem.querySelector(".chosen-products-item__price").innerHTML=newPriceString,this.totalPrice-=parseFloat(productPrice),document.querySelector(".cnc-total-price span").innerHTML=String(this.totalPrice.toFixed(2)).replace(".",",")}else this.removeProductFromChosenProducts(id),this.isEmptyObject(this.chosenProducts)?(this.totalPrice=0,document.querySelector(".cnc-total-price span").innerHTML="0",this.disableSubmitButton()):(this.totalPrice-=parseFloat(productPrice),document.querySelector(".cnc-total-price span").innerHTML=String(this.totalPrice.toFixed(2)).replace(".",","));this.checkChosenProductQuantities(),this.storesAvailabilityLabels(!0)}},checkChosenProductQuantities:function(){if(this.clearProductWarnings(),!this.selectedStore||this.isEmptyObject(this.chosenProducts)||this.isEmptyObject(this.stores))return;let invalidQuantities=!1,outOfStockProducts=!1;for(const productId in this.chosenProducts){if(!this.stores.hasOwnProperty(productId))continue;let chosenProduct=this.chosenProducts[productId],availabilities=this.stores[productId],len=availabilities.length,store=null;for(let i2=0;i2<len;i2++)if(availabilities[i2].location.trim().toUpperCase()===this.selectedStore){store=availabilities[i2];break}if(!store||store.availability<=0){outOfStockProducts=!0;break}if(chosenProduct.quantity>store.availability){invalidQuantities=!0;break}}if(outOfStockProducts){this.showProductsWarning("out-of-stock-products"),this.disableSubmitButton();return}if(invalidQuantities){this.showProductsWarning("invalid-quantities"),this.disableSubmitButton();return}this.enableSubmitButton()},clearProductWarnings:function(){let warningEls=document.querySelector(".cnc-modal .cnc-products-warning").querySelectorAll(".cnc-warning:not(.is-hidden)");[].forEach.call(warningEls,function(item){item.classList.add("is-hidden"),item.setAttribute("aria-hidden",!0)})},showProductsWarning:function(warningType){let warningEl=document.querySelector('.cnc-products-warning .cnc-warning[data-warning="'+warningType+'"]');warningEl&&warningEl.classList.contains("is-hidden")&&(warningEl.classList.remove("is-hidden"),warningEl.setAttribute("aria-hidden",!1))},removeProductFromChosenProducts:function(id){if(this.chosenProducts.hasOwnProperty(id)&&(delete this.chosenProducts[id],sessionStorage[this.sessionStorageKey]=JSON.stringify(this.chosenProducts),document.querySelector('.cnc-chosen-products .chosen-products-item[data-id="'+id+'"]').remove(),this.isEmptyObject(this.chosenProducts))){let noProducts=document.querySelector(".cnc-chosen-products .cnc-no-products");noProducts.classList.contains("is-hidden")&&noProducts.classList.remove("is-hidden")}this.stores.hasOwnProperty(id)&&delete this.stores[id],this.updateStoresListItems()},hideLoadingElement:function(){let loadingEl=document.querySelector(".cnc-chosen-products .content-message");loadingEl.classList.contains("loading")&&(loadingEl.classList.remove("loading"),setTimeout(function(){loadingEl.classList.contains("is-hidden")||loadingEl.classList.add("is-hidden")},500))},resetLocalData:function(){this.chosenProducts={},this.stores={},delete sessionStorage[this.sessionStorageKey],this.selectedStore=!1,this.totalPrice=0},getMissingProducts:function(){let missingProducts=[];for(const productId in this.chosenProducts)this.stores.hasOwnProperty(productId)||missingProducts.push(productId);return missingProducts},getProductStoreAvailabilities:function(storeId){let self2=this,missingProducts=self2.getMissingProducts();missingProducts.length?self2.fetchstores(missingProducts,function(){self2.updateStoreAvailabilitiesToProductsList(storeId)}):self2.updateStoreAvailabilitiesToProductsList(storeId)},fetchstores:function(productIds,callback){let self2=this;const promises=[];let len=productIds.length;for(let i2=0;i2<len;i2++){let chosenProduct=self2.chosenProducts[productIds[i2]];promises.push(self2.fetchStoreAvailabilities(productIds[i2],chosenProduct.sku))}Promise.all(promises).then(results=>{callback()}).catch(e=>{console.log(e),self2.showMessage("availability-error")})},updateStoreAvailabilitiesToProductsList:function(storeId){let self2=this;for(const productId in self2.stores){let stores=self2.stores[productId],len=stores.length;if(!len)continue;let store=null;for(let i2=0;i2<len;i2++)if(stores[i2].location.trim().toUpperCase()===storeId){store=stores[i2];break}let productAvailability=document.querySelector('.chosen-products-item[data-id="'+productId+'"] .cnc-product-availability'),quantity=productAvailability.querySelector(".quantity");if(quantity.classList.contains("few-left")&&quantity.classList.remove("few-left"),quantity.classList.contains("good-stock")&&quantity.classList.remove("good-stock"),productAvailability.classList.contains("is-hidden")&&productAvailability.classList.remove("is-hidden"),!store||store.availability<=0){quantity.textContent="0";continue}quantity.textContent=String(store.availability),store.availability<=5?quantity.classList.add("few-left"):quantity.classList.add("good-stock")}this.checkChosenProductQuantities()},fetchStoreAvailabilities:function(productId,productSku){let self2=this;return new Promise(function(resolve,reject){(!productSku||typeof productSku!="string")&&reject("product "+productId+" has invali
1d sku");let request=new XMLHttpRequest,url="https://otava-cloudprodcrossplat-agent.frendsapp.com/api/myymala/v1/saldot/"+productSku;request.open("GET",url,!0),request.onload=function(){if(this.status>=200&&this.status<400){let res=JSON.parse(this.response),availabilities=res.Availability.Stock[0].Location;availabilities.length?(self2.stores[productId]=availabilities,resolve("product "+productId+" availabilities fetched successfully")):reject("product "+productId+" availabilities parse error")}else{let message="Error "+this.status+": "+this.statusText;console.log(message),reject(message)}},request.onerror=function(){console.log("Connection error: failed to retrieve availability data for product "+productId),reject("product "+productId+" availabilities fetch error")},request.send()})},updateStoresListItems:function(){let self2=this,availabilityList=document.querySelector(".cnc-stores .store-availability-list"),listElements=availabilityList.children,listElementsLen=listElements.length,outOfStockStores=[];if(!listElementsLen)return;for(let i2=0;i2<listElementsLen;i2++){let listItem=listElements[i2];self2.excludedStores.forEach(function(item,index,arr){listItem.getAttribute("data-store-id")===item&&(listItem.classList.contains("cnc-out-of-stock")||listItem.classList.add("cnc-out-of-stock"))})}let storeItems=document.querySelectorAll(".cnc-stores .store-item:not(.cnc-out-of-stock)");[].forEach.call(storeItems,function(item){item.setAttribute("tabindex","0"),item.addEventListener("click",function(e){self2.deselectStores(),item.classList.add("selected-store");let storeId=item.dataset.storeId;self2.selectedStore=storeId,self2.getProductStoreAvailabilities(storeId)}),item.addEventListener("keydown",function(e){if(e.key==="Enter"||e.key===" "){e.preventDefault(),self2.deselectStores(),item.classList.add("selected-store");let storeId=item.dataset.storeId;self2.selectedStore=storeId,self2.getProductStoreAvailabilities(storeId)}})})},deselectStores:function(){this.selectedStore=!1;let selected=document.querySelectorAll(".cnc-stores .selected-store");selected.length&&selected[0].classList.remove("selected-store"),this.clearProductWarnings();let productAvailability=document.querySelectorAll(".cnc-chosen-products .cnc-product-availability");[].forEach.call(productAvailability,function(item){item.classList.contains("is-hidden")||(item.classList.add("is-hidden"),item.setAttribute("aria-hidden",!0))}),this.disableSubmitButton()},addChosenProductListItem:function(id,product){let self2=this,productItem=document.createElement("li"),productTotalPriceFloat=product.quantity*product.price,productTotalPriceString=String(productTotalPriceFloat.toFixed(2)).replace(".",",")+" \u20AC",availabilityLabel="Saldo valitussa myym\xE4l\xE4ss\xE4",increase_item_quantity="Lis\xE4\xE4 tuotteen m\xE4\xE4r\xE4\xE4",decrease_item_quantity="V\xE4henn\xE4 tuotteen m\xE4\xE4r\xE4\xE4";document.querySelector(".cnc-modal .cnc-chosen-products .cnc-chosen-products-list").appendChild(productItem),productItem.outerHTML='<li class="chosen-products-item overflow-ellipsis text-left" data-id="'+id+'"> <div class="cnc-image-wrapper"> <a target="_blank" class="quick-cart-image" href="'+product.url+'" tabindex="-1"> <img src="'+product.thumbnail+'"> <span class="count-indicator" aria-live="polite">'+product.quantity+'</span> </a> <div class="item-controls flex-container align-justify small button-group"> <button type="button" class="decrement"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" class="icon"><path fill="#444" d="M17.543 11.029H2.1A1.032 1.032 0 0 1 1.071 10c0-.566.463-1.029 1.029-1.029h15.443c.566 0 1.029.463 1.029 1.029 0 .566-.463 1.029-1.029 1.029z"/></svg> <span class="visually-hidden">'+decrease_item_quantity+'</span>
1 <span aria-hidden="true" class="icon-fallback-text">-</span> </button> <button type="button" class="increment"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" class="icon"><path fill="#444" d="M17.409 8.929h-6.695V2.258c0-.566-.506-1.029-1.071-1.029s-1.071.463-1.071 1.029v6.671H1.967C1.401 8.929.938 9.435.938 10s.463 1.071 1.029 1.071h6.605V17.7c0 .566.506 1.029 1.071 1.029s1.071-.463 1.071-1.029v-6.629h6.695c.566 0 1.029-.506 1.029-1.071s-.463-1.071-1.029-1.071z"/></svg> <span class="visually-hidden">'+increase_item_quantity+'</span> <span aria-hidden="true" class="icon-fallback-text">+</span> </button> </div> </div> <div class="cnc-product-content-wrapper"> <div class="cnc-product-details"> <p class="chosen-products-item__title"><a target="_blank" href="'+product.url+'">'+product.name+'</a></p> <p class="chosen-products-item__price">'+productTotalPriceString+'</p> </div> <div class="cnc-product-availability is-hidden"> <span class="availability-label">'+availabilityLabel+'</span> <span class="quantity"></span> </div> </div> </li>',self2.totalPrice+=productTotalPriceFloat,document.querySelector(".cnc-total-price span").innerHTML=String(self2.totalPrice.toFixed(2)).replace(".",","),document.querySelector('.chosen-products-item[data-id="'+id+'"] .item-controls .increment').addEventListener("click",function(e){self2.increaseChosenProductQuantity(id)}),document.querySelector('.chosen-products-item[data-id="'+id+'"] .item-controls .decrement').addEventListener("click",function(e){self2.decreaseChosenProductQuantity(id)})},getProductUrl:function(){if(this.productUrl)return this.productUrl;let url=window.location.href;return url.indexOf("?")!==-1&&(url=url.split("?")[0]),url.indexOf("#")!==-1&&(url=url.split("#")[0]),url},sendReservation:function(requestData,callback){let self2=this,request=new XMLHttpRequest;request.open("POST","https://otava-cloudprodcrossplat-agent.frendsapp.com/api/myymala/v1/varaukset"),request.onload=function(){if(this.status==200){let res=JSON.parse(this.response);callback(res)}else{let res=JSON.parse(this.response);console.log(res),console.log("Error "+this.status+": "+this.statusText),self2.showMessage("reservation-error")}},request.onerror=function(){console.log("Connection error: Click & Collect reservation failed"),self2.showMessage("reservation-error")};const cncPostData=JSON.stringify({requestData});request.setRequestHeader("Content-type","application/json; charset=utf-8"),request.send(cncPostData)}},window.addEventListener("load",function(){window.clickAndCollect.init()});function analyticsEvent(store,totalPrice){Shopify.analytics.publish("cnc_confirmation",{event:"Click and collect confirmation",clickncollect:{pickupstore:store,value:totalPrice}})} 2//# sourceMappingURL=/cdn/shop/t/66/assets/click-and-collect.js.map?v=51395369081201587041790071873
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.