1function googleTagManager_metricData(metricData, typePage){ 2 console.log('Classic GTM setup'); 3 window.GTMstandardInfo ='' + 4 'FormatPrice() - f-ja za formatiranje cene' + 5 'window.GTMstandardThousandSeparator - definisati koji karakter odvaja hiljade u ceni' + 6 'window.GTMstandardRemoveDecimalPrice - ako je true vraca vrednsot bez decimale' + 7 'window.GTMstandardClearThousandPrice - ako je true vraca vrednsot bez oznacavanja hiljada' + 8 'window.GTMstandardDecimalSeparator - definisati koji karakter odvaja decimale u ceni' 9 if(typeof dataLayer === 'undefined' || dataLayer === null){ 10 console.log('Error: dataLayer is not defined'); 11 return 12 } 13 const _DefaultCurrency = metricData.currencyISO; 14 15 16 dataLayer.push({ 17 'event' : 'pageView', 18 'isEnvironmentProd': ''+metricData.isEnvironmentProd+'', 19 'pageName': ''+metricData.name+'', 20 'pageType': ''+typePage+'', 21 'lang': ''+metricData.lang+'', 22 'pageCode': ''+metricData.country_code+'', 23 'version': ''+metricData.version+'', 24 'currency': ''+_DefaultCurrency+'', 25 'UserID': ''+metricData.userID+'', 26 'siteType': usedDevice() 27 }); 28 29 //ImpressionOnLoad(metricData); 30 31 switch(typePage) { 32 33 case 'page': 34 gtm_errorPage(metricData); 35 break; 36 case 'product': 37 gtm_viewProductPage(metricData); 38 break; 39 case 'product_list': 40 break; 41 case 'cart': 42 break; 43 case 'cart_confirm': 44 //print in confirm page 45 break; 46 case 'confirm_registration': 47 break; 48 case 'article_details': 49 break; 50 default: 51 break; 52 } 53 54 function removeDecimal(price, decimalSeparator){ 55 if(typeof price === 'string'){ 56 IntPrice = price.split(decimalSeparator); 57 return IntPrice[0]; 58 } 59 if(typeof price === 'object'){ 60 IntPrice = price[0].split(decimalSeparator); 61 return IntPrice[0]; 62 } 63 64 } 65 66 function FormatPrice(price, thousandSeparator,decimalSeparator){ 67 if(!decimalSeparator){ 68 decimalSeparator = window.GTMstandardDecimalSeparatorPrice; 69 } 70 if(!thousandSeparator){ 71 thousandSeparator = window.GTMstandardThousandSeparatorPrice; 72 } 73 74 if(typeof price === 'string'){ 75 if(window.GTMstandardRemoveDecimalPrice){ 76 newPrice = removeDecimal(price,decimalSeparator); 77 price = newPrice; 78 } 79 if(window.GTMstandardClearThousandPrice){ 80 price = price.replace(thousandSeparator,''); 81 } 82 return price; 83 } 84 if(typeof price === 'object'){ 85 if(window.GTMstandardRemoveDecimalPrice){ 86 newPrice = removeDecimal(price[0],decimalSeparator); 87 price = newPrice; 88 } 89 if(window.GTMstandardRemoveDecimalPrice){ 90 price = price.replace(thousandSeparator,''); 91 } 92 return price; 93 } 94 return price; 95 96 } 97 98 function FormatName(name,code){ 99 var p_name = name; 100 if(window.combProductNameProductCode){ 101 return p_name = name+' | '+code; 102 } 103 return p_name; 104 } 105 106 addtoCartFromListing(); 107 gtm_addToCart(metricData); 108 gtm_addToWishlist(metricData); 109 gtm_removeFromWishlist(metricData); 110 NewsletterSendSuccess(); 111 gtm_ProductClick(metricData); 112 removeFromCartGTM(metricData); 113 LoginEventGTM(); 114 gtm_newRegistration(); 115 ProductInListsGTM(metricData); 116 formErrorEvent(); 117 gdpr_init(); 118 promoBannerGTM(metricData); 119 gtm_newRegistrationCustomEvent(); 120 gtmOfferBookingDirect(); 121 gtmOfferBookingDirectButton(); 122 directClinicInquirySent(); 123 gtm_Search(); 124 gtm_InitiateCheckout(metricData); 125 126 function usedDevice(){ 127 128 var substring ='Mobile'; 129 var device = false; 130 131 device = window.location.hash.indexOf(substring); 132 //device = navigator.userAgent.includes(substring); 133 if(device >= 0){ 134 if(screen.width >= 768 && screen.width < 1025){ 135 return 't'; 136 }else{ 137 return 'm'; 138 } 139 }else{ 140 return 'd'; 141 142 } 143 } 144 145 /*Push F-je */ 146 function pushError404(pushobj){ 147 pushobj.push({ 148 'event': 'GTMError', 149 'eventCategory': '404', 150 }); 151 } 152 function pushFormObject(pushobj,name,eventActionValue){ 153 if(!eventActionValue){ 154 eventActionValue = 'OK'; 155 } 156 pushobj.push({ 157 'event': 'customEvent', 158 'eventCategory': 'Forms', 159 'eventAction': eventActionValue, 160 'eventLabel': name 161 }); 162 } 163 164 function pushEvent(pushobj,eventName){ 165 pushobj.push({ 166 'event': eventName 167 }); 168 } 169 170 function pushProductDetail(pushobj,obj){
171 obj.sendName = FormatName(obj.name,obj.productCode); 172 173 pushobj.push({ 174 'event': 'productDetail', 175 //'ProductStockStatus': 'Na skladištu', 176 'ecommerce': { 177 'currencyCode': ''+_DefaultCurrency+'', 178 'detail': { 179 'products': [{ 180 'name': ''+obj.sendName+'', 181 'id': ''+obj.id+'', 182 'price': ''+obj.price+'', 183 'brand': ''+obj.brand+'', 184 'category': ''+obj.breadcrumbs+'', 185 'variant':'', 186 'purpose':''+obj.purpose +'', 187 "dimension4": ''+obj.available+'', 188 'sku': ''+obj.productCode+'' 189 }] 190 } 191 } 192 }); 193 } 194 195 function pushAddToCart(pushobj,productObj){ 196 productObj.sendName = FormatName(productObj.name,productObj.productCode); 197 pushobj.push({ 198 'event': 'addToCart', 199 'ecommerce': { 200 'currencyCode': ''+_DefaultCurrency+'', 201 'add': { 202 'actionField': {}, 203 'products': [{ 204 'name': ''+productObj.sendName+'', 205 'id': ''+productObj.id+'', 206 'price': ''+FormatPrice(productObj.price)+'', 207 'brand': ''+productObj.brand+'', 208 'category': ''+productObj.categoryName+'', 209 'variant': ''+productObj.size+'', 210 'quantity': productObj.quantity, 211 'sku': productObj.productCode 212 } 213 ]} 214 } 215 }); 216 } 217 218 function pushAddToFavoritesProduct(pushobj,productObj){ 219 pushobj.push({ 220 'event': 'addToWishlist', 221 'ecommerce': { 222 'currencyCode': ''+_DefaultCurrency+'', 223 'add': { 224 'actionField': {}, 225 'products': [{ 226 'name': ''+productObj.name+'', 227 'id': ''+productObj.id+'', 228 'price': ''+FormatPrice(productObj.price)+'', 229 'brand': ''+productObj.brand+'', 230 'category': ''+productObj.categoryName+'', 231 } 232 ]} 233 } 234 }); 235 } 236 237 function pushRemoveToFavoritesProduct(pushobj,productObj){ 238 pushobj.push({ 239 'event': 'removeFromWishlist', 240 'ecommerce': { 241 'currencyCode': ''+_DefaultCurrency+'', 242 'remove': { 243 'actionField': {}, 244 'products': [{ 245 'name': ''+productObj.name+'', 246 'id': ''+productObj.id+'', 247 'price': ''+FormatPrice(productObj.price)+'', 248 'brand': ''+productObj.brand+'', 249 'category': ''+productObj.categoryName+'', 250 251 } 252 ]} 253 } 254 }); 255 } 256 257 function pushProductClick(pushobj,productObj){ 258 259 dataLayer.push({ 260 'event': 'productClick', 261 'ecommerce': { 262 'currencyCode': ''+_DefaultCurrency+'', 263 'click': { 264 'actionField': { 265 'list' : ''+productObj.list+'', 266 }, 267 'products': [ 268 { 269 'name': ''+FormatName(productObj.productname,productObj.productcode)+'', 270 'id': ''+productObj.productid+'', 271 'price': ''+FormatPrice(productObj.productprice)+'', 272 'category': ''+productObj.productcat+'', 273 'brand': ''+productObj.brand+'', 274 'position': productObj.productposition 275 } 276 ] 277 } 278 } 279 }); 280 } 281 282 function pushRemoveProduct(pushobj,productObj){ 283 pushobj.push({ 284 'event': 'removeFromCart', 285 'ecommerce': { 286 'currencyCode': ''+_DefaultCurrency+'', 287 'remove': { 288 'actionField': { 289 }, 290 'products': [ 291 { 292 'name':''+FormatName(productObj.productname,productObj.productItemId)+'', 293 'id': ''+productObj.productid+'', 294 'price': ''+FormatPrice(productObj.productprice)+'', 295 'brand': ''+productObj.productbrand+'', 296 'category': ''+productObj.productcat+'', 297 'variant': ''+productObj.size+'', 298 'quantity': productObj.quantity, 299 'sku': productObj.productItemId 300 } 301 ] 302 } 303 } 304 }); 305 } 306 307 function pushLoginUser(pushobj, userObj){ 308 309 if(disableFBBrowserEvents) return; 310 311 pushobj.push({ 312 'event': 'userLogin', 313 'eventCategory': 'User Engagement', 314 'eventAction': 'User Login', 315 'loginMethod': 'Standard', 316 'userID': ''+userObj+'', 317 }); 318 } 319 320 function pushProductImpression(pushobj,objArray){ 321 pushobj.push({ 322 'event': 'productImpression', 323 'ecommerce':{ 324 'currencyCode': ''+_DefaultCurrency+'', 325 'impressions': objArray 326 } 327 328 }); 329 } 330 331 function pushPromotionClick(pushobj,sliderObj){ 332 pushobj.push({ 333 'event': 'promotionClick', 334 'ecommerce': { 335 'currencyCode': ''+_DefaultCurrency+'', 336 'promoClick': { 337 'promotions': [ 338 { 339 'id': ''+sliderObj.id+'', 340 'name': ''+sliderObj.name+'', 341 'creative': ''+sliderObj.creative+'', 342 'position': ''+sliderObj.position+'' 343 } 344 ] 345 } 346 } 347 }); 348 } 349 350 function pushPromoView(pushobj,sliderArray){
351 if(!sliderArray){ 352 return false; 353 } 354 dataLayer.push({ 355 'event': 'promotionView', 356 'currencyCode': ''+_DefaultCurrency+'', 357 'ecommerce': { 358 'promoView': { 359 'promotions': sliderArray 360 } 361 } 362 }); 363 } 364 365 function pushPromotionSliderChange(pushobj,sliderObj){ 366 367 if(nb_site_url.includes('sportvision') || nb_site_url.includes('sport-vision') || nb_site_url.includes('buzz') 368 || nb_site_url.includes('runnmore') || nb_site_url.includes('tike')) { 369 return; 370 } 371 372 pushobj.push({ 373 'event': 'promotionSliderChange', 374 'currencyCode': ''+_DefaultCurrency+'', 375 'ecommerce': { 376 'promoView': { 377 'promotions': [ 378 { 379 'id': ''+sliderObj.id+'', 380 'name': ''+sliderObj.name+'', 381 'creative': ''+sliderObj.creative+'', 382 'position': ''+sliderObj.position+'' 383 } 384 ] 385 } 386 } 387 }); 388 } 389 390 function getCategoryTreeFormat(obj){ 391 return obj.replace(/ > /g, "/").trim(); 392 } 393 394 function gdpr_init(){ 395 if(gtm_ga4_analytics_id != ''){ 396 return false; 397 } 398 var activeTrigers = readCookie('site_cookie_info').split(","); 399 if(activeTrigers.length > 0){ 400 var i; 401 for (i = 0; i < activeTrigers.length; ++i) { 402 pushEvent(dataLayer,activeTrigers[i]); 403 } 404 } 405 406 $('.cookie-agree-gdpr').click(function () { 407 var cookieEvents = []; 408 $('.cokie-info-wrapper .items-wrapper .item input').each(function () { 409 if($(this).is(':checked') && $(this).val() != '' && $(this).val() != '1'){ 410 pushEvent(dataLayer,$(this).val()); 411 cookieEvents.push($(this).val()); 412 } 413 414 var cookieName = $(this).attr('name'); 415 if($(this).is(':checked') && $(this).val() == '1' && cookieName.includes('site_')){ 416 createCookie(cookieName, 1, 365); 417 } 418 419 }); 420 cookieEvents = cookieEvents.join(','); 421 422 if(cookieEvents === "") { 423 createCookie('site_cookie_info', 2, 365) 424 } else { 425 createCookie('site_cookie_info', cookieEvents, 365); 426 } 427 428 // $('.cookie-info-slider').hide( "slow" ); 429 $('.cookie-info-slider').animate( {height: 0, opacity: 0},"slow" ); 430 }); 431 } 432 433 function gtm_errorPage(metricData){ 434 if(metricData.uniqueCode === 'error'){ 435 pushError404(dataLayer); 436 } 437 } 438 439 function gtm_viewProductPage(metricProduct){ 440 available = 'Out of Stock'; 441 if(metricProduct.price != 0){ 442 metricProduct.available = 'In Stock'; 443 } 444 var breadcrumbs = getCategoryTreeFormat(metricProduct.breadCrumbs); 445 metricProduct.breadcrumbs = breadcrumbs; 446 //console.log(metricProduct); 447 //name 448 pushProductDetail(dataLayer,metricProduct); 449 //console.log(metricProduct); 450 } 451 452 function addtoCartFromListing(){ 453 var productItem = {}; 454 var buttonBuy = $('.buyButtonOnLists'); 455 var $return={}; 456 $return.flag = false; 457 buttonBuy.click(function(){ 458 $return.flag = true; 459 productItem = $(this).parents('.product-item').data(); 460 $return.productItem = productItem; 461 return $return; 462 }); 463 464 } 465 function gtm_addToCart(metricProduct){ 466 467 var $button = $('#nb_addToCartButton'); 468 var buttonBuy = $('.buyButtonOnLists'); 469 var p_data = {}; 470 471 //detalj proizvoda 472 if($button.length > 0){ 473 p_data = metricProduct; 474 $button.click(function(){ 475 p_data.size = $('.product-attributes li.active').data('productsize-name'); 476 p_data.quantity = $('#product_quantity').val(); 477 }); 478 }else{ 479 buttonBuy.click(function(){ 480 p_data = $(this).parents('.product-item').data(); 481 p_data.name = p_data.productname; 482 p_data.id = p_data.productid; 483 p_data.price = p_data.productprice; 484 p_data.brand = p_data.productbrand; 485 p_data.category = p_data.productcatbread;
486 p_data.productCode = p_data.productcode; 487 p_data.quantity = 1; 488 p_data.size = $(this).parents('.product-item').find('.size-select-wrapper .btn-sizes.active .original-size').text(); 489 }); 490 } 491 492 window.addEventListener('cartButtonClick', function (e){ 493 if(!p_data) return; 494 495 gtagAddToCart = true; 496 497 if(gtagAddToCart && p_data){ 498 p_data.categoryName = getCategoryTreeFormat(metricProduct.breadCrumbs); 499 pushAddToCart(dataLayer,p_data); 500 gtagAddToCart = false; 501 } 502 }); 503 504 } 505 function gtm_addToWishlist(metricProduct){ 506 507 var p_data = {}; 508 p_data = metricProduct; 509 var productObj={}; 510 window.addEventListener('addToFavoritesProduct', function (e){ 511 if(!p_data) return; 512 p_data.categoryName = getCategoryTreeFormat(metricProduct.breadCrumbs); 513 pushAddToFavoritesProduct(dataLayer,p_data); 514 }); 515 516 } 517 function gtm_removeFromWishlist(metricProduct){ 518 519 var p_data = {}; 520 p_data = metricProduct; 521 522 window.addEventListener('removeFavoritesProduct', function (e){ 523 if(!p_data) return; 524 p_data.categoryName = getCategoryTreeFormat(metricProduct.breadCrumbs); 525 pushRemoveToFavoritesProduct(dataLayer,p_data) 526 }); 527 528 } 529 530 function gtm_newRegistration(){ 531 $(document).on('registerUserSuccess', function() { 532 pushFormObject(dataLayer,'Register Form'); 533 }); 534 } 535 536 function gtm_newRegistrationCustomEvent(){ 537 window.addEventListener('registerUserSuccess',function(e){ 538 if(e.detail && e.detail == 1){ 539 pushEvent(dataLayer,'signupNaturalPerson'); 540 pushEvent(dataLayer,'userRegistration'); 541 }else{ 542 pushEvent(dataLayer,'signupLegalEntity'); 543 pushEvent(dataLayer,'legalRegistration'); 544 } 545 546 }); 547 } 548 549 function gtm_Cart(metricData){ 550 551 } 552 553 function gtm_InitiateCheckout(metricData){ 554 //InitiateCheckout 555 if(metricData.uniqueCode === 'cart' && nb_type_page !== 'cart_confirm' ){ 556 pushEvent(dataLayer,'begin_checkout'); 557 } 558 } 559 560 function gtmOfferBookingDirectButton(){ 561 window.addEventListener('saveOffersList',function(e){ 562 pushEvent(dataLayer,'directClinicInquiry'); 563 }); 564 565 } 566 567 function gtmOfferBookingDirect(){ 568 window.addEventListener('addOfferVer2',function(e){ 569 pushEvent(dataLayer,'directClinicInquiryaddOfferVer2'); 570 }); 571 } 572 function directClinicInquirySent(){ 573 window.addEventListener('saveBookingStoreOffer',function(e){ 574 pushEvent(dataLayer,'directClinicInquirySent'); 575 }); 576 window.addEventListener('productquerySuccess',function(e){ 577 pushEvent(dataLayer,'directClinicInquirySent'); 578 }); 579 } 580 581 function NewsletterSendSuccess(){ 582 583 $(document).on('popSubscribeSuccess', function() { 584 pushFormObject(dataLayer,'Newsletter Login'); 585 pushEvent(dataLayer,'newsletterSignup'); 586 }); 587 window.addEventListener('newsletter_login_error', function (e) { 588 dataLayer.push({ 589 'event': 'customEvent', 590 'eventCategory': 'Forms', 591 'eventAction': 'Error', 592 'eventLabel': 'Newsletter' 593 }) 594 }); 595 596 window.addEventListener('newsletter_login_success', function (e) { 597 dataLayer.push({ 598 'event': 'customEvent', 599 'eventCategory': 'Forms', 600 'eventAction': 'OK', 601 'eventLabel': 'Newsletter' 602 }) 603 }); 604 } 605 606 function gtm_ProductClick(metricData){ 607 608 var $item = $('.product-item'); 609 var isinslider,$parent,productObj={}; 610 var list,list_cat; 611 612 $item.click(function(e){ 613 614 if ($(this).is(".active")) { 615 return false 616 } 617 //product Object 618 productObj= $(this).data(); 619 620 $parent = $(this).parents('.slider.product'); 621 622 isinslider = $parent.length;
623 isinslider = (isinslider > 0) ? true :false; 624 625 if(isinslider){ 626 list = $parent.data('list-name'); 627 }else{ 628 if($(this).closest("[data-list-name]").data('list-name') != 'undefined'){ 629 list_cat = ''; 630 }else{ 631 list_cat = ' - '+$(this).closest("[data-list-name]").data('list-name'); 632 } 633 634 list = metricData.name+list_cat; 635 } 636 productObj.brand = $(this).find('.caption-brand a').attr('title'); 637 638 if(productObj.productcatbread){ 639 productObj.productcatbread = productObj.productcatbread.replace(/ > /g, "/").trim(); 640 productObj.productcat = productObj.productcatbread 641 } 642 productObj.currency =_DefaultCurrency; 643 productObj.list = list; 644 pushProductClick(dataLayer,productObj); 645 646 }); 647 648 } 649 650 function removeFromCartGTM(metricData){ 651 652 var product={},quantity,product1 ={}, size; 653 window.addEventListener('initCartOnePage', function (e) { 654 var del = $('.product-item-remove'); 655 del.click(function(e){ 656 product={}; 657 product = $(this).parents('.item').data(); 658 quantity = $(this).parents('.item').find('.cart-quantity select').val(); 659 if(!quantity){ 660 quantity = 1; 661 } 662 product.size = $(this).parents('.item').find('.product-item-size span').text(); 663 if(product.size == ''){ 664 //product-size span 665 product.size = $(this).parents('.item').find('.product-size span').text(); 666 } 667 product.currency = _DefaultCurrency; 668 if(!product.quantity){ 669 product.quantity = quantity; 670 } 671 product1 = product; 672 }); 673 }); 674 675 window.addEventListener('deleteProductFromCartOnePage', function (e) { 676 pushRemoveProduct(dataLayer,product); 677 }); 678 679 } 680 681 function LoginEventGTM(){ 682 683 if(window.navigator.userAgent.indexOf(".NET") > 0){ 684 }else{ 685 window.addEventListener('loginUserNew', function (e) { 686 pushFormObject(dataLayer,'login form'); 687 if(typeof e.detail != 'undefined' && e.detail !== null && typeof e.detail.userID !='undefined'){ 688 pushLoginUser(dataLayer,e.detail.userID, ''); 689 }else{ 690 pushLoginUser(dataLayer,'', ''); 691 } 692 //pushLoginUser(dataLayer,e.detail.userID); 693 }); 694 } 695 } 696 697 function ProductInListsGTM(metricData){ 698 var productItem = $('.product .product-item'), 699 listName,list,list_cat; 700 var productObjEach ={}; 701 var productObjArray = {}; 702 var productObj = {}; 703 704 if(!productItem.length) return; 705 706 Products(productItem,metricData,false); 707 708 function Products(productItem,metricData,click){ 709 var objarrayTest=[], priceC; 710 productItem.each(function(){ 711 712 productObjEach = {}; 713 productObjEach = $(this).data(); 714 715 listName = $(this).parents('.block').data('list-name'); 716 if(!listName){ 717 list_cat = $(this).closest("[data-list-name]").data('list-name'); 718 if(list_cat){ 719 list_cat = ' - '+list_cat; 720 }else { 721 list_cat = ''; 722 } 723 list = metricData.name+list_cat; 724 listName = list; 725 } 726 727 if(!productObjEach.productname) return; 728 if(!productObjEach.productprice) return; 729 730 if(isNaN(productObjEach.productprice)){ 731 priceC = productObjEach.productprice.replace(".", ""); 732 priceC = priceC.replace(",", "."); 733 //priceC = FormatPrice(priceC); 734 //console.log(priceC); 735 priceC = FormatPrice(priceC,'','.'); 736 }else{ 737 priceC = FormatPrice(productObjEach.productprice,'','.'); 738 } 739 740 741 productObj = {}; 742 productObj.name = FormatName(productObjEach.productname,productObjEach.productcode) 743 744 productObj.id = ''+productObjEach.productid+''; 745 productObj.price = ''+priceC+''; 746 productObj.category = productObjEach.productcategory; 747 if(productObjEach.productcatbread){ 748 productObj.category = ''+productObjEach.productcatbread.replace(/ > /g, "/").trim()+''; 749 } 750 751 productObj.brand = productObjEach.productbrand; 752 //productObj.productcatbread = productObjEach.productcatbread; 753 productObj.list = ''+listName+''; 754 productObj.position = productObjEach.productposition; 755 756 /*if(productObj.productcatbread){ 757 productObj.productcatbread = productObj.productcatbread.replace(/ > /g, "/").trim(); 758 productObj.category = ''+productObjEach.productcatbread+''; 759 }*/ 760 761 //add object to another object 762 if(!click){ 763 if( $(this).parents('.tab-pane').hasClass('active') || $(this).parents('.tab-pane').length === 0){ 764 objarrayTest.push(productObj); 765 } 766 }else{ 767 objarrayTest.push(productObj); 768 } 769 }); 770 pushProductImpression(dataLayer,objarrayTest); 771 772 773 productObjArray['impressions'] =[]; 774 } 775 776 $('.lists-tabs .tab-items').click(function(){ 777 778 var lsit_tab = $(this); 779 var active_link=''; 780 781 if(lsit_tab.hasClass('active')){ 782 return false;
783 } 784 785 active_link = lsit_tab.find('a').attr('href'); 786 if(active_link){ 787 Products($(active_link+" .product-item"),metricData,true); 788 } 789 }); 790 791 } 792 793 function formErrorEvent(){ 794 var submitButton = $('button.confirm-loader'); 795 var arrayString; 796 var form = false; 797 var uniquearray=[], formArray=[]; 798 799 function mapFormName(name){ 800 var mapName; 801 mapName = name; 802 switch (name) { 803 case 'login_form': 804 mapName = 'login form'; 805 break; 806 case 'registration_modal': 807 mapName = 'registration modal'; 808 break; 809 case 'login_form login-style': 810 mapName = 'login form page'; 811 break; 812 case 'registration_page': 813 mapName = 'registration page'; 814 break; 815 case 'modal_lost_password_form': 816 mapName = 'lost password form modal'; 817 break; 818 case 'lost_password_form': 819 mapName = 'lost password form'; 820 break; 821 case 'cart_onepage_form': 822 mapName = 'cart form'; 823 break; 824 case 'newsletter_form': 825 mapName = 'newsletter form'; 826 break; 827 } 828 829 return mapName; 830 } 831 832 function removeDups(names) { 833 let unique = {}; 834 names.forEach(function(i) { 835 if(!unique[i]) { 836 unique[i] = true; 837 } 838 }); 839 return Object.keys(unique); 840 } 841 842 submitButton.click(function(){ 843 arrayString='error'; 844 form = $(this).parents('form').attr('id'); 845 if(!form){ 846 form = $(this).parents('form').attr('class'); 847 } 848 $(this).parents('form').find('input').each(function(){ 849 formArray.push($(this).attr('name')); 850 }); 851 852 setTimeout(function () { 853 uniquearray = removeDups(window.nbFormError); 854 855 uniquearray.forEach(function(element) { 856 if(formArray.includes(element)){ 857 arrayString +='|'+element; 858 } 859 860 }); 861 862 if(arrayString === 'error'){ 863 arrayString='OK'; 864 } 865 pushFormObject(dataLayer,mapFormName(form),arrayString); 866 if(mapFormName(form) == 'contact_form' && arrayString=='OK'){ 867 pushEvent(dataLayer,'expressInquirySent'); 868 } 869 if(mapFormName(form) == 'contact_booking' && arrayString=='OK'){ 870 pushEvent(dataLayer,'expressInquirySent'); 871 } 872 873 window.nbFormError=[]; 874 875 876//sve mora biti u ovom timeoutu da bi objekat imao vreme da se popuni 877 }, 100); 878 879 }); 880 } 881 882 function promoBannerGTM(metricData){ 883 884 var $slider = $('.slider:not(.product-slider) .item'); 885 var $staticSlider = $('.slider-static .item'); 886 var onloadSldierItems=[]; 887 888 if($slider.length === 0 && $staticSlider.length === 0){ 889 return false; 890 } 891 892 function BannersOnClick(){ 893 $slider.add($staticSlider).click(function(e){ 894 var sliderObj = {}; 895 //e.preventDefault(); 896 var thisSliderItem = $(this); 897 if(thisSliderItem.parents('.slider-init').length > 0){ 898 sliderObj.position = thisSliderItem.parents('.slider-init').data('gtm-slider-position'); 899 } 900 if(thisSliderItem.parents('.slider-static').length > 0){ 901 sliderObj.position = thisSliderItem.parents('.slider-static').data('gtm-slider-position'); 902 } 903 904 sliderObj.id = thisSliderItem.data('gtm-slider-id'); 905 sliderObj.name = thisSliderItem.data('gtm-slider-name'); 906 sliderObj.creative = thisSliderItem.data('gtm-slider-creative'); 907 onClickSlider(sliderObj,metricData); 908 }); 909 } 910 BannersOnClick(); 911 //slider click 912 913 function BannerOnLoad(metricData){ 914 var sliderObj1 = {}; 915 //static sliders 916 $staticSlider.each(function (e) { 917 sliderObj1.position = $(this).parents('.slider-static').data('gtm-slider-position'); 918 sliderObj1.id = $(this).data('gtm-slider-id'); 919 sliderObj1.name = $(this).data('gtm-slider-name'); 920 sliderObj1.creative = $(this).data('gtm-slider-creative'); 921 if(sliderObj1.id === undefined){ 922 return 923 } 924 onloadSldierItems.push(sliderObj1); 925 sliderObj1 ={}; 926 }); 927 928 setTimeout(function (e) { // da se instanciraju svi slajderi 929 var slide = $('.slider .item.slick-active'); 930 slide.each(function (e) { 931 932 sliderObj1.position = $(this).parents('.slider-init').data('gtm-slider-position'); 933 sliderObj1.id = $(this).data('gtm-slider-id'); 934 sliderObj1.name = $(this).data('gtm-slider-name'); 935 sliderObj1.creative = $(this).data('gtm-slider-creative'); 936 if(sliderObj1.id === undefined){ 937 return 938 } 939 onloadSldierItems.push(sliderObj1); 940 sliderObj1 ={}; 941 942 }); 943 PromoView(onloadSldierItems); 944 }, 500); 945 946 947 } 948 BannerOnLoad(metricData); 949 950 function SliderChange(metricData){ 951 var sliderObj2 ={}; 952 $(".slider").on("afterChange", function (event, slick, currentSlide, nextSlide){ 953 954 sliderObj2.position = $(this).find('.slider-init').data('gtm-slider-position'); 955 sliderObj2.id = $(this).find('.item.slick-active').data('gtm-slider-id'); 956 sliderObj2.name = $(this).find('.item.slick-active').data('gtm-slider-name'); 957 sliderObj2.creative = $(this).find('.item.slick-active').data('gtm-slider-creative'); 958 promoSliderChange(sliderObj2,metricData); 959 sliderObj2 ={}; 960 961 }); 962 } 963 SliderChange(metricData); 964 965//events 966 function onClickSlider(slider,metricData){
967 if(!slider || slider.id === undefined){ 968 return false; 969 } 970 pushPromotionClick(dataLayer, slider); 971 } 972 973 function PromoView(sliderArray){ 974 if(!sliderArray){ 975 return false; 976 } 977 pushPromoView(dataLayer,sliderArray); 978 979 } 980 981 function promoSliderChange(slider,metricData){ 982 if(!slider){ 983 return false; 984 } 985 pushPromotionSliderChange(dataLayer,slider); 986 } 987 988 } 989 990 991 function getSizeAndQuantity() { 992 let sizeAndQuantity = []; 993 document.querySelectorAll('.product-detail-cart-calculator tbody tr').forEach(productItem => { 994 if(parseInt(productItem.querySelector('.product-quantity-value').value) > 0) { 995 let sizeAndQuantityObj = { 996 'variant': productItem.querySelector('td:first-of-type').innerText, 997 'quantity': parseInt(productItem.querySelector('.product-quantity-value').value) 998 } 999 sizeAndQuantity.push(sizeAndQuantityObj); 1000 } 1001 }) 1002 return sizeAndQuantity; 1003 } 1004 1005 1006 function getProducts(productObj, SizeAndQuantity) { 1007 let products = []; 1008 for(let SizeAndQuantityItem of SizeAndQuantity) { 1009 let productItem = { 1010 'name': productObj.name, 1011 'id': productObj.id, 1012 'price': parseInt(productObj.price), 1013 'brand': productObj.brand, 1014 'category': productObj.categoryName, 1015 'variant': SizeAndQuantityItem.variant, 1016 'quantity': SizeAndQuantityItem.quantity, 1017 'sku': productObj.productCode 1018 } 1019 products.push(productItem); 1020 } 1021 return products; 1022 } 1023 1024//umesto pushObj ubacujes dataLayer 1025//umesto proudctObj metricProduct 1026 function pushAddToCartMultipleItems(pushobj,productObj){ 1027 // productObj.sendName = FormatName(productObj.name,productObj.productCode); 1028 let sizeAndQuantity = getSizeAndQuantity(); 1029 let productArray = getProducts(productObj, sizeAndQuantity); 1030 1031 pushobj.push({ 1032 'event': 'addToCart', 1033 'ecommerce': { 1034 'currencyCode': ''+_DefaultCurrency+'', 1035 'add': { 1036 'actionField': {}, 1037 'products': productArray 1038 } 1039 } 1040 }); 1041 } 1042 1043 if($('#nb_addToCartButtonSizeCalc').length > 0){ 1044 document.querySelector('#nb_addToCartButtonSizeCalc').addEventListener('click', function () { 1045 pushAddToCartMultipleItems(dataLayer, metricData); 1046 }) 1047 } 1048 1049 function gtm_Search(){ 1050 1051 window.addEventListener('searchSuggestAutocomplateNew', function (e) { 1052 let numberProducts = $('.search-sugest').data('productsfound'); 1053 1054 var searchString = $('#search-text').val(); 1055 dataLayer.push({ 1056 'event': 'search', 1057 'search_term' : searchString, 1058 'products_found': ''+numberProducts+'' 1059 }); 1060 }); 1061 } 1062 1063} 1064 1065function collectValue(value) { 1066 1067 return typeof value !== "undefined" ? value : ''; 1068 1069} 1070 1071/*Poziva se iz F_Order*/ 1072function transactionGtm360(order,oItems,storeName,orderAdress, orderBillingAdress,metricData){ 1073 1074 const _DefaultCurrency = metricData.currencyISO; 1075 var total = order.total; 1076 var totalProductsSalePriceWithTax = order.totalProductsSalePriceWithTax; 1077 var currency = _DefaultCurrency; 1078 var products = [],prodstring=''; 1079 1080 function getCategoryTreeFormatTr(obj){ 1081 return obj.replace(/ > /g, "/").trim(); 1082 } 1083 1084 oItems.forEach(function(element, index){ 1085 if(window.combProductNameProductCode){ 1086 element.name = element.name+' | '+element.code; 1087 } 1088 products[index] = { 1089 'name': ''+element.name+'', 1090 'id': ''+element.id+'', 1091 'price': ''+element.price.split(",",1)+'', 1092 'brand': ''+element.brand+'', 1093 'category': ''+getCategoryTreeFormatTr(element.groupName)+'', 1094 'variant': ''+element.size+'', 1095 'quantity': element.quantity, 1096 'sku': element.code, 1097 }; 1098 1099 prodstring+='{'+products[index]+'},' 1100 }); 1101 1102 if(window.withoutTransport){ 1103 //totalProductsSalePriceWithTax 1104 total = +order.totalProductsNoTax+ +order.tax; 1105 } 1106 1107 dataLayer.push({ 1108 'event': 'transaction', 1109 'ecommerce': { 1110 'currencyCode': ''+currency+'', 1111 'purchase': { 1112 'actionField': { 1113 'id': ''+order.id+'', 1114 'revenue': ''+total+'', 1115 'shipping': ''+order.totalCarrier+'', 1116 'coupon': order.voucher, 1117 'email_address': orderAdress.email, 1118 'sha256_email_address': orderAdress.emailHashed, 1119 'phone_number': orderAdress.phone, 1120 'sha256_phone_number': orderAdress.phoneHashed, 1121 ...( typeof order.hasPurchases !== "undefined" && { hasPurchases: order.hasPurchases } ), 1122 ...( typeof order.purchaseSum !== "undefined" && { purchaseSum : order.purchaseSum } ), 1123 'address': { 1124 'first_name': orderAdress.firstname, 1125 'sha256_first_name': orderAdress.firstnameHashed, 1126 'last_name': orderAdress.lastname, 1127 'sha256_last_name': orderAdress.lastnameHashed, 1128 'street': orderAdress.street+' '+orderAdress.streetNo, 1129 'city': orderAdress.city, 1130 'country': orderAdress.countryGeo, 1131 'postal_code': orderAdress.postcode, 1132 'region': collectValue(orderAdress.region) 1133 } 1134 }, 1135 'products': products 1136 } 1137 } 1138 }); 1139}
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.