PageSourceSearch

https://www.buzzsneakers.sk/nb-public/themes/nbshop5_v5_8/_static/js/nbscript/gtm_standard.js?ver=1008_7.1

js buzzsneakers.sk collected 2026-10-06 20:00:35 UTC 38,885 bytes, 1,139 lines download raw bytes

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.