define(['jquery','Magento_Customer/js/customer-data','underscore','prototype',],function($,customerData,_){'use strict';function GoogleAnalyticsUniversal(config){this.blockNames=config.blockNames;this.dlCurrencyCode=config.dlCurrencyCode;this.dataLayer=config.dataLayer;this.staticImpressions=config.staticImpressions;this.staticPromotions=config.staticPromotions;this.updatedImpressions=config.updatedImpressions;this.updatedPromotions=config.updatedPromotions;this.existingProductImpressions=[];} GoogleAnalyticsUniversal.prototype={selectItemFromCatalog:function(product,header){var dlUpdate={'event':'select_item','ecommerce':{currency:window.dlCurrencyCode,item_list_id:"category_page",item_list_name:"category page",'items':[{'item_id':product.id,'item_name':product.name.toLowerCase(),'index':parseInt(product.position)-1,'item_category':product.category.toLowerCase(),'item_list_id':"category_page",'item_list_name':"category pages",}]}};var addUpdate=Object.assign({},header,dlUpdate);this.dataLayer.push({'ecommerce':null});this.dataLayer.push(addUpdate);},addToCart:function(header,items){var dlUpdate={'event':'add_to_cart','ecommerce':{'currency':this.dlCurrencyCode,'items':items}};var addUpdate=Object.assign({},header,dlUpdate);this.dataLayer.push({'ecommerce':null});this.dataLayer.push(addUpdate);},removeItemFromCart:function(header,items){var dlUpdate={'event':'remove_from_cart','ecommerce':{'currency':this.dlCurrencyCode,'items':items}};var addUpdate=Object.assign({},header,dlUpdate);this.dataLayer.push({'ecommerce':null});this.dataLayer.push(addUpdate);},removeFromCart:function(header,items){var dlUpdate={'event':'remove_from_cart','ecommerce':{'currency':this.dlCurrencyCode,'items':items}};var addUpdate=Object.assign({},header,dlUpdate);this.dataLayer.push({'ecommerce':null});this.dataLayer.push(addUpdate);},clickBanner:function(id,name,creative,position){var dlPromotions={'event':'select_promotion','ecommerce':{'promotion_id':id,'promotion_name':name.toLowerCase(),'creative_name':name.toLowerCase(),'creative_slot':position}};var header=window.gaHeaderData;var addPromotions=Object.assign({},header,dlPromotions);this.dataLayer.push({'ecommerce':null});this.dataLayer.push(addPromotions);},bindImpressionClick:function(id,type,name,category,list,position,blockType,listPosition){var productLink=[],eventBlock,self=this;var header=window.gaHeaderData;switch(blockType){case'catalog.product.related':eventBlock='.products-related .products';break;case'product.info.upsell':eventBlock='.products-upsell .products';break;case'checkout.cart.crosssell':eventBlock='.products-crosssell .products';break;case'category.products.list':case'search_result_list':eventBlock='.products .products';break;} productLink=$$(eventBlock+' .item:nth('+listPosition+') a');if(type==='configurable'||type==='bundle'||type==='grouped'){productLink=$$(eventBlock+' .item:nth('+listPosition+') .tocart',eventBlock+' .item:nth('+listPosition+') a');} productLink.each(function(element){element.observe('click',function(){if(blockType!=='category.products.list'){category='';} self.activeOnProducts(id,name,list,position,category);var selectedProduct=self.staticImpressions[blockType].find((element)=>element.id===id);self.selectItemFromCatalog(selectedProduct,header);});});},updateImpressions:function(){var pageImpressions=this.mergeImpressions(),dlImpressions={'event':'productImpression','ecommerce':{'impressions':[]}},i=0,impressionCounter=0,impression,blockName;for(blockName in pageImpressions){if(blockName==='length'||!pageImpressions.hasOwnProperty(blockName)){continue;} for(i;i0){this.dataLayer.push(dlImpressions);}},productImpressions:function(){var self=this;document.addEventListener('scroll',function(){self.processProductImpressions();},{passive:true});self.processProductImpressions();},processProductImpressions:function(){var self=this;if((!self.staticImpressions.length&&!self.staticImpressions['category.products.list'])&&(!self.staticImpressions.length&&!self.staticImpressions['search_result_list'])){return;} var items=self.staticImpressions['category.products.list']??this.staticImpressions['search_result_list'];if(items.length===self.existingProductImpressions.length){return;} var element='li.product-item a.product-item-photo';var viewPortItems=[];var newViewPortItems=[];$(element).each(function(){var rect=$(this)[0].getBoundingClientRect();var sku=$(this).attr('data-product-sku');var inViewport=(rect.top>=0&&rect.left>=0&&rect.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&rect.right<=(window.innerWidth||document.documentElement.clientWidth));if(inViewport){var product=items.filter(function(item){return item.id===sku;})[0];if(product){var productJson={'item_id':product.id,'item_name':product.name.toLowerCase(),'index':parseInt(product.position)-1,'item_category':product.category.toLowerCase(),'item_list_id':"category_page",'item_list_name':"category pages",};viewPortItems.push(productJson);viewPortItems.filter(function(o){var exist=false;self.existingProductImpressions.filter(function(i){if(i.item_id===o.item_id){exist=true;}});if(!exist){newViewPortItems.push(o);self.existingProductImpressions.push(productJson);}});}}});if(newViewPortItems.length){var dlProductImpressions={'event':'view_item_list','ecommerce':{'currency':window.dlCurrencyCode,'item_list_id':"category_page",'item_list_name':"category page",'items':newViewPortItems}};var addProductImpressions=Object.assign({},window.gaHeaderData,dlProductImpressions);dataLayer.push(addProductImpressions);}},mergeImpressions:function(){var pageImpressions=[];this.blockNames.forEach(function(blockName){if(blockName in this.updatedImpressions){pageImpressions[blockName]=this.updatedImpressions[blockName];}else if(blockName in this.staticImpressions){pageImpressions[blockName]=this.staticImpressions[blockName];}},this);return pageImpressions;},updatePromotions:function(){var pagePromotions=[],self=this;if(this.updatedPromotions.length){pagePromotions=this.updatedPromotions;} if(!pagePromotions.length&&this.staticPromotions.length){pagePromotions=this.staticPromotions;} $('[data-banner-id]').on('click','[data-banner-id]',function(){var bannerId=$(this).attr('data-banner-id'),promotions=_.filter(pagePromotions,function(item){return item.id===bannerId;});_.each(promotions,function(promotionItem){self.clickBanner(promotionItem.id,promotionItem.name,promotionItem.creative,promotionItem.position);});});}};return GoogleAnalyticsUniversal;});