PageSourceSearch

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

js buzzsneakers.sk collected 2026-10-06 20:00:39 UTC 384,733 bytes, 8,858 lines download raw bytes

1/* 5792 */
2function App(){
3
4    var mobileBreakRes = 768;
5    if($('header').hasClass('mobilesm')){
6        mobileBreakRes = 995;
7    }
8
9    var defaultLang = '';
10    var clickedLetter   = false;
11
12    /** GET WINDOW WIDTH */
13    var windowWidth = function(){
14        return (window.innerWidth) ?
15            window.innerWidth :
16            document.documentElement.clienWidth || document.body.clienWidth || 0;
17    };
18
19    /** GET WINDOW HEIGHT
20     */
21    var windowHeight = function(){
22        return (window.innerHeight) ?
23            window.innerHeight :
24            document.documentElement.clientHeight || document.body.clientHeight || 0;
25    };
26
27    /*
28     * PRINT ELEMENT
29     * Description: Print element with given ID
30     */
31    function printFrame(elId) {
32        var printFrame = window.frames["print_frame"];
33        printFrame.document.body.innerHTML=document.getElementById(elId).innerHTML;
34        printFrame.window.focus();
35        printFrame.window.print();
36    }
37
38    //LOAD TAB ON CLICK OF AN ELEMENT
39    var handleBindedToTab = function(){
40        $('.binded-to-tab').click(function(e){
41            e.preventDefault();
42
43            var $elClicked = $(this);
44            var $tab = $('a[href="'+$elClicked.attr('href')+'"]').tab('show').first();
45
46            $("html, body").animate({scrollTop: $tab.offset().top}, 900);
47        });
48    };
49
50    /*
51     * Animate anchor links
52     */
53
54    var handleAnchorLinks = function(){
55
56    };
57
58    /*
59     * SET LOCALES
60     * TODO: active language should be dynamically setted
61     *       based on some global variable
62     *       app.locale for example
63     * Plugins used: Bootstraps Bootbox, ParsleyValidator
64     */
65    var setLocales = function(lang){
66        bootbox.setDefaults({ locale: lang });
67        window.ParsleyValidator.setLocale(lang);
68        setDefaultLang(lang);
69    };
70
71    var setDefaultLang = function(lang){
72        defaultLang = lang;
73    };
74
75    var getDefaultLang = function(){
76        return defaultLang;
77    };
78
79    /*
80     * GET LOGIN MODAL
81     * Description: return modal that is globally being used for login
82     */
83    var getLoginModal = function(){
84
85        let quizModalLogin = $('#quiz_modal_loyalty');
86        if(typeof quizModalLogin !== "undefined" && quizModalLogin.length > 0) {
87            return quizModalLogin;
88        }
89
90        return $('#login_modal');
91    };
92
93    /*
94     * SET TOASTR OPTIONS
95     * Plugin used: Bootstraps Toastr
96     */
97    var setToastrOptions = function(){
98        toastr.options.positionClass = 'toast-middle-center';
99    };
100
101    /*
102     * MAIN NAVIGATION
103     * Plugin used: scrollToFixed,
104     */
105    var handleNavMain = function(){
106
107        var $header = $('.header'),
108            $navWrapper = $('.nav-main-wrapper'),
109            $navDropdown = $('.nav-main-submenu-wrapper,.nav-main-dropdown-wrapper'),
110            $nav = $(".nav-main");
111        var header_fixed = $header.data('fixed');
112
113        header_fixed = (header_fixed)? true:false;
114
115
116        //fix header using plugin scrollToFixed
117        function fixedHeader(){
118            $header.scrollToFixed();
119        };
120
121        //fix main navigation using plugin scrollToFixed
122        function fixedNavMain(){
123            var adminheader = $('.header-top-nav-autocomplete');
124            var tm;
125
126            if(adminheader.length > 0){
127                tm = $(".header-top").outerHeight();
128            }else{
129                tm = $(".header-top").outerHeight();
130            }
131
132            if(header_fixed){
133                $navWrapper.scrollToFixed({
134                    dontSetWidth: true,
135                    marginTop: tm,
136                    preFixed: function() {
137                        $(".header-top").addClass("fixed-style");
138                    }
139                });
140
141            }else{
142                $navWrapper.scrollToFixed({
143                    dontSetWidth: true,
144                    marginTop: tm,
145                    preFixed: function() {
146                        $(".header-top,.fixed-banner").addClass("fixed-style");
147                    },
148                    unfixed: function() {
149                        $(".header-top,.fixed-banner").removeClass("fixed-style");
150                    }
151                });
152
153            }
154        };
155
156        //show dropdown on hover of main navigation
157        var dropdownHover = function(){
158            $navDropdown.each(function(){
159                var $dropdown = $(this),
160                    $li = $dropdown.parent('li');
161
162                var show = function(){
163                    $li.addClass('active');
164                    $dropdown.removeClass('hidden');
165                    $dropdown.css({ top: $li.outerHeight(true)});
166                    $dropdown.addClass('loaded');
167                    var sliderss = $dropdown.find('.slider-init');
168                    if($dropdown.parent('.level4').length === 0){
169                        setTimeout(function(){ dropdownSlider(sliderss); }, 1);
170                    }
171                };
172
173                var hide = function(){
174                    $li.removeClass('active');
175                    $dropdown.removeClass('loaded').addClass('hidden');
176                };
177
178                var timer;
179                $li.on('mouseover', function(){
180                    if($li.parent('.nav-main').length === 0 || $li.hasClass('delay-show')){
181                        $(document).on('mousemove', function(e){
182                            clearTimeout(timer);
183
184                            timer = setTimeout(function() {
185                                show();
186                            }, 200);
187                        });
188                    } else {
189                        show();
190                    }
191                });
192
193                $li.on('mouseleave', function(){
194                    if($li.parent('.nav-main').length === 0 || $li.hasClass('delay-show')){
195                        $(document).on('mousemove', function(e){
196                            clearTimeout(timer);
197
198                            timer = setTimeout(function() {
199                                hide();
200                            }, 200);
201                        });
202                    } else {
203                        hide();
204                    }
205                });
206
207                $dropdown.find('.nav-main-dropdown-inner').hover(function(){
208                    $(this).find(".nav-main-dropdown-inner").removeClass("hidden");
209                }, function(){
210                    $(this).find(".nav-main-dropdown-inner").addClass("hidden");
211                });
212
213            });
214
215        };
216
217        /* Zbog problema na modalima u Safariju linkovi za modal se menjaju linkovima za strane */
218        /*        var safariUserBtns = function(){
219                    if (navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1 && windowWidth() < 768) {
220                        var buttonLogin = $('.nav-main-useractions .login-btn, .nav-main-useractions .register-btn');
221                        buttonLogin.click(function(){
222                            $(this).removeAttr('data-toggle').removeAttr('data-target');
223                            var permalink = $(this).data('permalink');
224                            window.location.replace(permalink);
225                        });
226                    }
227                };*/
228
229        var $navMobileIcon      = $('.nav-mobile-icon'),
230            $navMainWrapper     = $('.nav-main-wrapper'),
231            $shopOptions        = $('.header .user'),
232            $header             = $('.header'),
233            $topLangOptions     = $('.lang-dropdown .dropdown-menu');
234
235        function menuAdjustSize() {
236            $navMainWrapper.removeClass('loaded');                                          /* Zatvara mobilni meni */
237            $navMobileIcon.removeClass('active');                                           /* Deaktivira dugme za mob meni */
238            $('.nav-main > li > a').css({'display': 'block'});
239            $('.nav-main-dropdown-wrapper').addClass('hidden');
240            if($(window).width() < mobileBreakRes) {
241                $navMainWrapper.find('.nav-main-toplang').html($topLangOptions.html());     /* Probacuje lang bar u mobile menu */
242                $navMainWrapper.find('.nav-main-useractions').html($shopOptions.html());    /* prebaci user links */
243                $navMainWrapper.css({'display': 'none'});                                   /* Sakrij meni*/
244            } else {
245                $navMainWrapper.find('.nav-main-toplang').find('.lang-dropdown').hide();    /* Sakriva lang meni iz glavne navigacija  */
246                $navMainWrapper.find('.nav-main-useractions').hide();                       /* Sakriva user linkove iz glavnog menija */
247                $navMainWrapper.css({'margin-top': '0px', 'display': 'block'});             /* Prikazuje glavni meni i skida  marginu veličinu header-a */
248                $("body").removeClass("body-overflow");
249            }
250        };
251
252        var w = $(window).width();
253        $(window).resize(function(){
254            if ($(window).width()==w) return;
255            w = $(window).width();
256            menuAdjustSize();
257        });
258
259        $navMobileIcon.click(function(){
260
261            $navMainWrapper.find('.nav-main-toplang').html($topLangOptions.html());         /* Probacuje lang bar u mobile menu na klik ako je pocetna rez bila mob */
262            $navMainWrapper.find('.nav-main-useractions').html($shopOptions.html());        /* prebaci user links na klik ako je pocetna rez bila mob  */
263            $("body").toggleClass("body-overflow");                                         /* Dodaje klasu da ne može da se skroluje ekran dok je otvoren meni */
264            $navMobileIcon.toggleClass('active');
265            $navMainWrapper.find('.nav-simple').removeClass('nav-simple hidden-xs').addClass('nav-main').find('a').removeClass('underline-effect');
266            $navMainWrapper.toggleClass('loaded').css({'margin-top': ($header.outerHeight() - 1)}); /* Prikazuje meni i dodaje gornju marginu visine headera */
267            $navMainWrapper.toggle();
268            /* Prikazuje i sklanja meni */
269            var safariUserBtns = function(){
270
271                if (navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1 && windowWidth() < mobileBreakRes) {
272
273                    var buttonLogin = $('.item-register .register-btn, .item-login .login-btn');
274                    buttonLogin.removeAttr('data-toggle').removeAttr('data-target');
275                    buttonLogin.click(function(){
276                        var permalink = $(this).data('permalink');
277                        $(this).attr('href',permalink);
278                        //window.location.replace(permalink);
279                    });
280
281                }
282
283            }();
284
285            /* Funkcija za zatvaranje menija kada se klikne na sivu površinu pored stavki menija */
286            if(app.width() < mobileBreakRes && false){
287                $(".nav-main-wrapper.loaded").click(function(){
288                    nbshopJS.closeMenu();
289                }).children().click(function(e) {
290                });
291            }
292            nbshopJS.removeArrow2levlonly();
293        });
294
295        //show dropdown on click of main navigation
296        var dropdownToggle = function(){
297
298            if($('.header').find('.user').length !== 0) {
299                $('#search-form').hide();
300            }
301
302            $navMainWrapper.find('.nav-main > li > a').click(function(e){
303                e.preventDefault();
304                e.stopPropagation();
305                window.location.href = $(this).attr('href');
306            });
307
308            //go to url once icon within link is clicked
309            $navMainWrapper.find('.nav-main > li > a > i').click(function(e){
310                e.preventDefault();
311                e.stopPropagation();
312            });
313
314            //dropdowns within menu
315            var dropdowns = function(){
316
317                //loop through each dropdown
318                $navDropdown.each(function(){
319                    var $dropdown = $(this),
320                        $li = $dropdown.parent('li');
321
322                    //dont go to link when it is clicked
323                    $dropdown.find('.nav-main-dropdown-item > a > h5, .nav-main-dropdown-item > ul > li:not(.level-wrapper) > a, nav-main-submenu > li > a').click(function(e){
324                        e.stopPropagation();
325                        window.location.href = $(this).attr('href');
326                    });
327
328                    $li.children('a').children('i').click(function(e){
329                        e.preventDefault();
330
331                        if($dropdown.is(':visible')){
332                            $dropdown.addClass('hidden');
333                            $(this).parents('.nav-main-submenu').removeClass('active');
334                            $(this).parent().parent('li').removeClass('active');
335                            $(this).removeClass("fa fa-angle-left");
336                            $(this).toggleClass("fa fa-angle-right");
337                        } else {
338                            //app.scroll.resize($navMainWrapper);
339                            $dropdown.removeClass('hidden');
340                            $(this).parents('.nav-main-submenu').addClass('active');
341                            $(this).parent().parent('li').addClass('active');
342                            $(this).removeClass("fa fa-angle-right");
343                            $(this).toggleClass("fa fa-angle-left");
344                        }
345                    });
346
347                    $li.children('i').click(function(e){
348                        e.stopImmediatePropagation();
349
350                        $(this).parent('level4').children('a').toggleClass('hidden');
351
352                        if($(e.delegateTarget)[0] !== $(this)[0]) return;
353
354                        if($dropdown.is(':visible')){
355                            $dropdown.addClass('hidden');
356                            $li.removeClass('active');
357                            $(this).removeClass("fa fa-angle-left");
358                            $(this).toggleClass("fa fa-angle-right");
359                        } else {
360                            //app.scroll.resize($navMainWrapper);
361                            $dropdown.removeClass('hidden');
362                            $li.addClass('active');
363                            $(this).removeClass("fa fa-angle-right");
364                            $(this).toggleClass("fa fa-angle-left");
365                        }
366                    });
367
368                });
369            };
370
371            var collapsedAllMobileItems = function(){
372                $('.collapsed-mobile .nav-main-dropdown-item ul').each(function () {
373                    var dropdownWrapper = $(this).parent();
374                    dropdownWrapper.addClass('has-sub-items');
375                    dropdownWrapper.children('a').append('<i class="icon visible-xs fa fa-angle-right"></i>');
376                    dropdownWrapper.children('a').click(function(e) {
377                        e.preventDefault();
378                        if($(this).parent().hasClass('active')){
379                            dropdownWrapper.closest('li.active.child-is-open').removeClass('child-is-open');
380                            dropdownWrapper.removeClass('active');
381                        } else {
382                            dropdownWrapper.closest('li.active').addClass('child-is-open');
383                            dropdownWrapper.addClass('active');
384                        }
385                    });
386                });
387            };
388
389            dropdowns();
390            if($('.nav-main-wrapper').hasClass('collapsed-mobile')){
391                collapsedAllMobileItems();
392            };
393        };
394
395        var dropdownSlider  = function(slider){
396            if(!slider.hasClass("slick-initialized")){
397                slider.each(function(){
398
399                    //var $slider = $(this);
400
401                    slider.handleSlider({
402                        arrows:true,
403                        lazyLoad: 'ondemand',
404                        dots: true
405                    });
406                });
407            }
408        };
409
410        var dropdownSliderReinit = function(dropdownSliderReinit){
411
412            var initSliderMenu = function(dropdownSliderReinit) {
413
414                var $slider = dropdownSliderReinit.find('.slider-init');//.children('.slider-init');
415
416                if (!$slider.hasClass("slick-initialized")) {
417                    $slider.handleSlider({
418                        arrows: true
419                    });
420                } else {
421                    $slider.reinitSlider();
422                }
423
424            };
425            initSliderMenu(dropdownSliderReinit);
426        };
427
428        if(app.width() < mobileBreakRes){
429            dropdownToggle();
430            fixedHeader();
431        } else {
432            dropdownHover();
433            if (!$navWrapper.hasClass('disable-fix')) {
434                fixedNavMain();
435            }
436            $('.fixed-nav-wrapper').scrollToFixed({
437                marginTop: $('.header-top').outerHeight() + $('.nav-main-wrapper').outerHeight()
438            });
439            if(header_fixed){
440                fixedHeader();
441            }
442        }
443
444    };
445
446    //
447    var handleReadMore = function(){
448
449        $('.read-more-text').each(function(){
450            //carierId_fastDelivery
451            if($(this).parents("li").find( "input[id^='carierId_fastDelivery']" ).length > 0){
452                return false;
453            }
454
455            var $preserveFormat = $(this).hasClass('preserve-format');
456
457            var showChar = $(this).attr("data-characters");  // How many characters are shown by default
458            var showCharMob = $(this).attr("data-characters-mobile");  // How many characters are shown by default on mobile
459            var ellipsestext = "...";
460            var moretext = $(".read-more-text").attr("data-moreText");
461            var content = $preserveFormat ? $(this).html() : $(this).text();
462            // var formatcontent = $(this).html();
463            var formatcontent = $(this).find("img").remove().end().html();
464
465            if(app.width() < mobileBreakRes) {
466                if(content.replace(/(<([^>]+)>)/gi, "").length > showCharMob) {
467
468                    var c = content.substr(0, showCharMob);
469                    var h = content.substr(showCharMob, content.length - showCharMob);
470
471                    var html = '<span class="lesstext">'+c+'</span>' + '<span class="moreellipses">' + ellipsestext+ '&nbsp;</span><span class="morecontent"><span class="more-content" style="display: none;">' + h + '</span>'+'<span class="full-content">' + formatcontent +'</span><a href="" class="morelink btn btn-sm btn-ghost read-more-btn">' + moretext + '</a></span>';
472
473                    $(this).html(html);
474                }
475
476            }else{
477
478                if(content.replace(/(<([^>]+)>)/gi, " ").length > showChar) {
479
480                    var c = content.substr(0, showChar);
481                    var h = content.substr(showChar, content.length - showChar);
482
483                    var html = '<span class="lesstext">'+c+'</span>' + '<span class="moreellipses">' + ellipsestext+ '&nbsp;</span><span class="morecontent"><span class="more-content" style="display: none;">' + h + '</span>'+'<span class="full-content">' + formatcontent +'</span><a href="" class="morelink btn btn-sm btn-ghost read-more-btn">' + moretext + '</a></span>';
484
485                    $(this).html(html);
486                }
487
488            }
489
490        });
491
492/*        $(".morelink").each(function(){
493            $(this).click(function(){
494                $(this).parents('li').find(".lesstext").toggleClass('hidden');
495                if($(this).parents(".read-more-text").hasClass("less")){
496                    $(this).parents(".read-more-text").removeClass("less");
497                    $(this).html($(this).parents(".read-more-text").attr("data-lessText"));
498                    $(".lesstext").addClass('hidden');
499                    $(".full-content").addClass('content-full');
500                } else {
501                    $(this).parents(".read-more-text").addClass("less");
502                    $(this).html($(this).parents(".read-more-text").attr("data-moreText"));
503                    $(".lesstext").removeClass('hidden');
504                    $(".full-content").removeClass('content-full');
505                }
506                $(this).parents(".read-more-text").find(".moreellipses").toggle();
507                $(this).prev().toggle();
508                return false;
509            });
510        });*/
511
512        /* AKsa redizajn */
513        $(".morelink").on('click',function(e){
514            e.preventDefault()
515            listID = $(this).parents('.item-list-info').data('id');
516
517            $parent = $('div[data-id="'+listID+'"]');
518            $parent.find(".lesstext").toggleClass('hidden');
519            //$(this).parents('.detail-product-info-lists').find(".lesstext").toggleClass('hidden');
520            if(!listID){
521                $parent = $(this).parents('.read-more-text');
522                // console.log($(this)[0].innerText = 'test2')
523
524                if($parent.hasClass("less")){
525                    $parent.removeClass("less");
526                    $(this).text($(this).parents(".read-more-text").attr("data-lessText"));
527                    $parent.find(".lesstext").addClass('hidden');
528                    $parent.find(".full-content").addClass('content-full');
529
530                }else{
531                    $(this).text($(this).parents(".read-more-text").attr("data-moreText"));
532                    $parent.find(".lesstext").removeClass('hidden');
533                    $parent.find(".full-content").removeClass('content-full');
534                    $parent.addClass("less");
535                }
536            }else{
537                if($parent.find(".read-more-text").hasClass("less")){
538                    $parent.find(".read-more-text").removeClass("less");
539                    $(this).html($(this).parents(".read-more-text").attr("data-lessText"));
540                    $parent.find(".lesstext").addClass('hidden');
541                    $parent.find(".full-content").addClass('content-full');
542                } else {
543                    $parent.find(".read-more-text").addClass("less");
544                    $(this).html($(this).parents(".read-more-text").attr("data-moreText"));
545                    $parent.find(".lesstext").removeClass('hidden');
546                    $parent.find(".full-content").removeClass('content-full');
547                }
548            }
549
550            $(this).parents(".read-more-text").find(".moreellipses").toggle();
551            $(this).prev().toggle();
552            return false;
553        });
554
555    };
556
557
558    /*
559     * Slide toggle
560     * $button is clicked element that interacts with $object
561     */
562    var handleSlideToggle = function($button){
563        $button.each(function(){
564
565            var $thisButton = $(this);
566            var $object = $(this).parent().find(".slidetoggle-object").first();
567
568            if($object){
569                $object.parent().addClass("has-dropdown");
570            }
571
572            $thisButton.click(function(){
573                toggleElements();
574            });
575
576            var toggleElements = function(){
577                if($thisButton.hasClass("closed")){
578                    openElements();
579                }
580                else {
581                    closeElements();
582                }
583            };
584
585            var openElements = function(){
586                $object.slideDown();
587                $thisButton.removeClass("closed");
588                $object.removeClass("closed");
589            };
590
591            var closeElements = function(){
592                $object.slideUp();
593                $thisButton.addClass("closed");
594                $object.addClass("closed");
595            };
596        });
597    };
598
599    var handleAutocomplete = function(){
600        var $wrapper = $('.autocomplete-wrapper'),
601            $input = $('.autocomplete-input'),
602            $buttons = $('.autocomplete-button, .autocomplete-close'),
603            $results = $('.autocomplete-results'),
604            $header = $('.header'),
605            $logoHidden = $('.search-logo'),
606            $hideElements = $('.hidden-fullscreen'),
607            scrollWidth = $results.data('scroll-width'),
608            scrollPadding = $results.data('scroll-padding'),
609            $Searchshowmenu = $('.search-show-menu .nav-main-wrapper.hidden-fullscreen');
610
611        $buttons.click(function(e){
612            e.stopPropagation();
613            handleAutocompleteFun();
614            reinitOpenslider($('.main-slider > .slider-init'),window.mainslideroptions);
615            reinitOpenslider($('.handlines-sldier .slider-init'),window.topslideroptions);
616            nbshopJS.CustomEventTrigger('openNBSearch');
617        });
618
619        if($('.main-4level').hasClass('main-4level-with-search-input')){
620            $('html').click(function(e) {
621                if(app.width() >= mobileBreakRes) {
622                    var clickCheck = true;
623                    if ($(e.target).hasClass('autocomplete-wrapper') || $(e.target).hasClass('autocomplete-button') || $(e.target).hasClass('autocomplete-input')) {
624                        var clickCheck = false;
625                    }
626                    if (clickCheck == true) {
627                        $('.autocomplete-wrapper').addClass('hidden');
628                        $('#search-text').val('');
629                    }
630                }
631            });
632        }
633
634        var handleAutocompleteFun = function(){
635
636            $('.autocomplete-button-wrapper').toggleClass('hidden');
637            $wrapper.toggleClass('hidden');
638            $logoHidden.toggleClass('hidden');
639
640            if($('.main-4level').hasClass('main-4level-with-search-input') && app.width() > app.mobileBreakpoint) {
641                $('#search-form').appendTo('.main-4level-with-search-input .nav > .container');
642                $input.focus();
643            }  else if ($('.autocomplete-button').hasClass('autocomplete-button-one-row') && app.width() > app.mobileBreakpoint) {
644                $('#search-form').appendTo('.header > .container');
645                $input.focus();
646            }else {
647                $('body').scrollTop();
648                $('body').toggleClass('srch');
649
650                $('.cart-wrapper').toggleClass('hidden');
651                $hideElements.toggleClass('hidden');
652                if($Searchshowmenu.length > 0){
653                    $Searchshowmenu.removeClass('hidden');
654                    $('.autocomplete-button').toggleClass('hidden');
655
656                    $('.autocomplete-close').click(function(){
657                            $('.autocomplete-button').removeClass('hidden');
658                        }
659                    )
660                }
661
662                $input.focus();
663
664                var headerHeight = $header.outerHeight(true);
665                $wrapper.height(app.height() - headerHeight - 1);
666                $results.height(app.height() - headerHeight - 61);
667
668                $('.header').next().toggleClass('scroll-to-fixed-css');
669                $('.scroll-to-fixed-css').css("max-height", $(".header").height() + 1);
670
671                if (app.width() > mobileBreakRes) {
672                    /*app.scroll.set($results, {
673                        curcursorcolor: "rgba(255, 255, 255, 0.4)",
674                        railpadding: {right: scrollPadding},
675                        zindex: 2500,
676                        cursorwidth: scrollWidth
677                    });
678
679                    app.scroll.resize($results);*/
680                } else {
681                    $results.css('overflow', 'scroll');
682                }
683            };
684        };
685
686        $buttons.focusin(function(){
687            $(this).css("background-color", "#FFFFCC");
688        });
689    };
690
691    var handleProfile = function(){
692
693        var removeWishlistItem = function(){
694            $('#tab_profile_wish_list .product-item .remove-item').click(function(e){
695                e.preventDefault();
696                $(this).parents('.product-item').parent().remove();
697            });
698        };
699
700        var removePricechangeItem = function(){
701            $('#tab_profile_price_change .product-item .remove-item').click(function(e){
702                e.preventDefault();
703                $(this).parents('.product-item').parent().remove();
704            });
705        };
706
707        $('.show-vertical-menu').click(function(){
708            $(this).next(".nav").slideToggle();
709        });
710
711        function checkProfileStrict(typeaheadStrictTypeVal){
712            var cityId = $('#profile_city_id').val();
713            var city = $('#profile_city');
714            var adress = $('#profile_address');
715            var adressId = $('#profile_address_id').val();
716            if(typeaheadStrictTypeVal == 'postCodeAutoFillByCity'){
717                if(cityId == '-1'){
718                    city.val('');
719                    $('#profile_postcode').val('');
720                }
721            } else if(typeaheadStrictTypeVal == 'postCodeAutoFillByStreet'){
722                if(cityId == '-1'){
723                    city.val('');
724                }
725                if(adressId == '-1'){
726                    adress.val('');
727                    $('#profile_postcode').val('');
728                }
729
730            }
731        }
732        checkProfileStrict(typeaheadStrictType);
733        removeWishlistItem();
734        removePricechangeItem();
735    };
736
737    var handleToggle = function(){
738        var button      = $(".toggle-init");
739        button.click(function(){
740            $(this).parents(".toggle-wrapper").toggleClass("closed-toggle");
741            $(this).parents(".toggle-wrapper").find(".toggle-elem").slideToggle();
742        });
743
744        if(app.width() < 768){
745            $(".toggle-init").parents(".toggle-wrapper").toggleClass("closed-toggle");
746            $(".toggle-init").parents(".toggle-wrapper").find(".toggle-elem").slideToggle();
747        }
748    };
749
750    var handleTooltip = function($object){
751        $object.tooltip();
752    };
753
754    var handleCountdown = function(){
755
756        var countDownTimer  = $(".countdown-timer");
757        var deadLine        = $(".countdown-timer").data("until");
758        var deadLineHours   = $(".countdown-timer").data("until-hours");
759        var deadLineMinutes = $(".countdown-timer").data("until-minutes");
760        var deadLineSeconds = $(".countdown-timer").data("until-seconds");
761
762        var myDate         = new Date(deadLine);
763        myDate.setHours(parseInt(deadLineHours));
764        myDate.setMinutes(parseInt(deadLineMinutes));
765        myDate.setSeconds(parseInt(deadLineSeconds));
766
767        initRegionalOptionsCountdown($, getDefaultLang());
768
769        countDownTimer.countdown({
770            until: myDate,
771            timeSeparator: ':',
772            timezone: +2,
773            padZeroes: true,
774            format: 'HMS'
775        });
776
777    };
778
779    /* Sidebar functionality for tablets */
780    var handleSidebarInfo = function(){
781        $(".sidebar-info .icon-item").click(function(){
782            if($(this).hasClass("clicked")){
783                $(".sidebar-info .icon-item").removeClass("clicked");
784            }
785            else{
786                $(".sidebar-info .icon-item").removeClass("clicked");
787                $(this).addClass("clicked");
788            }
789        });
790    };
791
792    /* function to create same style for banner as seen on articles*/
793    var articleBannerStyle = function(){
794        var article         = $(".article-big-item"),
795            banner          = $(".article-banner .banner-img"),
796            catalogItem     = $(".product-item-col"),
797            catalogBanner   = $(".catalog-banner");
798
799        article.find('img').batchImageLoad({
800            loadingCompleteCallback: function(){
801                banner.height(article.height() - 21);
802                banner.css("padding-top", (banner.height()-250)/2 );
803            }
804        });
805
806        catalogItem.find('img').batchImageLoad({
807            loadingCompleteCallback: function(){
808                catalogBanner.height(catalogItem.height() - 21);
809                catalogBanner.css("padding-top", (catalogBanner.height()-250)/2 );
810            }
811        });
812
813    };
814
815    var handleFavoriteProduct = function($elements){
816
817        if($elements.length !== 0) {
818            $elements.each(function() {
819                $(this).addClass('favorite-init');
820            })
821        }
822
823        var addFavoriteProductSession = function($favIcon){
824
825            $.ajax({
826                type: "POST",
827                url: nb_active_page_url,
828                data: {
829                    nbAjax: 1,
830                    nbTask: 'product_favorites',
831                    flag: "yes",
832                    ajax: "yes",
833                    task: "add_session_favorites_product",
834                    productId: $favIcon.parents('.product-item').length
835                        ? $favIcon.parents('.product-item').data('productid')
836                        : $favIcon.data('productid'),
837                    typeObject: $favIcon.data('favoritetypeobject') === 'undefined'
838                        ? 'product'
839                        : $favIcon.data('favoritetypeobject')
840                },
841                contentType: "application/x-www-form-urlencoded;charset=UTF-8",
842                dataType: 'json',
843                success: function(ret) {
844                    if (ret.flag){
845
846                    }else{
847                        toastr.error(ret.info);
848                    }
849                }
850            });
851        };
852
853        var favoriteProduct = function($favIcon){
854
855            let eventId = generateEventId();
856
857            if(!app.logged_in){
858                addFavoriteProductSession($favIcon);
859                getLoginModal().modal('show');
860            } else {
861                $.ajax({
862                    type: "POST",
863                    url: nb_active_page_url,
864                    data: {
865                        nbAjax: 1,
866                        nbTask: 'product_favorites',
867                        flag: "yes",
868                        ajax: "yes",
869                        task: "add_favorites_product",
870                        productId: $favIcon.parents('.product-item').length
871                            ? $favIcon.parents('.product-item').data('productid')
872                            : $favIcon.data('productid'),
873                        typeObject: $favIcon.data('favoritetypeobject') === 'undefined'
874                            ? 'product'
875                            : $favIcon.data('favoritetypeobject')
876                    },
877                    contentType: "application/x-www-form-urlencoded;charset=UTF-8",
878                    dataType: 'json',
879                    success: function(ret) {
880                        if (ret.flag) {
881                            console.log(ret);
882                            if(ret.quantity === "1"){
883                                $("#last-piece-modal").modal('show');
884                            }
885                            $favIcon.data('favoriteid', ret.id);
886                            $favIcon.attr('data-content', $favIcon.data('favorite-text-delete'));
887                            $favIcon.attr('data-original-title', $favIcon.data('favorite-text-delete'));
888                            var delFavText = '<span class="icon icon-heart-f"></span><span class="text">'+$favIcon.data('favorite-text-delete')+'</span>';
889                            if ($favIcon.parents('.products-detail-wrapper').length) {
890                                $favIcon.html(delFavText);
891                            }
892
893                            if($favIcon.parents('.product-item').length){
894                                $favIcon.parents('.product-item').find('.favorite').addClass('active');
895                                var buttonNoNotifyMe = $favIcon.parents('.product-item').find('.notifyme');
896                                if(typeof(buttonNoNotifyMe.data('button-no-notify-me')) != 'undefined' && buttonNoNotifyMe.data('button-no-notify-me') != null){
897                                    buttonNoNotifyMe.text(buttonNoNotifyMe.data('button-no-notify-me'));
898                                    buttonNoNotifyMe.data('favoriteid', ret.id)
899                                }
900
901                                buttonNoNotifyMe.addClass('active');
902
903                            }else{
904                                $favIcon.addClass('active');
905                            }
906
907                            toastr.success(ret.info);
908                            refreshFavoritesList();
909
910                            let productId = nbMetricObject.NB_METRIC_DATA.id;
911
912                            if( typeof $($favIcon).closest(".product-item") !== "undefined" && $($favIcon).closest(".product-item").length > 0) {
913                                productId = $($favIcon).closest(".product-item").data('productid');
914                            }
915
916                            nbshopJS.CustomEventTrigger('addToFavoritesProduct', { id: productId, event_id: eventId });
917                            var favoriteTotal = (parseInt($('.favorite-header-total').html()) + 1);
918                            $('.favorite-header-total').html(favoriteTotal);
919                        } else{
920                            toastr.error(ret.info);
921                        }
922                        $favIcon.removeClass('pulse');
923                    }
924                });
925            }
926        };
927
928        var unfavoriteProduct = function($favIcon){
929            if(!app.logged_in){
930                getLoginModal().modal('show');
931            } else {
932                $.ajax({
933                    type: "POST",
934                    url: nb_active_page_url,
935                    data: {
936                        nbAjax: 1,
937                        nbTask: 'product_favorites',
938                        flag: "yes",
939                        ajax: "yes",
940                        task: "delete_favorites_product",
941                        id: $favIcon.data('favoriteid'),
942                        typeObject: $favIcon.data('favoritetypeobject') === 'undefined'
943                            ? 'product'
944                            : $favIcon.data('favoritetypeobject')
945                    },
946                    contentType: "application/x-www-form-urlencoded;charset=UTF-8",
947                    dataType: 'json',
948                    success: function(ret) {
949                        if (ret.flag) {
950
951                            $favIcon.attr('data-content', $favIcon.data('favorite-text-add'));
952                            $favIcon.attr('data-original-title', $favIcon.data('favorite-text-add'));
953                            var addFavText = '<span class="icon icon-heart"></span><span class="text">'+$favIcon.data('favorite-text-add')+'</span>';
954                            if ($favIcon.parents('.products-detail-wrapper').length) {
955                                $favIcon.html(addFavText);
956                            }
957
958                            if($favIcon.parents('.product-item').length){
959                                $favIcon.parents('.product-item').find('.favorite').removeClass('active');
960                                var buttonNotifyMe = $favIcon.parents('.product-item').find('.notifyme');
961                                if(typeof(buttonNotifyMe.data('button-notify-me')) != 'undefined' && buttonNotifyMe.data('button-notify-me') != null){
962                                    buttonNotifyMe.text(buttonNotifyMe.data('button-notify-me'));
963                                }
964                                buttonNotifyMe.removeClass('active');
965                            }else{
966                                $favIcon.removeClass('active');
967                            }
968
969                            let productId = nbMetricObject.NB_METRIC_DATA.id;
970
971                            if( typeof $($favIcon).closest(".product-item") !== "undefined" && $($favIcon).closest(".product-item").length > 0) {
972                                productId = $($favIcon).closest(".product-item").data('productid');
973                            }
974
975                            toastr.info(ret.info);
976                            refreshFavoritesList();
977                            nbshopJS.CustomEventTrigger('removeFavoritesProduct', {id: productId});
978                            var favoriteTotal = (parseInt($('.favorite-header-total').html()) - 1);
979                            $('.favorite-header-total').html(favoriteTotal);
980                        } else{
981                            toastr.error(ret.info);
982                        }
983                        $favIcon.removeClass('pulse');
984                    }
985                });
986            }
987        };
988
989        $elements.click(function(e){
990
991            var $favIcon = $(this);
992
993            e.preventDefault();
994            e.stopPropagation();
995
996            // Sakrivanje toltip-a, zato sto tooltip ostaje prikazan nakon sto se klikne na dugme cak i kad se menja slajd
997            $favIcon.popover('hide');
998            $favIcon.tooltip('hide');
999
1000            $favIcon.addClass('pulse');
1001            if($favIcon.hasClass('active')){
1002                unfavoriteProduct($favIcon);
1003            } else {
1004                favoriteProduct($favIcon);
1005            }
1006        });
1007    };
1008
1009    var handleLowerPriceProduct = function($elements){
1010
1011        var lowerPrice = function($product){
1012            if(!app.logged_in){
1013                getLoginModal().modal('show');
1014            } else if($('#product_has_comb').val() > 0 && $('#product_comb_id').val() <= 0){
1015                toastr.error($('#product_no_comb_msg').val());
1016            } else {
1017                $.ajax({
1018                    type: "POST",
1019                    url: nb_active_page_url,
1020                    data: {
1021                        nbAjax: 1,
1022                        nbTask: 'product_price_changes',
1023                        flag: "yes",
1024                        ajax: "yes",
1025                        task: "add_product_price_changes",
1026                        productId: $('#product_id').val(),
1027                        combinationId: $('#product_comb_id').val(),
1028                    },
1029                    contentType: "application/x-www-form-urlencoded;charset=UTF-8",
1030                    dataType: 'json',
1031                    success: function(ret) {
1032                        if (ret.flag) {
1033                            toastr.success(ret.info);
1034                            refreshPriceChangesList();
1035                        } else{
1036                            toastr.info(ret.info);
1037                        }
1038                    }
1039                });
1040            }
1041        };
1042
1043        $elements.click(function(e){
1044            e.preventDefault();
1045            if(!$(this).hasClass('active')){
1046                lowerPrice($(this));
1047            }
1048        });
1049    };
1050
1051    var handleLowerPriceProductCombinations = function($elements){
1052
1053        var lowerPriceCombinations = function($product){
1054
1055            var products            = [];
1056            var lowerpricecomb      = '';
1057            var $allCombinations    = $('.product-details .product-attributes li');
1058            $allCombinations.each(function(i){
1059                $item = $(this);
1060                lowerpricecomb = $('#product_id').val()+'#'+$item.data('productsize-combid');
1061                console.log(lowerpricecomb);
1062                products.push(lowerpricecomb);
1063            });
1064
1065            if(!app.logged_in){
1066                getLoginModal().modal('show');
1067            } else if(products.length < 1){
1068                toastr.error($('#product_no_comb_msg').val());
1069            } else {
1070
1071                $.ajax({
1072                    type: "POST",
1073                    url: nb_active_page_url,
1074                    data: {
1075                        nbAjax: 1,
1076                        nbTask: 'product_price_changes',
1077                        flag: "yes",
1078                        ajax: "yes",
1079                        task: "add_product_all_combinations_price_changes",
1080                        products: products
1081                    },
1082                    contentType: "application/x-www-form-urlencoded;charset=UTF-8",
1083                    dataType: 'json',
1084                    success: function(ret) {
1085                        if (ret.flag) {
1086                            toastr.success(ret.info);
1087                            refreshPriceChangesList();
1088                        } else{
1089                            toastr.info(ret.info);
1090                        }
1091                    }
1092                });
1093            }
1094        };
1095
1096        $elements.click(function(e){
1097            e.preventDefault();
1098            if(!$(this).hasClass('active')){
1099                lowerPriceCombinations($(this));
1100            }
1101        });
1102    };
1103
1104    var handleBuyProductOnListing = function(){
1105
1106        var $productItem = $('.product-item');
1107        if(!$productItem.length) return;
1108        var addToCartPtoduct = function(){
1109
1110            var $btn = $productItem.find('.buyButtonOnLists');
1111            if (typeof element  !== "undefined"){
1112                $btn = $(element).find('.buyButtonOnLists');
1113            }
1114            if(!$btn.length) return;
1115            var values = {};
1116
1117            $btn.click(function(e){
1118                e.preventDefault();
1119                $btn = $(this);
1120                let eventId = generateEventId();
1121                validate($btn, eventId);
1122            });
1123
1124            $btn.bind('shop-button.reset', function(){
1125                resetButton();
1126            });
1127
1128            var setValues = function($elements){
1129                values = {
1130                    productId: $elements.parents('.product-item').data('productid'),
1131                    productHasComb: $elements.data('product-has-comb'),
1132                    productCombId: $elements.data('product-comb-id'),
1133                    size: $elements.data('product-size-name'),
1134                    price: $elements.data('productprice'),
1135                    quantity: $elements.data('product-quantity'),
1136                    dataProductComment: $('#order-message').val(),
1137                    errorMsg: $elements.data('product-no-comb-msg')
1138                };
1139            };
1140
1141            var validate = function($elements, eventId){
1142                setValues($elements);
1143                startBouncingIcon();
1144
1145                if(values.productHasComb > 0 && (!values.size && values.size !== 0)){
1146                    stopBouncingIcon();
1147                    $btn.html($btn.data('btn-text-select-size'))
1148                        .removeClass('btn-success')
1149                        .addClass('btn-danger');
1150                } else {
1151                    addAJAX($elements, eventId);
1152                }
1153            };
1154
1155            var addAJAX = function($elements, eventId){
1156
1157                $btn.attr('disabled', true);
1158
1159                $.ajax({
1160                    type: "POST",
1161                    url: getCartPageUrl(),
1162                    data: {
1163                        ajax: 'yes',
1164                        task: 'cartInsert',
1165                        id: values.productId,
1166                        combId: values.productCombId,
1167                        amount: values.quantity,
1168                        dataProductComment: values.dataProductComment,
1169                        size: values.size
1170                    },
1171                    contentType: "application/x-www-form-urlencoded;charset=UTF-8",
1172                    dataType: 'json',
1173                    success: function(ret) {
1174                        console.log(values.dataProductComment);
1175                        if (ret.flag){
1176                            var productValues = {
1177                                id: values.productId,
1178                                combId: values.productCombId,
1179                                amount: values.quantity,
1180                                size: values.size
1181                            }
1182                            stopBouncingIcon($btn.data('btn-text-addedtocart'));
1183                            addSuccess(values.quantity);
1184                            nbshopJS.CustomEventTrigger('cartButtonClick', {
1185                                ...productValues,
1186                                event_id: eventId
1187                            });
1188                            setTimeout(function () {
1189                                $btn.removeAttr('disabled');
1190                            }, 1000)
1191                            window.localStorage.setItem("addedToCartProduct", JSON.stringify(productValues));
1192                        }else{
1193                            stopBouncingIcon($btn.data('btn-text-addtocart'));
1194                            addFailed(ret.info);
1195                            setTimeout(function () {
1196                                $btn.removeAttr('disabled');
1197                            }, 1000)
1198                        }
1199                    }
1200                });
1201            };
1202
1203            var startBouncingIcon = function(){
1204                $btn.addClass('icon-bounce');
1205                $btn.html('...');
1206            };
1207
1208            var stopBouncingIcon = function(msg){
1209                $btn.removeClass('icon-bounce');
1210                $btn.html(msg).removeClass('btn-danger').addClass('btn-success');
1211            };
1212
1213            var resetButton = function(){
1214                stopBouncingIcon();
1215                $btn.html($btn.data('btn-text-addtocart'));
1216            };
1217
1218            var addSuccess = function(qnt){
1219                $btn.addClass('btn-activated');
1220                $btn.addClass('cart-increased');
1221                $btn.attr('data-content', '+'+qnt);
1222
1223                setTimeout(function(){
1224                    $btn.removeClass('btn-activated');
1225                }, 1000);
1226
1227                setTimeout(function(){
1228                    $btn.html($btn.data('btn-text-addtocart'));
1229                    $btn.attr('data-content', '');
1230                    $btn.removeClass('cart-increased');
1231                    $btn.removeClass('btn-success.autocomplete-button');
1232                }, 4000);
1233
1234                refreshMinCartToggle('refreshmincarttoggle', 'no');
1235                if($('body').hasClass('uc-cart')){
1236                    reloadCartOnePage();
1237                }
1238            };
1239
1240            var addFailed = function(msg){
1241                $btn.html($btn.data('btn-text-no-state'))
1242                    .removeClass('btn-success')
1243                    .addClass('btn-danger');
1244                toastr.info(msg);
1245            };
1246
1247            //setValues();
1248        };
1249
1250        var addAsWantedOnProductListing = function(productId, attrCombId){
1251
1252            if(!app.logged_in){
1253                getLoginModal().modal('show');
1254                return;
1255            }
1256
1257            $.ajax({
1258                type: "POST",
1259                url: nb_active_page_url,
1260                data: {
1261                    nbAjax: 1,
1262                    nbTask: 'product_available_sizes',
1263                    flag: 'yes',
1264                    ajax: 'yes',
1265                    task: 'add_product_available_sizes',
1266                    productId: productId,
1267                    combinationId: attrCombId
1268                },
1269                contentType: "application/x-www-form-urlencoded;charset=UTF-8",
1270                dataType: 'json',
1271                success: function(ret) {
1272                    if(ret.flag) {
1273                        toastr.success(ret.info);
1274                    }else{
1275                        toastr.info(ret.info);
1276                    }
1277                }
1278            });
1279        };
1280
1281        var selectSize = function($elements){
1282
1283            if(!$elements.length) return;
1284
1285            $elements.off('click');
1286            $elements.click(function(){
1287                $atribute = $(this);
1288
1289                let attrPrice = $atribute.data('productsize-price');
1290                let loyaltyPrice = $atribute.data('productsize-loyalty-price');
1291
1292                $atribute.parents('.product-sizes').find('.item').removeClass('active');
1293                $atribute.addClass('active');
1294
1295                var $btnBuy = $(this).parents('.product-item').find('.buyButtonOnLists');
1296
1297                if($atribute.hasClass('disabled')){
1298                    addAsWantedOnProductListing($atribute.parents('.product-item').data('productid'), $atribute.data('productsize-combid'));
1299                    return;
1300                };
1301
1302                $btnBuy.data('product-size-name', $atribute.data('productsize-name'));
1303                $btnBuy.data('product-comb-id', $atribute.data('productsize-combid'));
1304
1305                if($btnBuy.data('product-comb-id') > 0){
1306                    $btnBuy.removeClass('btn-danger');
1307                    $btnBuy.html($btnBuy.data('btn-text-addtocart'));
1308                };
1309
1310                if(attrPrice) {
1311                    let priceValue = $atribute.closest('.product-item').find('.prices-wrapper .current-price .value');
1312                    if(priceValue.length !== 0) {
1313                        priceValue.text(attrPrice);
1314                    }
1315                }
1316
1317                if(loyaltyPrice) {
1318                    let loyaltyPriceValue = $atribute.closest('.product-item').find('.loyalty-price .loyalty-price-value');
1319                    if(loyaltyPriceValue.length !== 0){
1320                        loyaltyPriceValue.text(loyaltyPrice);
1321                    }
1322                }
1323
1324            });
1325        };
1326
1327
1328
1329
1330        selectSize($('.product-item .product-sizes .item'));
1331        addToCartPtoduct();
1332    };
1333
1334    var handleProductDetails = function(){
1335
1336        var $productDetails = $('.product-details'),
1337            id = $('#product_id').val(),
1338            $combId = $('#product_comb_id'),
1339            hasComb = $('#product_has_comb').val(),
1340            $size = $('#product_size'),
1341            $quantity = $('#product_quantity'),
1342            errorMsg = $('#product_no_comb_msg').val(),
1343            $productPriceQueryCombinationId = $('#product_price_query_combination_id'),
1344            $productPriceQueryCombinationName = $('#product_price_query_combinationName'),
1345            $productCharacteristicValue = $('#product_characteristic_value'),
1346            hasCharacteristic = $('#product_has_characteristic').val()
1347        ;
1348
1349        if(!$productDetails.length) return;
1350
1351        var addToCart = function(){
1352
1353            var $btn = $productDetails.find('.shop-button-qnt');
1354            var values = {};
1355            $btn.click(function(){
1356                cantbuymodal = $('#modal_buy');
1357                if($('.shop-button-qnt.no-buyy').length){
1358                    cantbuymodal.modal('show');
1359                    return false
1360                }
1361                $btn = $(this);
1362                let eventId = generateEventId();
1363                validate(eventId);
1364            });
1365
1366            $btn.bind('shop-button.reset', function(){
1367                resetButton();
1368            });
1369
1370            var setValues = function(){
1371                values = {
1372                    productId: id,
1373                    productCombId: $combId.val(),
1374                    productHasComb: hasComb,
1375                    size: $size.val(),
1376                    quantity: $quantity.val(),
1377                    productCharacteristicValue: $productCharacteristicValue.val(),
1378                    productHasCharacteristic: hasCharacteristic,
1379                    dataProductComment: $('#order-message').val(),
1380                    errorMsg: errorMsg,
1381                    personalizationId: $('#savedPersonalizations .item.active').data('saved-personalization-id')
1382                };
1383            };
1384
1385            var validate = function(eventId){
1386                setValues();
1387                startBouncingIcon();
1388                if(values.productHasCharacteristic > 0 && values.productCharacteristicValue == "" && $productCharacteristicValue.prop('required')){
1389                    stopBouncingIcon();
1390                    $(".product-attributes-wrapper").addClass("select-size-error");
1391                    $btn.html($btn.data('btn-text-select-characteristic'))
1392                        .removeClass('btn-success')
1393                        .addClass('btn-danger');
1394                } else if(values.productHasComb > 0 && !values.size){
1395                    stopBouncingIcon();
1396                    $(".product-attributes-wrapper").addClass("select-size-error");
1397                    $btn.html($btn.data('btn-text-select-size'))
1398                        .removeClass('btn-success')
1399                        .addClass('btn-danger');
1400                } else {
1401                    addAJAX(eventId);
1402                }
1403            };
1404
1405            var addAJAX = function(eventId){
1406                $.ajax({
1407                    type: "POST",
1408                    url: getCartPageUrl(),
1409                    data: {
1410                        ajax: 'yes',
1411                        task: 'cartInsert',
1412                        id: values.productId,
1413                        combId: values.productCombId,
1414                        amount: values.quantity,
1415                        size: values.size,
1416                        dataProductComment: values.dataProductComment,
1417                        productCharacteristicValue: values.productCharacteristicValue,
1418                        personalizationId: values.personalizationId
1419                    },
1420                    contentType: "application/x-www-form-urlencoded;charset=UTF-8",
1421                    dataType: 'json',
1422                    success: function(ret) {
1423                        console.log(values.dataProductComment);
1424                        let sendObj = {};
1425                        sendObj.id = values.productId;
1426                        sendObj.combId = values.productCombId;
1427                        sendObj.amount = values.quantity;
1428                        sendObj.size = values.size;
1429
1430                        if (ret.flag){
1431                            //stopBouncingIcon($btn.data('btn-text-addedtocart'));
1432                            addSuccess(values.quantity);
1433                            //nbshopJS.CustomEventTrigger('cartButtonClick',ret);
1434                            nbshopJS.CustomEventTrigger('cartButtonClick', {
1435                                ...sendObj,
1436                                event_id: eventId
1437                            });                            //nbshopJS.modalAfterAddToCartProducts(values.productId);
1438                            window.localStorage.setItem("addedToCartProduct", JSON.stringify(sendObj));
1439                        }else{
1440                            nbshopJS.CustomEventTrigger('cartButtonClickFailed', ret.info);
1441                            stopBouncingIcon($btn.data('btn-text-addtocart'));
1442                            addFailed(ret.info,ret.requirePaternQuantity);
1443                        }
1444                    }
1445                });
1446            };
1447
1448            var startBouncingIcon = function(){
1449                //$btn.addClass('icon-bounce');
1450                // $btn.html('...');
1451                $btn.html('<span class="nb-dot-flashing"></span>&nbsp;');
1452            };
1453
1454            var stopBouncingIcon = function(msg){
1455                //$btn.removeClass('icon-bounce');
1456                $btn.html(msg).removeClass('btn-danger').addClass('btn-success');
1457            };
1458
1459            var resetButton = function(){
1460                stopBouncingIcon();
1461                $btn.html($btn.data('btn-text-addtocart'));
1462            };
1463
1464            var addSuccess = function(qnt){
1465                $btn.addClass('btn-activated');
1466                $btn.addClass('cart-increased');
1467                $btn.attr('data-content', '+'+qnt);
1468/*
1469                setTimeout(function(){
1470                    $btn.removeClass('btn-activated');
1471                }, 1000);
1472
1473                setTimeout(function(){
1474                    $btn.html($btn.data('btn-text-addtocart'));
1475                    $btn.attr('data-content', '');
1476                    $btn.removeClass('cart-increased');
1477                }, 4000);*/
1478
1479                refreshMinCartToggle('refreshmincarttoggle', 'no');
1480            };
1481
1482            var requirePaternQuantity = false;
1483            var addFailed = function(msg,requirePaternQuantity){
1484                if(!requirePaternQuantity){
1485                    $btn.html($btn.data('btn-text-no-state'));
1486                }
1487                $btn.removeClass('btn-success').addClass('btn-danger');
1488                toastr.info(msg);
1489            };
1490
1491            if($('#product_quantity').length !== 0) {
1492                $('#product_quantity').on( "change keyup", function() {
1493                    resetButton();
1494                });
1495            }
1496            setValues();
1497        };
1498
1499        //stop video on modal close
1500        $("#product_video_modal").on('hidden.bs.modal', function (e) {
1501            $("#product_video_modal iframe").attr("src", $("#product_video_modal iframe").attr("src"));
1502        });
1503
1504        var setProductPrice = function(price){
1505            $('.product-price .product-price-value').text(price);
1506        };
1507
1508        var setProductLoyaltyPrice = function(price){
1509            if(price){
1510                $('.product-price-loyalty .loyalty-price-value').text(price);
1511            }
1512        };
1513
1514        var setCombinationQuantitySegment = function(combId){
1515            $('.combination-quantity-segment').addClass("hidden");
1516            $('#combination-quantity-segment-'+combId).removeClass('hidden');
1517        };
1518
1519        var setCombinationQuantity = function(combId){
1520            $('.combination-quantity-wrapper').addClass("hidden");
1521            $('#combination-quantity-wrapper-'+combId).removeClass('hidden');
1522        };
1523
1524        var setProductPriceWithoutDiscount = function(hasDiscount, price, priceWithoutDiscount, attrShowBasePrice){
1525
1526            var formatPriceWithoutDiscount = 0;
1527            var formatPrice = 0;
1528
1529            if(typeof priceWithoutDiscount == "undefined" || typeof price == "undefined"){
1530                return false;
1531            }
1532
1533            if(typeof priceWithoutDiscount == "number"){
1534                priceWithoutDiscount = priceWithoutDiscount.toString();
1535            }
1536
1537            if(typeof price == "number"){
1538                price = price.toString();
1539            }
1540
1541            var flagControlShowBasePrice = false;
1542            if(typeof attrShowBasePrice !== "undefined"){
1543                flagControlShowBasePrice = true;
1544            }
1545
1546            if(priceWithoutDiscount.indexOf(".") !== -1 || priceWithoutDiscount.indexOf(",") !== -1){
1547                var formatPriceWithoutDiscount = priceWithoutDiscount.replace(".", "");
1548                formatPriceWithoutDiscount = formatPriceWithoutDiscount.replace(",", "");
1549                formatPriceWithoutDiscount = parseFloat(formatPriceWithoutDiscount);
1550            }else{
1551                formatPriceWithoutDiscount = parseFloat(priceWithoutDiscount);
1552            }
1553
1554            if(price.indexOf(".") !== -1 || price.indexOf(",") !== -1) {
1555                formatPrice = price.replace(".", "");
1556                formatPrice = formatPrice.replace(",", "");
1557                formatPrice = parseFloat(formatPrice);
1558            }else{
1559                formatPrice = parseFloat(price);
1560            }
1561
1562            var priceWithoutDiscountShow = formatPriceWithoutDiscount - formatPrice;
1563
1564            if(flagControlShowBasePrice){
1565                if(attrShowBasePrice == 1 && formatPriceWithoutDiscount > formatPrice && (priceWithoutDiscountShow) > 0){
1566                    $('.product-prev-price.product-pricewithoutdiscount').removeClass('hide');
1567                }else{
1568                    $('.product-prev-price.product-pricewithoutdiscount').addClass('hide');
1569                }
1570            }else{
1571                if(formatPriceWithoutDiscount > formatPrice && (priceWithoutDiscountShow) > 0){
1572                    $('.product-prev-price.product-pricewithoutdiscount').removeClass('hide');
1573                }else{
1574                    $('.product-prev-price.product-pricewithoutdiscount').addClass('hide');
1575                }
1576            }
1577
1578            $('.product-prev-price .product-price-without-discount-value:not(.price-converted)').text(priceWithoutDiscount);
1579
1580        };
1581
1582        var setProductOldPrice = function(hasDiscount, showOldPrice, price, priceWithoutDiscount, oldPrice){
1583
1584            var formatPriceWithoutDiscount = 0;
1585            var formatPrice = 0;
1586
1587            if(typeof priceWithoutDiscount == "undefined" || typeof price == "undefined"){
1588                return false;
1589            }
1590
1591            if(typeof priceWithoutDiscount == "number"){
1592                priceWithoutDiscount = priceWithoutDiscount.toString();
1593            }
1594
1595            if(typeof price == "number"){
1596                price = price.toString();
1597            }
1598
1599            if(priceWithoutDiscount.indexOf(".") !== -1){
1600                formatPriceWithoutDiscount = priceWithoutDiscount.replace(".", "");
1601                formatPriceWithoutDiscount = formatPriceWithoutDiscount.replace(",", "");
1602                formatPriceWithoutDiscount = parseFloat(formatPriceWithoutDiscount);
1603            }else{
1604                formatPriceWithoutDiscount = parseFloat(priceWithoutDiscount);
1605            }
1606
1607            if(price.indexOf(".") !== -1) {
1608                formatPrice = price.replace(".", "");
1609                formatPrice = formatPrice.replace(",", "");
1610                formatPrice = parseFloat(formatPrice);
1611            }else{
1612                formatPrice = parseFloat(price);
1613            }
1614
1615            if(hasDiscount == 1 && formatPriceWithoutDiscount > formatPrice){
1616                $('.product-prev-price.product-oldprice').addClass('product-prev-price-third');
1617            }else{
1618                $('.product-prev-price.product-oldprice').removeClass('product-prev-price-third');
1619            }
1620
1621            if(showOldPrice == 1){
1622                $('.product-prev-price.product-oldprice').removeClass('hide');
1623            }else{
1624                $('.product-prev-price.product-oldprice').addClass('hide');
1625            }
1626
1627            $('.product-prev-price.product-oldprice .product-oldprice-value').text(oldPrice);
1628        };
1629
1630        var setProductPriceWithoutTax = function(showPriceWithoutTax,priceWithoutTax){
1631
1632            if(typeof showPriceWithoutTax == "undefined" || typeof priceWithoutTax == "undefined"){
1633                return false;
1634            }
1635
1636            if(showPriceWithoutTax == 1){
1637                $('.current-price-without-tax product-price-without-tax').removeClass('hide');
1638            }else{
1639                $('.current-price-without-tax product-price-without-tax').addClass('hide');
1640            }
1641
1642            $('.current-price-without-tax product-price-without-tax .product-price-without-tax-value').text(showPriceWithoutTax);
1643        };
1644
1645        var setDiscount = function(showDiscount, showCaptionPlusconnector, discount, oldDiscount){
1646
1647            if(showDiscount == 1){
1648                $('.products-detail-wrapper .caption-discount').removeClass('hide');
1649
1650                if(showCaptionPlusconnector == 1){
1651                    $('.products-detail-wrapper .caption-discount .caption-plusconnector').removeClass('hide');
1652                }else{
1653                    $('.products-detail-wrapper .caption-discount .caption-plusconnector').addClass('hide');
1654                }
1655            }else{
1656                $('.products-detail-wrapper .caption-discount').addClass('hide');
1657            }
1658
1659            if(showCaptionPlusconnector == 1 && oldDiscount != ''){
1660                $('.products-detail-wrapper .caption-discount').addClass('sum-discount');
1661                $('.products-detail-wrapper .caption-discount .discount-old-wraper').removeClass('hide');
1662            }else{
1663                $('.products-detail-wrapper .caption-discount').removeClass('sum-discount');
1664                $('.products-detail-wrapper .caption-discount .discount-old-wraper').addClass('hide');
1665            }
1666
1667            $('.products-detail-wrapper .caption-discount .text-old-discount .text-old-discount-value').text(oldDiscount);
1668            $('.products-detail-wrapper .caption-discount .text-discount-value').text(discount);
1669        };
1670
1671        var seCombinationCode = function(showCombinationCode, combinationCode){
1672
1673            var containerId = '#combination-code-container';
1674            var valueId     = '#combination-code-preview-value';
1675
1676            if(showCombinationCode == 1){
1677                $(containerId).show();
1678                $(valueId).html(combinationCode);
1679            }
1680        };
1681
1682        var setCombinationBarCode = function(combinationBarcode){
1683
1684            var containerCombinationBarcodeId = '#product-barcode-container';
1685            var combinationBarcodevalueId     = '#product-barcode-preview-value';
1686
1687            if($(containerCombinationBarcodeId).length > 0 && typeof combinationBarcode != "undefined" && combinationBarcode != ''){
1688                $(containerCombinationBarcodeId).show();
1689                $(combinationBarcodevalueId).html(combinationBarcode);
1690            }
1691        };
1692
1693        var setProductPriceSaved = function(priceSaved,hasDiscount){
1694
1695            var formatPriceSavedValue = 0;
1696
1697            if(typeof priceSaved == "undefined"){
1698                return false;
1699            }
1700
1701            if(typeof priceSaved == "number"){
1702                priceSaved = priceSaved.toString();
1703            }
1704
1705
1706            if(priceSaved.indexOf(".") !== -1) {
1707                formatPriceSavedValue = priceSaved.replace(".", "");
1708                formatPriceSavedValue = formatPriceSavedValue.replace(",", "");
1709                formatPriceSavedValue = parseFloat(formatPriceSavedValue);
1710            }else{
1711                formatPriceSavedValue = parseFloat(priceSaved);
1712            }
1713
1714            if(formatPriceSavedValue > 0 && hasDiscount == 1){
1715                $('.product-price-wrapper .product-price-saved').removeClass('hide');
1716            }else{
1717                $('.product-price-wrapper .product-price-saved').addClass('hide');
1718            }
1719
1720            $('.product-price-wrapper .product-price-saved .product-price-saved-value').text(priceSaved);
1721        };
1722
1723        function setPriceConvert(flagPriceConver, priceConvert, currencyConvert){
1724
1725            if((typeof priceConvert == "undefined" || typeof currencyConvert == "undefined")){
1726                return false;
1727            }
1728
1729            if(flagPriceConver == 1){
1730                var formatPriceConvertValue = priceConvert.replace(".", "");
1731                formatPriceConvertValue = formatPriceConvertValue.replace(",", ".");
1732                formatPriceConvertValue = parseFloat(formatPriceConvertValue);
1733
1734                    $('.product-detail-wrapper .product-convert-price .product-price-convert-value').text(priceConvert);
1735                    $('.product-detail-wrapper .product-convert-price .product-currency-convert-value').text(currencyConvert);
1736
1737
1738            }
1739        }
1740
1741        var productQuantity = function(){
1742
1743            var $productQuantity = $('.product-quantity-input');
1744
1745            console.log($productQuantity.hasClass("quantity-initialized"))
1746
1747            if($productQuantity.hasClass("quantity-initialized")) {
1748                return;
1749            }
1750
1751            $productDetails.find('.product-quantity-arrows i').click(function(){
1752                var $arrow = $(this),
1753                    $productQuantity = $('.product-quantity-input'),
1754                    $productQuantityHelper = $('.product-quantity-helper-pre'),
1755                    productQuantityVal = parseInt($productQuantity.val());
1756
1757                $productQuantity.removeClass('ease-slow active-down active-up');
1758                $productQuantityHelper.removeClass('active ease-slow');
1759
1760                if($arrow.hasClass('quantity-up')){
1761                    var productQuantityNewVal = productQuantityVal+1;
1762                    $productQuantity.addClass('active-up');
1763
1764                } else if($arrow.hasClass('quantity-down')){
1765                    if(productQuantityVal == 1) return;
1766                    var productQuantityNewVal = productQuantityVal-1;
1767
1768                    //$productQuantityHelper = $('.product-quantity-helper-post');
1769                    //$productQuantity.addClass('active-down');
1770                }
1771
1772                $productQuantity.addClass('ease-slow');
1773                $productQuantityHelper.html(productQuantityNewVal).addClass('active ease-slow');
1774
1775                setTimeout(function(){
1776                    $productQuantityHelper.removeClass('active ease-slow');
1777                    $productQuantity.removeClass('active-up active-down ease-slow');
1778                    $productQuantity.val(productQuantityNewVal);
1779                    var quantityNb = $('.product-quantity-helper-pre').text();
1780                    $('.product-detail-buy .title span.packaging-quantity').text(quantityNb);
1781                }, 10);
1782            });
1783            $('#product_quantity').change(function () {
1784                var quantityNb = $('#product_quantity').val();
1785                $('.product-detail-buy .title span.packaging-quantity').text(quantityNb);
1786            });
1787        };
1788
1789        var productAttribute = function(){
1790
1791            var setSelectedAttr = function(sizeName, price, combId, attrShowDiscount, attrShowCaptionPlusconnector, attrDiscount, attrOldDiscount, priceWithoutDiscount, showOldPrice, oldPrice, priceSaved, showCombinationCode, combinationCode, flagPriceConver, priceConvert, currencyConvert, showPriceWithoutTax, priceWithoutTax, attrShowBasePrice, combinationBarc
1791ode, attrloyaltyPrice){
1792                $size.val(sizeName);
1793                $combId.val(combId);
1794                setProductPrice(price);
1795                setProductLoyaltyPrice(attrloyaltyPrice);
1796                setProductPriceWithoutDiscount(attrShowDiscount, price, priceWithoutDiscount, attrShowBasePrice);
1797                setProductOldPrice(attrShowDiscount, showOldPrice, price, priceWithoutDiscount, oldPrice);
1798                setProductPriceWithoutTax(showPriceWithoutTax,priceWithoutTax);
1799                setProductPriceSaved(priceSaved,attrShowDiscount);
1800                setDiscount(attrShowDiscount, attrShowCaptionPlusconnector, attrDiscount, attrOldDiscount);
1801                seCombinationCode(showCombinationCode, combinationCode);
1802                $productPriceQueryCombinationId.val(combId);
1803                $productPriceQueryCombinationName.val(sizeName);
1804                setPriceConvert(flagPriceConver, priceConvert, currencyConvert);
1805                setCombinationQuantitySegment(combId);
1806                setCombinationQuantity(combId);
1807                setCombinationBarCode(combinationBarcode);
1808            };
1809
1810            var addAsWanted = function(attrCombId){
1811
1812                if(!app.logged_in){
1813                    getLoginModal().modal('show');
1814                    return;
1815                }
1816
1817                $.ajax({
1818                    type: "POST",
1819                    url: nb_active_page_url,
1820                    data: {
1821                        nbAjax: 1,
1822                        nbTask: 'product_available_sizes',
1823                        flag: 'yes',
1824                        ajax: 'yes',
1825                        task: 'add_product_available_sizes',
1826                        productId: $('#product_id').val(),
1827                        combinationId: attrCombId
1828                    },
1829                    contentType: "application/x-www-form-urlencoded;charset=UTF-8",
1830                    dataType: 'json',
1831                    success: function(ret) {
1832                        if(ret.flag) {
1833                            toastr.success(ret.info);
1834                        }else{
1835                            toastr.info(ret.info);
1836                        }
1837                    }
1838                });
1839
1840            };
1841
1842            $('#product_characteristic_value').change(function(){
1843                $productDetails.find('.shop-button-qnt').trigger('shop-button.reset');
1844            });
1845
1846            if(!$productDetails.hasClass('quick-view-category-wrapper')){
1847
1848                var $productAttrs = $productDetails.find('.product-attributes');
1849
1850                $productAttrs.find('li').click(function(){
1851
1852                    var $attrClicked = $(this),
1853                        attrName = $attrClicked.data('productsize-name'),
1854                        attrPrice = $attrClicked.data('productsize-price'),
1855                        attrShowDiscount = $attrClicked.data('productsize-show-dicount'),
1856                        attrShowCaptionPlusconnector = $attrClicked.data('productsize-show-caption-plusconnector'),
1857                        attrDiscount = $attrClicked.data('productsize-dicount'),
1858                        attrOldDiscount = $attrClicked.data('productsize-olddicount'),
1859                        attrShowBasePrice = $attrClicked.data('productsize-show-base-price'),
1860                        attrPriceWithoutDiscount = $attrClicked.data('productsize-price-without-discount'),
1861                        attrShowOldPrice = $attrClicked.data('productsize-show-oldprice'),
1862                        attrOldPrice = $attrClicked.data('productsize-oldprice'),
1863                        attrShowPriceWithoutTax = $attrClicked.data('productsize-show-price-without-tax'),
1864                        attrPriceWithoutTax = $attrClicked.data('productsize-price-without-tax'),
1865                        priceSaved = $attrClicked.data('productsize-pricesaved'),
1866                        attrCombId = $attrClicked.data('productsize-combid'),
1867                        attrLabel = $attrClicked.closest('.product-attributes-wrapper').find('label'),
1868                        attrloyaltyPrice = $attrClicked.data('productsize-loyalty-price');
1869                    if(!$attrClicked.hasClass('disabled')){
1870                        attrLabel.find('span').remove();
1871                        attrLabbelText = attrLabel.html();
1872                        attrLabel.html(attrLabbelText+"<span>"+attrName+"</span>");
1873                    }
1874                    showCombinationCode = $attrClicked.data('show-combination-code');
1875                    combinationCode = $attrClicked.data('combination-code');
1876                    combinationBarcode = $attrClicked.data('combination-barcode');
1877                    attrproductsizeFlagPriceConvert = $attrClicked.data('productsize-flag-price-convert');
1878                    attrproductsizePriceConvert = $attrClicked.data('productsize-price-convert');
1879                    attrproductsizeCurrencyConvert = $attrClicked.data('productsize-currency-convert');
1880
1881                    if($attrClicked.hasClass('disabled') && $attrClicked.parents('.no-disable-click').length){
1882                        return;
1883                    }
1884
1885                    if($attrClicked.hasClass('disabled') && !$attrClicked.hasClass('hasChild')){
1886                        addAsWanted(attrCombId);
1887                        return;
1888                    }
1889
1890                    if($attrClicked.hasClass('disabled') && $attrClicked.hasClass('second-level')){
1891                        addAsWanted(attrCombId);
1892                        return;
1893                    }
1894
1895                    if(!$productAttrs.hasClass('multiple-choice')){
1896                        $productAttrs.find('li').removeClass('active');
1897                    }
1898
1899                    if(!$attrClicked.hasClass('disabled')){
1900                        $attrClicked.hasClass('multiple-choice') ? $attrClicked.removeClass('active') : '';
1901
1902                        $attrClicked.hasClass('active')
1903                            ? $attrClicked.removeClass('active')
1904                            : $attrClicked.addClass('active');
1905                    }
1906
1907                    if($attrClicked.hasClass('active')){
1908                        $productDetails.find('.shop-button-qnt').trigger('shop-button.reset');
1909                    }
1910
1911                    setSelectedAttr(attrName, attrPrice, attrCombId, attrShowDiscount, attrShowCaptionPlusconnector, attrDiscount, attrOldDiscount, attrPriceWithoutDiscount, attrShowOldPrice, attrOldPrice, priceSaved, showCombinationCode, combinationCode, attrproductsizeFlagPriceConvert, attrproductsizePriceConvert, attrproductsizeCurrencyConvert, attrShowPriceWithoutTax, attrPriceWithoutTax, attrShowBasePrice, combinationBarcode, attrloyaltyPrice);
1912
1913                    if($attrClicked.parent().hasClass('item-price-v2')){
1914                        var addToCartButton = $('.shop-button-qnt'),
1915                            btnTextAddedtocart = $('.shop-button-qnt').data('btn-text-addedtocart'),
1916                            btnTextAddtocart = $('.shop-button-qnt').data('btn-text-addtocart'),
1917                            btnTextNoState = $('.shop-button-qnt').data('btn-text-no-state'),
1918                            $attrClickedButton = $attrClicked.find('.buyButtonOnLists');
1919                        addToCartButton.click();
1920                        $attrClicked.removeClass('active');
1921                        window.addEventListener('cartButtonClick', function (e){
1922                            $attrClickedButton.text(btnTextAddedtocart).addClass('btn-successed');
1923                            setTimeout(function () {
1924                                $attrClickedButton.text(btnTextAddtocart).removeClass('btn-successed');
1925                            }, 3000);
1926                        });
1927                        window.addEventListener('cartButtonClickFailed', function (e){
1928                            $attrClickedButton.text(btnTextNoState).addClass('btn-danger');
1929                        });
1930
1931                    }
1932                });
1933
1934                //only one active size is avaliable, check it automatically
1935                if($productAttrs.find('> li').length === 1 && $productAttrs.find('> li:not(.disabled)').length === 1 && !$productAttrs.hasClass('item-price-v2')){
1936                    $productAttrs.find('> li:not(.disabled)').click();
1937                }
1938
1939            }
1940
1941        };
1942
1943        var productImages = function(){
1944
1945            var $images = $('.product-main');
1946            var indexID;
1947
1948
1949            var videoId;
1950            var api;
1951            var flowPlayerFlag = false;
1952            if($("#item-flowplayery").length != 0 && flowplayeryToken != '') {
1953                flowPlayerFlag = true;
1954                videoId = $('#item-flowplayery').data('video-id');
1955                api = flowplayer('#item-flowplayery', {
1956                    "src"      : videoId,
1957                    "token"    : flowplayeryToken,
1958                    "autoplay" : true,
1959                    "muted"    : true,
1960                    "loop"     : true,
1961                    "ui"       : flowplayer.ui.NO_CONTROLS
1962                });
1963            }
1964
1965            function mainSlider(){
1966                var mainImgNoSlider = '';
1967                if($(window).width() < 768){
1968                    mainImgNoSlider = ", .product-images-gallery .slider-init";
1969                }
1970                $navigation     =  $('.slider.product-main, .product-images-gallery').find('.slider-navigation-absolute');
1971                $slider =  $('.product-main.slider .slider-init'+mainImgNoSlider);
1972
1973                $slider.on('init', function(event, slick){
1974                    setTimeout(function(){
1975                        var itemVideo = $('.item-flowplayery');
1976                        var MainSldierProduct = $('.slider.product-main');
1977                        var MainSldierProductHeight = MainSldierProduct.height();
1978                        itemVideo.height(MainSldierProductHeight);
1979                    },1000);
1980                });
1981
1982                $('.volume-icons-wrapper').on('click', function(){
1983                    api.toggleMute();
1984                    $('.volume-icons-wrapper .fa-volume-off').toggleClass('hidden');
1985                    $('.volume-icons-wrapper .fa-volume-up').toggleClass('hidden');
1986                });
1987
1988                $slider.nbHandleSlider({
1989                    speed: 1,
1990                    appendArrows: $navigation,
1991                    prevArrow: '<div class="slider-arrow slider-prev"><i class="fa fa-angle-left" aria-hidden="true"></i></div>',
1992                    nextArrow: '<div class="slider-arrow slider-next"><i class="fa fa-angle-right" aria-hidden="true"></i></div>',
1993                    arrows: true,
1994                    asNavFor: '.product-images-thumbs .slider-init,.product-images-thumbs-vertical .slider-init',
1995                    responsive: [
1996                        {breakpoint: 768,  settings: { dots: true}}
1997                    ]
1998                });
1999
2000                if(flowPlayerFlag){
2001                    var itemVideo = $('.item-flowplayery');
2002                    var MainSldierProduct = $('.slider.product-main');
2003                    var MainSldierProductHeight = MainSldierProduct.height();
2004                    $slider.on('afterChange', function(event, slick, currentSlide) {
2005                        if($('.product-main .slider-init .item.slick-current').hasClass('item-flowplayery')){
2006                            itemVideo.height(MainSldierProductHeight);
2007                            api.togglePlay(true);
2008                        } else {
2009                            api.pause(true);
2010                        }
2011                    });
2012                }
2013
2014                $(".slider.product-main .item").click(function(){
2015                    indexID = $('.slider.product-main .slick-current img').data("index");
2016                });
2017
2018                $(".product-images-gallery .item .img-wrapper").click(function(){
2019                    indexID = $(this).data("index");
2020                    $('.fullscreen > .slider-init').slick('slickGoTo', indexID);
2021                });
2022
2023            };
2024
2025            // Fullscreen slider
2026            var fullscreenSlider = function(){
2027
2028                var $fullscreenWrapper = $('.fullscreen'),
2029                    $fullscreenSlider = $('.fullscreen > .slider-init'),
2030                    $zoomOpenBtn = $('.product-images-zoom-open, .slider.product-main .item:not(.video,.item-flowplayery), .product-images-gallery .item:not(.video,.item-flowplayery) .img-wrapper'), //.slider.product-main .item
2031                    $zoomCloseBtn = $('.fullscreen .close'),
2032                    $thumbsFullscreenSlider = $('.product-images-thumbs-vertical-fullscreen .slider-init');
2033                var imgWrapper = $('.fullscreen > .slider-init .img-wrapper');
2034
2035                if(!$fullscreenWrapper.length) return;
2036
2037                //Fullscreen slider
2038                var $navigation     =  $('.fullscreen > .slider-navigation-absolute');
2039
2040                $fullscreenSlider.handleSlider({
2041                    arrows: false,
2042                    fade:true,
2043                    appendArrows: $navigation,
2044                    prevArrow: '<div class="slider-arrow slider-prev"><i class="fa fa-angle-left" aria-hidden="true"></i></div>',
2045                    nextArrow: '<div class="slider-arrow slider-next"><i class="fa fa-angle-right" aria-hidden="true"></i></div>'
2046                });
2047
2048                $(".fullscreen").click(function(){
2049                    indexID = $('.slider-init.fscrren .slick-current img').data("index");
2050                });
2051
2052                imgWrapper.click(function(){
2053                    closeZoom();
2054                }).children().click(function(e) {
2055                    return false;
2056                });
2057
2058                var thumbsItems = $('.product-images').data('slider-items');
2059                if(typeof(thumbsItems) == 'undefined' || thumbsItems == null || thumbsItems == ""){
2060                    thumbsItems = 4;
2061                }
2062
2063
2064                //Fullscreen slider thumbs
2065                $thumbsFullscreenSlider.handleSlider({
2066                    speed: 200,
2067                    slidesToShow: thumbsItems,
2068                    vertical: true,
2069                    arrows: true,
2070                    focusOnSelect: true,
2071                    appendArrows: $('.product-images-thumbs-vertical-fullscreen .slider-navigation'),
2072                    prevArrow: '<div class="slider-arrow slider-prev"><i class="fa fa-angle-left" aria-hidden="true"></i></div>',
2073                    nextArrow: '<div class="slider-arrow slider-next"><i class="fa fa-angle-right" aria-hidden="true"></i></div>',
2074                    asNavFor: '.slider-init.fscrren, .product-images-thumbs .slider-init'
2075                });
2076
2077
2078                var openZoom = function(){
2079                    if(app.width() <= app.mobileBreakpoint) return;
2080
2081                    //goto(mainSliderInstance.getCurrentIndex());
2082
2083                    $fullscreenWrapper.addClass('loaded').css('height', (app.height()-$('.header').outerHeight(true)-30)+"px");
2084                    $fullscreenWrapper.addClass('loaded').css('height', (app.height()-70)+"px");
2085                    $fullscreenWrapper.find("img").addClass('loaded').css('max-height', (app.height()-$('.header').outerHeight(true)-30)+"px");
2086                    $fullscreenWrapper.find(".slider-navigation").removeClass('hidden');
2087                    $('.header').addClass("hidden");
2088
2089                    bindEscapeButton();
2090
2091                    setTimeout(function(){
2092                        $('.hideon-fullscreen').addClass('hidden');
2093                    }, 500);
2094
2095                    $('.header').next().addClass('scroll-to-fixed-pos');
2096                    $('.fixed-header-cart').hide();
2097
2098                    setTimeout(function(){
2099                        $fullscreenSlider.reinitSlider();
2100                        $('.fullscreen > .slider-init').slick('slickGoTo', indexID);
2101                    }, 100);
2102                    setTimeout(function(){
2103                        $thumbsFullscreenSlider.reinitSlider();
2104                    }, 500);
2105
2106                };
2107
2108                var bindEscapeButton = function(){
2109                    $(document).keyup(function(e) {
2110                        if (e.keyCode == 27) {
2111                            closeZoom();
2112                            var $slider =$('.handlines-sldier .slider-init');
2113                            $slider.slick('unslick');
2114                            $slider.nbHandleSlider({
2115                                autoplay: true,
2116                                speed: 1000
2117                            });
2118                        }
2119                    });
2120                };
2121
2122                var unbindEscapeButton = function(){
2123                    $(document).unbind('keyup');
2124                };
2125
2126                var closeZoom = function(){
2127                    $('.hideon-fullscreen').removeClass('hidden');
2128                    $fullscreenWrapper.removeClass('loaded');
2129                    $fullscreenWrapper.find(".slider-navigation").addClass('hidden');
2130                    $('.header').removeClass("hidden");
2131
2132                    setTimeout(function(){
2133                        $('.hideon-fullscreen').removeClass('hidden');
2134                    }, 500);
2135
2136                    unbindEscapeButton();
2137
2138                    $('.header').next().removeClass('scroll-to-fixed-pos');
2139
2140                    $('.fixed-header-cart').show();
2141
2142
2143                    $('.product-main.slider .slider-init').slick('slickGoTo', indexID);
2144
2145                };
2146
2147                $zoomOpenBtn.click(function(e){
2148                    e.preventDefault();
2149                    openZoom();
2150
2151                });
2152
2153                $zoomCloseBtn.click(function(e){
2154                    e.preventDefault();
2155                    closeZoom();
2156                    var $slider =$('.handlines-sldier .slider-init');
2157                    $slider.slick('unslick');
2158                    $slider.nbHandleSlider({
2159                        autoplay: true,
2160                        speed: 1000
2161                    });
2162                });
2163
2164            };
2165
2166            var sliderThumbs = function(){
2167
2168                var vertical = $('.product-images').data('vertical');
2169                var items = $('.product-images').data('slider-items');
2170                $slider = $('.product-images-thumbs .slider-init');
2171
2172                if(typeof(vertical) == 'undefined' || vertical == null || vertical == ""){
2173                    vertical = false;
2174                }else{
2175                    vertical = true;
2176                }
2177
2178                if(typeof(items) == 'undefined' || items == null || items == ""){
2179                    items = 3;
2180                }
2181                window.nbSlider = {};
2182
2183                window.nbSlider.productDetailThumbs = {
2184                    speed: 200,
2185                    slidesToShow: items,
2186                    vertical: vertical,
2187                    arrows: true,
2188                    focusOnSelect: true,
2189                    appendArrows: $('.product-images-thumbs .slider-navigation'),
2190                    prevArrow: '<div class="slider-arrow slider-prev"><i class="fa fa-angle-left" aria-hidden="true"></i></div>',
2191                    nextArrow: '<div class="slider-arrow slider-next"><i class="fa fa-angle-right" aria-hidden="true"></i></div>',
2192                    asNavFor: '.product-main .slider-init, .product-images-thumbs-vertical-fullscreen .slider-init'
2193                };
2194
2195                $slider.nbHandleSlider(window.nbSlider.productDetailThumbs);
2196            };
2197
2198            var sliderThumbsVertical = function(){
2199
2200                var vertical    = $('.product-images').data('vertical');
2201                var items       = $('.product-images').data('slider-items');
2202                var $slider     = $('.product-images-thumbs-vertical .slider-init');
2203
2204                if(typeof(vertical) == 'undefined' || vertical == null || vertical == ""){
2205                    vertical = false;
2206                }else{
2207                    vertical = true;
2208                }
2209
2210                if(typeof(items) == 'undefined' || items == null || items == ""){
2211                    items = 3;
2212                }
2213
2214                $slider.nbHandleSlider({
2215                    speed: 200,
2216                    slidesToShow: items,
2217                    vertical: vertical,
2218                    arrows: true,
2219                    focusOnSelect: true,
2220                    appendArrows: $('.product-images-thumbs-vertical .slider-navigation'),
2221                    prevArrow: '<div class="slider-arrow slider-prev"><i class="fa fa-angle-left" aria-hidden="true"></i></div>',
2222                    nextArrow: '<div class="slider-arrow slider-next"><i class="fa fa-angle-right" aria-hidden="true"></i></div>',
2223                    asNavFor: '.product-main .slider-init'
2224                });
2225
2226            };
2227
2228            //Thumbs
2229            var minigallery = function(mainSliderInstance){
2230
2231                var $miniGalleryThumbs = $images.find('.minigallery-thumbs'),
2232                    $thumbsOpenBtn = $('.minigallery-thumbs-open'),
2233                    $thumbsCloseBtn = $images.find('.minigallery-thumbs-close'),
2234                    $imageThumb = $images.find('.minigallery-thumb-item');
2235
2236                if(!$miniGalleryThumbs.length) return;
2237
2238                var openThumbs = function(){
2239                    $miniGalleryThumbs.addClass('active');
2240                    $thumbsCloseBtn.removeClass('hidden');
2241                    $thumbsOpenBtn.addClass('hidden');
2242
2243                    /*app.scroll.set($miniGalleryThumbs, {
2244                        curcursorcolor: "rgba(255, 255, 255, 0.4)",
2245                        railpadding: {right: 5},
2246                        zindex: 1500
2247                    });
2248
2249                    app.scroll.show($miniGalleryThumbs);*/
2250                };
2251
2252                var closeThumbs = function(){
2253                    $miniGalleryThumbs.removeClass('active');
2254                    $thumbsOpenBtn.removeClass('hidden');
2255                    $thumbsCloseBtn.addClass('hidden');
2256                    //app.scroll.hide($miniGalleryThumbs);
2257                };
2258
2259                $('html').click(function(e) {
2260                    if( $miniGalleryThumbs.hasClass('active') && !$(e.target).closest($imageThumb).length &&
2261                        !$(e.target).closest($imageThumb).length && !$(e.target).closest($thumbsOpenBtn).length){
2262                        closeThumbs();
2263                    }
2264                });
2265
2266                $thumbsOpenBtn.click(function(e){
2267                    e.preventDefault();
2268                    openThumbs();
2269                });
2270
2271                $thumbsCloseBtn.click(function(e){
2272                    e.preventDefault();
2273                    closeThumbs();
2274                });
2275
2276                $imageThumb.click(function(e){
2277                    //mainSliderInstance.goto($(this).data('index'));
2278                    $miniGalleryThumbs.removeClass('active');
2279                    closeThumbs();
2280                });
2281            };
2282
2283            var slider = new mainSlider;
2284            new fullscreenSlider(slider);
2285            new sliderThumbs(slider);
2286            new sliderThumbsVertical(slider);
2287        };
2288
2289        var youtubeAspectRatio = function(){
2290            var $video = $productDetails.find("iframe[src^='http://www.youtube.com']");
2291
2292            // Figure out and save aspect ratio for video
2293            $video
2294                .data('aspectRatio', $video.height() / $video.width())
2295
2296                // and remove the hard coded width/height
2297                .removeAttr('height')
2298                .removeAttr('width');
2299
2300            // When the window is resized
2301            // (You'll probably want to debounce this)
2302            $(window).resize(function() {
2303
2304                // The element that is fluid width
2305                var $fluidEl = $video.parents('.tab-content').find('.tab-pane.active'); // $productDetails.find('.tab-pane:visible');
2306                var newWidth = $fluidEl.width();
2307
2308                // Resize video according to its own aspect ratio
2309                $video
2310                    .width(newWidth)
2311                    .height(newWidth * $video.data('aspectRatio'));
2312
2313                // Kick off one resize to fix all videos on page load
2314            }).resize();
2315
2316            $('a[href="#tab_product_video"]').on('shown.bs.tab', function (e) {
2317                $(window).resize();
2318            });
2319        };
2320
2321        var horizontalDivider = function(){
2322            $productDetails.imagesLoaded(function(){
2323                $('.product-horizontal-divider').css('margin-top', $('.product-intro').height() + 20).addClass('loaded');
2324            });
2325        };
2326
2327        var productBrandClicked = function(){
2328            $productDetails.find('.product-brand a').click(function(e){
2329                e.preventDefault();
2330                e.stopPropagation();
2331                window.open($(this).attr('href'), $(this).attr('target'));
2332            });
2333        };
2334
2335        var addProductIsAvailable = function(){
2336
2337            var $productIsAvailable = $productDetails.find('#actionInfoProductIsAvailable');
2338            $productIsAvailable.click(function() {
2339                $productDetails.find('.product-attributes .infoSizeIsAvailable').trigger( "click" );
2340            });
2341        };
2342
2343        addToCart();
2344        // productQuantity();
2345        productAttribute();
2346        productImages();
2347        youtubeAspectRatio();
2348        //horizontalDivider();
2349        productBrandClicked();
2350
2351        /*autodragstor dva puta salje zahtev zbog ove funkcije
2352        //funkcija vec postoji u bloku*/
2353        //addProductIsAvailable();
2354    };
2355
2356    /*
2357     * PRODUCT LISTING
2358     * Description: Everything that has to do with listing of a products:
2359     *              types of a listing, filters, toggling filters etc.
2360     * Plugins used: niceScroll, ionRangeSlider
2361     */
2362    var handleProductListing = function($productListing){
2363
2364        //define objects
2365        var $filtersWrapper = $productListing.find('.product-listing-filters');
2366        if($(window).width() < 900) {
2367            $filterGroup = $productListing.find('.filter-group');
2368        }else{
2369            $filterGroup = $productListing.find('.filter-group:not(.filter-group-1)');
2370        }
2371            $filterGroupItems = $productListing.find('.filter-group .items-wrapper');
2372
2373        //changing the type of listing
2374        var listTypes = function(){
2375            var $listTypes = $('.list-types-wrapper .item');
2376            //type of a listing is changed
2377            $listTypes.click(function(){
2378                var $typeClicked = $(this);
2379                //set all types to inactive
2380                $listTypes.removeClass('active');
2381                //set clicked type to active
2382                $typeClicked.addClass('active');
2383            });
2384        };
2385
2386        //MOBILE DEVICES ONLY!!!
2387        var mobileDeviceFilters = function(){
2388            var $labelFilters = $('.action-filters,.label-filters'),
2389                $closeBtn = $filtersWrapper.find('.filter-search, .filters-close, .product-listing-filters-close'),
2390                $resetTagBtn = $filtersWrapper.find('.reset-tag-wrapper');
2391
2392            if($(window).width() < 768) {
2393                $resetTagBtn.click( function () {
2394                    $filtersWrapper.removeClass('loaded');
2395                })
2396            }
2397
2398            //label filter is clicked
2399            $labelFilters.on('click', function(){
2400                $filtersWrapper.addClass('loaded');
2401                if($('.filters-wrapper-mob').length === 0){
2402                    $filtersWrapper.parent().append( "<div class='filters-wrapper-mob'></div>" );
2403                }
2404                //go to top of a window
2405                $filtersWrapper.animate({scrollTop: 0}, 0);
2406                //resize niceScroll, some weird bug OMG
2407                //app.scroll.resize($filterGroupItems);
2408            });
2409
2410            //close filters
2411            $closeBtn.click(function(){
2412                //yeah, close it
2413                $filtersWrapper.removeClass('loaded');
2414                $('.filters-wrapper-mob').remove();
2415                //app.scroll.hide($filtersWrapper);
2416                //app.scroll.hide($filterGroupItems);
2417            });
2418        };
2419
2420        var priceRange = function(){
2421
2422        };
2423
2424        //every group of filter items must have max-height setted
2425        //if real height is bigger, scroll will be visible using a niceScroll plugin
2426        var setScrolls = function(){
2427
2428            //AN: srediti
2429            // app.scroll.set($filterGroupItems, {
2430            //     cursorcolor: $filtersWrapper.data('scroll-color'),
2431            //     background: $filtersWrapper.data('background') ? $filtersWrapper.data('background') : "#f0f0f0",
2432            //     cursorwidth: $filtersWrapper.data('cursor-width') ? $filtersWrapper.data('cursor-width') : 7,
2433            //     zindex: 1
2434            // });
2435            //
2436            // //resize niceScroll on scroll event, some weird bug OMG
2437            // $(window).scroll(function() {
2438            //     app.scroll.resize($filterGroupItems);
2439            // });
2440        };
2441
2442        var toggleSubcategoryFilters = function (){
2443            if($('.toggle-subcategory-enable .items-wrapper > li.active > a').length){
2444                var activlinkParent = $('.toggle-subcategory-enable .items-wrapper > li.active').closest('.filter-group-items');
2445                if(activlinkParent.data('lvl') == 1){
2446                    $('.toggle-subcategory-enable .items-wrapper > li.active .filter-category-menu').removeClass('hidden');
2447                    $('.toggle-subcategory-enable .items-wrapper > li.active .toggle-subcategory-wrapper .icon').each(function (){
2448                        $(this).toggleClass('active');
2449                    });
2450                } else if(activlinkParent.data('lvl') == 2){
2451                    $('.toggle-subcategory-enable .items-wrapper > li.active > a').closest('.filter-category-menu').removeClass('hidden');
2452                    activlinkParent.closest('.filter-group-items-wrapper').parent().find('.toggle-subcategory-wrapper .icon').each(function (){
2453                        $(this).toggleClass('active');
2454                    });
2455                }
2456
2457            }
2458            $('.filter-group .toggle-subcategory-wrapper > .icon').click(function (){
2459                if($(this).hasClass('icon-minus')){
2460                    $(this).closest('li').find('.filter-category-menu').addClass('hidden');
2461                    $(this).parent().find('.icon').each(function (){$(this).toggleClass('active')});
2462                } else if($(this).hasClass('icon-plus')) {
2463                    $(this).closest('li').find('.filter-category-menu').removeClass('hidden');
2464                    $(this).parent().find('.icon').each(function (){$(this).toggleClass('active')});
2465                }
2466            });
2467        }
2468
2469        var toggleFilterGroup = function(){
2470
2471            $filtersMenuDropdown = $('.filters-dropdown-menu');
2472            if($filtersMenuDropdown.length > 0 && $(window).width() > 768){
2473                $filterGroup.find('.icon.icon-open').removeClass('active');
2474                $filterGroup.find('.icon.icon-close').addClass('active');
2475                $('body').click(function(e){
2476                    if ($(e.target).closest('.filter-group .headline-wrapper ').length === 0) {
2477                        $filterGroup.find('.icon.icon-open').removeClass('active');
2478                        $filterGroup.find('.icon.icon-close').addClass('active');
2479                        $filterGroup.find('.items-wrapper').addClass('hidden');
2480                    }
2481                });
2482            }
2483
2484            $filterGroup.each(function(){
2485
2486                //set objects for clicked filter group
2487                var $itemsWrapper = $(this).find('.items-wrapper'),
2488                    $headline = $(this).find('.headline-wrapper'),
2489                    $openIcon = $headline.find('.icon.icon-open'),
2490                    $closeIcon = $headline.find('.icon.icon-close');
2491
2492                if($(window).width() < 768) {
2493                    $openIcon.removeClass('active');
2494                    $closeIcon.addClass('active');
2495                    $itemsWrapper.addClass('hidden');
2496                    if($itemsWrapper.parent('.filter-category-menu').length > 0){
2497                        $itemsWrapper.removeClass('hidden');
2498                    }
2499                };
2500
2501                //show or hide items, and set correct icon
2502                $headline.click(function() {
2503
2504                    if($(window).width() < 768) {
2505                        $openIcon.toggleClass('active');
2506                        $closeIcon.toggleClass('active');
2507                        $itemsWrapper.toggleClass('hidden');
2508                    } else {
2509                        if($itemsWrapper.is(':visible')){
2510
2511                            $openIcon.removeClass('active');
2512                            $closeIcon.addClass('active');
2513                            $(this).removeClass('active');
2514                            if($(window).width() >= 768) {
2515                                //app.scroll.hide($itemsWrapper.find('.items-wrapper'));
2516
2517                                $itemsWrapper.slideUp({
2518                                    duration: 'fast',
2519                                    progress: function(){
2520                                        // app.scroll.resize($filterGroupItems);
2521                                    }
2522                                });
2523
2524                            }
2525                            $(this).parent().find('.show-all-filters').hide();
2526                        } else {
2527                            if($filtersMenuDropdown.length > 0){
2528                                $filterGroup.find('.icon.icon-open').removeClass('active');
2529                                $filterGroup.find('.icon.icon-close').addClass('active');
2530                                $filterGroup.find('.items-wrapper').addClass('hidden');
2531                                $filterGroup.find('.headline-wrapper').removeClass('active');
2532                                $(this).addClass('active');
2533                            }
2534                            $itemsWrapper.removeClass('hidden');
2535                            $openIcon.addClass('active');
2536                            $closeIcon.removeClass('active');
2537
2538                            $itemsWrapper.slideDown({
2539                                duration: 'fast',
2540                                progress: function(){
2541                                    //app.scroll.resize($filterGroupItems);
2542                                },
2543                                done: function(){
2544                                    //app.scroll.show($itemsWrapper.find('.items-wrapper'));
2545                                }
2546                            });
2547                            $(this).parent().find('.show-all-filters').show();
2548                        }
2549                    }
2550                });
2551            });
2552
2553            //app.scroll.resize($filterGroupItems);
2554        };
2555
2556        var toggleFilterGroupOld = function(){
2557
2558            $filterGroup.each(function(){
2559
2560                //set objects for clicked filter group
2561                var $itemsWrapper = $(this).find('.filter-group-items-wrapper'),
2562                    $headline = $(this).find('.filter-group-headline'),
2563                    $openIcon = $headline.find('.filter-group-headline-icon.open-icon'),
2564                    $closeIcon = $headline.find('.filter-group-headline-icon.close-icon');
2565
2566                //show or hide items, and set correct icon
2567                $headline.click(function() {
2568                    if($itemsWrapper.is(':visible')){
2569                        //app.scroll.hide($itemsWrapper.find('.filter-group-items'));
2570                        $openIcon.removeClass('active');
2571                        $closeIcon.addClass('active');
2572
2573                        $itemsWrapper.slideUp({
2574                            duration: 'fast',
2575                            progress: function(){
2576                                //app.scroll.resize($filterGroupItems);
2577                            }
2578                        });
2579                    } else {
2580                        $itemsWrapper.removeClass('hidden');
2581                        $openIcon.addClass('active');
2582                        $closeIcon.removeClass('active');
2583
2584                        $itemsWrapper.slideDown({
2585                            duration: 'fast',
2586                            progress: function(){
2587                                //app.scroll.resize($filterGroupItems);
2588                            },
2589                            done: function(){
2590                                //app.scroll.show($itemsWrapper.find('.filter-group-items'));
2591                            }
2592                        });
2593                    }
2594                });
2595            });
2596
2597            //app.scroll.resize($filterGroupItems);
2598        };
2599
2600        listTypes();
2601        mobileDeviceFilters();
2602        priceRange();
2603        //app.scroll.remove($filterGroupItems);
2604        setScrolls();
2605        toggleFilterGroup();
2606        toggleSubcategoryFilters();
2607        toggleFilterGroupOld();
2608        handleShowHideFiltersDropdown();
2609    };
2610
2611    /*
2612     * CHECKBOX AND RADIO ELEMENTS
2613     * Description: Sets custom html for checkbox and radio elementsm
2614     *              Looks a lot more pretty :D
2615     * Plugins used: icheck
2616     */
2617    var handleCheckboxRadio = function($elements){
2618        $elements.icheck({
2619            checkboxClass: 'icheckbox_flat',
2620            radioClass: 'iradio_flat',
2621            increaseArea: '20%' // optional
2622        });
2623    };
2624
2625    /*
2626     * APPEARING OF ELEMENTS
2627     * Description: Fade in elements once appeared on screen
2628     *              Elements must have "appear" class
2629     *              CSS is a lot of help here --> .appear with opacity: 0
2630     *                                            .appearead with opacity: 1
2631     * Plugins used: appear
2632     */
2633    var handleAppearing = function($elements){
2634        //once appeared add "appeared" class with opacity: 1
2635        var setAppeared = function($el){
2636            $el.addClass('appeared');
2637        };
2638
2639        if($elements.length) {
2640            //loop through each element
2641            $elements.each(function(){
2642                var $el = $(this);
2643                $el.appear(function(){
2644                    //on appear event add appeared class for that element
2645                    setAppeared($el);
2646                });
2647            });
2648        }
2649
2650        $('[data-transition]:not([data-transition=""])').each(function(){
2651            var $el = $(this),
2652                delay = $el.data('transition-delay') ? $el.data('transition-delay') : 0,
2653                accuracy = $el.data('appear-accuracy') ? $el.data('appear-accuracy') : 0;
2654
2655            $el.data('transition-duration') ? $el.css('transition-duration', $el.data('transition-duration')) : '';
2656
2657            $el.appear(function(){
2658                setTimeout(function(){
2659                    $el.addClass($el.data('transition'));
2660                }, delay);
2661            }, {accY: accuracy});
2662        });
2663    };
2664
2665    /*
2666     * Market
2667     * Description: Set scrolls
2668     */
2669    var handleCatalogZoomer = function(){
2670        var catalogZoomer = $(".catalog-zoomer");
2671        if(catalogZoomer.length > 0){
2672            catalogZoomer.panzoom({
2673                contain: 'invert',
2674                minScale: 1,
2675                maxScale: 1.90,
2676                $zoomIn: $(".catalog-zoomer-buttons .zoom-in"),
2677                $zoomOut: $(".catalog-zoomer-buttons .zoom-out"),
2678                $zoomRange: $(".catalog-zoomer-buttons .zoom-range")
2679            });
2680        }
2681
2682    };
2683
2684    // Product Zoomer
2685    var productzoomer = function(){
2686        if($('.fullscreen').length){
2687            var zoomerHeight = app.height()- 80;
2688            $(".zoomer-container, .zoomer_wrapper").height(zoomerHeight);
2689            $(".fullscreen").height(zoomerHeight + 20);
2690            $(".zoomer_basic").zoomer("destroy");
2691            $(".zoomer_basic").zoomer();
2692
2693            var fullscreenWidth = $(".fullscreen").width();
2694            if ($(".fullscreen").width() !== fullscreenWidth ) {
2695                $(".zoomer_basic").zoomer("destroy");
2696                $(".zoomer_basic").zoomer();
2697                var zoomerHeight = app.height()-$('.header').outerHeight(true)- 50;
2698                $(".zoomer-container, .zoomer_wrapper").height(zoomerHeight);
2699                $(".fullscreen").height(zoomerHeight + 20);
2700
2701                $(window).trigger('resolutionchange');
2702            }
2703            $(window).bind('resolutionchange');
2704        }
2705    };
2706
2707    /*
2708     * LANGUAGE SELECTOR
2709     * Description: Show or hide avaliable languages on language selector hover
2710     */
2711    var handleLangToggle = function(){
2712        var $selector = $('.language-selector'),
2713            $options = $selector.find('.dropdown-options');
2714
2715        if(!$selector.length) return;
2716
2717        //show or hide options using a hidden class
2718        $selector.hover(function(){
2719            $options.removeClass('hidden');
2720        }, function(){
2721            $options.addClass('hidden');
2722        });
2723    };
2724
2725    var handleCurrencyToggle = function(){
2726        var $selector = $('.currency-selector'),
2727            $options = $selector.find('.dropdown-options');
2728
2729        if(!$selector.length) return;
2730
2731        //show or hide options using a hidden class
2732        $selector.hover(function(){
2733            $options.removeClass('hidden');
2734        }, function(){
2735            $options.addClass('hidden');
2736        });
2737
2738        //stop executing that link!
2739        $selector.find('a').click(function(e){
2740            e.preventDefault();
2741        });
2742    };
2743
2744    var handleHeaderCart = function(){
2745        var $cart = $('.header-cart-flat,.header-cart'),
2746            $cartPreview = $('.header-cart-preview'),
2747            $cartToggle = $('.header-cart-toggle'),
2748            $fixedHeaderCart = $('.fixed-header-cart'),
2749            $cartItems = $('.header-cart-items');
2750
2751        if(!$cart.length || !$cartToggle.length){
2752            return;
2753        }
2754
2755        var hover = function(){
2756            $cartToggle.css({top: $cartPreview.outerHeight(true)});
2757
2758            if(!$cart.children('.mini-cart').hasClass('mini-cart-side')){
2759                $cart.hover(function(){
2760                    $cartToggle.removeClass('invisible');
2761                    setTimeout(function(){
2762                        $cartToggle.css({opacity: 1});
2763                    }, 1);
2764                }, function(){
2765                    $cartToggle.addClass('invisible');
2766                    $cartToggle.css({opacity: 0});
2767                });
2768
2769                $fixedHeaderCart.hover(function(){
2770                    $(this).prev().addClass("fhc-hover");
2771                }, function(){
2772                    $(this).prev().removeClass("fhc-hover");
2773                });
2774            }
2775
2776        };
2777
2778        var removeItem = function(){
2779            $cartItems.find('.remove-item').click(function(e){
2780                e.preventDefault();
2781                $(this).parents('li').remove();
2782            });
2783        };
2784
2785        hover();
2786        removeItem();
2787    };
2788
2789    var handleGalleryImagesSlider = function(){
2790        var $slider = $('.gallery-images.slider'),
2791            dataItems = $slider.data('items');
2792
2793        $slider.handleSlider({
2794            margin: 5,
2795            navText: ['<i class="icon-angle-fat-left slider-prev ease-slow"></i>', '<i class="icon-angle-fat-right slider-next ease-slow"></i>'],
2796            navContainer: false,
2797            items: dataItems ? dataItems : 3
2798        });
2799    };
2800
2801    /* proveriti - ovaj script na kraju update-a teme treba obrisati posto ima staru html strukturu slider-a */
2802    var handleProductsSlider = function(){
2803        if(!$('.product-slider-wrapper .slider').hasClass("slick-initialized")) {
2804
2805            $('.product-slider-wrapper').each(function(){
2806
2807                var $slider = $(this).find('.slider');
2808                var vertical = $slider.data('vertical');
2809
2810                vertical = (vertical > '')? true:false;
2811
2812                $slider.handleSlider({
2813                    dots: true,
2814                    vertical: vertical,
2815                    navText: ['<i class="arrow fullwidth-slider-prev fa fa-angle-left icon-lg ease-slow"></i>', '<i class="arrow fullwidth-slider-next fa fa-angle-right icon-lg ease-slow"></i>'],
2816                    prevArrow: '<div class="slider-arrow slider-prev"><i class="fa fa-angle-left" aria-hidden="true"></i></div>',
2817                    nextArrow: '<div class="slider-arrow slider-next"><i class="fa fa-angle-right" aria-hidden="true"></i></div>'
2818                });
2819
2820
2821                $('a[data-toggle="tab"]').on('shown.bs.tab', function(){
2822                    $slider.reinitSlider();
2823                });
2824            });
2825        }
2826    };
2827
2828    var handleRelatedProductsSlider = function(){
2829
2830        var $slider = $('.related-products-slider');
2831
2832        $slider.handleSlider({
2833            appendArrows: $('.product-related-wrapper .slider-arrows'),
2834            dots: false,
2835            prevArrow: '<div class="slider-arrow slider-prev"><i class="fa fa-angle-left" aria-hidden="true"></i></div>',
2836            nextArrow: '<div class="slider-arrow slider-next"><i class="fa fa-angle-right" aria-hidden="true"></i></div>'
2837
2838        });
2839
2840    };
2841
2842    var handlePromoSliderBig = function(){
2843        $('.promo-slider-big').each(function(){
2844            var $slider = $(this),
2845                dataItems = $slider.data('items');
2846
2847            $slider.handleSlider({
2848                items: dataItems ? dataItems : 5,
2849                dots: true
2850            });
2851
2852            $('.promo-slider-big').find('img').batchImageLoad({
2853                loadingCompleteCallback: function(){
2854                    $(".promo-bg-big").height($(".promo-slider-big").height());
2855
2856                    $(".promo-bg-big").niceScroll({
2857                        cursorcolor: $(this).data('scroll-color') ? $(this).data('scroll-color') : "#ff8f02"
2858                    });
2859
2860
2861                }
2862            });
2863        });
2864    };
2865
2866    var handlePostsSlider = function(){
2867        $('.posts-slider').each(function(){
2868            var $slider = $(this);
2869
2870            $slider.HandleSlider({
2871                dots: false
2872            });
2873        });
2874    };
2875
2876    var handleSliderOnLandingPage = function(){
2877        var slider = $('.landing-slider').handleSlider({
2878            items: 1,
2879            lazyLoad: true,
2880            animateIn: 'fadeIn',
2881            animateOut: 'fadeOut',
2882            autoplay: true,
2883            navText: ['<i class="arrow landing-slider-prev fa fa-angle-left icon-lg ease-slow"></i>', '<i class="arrow landing-slider-next fa fa-angle-right icon-lg ease-slow"></i>']
2884        });
2885
2886    };
2887
2888    var handleAtributeSlider = function(){
2889
2890        var centerPadding = ($(".fullwidth-slider-wrapper").width() - $(".container").width()) / 2 + "px";
2891
2892        $('.atributes-slider').handleSlider({
2893            dots: true,
2894            centerMode: true,
2895            autoplay: true,
2896            centerPadding: centerPadding
2897        });
2898    };
2899
2900    var handleMainSliderPlaneta = function(){
2901        var $slider = $('.main-slider-full');
2902        var padding = ($slider.width() - 1200)/2 +'px';
2903        var sliderwidth =$slider.width()+'px';
2904        $slider.handleSlider({
2905            dots: true,
2906            slidesToShow: 1,
2907            centerMode: true,
2908            centerPadding: padding,
2909            adaptiveHeight: true
2910
2911        });
2912        $('.main-slider-wrapper.slider-wrapper-full  .slider-navigation-absolute').css('left', padding);
2913        $('.main-slider-wrapper.slider-wrapper-full  .slider-navigation-absolute').css('width','sliderwidth');
2914        $slider.on('beforeChange', function(event, slick, currentSlide, nextSlide){
2915            var slika = currentSlide;
2916            //$('.main-slider-wrapper.slider-wrapper-full .slider-next').css("background","red");
2917        });
2918    };
2919
2920    var handleHandlinesSlider = function(){
2921        var $slider = $('.handlines-sldier .slider-init');
2922        var $options = {
2923            autoplay: true,
2924            speed: 1000
2925        };
2926        $slider.nbHandleSlider($options);
2927        window.topslideroptions = $options;
2928    };
2929
2930    var handleGenericSlider = function(){
2931        var $slider = $('.slider-generic');
2932
2933        $slider.each(function(){
2934
2935            var $this = $(this);
2936            var dataArrows          = $this.data('arrows');
2937            var dataName            = $this.data('uname');
2938            var dataDots            = $this.data('dots');
2939            var dataItems           = $this.data('items');
2940            var dataVertical        = $this.data('vertical');
2941            var dataSync            = $this.data('sync');
2942            var dataAuto            = $this.data('autoplay');
2943            var dataNavWidth        = $this.data('navwidth');
2944            var dataAutoplaySpeed   = $this.data('autoplayspeed');
2945            var dataSpeed           = $this.data('speed');
2946            var dataFade            = $this.data('fade');
2947            var dataDrag            = $this.data('draggable');
2948
2949
2950            dataArrows      = dataArrows == 1 ? true : false;
2951            dataDots        = dataDots == 1 ? true : false;
2952            dataAuto        = dataAuto == 1 ? true : false;
2953            dataVertical    = dataVertical == 1 ? true : false;
2954            dataSync        = dataSync >'' ? dataSync : false;
2955            dataAutoplaySpeed        = dataAutoplaySpeed >'' ? dataAutoplaySpeed : 1000;
2956            dataSpeed        = dataSpeed >'' ? dataSpeed : 500;
2957            var Focus = dataSync >'' ? true : false;
2958            dataFade = dataFade == 1 ? true : false;
2959
2960            $this.handleSlider({
2961                arrows: dataArrows,
2962                dots: dataDots,
2963                items: dataItems,
2964                autoplay: dataAuto,
2965                vertical: dataVertical,
2966                asNavFor: dataSync,
2967                focusOnSelect: Focus,
2968                speed: dataSpeed,
2969                autoplaySpeed: dataAutoplaySpeed,
2970                fade: dataFade,
2971                draggable: dataDrag,
2972                cssEase: 'linear'
2973
2974            });
2975            if(dataNavWidth > '' && dataNavWidth == 'image') {
2976
2977                var navwidth    = $('.slider-generic .slick-current.slick-active img').width();
2978                //var padding     = ($slider.width() - navwidth)/2 +'px';
2979                navwidth        = navwidth+'px';
2980
2981                $(dataName+'-slider-wrapper .slider-arrows.slider-navigation-absolute').css({"width":"1400px"});
2982                // $(dataName+'-slider-wrapper .slider-navigation-absolute').css('width', 'navwidth');
2983
2984            }
2985        });
2986    };
2987
2988    var handleSliderWithText = function(){
2989        var $slider = $('.caption-slider');
2990        $slider.handleSlider({
2991            dots: false,
2992            slidesToScroll: 1,
2993            lazyLoad: true,
2994            animateIn: 'fadeIn',
2995            animateOut: 'fadeOut',
2996            autoplay: true,
2997            vertical: true,
2998            speed: 300
2999        });
3000    };
3001
3002    var handleSliderWithPadding = function(){
3003        var $slider = $('.center-slider');
3004        var padding = ($slider.width() - 1200)/2 +'px';
3005        $('.sldier-with-padding-wrapper .slider-navigation-absolute').css('width','1200px');
3006        //$('.main-slider-wrapper .slider-navigation-absolute').css('left',padding);
3007        $slider.handleSlider({
3008            dots: false,
3009            slidesToShow: 1,
3010            centerMode: true,
3011            centerPadding: padding,
3012            adaptiveHeight: true,
3013            prevArrow: '<div class="slider-arrow slider-prev"><i class="icon-caret-down icon-rotate-90"></i></div>',
3014            nextArrow: '<div class="slider-arrow slider-next"><i class="icon-caret-down icon-rotate-270"></i></div>'
3015
3016        });
3017
3018        $slider.on('beforeChange', function(event, slick, currentSlide, nextSlide){
3019            var slika = currentSlide;
3020        });
3021
3022    };
3023
3024    var handleTabsSlider = function(){
3025        if($(window).width() < 768) {
3026            var $slider = $('.contact-page .tabs-slider, .page-cooperation .tabs-slider,.page-career .tabs-slider, .product-specification-tabs .tabs-slider, .product-tab .tabs-slider');
3027            $slider.slick({
3028                dots: false,
3029                infinite: true,
3030                speed: 300,
3031                slidesToShow: 1,
3032                centerMode: true,
3033                arrows: false,
3034                adaptiveHeight: true,
3035                touchMove:true
3036            });
3037            $slider.on('beforeChange', function(event, slick, current_slide_index, next_slide_index){
3038
3039                $('.slick-slide').removeClass('active');
3040                $('.slick-slide[data-index=' + next_slide_index + ']').addClass('active');
3041            });
3042        }
3043
3044    };
3045
3046    var handleCatalog = function(){
3047
3048        var slider              = $('.catalog-slider'),
3049            sliderAlt           = $('.catalog-slider-bookalt'),
3050            sliderHTML          = $('.catalog-slider-html'),
3051            slideWidth          = $('.book-view .catalog-slider img').width(),
3052            bookPagination      = $(".book-pagination"),
3053            bookPaginationAlt   = $('.bookalt-pagination'),
3054            bookPaginationHTML  = $('.catalog-html-pagination'),
3055            catalogReaderIcons  = $('.catalog-reader-footer i'),
3056            catalogContent      = $('.catalog-content'),
3057            zoomerButtons       = $('.catalog-zoomer-buttons'),
3058            catalogPagination   = $('.catalog-pagination'),
3059            catalogZoomerMobile = $(".catalog-zoomer-mobile"),
3060            catalogZoomer       = $(".catalog-zoomer");
3061
3062
3063        let activeSlide = 0;
3064        let pageUrl = window.location.href;
3065        let slides = slider.find('.slide');
3066        slides.each(function() {
3067            let dataUrl = $(this).data("itemurl");
3068            if(pageUrl == dataUrl) {
3069                return false;
3070            }
3071            activeSlide++;
3072        })
3073
3074        if($(window).width() > 767){
3075            zoomerButtons.hide();
3076            catalogContent.width(slideWidth);
3077            catalogPagination.width(slideWidth);
3078            slider.slick({
3079                appendArrows: bookPagination,
3080                initialSlide: activeSlide,
3081                prevArrow: '<div class="slider-arrow slider-prev"><i class="fa fa-angle-left" aria-hidden="true"></i></div>',
3082                nextArrow: '<div class="slider-arrow slider-next"><i class="fa fa-angle-right" aria-hidden="true"></i></div>'
3083            });
3084            if(catalogZoomerMobile.length > 0){
3085                catalogZoomerMobile.panzoom({
3086                    contain: 'invert',
3087                    minScale: 1,
3088                    maxScale: 1.90,
3089                    $zoomIn: $(".catalog-zoomer-buttons .zoom-in"),
3090                    $zoomOut: $(".catalog-zoomer-buttons .zoom-out"),
3091                    $zoomRange: $(".catalog-zoomer-buttons .zoom-range")
3092                });
3093            }
3094            $('.footer-wrapper').css("padding-bottom", 40);
3095        }
3096
3097        else{
3098            slider.slick({
3099                appendArrows: bookPagination,
3100                prevArrow: '<div class="slider-arrow slider-prev"><i class="fa fa-angle-left" aria-hidden="true"></i></div>',
3101                nextArrow: '<div class="slider-arrow slider-next"><i class="fa fa-angle-right" aria-hidden="true"></i></div>',
3102                initialSlide: activeSlide,
3103                swipe: false,
3104                touchMove: false,
3105                infinite: false
3106            });
3107            if(catalogZoomerMobile.length > 0){
3108                catalogZoomerMobile.panzoom({
3109                    contain: 'invert',
3110                    minScale: 1,
3111                    maxScale: 1.90,
3112                    $zoomIn: $(".catalog-zoomer-buttons .zoom-in"),
3113                    $zoomOut: $(".catalog-zoomer-buttons .zoom-out"),
3114                    $zoomRange: $(".catalog-zoomer-buttons .zoom-range")
3115                });
3116            }
3117            zoomerButtons.show();
3118
3119            slider.on('beforeChange', function(){
3120                catalogZoomerMobile.panzoom("reset");
3121            });
3122        }
3123
3124        // number of initial slide
3125        $("#catalogActivePage").html($(".catalog-reader-outer-wrapper").attr("data-slide"));
3126
3127        $('.catalog-reader-footer i.icon-book').click(function(){
3128            catalogReaderIcons.removeClass('active');
3129            $(this).addClass('active');
3130            catalogContent.removeClass("grid-view bookalt-view");
3131            catalogContent.addClass("book-view");
3132            catalogContent.width(slideWidth);
3133            catalogPagination.width(slideWidth);
3134            slider.slick('setPosition');
3135            if($(window).width() > 767){
3136                zoomerButtons.hide();
3137                catalogPagination.width($('.book-view .catalog-slider img').width());
3138            }
3139            else{
3140                zoomerButtons.show();
3141            }
3142
3143
3144            $(".catalog-branding .banner-branding-left").css("margin-left","-1460px");
3145            $(".catalog-branding .banner-branding-right").css("margin-right","-1460px");
3146
3147        });
3148
3149        $('.catalog-reader-footer i.icon-2x').click(function(){
3150            catalogReaderIcons.removeClass('active');
3151            $(this).addClass('active');
3152            catalogContent.removeClass("book-view grid-view");
3153            catalogContent.addClass("bookalt-view");
3154            $('.catalog-slider-bookalt, .catalog-content.bookalt-view').width(slideWidth*1.4);
3155            catalogPagination.width($('.catalog-slider-bookalt').width());
3156            catalogPagination.width(slideWidth*1.4);
3157            $('.catalog-reader .zoomer').height();
3158            $('.fotoer-wrapper').hide();
3159
3160            if(!sliderAlt.hasClass("slick-initialized")){
3161                sliderAlt.slick({
3162                    slidesToShow: 2,
3163                    slidesToScroll: 2,
3164                    appendArrows: bookPaginationAlt,
3165                    prevArrow: '<div class="slider-arrow slider-prev"><i class="fa fa-angle-left" aria-hidden="true"></i></div>',
3166                    nextArrow: '<div class="slider-arrow slider-next"><i class="fa fa-angle-right" aria-hidden="true"></i></div>',
3167                    swipe: false,
3168                    touchMove: false
3169                });
3170            }
3171
3172            sliderAlt.on('beforeChange', function(){
3173                catalogZoomer.panzoom("reset");
3174            });
3175
3176            //$('.catalog-zoomer-buttons').show();
3177
3178            handleCatalogZoomer();
3179
3180            $(".catalog-branding .banner-branding-left").css("margin-left","-1560px !important");
3181            $(".catalog-branding .banner-branding-right").css("margin-right","-1560px !important");
3182
3183            setTimeout(function(){
3184                setPositionOnAreaElement('.catalog-slider-bookalt .slick-slide ');
3185            },500)
3186
3187            setTimeout(function(){
3188                handleProductDetailsQuickViewOnModal('.showProductDetailsQuickViewOnModal');
3189            },2000)
3190
3191        });
3192
3193        $('.catalog-reader-footer i.icon-gridalt').click(function(){
3194            catalogReaderIcons.removeClass('active');
3195            $(this).addClass('active');
3196            catalogContent.removeClass("bookalt-view book-view");
3197            catalogContent.addClass("grid-view");
3198            $('.catalog-reader').width();
3199            zoomerButtons.hide();
3200            $('body').css("overflow","auto");
3201        });
3202
3203        function NbCatalog() {}
3204
3205        NbCatalog.prototype.jumpToSlideBook = function(slide){
3206            $('.catalog-slider').slick('slickGoTo', slide);
3207        };
3208
3209        NbCatalog.prototype.jumpToSlideBookalt = function(slide){
3210            $('.catalog-slider-bookalt').slick('slickGoTo', slide);
3211        };
3212
3213        NbCatalog.prototype.initReloadCatalogReaderUrl = function(position){
3214            var activeSlide = -1;
3215            $('.catalog-slider').on('afterChange', (event, slick, currentSlide) => {
3216                var elementCatalogSlider = $(".catalog-slider .slick-slide.slick-current");
3217                var itemId = elementCatalogSlider.data("itemid");
3218                var itemUrl = elementCatalogSlider.data("itemurl");
3219                var itemPage = elementCatalogSlider.data("itemcounter");
3220
3221                if (typeof itemId !== 'undefined' && activeSlide !== itemId && activeSlide !== 0) {
3222                    this.reloadCatalogReaderUrl(itemId, itemUrl);
3223                    this.setCatalogReaderActivePage(itemPage);
3224                    activeSlide = itemId;
3225                } else if (typeof itemId !== 'undefined' && activeSlide !== itemId && activeSlide === 0) {
3226                    activeSlide = itemId;
3227                }
3228            });
3229
3230            var activeSlideAlt = -1;
3231            $('.catalog-slider-bookalt').on('afterChange', (event, slick, currentSlide) => {
3232                var elementCatalogSliderBookalt = $(".catalog-slider-bookalt .slick-slide.slick-current");
3233                var itemId = elementCatalogSliderBookalt.data("itemid");
3234                var itemUrl = elementCatalogSliderBookalt.data("itemurl");
3235                var itemPage = elementCatalogSliderBookalt.data("itemcounter");
3236
3237                if (typeof itemId !== 'undefined' && activeSlideAlt !== itemId && activeSlideAlt !== 0) {
3238                    this.reloadCatalogReaderUrl(itemId, itemUrl);
3239                    this.setCatalogReaderActivePage(itemPage);
3240                    activeSlideAlt = itemId;
3241                } else if (typeof itemId !== 'undefined' && activeSlideAlt !== itemId && activeSlideAlt === 0) {
3242                    activeSlideAlt = itemId;
3243                }
3244            });
3245        };
3246
3247        NbCatalog.prototype.reloadCatalogReaderUrl = function(itemId, itemUrl){
3248            if (typeof itemUrl !== 'undefined') {
3249                this.rewriteURL(itemUrl);
3250                if (typeof gtag !== 'undefined') {
3251                    gtag('event', 'page_view');
3252                }
3253            }
3254        };
3255
3256        NbCatalog.prototype.rewriteURL = function(newUrl) {
3257            rewriteURL('', newUrl);
3258            // reloadDFPBanners();
3259        };
3260
3261        NbCatalog.prototype.setCatalogReaderActivePage = function(page){
3262            $('#catalogActivePage').html(page);
3263        };
3264
3265        NbCatalog.prototype.initCatalog = function() {
3266            $('.orderCatalog').change(() => {
3267                var elementId = $(this).attr('filter-name');
3268                $('#' + elementId).val($(this).val());
3269                this.loadForPage(0);
3270            });
3271        };
3272
3273        NbCatalog.prototype.initCatalogListing = function() {
3274            $('.orderCatalog').change(() => {
3275                var elementId = $(this).attr('filter-name');
3276                $('#' + elementId).val($(this).val());
3277                this.loadForPage(0);
3278            });
3279        };
3280
3281        NbCatalog.prototype.loadForPage = function(page) {
3282            $('#f_page').val(page);
3283            this.load();
3284        };
3285
3286        NbCatalog.prototype.load = function() {
3287            var formData = $("#filter_form").serialize();
3288            var url = $('#f_page_url').val();
3289            var $productListing = $('.listing-products'),
3290                $loaderWrapper = $productListing.find('.loader-wrapper');
3291            $loaderWrapper.removeClass('hidden');
3292
3293            $.ajax({
3294                type: "POST",
3295                url: url,
3296                data: formData + '&task=load&ajax=yes',
3297                contentType: "application/x-www-form-urlencoded;charset=UTF-8",
3298                success: (ret) => {
3299                    $loaderWrapper.addClass('hidden');
3300                    this.rewriteURL(url);
3301                    $productListing.html(ret);
3302                    $productListing.find('.product-item').addClass('appeared');
3303                    new app.handleProductListing($productListing);
3304                    new app.handleAppearing($productListing.find('.product-item'));
3305                    new app.handlePopover($productListing.find('.product-item [rel=popover]'));
3306                    new app.handleFavoriteProduct($productListing.find('.favorite'));
3307                    new app.handleCheckboxRadio($productListing.find('.product-listing-filters input[type="checkbox"], .product-listing-filters input[type="radio"]'));
3308                    app.ajaxFilter = null;
3309                }
3310            });
3311        };
3312
3313        NbCatalog.prototype.deleteTagSearch = function() {
3314            $('#search').val('');
3315            this.loadForPage(0);
3316        };
3317
3318        NbCatalog.prototype.addProduct = function(id, url) {
3319
3320        };
3321
3322        var nbCatalog = new NbCatalog();
3323        nbCatalog.initCatalog();
3324        nbCatalog.initReloadCatalogReaderUrl(0);
3325
3326
3327        // image map fix for iOS devices
3328        // $(".catalog-reader map").on("touchstart", function (evt){
3329        //     evt.preventDefault();
3330        //     if (evt.target.tagName.toLowerCase() === "area"){
3331        //         location.href = evt.target.href;
3332        //     }
3333        // });
3334
3335        bookPaginationHTML.width($('.catalog-slider-html').width()-20);
3336
3337        sliderHTML.slick({
3338            slidesToShow: 2,
3339            slidesToScroll: 1,
3340            appendArrows: $('.bookalt-pagination'),
3341            prevArrow: '<div class="slider-arrow slider-prev"><i class="fa fa-angle-left" aria-hidden="true"></i></div>',
3342            nextArrow: '<div class="slider-arrow slider-next"><i class="fa fa-angle-right" aria-hidden="true"></i></div>',
3343            responsive: [{
3344                breakpoint: 1025,
3345                settings: {
3346                    slidesToShow: 1,
3347                    slidesToScroll: 1,
3348                    adaptiveHeight: true
3349                }
3350            }]
3351
3352        });
3353
3354        $(".catalog-reader-html .icon-book").click(function(){
3355            sliderHTML.slick('slickSetOption','slidesToShow','1');
3356            sliderHTML.slick('slickSetOption','adaptiveHeight','true');
3357            $('.catalog-content-html').addClass("half-width");
3358            sliderHTML.slick('setPosition');
3359            bookPaginationHTML.width($('.catalog-slider-html').width()-20);
3360        });
3361
3362        $(".catalog-reader-html .icon-grid").click(function(){
3363            sliderHTML.slick('slickSetOption','slidesToShow','2');
3364            sliderHTML.slick('slickSetOption','adaptiveHeight','false');
3365            $('.catalog-content-html').removeClass("half-width");
3366            sliderHTML.slick('setPosition');
3367            bookPaginationHTML.width($('.catalog-slider-html').width()-20);
3368        });
3369
3370        $(".catalog-reader-html .catalog-pagination .slider-prev").click(function(){
3371            $("#catalogActivePage").html(sliderHTML.slick('slickCurrentSlide')+1);
3372        });
3373
3374        $(".catalog-reader-html .catalog-pagination .slider-next").click(function(){
3375            $("#catalogActivePage").html(sliderHTML.slick('slickCurrentSlide')+1);
3376        });
3377
3378    };
3379
3380    function getTemplateContent(idTemplate) {
3381        var template = document.querySelector(idTemplate);
3382        var clon = template.content.cloneNode(true);
3383
3384        return clon;
3385    }
3386
3387    function setPositionOnAreaElement(element) {
3388        if(!$('.area').length) {
3389            return false;
3390        }
3391
3392        let elementDefault = '.catalog-slider .slick-slide ';
3393        if(element) {
3394            elementDefault = element;
3395        }
3396
3397        setTimeout(function(){
3398            $(elementDefault + '.area').each(function(){
3399
3400                let parentWrapper = $(this).closest('.slide').find('img');
3401
3402                let imgWidth = parentWrapper.data("originalWidth");
3403                let imgHeight = parentWrapper.data("originalHeight");
3404
3405                let mapCords= $(this).attr("coords").split(',');
3406
3407                let xCords = 0;
3408                let yCords = 0;
3409
3410                for(let i=0; i < mapCords.length; i++) {
3411                    if(i === 0 || i%2 === 0) {
3412                        xCords+= parseInt(mapCords[i]);
3413                    } else {
3414                        yCords+= parseInt(mapCords[i]);
3415                    }
3416                }
3417
3418                let positionX = Math.ceil(xCords / (mapCords.length/2));
3419                let positionXpercentage = Math.round(positionX * 100 / imgWidth);
3420
3421                let positionY = Math.ceil(yCords / (mapCords.length/2));
3422                let positionYpercentage = Math.round(positionY * 100 / imgHeight);
3423
3424
3425                $(this).css("position", "absolute");
3426                $(this).css("top", " "+positionYpercentage+"% ");
3427                $(this).css("left", " "+positionXpercentage+"% ");
3428
3429                var pinPopupStructure = getTemplateContent('#catalog-popup-content');
3430
3431                if($(this).find('.pin-icon').length === 0) {
3432                    $(this).append(pinPopupStructure);
3433
3434                    let pinIcon =  $(this).find('.pin-icon');
3435
3436                    let type = $(this).data('type');
3437
3438                    if($(window).width() < 767 && type !== 'quick-view' && type !== 'custom-link') { /*Na manjim rezolucijama za 
3438sve otvori modal*/
3439                        pinIcon.attr("data-toggle", "modal");
3440                        pinIcon.attr("data-target", "#modal_catalog");
3441                    } else if(type === 'simple-text' || type === 'default') {
3442                        pinIcon.addClass('custom-popup');
3443                        $(this).addClass('custom-popup');
3444                    } else if(type === 'custom-link') {
3445                        pinIcon.addClass('custom-link');
3446                    } else if(type === 'quick-view') {
3447                        $(this).addClass('showProductDetailsQuickViewOnModal');
3448                    } else {
3449                        pinIcon.attr("data-toggle", "modal");
3450                        pinIcon.attr("data-target", "#modal_catalog");
3451                    }
3452                }
3453
3454            })
3455            showPopupOnClick(elementDefault);
3456        },500)
3457
3458    }
3459
3460    function showPopupOnClick(element) {
3461        let areas = $(element + '.area');
3462        let allPinIcons = areas.find('.pin-icon');
3463        let allPopupContents = areas.find('.popup-content');
3464
3465        if(areas.length === 0) {
3466            return false;
3467        }
3468
3469        areas.each(function () {
3470            $(this).click(function () {
3471
3472                let thisPinIcon = $(this).find('.pin-icon');
3473                let thisPopupContent = $(this).find('.popup-content');
3474
3475                if(thisPinIcon.hasClass('active')) {
3476                    if(thisPinIcon.hasClass('custom-popup')) {
3477                        thisPopupContent.addClass('hidden');
3478                    }
3479                    thisPinIcon.removeClass('active');
3480                } else {
3481                    allPinIcons.removeClass('active');
3482                    thisPinIcon.addClass('active');
3483                    if(thisPinIcon.hasClass('custom-popup')) {
3484                        allPopupContents.addClass('hidden');
3485                        thisPopupContent.removeClass('hidden');
3486                    }
3487                }
3488            })
3489        })
3490
3491        closePopupOnCloseIcon();
3492
3493        $('.custom-popup .popup-content, .area:has(.custom-popup)').click(function(event){
3494            event.stopPropagation();
3495        });
3496    }
3497
3498    function calculatePosition(element) {
3499
3500        let areaTop = element.css("top");
3501        areaTop = Math.ceil(areaTop.substring(0, areaTop.length -2));
3502        let areaLeft = element.css("left");
3503        areaLeft = Math.ceil(areaLeft.substring(0, areaLeft.length -2));
3504        let areaRight = element.css("right");
3505        areaRight = Math.ceil(areaRight.substring(0, areaRight.length -2));
3506        let areaBottom = element.css("bottom");
3507        areaBottom = Math.ceil(areaBottom.substring(0, areaBottom.length -2));
3508
3509        let popupContent = element.find('.popup-content');
3510
3511        let popupContentHeight = popupContent.innerHeight();
3512        let popupContentWidth = popupContent.innerWidth();
3513
3514        if(popupContentHeight > (areaTop - 20) && popupContentHeight > (areaBottom - 20)) {
3515            popupContent.css('max-height', '230px');
3516            popupContent.css('overflow-x', 'hidden');
3517            popupContent.css('overflow-y', 'auto');
3518            popupContent.addClass('top');
3519        } else if(popupContentHeight > areaTop || areaTop < 350) {
3520            popupContent.addClass('bottom');
3521        } else {
3522            popupContent.addClass('top');
3523        }
3524
3525        if((popupContentWidth/2) > areaLeft) {
3526            popupContent.addClass('right');
3527            let value = "+"+popupContentWidth/2+"px";
3528            popupContent.css('left', value);
3529        } else if((popupContentWidth/2) > areaRight) {
3530
3531            popupContent.addClass('left');
3532            let value = "-"+popupContentWidth/2+"px";
3533            popupContent.css('right', value);
3534        }
3535
3536    }
3537
3538    function closePopupOnCloseIcon() {
3539        let areas = $('.catalog-reader-outer-wrapper .area');
3540        let allPopupContents = areas.find('.popup-content');
3541        let allPinIcons = areas.find('.pin-icon');
3542        let allPinIconsCustom = areas.find('.pin-icon.custom-popup');
3543
3544        $('body, .popup-content .close-icon').click(function(e) {
3545            allPopupContents.addClass('hidden');
3546            allPinIconsCustom.removeClass('active');
3547        });
3548
3549        $("#modal_catalog").on("hidden.bs.modal", function () {
3550            allPinIcons.removeClass('active');
3551        });
3552
3553    }
3554
3555    function infoForAjax(block, sizeModal, parameter) {
3556
3557        let info = {};
3558        let modalCatalog = $('#modal_catalog');
3559
3560        info.block = block;
3561        info.options = {};
3562
3563        if(block === "pinterest_gallery") {
3564            info.options.sliderId = parameter;
3565        } else if(block === "product_item") {
3566            info.options.productId = parameter;
3567        } else if (block === "product_slider") {
3568            info.options.productlistId = parameter;
3569        }
3570
3571        /*modal sizes*/
3572        if(sizeModal === "sm-modal") {
3573            modalCatalog.removeClass('lg-modal');
3574            modalCatalog.removeClass('xl-modal');
3575        } else if(sizeModal === "lg-modal") {
3576            modalCatalog.addClass('lg-modal');
3577            modalCatalog.removeClass('xl-modal');
3578        } else {
3579            modalCatalog.removeClass('lg-modal');
3580            modalCatalog.addClass('xl-modal');
3581        }
3582
3583        return info;
3584    }
3585
3586    function setPopupContent($this, modalCatalog, loaderWrapper, title, shortDescription) {
3587
3588        let popupContentAjax = $this.find('.popup-content-ajax');
3589        let catalogModalAjaxWrapper = modalCatalog.find('.catalog-ajax-wrapper');
3590
3591        if($(window).width() > 767) {
3592            if(popupContentAjax.children().length === 0) {
3593                popupContentAjax.append("<div class='title'>"+ title +"</div>");
3594                popupContentAjax.append("<div class='description'>
3594"+ shortDescription +"</div>");
3595                setTimeout(function(){
3596                    calculatePosition($this);
3597                },300)
3598            }
3599            $this.find('.loader-wrapper').addClass('hidden');
3600        } else {
3601            catalogModalAjaxWrapper.append("<div class='title'>"+ title +"</div>");
3602            catalogModalAjaxWrapper.append("<div class='description'>"+ shortDescription +"</div>");
3603        }
3604        loaderWrapper.addClass('hidden');
3605    }
3606
3607    function addAjaxContentInPopup($this, ret) {
3608        if($this.find('.pin-icon').hasClass('custom-popup') && $(window).width() > 767) {
3609            $this.find('.pin-icon .popup-content-ajax').html(ret.html);
3610            $this.find('.loader-wrapper').addClass('hidden');
3611            $this.addClass('loaded-block');
3612            setTimeout(function(){
3613                calculatePosition($this);
3614            },200)
3615        }
3616    }
3617
3618    function loadBlock() {
3619
3620        let areas = $('.catalog-reader-outer-wrapper .area');
3621        let modalCatalog = $('#modal_catalog');
3622        let modalAjaxWrapper = modalCatalog.find('.catalog-ajax-wrapper');
3623        let loaderWrapper = modalCatalog.find('.loader-wrapper');
3624
3625        if(areas.length == 0) {
3626            return false;
3627        }
3628
3629        areas.each(function () {
3630
3631            /*Opcije*/
3632
3633            let productlistId = $(this).data('productListId');
3634            let productId = $(this).data('productId');
3635            let shortDescription = $(this).data('shortDescription');
3636            let sliderId = $(this).data('slider');
3637            let title = $(this).data('title');
3638            let type = $(this).data('type');
3639            let galleryItemId = $(this).closest('.slide').data('itemid');
3640            let callAjax = true;
3641            let id = $(this).attr("id");
3642
3643            let info;
3644
3645            $(this).click(function(){
3646
3647                let $this = $(this);
3648
3649                loaderWrapper.removeClass('hidden');
3650
3651
3652                if($this.hasClass('custom-popup') && !$this.hasClass('loaded-block') ) {
3653                    $this.find('.loader-wrapper').removeClass('hidden');
3654                } else if($this.hasClass('custom-popup') && $this.hasClass('loaded-block')) {
3655                    $this.find('.loader-wrapper').addClass('hidden');
3656                }
3657
3658                modalAjaxWrapper.html("");
3659
3660                if(type) {
3661                    switch (type) {
3662                        case 'html-text':
3663                            info = infoForAjax("html_text", "sm-modal");
3664                            break;
3665                        case 'simple-text':
3666                            setPopupContent($this, modalCatalog, loaderWrapper, title, shortDescription);
3667                            callAjax = false;
3668                            break;
3669                        case 'image-gallery':
3670                            info = infoForAjax("pinterest_gallery", "lg-modal", sliderId);
3671                            break;
3672                        case 'default':
3673                            info = infoForAjax("product_item", "", productId);
3674                            $this.find('.popup-content').addClass('small');
3675                            break;
3676                        case 'quick-view':
3677                            modalCatalog.addClass('xl-modal');
3678                            modalCatalog.removeClass('lg-modal');
3679                            $(this).addClass('showProductDetailsQuickViewOnModal');
3680                            callAjax = false;
3681                            break;
3682                        case 'list':
3683                            info = infoForAjax("product_slider", "xl-modal", productlistId);
3684                            break;
3685                        case 'custom-link':
3686                            callAjax = false;
3687                            break;
3688                        default:
3689                            info = infoForAjax("product_item", "", productId);
3690                            $this.find('.popup-content').addClass('small');
3691                    }
3692                }
3693
3694                if(callAjax  && !$this.hasClass('loaded-block')) {
3695                    $.ajax({
3696                        type: "POST",
3697                        url: nb_active_page_url,
3698                        data: {
3699                            ajax: "yes",
3700                            task: "modalcontentcatalog",
3701                            pinId:id,
3702                            galleryItemId: galleryItemId,
3703                            block: info.block,
3704                            options: info.options,
3705                            sliderId: sliderId,
3706                            productListId: productlistId,
3707                            productId: productId,
3708                        },
3709                        dataType: 'json',
3710                        success: function(ret){
3711
3712                            if(ret.flag){
3713                                modalAjaxWrapper.html(ret.html);
3714                                if(type !== 'image-gallery') {
3715                                    loaderWrapper.addClass('hidden');
3716                                } else {
3717                                    setTimeout(function(){
3718                                        loaderWrapper.addClass('hidden');
3719                                    }, 800);
3720                                }
3721
3722                                addAjaxContentInPopup($this, ret);
3723
3724                                initModalProductSlider();
3725
3726                                nbPinterest.handleMasonry();
3727
3728                                nbshopJS.handleProductSizeSelector('.catalog-ajax-wrapper');
3729                                handleBuyProductOnListing('.catalog-ajax-wrapper ');
3730                                handleFavoriteProduct($('.catalog-ajax-wrapper .favorite'));
3731                                nbshopJS.changeProductQuantity('.catalog-ajax-wrapper ');
3732                                handleFavoriteProduct($('.popup-content-ajax .favorite'));
3733                                if($('.catalog-ajax-wrapper .product-item .showProductQueryViewOnModal').length > 0){
3734                                    new handleProductQueryViewOnModal($('.catalog-ajax-wrapper .product-item .showProductQueryViewOnModal'));
3735                                }
3736
3737                            }
3738                        }
3739                    });
3740                }
3741            });
3742        })
3743
3744    };
3745
3746    var handleStoreMap = function(){
3747        var storeMapWrapper = $('.store-map-wrapper');
3748        var storePanel = $('.storelocator-panel');
3749        storeMapWrapper.height($(window).height() - $('.header').height());
3750        storePanel.height(storeMapWrapper.height() - 50);
3751    };
3752
3753    var handleScrollSlider = function(){
3754        var sliderWrapper   = $('.scroll-slider-wrapper');
3755        var scrollSlider    = sliderWrapper.next(".scroll-slider-object");
3756        var totalWidth      = scrollSlider.find(".scroll-slider-width").width();
3757        var prevButton      = sliderWrapper.find('.slider-prev');
3758        var nextButton      = sliderWrapper.find('.slider-next');
3759        var step            = scrollSlider.outerWidth();
3760        var animationSpeed  = 500;
3761
3762        if(scrollSlider.width() > totalWidth){
3763            prevButton.hide();
3764            nextButton.hide();
3765        }
3766
3767        prevButton.click(function(){
3768            scrollSlider.animate({ scrollLeft: '-='+step }, animationSpeed);
3769        });
3770
3771        nextButton.click(function(){
3772            scrollSlider.animate({ scrollLeft: '+='+step }, animationSpeed);
3773        });
3774
3775    };
3776
3777    /*
3778     * SLIDER WITH ONE ITEM PER PAGE
3779     */
3780    var handleOneitemSlider = function(){
3781        var $slider = $('.oneitem-slider');
3782
3783        $slider.handleSlider({
3784            slidesToShow: 1,
3785            slidesToScroll: 1,
3786            dots: true,
3787            responsive: [
3788                {
3789                    breakpoint: 1024,
3790                    settings: {
3791                        slidesToShow: 1,
3792                        slidesToScroll: 1
3793                    }
3794                }
3795            ]
3796        });
3797    };
3798
3799    var handleScrollDown =  function(){
3800        if($(window).width() > 768){
3801            var buttontop = $('.scroll-down');
3802
3803            buttontop.click(function(){
3804                $('html, body').animate({
3805                    scrollTop: $(".background-slider-div").offset().top
3806                }, 1000);
3807            });
3808        }
3809    };
3810
3811    var handleMainNavMobile = function(){
3812        var caret = $('.nav-main > li > a > i');
3813        if($(window).width() < mobileBreakRes) {
3814            caret.click(function () {
3815                $(this).parent().toggleClass('show',0);
3816                $('.nav-main > li > a').fadeToggle(200, "linear" ,'hidden');
3817                $('.nav-main > li.has-bg img').fadeToggle(200, "linear" ,'hidden');
3818                $('.nav-main-useractions').fadeToggle(0, "linear" ,'hidden');
3819                $('.menu-login-wrapper').toggleClass('hide',0);
3820            });
3821        }
3822    };
3823
3824    /*
3825     * PROMO MODAL
3826     * Description: Modal that is showed 2 seconds as page gets loaded
3827     * Plugin used: Bootstrap's Modal
3828     */
3829    var handleModalPromo = function($modal){
3830        if(!$modal.length || app.width() <= 767) return;
3831
3832        var $images = $modal.find('img'),
3833            $virtualImages = $(),   //images that exists only in browser's memory, those are not printed
3834            width = 0;
3835
3836        $images.each(function(){
3837            //get source of real images and add them to memory
3838            $virtualImages = $virtualImages.add($('<img>').attr('src', $(this).attr('src')));
3839        });
3840
3841        var show = function(){
3842            //once all images have been loaded begin show modal
3843            $virtualImages.imagesLoaded(function(){
3844                if($modal.hasClass('promo-modal')){
3845                    //calculate modal's width in order to get him centered
3846                    $virtualImages.each(function(){
3847                        if($(this)[0].width > width){
3848                            width = $(this)[0].width;
3849                        }
3850                    });
3851                    //add 40px as modal-dialog has 20px padding-left and padding-right
3852                    $modal.find('.modal-dialog').width(width + 40);
3853                }
3854
3855            });
3856        };
3857
3858        setTimeout(show, $modal.data('delay'));
3859    };
3860
3861    var handleForms = function(){
3862
3863        var initiateValidationByDataAttr = function(){
3864            $('[data-validation-validate]').validate();
3865        };
3866
3867        var login = function(){
3868            $('.login_form').each(function(){
3869                var validate = $(this).validate({
3870                    formData: { ajax: 'yes', task: 'login' },
3871                    refreshPage: true,
3872                }).data('nb.validate');
3873
3874                validate.$element.bind('nb.validate.remoteSuccess', function(e){
3875                    validate.$element.find('.modal-body :not(.alert), .modal-footer').addClass('hidden');
3876                    //window.location.reload();
3877
3878                });
3879            });
3880        };
3881
3882        var sendTockenWithoutPassword = function(){
3883
3884            $('.login_form_with_token_without_pass #login_email').on("change", function(e) {
3885                var value = $(this).val();
3886                $('.login_form_send_token_without_pass #login_email').val($(this).val());
3887            })
3888
3889            $('.login_form_with_token_without_pass').each(function(){
3890
3891                var form = $('.login_form_send_token_without_pass');
3892                var submitBtn = form.find('#send_number');
3893                submitBtn.addClass('active');
3894
3895                var validate = $(this).validate({
3896                    formData: { ajax: 'yes', task: 'login_with_token_without_password' },
3897                    refreshPage: false,
3898                }).data('nb.validate');
3899
3900                $('.login_form_with_token_without_pass .validation-errors-list').addClass('hidden ');
3901
3902                validate.$element.bind('nb.validate.remoteSuccess', function(e){
3903                    if(window.NB_AJAX_RET){
3904                        if(window.NB_AJAX_RET.flag){
3905
3906                            $('.login_form_with_token_without_pass').addClass('hidden');
3907                            $('.login_form_send_token_without_pass').removeClass('hidden');
3908
3909                            $('.login_form_send_token_without_pass #login_email').val(window.NB_AJAX_RET.email);
3910
3911                            form.find('.alert').html(window.NB_AJAX_RET.info);
3912                            form.find('.alert').removeClass('hidden').removeClass('alert-danger').addClass('alert-success');
3913                            submitBtn.removeClass('active');
3914                        }else{
3915                            form.find('.alert').html(window.NB_AJAX_RET.info);
3916                            form.find('.alert').removeClass('hidden').removeClass('alert-success').addClass('alert-danger');
3917                            submitBtn.removeClass('active');
3918                        }
3919                    }
3920                });
3921
3922                validate.$element.bind('nb.validate.remoteError', function(e){
3923                    form.find('.alert').html(window.NB_AJAX_RET.info);
3924                    form.find('.alert').removeClass('hidden').removeClass('alert-success').addClass('alert-danger');
3925                    submitBtn.removeClass('active');
3926                });
3927            });
3928        };
3929
3930        var loginWithTockenWithoutPasswordAfterAjax = function(){
3931            if($(window).width() > 1200) {
3932                $('body').click(function(e){
3933                    if($('.login-dropdown').hasClass('active') && $(e.target).closest('.login-dropdown').length === 0) {
3934                        $('.login-dropdown').removeClass('active');
3935                    } else if(!$('.login-dropdown').hasClass('active') && $(e.target).closest('.user .item-login.loged-in').length === 1){
3936                        $('.user .item-login.loged-in .login-dropdown').addClass('active');
3937                    }
3938                });
3939            }
3940        };
3941
3942        var loginWithTockenWithoutPassword = function(){
3943            $('.login_form_send_token_without_pass').each(function(){
3944
3945                var validate = $(this).validate({
3946                    formData: { ajax: 'yes', task: 'check_token_for_login' },
3947                    refreshPage: true,
3948                }).data('nb.validate');
3949
3950                validate.$element.bind('nb.validate.remoteSuccess', function(e){
3951                    if(window.NB_AJAX_RET.ajaxLogin){
3952                        $(".block.user.user-with-dropdown").replaceWith(window.NB_AJAX_RET.html);
3953                        loginWithTockenWithoutPasswordAfterAjax();
3954                        $('#quiz_modal_loyalty').modal('hide');
3955                        $('.quiz-product-finder-questions .buttons .btn-wrapper.quiz-result-question .btn.quiz-submit-modal').addClass('hidden');
3956                        $('.quiz-product-finder-questions .buttons .btn-wrapper.quiz-result-question .btn.quiz-submit-btn').removeClass('hidden');
3957                        if(!$('body').hasClass('uc-quiz_listing')) {
3958                            window.location.reload();
3959                        }
3960                    } else {
3961                        window.location.reload();
3962                    }
3963                });
3964            });
3965        };
3966
3967        var loginVirtualCard = function(){
3968            $('.login_form_sb').each(function(){
3969                var validate = $(this).validate({
3970                    formData: { nbAjax: 1, task: 'loyalty_virtual_card',type:'login',refreshPage:true },
3971                    refreshPage: true,
3972                }).data('nb.validate');
3973
3974                validate.$element.bind('nb.validate.remoteSuccess', function(e){
3975                    validate.$element.find('.modal-body :not(.alert), .modal-footer').addClass('hidden');
3976                    window.location.reload();
3977                });
3978            });
3979        };
3980        var lostPassword = function(){
3981            $('.lost_password_form').each(function(){
3982                var validate = $(this).validate({
3983                    formData: { ajax: 'yes', task: 'lostpassword' }
3984                }).data('nb.validate');
3985
3986                validate.$element.bind('nb.validate.remoteSuccess', function(e){
3987                    validate.$element.find('.modal-body :not(.alert), .modal-footer').addClass('hidden');
3988                });
3989
3990                $('#lost_password_modal').on('show.bs.modal', function(){
3991                    validate.$element.find('#lost_password_email').val('').removeClass('parsley-success parsley-error');
3992                    validate.$element.find('.modal-body :not(.alert), .modal-footer').removeClass('hidden');
3993                    validate.resetAlertContainer();
3994                });
3995            });
3996        };
3997
3998        var lostPasswordSSO = function(){
3999            $('.sso_lost_password_form').each(function(){
4000                var validate = $(this).validate({
4001                    formData: { ajax: 'yes', type: 'request_password_change' }
4002                }).data('nb.validate');
4003                validate.$element.bind('nb.validate.remoteSuccess', function(e){
4004                    validate.$element.find('.form-group').addClass('hidden');
4005                    validate.$element.find('.button-wrapper').addClass('hidden');
4006                });
4007
4008            });
4009        };
4010
4011        var resetPasswordSSO = function(){
4012            $('#ssoFormResetPassword').each(function(){
4013                var validate = $(this).validate({
4014                    formData: { ajax: 'yes', type: 'confirm_password_change' }
4015                }).data('nb.validate');
4016                validate.$element.bind('nb.validate.remoteSuccess', function(e){
4017                    validate.$element.find('.form-group').addClass('hidden');
4018                    validate.$element.find('.button-wrapper').addClass('hidden');
4019                });
4020
4021            });
4022        };
4023
4024        var resetPassword = function(){
4025            var form = $('#formResetPassword');
4026            if(!form.length) return;
4027            var validate = form.validate({
4028                formData: { submit: true }
4029            }).data('nb.validate');
4030        };
4031
4032        var replacment = function(){
4033
4034            $('.only-for-return').addClass('hidden');
4035            $('.only-for-return').find('.form-control').prop("required", "false");
4036            $('.only-for-return').find('.form-control').removeAttr('required');
4037            $("select.replacement-type").change(function(){
4038                var selectedCountry = $(this).children("option:selected").val();
4039                //alert("You have selected the country - " + selectedCountry);
4040
4041                if(selectedCountry == 1 || selectedCountry == 2){
4042
4043                    $('.only-for-return').removeClass('hidden');
4044                    $('.only-for-return').find('.form-control').prop("required", "true");
4045                    $('.only-for-return').find('.form-control').addAttr('required');
4046
4047                }else{
4048                    $('.only-for-return').addClass('hidden');
4049                    $('.only-for-return').find('.form-control').prop("required", "false");
4050                    $('.only-for-return').find('.form-control').removeAttr('required');
4051                }
4052            });
4053        };
4054
4055        var registration = function(){
4056
4057            var typePerson = function($idElement, prefixName, validate){
4058
4059                var validateTypePerson = function(thisElement, prefixName, validate){
4060
4061                    var $naturalPerson = $('.registration_form .'+prefixName+'naturalPerson');
4062                    var $legalEntity = $('.registration_form .'+prefixName+'legalEntity');
4063
4064                    if(thisElement.val() == 2){
4065                        var redirectLegalRegister = thisElement.data('redirect-login-user-url');
4066                        if(redirectLegalRegister !== '' && typeof redirectLegalRegister !== 'undefined'){
4067                            window.location = redirectLegalRegister;
4068                            thisElement.val(1);
4069                        }
4070
4071                        $('.not-required-labele').addClass('hidden');
4072                        $('.not-required-labele').closest('.form-group').find('input').attr('required', true);
4073
4074                        $legalEntity.removeClass('hidden');
4075
4076                        if(!$naturalPerson.hasClass('hidden')){
4077                            $naturalPerson.addClass('hidden');
4078                        }
4079
4080                        //TEXT FILDS
4081                        $legalEntity.find('.form-control').data('parsley-required', 'true');
4082                        $legalEntity.find('.form-control').prop("required", "true");
4083                        $legalEntity.find('.form-control').renameAttr('data-parsley-lengthone-false', 'data-parsley-lengthone');
4084                        $naturalPerson.find('.form-control').renameAttr('data-parsley-lengthone', 'data-parsley-lengthone-false');
4085
4086                        $naturalPerson.find('.form-control').data('parsley-required', 'false');
4087                        $naturalPerson.find('.form-control').prop("required", "false");
4088                        $naturalPerson.find('.form-control').removeAttr('required');
4089                        $naturalPerson.find('.form-control').renameAttr('pattern','pattern-false');
4090                        $legalEntity.find('.form-control').renameAttr('pattern-false','pattern');
4091
4092
4093                        //SELECT FILDS
4094                        $legalEntity.find('select').data('parsley-required', 'true');
4095                        $legalEntity.find('select').prop("required", "true");
4096
4097                        $naturalPerson.find('select').data('parsley-required', 'false');
4098                        $naturalPerson.find('select').prop("required", "false");
4099                        $naturalPerson.find('select').removeAttr('required');
4100                        $naturalPerson.find('.form-control').renameAttr('pattern','pattern-false');
4101
4102
4103                        $naturalPerson.find('#reg_' + prefixName + 'age').data('parsley-required', 'false');
4104                        $naturalPerson.find('#reg_' + prefixName + 'age').prop("required", "false");
4105                        $naturalPerson.find('#reg_' + prefixName + 'age').removeAttr('required');
4106                    }else{
4107
4108                        $('.not-required-labele').removeClass('hidden');
4109                        $('.not-required-labele').closest('.form-group').find('input').attr('required', false);
4110
4111                        $naturalPerson.removeClass('hidden');
4112
4113                        if(!$legalEntity.hasClass('hidden')){
4114                            $legalEntity.addClass('hidden');
4115                        }
4116
4117                        //TEXT FILDS
4118                        $naturalPerson.find('.form-control').data('parsley-required', 'true');
4119                        $naturalPerson.find('.form-control').prop("required", "true");
4120                        $naturalPerson.find('.form-control').renameAttr('data-parsley-lengthone-false', 'data-parsley-lengthone');
4121                        $legalEntity.find('.form-control').renameAttr('data-parsley-lengthone', 'data-parsley-lengthone-false');
4122
4123                        $legalEntity.find('.form-control').data('parsley-required', 'false');
4124                        $legalEntity.find('.form-control').prop("required", "false");
4125                        $legalEntity.find('.form-control').removeAttr('required');
4126                        $legalEntity.find('.form-control').renameAttr('pattern','pattern-false');
4127
4128                        //SELECT FILDS
4129                        $naturalPerson.find('select').data('parsley-required', 'true');
4130                        $naturalPerson.find('select').prop("required", "true");
4131                        $naturalPerson.find('.form-control').renameAttr('pattern-false','pattern');
4132                        $naturalPerson.find('.form-control').renameAttr('pattern-false','pattern');
4133
4134                        $legalEntity.find('.form-control').renameAttr('pattern','pattern-false');
4135                        $legalEntity.find('select').data('parsley-required', 'false');
4136                        $legalEntity.find('select').prop("required", "false");
4137                        $legalEntity.find('select').removeAttr('required');
4138
4139
4140
4141                    }
4142
4143                    $naturalPerson.find('#reg_'+prefixName+'company_work').data('parsley-required', 'false');
4144                    $naturalPerson.find('#reg_'+prefixName+'company_work').prop("required", "false");
4145                    $naturalPerson.find('#reg_'+prefixName+'company_work').removeAttr('required');
4146
4147                    $naturalPerson.find('#reg_'+prefixName+'company_work').data('parsley-required', 'false');
4148                    $naturalPerson.find('#reg_'+prefixName+'company_work').prop("required", "false");
4149                    $naturalPerson.find('#reg_'+prefixName+'company_work').removeAttr('required');
4150
4151                    $naturalPerson.find('#reg_'+prefixName+'position_in_company').data('parsley-required', 'false');
4152                    $naturalPerson.find('#reg_'+prefixName+'position_in_company').prop("required", "false");
4153                    $naturalPerson.find('#reg_'+prefixName+'position_in_company').removeAttr('required');
4154
4155                    $naturalPerson.find('#reg_'+prefixName+'social_status').data('parsley-required', 'false');
4156                    $naturalPerson.find('#reg_'+prefixName+'social_status').prop("required", "false");
4157                    $naturalPerson.find('#reg_'+prefixName+'social_status').removeAttr('required');
4158
4159                    $naturalPerson.find('#reg_' + prefixName + 'age').data('parsley-required', 'false');
4160                    $naturalPerson.find('#reg_' + prefixName + 'age').prop("required", "false");
4161                    $naturalPerson.find('#reg_' + prefixName + 'age').removeAttr('required');
4162
4163                    $naturalPerson.find('#reg_'+prefixName+'marriage_status').data('parsley-required', 'false');
4164                    $naturalPerson.find('#reg_'+prefixName+'marriage_status').prop("required", "false");
4165                    $naturalPerson.find('#reg_'+prefixName+'marriage_status').removeAttr('required');
4166
4167                    validate.$element.parsley().reset();
4168                };
4169
4170                $( "#"+$idElement).change(function() {
4171                    userIdentificationChangePerson($(this));
4172                    validateTypePerson($(this), prefixName, validate);
4173                });
4174
4175                if($("#"+$idElement).length > 0){
4176                    validateTypePerson($("#"+$idElement), prefixName, validate);
4177                }
4178
4179            };
4180
4181            $('.registration_form').each(function() {
4182
4183                var formRegistration = $(this);
4184
4185                var flagRefreshPage = false;
4186                if ($(this).data('refresh-page') == 1) {
4187                    flagRefreshPage = true;
4188                }
4189
4190                /*INput fileds*/
4191                var dataCheckBox = '';
4192
4193                var validate = $(this).validate({
4194                    formData: {ajax: 'yes', task: 'registration',regmarketingpermisions:dataCheckBox},
4195                    refreshPage: flagRefreshPage,
4196                }).data('nb.validate');
4197
4198                validate.$element.bind('nb.validate.remoteSuccess', function (e) {
4199                    validate.$element.find('.modal-body :not(.alert), .modal-footer, .registration-page-form-inputs :not(.alert)').addClass('hidden');
4200                    validate.$element.find('.clac-top,.clac-medium,.clac-bottom').removeClass('hidden');
4201                    validate.$element.find('.modal-header').addClass('hidden');
4202
4203                    if($('.clac-top').length > 0){
4204                        $('.clac-top').parents('.alert').addClass('sso-alert');
4205                    }
4206                    $("html, body").animate({scrollTop:$('body').offset().top},1000);
4207                    var tp = $('#reg_type_person').val();
4208                    if($(this).hasClass('registration_page')){
4209                        tp = $('#reg_page_type_person').val();
4210                    }
4211                    nbshopJS.CustomEventTrigger('registerUserSuccess',tp);
4212                });
4213
4214                typePerson("reg_type_person", '', validate);
4215                typePerson("reg_page_type_person", 'page_', validate);
4216
4217                var $emailLoginTokenField = $('.login_form_with_token_without_pass #login_email');
4218
4219                var $emailField = validate.$element.find('#reg_email');
4220                validate.addFieldRemoteValidate(
4221                    $emailField, {
4222                        ajax: 'yes',
4223                        task: 'check_email',
4224                        email: function () {
4225                            return $emailField.val();
4226                        }
4227                    }
4228                );
4229
4230                var $phoneField = validate.$element.find('#reg_phone');
4231                validate.addFieldRemoteValidate(
4232                    $phoneField, {
4233                        ajax: 'yes',
4234                        task: 'check_phone',
4235                        phone: function () {
4236                            return $phoneField.val();
4237                        }
4238                    }
4239                );
4240
4241                var $emailPageField = validate.$element.find('#reg_page_email');
4242                validate.addFieldRemoteValidate(
4243                    $emailPageField, {
4244                        ajax: 'yes',
4245                        task: 'check_email',
4246                        email: function () {
4247                            return $emailPageField.val();
4248                        }
4249                    }
4250                );
4251
4252                var $phonePageField = validate.$element.find('#reg_page_phone');
4253                validate.addFieldRemoteValidate(
4254                    $phonePageField, {
4255                        ajax: 'yes',
4256                        task: 'check_phone',
4257                        phone: function () {
4258                            return $phonePageField.val();
4259                        }
4260                    }
4261                );
4262
4263                var $myProductSerialNumberPageField = validate.$element.find('#reg_page_my_product_serial_number');
4264                if($myProductSerialNumberPageField.length > 0){
4265                    validate.addFieldRemoteValidate(
4266                        $myProductSerialNumberPageField, {
4267                            ajax: 'yes',
4268                            task: 'check_product_serial_number',
4269                            productSerialNumber: function(){
4270                                return $myProductSerialNumberPageField.val();
4271                            }
4272                        }
4273                    );
4274                };
4275
4276                var $ticketNumberPageField = validate.$element.find('#reg_page_ticket_number');
4277                if($ticketNumberPageField.length > 0){
4278                    validate.addFieldRemoteValidate(
4279                        $ticketNumberPageField, {
4280                            ajax: 'yes',
4281                            task: 'check_ticket_number',
4282                            ticketNumber: function(){
4283                                return $ticketNumberPageField.val();
4284                            }
4285                        }
4286                    );
4287                };
4288
4289                var $registrationModal = $('#register_modal');
4290                $emailField.bind('nb.validate.remoteErrorData', function(e, msg){
4291                    $registrationModal.modal('hide');
4292                    e.preventDefault();
4293
4294                    /* Ukoliko se prosledi podateka sa login forme sa tokenom proverava se vresnost ize tog polja */
4295                    var $emailVal = $emailField.val();
4296                    if($emailLoginTokenField.val()){
4297                        $emailVal = $emailLoginTokenField.val();
4298                    }
4299
4300                    if(!$('.activate-account-modal').hasClass('in')){
4301                        bootbox.dialog({
4302                            message: msg,
4303                            title: $registrationModal.data('reg-modal-label'),
4304                            className: "activate-account-modal",
4305                            buttons: {
4306                                success: {
4307                                    label: $registrationModal.data('reg-modal-success-label'),
4308                                    className: "btn-success",
4309                                    callback: function(){
4310                                        var $bootboxConfirm = $('.activate-account-modal'),
4311                                            $bootboxConfirmBody = $bootboxConfirm.find('.modal
4311-body');
4312
4313                                        var $loaderIcon = '<div class="loader-icon loader-icon-inline loader-icon-xs"></div>';
4314                                        $bootboxConfirmBody.html($registrationModal.data('reg-modal-success-text') + '...'+$loaderIcon);
4315
4316                                        $.ajax({
4317                                            type: "POST",
4318                                            url: validate.$element.data('remote-url'),
4319                                            data: {
4320                                                ajax: 'yes',
4321                                                task: 'completionregistrationprocess',
4322                                                email: $emailVal
4323                                            },
4324                                            dataType: 'json',
4325                                            success: function(ret){
4326                                                if(ret.flag){
4327
4328                                                    $bootboxConfirmBody.html('<div class="alert alert-success">'+ret.info+'</div>');
4329                                                    $bootboxConfirm.find('.modal-footer .btn').remove();
4330                                                    validate.resetForm();
4331
4332                                                    if(ret.flagRefreshPage){
4333                                                        setTimeout(window.location = ret.backUrl, 2000);
4334                                                    }
4335
4336                                                } else {
4337                                                    $bootboxConfirmBody.html('<div class="alert alert-danger">'+ret.info+'</div>');
4338                                                }
4339                                            }
4340                                        });
4341
4342                                        //dont hide the bootbox-confirm modal
4343                                        return false;
4344                                    }
4345                                },
4346                                danger: {
4347                                    label: $registrationModal.data('reg-modal-danger-label'),
4348                                    className: "btn-default btn-icon-left icon-arrow-long-left pull-left",
4349                                    callback: function(){
4350                                        var $bootboxConfirm = $('.activate-account-modal');
4351                                        $bootboxConfirm.data('modal', null);
4352                                        $registrationModal.modal('show');
4353                                    }
4354                                },
4355                            }
4356                        });
4357                    }
4358
4359                });
4360
4361                var $registrationPage = $('#registration_page');
4362                //na strani
4363                $emailPageField.bind('nb.validate.remoteErrorData', function(e, msg){
4364
4365                    //$registrationPage.modal('hide');
4366                    bootbox.dialog({
4367                        message: msg,
4368                        title: $registrationPage.data('reg-modal-label'),
4369                        className: "activate-account-modal",
4370                        buttons: {
4371                            success: {
4372                                label: $registrationPage.data('reg-modal-success-label'),
4373                                className: "btn-success",
4374                                callback: function(){
4375                                    var $bootboxConfirm = $('.activate-account-modal'),
4376                                        $bootboxConfirmBody = $bootboxConfirm.find('.modal-body');
4377
4378                                    var $loaderIcon = '<div class="loader-icon loader-icon-inline loader-icon-xs"></div>';
4379                                    $bootboxConfirmBody.html($registrationPage.data('reg-modal-success-text') + '...'+$loaderIcon);
4380
4381                                    $.ajax({
4382                                        type: "POST",
4383                                        url: validate.$element.data('remote-url'),
4384                                        data: {
4385                                            ajax: 'yes',
4386                                            task: 'completionregistrationprocess',
4387                                            email: $emailPageField.val()
4388                                        },
4389                                        dataType: 'json',
4390                                        success: function(ret){
4391                                            if(ret.flag){
4392                                                $bootboxConfirmBody.html('<div class="alert alert-success">'+ret.info+'</div>');
4393                                                $bootboxConfirm.find('.modal
4393-footer .btn').remove();
4394                                                validate.resetForm();
4395
4396                                                if(ret.flagRefreshPage){
4397                                                    setTimeout(window.location = ret.backUrl, 2000);
4398                                                }
4399
4400                                            } else {
4401                                                $bootboxConfirmBody.html('<div class="alert alert-danger">'+ret.info+'</div>');
4402                                            }
4403                                        }
4404                                    });
4405
4406                                    //dont hide the bootbox-confirm modal
4407                                    return false;
4408                                }
4409                            },
4410                            danger: {
4411                                label: $registrationPage.data('reg-modal-danger-label'),
4412                                className: "btn-default btn-icon-left icon-arrow-long-left pull-left",
4413                                callback: function(){
4414                                    var $bootboxConfirm = $('.activate-account-modal');
4415                                    $bootboxConfirm.data('modal', null);
4416                                    //$registrationPage.modal('show');
4417                                }
4418                            },
4419                        }
4420                    });
4421
4422                });
4423                $myProductSerialNumberPageField.bind('nb.validate.remoteErrorData', function(e, msg){
4424                    e.preventDefault();
4425                    if($myProductSerialNumberPageField.val() != ''){
4426                        $myProductSerialNumberPageField.val('');
4427                    }
4428                    return false;
4429                });
4430
4431                $phoneField.bind('nb.validate.remoteErrorData', function(e, msg){
4432                    e.preventDefault();
4433                    if($phoneField.val() != ''){
4434                        $phoneField.val('');
4435                    }
4436                    return false;
4437                });
4438
4439                $myProductSerialNumberPageField.bind('nb.validate.remoteSuccessData', function(e, msg){
4440                    e.preventDefault();
4441                    if($myProductSerialNumberPageField.val() != ''){
4442                        $myProductSerialNumberPageField.data('parsley-required', 'false');
4443                        $myProductSerialNumberPageField.prop("required", "false");
4444                        $myProductSerialNumberPageField.removeAttr('required');
4445                        validate.$element.parsley().reset();
4446                    }
4447                    return true;
4448                });
4449
4450                $ticketNumberPageField.bind('nb.validate.remoteErrorData', function(e, data){
4451                    e.preventDefault();
4452                    if($ticketNumberPageField.val() != ''){
4453                        //$ticketNumberPageField.val("");
4454                    }
4455                    return false;
4456                });
4457
4458                $ticketNumberPageField.bind('nb.validate.remoteSuccessData', function(e, data){
4459                    e.preventDefault();
4460                    if($ticketNumberPageField.val() != ''){
4461                        if(data.flagVerifyAccount){
4462                            formRegistration.find(".first-step-btn").attr("disabled", false);
4463                            formRegistration.find('.message-verify-account').removeClass("hidden");
4464                            formRegistration.find('.message-verify-account').html(data.accountInfo);
4465                            formRegistration.find('.verify-account-btn').removeClass("hidden");
4466                            formRegistration.find(".first-step-btn").attr("disabled", true);
4467                            formRegistration.find(".first-step-btn").addClass('hidden');
4468
4469                        }else{
4470                            formRegistration.find(".first-step-btn").attr("disabled", true);
4471                            formRegistration.find(".first-step-btn").attr("disabled", false);
4472                            formRegistration.find(".first-step-btn").removeClass('hidden');
4473                            formRegistration.find('.message-verify-account').addClass("hidden");
4474                            formRegistration.find('.message-verify-account').html("");
4475                            formRegistration.find('.verify-account-btn').addClass("hidden");
4476                        }
4477                    }
4478                    return false;
4479                });
4480
4481                var verifyAccount = function(form){
4482                    //todo verifikujemo nalog koriniska
4483                    var dataForm = form.serialize();
4484                    dataForm += '&ajax=yes&task=verifyaccount';
4485                    $.ajax({
4486                        type: "POST",
4487                        url: form.data('remote-url'),
4488                        data: dataForm,
4489                        dataType: 'json',
4490                        success: function(ret){
4491                            if(ret.flag){
4492                                if(ret.flagRefreshPage){
4493
4494                                    setTimeout(window.location = ret.backUrl, 2000);
4495                                }
4496                            }
4497                        }
4498                    });
4499                };
4500
4501                formRegistration.find('.verify-account-btn').click(function (){
4502                    var flag = false;
4503                    setTimeout(function () {
4504                        $('.reg-step.step-general-information input').each(function () {
4505                            if($(this).hasClass('validation-error')){
4506                                $(this).css('border-color', 'red').parent().children('label').css('color', 'red');
4507                                $(this).parent().parent().children('label').css('color', 'red');
4508                                flag = true;
4509                            }
4510                            if($('.registration-page .login-style .form-group .password-strength .label .strong').hasClass('hidden')){
4511                                flag = true;
4512                                $('#reg_page_password').css('border-color', 'red');
4513                            }
4514                        });
4515                        if(!flag){
4516                            verifyAccount(formRegistration);
4517                        }
4518                    }, 1000);
4519                });
4520            });
4521        };
4522
4523        var newsletter = function(){
4524            var form = $('#newsletter_form, #newsletter_form_sidebar');
4525            if(!form.length) return;
4526            var newsletterValidate = form.validate({
4527                formData: { task: 'save', nbAjax: 1, nbTask: 'newsletter' }
4528            }).data('nb.validate');
4529            newsletterValidate.$element.bind('nb.validate.remoteError', function(e){
4530                nbshopJS.CustomEventTrigger('newsletter_login_error');
4531            });
4532            newsletterValidate.$element.bind('nb.validate.remoteSuccess', function(e){
4533                newsletterValidate.$element.find('.form-control, .btn, .form-group-checklabel, .nl-wrapper-input').addClass('hidden');
4534                nbshopJS.CustomEventTrigger('newsletter_login_success');
4535            });
4536        };
4537
4538
4539        var newsletterViber = function(){
4540            var form = $('#viber_form, #viber_form_landing');
4541            if(!form.length) return;
4542            var newsletterValidate = form.validate({
4543                formData: { task: 'save_newsletter_viber', nbAjax: 1, nbTask: 'newsletter' }
4544            }).data('nb.validate');
4545            newsletterValidate.$element.bind('nb.validate.remoteError', function(e){
4546                nbshopJS.CustomEventTrigger('newsletter_login_error');
4547            });
4548            newsletterValidate.$element.bind('nb.validate.remoteSuccess', function(e){
4549                newsletterValidate.$element.find('.form-control, .btn, .form-group-checklabel').addClass('hidden');
4550                nbshopJS.CustomEventTrigger('newsletter_login_success');
4551            });
4552        };
4553
4554
4555        var itemFormContactParts = function(){
4556            var form = $('#itemFormContactParts');
4557            if(!form.length) return;
4558
4559
4560            var itemFormContactPartsValidate = form.validate({
4561                formData: { task: 'item_form_contact_parts', ajax: 'yes' }
4562            }).data('nb.validate');
4563            itemFormContactPartsValidate.$element.bind('nb.validate.remoteSuccess', function(e){
4564                if(window.NB_AJAX_RET.flag && window.NB_AJAX_RET.redirect != ''){
4565                    window.location = window.NB_AJAX_RET.redirect;
4566                }
4567                itemFormContactPartsValidate.$element.find('.form-group, .btn, .heading-wrapper h4.title').addClass('hidden');
4568            });
4569        };
4570
4571        var itemFormContactMessage = function(){
4572            var form = $('#itemFormContactMessage');
4573            if(!form.length) return;
4574
4575
4576            var itemFormContactMessageValidate = form.validate({
4577                formData: { task: 'item_form_contact_message', ajax: 'yes' }
4578            }).data('nb.validate');
4579            itemFormContactMessageValidate.$element.bind('nb.validate.remoteSuccess', function(e){
4580                if(window.NB_AJAX_RET.flag && window.NB_AJAX_RET.redirect != ''){
4581                    window.location = window.NB_AJAX_RET.redirect;
4582                }
4583                itemFormContactMessageValidate.$element.find('.form-group, .btn').addClass('hidden');
4584            });
4585        };
4586
4587        var itemFormContactMessageNew = function(){
4588            var form = $('#itemFormContactMessageNew');
4589            if(!form.length) return;
4590            var itemFormContactMessageNewValidate = form.validate({
4591                formData: { task: 'item_form_contact_message_new', ajax: 'yes' }
4592            }).data('nb.validate');
4593            itemFormContactMessageNewValidate.$element.bind('nb.validate.remoteSuccess', function(e){
4594                itemFormContactMessageNewValidate.$element.find('.form-group, .btn, .form-group-checklabel').addClass('hidden');
4595            });
4596        };
4597        var itemFormContactMessageV2 = function(){
4598            var form = $('#itemFormContactMessageV2');
4599            if(!form.length) return;
4600            var itemFormContactMessageNewValidate = form.validate({
4601                formData: { task: 'item_form_contact_message_newv1', ajax: 'yes' }
4602            }).data('nb.validate');
4603            itemFormContactMessageNewValidate.$element.bind('nb.validate.remoteSuccess', function(e){
4604                itemFormContactMessageNewValidate.$element.find('.form-group, .btn, .form-group-checklabel').addClass('hidden');
4605            });
4606        };
4607
4608        var newsletterLanding = function(){
4609            var form = $('#newsletter_form_landing');
4610            if(!form.length) return;
4611            $modal = $('#modal-nl-confirm');
4612            var newsletterValidate = form.validate({
4613                formData: { task: 'save_landing', nbAjax: 1, nbTask: 'newsletter' }
4614            }).data('nb.validate');
4615            newsletterValidate.$element.bind('nb.validate.remoteSuccess', function(e){
4616                newsletterValidate.$element.find('.form-control, .btn').addClass('hidden');
4617                if($modal.length > 0){
4618                    $modal.modal('show');
4619                }
4620            });
4621        };
4622
4623        var subscribe = function(){
4624            var form = $('#subscribe_form, #subscribe_form_solo');
4625            if(!form.length) return;
4626            var subscribeValidate = form.validate({
4627                formData: { ajax: 'yes', task: 'save_subscribe', nbAjax: '1' }
4628            }).data('nb.validate');
4629            subscribeValidate.$element.bind('nb.validate.remoteSuccess', function(e){
4630                subscribeValidate.$element.find('.form-inputs').addClass('hidden');
4631                $(document).trigger('popSubscribeSuccess');
4632            });
4633        };
4634
4635        var activatePublicUser = function(){
4636
4637            var form = $('#public_user_activatione_form');
4638            if(form.length === 0){
4639                return false;
4640            }
4641
4642            var mainButton = $('#acitvateUser');
4643            var dataForm = '';
4644            var resetButton = $('.reset-activation-button');
4645            var mailinput = $('#public_user_activation_email');
4646            resetButton.click(function(){
4647                resetActivationPUForm();
4648            });
4649
4650            $('#onload_modal').on('shown.bs.modal', function (e) {
4651
4652                document.getElementById("login_password_activate").required = false;
4653            });
4654
4655            form.each(function(){
4656
4657                var validate = $(this).validate({
4658                    formData: { nbAjax: 1, task: 'check_email_status',returnStatus:true,noreset:true }
4659                }).data('nb.validate');
4660
4661                validate.$element.bind('nb.validate.remoteSuccess', function(e){
4662                    $('.public-user-wrapper').addClass('hidden');
4663                    mainButton.addClass('hidden');
4664                    mailinput.attr('readonly',true);
4665                    resetButton.removeClass('hidden');
4666                    switch (window.NB_AJAX_STATUS) {
4667                        case 'register_active':
4668                            UserExistsActive(form);
4669                            break;
4670                        case 'not_register':
4671                            $('.public-user-not-registered').removeClass('hidden');
4672                            form.find('.alert').removeClass('alert-success').addClass('alert-danger');
4673                            break;
4674                        case 'register_not_active':
4675                            ActivateUser(form,mailinput);
4676                            break;
4677                    }
4678                });
4679            });
4680
4681            function resetActivationPUForm(){
4682                $("#public_user_activatione_form")[0].reset();
4683                $('.public-user-wrapper').addClass('hidden');
4684                $('.public-user-not-acitivated').addClass('hidden');
4685                mainButton.removeClass('hidden');
4686                mailinput.attr('readonly',false);
4687                resetButton.addClass('hidden');
4688                $('#user_public_activate .alert').addClass('hidden');
4689            }
4690
4691            function ActivateUser(form,mail){
4692                $('.public-user-not-acitivated').removeClass('hidden');
4693                $('#activate_user').click(function(e){
4694                    $(this).addClass('active');
4695                    e.preventDefault();
4696                    $.ajax({
4697                        type: "POST",
4698                        url: form.data('register-url'),
4699                        data: {
4700                            ajax: 'yes',
4701                            task: 'completionregistrationprocess',
4702                            email: mail.val()
4703                        },
4704                        dataType: 'json',
4705                        success: function(ret){
4706                            if(ret.flag){
4707
4708                                form.html('<div class="alert alert-success">'+ret.info+'</div>');
4709                                if(ret.flagRefreshPage){
4710                                    setTimeout(window.location = ret.backUrl, 2000);
4711                                }
4712
4713                            }
4714
4715                        }
4716                    });
4717                });
4718            }
4719
4720            function LoginFromActivation(loginLink,dataForm,loginbutton){
4721                $(loginbutton).addClass('active');
4722                $.ajax({
4723                    type: "POST",
4724                    url: loginLink,
4725                    data: dataForm,
4726                    dataType: 'json',
4727                    success: function(ret){
4728
4729                        loginbutton.removeClass('active');
4730                        if(ret.flag){
4731                            console.log(ret);
4732                            toastr.success(ret.info);
4733                            location.reload();
4734                        }else{
4735                            toastr.error(ret.info);
4736                        }
4737                    }
4738                });
4739            }
4740
4741            function UserExistsActive(form){
4742                var loginLink       = form.data('login-url');
4743                var $emailfield     = $('#public_user_activation_email');
4744                var loginbutton     = $('#loginUser');
4745                var mainbutton      = $('#acitvateUser');
4746                var $activepass     = $('#login_password_activate');
4747                var tmp='';
4748
4749                $emailfield.attr('readonly',true);
4750                form.find('#login_password_activate').val('').prop('checked', false);
4751
4752                $('.public-user-enter-password').removeClass('hidden');
4753                tmp = $activepass.attr('id').replace('_activate','');
4754                $activepass.attr('name',tmp);
4755                tmp='';
4756
4757                form.append('<input type="hidden" id="login_mail_act" name="login_email" />');
4758                $('#login_mail_act').val($emailfield.val());
4759                form.attr('data-remote-url',loginLink);
4760
4761                /*Forma Ajax*/
4762                loginbutton.click(function(e){
4763                    dataForm = form.serialize();
4764                    dataForm += '&ajax=yes&task=login';
4765                    e.preventDefault();
4766                    LoginFromActivation(loginLink,dataForm,$(this));
4767                });
4768            }
4769
4770        };
4771
4772        var comment = function(){
4773
4774            var reloadComments = function($form){
4775                $.ajax({
4776                    type: "POST",
4777                    url: nb_active_page_url,
4778                    data: 'nbAjax=1&task=reload_comment&'+$form,
4779                    contentType: "application/x-www-form-urlencoded;charset=UTF-8",
4780                    //dataType: 'json',
4781                    success: function(ret){
4782                        $('#commentsContent').html(ret);
4783                    }
4784                });
4785            };
4786
4787            $('.form-comment').each(function(){
4788
4789                var formComment = $(this).serialize();
4790
4791                var validate = $(this).validate({
4792                    formData: { nbAjax: 1, ajax: 'yes', task: 'save_comment' }
4793                }).data('nb.validate');
4794
4795                validate.$element.bind('nb.validate.remoteSuccess', function(e){
4796                    validate.$element.find('.form-control, .btn, .form-group label, .form-group .styled-select, .required-info, .rating-info, #comment_modal .comments .inputs-wrapper, .comments-input-wrapper .inputs-wrapper').addClass('hidden');
4797                    reloadComments(formComment);
4798                });
4799            });
4800        };
4801
4802        var productPriceQuery = function(){
4803            var form = $('#product_price_query_form');
4804            if(!form.length) return;
4805
4806            var subscribeValidate = form.validate({
4807                formData: { ajax: 'yes', task: 'productpricequery' }
4808            }).data('nb.validate');
4809
4810            subscribeValidate.$element.bind('nb.validate.remoteSuccess', function(e){
4811                subscribeValidate.$element.find('.form-inputs').addClass('hidden');
4812                subscribeValidate.$element.find('.modal-footer').addClass('hidden');
4813            });
4814        };
4815
4816        var productTDSDocumentationQuery = function(){
4817            var form = $('#tds_documentation_query_form');
4818            if(!form.length) return;
4819
4820            var subscribeValidate = form.validate({
4821                formData: { ajax: 'yes', task: 'producttdsdocumentationquery' }
4822            }).data('nb.validate');
4823
4824            subscribeValidate.$element.bind('nb.validate.remoteSuccess', function(e){
4825                subscribeValidate.$element.find('.form-inputs').addClass('hidden');
4826                subscribeValidate.$element.find('.modal-footer').addClass('hidden');
4827            });
4828        };
4829
4830        var contactTeamSale = function(){
4831            var form = $('#contact_form_teamsale');
4832            if(!form.length) return;
4833
4834            var teamsaleValidate = form.validate({
4835                formData: { ajax: 'yes', task: 'teamsale' }
4836            }).data('nb.validate');
4837
4838            teamsaleValidate.$element.bind('nb.validate.remoteSuccess', function(e){
4839                teamsaleValidate.$element.find('.form-group , .btn').addClass('hidden');
4840            });
4841        };
4842
4843        var cart = function(flagIstanceSubmitTicket){
4844
4845            var billingAddress = function($idElement, typePerson,  prefixName, validate){
4846
4847                var validateBillingAddress = function($idElement, typePerson, prefixName, validate){
4848
4849                    var $billingAddress  =  $('.order-billing-address');
4850                    var $naturalPerson  = $('#cart_onepage_form .' + prefixName + 'naturalPerson');
4851                    var $legalEntity    = $('#cart_onepage_form .' + prefixName + 'legalEntity');
4852
4853                    if($idElement.is(":checked")){
4854
4855                        $('.new-billing-addess').removeClass('hidden');
4856
4857                        $billingAddress.find('.form-control').data('parsley-required', 'true');
4858                        $billingAddress.find('.form-control').prop("required", "true");
4859
4860                        $billingAddress.find('select').data('parsley-required', 'true');
4861                        $billingAddress.find('select').prop("required", "true");
4862                        $billingAddress.find('.form-control').renameAttr('pattern-false','pattern');
4863
4864                        $("#cart_onepage_billing_user_identification_type").data('parsley-required', 'false');
4865                        $("#cart_onepage_billing_user_identification_type").prop("required", "false");
4866                        $("#cart_onepage_billing_user_identification_type").removeAttr('required');
4867
4868                        $("#cart_onepage_billing_user_identification").data('parsley-required', 'false');
4869                        $("#cart_onepage_billing_user_identification").prop("required", "false");
4870                        $("#cart_onepage_billing_user_identification").removeAttr('required');
4871
4872                        if(typePerson == 2){
4873                            //TEXT FILDS
4874                            $legalEntity.find('.form-control').data('parsley-required', 'true');
4875                            $legalEntity.find('.form-control').prop("required", "true");
4876
4877                            $naturalPerson.find('.form-control').data('parsley-required', 'false');
4878                            $naturalPerson.find('.form-control').prop("required", "false");
4879                            $naturalPerson.find('.form-control').removeAttr('required');
4880
4881                            //SELECT FILDS
4882                            $legalEntity.find('select').data('parsley-required', 'true');
4883                            $legalEntity.find('select').prop("required", "true");
4884
4885                            $naturalPerson.find('select').data('parsley-required', 'false');
4886                            $naturalPerson.find('select').prop("required", "false");
4887                            $naturalPerson.find('select').removeAttr('required');
4888                            $('#cart_onepage_company_pib').renameAttr('data-validation-lengthone', 'data-validation-lengthone-false');
4889
4890                            $naturalPerson.find('#cart_onepage_age').data('parsley-required', 'false');
4891                            $naturalPerson.find('#cart_onepage_age').prop("required", "false");
4892                            $naturalPerson.find('#cart_onepage_age').removeAttr('required');
4893
4894                            $naturalPerson.find('#cart_onepage_age').data('parsley-required', 'false');
4895                            $naturalPerson.find('#cart_onepage_age').prop("required", "false");
4896                            $naturalPerson.find('#cart_onepage_age').removeAttr('required');
4897
4898                        }else{
4899                            //TEXT FILDS
4900                            $naturalPerson.find('.form-control').data('parsley-required', 'true');
4901                            $naturalPerson.find('.form-control').prop("required", "true");
4902
4903                            $legalEntity.find('.form-control').data('parsley-required', 'false');
4904                            $legalEntity.find('.form-control').prop("required", "false");
4905                            $legalEntity.find('.form-control').removeAttr('required');
4906
4907                            //SELECT FILDS
4908                            $naturalPerson.find('select').data('parsley-required', 'true');
4909                            $naturalPerson.find('select').prop("required", "true");
4910
4911                            $legalEntity.find('select').data('parsley-required', 'false');
4912                            $legalEntity.find('select').prop("required", "false");
4913                            $legalEntity.find('select').removeAttr('required');
4914                            $('#cart_onepage_billing_phone').attr('type','text');
4915                            $('#cart_onepage_billing_postcode').attr('type','text');
4916                            $('#cart_onepage_billing_phone').renameAttr('data-parsley-lengthone-false', 'data-parsley-lengthone' );
4917                            $('#cart_onepage_billing_phone').renameAttr('data-parsley-length-false', 'data-parsley-length' );
4918                            $('#cart_onepage_billing_postcode').renameAttr('data-parsley-lengthone-false', 'data-parsley-lengthone' );
4919                            $('#cart_onepage_billing_postcode').renameAttr('data-parsley-length-false', 'data-parsley-length' );
4920
4921                            $('#cart_onepage_billing_firstname').renameAttr('data-parsley-maxlength-false', 'data-parsley-maxlength' );
4922                            $('#cart_onepage_billing_lastname').renameAttr('data-parsley-maxlength-false', 'data-parsley-maxlength' );
4923                            $('#cart_onepage_company_pib').renameAttr('data-parsley-lengthone-false', 'data-parsley-lengthone');
4924
4925                        }
4926
4927                    }else{
4928
4929                        $billingAddress.find('.form-control').data('parsley-required', 'false');
4930                        $billingAddress.find('.form-control').prop("required", "false");
4931                        $billingAddress.find('.form-control').removeAttr('required');
4932                        $billingAddress.find('.form-control').renameAttr('pattern','pattern-false');
4933
4934                        $billingAddress.find('select').data('parsley-required', 'false');
4935                        $billingAddress.find('select').prop("required", "false");
4936                        $billingAddress.find('select').removeAttr('required');
4937                        $('#cart_onepage_billing_phone').attr('type','text');
4938                        $('#cart_onepage_billing_phone').removeAttr('pattern');
4939                        $('#cart_onepage_billing_postcode').attr('type','text');
4940                        $('#cart_onepage_billing_phone').renameAttr('data-parsley-lengthone', 'data-parsley-lengthone-false' );
4941                        $('#cart_onepage_billing_phone').renameAttr('data-parsley-length', 'data-parsley-length-false' );
4942                        $('#cart_onepage_billing_postcode').renameAttr('data-parsley-lengthone', 'data-parsley-lengthone-false' );
4943                        $('#cart_onepage_billing_postcode').renameAttr('data-parsley-length', 'data-parsley-length-false' );
4944
4945                        $('#cart_onepage_billing_firstname').renameAttr('data-parsley-maxlength', 'data-parsley-maxlength-false' );
4946                        $('#cart_onepage_billing_lastname').renameAttr('data-parsley-maxlength', 'data-parsley-maxlength-false' );
4947
4948                        $('.new-billing-addess').addClass('hidden');
4949                        validate.$element.parsley().isValid(true);
4950                    }
4951
4952                    validate.$element.parsley().reset();
4953                };
4954
4955                $("#" + $idElement).change(function () {
4956                    if($idElement == 'cart_onepage_new_billing_address'){
4957                        if($('#cart_onepage_new_billing_address').is(':checked')){
4958                            $('#cart_onepage_billing_phone').renameAttr('data-parsley-lengthone-false', 'data-parsley-lengthone' );
4959                            $('#cart_onepage_billing_phone').renameAttr('data-parsley-length-false', 'data-parsley-length' );
4960                            $('#cart_onepage_billing_postcode').renameAttr('data-parsley-lengthone-false', 'data-parsley-lengthone' );
4961                            $('#cart_onepage_billing_postcode').renameAttr('data-parsley-length-false', 'data-parsley-length' );
4962
4963                            $('#cart_onepage_billing_phone').attr('type','number');
4964                            $('#cart_onepage_billing_phone').attr("disabled", false);
4965                            $('#cart_onepage_billing_postcode').attr('type','number');
4966
4967                        } else {
4968                            $('#cart_onepage_billing_phone').renameAttr('data-parsley-lengthone', 'data-parsley-lengthone-false' );
4969                            $('#cart_onepage_billing_phone').renameAttr('data-parsley-length', 'data-parsley-length-false' );
4970                            $('#cart_onepage_billing_postcode').renameAttr('data-parsley-lengthone', 'data-parsley-lengthone-false' );
4971                            $('#cart_onepage_billing_postcode').renameAttr('data-parsley-length', 'data-parsley-length-false' );
4972
4973                            $('#cart_onepage_billing_phone').attr('type','text');
4974                            $('#cart_onepage_billing_phone').removeAttr('pattern');
4975                            $('#cart_onepage_billing_postcode').attr('type','text');
4976
4977                        }
4978                    };
4979                    validateBillingAddress($(this), $('#'+typePerson).val(), prefixName, validate);
4980                });
4981
4982                if($("#" + $idElement).length > 0){
4983                    validateBillingAddress($("#"+$idElement), $('#'+typePerson).val(), prefixName, validate);
4984                }
4985            };
4986
4987            var typePerson = function($idElement, prefixName, validate) {
4988
4989                var validateTypePerson = function (thisElement, prefixName, validate) {
4990
4991                    var $naturalPerson = $('#cart_onepage_form .' + prefixName + 'naturalPerson');
4992                    var $legalEntity = $('#cart_onepage_form .' + prefixName + 'legalEntity');
4993
4994                    if (thisElement.val() == 2) {
4995
4996                        var redirectLegalRegister = thisElement.data('redirect-login-user-url');
4997                        if(redirectLegalRegister !== '' && typeof redirectLegalRegister !== 'undefined'){
4998                            window.location = redirectLegalRegister;
4999                            thisElement.val(1);
5000                        }
5001
5002                        $legalEntity.removeClass('hidden');
5003                        if (!$naturalPerson.hasClass('hidden')) {
5004                            $naturalPerson.addClass('hidden');
5005                        }
5006                        //TEXT FILDS
5007                        $legalEntity.find('.form-control').data('parsley-required', 'true');
5008                        $legalEntity.find('.form-control').prop("required", "true");
5009                        $legalEntity.find('.form-control').attr('disabled', false);
5010                        $naturalPerson.find('.form-control').data('parsley-required', 'false');
5011                        $naturalPerson.find('.form-control').prop("required", "false");
5012                        $naturalPerson.find('.form-control').removeAttr('required');
5013                        $naturalPerson.find('.form-control').renameAttr('pattern','pattern-false');
5014
5015                        $naturalPerson.find('.form-control').each(function(){
5016                            if($(this).attr('id') == 'cart_onepage_company_pib_natural' || $(this).attr('id') == 'cart_onepage_company_id_number_natural'){
5017                                $(this).text('');
5018                                $(this).val('');
5019                            }
5020                        });
5021                        //SELECT FILDS
5022                        $legalEntity.find('select').data('parsley-required', 'true');
5023                        $legalEntity.find('select').prop("required", "true");
5024                        $legalEntity.find('select').attr('disabled', false);
5025                        $naturalPerson.find('select').data('parsley-required', 'false');
5026                        $naturalPerson.find('select').prop("required", "false");
5027                        $naturalPerson.find('select').removeAttr('required');
5028
5029                        $naturalPerson.find('#cart_onepage_age').data('parsley-required', 'false');
5030                        $naturalPerson.find('#cart_onepage_age').prop("required", "false");
5031                        $naturalPerson.find('#cart_onepage_age').removeAttr('required');
5032
5033                    } else {
5034
5035                        $naturalPerson.removeClass('hidden');
5036                        if (!$legalEntity.hasClass('hidden')) {
5037                            $legalEntity.addClass('hidden');
5038                        }
5039                        //TEXT FILDS
5040                        $naturalPerson.find('.form-control').each(function(){
5041                            if($(this).attr('id') != 'cart_onepage_company_pib_natural' && $(this).attr('id') != 'cart_onepage_company_id_number_natural'){
5042                                $(this).data('parsley-required', 'true');
5043                                $(this).prop("required", "true");
5044                            }
5045                        });
5046
5047                        //$naturalPerson.find('.form-control').data('parsley-required', 'true');
5048                        //$naturalPerson.find('.form-control').prop("required", "true");
5049                        $legalEntity.find('.form-control').data('parsley-required', 'false');
5050                        $legalEntity.find('.form-control').prop("required", "false");
5051                        $legalEntity.find('.form-control').removeAttr('required');
5052                        $legalEntity.find('.form-control').attr('disabled', true);
5053                        //SELECT FILDS
5054                        $naturalPerson.find('select').data('parsley-required', 'true');
5055                        $naturalPerson.find('select').prop("required", "true");
5056                        $legalEntity.find('select').data('parsley-required', 'false');
5057                        $legalEntity.find('select').prop("required", "false");
5058                        $legalEntity.find('select').removeAttr('required');
5059                        $legalEntity.find('select').attr('disabled', true);
5060                        $naturalPerson.find('.form-control').renameAttr('pattern-false','pattern');
5061                    }
5062
5063                    $legalEntity.find('.not-required').data('parsley-required', 'false');
5064                    $legalEntity.find('.not-required').prop("required", "false");
5065                    $legalEntity.find('.not-required').removeAttr('required');
5066
5067                    $naturalPerson.find('.not-required').data('parsley-required', 'false');
5068                    $naturalPerson.find('.not-required').prop("required", "false");
5069                    $naturalPerson.find('.not-required').removeAttr('required');
5070
5071                    $("#cart_onepage_new_address_list").data('parsley-required', 'false');
5072                    $("#cart_onepage_new_address_list").prop("required", "false");
5073                    $("#cart_onepage_new_address_list").removeAttr('required');
5074                    if($('#cart_onepage_new_address_list_id').hasClass('required-select-newaddress') && $("#orderAddress").is(':checked')){
5075                        $("#cart_onepage_new_address_list_id").data('parsley-required', 'ture');
5076                        $("#cart_onepage_new_address_list_id").prop("required", "true");
5077                    } else {
5078                        $("#cart_onepage_new_address_list_id").data('parsley-required', 'false');
5079                        $("#cart_onepage_new_address_list_id").prop("required", "false");
5080                        $("#cart_onepage_new_address_list_id").removeAttr('required');
5081                    }
5082
5083                    $('.not_required').prop("required", "false");
5084                    $('.not_required').removeAttr('required');
5085                    $('.not_required').data('parsley-required', 'false');
5086
5087                    validate.$element.parsley().reset();
5088                };
5089
5090
5091                let cartstepp = prefixName;
5092                if(prefixName){
5093                    cartstepp = prefixName+'_';
5094                }
5095                let wrapper = "#order_"+cartstepp+"address_content";
5096
5097                $("#" + $idElement).change(function () {
5098                    userIdentificationChangePerson($(this),wrapper);
5099                    validateTypePerson($(this), prefixName, validate);
5100                });
5101
5102                if($("#"+$idElement).length > 0){
5103                    validateTypePerson($("#"+$idElement), prefixName, validate);
5104                }
5105            };
5106
5107
5108            var $form = $('#cart_onepage_form');
5109            if(!$form.length){
5110                return;
5111            }
5112
5113            var validate = $form.validate().data('nb.validate');
5114
5115            //sklonjen uslov jer ne radi klik na ceo LI
5116            //if($('.cart').hasClass('cascade-cart')){
5117                validate.$element.find('.delivery-options li').click(function(){
5118                    $(this).find('.iradio_flat  input:radio').icheck('checked');
5119                    if($(this).parents('#cart-carrier-content').length > 0){
5120                        $('#cart-carrier-content .delivery-options li').removeClass('active');
5121                    }
5122                    $(this).addClass('active');
5123                });
5124            //}
5125
5126
5127            //packetomatCart Validation for carrier
5128            function packetomatValidationforActiveCarrier(){
5129                var selected_carrierId = validate.$element.find('input[name="carierId"]:checked').attr('id');
5130                if(!selected_carrierId){
5131                    return false
5132                }
5133
5134                var selected_carrierIdonly = selected_carrierId.replace('carierId_','');
5135                var slecetedCarrierMachine = $('#cart_onepage_parcelMachineId_'+selected_carrierIdonly);
5136                var slecetedCarrierMachineVal = slecetedCarrierMachine.val();
5137                var errorText = slecetedCarrierMachine.data('error-msg');
5138
5139                if(slecetedCarrierMachine.length > 0){
5140                    if(!slecetedCarrierMachineVal || slecetedCarrierMachineVal == ''){
5141                        toastr.error(errorText);
5142                        return false;
5143                    }
5144                }
5145                return true;
5146            }
5147
5148            //main submit button clicked
5149            if(flagIstanceSubmitTicket){
5150
5151                //type person change
5152                typePerson('cart_onepage_type_person', '',validate);
5153                typePerson('cart_onepage_billing_type_person', 'billing', validate);
5154                billingAddress('cart_onepage_new_billing_address', 'cart_onepage_billing_type_person', 'billing', validate);
5155
5156                validate.$element.find('[name=submit_order_one_page]').click(function(e){
5157                    e.preventDefault();
5158
5159                    if($('#disabled-voucher-combinated-buy').length){
5160                        $('html,body').animate({
5161                            scrollTop: $('#disabled-voucher-combinated-buy').offset() - ($(window).height() / 2)
5162                        }, 1000);
5163                        return false;
5164                    }
5165                    let cartSteps = false;
5166                    if($('.cart-steps-ncx').length){
5167                        cartSteps = true;
5168                    }
5169
5170                    if(!cartSteps && $('#p_wrong_cityId_queastion').length && typeaheadStrictType == 'postCodeAutoFillByCity' && (($('#profileAddress').parent().hasClass('checked') && $('#p_cityId').val() < 1))){
5171                        textQuestion = $('#p_wrong_cityId_queastion').val();
5172                        bootbox.confirm(textQuestion, function(result) {
5173                            if(!result){
5174                                return;
5175                            } else {
5176                                window.location.replace($('#p_edit_profile_url').val());
5177                            }
5178                        });
5179                    } else if(!cartSteps && $('#p_wrong_adressId_queastion').length && (typeaheadStrictType == 'postCodeAutoFillByStreet' || typeaheadStrictType == 'postCodeAutoFillByStreetNumber') && (($('#profileAddress').parent().hasClass('checked') && $('#p_streetId').val() < 1))){
5180                        textQuestion = $('#p_wrong_adressId_queastion').val();
5181                        bootbox.confirm(textQuestion, function(result) {
5182                            if(!result){
5183                                return;
5184                            } else {
5185                                window.location.replace($('#p_edit_profile_url').val());
5186                            }
5187                        });
5188                    }
5189
5190                    else {
5191                        var elementCartOnepageTermsOfUse = $('input[type="checkbox"][name="cart_onepage_terms_of_use"]');
5192                        if(elementCartOnepageTermsOfUse.length > 0){
5193                            elementCartOnepageTermsOfUse.data('parsley-required', 'true');
5194                            elementCartOnepageTermsOfUse.prop("required", "true");
5195                        };
5196
5197                        var elementCartOnepageAnti  = $('#cart_onepage_anti');
5198                        if(elementCartOnepageAnti.length > 0){
5199                            elementCartOnepageAnti.data('parsley-required', 'true');
5200                        }
5201
5202                        var storeRecive = $('.store-recive select');
5203
5204                        if(!packetomatValidationforActiveCarrier()){
5205                            return false;
5206                        }
5207
5208                        var $textFieldsAddress = validate.$element.find('.address-setnew .form-control');
5209                        $textFieldsAddress.data('parsley-required', 'true');
5210                        validate.$element.data('ticketBtnOriginalEvent', -1);
5211                        validate.setButtonSubmitted($(this));
5212                        validate.$element.submit();
5213                        eraseCookie('cart_gift_popup');
5214                        eraseCookie('carrierCookie');
5215                        eraseCookie('paymentCookie');
5216                        eraseCookie('addressCookie');
5217                    }
5218
5219
5220                });
5221
5222            }
5223
5224            //ticket submit button clicket
5225            validate.$element.find('[name=cart_insert_ticket]').click(function (e) {
5226                //stop form from submitting
5227                e.preventDefault();
5228
5229                var elementVoucherForm = $('#gift_voucher_validation');
5230                if (elementVoucherForm.length > 0) {
5231                    elementVoucherForm.val('true');
5232                }
5233
5234                var elementCartOnepageTermsOfUse = $('input[type="checkbox"][name="cart_onepage_terms_of_use"]');
5235                if (elementCartOnepageTermsOfUse.length > 0) {
5236                    elementCartOnepageTermsOfUse.data('parsley-required', 'false');
5237                    elementCartOnepageTermsOfUse.prop("required", "false");
5238                    elementCartOnepageTermsOfUse.removeAttr('required');
5239                }
5240                ;
5241
5242                var elementCartOnepageAnti = $('#cart_onepage_anti');
5243                if (elementCartOnepageAnti.length > 0) {
5244                    elementCartOnepageAnti.removeAttr('required');
5245                    elementCartOnepageAnti.data('parsley-required', 'false');
5246                }
5247
5248                var $textFieldsAddress = validate.$element.find('.address-setnew .form-control');
5249                $textFieldsAddress.removeAttr('required');
5250                $textFieldsAddress.data('parsley-required', 'false');
5251
5252                //this is how we will now the ticket btn is clicked, not great solution, I know :O
5253                validate.$element.data('ticketBtnOriginalEvent', 1);
5254
5255                //set this button as submitted
5256                validate.setButtonSubmitted($(this));
5257
5258                //and now submit the form
5259                validate.$element.submit();
5260
5261                $cartloader = $('.cart-loader');
5262                $cartloader.removeClass('hidden');
5263                if($('li.parsley-required').length > 0){
5264                    $cartloader.addClass('hidden');
5265                }
5266            });
5267
5268            //remove ticket submit button clicket
5269            validate.$element.find('[name=cart_remove_ticket]').click(function (e) {
5270
5271                //stop form from submitting
5272                e.preventDefault();
5273
5274                var elementCartOnepageTermsOfUse = $('input[type="checkbox"][name="cart_onepage_terms_of_use"]');
5275                if (elementCartOnepageTermsOfUse.length > 0) {
5276                    elementCartOnepageTermsOfUse.data('parsley-required', 'false');
5277                    elementCartOnepageTermsOfUse.prop("required", "false");
5278                    elementCartOnepageTermsOfUse.removeAttr('required');
5279                }
5280
5281                var elementCartOnepageAnti = $('#cart_onepage_anti');
5282                if (elementCartOnepageAnti.length > 0) {
5283                    elementCartOnepageAnti.removeAttr('required');
5284                    elementCartOnepageAnti.data('parsley-required', 'false');
5285                }
5286
5287                var $textFieldsAddress = validate.$element.find('.address-setnew .form-control');
5288                $textFieldsAddress.removeAttr('required');
5289                $textFieldsAddress.data('parsley-required', 'false');
5290                //add
5291                validate.setButtonSubmitted($(this));
5292                validate.$element.submit();
5293            });
5294
5295
5296            if(flagIstanceSubmitTicket){
5297
5298                validate.$parsley.subscribe('parsley:form:validate', function (formInstance) {
5299                    var $textFields = validate.$element.find('.address-setnew .form-control');
5300
5301                    if (!validate.$element.find('#orderAddress').prop('checked')) {
5302                        $textFields.removeAttr('required');
5303                        $textFields.data('parsley-required', 'false');
5304                    } else {
5305                        $textFields.data('parsley-required', 'true');
5306                    }
5307
5308                    //reinit parsley validation
5309                    validate.$element.parsley();
5310
5311                    if (formInstance.isValid() && validate.$element.data('ticketBtnOriginalEvent') != 1) {
5312
5313                        var $ticket = validate.$element.find('#cart_ticket');
5314
5315                        if (typeof $ticket.data('denied') === "undefined" && $ticket.val() == -1) {
5316
5317                            formInstance.submitEvent.preventDefault();
5318
5319                            bootbox.dialog({
5320                                message: $ticket.data('bootbox-question'),
5321                                title: $ticket.data('bootbox-btn-use-ticket'),
5322                                buttons: {
5323                                    success: {
5324                                        label: $ticket.data('bootbox-btn-yes'),
5325                                        className: "btn-success",
5326                                        callback: function () {
5327                                            $('body').animate({scrollTop: $ticket.parents('.cart
5327-step').offset().top}, 500);
5328                                            return;
5329                                        }
5330                                    },
5331                                    danger: {
5332                                        label: $ticket.data('bootbox-btn-no'),
5333                                        callback: function () {
5334                                            $ticket.data('denied', 1);
5335                                            validate.$element.data('ticketBtnOriginalEvent', -1);
5336                                            validate.$element.find('#submit_order_one_page').click();
5337                                        }
5338                                    }
5339                                }
5340                            });
5341                        } else {
5342                            if (formInstance.isValid()) {
5343                                $('#submit_order_one_page').addClass('active');
5344                                nbshopJS.CustomEventTrigger('cart_onepage_submit');
5345                            } else {
5346                                $('#submit_order_one_page').removeClass('active');
5347                            }
5348                        }
5349                    } else {
5350                        if (formInstance.isValid()) {
5351                            $('#submit_order_one_page').addClass('active');
5352                            nbshopJS.CustomEventTrigger('cart_onepage_submit');
5353                        }
5354                    }
5355                });
5356            };
5357        };
5358
5359        var showHideCommentForm = function(){
5360            $('.btn-display-form').click(function(e){
5361
5362                $('.form-comment').toggleClass('active');
5363            });
5364        };
5365
5366        var contact = function(){
5367
5368            var typePerson = function($idElement, validate){
5369                var validateTypePerson = function(thisElement, validate){
5370                    var $legalEntity = $('#contact_form .legal-entity-wrapper');
5371
5372                    if(thisElement.val() == 2){
5373                        $legalEntity.removeClass('hidden');
5374                        //TEXT FILDS
5375                        $legalEntity.find('.form-control').data('parsley-required', 'true');
5376                        $legalEntity.find('.form-control').prop("required", "true");
5377                    }else{
5378                        if(!$legalEntity.hasClass('hidden')){
5379                            $legalEntity.addClass('hidden');
5380                        }
5381                        $legalEntity.find('.form-control').data('parsley-required', 'false');
5382                        $legalEntity.find('.form-control').prop("required", "false");
5383                        $legalEntity.find('.form-control').removeAttr('required');
5384                    }
5385                    validate.$element.parsley().reset();
5386                };
5387                $( "#"+$idElement).change(function() {
5388                    validateTypePerson($(this), validate);
5389                });
5390                if($("#"+$idElement).length > 0){
5391                    validateTypePerson($("#"+$idElement), validate);
5392                }
5393            };
5394
5395            var form = $('#contact_form');
5396            if(!form.length) return;
5397            var validate = form.validate({
5398                formData: { task: 'save' }
5399            }).data('nb.validate');
5400            if($('#contact_type_person').length){
5401                typePerson("contact_type_person", validate);
5402            }
5403            validate.$element.bind('nb.validate.remoteSuccess', function(e){
5404                validate.$element.find('.form-control, .btn').addClass('hidden');
5405                nbshopJS.CustomEventTrigger('contactFormSent');
5406            });
5407        };
5408        var contactV8FormReservation = function(){
5409            var form = $('#contact_v8_form_reservation');
5410            if(!form.length) return;
5411            var validate = form.validate({
5412                formData: { task: 'save' }
5413            }).data('nb.validate');
5414            validate.$element.bind('nb.validate.remoteSuccess', function(e){
5415                validate.$element.find('.form-control, .btn').addClass('hidden');
5416            });
5417        };
5418        var contactAssessment = function(){
5419
5420            //var form = $('#contact_form_13');
5421            var form = $("form[id$='contact_form_13']");
5422            if(!form.length) return;
5423            form.each(function(){
5424                var prefix = $(this).data('prefix');
5425                var contactAssessmentValidate = $(this).validate({
5426                    formData: { ajax: 'yes', task: 'contact_13',url: nb_active_page_url,prefix:prefix }
5427                }).data('nb.validate');
5428
5429                contactAssessmentValidate.$element.bind('nb.validate.remoteSuccess', function(e){
5430                    contactAssessmentValidate.$element.find('.form-group').addClass('hidden');
5431
5432                });
5433            });
5434
5435
5436        };
5437        var travelBooking = function(){
5438            var form = $('.booking-travel-form');
5439            if(!form.length) return;
5440            var validate = form.validate({
5441                formData: { submit: true }
5442            }).data('nb.validate');
5443        };
5444        var preorderForm = function(){
5445            var form = $('#preorder_contact');
5446            if(!form.length) return;
5447            var preorderValidate = form.validate({
5448                formData: { task: 'save', nbAjax: 1, nbTask: '' }
5449            }).data('nb.validate');
5450            preorderValidate.$element.bind('nb.validate.remoteSuccess', function(e){
5451                preorderValidate.$element.find('.form-control, .btn').addClass('hidden');
5452            });
5453        };
5454        var schedulingServicesForm = function(){
5455            var form = $('#scheduling_services');
5456            if(!form.length) return;
5457            var preorderValidate = form.validate({
5458                formData: { task: 'save', nbAjax: 1, nbTask: '' }
5459            }).data('nb.validate');
5460            preorderValidate.$element.bind('nb.validate.remoteSuccess', function(e){
5461                preorderValidate.$element.find('.form-control, .btn').addClass('hidden');
5462            });
5463        };
5464
5465        var bookingOfferForm = function(){
5466            var form = $('#booking_offer');
5467            if(!form.length) return;
5468            var preorderValidate = form.validate({
5469                formData: { task: 'save', nbAjax: 1, nbTask: '' }
5470            }).data('nb.validate');
5471            preorderValidate.$element.bind('nb.validate.remoteSuccess', function(e){
5472                preorderValidate.$element.find('.form-control, .btn').addClass('hidden');
5473            });
5474        };
5475
5476        var schedulingServicesTestRideForm = function(){
5477            var form = $('#contact_scheduling_services_test_ride');
5478            if(!form.length) return;
5479            var sSTRValidate = form.validate({
5480                formData: { task: 'save', nbAjax: 1, nbTask: '' }
5481            }).data('nb.validate');
5482            sSTRValidate.$element.bind('nb.validate.remoteSuccess', function(e){
5483                sSTRValidate.$element.find('.form-control, .btn').addClass('hidden');
5484            });
5485        };
5486
5487        var replacementForm = function(){
5488            var form = $('#replacement_form');
5489            if(!form.length) return;
5490            var sSTRValidate = form.validate({
5491                formData: { task: 'save', nbAjax: 1, nbTask: '' }
5492            }).data('nb.validate');
5493            sSTRValidate.$element.bind('nb.validate.remoteSuccess', function(e){
5494                sSTRValidate.$element.find('.form-control, .btn').addClass('hidden');
5495            });
5496        };
5497
5498
5499        var commercialVehiclesForm = function(){
5500            var form = $('#commercial_vehicles');
5501            if(!form.length) return;
5502            var sSTRValidate = form.validate({
5503                formData: { task: 'save', nbAjax: 1, nbTask: '' }
5504            }).data('nb.validate');
5505            sSTRValidate.$element.bind('nb.validate.remoteSuccess', function(e){
5506                sSTRValidate.$element.find('.form-control, .btn').addClass('hidden');
5507            });
5508        };
5509
5510        var schedulingServicesUsedCars = function(){
5511            var form = $('#contact_form_used_cars');
5512            if(!form.length) return;
5513            var sSTRValidate = form.validate({
5514                formData: { task: 'save', nbAjax: 1, nbTask: '' }
5515            }).data('nb.validate');
5516            sSTRValidate.$element.bind('nb.validate.remoteSuccess', function(e){
5517                sSTRValidate.$element.find('.form-control, .btn').addClass('hidden');
5518            });
5519        };
5520
5521        var contactReservation = function(){
5522            var form = $('#contact_form_reservation');
5523            if(!form.length) return;
5524            var validate = form.validate({
5525                formData: { task: 'save' }
5526            }).data('nb.validate');
5527            validate.$element.bind('nb.validate.remoteSuccess', function(e){
5528                validate.$element.find('.form-control, .btn').addClass('hidden');
5529            });
5530        };
5531        var orderStatus = function(){
5532            var form = $('.view-order-status-form');
5533            if(!form.length) return;
5534            var validate = form.validate({
5535                formData: { task: 'save' }
5536            }).data('nb.validate');
5537            validate.$element.bind('nb.validate.remoteSuccess', function(e){
5538                validate.$element.find('.form-control, .btn').addClass('hidden');
5539            });
5540            validateFormAddBtnLoader(form);
5541        };
5542        var editProfileInfo = function(){
5543            var form = $('.form-edit-profile');
5544            if(!form.length) return;
5545            var validate = form.validate({
5546                formData: { task: 'save' }
5547            }).data('nb.validate');
5548            validate.$element.bind('nb.validate.remoteSuccess', function(e){
5549                // validate.$element.find('.form-control, .btn').addClass('hidden');
5550            });
5551            validateFormAddBtnLoader(form);
5552        };
5553        var orderCancel = function(){
5554            var form = $('#formCancelOrder');
5555
5556            if(!form.length) return;
5557            var validate = form.validate({
5558                formData: { task: 'save' }
5559            }).data('nb.validate');
5560            validate.$element.bind('nb.validate.remoteSuccess', function(e){
5561                // validate.$element.find('.form-control, .btn').addClass('hidden');
5562            });
5563            validateFormAddBtnLoader(form);
5564        };
5565        var landingContactForm = function(){
5566            var form = $('#contact_form_on_click');
5567            if(!form.length) return;
5568            var validate = form.validate({
5569                formData: { ajax: 'yes', task: 'addContactEventSportApplication' }
5570            }).data('nb.validate');
5571            validate.$element.bind('nb.validate.remoteSuccess', function(e){
5572                validate.$element.find('.form-control, .btn, .form-group ').addClass('hidden');
5573            });
5574        };
5575
5576        var changePasswordSSO = function(){
5577            var form = $('#formEditSsoPassword');
5578            if(!form.length) return;
5579            var validate = form.validate({
5580                formData: { task: 'ajax' }
5581            }).data('nb.validate');
5582            validate.$element.bind('nb.validate.remoteSuccess', function(e){
5583                if(window.NB_AJAX_RET){
5584                    if(window.NB_AJAX_RET.flag){
5585                        form.find('.alert').removeClass('hidden').addClass('alert-success');
5586                        validate.$element.find('.form-control, .btn, .form-group ').addClass('hidden');
5587                        form.find('.alert').html(window.NB_AJAX_RET.info);
5588                    }else{
5589                        form.find('.alert').removeClass('hidden').addClass('alert-danger');
5590                        form.find('.alert').html(window.NB_AJAX_RET.info);
5591                    }
5592                }
5593
5594            });
5595        };
5596
5597        var contactFormAjax = function(){
5598            var form = $('#contact_form_ajax');
5599            if(!form.length) return;
5600            var validate = form.validate({
5601                formData: { task: 'saveajaxcontact',ajax:'yes' }
5602            }).data('nb.validate');
5603            validate.$element.bind('nb.validate.remoteSuccess', function(e){
5604                validate.$element.find('.form-group, .btn').addClass('hidden');
5605            });
5606        };
5607
5608        var importProductInCart = function(){
5609
5610            var importProductCartInCart = function(textQuestion){
5611
5612                bootbox.confirm(textQuestion, function(result) {
5613                    if (!result) {
5614                        return;
5615                    }
5616                    $.ajax({
5617                        type: "POST",
5618                        url: nb_active_page_url,
5619                        data: 'nbAjax=-1&ajax=yes&task=import_product_cart_in_cart',
5620                        contentType: "application/x-www-form-urlencoded;charset=UTF-8",
5621                        dataType: 'json',
5622                        success: function(ret){
5623                            if(ret.flag){
5624                                //ovde treba da se redirektuje
5625                                window.location = ret.urlRedirect;
5626                                nbshopJS.CustomEventTrigger('importProductInCart');
5627                            }else{
5628
5629                                $('#cart_import_form .alert').removeClass('hidden');
5630                                $('#cart_import_form .alert').addClass('alert-danger');
5631                                $('#cart_import_form .alert').text(ret.info);
5632                            }
5633                        }
5634                    });
5635
5636                });
5637            };
5638
5639            var resetImportProductCartInSession = function(textQuestion){
5640
5641                bootbox.confirm(textQuestion, function(result) {
5642                    if (!result) {
5643                        return;
5644                    }
5645
5646                    $.ajax({
5647                        type: "POST",
5648                        url: nb_active_page_url,
5649                        data: 'nbAjax=-1&ajax=yes&task=reset_import_product_cart',
5650                        contentType: "application/x-www-form-urlencoded;charset=UTF-8",
5651                        dataType: 'json',
5652                        success: function(ret){
5653                            if(ret.flag){
5654
5655                                reloadImportProductCartInSession();
5656
5657                                $("#cart_import_form .cart-import-form-inputs").removeClass('hidden');
5658                                $("#cart_import_form .confirm-loader").removeClass('active');
5659                                $("#cart_import_form .alert").addClass('hidden');
5660                            }
5661                        }
5662                    });
5663                });
5664            };
5665
5666            var deleteImportProductCartInSession = function(id, textQuestion){
5667
5668                bootbox.confirm(textQuestion, function(result) {
5669                    if (!result) {
5670                        return;
5671                    }
5672
5673                    $.ajax({
5674                        type: "POST",
5675                        url: nb_active_page_url,
5676                        data: 'nbAjax=-1&ajax=yes&task=delete_import_product_cart&id=' + id,
5677                        contentType: "application/x-www-form-urlencoded;charset=UTF-8",
5678                        dataType: 'json',
5679                        success: function (ret) {
5680                            if (ret.flag) {
5681                                reloadImportProductCartInSession();
5682                            }
5683                        }
5684                    });
5685                });
5686            };
5687
5688            var reloadImportProductCartInSession = function(){
5689
5690                var form = $('#cart_import_form');
5691                if(!form.length) return;
5692                var cartImportLoader = $('.cart-import-loader');
5693                cartImportLoader.removeClass('hidden');
5694
5695                $.ajax({
5696                    type: "POST",
5697                    url: nb_active_page_url,
5698                    data: 'nbAjax=-1&ajax=yes&task=reload_import_product_cart',
5699                    contentType: "application/x-www-form-urlencoded;charset=UTF-8",
5700                    dataType: 'json',
5701                    success: function(ret){
5702                        if(ret.flag){
5703                            $('.cart-import-v2').addClass('product-added');
5704                            cartImportLoader.addClass('hidden');
5705
5706                            $('#importProductsCartContent').html(ret.html);
5707
5708                            if(ret.html.trim() == ''){
5709                                $("#cart_import_form .cart-import-form-inputs").removeClass('hidden');
5710                                $('.cart-import-v2').removeClass('product-added');
5711                            }
5712
5713
5714                        }else{
5715                            $('#importProductsCartContent').html("");
5716                        }
5717                    }
5718                });
5719            };
5720
5721            var saveProductCartInSession = function (){
5722                var form = $('#cart_import_form');
5723                if(!form.length) return;
5724
5725                var validate = form.validate({
5726                    formData: {  nbAjax: -1, ajax: 'yes', task: 'import_cart_product' }
5727                }).data('nb.validate');
5728
5729                validate.$element.bind('nb.validate.remoteSuccess', function(e){
5730                    validate.$element.find('.cart-import-form-inputs').addClass('hidden');
5731                    reloadImportProductCartInSession();
5732                });
5733            };
5734
5735            var saveProductCartOnProfileInSession = function(urlPage, textQuestion, orderId, userPublicId){
5736
5737                bootbox.confirm(textQuestion, function(result) {
5738                    if (!result) {
5739                        return;
5740                    }
5741                    $.ajax({
5742                        type: "POST",
5743                        url: urlPage,
5744                        data: 'nbAjax=-1&ajax=yes&task=import_cart_product_on_profile&orderId='+orderId+'&userPublicId='+userPublicId,
5745                        contentType: "application/x-www-form-urlencoded;charset=UTF-8",
5746                        dataType: 'json',
5747                        success: function(ret){
5748                            if(ret.flag){
5749                                //ovde treba da se redirektuje
5750                                window.location = ret.urlRedirect;
5751                            }
5752                        }
5753                    });
5754
5755                });
5756            };
5757
5758            return{
5759                initImportProductInCartForms: function() {
5760                    saveProductCartInSession();
5761                    reloadImportProductCartInSession();
5762                },
5763
5764                saveProductCartInSession : saveProductCartInSession,
5765                saveProductCartOnProfileInSession : saveProductCartOnProfileInSession,
5766                deleteImportProductCartInSession : deleteImportProductCartInSession,
5767                resetImportProductCartInSession : resetImportProductCartInSession,
5768                importProductCartInCart : importProductCartInCart,
5769                importProductCartInCart : importProductCartInCart,
5770            };
5771
5772        };
5773
5774        function mergeStreetNbFields(streetNb, newStreetNb, blockNb, staircase, apartmentNb){
5775            var fieeldValue = '';
5776
5777            if($(newStreetNb).length && $(newStreetNb).val() != ''){
5778                fieeldValue = $(newStreetNb).val();
5779            }
5780            if($(blockNb).length && $(blockNb).val() != ''){
5781                fieeldValue = fieeldValue+' '+$(blockNb).data('field-name')+': '+$(blockNb).val();
5782            }
5783            if($(staircase).length && $(staircase).val() != ''){
5784                fieeldValue = fieeldValue+' '+$(staircase).data('field-name')+': '+$(staircase).val();
5785            }
5786            if($(apartmentNb).length && $(apartmentNb).val() != ''){
5787                fieeldValue = fieeldValue+' '+$(apartmentNb).data('field-name')+': '+$(apartmentNb).val();
5788            }
5789            if(fieeldValue !== ''){
5790                $(streetNb).val(fieeldValue);
5791            }
5792
5793
5794            $(""+newStreetNb+","+blockNb+","+staircase+","+apartmentNb+"").on("keyup", function(){
5795
5796                fieeldValue = '';
5797
5798                if($(newStreetNb).length && $(newStreetNb).val() != ''){
5799                    fieeldValue = $(newStreetNb).val();
5800                }
5801                if($(blockNb).length && $(blockNb).val() != ''){
5802                    fieeldValue = fieeldValue+' '+$(blockNb).data('field-name')+': '+$(blockNb).val();
5803                }
5804                if($(staircase).length && $(staircase).val() != ''){
5805                    fieeldValue = fieeldValue+' '+$(staircase).data('field-name')+': '+$(staircase).val();
5806                }
5807                if($(apartmentNb).length && $(apartmentNb).val() != ''){
5808                    fieeldValue = fieeldValue+' '+$(apartmentNb).data('field-name')+': '+$(apartmentNb).val();
5809                }
5810
5811                $(streetNb).val(fieeldValue);
5812            });
5813        }
5814
5815        mergeStreetNbFields('#profile_street_no','#profile_street_no_new','#profile_block_number','#profile_staircase','#profile_apartment_no');
5816        mergeStreetNbFields('#cart_onepage_street_no','#cart_onepage_street_no_new','#cart_onepage_block_number','#cart_onepage_staircase','#cart_onepage_apartment_no');
5817        mergeStreetNbFields('#cart_onepage_billing_street_no','#cart_onepage_billing_street_no_new','#cart_onepage_billing_block_number','#cart_onepage_billing_staircase','#cart_onepage_billing_apartment_no');
5818        mergeStreetNbFields('#reg_street_no','#reg_street_no_new','#reg_block_number','#reg_staircase','#reg_apartment_no');
5819        mergeStreetNbFields('#reg_page_street_no','#reg_page_street_no_new','#reg_page_block_number','#reg_page_staircase','#reg_page_apartment_no');
5820
5821        return{
5822            initForms: function() {
5823                initiateValidationByDataAttr();
5824                showHideCommentForm();
5825                login();
5826                sendTockenWithoutPassword();
5827                loginWithTockenWithoutPassword();
5828                loginVirtualCard();
5829                lostPassword();
5830                registration();
5831                replacment();
5832                newsletter();
5833                newsletterLanding();
5834                activatePublicUser();
5835                comment();
5836                cart(true); //doto prebacno je da se pozove samo ova forma
5837                contact();
5838                preorderForm();
5839                schedulingServicesForm();
5840                bookingOfferForm();
5841                contactReservation();
5842                orderStatus();
5843                editProfileInfo();
5844                orderCancel();
5845                subscribe();
5846                importProductInCart().initImportProductInCartForms();
5847                productPriceQuery();
5848                productTDSDocumentationQuery();
5849                travelBooking();
5850                contactV8FormReservation();
5851                landingContactForm();
5852                changePasswordSSO();
5853                contactTeamSale();
5854                contactAssessment();
5855                schedulingServicesTestRideForm();
5856                replacementForm();
5857                commercialVehiclesForm();
5858                schedulingServicesUsedCars();
5859                newsletterViber();
5860                itemFormContactParts();
5861                itemFormContactMessage();
5862                itemFormContactMessageNew();
5863                itemFormContactMessageV2();
5864                resetPassword();
5865                lostPasswordSSO();
5866                resetPasswordSSO();
5867                contactFormAjax();
5868            },
5869            cart : cart,
5870            login: login,
5871            sendTockenWithoutPassword: sendTockenWithoutPassword,
5872            loginWithTockenWithoutPassword: loginWithTockenWithoutPassword,
5873            loginVirtualCard: loginVirtualCard,
5874            registration: registration,
5875            importProductInCart: importProductInCart
5876        };
5877    };
5878
5879    var handlePhoneVerification = function(){
5880        var $form = $('#phoneticket_verification_form'),
5881            $ticketModal = $('#phoneticket_verification_modal'),
5882            $btnTrigger = $('.phoneticket-verification-trigger');
5883
5884        if(!$form.length) return;
5885
5886        $btnTrigger.click(function(){
5887
5888            bootbox.dialog({
5889                message: $ticketModal.data('phonetikcet-modal-text'),
5890                title: $ticketModal.data('phonetikcet-modal-title'),
5891                className: "phone-verificatino-modal",
5892                buttons: {
5893                    success: {
5894                        label: $ticketModal.data('phonetikcet-modal-send'),
5895                        className: "btn-success",
5896                        callback: function(){
5897                            var $bootboxConfirm = $('.phone-verificatino-modal'),
5898                                $bootboxConfirmBody = $bootboxConfirm.find('.modal-body');
5899
5900                            var $loaderIcon = '<div class="loader-icon loader-icon-inline loader-icon-xs"></div>';
5901                            $bootboxConfirmBody.html($ticketModal.data('phonetikcet-modal-send-ticket') + '...'+$loaderIcon);
5902
5903                            $.ajax({
5904                                type: "POST",
5905                                url: $btnTrigger.data('remote-url'),
5906                                data: {
5907                                    ajax: 'yes',
5908                                    task: 'createticketcode'
5909                                },
5910                                dataType: 'json',
5911                                success: function(ret){
5912                                    if(!ret.flag){
5913                                        $bootboxConfirmBody.html('<div class="alert alert-danger">'+ret.info+'</div>');
5914                                    } else {
5915                                        $bootboxConfirm.modal('hide');
5916                                        $ticketModal.modal('show');
5917                                    }
5918                                }
5919                            });
5920
5921                            //dont hide the bootbox-confirm modal
5922                            return false;
5923                        }
5924                    },
5925                    danger: {
5926                        label: $ticketModal.data('phonetikcet-modal-cancel'),
5927                        className: "btn-default btn-cancel"
5928                    },
5929                    main: {
5930                        label: $ticketModal.data('phonetikcet-modal-has-ticket'),
5931                        className: "btn-primary btn-ticket",
5932                        callback: function(){
5933                            var $bootboxConfirm = $('.phone-verificatino-modal');
5934                            $bootboxConfirm.modal('hide');
5935                            $ticketModal.modal('show');
5936                        }
5937                    }
5938                }
5939            });
5940
5941            $div = $('<div class="footer-text"></div>');
5942
5943            $div.insertBefore($('.btn-ticket'));
5944
5945            $text = $ticketModal.data('phonetikcet-modal-title-footer');
5946            $div.html($text);
5947        });
5948
5949        var validate = $form.validate({
5950            formData: { ajax: 'yes', task: 'confirmticketcode' }
5951        }).data('nb.validate');
5952
5953        validate.$element.bind('nb.validate.remoteSuccess', function(e){
5954            validate.$element.find('.modal-body :not(.alert), .modal-footer').addClass('hidden');
5955        });
5956    };
5957
5958    var handlePageOnModal = function($elements){
5959        var $pageModal = $('#page_modal');
5960        $($elements).click(function(e){
5961            e.preventDefault();
5962            $.ajax({
5963                type: "POST",
5964                url: nb_active_page_url,
5965                data: {
5966                    nbAjax: 1,
5967                    ajax: 'yes',
5968                    task: 'getpagemodal',
5969                    pageId: $(this).data('remote-modal-page-id')
5970                },
5971                //dataType: 'json',
5972                success: function(ret){
5973                    if(ret){
5974                        $('.modal-content-page').html(ret);
5975                        $pageModal.modal('show');
5976                    }
5977                }
5978            });
5979        });
5980    };
5981
5982    /*
5983     * INVOICE ORDER MODAL
5984     */
5985    var handleInvoiceOrderModal = function(){
5986
5987        $('#invoice_modal_order').on('show.bs.modal', function (e){
5988            var total_price = $('#onepage-product-price-value').text();
5989            total_price = total_price.trim().split(" ");
5990            $('.invoice-amount').text(total_price[0]);
5991            if($("#currency-convert-total-cart").length == 1) {
5992                $('.invoice-amount').text($("#currency-convert-total-cart").val());
5993            }
5994
5995            var addressChecked  = $("#orderAddress").prop("checked");
5996            var firstNameData   = '';
5997            var lastNameData    = '';
5998            var streetData      = '';
5999            var streetNoData    = '';
6000            var cityData        = '';
6001
6002            var billingAddressChecked = $("#cart_onepage_new_billing_address").prop("checked");
6003            if(billingAddressChecked){
6004                firstNameData   = $("#cart_onepage_billing_firstname").val();
6005                lastNameData    = $("#cart_onepage_billing_lastname").val();
6006                streetData      = $("#cart_onepage_billing_street").val();
6007                streetNoData    = $("#cart_onepage_billing_street_no").val();
6008                cityData        = $("#cart_onepage_billing_city").val();
6009            }else{
6010                if($("#p_typeSetUserDataInBillingAddress").length > 0 && $("#p_typeSetUserDataInBillingAddress").val() == "user_data_from_profile"){
6011                    firstNameData   = $("#p_firstname").val();
6012                    lastNameData    = $("#p_lastname").val();
6013                    streetData      = $("#p_street").val();
6014                    streetNoData    = $("#p_street_no").val();
6015                    cityData        = $("#p_city").val();
6016                }else{
6017                    if(addressChecked){
6018                        firstNameData   = $("#cart_onepage_firstname").val();
6019                        lastNameData    = $("#cart_onepage_lastname").val();
6020                        streetData      = $("#cart_onepage_street").val();
6021                        streetNoData    = $("#cart_onepage_street_no").val();
6022                        cityData        = $("#cart_onepage_city").val();
6023                    }else{
6024                        firstNameData   = $("#p_firstname").val();
6025                        lastNameData    = $("#p_lastname").val();
6026                        streetData      = $("#p_street").val();
6027                        streetNoData    = $("#p_street_no").val();
6028                        cityData        = $("#p_city").val();
6029                    }
6030                }
6031            }
6032
6033            var data = {
6034                firstName: firstNameData,
6035                lastName: lastNameData,
6036                street: streetData,
6037                streetNo: streetNoData,
6038                city: cityData
6039            };
6040
6041            var text = "";
6042            text += data.firstName ? data.firstName+" " : "";
6043            text += data.lastName ? data.lastName : "";
6044            text += (data.street || data.streetNo) ? ", " : "";
6045            text += data.street ? data.street+" " : "";
6046            text += data.streetNo ? data.streetNo : "";
6047            text += data.city ? ", "+data.city : "";
6048            $('.invoice-name').text(text);
6049        });
6050    };
6051
6052    var handleTypehead = function(){
6053
6054        function initTypeheadCountriesGeo(elementId, elmentNameId){
6055
6056            var $countryGeo = $('#'+elmentNameId);
6057
6058            if($countryGeo.length == 0 || $countryGeo.is('[readonly]')){
6059                return;
6060            }
6061
6062            if(typeof($countryGeo.data('typehead-url')) == 'undefined' || $countryGeo.data('typehead-url') == null || $countryGeo.data('typehead-url') == ""){
6063                return;
6064            }
6065
6066            var countryBH = new Bloodhound({
6067                datumTokenizer: Bloodhound.tokenizers.obj.whitespace('id'),
6068                queryTokenizer: Bloodhound.tokenizers.whitespace,
6069                limit: 20,
6070                remote: {
6071                    url: $countryGeo.data('typehead-url'),
6072                    filter: function (streets){
6073                        $('#'+elementId).val("-1");
6074                        return $.map(streets.list, function (elem) {
6075                            return elem;
6076                        });
6077                    }
6078                }
6079            });
6080
6081            countryBH.initialize();
6082            $countryGeo.typeahead({
6083                    minLength: 1,
6084                    highlight: true
6085                },
6086                {
6087                    displayKey: 'name',
6088                    source: countryBH.ttAdapter()
6089                }).on('typeahead:selected', function (e, ret){
6090                //set here the id of the selected cities, or whatever needed
6091                $countryGeo.parsley().validate();
6092                $('#'+elementId).val(ret.id);
6093                nbshopJS.CustomEventTrigger('typeheadOptionPickedCountry');
6094            });
6095            $countryGeo.parent().find('.tt-hint').removeAttr('required');
6096        }
6097
6098        function initTypeheadRegions(elementId, elmentNameId, elementCountryGeoId, elementCarrierId,elementRegionExCode,elementRegionCodebookId){
6099
6100            var $region = $('#'+elmentNameId);
6101            if($region.length == 0){
6102                return;
6103            }
6104
6105            if(typeof($region.data('typehead-url')) == 'undefined' || $region.data('typehead-url') == null || $region.data('typehead-url') == ""){
6106                return;
6107            }
6108
6109            var regionBH = new Bloodhound({
6110                datumTokenizer: Bloodhound.tokenizers.obj.whitespace('id'),
6111                queryTokenizer: Bloodhound.tokenizers.whitespace,
6112                limit: 20,
6113                remote: {
6114                    url: $region.data('typehead-url'),
6115                    ajax: {
6116                        data: {
6117                            countryGeoId: function(){
6118                                if (typeof($(elementCountryGeoId).val()) != 'undefined' && $('#'+elementCountryGeoId).val() != null){
6119                                    return $('#'+elementCountryGeoId).val();
6120                                }
6121                                return 0;
6122                            },
6123                            carrierId: function(){
6124                                if (typeof($(elementCarrierId).val()) != 'undefined' && $(elementCarrierId).val() != null){
6125                                    return $(elementCarrierId).val();
6126                                }
6127                                return 0;
6128                            }
6129                        }
6130                    },
6131                    filter: function (streets){
6132                        $('#'+elementId).val("-1");
6133                        return $.map(streets.list, function (elem) {
6134                            return elem;
6135                        });
6136                    }
6137                }
6138            });
6139
6140            regionBH.initialize();
6141            $region.typeahead({
6142                    minLength: 1,
6143                    highlight: true
6144                },
6145                {
6146                    displayKey: 'name',
6147                    source: regionBH.ttAdapter()
6148                }).on('typeahead:selected', function (e, ret){
6149                //set here the id of the selected cities, or whatever needed
6150                $region.parsley().validate();
6151                $('#'+elementId).val(ret.id).trigger('change');
6152                if ( typeof ret.exId !== "undefined" && ret.exId != '' && ret.exId > 0){
6153                    $(elementRegionExCode).val(ret.exId).trigger('change');
6154                }
6155
6156                if ( typeof ret.regionCodebookListId !== "undefined" && ret.regionCodebookListId !== '' && ret.regionCodebookListId > 0){
6157                    $('#'+elementRegionCodebookId).val(ret.regionCodebookListId).trigger('change');
6158                }
6159
6160            });
6161
6162            $region.parent().find('.tt-hint').removeAttr('required');
6163        }
6164
6165        var initTypeheadCities = function(elementId, elmentNameId, elementStreetName, elementPostcode, elementRegionId, elementCarrierId , elementCityExCode, elementCityCodebookId){
6166
6167            var $city = $('#'+elmentNameId);
6168
6169            if($city.length == 0){
6170                return;
6171            }
6172
6173            if(typeof($city.data('typehead-url')) == 'undefined' || $city.data('typehead-url') == null || $city.data('typehead-url') == ""){
6174                return;
6175            }
6176
6177            var cityBH = new Bloodhound({
6178                datumTokenizer: Bloodhound.tokenizers.obj.whitespace('id'),
6179                queryTokenizer: Bloodhound.tokenizers.whitespace,
6180                limit: 150,
6181                remote: {
6182                    url: $city.data('typehead-url'),
6183                    cache: false,
6184                    ajax: {
6185                        data: {
6186                            streetName: function(){
6187                                if (typeof($('#'+elementStreetName).val()) != 'undefined' && $('#'+elementStreetName).val() != null){
6188                                    return $('#'+elementStreetName).val();
6189                                }
6190                                return '';
6191                            },
6192                            regionId: function(){
6193                                if (typeof($('#'+elementRegionId).val()) != 'undefined' && $('#'+elementRegionId).val() != null){
6194                                    return $('#'+elementRegionId).val();
6195                                }
6196                                return 0;
6197                                //return $('#'+elementRegionId).val();
6198                            },
6199                            carrierId: function(){
6200                                if (typeof($(elementCarrierId).val()) != 'undefined' && $(elementCarrierId).val() != null){
6201                                    return $(elementCarrierId).val();
6202                                }
6203                                return 0;
6204                            }
6205                        }
6206                    },
6207                    filter: function (cities){
6208                        $('#'+elementId).val("-1").trigger('change');
6209                        return $.map(cities.list, function (elem) {
6210                            return elem;
6211                        });
6212                    }
6213                }
6214            });
6215
6216            cityBH.initialize();
6217            $city.typeahead({
6218                    minLength: 1,
6219                    highlight: true
6220                },
6221                {
6222                    displayKey: 'name',
6223                    source: cityBH.ttAdapter()
6224                }).on('typeahead:selected', function (e, ret){
6225                //set here the id of the selected cities, or whatever needed
6226
6227                if(!disableStreetClearByCity){
6228                    $('#' + elementStreetName).attr('data-street
6228-name', '').val('');
6229                    $('#' + elementStreetName + '_id').val('-1');
6230                }
6231
6232                $city.parsley().validate();
6233                if ($('#'+elementId).is('#regional_centers_search_id')) storeBycityId(ret.cityId);
6234                $('#'+elementId).val(ret.id).trigger('change');
6235
6236                if ( typeof ret.exId !== "undefined"  && ret.exId != '' && ret.exId > 0){
6237                    $(elementCityExCode).val(ret.exId).trigger('change');
6238                }
6239
6240                if (typeof ret.cityCodebookListId !== "undefined"  && ret.cityCodebookListId != '' && ret.cityCodebookListId > 0){
6241                    $('#'+elementCityCodebookId).val(ret.cityCodebookListId).trigger('change');
6242                }
6243
6244                if(typeaheadStrictType == 'postCodeAutoFillByCity'){
6245                    if(typeof elementPostcode !== "undefined" && $('#'+elementPostcode).length > 0){
6246                        $('#'+elementPostcode).val(ret.postCode).parsley().validate();
6247                    }
6248                } else {
6249                    checkStreetName(elementStreetName, ret.cityId);
6250                }
6251            });
6252
6253            $city.parent().find('.tt-hint').removeAttr('required');
6254        };
6255
6256        function checkStreetName(elementStreetName,cityId){
6257            $.ajax({
6258                type: "POST",
6259                url: nb_active_page_url,
6260                data: {
6261                    nbAjax: '1',
6262                    ajax: 'yes',
6263                    task: 'checks_street_name',
6264                    cityid: cityId
6265                },
6266                dataType: 'json',
6267                success: function (ret) {
6268                    if (ret.flag) {
6269                        if(ret.list.length == 1){
6270                            $('#'+elementStreetName).attr('data-street-name',ret.list[0].name);
6271                            $('#'+elementStreetName+'_id').val(('999999'+ret.list[0].id).slice(-9));
6272                        }
6273                    } else {
6274
6275                    }
6276                }
6277            });
6278        };
6279
6280        var initNBAutocompleteSystem = function(elementId, elmentNameId, elementPrintName){
6281
6282            var $element = $('#'+elmentNameId);
6283
6284            if($element.length == 0){
6285                return;
6286            }
6287
6288            if(typeof($element.data('typehead-url')) == 'undefined' || $element.data('typehead-url') == null || $element.data('typehead-url') == ""){
6289                return;
6290            }
6291
6292            var elementBH = new Bloodhound({
6293                datumTokenizer: Bloodhound.tokenizers.obj.whitespace('id'),
6294                queryTokenizer: Bloodhound.tokenizers.whitespace,
6295                limit: 150,
6296                remote: {
6297                    url: $element.data('typehead-url'),
6298                    ajax: {
6299                        data: {
6300                            rand: function(){
6301                                return Math.random();
6302                            },
6303                            param2: function(){
6304                                return 0;
6305                            }
6306                        }
6307                    },
6308                    filter: function (records){
6309                        $('#'+elementId).val("-1").trigger('change');
6310                        return $.map(records.list, function (elem) {
6311                            return elem;
6312                        });
6313                    }
6314                }
6315            });
6316            elementBH.initialize();
6317            $element.typeahead({
6318                    minLength: 1,
6319                    hint: true,
6320                    highlight: true
6321                },
6322                {
6323                    displayKey: elementPrintName,
6324                    source: elementBH.ttAdapter()
6325                }).on('typeahead:selected', function (e, ret){
6326                //set here the id of the selected records, or whatever needed
6327
6328                $element.parsley().validate();
6329                $('#'+elementId).val(ret.id).trigger('change');
6330                $element.val(ret.showName);
6331                $element.blur(function(){
6332                    $(this).val(ret.showName);
6333                });
6334
6335            });
6336
6337        };
6338
6339        function initTypeheadStreets(elementId, elmentNameId, cityId, postCode, elementCarrierId, elementStreetExCode, elementStreetCodebookId){
6340
6341            var $street = $('#'+elmentNameId);
6342
6343            if($street.length == 0){
6344                return;
6345            }
6346
6347            if(typeof($street.data('typehead-url')) == 'undefined' || $street.data('typehead-url') == null || $street.data('typehead-url') == ""){
6348                return;
6349            }
6350
6351            var streetBH = new Bloodhound({
6352                datumTokenizer: Bloodhound.tokenizers.obj.whitespace('id'),
6353                queryTokenizer: Bloodhound.tokenizers.whitespace,
6354                limit: 20,
6355                remote: {
6356                    url: $street.data('typehead-url'),
6357                    ajax: {
6358                        data: {
6359                            cityid: function(){
6360                                if (typeof($('#'+cityId).val()) != 'undefined' && $('#'+cityId).val() != null){
6361                                    return $('#'+cityId).val();
6362                                }
6363                                return 0;
6364                            },
6365                            carrierId: function(){
6366                                if (typeof($(elementCarrierId).val()) != 'undefined' && $(elementCarrierId).val() != null){
6367                                    return $(elementCarrierId).val();
6368                                }
6369                                return 0;
6370                            }
6371                        }
6372                    },
6373                    filter: function (streets){
6374                        if($street.attr('data-street-name') == '' || $street.attr('data-street-name') === undefined){
6375                            $('#'+elementId).val("-1").trigger('change');
6376                        }
6377                        return $.map(streets.list, function (elem) {
6378                            return elem;
6379                        });
6380                    }
6381                }
6382            });
6383
6384            var streetNameKey = 'name';
6385            if(streetNameWithType){
6386                streetNameKey = 'nameWithType';
6387            }
6388
6389            streetBH.initialize();
6390            $street.typeahead({
6391                    minLength: 1,
6392                    highlight: true
6393                },
6394                {
6395                    displayKey: streetNameKey,
6396                    source: streetBH.ttAdapter()
6397                }).on('typeahead:selected', function (e, ret){
6398                //set here the id of the selected cities, or whatever needed
6399                $street.parsley().validate();
6400                $('#'+elementId).val(ret.id).trigger('change');
6401                if ( typeof ret.exId !== "undefined"  &&  ret.exId != '' && ret.exId > 0){
6402                    $(elementStreetExCode).val(ret.exId).trigger('change');
6403                }
6404
6405                if (typeof ret.streetCodebookListId !== "undefined"  && ret.streetCodebookListId != '' && ret.streetCodebookListId > 0){
6406                    $('#'+elementStreetCodebookId).val(ret.streetCodebookListId).trigger('change');
6407                }
6408
6409                if(typeaheadStrictType == 'postCodeAutoFillByStreet'){
6410                    if($('#'+postCode).length){
6411                        if(ret.postcode && ret.postcode != 'null' && typeof ret.postcode != 'undefined'){
6412                            $('#'+postCode).val(ret.postcode).trigger('change');
6413                            cartChangeCityIdAndPostCodeOnePage($('#'+cityId).val(), ret.postcode);
6414                        } else {
6415                            $('#'+postCode).val('').trigger('change');
6416                            cartChangeCityIdAndPostCodeOnePage(-1, '');
6417                        }
6418                    }
6419                }
6420            });
6421
6422            $street.parent().find('.tt-hint').removeAttr('required');
6423        };
6424
6425        function initTypeheadStreetsNumber(cityId, streetName, streetNumber, postcode){
6426            if(typeaheadStrictType == 'postCodeAutoFillByStreetNumber'){
6427                var additionalStreetNbSufix = '';
6428                if(showStreetAditionalFields){
6429                    additionalStreetNbSufix = '_new';
6430                }
6431                $('#'+streetNumber+additionalStreetNbSufix).keyup(function (){
6432                    var streetNameValue = $('#'+streetName).val();
6433                    if($('#'+streetName).attr('data-street-name') != '' && typeof $('#'+streetName).attr('data-street-name') !== typeof undefined && $('#'+streetName).attr('data-street-name') !== false){
6434                        streetNameValue = $('#'+streetName).attr('data-street-name');
6435                    }
6436                    if($(this).val() != '') {
6437                        $.ajax({
6438                            type: "POST",
6439                            url: nb_active_page_url,
6440                            data: {
6441                                nbAjax: '1',
6442                                ajax: 'yes',
6443                                task: 'search_street_nb',
6444                                streetname: streetNameValue,
6445                                cityid: $('#'+cityId).val(),
6446                                streetnumber: $('#'+streetNumber+additionalStreetNbSufix).val()
6447                            },
6448                            dataType: 'json',
6449                            success: function (ret) {
6450                                if (ret.flag) {
6451                                    $('#'+postcode).val(ret.list[0].postcode);
6452                                    cartChangeCityIdAndPostCodeOnePage($('#'+cityId).val(), ret.list[0].postcode);
6453                                } else {
6454                                    $('#'+postcode).val('');
6455                                    cartChangeCityIdAndPostCodeOnePage(-1, '');
6456                                }
6457                            }
6458                        });
6459                    } else {
6460                        $('#'+postcode).val('');
6461                    }
6462                });
6463            }
6464        };
6465
6466        //ovo
6467        function initTypeheadStreetsNumberBilling(cityId, streetName, streetNumber, postcode){
6468
6469            if(typeaheadStrictType == 'postCodeAutoFillByStreetNumber'){
6470                var additionalStreetNbSufix = '';
6471
6472                $('#'+streetNumber).keyup(function (){
6473                    var streetNameValue = $('#'+streetName).val();
6474                    if($('#'+streetName).attr('data-street-name') != '' && typeof $('#'+streetName).attr('data-street-name') !== typeof undefined && $('#'+streetName).attr('data-street-name') !== false){
6475                        streetNameValue = $('#'+streetName).attr('data-street-name');
6476                    }
6477                    if($(this).val() != '') {
6478                        $.ajax({
6479                            type: "POST",
6480                            url: nb_active_page_url,
6481                            data: {
6482                                nbAjax: '1',
6483                                ajax: 'yes',
6484                                task: 'search_street_nb',
6485                                streetname: streetNameValue,
6486                                cityid: $('#'+cityId).val(),
6487                                streetnumber: $('#'+streetNumber).val()
6488                            },
6489                            dataType: 'json',
6490                            success: function (ret) {
6491                                if (ret.flag) {
6492                                    $('#'+postcode).val(ret.list[0].postcode);
6493                                    cartChangeCityIdAndPostCodeOnePage(cityId, postcode);
6494                                } else {
6495                                    $('#'+postcode).val('');
6496                                    cartChangeCityIdAndPostCodeOnePage(-1, '');
6497                                }
6498                            }
6499                        });
6500                    } else {
6501                        $('#'+postcode).val('');
6502                    }
6503                });
6504            }
6505        };
6506
6507        function initTypeheadNewAddressCart(elementId, elmentNameId){
6508
6509            var $newAddressList = $('#'+elmentNameId), $newAddressListId = $('#'+elementId);
6510
6511            if(typeof($newAddressListId.data('type-selection-new-address')) != 'undefined' && $newAddressListId.data('type-selection-new-address') == 'user_public_new_address_select'){
6512
6513                if($newAddressListId.length == 0){
6514                    return;
6515                }
6516
6517                $newAddressListId.on('change', function() {
6518                    getNewUserAddress($newAddressListId.val());
6519                });
6520
6521                var getNewUserAddress = function(userAddressId){
6522                    $.ajax({
6523                        type: "POST",
6524                        url: getCartPageUrl(),
6525                        data: {
6526                            ajax: 'yes',
6527                            task: 'getnewuseraddress',
6528                            userAddressId: userAddressId,
6529                            countryGeoId : function(){
6530                                if (typeof($('#cart_onepage_country_geo_id').val()) != 'undefined' && $('#cart_onepage_country_geo_id').val() != null && $('#cart_onepage_country_geo_id').val() > 0){
6531                                    return $('#cart_onepage_country_geo_id').val();
6532                                }
6533                                return 0;
6534                            },
6535                        },
6536                        dataType: 'json',
6537                        success: function(ret){
6538                            if(ret.flag){
6539
6540                                if(ret.userPublicNewAddress){
6541
6542                                    $('#cart_onepage_firstname').val(ret.userPublicNewAddress.firstname);
6543                                    $('#cart_onepage_lastname').val(ret.userPublicNewAddress.lastname);
6544
6545                                    if($('#cart_onepage_company_name').length > 0){
6546                                        $('#cart_onepage_company_name').val(ret.userPublicNewAddress.lastname);
6547                                    }
6548
6549                                    if($('#cart_onepage_company_shortname').length > 0){
6550                                        $('#cart_onepage_company_shortname').val(ret.userPublicNewAddress.firstname);
6551                                    }
6552
6553                                    $('#cart_onepage_email').val(ret.userPublicNewAddress.email);
6554                                    $('#cart_onepage_phone').val(ret.userPublicNewAddress.phone);
6555
6556                                    if($('#cart_onepage_company_pib').length > 0){
6557                                        $('#cart_onepage_company_pib').val(ret.userPublicNewAddress.personalNumber);
6558                                    }
6559
6560                                    if($('#cart_onepage_company_id_number').length > 0){
6561                                        $('#cart_onepage_company_id_number').val(ret.userPublicNewAddress.idNumber);
6562                                    }
6563
6564                                    if($('#cart_onepage_chief_executive_officer').length > 0){
6565                                        $('#cart_onepage_chief_executive_officer').val(ret.userPublicNewAddress.chiefExecutiveOfficer);
6566                                    }
6567
6568                                    if($('#cart_onepage_street').length > 0){
6569                                        $('#cart_onepage_street').val(ret.userPublicNewAddress.street);
6570                                    }
6571
6572                                    if($('#cart_onepage_street_id').length > 0){
6573                                        $('#cart_onepage_street_id').val(ret.userPublicNewAddress.streetId);
6574                                    }
6575
6576                                    if($('#cart_onepage_street_no').length > 0){
6577                                        $('#cart_onepage_street_no').val(ret.userPublicNewAddress.street_no);
6578                                    }
6579
6580                                    if($('#cart_onepage_city').length > 0){
6581                                        $('#cart_onepage_city').val(ret.userPublicNewAddress.city);
6582                                    }
6583
6584                                    if($('#cart_onepage_city_id').length > 0){
6585                                        $('#cart_onepage_city_id').val(ret.userPublicNewAddress.cityId);
6586                                    }
6587
6588                                    if($('#cart_onepage_postcode').length > 0){
6589                                        $('#cart_onepage_postcode').val(ret.userPublicNewAddress.postcode);
6590                                    }
6591
6592                                    if($('#cart_onepage_region').length > 0){
6593                                        $('#cart_onepage_region').val(ret.userPublicNewAddress.region);
6594                                    }
6595
6596                                    if($('#cart_onepage_region_id').length > 0){
6597                                        $('#cart_onepage_region_id').val(ret.userPublicNewAddress.regionId);
6598                                    }
6599
6600                                }else{
6601                                    $('#cart_onepage_firstname').val("");
6602                                    $('#cart_onepage_lastname').val("");
6603
6604                                    if($('#cart_onepage_company_name').length > 0){
6605                                        $('#cart_onepage_company_name').val("");
6606                                    }
6607
6608                                    if($('#cart_onepage_company_
6608shortname').length > 0){
6609                                        $('#cart_onepage_company_shortname').val("");
6610                                    }
6611
6612                                    $('#cart_onepage_email').val("");
6613                                    $('#cart_onepage_phone').val("");
6614
6615                                    if($('#cart_onepage_company_pib').length > 0){
6616                                        $('#cart_onepage_company_pib').val("");
6617                                    }
6618
6619                                    if($('#cart_onepage_company_id_number').length > 0){
6620                                        $('#cart_onepage_company_id_number').val("");
6621                                    }
6622
6623                                    if($('#cart_onepage_chief_executive_officer').length > 0){
6624                                        $('#cart_onepage_chief_executive_officer').val("");
6625                                    }
6626
6627                                    if($('#cart_onepage_street').length > 0){
6628                                        $('#cart_onepage_street').val("");
6629                                    }
6630
6631                                    if($('#cart_onepage_street_id').length > 0){
6632                                        $('#cart_onepage_street_id').val("");
6633                                    }
6634
6635                                    if($('#cart_onepage_street_no').length > 0){
6636                                        $('#cart_onepage_street_no').val("");
6637                                    }
6638
6639                                    if($('#cart_onepage_city').length > 0){
6640                                        $('#cart_onepage_city').val("");
6641                                    }
6642
6643                                    if($('#cart_onepage_city_id').length > 0){
6644                                        $('#cart_onepage_city_id').val("");
6645                                    }
6646
6647                                    if($('#cart_onepage_postcode').length > 0){
6648                                        $('#cart_onepage_postcode').val("");
6649                                    }
6650
6651                                    if($('#cart_onepage_region').length > 0){
6652                                        $('#cart_onepage_region').val("");
6653                                    }
6654
6655                                    if($('#cart_onepage_region_id').length > 0){
6656                                        $('#cart_onepage_region_id').val("");
6657                                    }
6658                                }
6659                            }
6660                        }
6661                    });
6662                };
6663
6664                if($newAddressListId.val() != '' && $newAddressListId.val() > 0){
6665                    getNewUserAddress($newAddressListId.val());
6666                }
6667
6668            }else{
6669
6670                if($newAddressList.length == 0){
6671                    return;
6672                }
6673
6674                if(typeof($newAddressList.data('typehead-url')) == 'undefined' || $newAddressList.data('typehead-url') == null || $newAddressList.data('typehead-url') == ""){
6675                    return;
6676                }
6677
6678                var streetBH = new Bloodhound({
6679                    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('id'),
6680                    queryTokenizer: Bloodhound.tokenizers.whitespace,
6681                    limit: 20,
6682                    remote: {
6683                        url: $newAddressList.data('typehead-url'),
6684                        filter: function (newAddress){
6685                            $('#'+elementId).val("-1").trigger('change');
6686                            if(typeof newAddress.list != 'undefined'){
6687                                return $.map(newAddress.list, function (elem) {
6688                                    return elem;
6689                                });
6690                            }else {
6691                                return "";
6692                            }
6693                        }
6694                    }
6695                });
6696
6697                streetBH.initialize();
6698                $newAddressList.typeahead({
6699                        minLength: 1,
6700                        highlight: true
6701                    },
6702                    {
6703                        displayKey: 'name',
6704                        source: streetBH.ttAdapter()
6705                    }).on('typeahead:selected', function (e, ret){
6706                    //set here the id of the selected cities, or whatever needed
6707                    $newAddressList.parsley().validate();
6708                    $('#'+elementId).val(ret.id).trigger('change');
6709
6710                    $('#cart_onepage_firstname').val(ret.name);
6711                    $('#cart_onepage_lastname').val(ret.internalName);
6712
6713                    if($('#cart_onepage_company_name').length > 0){
6714                        $('#cart_onepage_company_name').val(ret.name);
6715                    }
6716
6717                    if($('#cart_onepage_company_shortname').length > 0){
6718                        $('#cart_onepage_company_shortname').val(ret.internalName);
6719                    }
6720
6721                    $('#cart_onepage_email').val(ret.email);
6722                    $('#cart_onepage_phone').val(ret.phone);
6723
6724                    //$('#cart_onepage_country_geo').val(ret.street);
6725                    //$('#cart_onepage_country_geo_id').val(ret.street);
6726
6727                    $('#cart_onepage_city').val(ret.cityName);
6728                    $('#cart_onepage_city_id').val(ret.cityId);
6729
6730                    $('#cart_onepage_street').val(ret.street);
6731                    $('#cart_onepage_street_id').val(ret.streetId);
6732
6733                    $('#cart_onepage_postcode').val(ret.postCode);
6734
6735                    if($('#cart_onepage_company_pib').length > 0){
6736                        $('#cart_onepage_company_pib').val("");
6737                    }
6738
6739                    if($('#cart_onepage_company_id_number').length > 0){
6740                        $('#cart_onepage_company_id_number').val("");
6741                    }
6742
6743                    if($('#cart_onepage_chief_executive_officer').length > 0){
6744                        $('#cart_onepage_chief_executive_officer').val("");
6745                    }
6746
6747                });
6748
6749                $newAddressList.parent().find('.tt-hint').removeAttr('required');
6750            }
6751
6752        }
6753
6754
6755
6756        return {
6757            init: function(){
6758                initTypeheadCities('regional_centers_search_id', 'regional_centers_search');
6759                initTypeheadProductsReclamation('.reclamation-product-code');
6760
6761                initTypeheadCities('cart_onepage_city_id', 'cart_onepage_city', 'cart_onepage_street', 'cart_onepage_postcode', 'cart_onepage_region_id', 'input[type="radio"][name="carierId"]:checked','#cart_onepage_city_ex_code','cart_onepage_city_codebook_id');
6762                initTypeheadCities('cart_onepage_billing_city_id', 'cart_onepage_billing_city', 'cart_onepage_billing_street', '', 'cart_onepage_billing_region_id');
6763                initTypeheadCities('reg_city_id', 'reg_city', 'reg_address', 'reg_postcode', 'reg_region_id');
6764                initTypeheadCities('reg_page_city_id', 'reg_page_city', 'reg_page_address', 'reg_page_postcode', 'reg_page_region_id');
6765                initTypeheadCities('profile_city_id', 'profile_city', 'profile_address', 'profile_postcode', 'profile_region_id');
6766                initTypeheadCities('subscribe_city_id', 'subscribe_city');
6767                initTypeheadCities('preorder_city_id', 'preorder_city', 'preorder_address', 'preorder_postcode', 'preorder_region_id');
6768                initTypeheadCities('profile_add_shipment_delivery_city_id', 'profile_add_shipment_delivery_city', 'profile_add_shipment_delivery_address', 'profile_add_shipment_delivery_postcode', 'profile_add_shipment_delivery_region_id');
6769                initTypeheadCities('shipment_delivery_address_city_id', 'shipment_delivery_address_city', 'shipment_delivery_address_address', 'shipment_delivery_address_postcode', 'shipment_delivery_address_id');
6770
6771                initTypeheadCities('city_id', 'city', 'street', 'zipcode', 'street_id');
6772                initTypeheadCities('city_shipment_id', 'city_shipment', 'street_shipment', 'zipcode', 'street_shipment_id');
6773                initTypeheadCities('enrollment_companyheadquarter_id', 'enrollment_companyheadquarter', 'enrollment_companyaddress', 'enrollment_companypostnumber', 'enrollment_companyaddress_id');
6774                initTypeheadCities('enrollment_deliveryplace_id', 'enrollment_deliveryplace', 'enrollment_deliveryaddress', 'enrollment_deliverypostnumber', 'enrollment_deliveryaddress_id');
6775                initTypeheadCities('contact_upload_file_city_id', 'contact_upload_file_city', 'contact_upload_file_address', 'contact_upload_file_postcode', 'contact_upload_file_region_id');
6776                initTypeheadCities('loyalty_card_online_request_city_id', 'loyalty_card_online_request_city', 'loyalty_card_online_request_street', 'loyalty_card_online_request_postcode', '');
6777
6778                initTypeheadStreets('street_id', 'street');
6779                initTypeheadStreets('street_shipment_id', 'street_shipment', 'city_shipment_id', 'zipcode');
6780                initTypeheadStreets('enrollment_companyaddress_id', 'enrollment_companyaddress');
6781                initTypeheadStreets('reg_page_region_id', 'reg_page_region', 'reg_page_country_geo_id');
6782                initTypeheadStreets('profile_region_id', 'profile_region', 'profile_country_geo_id');
6783                initTypeheadStreets('loyalty_card_online_request_street_id', 'loyalty_card_online_request_street', 'loyalty_card_online_request_city_id', 'loyalty_card_online_request_postcode');
6784                initTypeheadStreets('profile_add_shipment_delivery_address_id', 'profile_add_shipment_delivery_address', 'profile_add_shipment_delivery_city_id', 'profile_add_shipment_delivery_postcode');
6785
6786                initTypeheadStreets('reg_page_address_id', 'reg_page_address', 'reg_page_city_id', 'reg_page_postcode');
6787                initTypeheadStreets('reg_address_id', 'reg_address', 'reg_city_id', 'reg_postcode');
6788                initTypeheadStreets('profile_address_id', 'profile_address','profile_city_id', 'profile_postcode');
6789                initTypeheadStreets('enrollment_deliveryaddress_id', 'enrollment_deliveryaddress','enrollment_deliveryplace_id', 'enrollment_deliverypostnumber');
6790                initTypeheadStreets('cart_onepage_street_id', 'cart_onepage_street', 'cart_onepage_city_id', 'cart_onepage_postcode', 'input[type="radio"][name="carierId"]:checked','#cart_onepage_street_ex_code','cart_onepage_street_codebook_id');
6791                initTypeheadStreets('cart_onepage_billing_street_id', 'cart_onepage_billing_street', 'cart_onepage_billing_city_id', 'cart_onepage_billing_postcode');
6792                initTypeheadStreets('street_id', 'street', 'city_id', 'zipcode');
6793
6794                initTypeheadStreets('contact_upload_file_address_id', 'contact_upload_file_address', 'contact_upload_file_city_id', 'contact_upload_file_postcode');
6795
6796                initTypeheadStreetsNumber('reg_page_city_id','reg_page_address','reg_page_street_no', 'reg_page_postcode');
6797                initTypeheadStreetsNumber('reg_city_id','reg_address','reg_street_no', 'reg_postcode');
6798                initTypeheadStreetsNumber('cart_onepage_city_id','cart_onepage_street','cart_onepage_street_no', 'cart_onepage_postcode');
6799                initTypeheadStreetsNumberBilling('cart_onepage_billing_city_id','cart_onepage_billing_street','cart_onepage_billing_street_no', 'cart_onepage_billing_postcode');
6800                initTypeheadStreetsNumber('profile_city_id','profile_address','profile_street_no', 'profile_postcode');
6801
6802
6803                initTypeheadRegions('cart_onepage_region_id', 'cart_onepage_region', 'cart_onepage_country_geo_id', 'input[type="radio"][name="carierId"]:checked','#cart_onepage_region_ex_code','cart_onepage_region_codebook_id');
6804                initTypeheadRegions('reg_region_id', 'reg_region', 'reg_country_geo_id');
6805                initTypeheadCountriesGeo('cart_onepage_country_geo_id', 'cart_onepage_country_geo');
6806                initTypeheadCountriesGeo('reg_country_geo_id', 'reg_country_geo');
6807                initTypeheadCountriesGeo('reg_page_country_geo_id', 'reg_page_country_geo');
6808                initTypeheadCountriesGeo('profile_country_geo_id', 'profile_country_geo');
6809                initTypeheadNewAddressCart('cart_onepage_new_address_list_id', 'cart_onepage_new_address_list');
6810                //inicijalizacija svih autocomplete opcija
6811                initNBAutocompleteSystem('admin_userPublicId', 'admin_userPublic', 'name');
6812                initNBAutocompleteSystem('register_devices_product_id', 'register_devices_product', 'name');
6813                initNBAutocompleteSystem('mashine_service_product_id', 'mashine_service_product', 'name');
6814
6815                var currierPacketomat = $('.carrier-wrapper .parcelmachine-wrapper');
6816                var currierPacketomatId;
6817                var packetomatCity,packetomatCityId,parcelMachinePostcode;
6818                if(currierPacketomat.length > 0 ){
6819                    currierPacketomatId = currierPacketomat.data('wrappercarrierid');
6820                    currierPacketomat.each(function(){
6821                        currierPacketomatId = $(this).data('wrappercarrierid');
6822                        packetomatCity = 'cart_onepage_parcelMachine_city_'+currierPacketomatId;
6823                        packetomatCityId = 'cart_onepage_parcelMachine_city_id_'+currierPacketomatId;
6824                        parcelMachinePostcode = 'cart_onepage_parcelMachine_postcode_'+currierPacketomatId;
6825                        console.log(currierPacketomatId);
6826                        initTypeheadCities(packetomatCityId, packetomatCity,null,parcelMachinePostcode);
6827                    });
6828                    //data-wrapperCarrierId
6829                    //cart_onepage_parcelMachine_city_14
6830                    //cart_onepage_parcelMachine_city_id_14
6831
6832                }
6833            },
6834            initTypeheadRegions : initTypeheadRegions,
6835            initTypeheadCities : initTypeheadCities,
6836            initTypeheadStreets : initTypeheadStreets
6837        }
6838    };
6839
6840    function storeBycityId(cityId){
6841        $.ajax({
6842            type: "POST",
6843            data: 'nbAjax=1&task=storeBycityId&cityId='+cityId,
6844            contentType: "application/x-www-form-urlencoded;charset=UTF-8",
6845            dataType: 'json',
6846            success: function(ret) {
6847                if(ret.flag){
6848                    // popuni podatke u modal box-u
6849                    populateRegionalCenterModal(ret);
6850
6851                    // prikazi modal sa podacima o izabranom regionalnom centru
6852                    $('#regional_center_modal').modal('show');
6853                }
6854            }
6855        });
6856    }
6857
6858    /**
6859     *
6860     * Funkcija popunjava modal box odgovarajucim podacima o regionalnom centru.
6861     * @param response { Object } Sadrzi informacije o regionalnom centru.
6862     *
6863     */
6864    function populateRegionalCenterModal(response) {
6865        try {
6866            // elementi u koje treba uneti odgovarajuci sadrzaj
6867            var $contentHolders = $('#regional_center_modal .nb-insert-content');
6868            var storeDetails = response.store.rows;
6869
6870            if (!storeDetails.length) return false;
6871            storeDetails = storeDetails[0];
6872
6873            $contentHolders.each(function(index, value) {
6874                // if (this.id === 'categories') return this.textContent = checkCategory(this.id);
6875                if (this.id === 'phone') this.href = 'tel:' + storeDetails[this.id];
6876                if (this.id === 'email') this.href = 'mailto:' + storeDetails[this.id];
6877
6878                this.innerHTML = storeDetails[this.id];
6879
6880                if (!storeDetails[this.id]) this.closest('.item').remove();
6881            });
6882        } catch (error) {
6883            console.log(error);
6884        }
6885    }
6886
6887    /**
6888     *
6889     * Pomocna funkcija koja prihvata indeks kategorije i vraca njeno ime.
6890     * @param categoryId { Number } indeks kategorije
6891     * returns { String } ime kategorije
6892     */
6893    function checkCategory(categoryId) {
6894        switch (categoryId) {
6895            case 1:
6896                return 'Centar';
6897            case 2:
6898                return 'Paketomat';
6899            default:
6900                return 'Paket Shop';
6901        }
6902    }
6903
6904    /*
6905     * POPOVERS
6906     * Description: Tooltips possibly containing html, images etc.
6907     * Plugins used: Bootstrap's Popover
6908     */
6909    var handlePopover = function($elements){
6910        $elements.each(function(){
6911            var $el = $(this);
6912            $el.popover({
6913                html: true,
6914                trigger: $el.data('trigger') ? $el.data('trigger') : 'hover',
6915                placement: $el.data('placement') ? $el.data('placement') : 'bottom',
6916                content: $el.find('.popover-content').length ? $el.find('.popover-content').html() : null
6917            });
6918        });
6919    };
6920
6921    var handleShowHideElements = function(){
6922        //add class c_element on element you want to click
6923        //that element must have data-element attr with name of the class tou want to show/hide
6924        //on click element gets/removes hidden class
6925        var c_elements = $('.c_element');
6926        $(c_elements).on('click', function() {
6927            var cls = $(this).data('element');
6928            $('.'+cls).toggleClass('hidden');
6929        });
6930
6931    };
6932
6933    var handleFileSelect = function($file){
6934
6935        $file.on('change', function(){
6936            var input = $(this),
6937                numFiles = input.get(0).files ? input.get(0).files.length : 1,
6938                label = input.val().replace(/\\/g, '/').replace(/.*\//, '');
6939            input.trigger('fileselect', [numFiles, label]);
6940        });
6941
6942        $file.on('fileselect', function(event, numFiles, label){
6943            var input = $(this).parents('.input-group').find(':text'),
6944                log = numFiles > 1 ? numFiles + ' files selected' : label;
6945            if(input.length){
6946                input.val(log);
6947            }
6948        });
6949    }
6950
6951    var handleBrendLettersFilter = function(){
6952        var wrapper         = $('.list-letters-wrapper');
6953        var ltr             = $('.list-letters .item');
6954        var itmletter       = $('.letters-inline .item');
6955        if(itmletter.length === 0 ){
6956            return false;
6957        }
6958        itmletter.click(function(){
6959            var cl = $(this).data('letter');
6960            var $this = $(this);
6961
6962            ltr.removeClass('hidden');
6963            ltr.removeClass('show');
6964            if(clickedLetter != cl){
6965                clickedLetter = cl;
6966                itmletter.removeClass('active');
6967                $this.addClass('active');
6968                ltr.each(function() {
6969
6970                    if(!$(this).hasClass(cl)) {
6971                        $(this).addClass('hidden');
6972                        //app.scroll.hide($(this).find('.item-list-wrapper.setscrolls'));
6973                        //app.scroll.remove($(this).find('.content'));
6974                    }else{
6975                        //app.scroll.remove($(this).find('.content'));
6976                        //app.scroll.set($(this).find('.content'));
6977                    }
6978                });
6979            } else {
6980                $this.removeClass('active');
6981                ltr.each(function() {
6982                    $(this).removeClass('hidden');
6983                    //app.scroll.set($(this).find('.content'));
6984                    //app.scroll.resize($(this).find('.content'));
6985                });
6986                clickedLetter = false;
6987            }
6988        });
6989
6990    };
6991
6992    var handleHTMLEditorTableResponsive = function(){
6993        var tabela = $('.post-content').find('table');
6994        $(tabela).each(function(){
6995            if ($(tabela).parent('.table-responsive').length == 0) {
6996                $(tabela).wrap( "<div class='table-responsive'></div>" );
6997            }
6998        })
6999    };
7000
7001    var handleMapStoreShowHide = function(type){
7002        var $elementSearch = $('.storelocator-panel'),
7003            $elementMap = $('.stores-map');
7004
7005    };
7006    var reinitOpenslider = function(slider,options){
7007        /*Reinicijalizacija glavnog slidera*/
7008
7009        var $mainslider = slider;
7010        var $options = options;
7011
7012        if($mainslider.length === 0 || !$options){
7013            return
7014        }
7015
7016        var currentSlide = $mainslider.slick('slickCurrentSlide');
7017        $mainslider.slick('unslick');
7018        $options.initialSlide = currentSlide;
7019        nbshopJS.initSlider($mainslider, $options);
7020    };
7021
7022    var handleCountry_lang = function(){
7023        var $wrapper = $('.country-wrapper'),
7024            $buttons = $('.country-dropdown, .country-button, .country-close'),
7025            $countrydropdown = $('.country-dropdown'),
7026            $results = $('.country-results'),
7027            $image = $('.dropdown-button img'),
7028            $header = $('.header'),
7029            $hideElements = $('.hidden-fullscreen:not(.nav-main-wrapper)');
7030        $nicescroll = $('.nicescroll-rails');
7031
7032        $buttons.click(function(){
7033            $('body').scrollTop();
7034            $countrydropdown.toggleClass('active');
7035            $image.toggleClass('hidden');
7036            $wrapper.toggleClass('hidden');
7037            $hideElements.toggleClass('hidden');
7038            $nicescroll.toggleClass('hidden');
7039            var headerHeight = $header.outerHeight(true);
7040            $wrapper.height(app.height() - headerHeight + 1);
7041            $results.height(app.height() - headerHeight - 50);
7042            reinitOpenslider($('.main-slider > .slider-init'),window.mainslideroptions);
7043
7044        });
7045    };
7046
7047    var handleProductDetailsQuickViewOnModal = function($elements){
7048        // console.log($elements)
7049
7050        var $productDetailsQuickViewModal = $('#product_details_modal');
7051        console.log($productDetailsQuickViewModal)
7052            // console.log($(".showProductDetailsQuickViewOnModal"))
7053            $($elements).click(function(e){
7054                e.preventDefault();
7055                var $modalContentProductDetailsQuickView = $('.modal-content-product-details-quick-view'),
7056                    $loaderWrapper = $modalContentProductDetailsQuickView.find('.loader-wrapper');
7057                $loaderWrapper.removeClass('hidden');
7058                $modalContentProductDetailsQuickView.find('.content-product-details-quick-view').html("");
7059                $productDetailsQuickViewModal.modal('show');
7060                $.ajax({
7061                    type: "POST",
7062                    url: $(this).data('remote-modal-quick-wiew-product-permalink'),
7063                    data: {
7064                        //iframeView: 1,
7065                        returnType: 'json',
7066                    },
7067                    dataType: 'json',
7068                    success: function(ret){
7069                        if(ret.flag){
7070                            $loaderWrapper.addClass('hidden');
7071                            $modalContentProductDetailsQuickView.find('.content-product-details-quick-view').html(ret.info);
7072                            //$modalContentProductDetailsQuickView.html(ret);
7073                            handleAppearing($('.appear'));
7074                            handleProductDetails();
7075                            handleRelatedProductsSlider();
7076                            handleFavoriteProduct($('#product_details_modal .favorite'));
7077                            handleLowerPriceProduct($('.action-lowerprice'));
7078                            handleLowerPriceProductCombinations($('.action-lowerprice-combinatios'));
7079                            nbshopJS.CustomEventTrigger('productQuickViewOnModal', ret.info);
7080                            if($(".counter").length){
7081                                nbshopJS.handleSliderCountdown($(".counter"));
7082                            }
7083                            nbshopJS.productQuickBuyBobble();
7084                            productQuantityParentClass('#product_details_modal');
7085                            handleReadMore($(".read-more-btn"));
7086                        }
7087                    }
7088                });
7089            });
7090    };
7091
7092    var handleProductQueryViewOnModal = function($elements){
7093
7094        var $productQueryViewModal = $('#product-query-modal');
7095        $($elements).click(function(e){
7096            e.preventDefault();
7097
7098            // Reset forme
7099            $("#product-query-modal .modal-content-product-query .alert").html('').addClass('hidden');
7100            $("#product-query-modal .modal-content-product-query .form-inputs ").removeClass('hidden');
7101            $("#product-query-modal .modal-content-product-query-footer").removeClass('hidden');
7102
7103            var $modalContentProductQueryView = $('.modal-content-product-query'),
7104                $modalContentProductQueryViewFooter = $('.modal-content-product-query-footer'),
7105                $loaderWrapper = $modalContentProductQueryView.find('.loader-wrapper');
7106            $loaderWrapper.removeClass('hidden');
7107
7108            $modalContentProductQueryView.find('#product_query_firstname').val("");
7109            $modalContentProductQueryView.find('#product_query_lastname').val("");
7110            $modalContentProductQueryView.find('#product_query_email').val("");
7111            $modalContentProductQueryView.find('#product_query_phone').val("");
7112            $modalContentProductQueryView.find('#product_query_message').val("");
7113            $modalContentProductQueryView.find('#product_query_cat').val("");
7114            $modalContentProductQueryView.find('#product_query_pname').val("");
7115            $modalContentProductQueryView.find('#product_query_anti_spam').val(-1);
7116
7117            $productQueryViewModal.modal('show');
7118
7119            $.ajax({
7120                type: "POST",
7121                url: nb_active_page_url,
7122                data: {
7123                    nbAjax: 1,
7124                    flag: "yes",
7125                    ajax: "yes",
7126                    task: "getproductdataforquery",
7127                    productId: $(this).data('product-query-id')
7128                },
7129                dataType: 'json',
7130                success: function(ret){
7131                    if(ret.flag){
7132
7133                        $modalContentProductQueryView.find('#product_query_cat').val(ret.product.productGroupName);
7134                        $modalContentProductQueryView.find('#product_query_pname').val(ret.product.name);
7135                        $modalContentProductQueryViewFooter.find('#product_query_product_id').val(ret.product.id);
7136                        $modalContentProductQueryViewFooter.find('#product_query_combination_id').val(-1);
7137
7138                        $loaderWrapper.addClass('hidden');
7139                        $modalContentProductQueryView.find('.modal
7139-content-product-query').html(ret.info);
7140
7141                    }
7142                }
7143            });
7144        });
7145
7146        //todo product for query
7147        var productListQuery = function(){
7148            var form = $('#product_query_form');
7149            if(!form.length) return;
7150
7151            var subscribeValidate = form.validate({
7152                formData: { ajax: 'yes', task: 'productquery' }
7153            }).data('nb.validate');
7154
7155            subscribeValidate.$element.bind('nb.validate.remoteSuccess', function(e){
7156                subscribeValidate.$element.find('.form-inputs').addClass('hidden');
7157                subscribeValidate.$element.find('.modal-footer').addClass('hidden');
7158                nbshopJS.CustomEventTrigger('productquerySuccess');
7159            });
7160        };
7161
7162        productListQuery();
7163    };
7164
7165    let validateFormAddBtnLoader = (form) => {
7166        let submitBtn = form.find('.btn-success.confirm-loader');
7167
7168        if(form !== "undefined"){
7169            console.log(typeof form)
7170
7171            submitBtn.on('click', function(e) {
7172                const isValid = form.parsley().isValid();
7173
7174                if (isValid) {
7175                    console.log('Forma je validna.');
7176                    submitBtn.addClass('active');
7177                } else {
7178                    console.log('Forma nije validna.');
7179                }
7180            });
7181        }
7182    }
7183
7184    function toggleAttributesItems() {
7185        $('.quick-view-category-wrapper .product-attributes .size-item').click(function () {
7186            if(!$(this).hasClass('active')){
7187                $('.quick-view-category-wrapper .product-attributes .size-item').each(function () {
7188                    $(this).removeClass('active');
7189                })
7190                $('.quick-view-category-wrapper .product-attributes-wrapper .item').each(function () {
7191                    $(this).removeClass('selected');
7192                })
7193                $(this).addClass('active');
7194            }
7195            var productId = $(this).data('product-id');
7196            $('.quick-view-category-wrapper .product-attributes-wrapper').each(function () {
7197                if($(this).data('product-id') == productId){
7198                    $(this).removeClass('hidden');
7199                } else {
7200                    $(this).addClass('hidden');
7201                }
7202            });
7203            calcPrice();
7204        });
7205    }
7206
7207    function calcPrice() {
7208        var sumPrice = 0;
7209        var currency = '';
7210        if(typeof window.nbMetricObject.NB_METRIC_DATA.currency  !== "undefined"){
7211            currency = "<span>"+window.nbMetricObject.NB_METRIC_DATA.currency+"</span>";
7212        }
7213        $('.quick-view-category-wrapper .product-attributes li.active').each(function () {
7214            sumPrice += Number($(this).data('price'));
7215        })
7216        $('.quick-view-category-wrapper .product-attributes-wrapper .item.selected').each(function () {
7217            sumPrice += Number($(this).data('price'));
7218        });
7219        sumPrice = sumPrice*Number($('.product-quantity-input').val());
7220        var totalSumPrice = '';
7221        if(sumPrice > 0){
7222            totalSumPrice = parseFloat(sumPrice).toFixed(2)+' '+currency;
7223        }
7224        $('.price-info').html(totalSumPrice);
7225    }
7226
7227    function selectAttributesItems() {
7228        $('.quick-view-category-wrapper .product-attributes-wrapper .item').click(function () {
7229            var item = $(this);
7230            if($(this).hasClass('atributes-group-3')){
7231                $('.quick-view-category-wrapper .product-attributes-wrapper .item.atributes-group-3').each(function(){
7232                    $(this).removeClass('selected');
7233                });
7234                item.addClass('selected');
7235            } else {
7236                $(this).toggleClass('selected');
7237            }
7238            calcPrice();
7239        });
7240    }
7241
7242    function productQuantityParentClass(element){
7243        var productQuantity = $('#product_quantity');
7244
7245        var parentClass = ''
7246        if (typeof element  !== "undefined"){
7247            parentClass = element+' '
7248        }
7249        $(parentClass+'.product-quantity-arrows i').click(function(){
7250            var $arrow = $(this),
7251                $productQuantity = $(parentClass+'.product-quantity-input'),
7252                $productQuantityHelper = $(parentClass+'.product-quantity-helper-pre'),
7253                productQuantityVal = parseInt($productQuantity.val());
7254
7255            if(typeof $(this).closest(".after-add-to-cart") !== "undefined" && $(this).closest(".after-add-to-cart").length > 0) {
7256                $productQuantity = $(this).closest('.product-quantity-wrapper').find(".product-quantity-input");
7257                productQuantityVal = parseInt($productQuantity.val());
7258            }
7259
7260            $productQuantity.removeClass('ease-slow active-down active-up');
7261            $productQuantityHelper.removeClass('active ease-slow');
7262
7263            if($arrow.hasClass('quantity-up')){
7264                var productQuantityNewVal = productQuantityVal+1;
7265                $productQuantity.addClass('active-up');
7266
7267            } else if($arrow.hasClass('quantity-down')){
7268                if(productQuantityVal == 1) return;
7269                var productQuantityNewVal = productQuantityVal-1;
7270
7271                //$productQuantityHelper = $('.product-quantity-helper-post');
7272                //$productQuantity.addClass('active-down');
7273            }
7274
7275            $productQuantity.addClass('ease-slow');
7276            $productQuantityHelper.html(productQuantityNewVal).addClass('active ease-slow');
7277
7278            setTimeout(function(){
7279                $productQuantityHelper.removeClass('active ease-slow');
7280                $productQuantity.removeClass('active-up active-down ease-slow');
7281                $productQuantity.val(productQuantityNewVal);
7282                // var quantityNb = $(parentClass+'.product-quantity-helper-pre').text();
7283                $(parentClass+'.packaging-quantity').text(productQuantityNewVal);
7284                calcPrice();
7285            }, 10);
7286
7287            if(element == ('.tp-cart .ncx-mob-cart-v2')) {
7288                setTimeout(function() {
7289                    $productQuantity.trigger('change');
7290                } ,200);
7291            }
7292        });
7293        productQuantity.on('input', function() {
7294            $(this).val($(this).val().replace(/[^0-9]/g, ''));
7295        });
7296        productQuantity.change(function () {
7297            var quantityNb = $('#product_quantity').val();
7298            console.log(quantityNb);
7299            console.log(parentClass);
7300            $(parentClass+'.packaging-quantity').text(quantityNb);
7301        });
7302    };
7303
7304    var categoryProductViewOnModal = function(){
7305
7306        var categoryProductModal = $('#category_products_modal');
7307        var loaderWrapper = categoryProductModal.find('.loader-wrapper');
7308        $('.quick-view-category').click(function(e){
7309            var btn = $(this);
7310            loaderWrapper.removeClass('hidden')
7311            e.preventDefault();
7312
7313            categoryProductModal.modal('show');
7314            $.ajax({
7315                type: "POST",
7316                url: nb_active_page_url,
7317                data: {
7318                    nbAjax: 1,
7319                    flag: "yes",
7320                    ajax: "yes",
7321                    task: "getproductdatabycatid",
7322                    categoryId: btn.data('category-id')
7323                },
7324                dataType: 'json',
7325                success: function(ret){
7326                    if(ret.flag){
7327                        loaderWrapper.addClass('hidden');
7328                        categoryProductModal.find('.content-category-products-modal').html(ret.productHtml);
7329                        $('#category_products_modal #product_quantity').val('1');
7330                        calcPrice();
7331                        toggleAttributesItems();
7332                        selectAttributesItems();
7333                        productQuantityParentClass('#category_products_modal');
7334                    }
7335                }
7336            });
7337        });
7338
7339        function addToCart(){
7340            $('#nb_addToCartButton.nb_addToCartButton').click(function () {
7341                var btn = $(this);
7342                btn.text('...');
7343                var productArray = [];
7344                var flagNoSelectedItem = true;
7345                var flagNoSelectedAG3 = true;
7346                var btnText = btn.data('btn-text-addtocart');
7347                var btnAddedText = btn.data('btn-text-addedtocart');
7348                var btnNoSizeText = btn.data('btn-text-select-size');
7349                var btnNoAG3Text = 'Izaberite tip testenine';
7350                var quantity = $('#product_quantity').val();
7351                var productsComment = '';
7352                $('.quick-view-category-wrapper .product-attributes li.active').each(function () {
7353                    flagNoSelectedItem = false;
7354                    oneproductcomb = $(this).data('product-id')+'#'+$(this).data('combid')+'#'+quantity;
7355                    productArray.push(oneproductcomb);
7356                })
7357                $('.quick-view-category-wrapper .product-attributes-wrapper .item.selected').each(function () {
7358                    oneproductcomb = $(this).parent().data('product-id')+'#'+$(this).data('combid')+'#'+quantity;
7359                    productArray.push(oneproductcomb);
7360                });
7361
7362                $('.quick-view-category-wrapper .product-attributes-wrapper .item.atributes-group-3').each(function(){
7363                    if($(this).hasClass('selected')){
7364                        flagNoSelectedAG3 = false;
7365                    }
7366                });
7367                if(!$('.quick-view-category-wrapper .product-attributes-wrapper .item.atributes-group-3').length){
7368                    flagNoSelectedAG3 = false;
7369                }
7370                if($('#order-message').length){
7371                    productsComment = $('#order-message').val();
7372                }
7373                if(flagNoSelectedItem){
7374                    btn.text(btnNoSizeText);
7375                    setTimeout(function () {
7376                        btn.text(btnText);
7377                    }, 2000);
7378                } else if(flagNoSelectedAG3){
7379                    btn.text(btnNoAG3Text);
7380                    setTimeout(function () {
7381                        btn.text(btnText);
7382                    }, 2000);
7383                } else {
7384                    ShopByLookAddToCart(productArray,productsComment);
7385                }
7386                window.addEventListener("shopByLookAddToCart", function(e) {
7387                    if(e.detail.flag){
7388                        setTimeout(function () {
7389                            btn.text(btnAddedText);
7390                            $('.mini-cart.mini-cart-side .icon-wrapper').addClass('pulse');
7391                        }, 1000);
7392                        setTimeout(function () {
7393                            $('.modal').modal('hide');
7394                        }, 2000);
7395                        setTimeout(function () {
7396                            btn.text(btnText);
7397                        }, 3000);
7398                        setTimeout(function () {
7399                            $('.mini-cart.mini-cart-side .icon-wrapper').removeClass('pulse');
7400                        }, 5000);
7401                    } else {
7402                        setTimeout(function () {
7403                            btn.text(btnText);
7404                        }, 1000);
7405                    }
7406                }, false);
7407            });
7408        }
7409
7410        addToCart();
7411    };
7412
7413    var handleLocationBuyProductOnModal = function($elements){
7414        var $locationBuyProductModal = $('#modal_location_buy');
7415        $($elements).click(function(e){
7416            e.preventDefault();
7417            var $modalContentLocationBuyProduct = $('.modal-content-location-buy-product'),
7418                $loaderWrapper = $modalContentLocationBuyProduct.find('.loader-wrapper');
7419            $loaderWrapper.removeClass('hidden');
7420            $modalContentLocationBuyProduct.find('.content-location-buy-product').html("");
7421            $locationBuyProductModal.modal('show');
7422            $.ajax({
7423                type: "POST",
7424                url: nb_active_page_url,
7425                data: {
7426                    nbAjax: 1,
7427                    flag: "yes",
7428                    ajax: "yes",
7429                    task: "location_buy_product",
7430                    productId: $($elements).data('location-buy-productid'),
7431                    //iframeView: 1,
7432                    returnType: 'json',
7433                },
7434                dataType: 'json',
7435                success: function(ret){
7436                    if(ret.flag){
7437                        $loaderWrapper.addClass('hidden');
7438                        $modalContentLocationBuyProduct.find('.content-location-buy-product').html(ret.productHtml);
7439                    }
7440                }
7441            });
7442        });
7443    };
7444
7445    var handleSoonSaleProductOnModal = function($elements){
7446
7447        var $locationBuyProductModal = $('#modal_soon_sale_product');
7448
7449        $($elements).click(function(e){
7450            e.preventDefault();
7451
7452            var $modalContentSoonSaleProduct = $('.modal-content-soon-sale-product'),
7453                $loaderWrapper = $modalContentSoonSaleProduct.find('.loader-wrapper');
7454            $loaderWrapper.removeClass('hidden');
7455            $modalContentSoonSaleProduct.find('.content-soon-sale-product').html("");
7456            $locationBuyProductModal.modal('show');
7457            $.ajax({
7458                type: "POST",
7459                url: nb_active_page_url,
7460                data: {
7461                    nbAjax: 1,
7462                    flag: "yes",
7463                    ajax: "yes",
7464                    task: "soon_sale_product",
7465                    productId: $($elements).data('soon-sale-productid'),
7466                    //iframeView: 1,
7467                    returnType: 'json',
7468                },
7469                dataType: 'json',
7470                success: function(ret){
7471                    if(ret.flag){
7472                        $loaderWrapper.addClass('hidden');
7473                        $modalContentSoonSaleProduct.find('.content-soon-sale-product').html(ret.productHtml);
7474                    }
7475                }
7476            });
7477        });
7478    };
7479
7480    var handleMasonry = function(){
7481
7482        var $container = $('.js-masonry');
7483        if (typeof($container.masonry) == 'function') {
7484            // initialize
7485            $container.find('img').batchImageLoad({
7486                loadingCompleteCallback: function(){
7487                    // apply mansory to the grid items
7488                    $container.masonry({
7489                        //          columnWidth: 200,
7490                        itemSelector: '.masonry-item'
7491                    });
7492                }
7493            });
7494        }
7495
7496    };
7497
7498    var handleFilterDropdown = function(){
7499        var $wrapper = $('.filter-headlines.block');
7500        var oldId = '';
7501        $wrapper.find('.item').click(function(){
7502            var fwrapper = $(this).attr('id');
7503            //alert(oldId);
7504            if(oldId != fwrapper){
7505
7506                $('.product-listing-filters .filter-group').removeClass('active');
7507                $('.filter-headlines.block .item').removeClass('active');
7508                $('#nb_'+fwrapper).toggleClass('active');
7509                $(this).toggleClass('active');
7510                oldId = fwrapper;
7511            }else{
7512                $(this).toggleClass('active');
7513                $('#nb_'+fwrapper).toggleClass('active');
7514            }
7515        });
7516    };
7517
7518    var handleFixedFiltersButton = function(){
7519        var wrapper = $('.fixed-button-wrapper-productlist');
7520        var productsFound = $('.products-found');
7521        $(window).scroll(function(){
7522            if ($(this).scrollTop() > 80) {
7523                wrapper.addClass('fixed');
7524                productsFound.addClass('fixed');
7525            } else {
7526                wrapper.removeClass('fixed');
7527                productsFound.removeClass('fixed');
7528            }
7529        });
7530    };
7531
7532    var handleToggleBanner = function(){
7533
7534        var banner      = $(".toggle-banner > .item");
7535        var wholebanner = $(".toggle-banner .item, .toggle-banner .toggle-button");
7536        var buttonIcon  = $(".toggle-banner .toggle-button i");
7537        var i           = '';
7538
7539        banner.each(function(){
7540            var itembanner = $(this);
7541            var button      = itembanner.parent().find(".toggle-button");
7542            var name = 'banner_promo'+i;
7543
7544
7545            if(!readCookie(name) && app.width() > 1400){
7546                itembanner.removeClass("closed");
7547                button.addClass("expand");
7548
7549            }
7550            if(readCookie(name)=='open' && app.width() > 1400){
7551                itembanner.removeClass("closed");
7552                button.addClass("expand");
7553            }
7554            if(app.width() < 768){
7555                console.log('da');
7556                createCookie(name,'close',1);
7557                itembanner.addClass("closed");
7558                button.removeClass("expand");
7559            }
7560            button.click(function(){
7561                if(readCookie(name)=='close'){
7562                    createCookie(name,'open',1);
7563                }else{
7564                    createCookie(name,'close',1);
7565                }
7566                itembanner.toggleClass("closed");
7567                button.toggleClass("expand");
7568                nbshopJS.CustomEventTrigger('sidebarBannerClick');
7569            });
7570
7571            Number.isInteger = Number.isInteger || function(value) {
7572                return typeof value === "number" &&
7573                    isFinite(value) &&
7574                    Math.floor(value) === value;
7575            };
7576
7577            i = i+1;
7578
7579
7580        });
7581
7582    };
7583
7584    var handleFixedHeader = function(){
7585
7586        var wrapper = $('.header');
7587        var addFixedClassPos = 81;
7588        var removeFixedClassPos = 81;
7589
7590        if (wrapper.hasClass('[class^="add-fixed-sol"]')) {
7591            var addFixedClass = wrapper.attr('class').match(/add-fixed-sol-\d+/)[0];
7592
7593            addFixedClassPos = parseInt(addFixedClass.replace('add-fixed-sol-', ''));
7594        }
7595
7596        if (wrapper.hasClass('[class^="remove-fixed-sol"]')) {
7597            var removeFixedClass = wrapper.attr('class').match(/remove-fixed-sol-\d+/)[0];
7598
7599            removeFixedClassPos = parseInt(removeFixedClass.replace('remove-fixed-sol-', ''));
7600        }
7601
7602        $(window).scroll(function(){
7603            if ($(this).scrollTop() > addFixedClassPos) wrapper.addClass('fixed');
7604            if ($(this).scrollTop() < removeFixedClassPos) wrapper.removeClass('fixed');
7605        });
7606    };
7607
7608    var handleShowHideLabel = function(){
7609
7610        if(typeof hidelabels !== 'undefined' && hidelabels == true){
7611
7612            var $formControl = $('.form-control');
7613
7614            $formControl.each(function () {
7615                var fc = $(this);
7616
7617                if (fc.val() != '') {
7618
7619                    $("label[for='" + $(this).attr("id") + "']").show().animate({opacity: "1", height: '100%'}, 500);
7620                } else {
7621                    $("label[for='" + $(this).attr("id") + "']").hide();
7622                }
7623            });
7624
7625            $formControl.click(function (e) {
7626
7627                $(this).bind("keyup", function (e) {
7628                    if ($(this).val() != '') {
7629                        $("label[for='" + $(this).attr("id") + "']").show().animate({
7630                            opacity: "1",
7631                            height: '100%'
7632                        }, 500);
7633                    } else {
7634                        $("label[for='" + $(this).attr("id") + "']").hide().animate({opacity: "1", height: '0'}, 500);
7635                    }
7636                })
7637
7638            });
7639
7640            $('button[type=submit]').click(function () {
7641
7642                $("label").hide();
7643                $(".comment-notice").hide();
7644
7645            });
7646        }
7647
7648    };
7649
7650    var handleFixedDetails = function(){
7651        if( $('.end-scroll').offset()) {
7652            var summaries = $('.fixed-to-footer');
7653            summaries.each(function (i) {
7654                var summary = $(summaries[i]);
7655                var next = summaries[i + 1];
7656
7657                if (app.width() > 768) {
7658                    summary.scrollToFixed({
7659                        marginTop: $('.header').outerHeight(true),
7660                        limit: function () {
7661                            var limit = 0;
7662                            if (next) {
7663                                limit = $(next).offset().top - $(this).outerHeight(true) - 10;
7664                            } else {
7665                                limit = $('.end-scroll').offset().top - $(this).outerHeight(true);
7666                            }
7667                            return limit;
7668                        },
7669                        zIndex: 999
7670                    });
7671                }
7672            });
7673        }
7674    };
7675
7676    var handleContactDropdown = function(){
7677
7678        var dropdownToggle = $(".contact-toggle");
7679        var dropdown    = $(".contact-dropdown");
7680        var toggleMap   = $(".toggle-map");
7681        var mobileMap   = $(".map-mobile");
7682        var closeMap    = $(".close-map");
7683        var contactWrapper = $(".styled-inner-wrapper");
7684        dropdownToggle.click(function(){
7685            $(this).toggleClass("active");
7686            dropdown.fadeToggle();
7687            contactWrapper.toggleClass("active");
7688            $('.map-wrapper').toggleClass('active')
7689        });
7690
7691        toggleMap.click(function(){
7692            mobileMap.addClass("active");
7693            closeMap.addClass("active");
7694        });
7695
7696        closeMap.click(function(){
7697            mobileMap.removeClass("active");
7698            closeMap.removeClass("active");
7699        });
7700    };
7701
7702    var HandleInerZoomNinia = function(){
7703        var attr = $('.product-images img').data('zoom-image');
7704        if (typeof attr !== typeof undefined && attr !== false) {
7705            var InerZoomReinit = function(){
7706                if (typeof($.elevateZoom) == 'function') {
7707                    $('.product-images .elevatezoom img').elevateZoom({
7708                        zoomType: "inner",
7709                        cursor: "crosshair",
7710                        zoomWindowFadeIn: 500,
7711                        zoomWindowFadeOut: 750
7712                    });
7713                }
7714            };
7715            InerZoomReinit();
7716        }
7717    };
7718
7719    var HandleInerZoom = function(){
7720
7721        var produvtImg =   $('.slider.product-main .item.slick-active > img');
7722        var $productMainSlder = $('.product-main .slider-init');
7723
7724        var limitImageZoom = false;
7725        if (typeof produvtImg.data('options') !== 'undefined'){
7726            var pincZoomKey;
7727            var pincZoomOptions = produvtImg.data('options').split(';');
7728            for (i = 0; i < pincZoomOptions.length; ++i) {
7729                pincZoomKey = pincZoomOptions[i].split(':');
7730                if(jQuery.inArray("maxZoom", pincZoomKey) !== -1){
7731                    limitImageZoom = true;
7732                }
7733            }
7734        }
7735
7736        if(!produvtImg.length) return;
7737
7738        var InerZoomReinit = function () {
7739            if (windowWidth() > 767) {
7740                if(limitImageZoom){
7741                    $('.slider.product-main .item.slick-active:not(.image-maped) img').elevateZoom({
7742                        zoomEnabled: true,
7743                        zoomActivation: "click",
7744                        zoomType: "inner",
7745                        cursor: "crosshair",
7746                        minZoomLevel: true,
7747                        scrollZoomIncrement: 0.7,
7748                        zoomWindowFadeIn: 500,
7749                        zoomWindowFadeOut: 750
7750                    });
7751                } else {
7752                    $('.slider.product-main .item.slick-active:not(.image-maped) img').elevateZoom({
7753                        zoomEnabled: true,
7754                        zoomActivation: "click",
7755                        zoomType: "inner",
7756                        cursor: "crosshair",
7757                        zoomWindowFadeIn: 500,
7758                        zoomWindowFadeOut: 750
7759                    });
7760                }
7761            }
7762        };
7763
7764        var $zoomOpenBtn = $('.product-images-zoom-open, .slider.product-main .item'), //.slider.product-main .item
7765            $zoomCloseBtn = $('.fullscreen .close'),
7766            $thumbsArrows = $('.product-images-thumbs .item, .product-images-thumbs-vertical .item, .product-image-wrapper .slick-arrow, .product-images-thumbs-vertical .slick-arrow,.slider.product-images-thumbs .item');
7767
7768        /*$thumbsArrows.click(function () {
7769            // remove current zoom
7770            $('.zoomContainer').remove();
7771            $('#elevate-zoomr').removeData('elevateZoom');
7772            InerZoomReinit();
7773        });*/
7774
7775
7776
7777        $productMainSlder.on('afterChange', function(event, slick, currentSlide) {
7778            $('.zoomContainer').remove();
7779            $('#elevate-zoomr').removeData('elevateZoom');
7780            InerZoomReinit();
7781
7782        });
7783
7784        $zoomOpenBtn.click( function(){
7785            $('.zoomContainer').remove();
7786            $('#elevate-zoomr').removeData('elevateZoom');
7787        });
7788
7789        $zoomCloseBtn.click( function(){
7790            InerZoomReinit();
7791        });
7792
7793        setTimeout(function () {
7794            InerZoomReinit();
7795        }, 500)
7796
7797        if (windowWidth() < 767) {
7798            $('.zoomContainer').remove();
7799        }
7800
7801        $productMainSlder.on('afterChange', function(event, slick, currentSlide) {
7802            if($('.product-main .slider-init .item.slick-current').hasClass('video') || $('.product-main .slider-init .item.slick-current').hasClass('image-maped') || $('.product-main .slider-init .item.slick-current').hasClass('item-flowplayery')){
7803                setTimeout(function () {
7804                    $('.zoomContainer').remove();
7805                    $('#elevate-zoomr').removeData('elevateZoom');
7806                }, 50);
7807            }
7808        });
7809    };
7810
7811    var handleShowHideFiltersDropdown = function(){
7812        var $filter_dropdown = $('.filters-dropdown');
7813        var $buttons = $('.filters-button-dropdown, .filters-dropdown .icon-close');
7814        $filter_dropdown.hide();
7815        $buttons.click(function(){
7816            $filter_dropdown.toggle(500);
7817        });
7818    };
7819
7820    var moveSearchBtn = function () {
7821        if(app.width() <= app.mobileBreakpoint){
7822            if($('.main-4level').hasClass('main-4level-with-logo')) {
7823                $('.nav-main-wrapper .autocomplete-button').appendTo('.header-top');
7824                $('.header .logo').appendTo('.header-top');
7825                $('.header .reservation').appendTo('.header-top');
7826            } else {
7827                $('.nav-main-wrapper .autocomplete-button').appendTo('.header-top > div');
7828            };
7829        }
7830    };
7831
7832    var ImagesLightboxLink = function(){
7833        var $img = $('.page-img-wrapper img');
7834        var href ;
7835        $img.each(function(){
7836            if($(this).parent('a').length == 0){
7837                $href = $(this).attr('src');
7838                $(this).wrap( "<a href='"+$href+"' data-fancybox='roadtrip'></a>" );
7839            }
7840        });
7841    };
7842
7843    var handleReservation = function(){
7844        var dropdownToggle  = $(".action-button.reservation"),
7845            dropdown        = $(".reservation-dropdown");
7846        //show/hide booking dropdown
7847        dropdownToggle.click(function(){
7848            dropdown.fadeToggle({
7849                easing: "swing"
7850            });
7851        });
7852    };
7853
7854    var addTableClass = function(){
7855        $('.price-page table').addClass('table');
7856    };
7857
7858    var groupAllPriceItem = function(){
7859        if ($(".price-page").find(".price-item").length > 0){
7860            $('<div class="col-xs-12 price-items-wraper"></div>').appendTo('.block.items-generic');
7861            $('.price-item').each(function() {
7862                $(this).appendTo(".price-items-wraper");
7863            });
7864        }
7865    };
7866
7867    var handleTicketModal = function(){
7868
7869        if($('.modal-ticket').length == 0) {
7870            return false;
7871        }
7872
7873        $("#ticket_modal .btn-ticket").click(function(){
7874            $("#ticket_modal .ticket-item").toggleClass("active");
7875            $("#ticket_modal .modal-body .lists-tabs").toggleClass("hidden");
7876        });
7877
7878        $("#ticket_modal .lists-tabs .item a").click(function(){
7879            var curentTicket = $(this).data("ticket-id");
7880            $('input[name=ticker_id]').val(curentTicket);
7881        });
7882
7883        $("#ticket_modal .items-wrapper .item,#ticket_modal .btn-ticket").click(function(){
7884            $(".ticket-modal-loader.loader-wrapper").removeClass('hidden');
7885            $('#ticket_modal .alert').addClass('hidden').removeClass (function (index, className) {
7886                return (className.match (/(^|\s)alert-\S+/g) || []).join(' ');
7887            });
7888            setTimeout(function() {
7889                $(".ticket-modal-loader.loader-wrapper").addClass('hidden');
7890            }, 500);
7891        });
7892
7893        $("#ticket_modal .send-request").click(function(e){
7894
7895            e.preventDefault();
7896
7897            var url             = $('#sticket_form').attr("action");
7898            var ticketingSystem = $('#ticket_modal .lists-tabs .item a').data("ticket-id");
7899            $(".ticket-modal-loader.loader-wrapper").removeClass('hidden');
7900            $.ajax({
7901                type: "POST",
7902                url: url,
7903                data: {
7904                    ajax: 'yes',
7905                    task: 'createticketcode',
7906                    ticketingSystem: ticketingSystem
7907                },
7908                dataType: 'json',
7909                success: function(ret){
7910                    if(ret.flag){
7911                        //uspesno
7912                        setTimeout(function() {
7913                            $(".ticket-modal-loader.loader-wrapper").addClass('hidden');
7914                            $('#ticket_modal .alert').removeClass('hidden').addClass('alert-success').text(ret.info);
7915                        }, 500);
7916                    } else {
7917                        //greska
7918                        setTimeout(function() {
7919                            $(".ticket-modal-loader.loader-wrapper").addClass('hidden');
7920                            $('#ticket_modal .alert').removeClass('hidden').addClass('alert-danger').text(ret.info);
7921                        }, 500);
7922                    }
7923                }
7924            });
7925
7926        });
7927
7928        $("#ticket_modal .ticket-item .btn-verifivation").click(function(e){
7929
7930            e.preventDefault();
7931
7932            var url             = $('#sticket_form').attr("action");
7933            var ticketingSystem = $('#ticket_modal .lists-tabs .item a').data("ticket-id");
7934            var ticketCode      = $("#ticket_modal .ticket-item .form-control").val();
7935
7936            $(".ticket-modal-loader.loader-wrapper").removeClass('hidden');
7937            $.ajax({
7938                type: "POST",
7939                url: url,
7940                data: {
7941                    ajax: 'yes',
7942                    task: 'confirmticketcode',
7943                    ticketCode: ticketCode,
7944                    ticketingSystem: ticketingSystem
7945                },
7946                dataType: 'json',
7947                success: function(ret){
7948                    if(ret.flag){
7949                        //uspesno
7950                        setTimeout(function() {
7951                            $(".ticket-modal-loader.loader-wrapper").addClass('hidden');
7952                            $('#ticket_modal .alert').removeClass('hidden').addClass('alert-success').text(ret.info);
7953                        }, 500);
7954                        window.location.reload();
7955                    } else {
7956                        //greska
7957                        setTimeout(function() {
7958                            $(".ticket-modal-loader.loader-wrapper").addClass('hidden');
7959                            $('#ticket_modal .alert').removeClass('hidden').addClass('alert-danger').text(ret.info);
7960                        }, 500);
7961
7962                    }
7963                }
7964            });
7965
7966        });
7967        $('#ticket_modal').on('hidden.bs.modal', function() {
7968            if($("#ticket_modal .modal-body .lists-tabs").hasClass("hidden")){
7969                $("#ticket_modal .modal-body .lists-tabs").removeClass("hidden")
7970                $("#ticket_modal .ticket-item").toggleClass("active");
7971            }
7972        });
7973
7974
7975    };
7976
7977    var handleTicketModalNew = function(){
7978
7979        if($('.ticket-modal-new').length == 0) {
7980            return false;
7981        }
7982
7983        $(".ticket-modal-new").on('shown.bs.modal', function (e) {
7984            handleLoyaltyTab('.ticket-modal-new');
7985        });
7986
7987    };
7988
7989    var handleLoyaltyTab = function(wrapper){
7990
7991        let $wrapper = $(wrapper);
7992
7993        if($wrapper.find('.loyalty-card-form').length == 0) {
7994            return false;
7995        }
7996
7997        var url = $wrapper.find('#ticket_form').attr("action");
7998
7999        $wrapper.find('.loyalty-card-form > .loader-wrapper').removeClass('hidden');
8000
8001        $.ajax({
8002            type: "POST",
8003            url: url,
8004            data: {
8005                ajax: 'yes',
8006                task: 'loadloyaltytab'
8007            },
8008            dataType: 'json',
8009            success: function(ret){
8010                if(ret.flag){
8011                    $wrapper.find('#create-loyalty-tab').html(ret.htmlcreatetab);
8012                    $wrapper.find('#connect-loyalty-tab').html(ret.htmlconnecttab);
8013                    $wrapper.find('.loyalty-card-form > .loader-wrapper').addClass('hidden');
8014                    $wrapper.find('.loyalty-card-form').addClass('loaded');
8015                    handleLoyaltyForm(wrapper);
8016                }
8017            }
8018        });
8019
8020    }
8021
8022    var handleLoyaltyForm = function(wrapper) {
8023
8024        let $wrapper = $(wrapper);
8025
8026        let createCardScreen = $wrapper.find('.loyalty-card-form .create-card-wrapper');
8027        let createCardConfirmScreen = $wrapper.find('.loyalty-card-form .confirm-card-creation');
8028        let createCardSuccessScreen = $wrapper.find('.loyalty-card-form .success-card-created');
8029
8030        let connectCardScreen = $wrapper.find('.loyalty-card-form .connect-loyalty-card .email-wrapper');
8031        let connectCardScreenImg = $wrapper.find('.loyalty-card-form .connect-loyalty-card > .content-wrapper .img-wrapper');
8032        let connectCardVerificationScreen = $wrapper.find('.loyalty-card-form .connect-loyalty-card .verification-code-wrapper');
8033        let confirmCardScreen = $wrapper.find('.loyalty-card-form .connect-loyalty-card .ticket-code-wrapper');
8034        let confirmCardScreenImg = $wrapper.find('.loyalty-card-form .connect-loyalty-card > .ticket-code-wrapper .img-wrapper');
8035        let connectCardSuccessScreen = $wrapper.find('.loyalty-card-form .connect-loyalty-card .success-card-connect');
8036
8037        let tabs = $wrapper.find('.loyalty-card-form .tab-link-wrapper');
8038
8039
8040        function connectLoyaltyCardTab() {
8041            $wrapper.find('.loyalty-card-form .connect-card').click(function () {
8042                $(this).addClass('active');
8043                $wrapper.find('.loyalty-card-form .become-member').removeClass('active');
8044                $wrapper.find('.loyalty-card-form .create-loyalty-wrapper').addClass('hidden');
8045                $wrapper.find('.loyalty-card-form .connect-loyalty-wrapper').removeClass('hidden');
8046            })
8047        }
8048
8049        function becomeLoyaltyMemberTab() {
8050            $wrapper.find('.loyalty-card-form .become-member').click(function () {
8051                $(this).addClass('active');
8052                $wrapper.find('.loyalty-card-form .connect-card').removeClass('active');
8053                $wrapper.find('.loyalty-card-form .connect-loyalty-wrapper').addClass('hidden');
8054                $wrapper.find('.loyalty-card-form .create-loyalty-wrapper').removeClass('hidden');
8055            })
8056        }
8057
8058        function applyForLoyalty() {
8059            $wrapper.find('.loyalty-card-form .apply-for-loyalty').click(function () {
8060                createCardConfirmScreen.removeClass('hidden');
8061                createCardScreen.addClass('hidden');
8062            })
8063        }
8064
8065        /*postanite clan*/
8066        function createTicketCode() {
8067            $wrapper.find(".loyalty-card-form .send-request").click(function(e){
8068
8069                e.preventDefault();
8070
8071                var url = $wrapper.find('#ticket_form').attr("action");
8072                $wrapper.find(".loyalty-card-form .loader-wrapper").removeClass('hidden');
8073
8074                $.ajax({
8075                    type: "POST",
8076                    url: url,
8077                    data: {
8078                        ajax: 'yes',
8079                        task: 'createticketcode'
8080                    },
8081                    dataType: 'json',
8082                    success: function(ret){
8083                        if(ret.flag){
8084                            if(ret.ticket){
8085                                $wrapper.find('#ticket-card-created').text(ret.ticket);
8086                            }
8087                            if(ret.barcode){
8088                                $wrapper.find('#barcode-card-created').attr("src", ret.barcode);
8089                            }
8090                            $wrapper.find(".loyalty-card-form .loader-wrapper").addClass('hidden');
8091                            createCardConfirmScreen.addClass('hidden');
8092                            tabs.addClass('hidden');
8093                            createCardSuccessScreen.removeClass('hidden');
8094                            refreshPageOnModalClose();
8095
8096                            if($(wrapper).is(".profile")) {
8097                                window.location.reload();
8098                            }
8099
8100                        } else {
8101                            $wrapper.find(".loyalty-card-form .loader-wrapper").addClass('hidden');
8102                            $wrapper.find('.loyalty-card-form .create-loyalty-card .alert').removeClass('hidden').addClass('alert-danger').text(ret.info);
8103
8104                            //createCardConfirmScreen.addClass('hidden');
8105
8106                        }
8107                    }
8108                });
8109
8110            });
8111        }
8112
8113        /*slanje verifikacionog koda za unos kartice*/
8114        function sendVerificationCode() {
8115            $wrapper.find(".loyalty-card-form .btn-send-code, .loyalty-card-form .resend-verification-code").click(function(e){
8116
8117                e.preventDefault();
8118                var ticketCode      = $wrapper.find(".loyalty-card-form .email-wrapper .form-control").val();
8119                var url = $wrapper.find('#ticket_form').attr("action");
8120
8121                $wrapper.find(".loyalty-card-form .loader-wrapper").removeClass('hidden');
8122                $.ajax({
8123                    type: "POST",
8124                    url: url,
8125                    data: {
8126                        ajax: 'yes',
8127                        task: 'verificationloyaltycard',
8128                        ticketCode: ticketCode
8129                    },
8130                    dataType: 'json',
8131                    success: function(ret){
8132                        if(ret.flag){
8133                            connectCardScreen.addClass('hidden');
8134                            connectCardVerificationScreen.removeClass('hidden');
8135                            $wrapper.find(".loyalty-card-form .loader-wrapper").addClass('hidden');
8136                            $wrapper.find('.loyalty-card-form .connect-loyalty-card .alert').removeClass('hidden alert-danger').addClass('alert-success').text(ret.info);
8137                        } else {
8138                            $wrapper.find(".loyalty-card-form .loader-wrapper").addClass('hidden');
8139                            $wrapper.find('.loyalty-card-form .connect-loyalty-card .alert').removeClass('hidden alert-success').addClass('alert-danger').text(ret.info);
8140                        }
8141                    }
8142                });
8143
8144            });
8145        }
8146
8147        /*potvrda unetog verifikacionog koda*/
8148        function confirmVerificationToken() {
8149            $wrapper.find(".loyalty-card-form .btn-confirm-verification-code").click(function(e){
8150
8151                e.preventDefault();
8152                var ticketCode             = $wrapper.find(".loyalty-card-form  .email-wrapper .form-control").val();
8153                var verificationToken      = $wrapper.find(".loyalty-card-form  .verification-code-wrapper .form-control").val();
8154                var url = $('#ticket_form').attr("action");
8155
8156                $wrapper.find(".loyalty-card-form  .loader-wrapper").removeClass('hidden');
8157                $.ajax({
8158                    type: "POST",
8159                    url: url,
8160                    data: {
8161                        ajax: 'yes',
8162                        task: 'confirmverificationtoken',
8163                        verificationToken: verificationToken,
8164                        ticketCode: ticketCode
8165                    },
8166                    dataType: 'json',
8167                    success: function(ret){
8168                        if(ret.flag){
8169                            //ovde ide ajax za uparivanje
8170                            $.ajax({
8171                                type: "POST",
8172                                url: url,
8173                                data: {
8174                                    ajax: 'yes',
8175                                    task: 'confirmticketcode',
8176                                    ticketCode: ticketCode
8177                                },
8178                                dataType: 'json',
8179                                success: function(ret){
8180                                    if(ret.flag){
8181                                        if(ret.ticket){
8182                                            $wrapper.find('#ticket-card-paired').text(ret.ticket);
8183                                        }
8184                                        if(ret.barcode){
8185                                            $wrapper.find('#barcode-card-paired').attr("src", ret.barcode);
8186                                        }
8187
8188                                        connectCardSuccessScreen.removeClass('hidden');
8189                                        connectCardVerificationScreen.addClass('hidden');
8190                                        connectCardScreenImg.addClass('hidden');
8191
8192                                        $wrapper.find(".loyalty-card-form .loader-wrapper").addClass('hidden');
8193                                        tabs.addClass('hidden');
8194
8195                                        refreshPageOnModalClose();
8196
8197                                        if($(wrapper).is(".profile")) {
8198                                            window.location.reload();
8199                                        }
8200
8201                                    } else {
8202                                        $wrapper.find(".loyalty-card-form .loader-wrapper").addClass('hidden');
8203                                        $wrapper.find('.loyalty-card-form .verification-code-wrapper .alert').removeClass('alert-success hidden').addClass('alert-danger').text(ret.info);
8204                                    }
8205                                }
8206                            });
8207                        } else {
8208                            $wrapper.find(".loyalty-card-form .loader-wrapper").addClass('hidden');
8209                            $wrapper.find('.loyalty-card-form .verification-code-wrapper .alert').removeClass('alert-success hidden').addClass('alert-danger').text(ret.info);
8210                        }
8211                    }
8212                });
8213
8214            });
8215        }
8216
8217        /*uparite karticu / bez verifikacije*/
8218        function confirmTicketCode() {
8219            $wrapper.find(".loyalty-card-form .btn-confirm-ticket-code").click(function(e){
8220
8221                e.preventDefault();
8222
8223                $wrapper.find(".loyalty-card-form .loader-wrapper").removeClass('hidden');
8224
8225                var ticketCode = $wrapper.find(".loyalty-card-form  .email-wrapper .form-control").val();
8226                var url        = $wrapper.find('#ticket_form').attr("action");
8227                let reloadPage = $wrapper.find('.loyalty-card-form').data("reload-page");
8228
8229                $.ajax({
8230                    type: "POST",
8231                    url: url,
8232                    data: {
8233                        ajax: 'yes',
8234                        task: 'confirmticketcode',
8235                        ticketCode: ticketCode
8236                    },
8237                    dataType: 'json',
8238                    success: function(ret){
8239                        if(ret.flag){
8240                            if(ret.ticket){
8241                                $wrapper.find('#ticket-card-paired').text(ret.ticket);
8242                            }
8243                            if(ret.barcode){
8244                                $wrapper.find('#barcode-card-paired').attr("src", ret.barcode);
8245                            }
8246
8247                            connectCardSuccessScreen.removeClass('hidden');
8248                            confirmCardScreen.addClass('hidden');
8249                            confirmCardScreenImg.addClass('hidden');
8250
8251                            $wrapper.find(".loyalty-card-form .loader-wrapper").addClass('hidden');
8252                            tabs.addClass('hidden');
8253
8254                            refreshPageOnModalClose();
8255
8256                            if($(wrapper).is(".profile")) {
8257                                setTimeout(function () {
8258                                    window.location.reload();
8259                                }, 2000);
8260                            }
8261
8262                        } else {
8263                            $wrapper.find(".loyalty-card-form .loader-wrapper").addClass('hidden');
8264                            $wrapper.find('.loyalty-card-form .ticket-code-wrapper .alert').removeClass('alert-success hidden').addClass('alert-danger').text(ret.info);
8265                        }
8266                    }
8267                });
8268
8269            });
8270        }
8271
8272        function modalDefaultPreview() {
8273            if($('.ticket-modal-new').length !== 0 ){
8274                $('.ticket-modal-new').on('hidden.bs.modal', function() {
8275                    createCardScreen.removeClass('hidden');
8276                    createCardConfirmScreen.addClass('hidden');
8277                    createCardSuccessScreen.addClass('hidden');
8278                    connectCardScreen.removeClass('hidden');
8279                    connectCardScreenImg.removeClass('hidden');
8280                    connectCardVerificationScreen.addClass('hidden');
8281                    connectCardSuccessScreen.addClass('hidden');
8282                    tabs.removeClass('hidden');
8283                    $('.ticket-modal-new .alert').addClass('hidden');
8284                });
8285            }
8286        }
8287
8288        function refreshPageOnModalClose() {
8289            let closeBtn= $('.ticket-modal-new .modal-header .close');
8290
8291            closeBtn.click(function () {
8292                window.location.reload();
8293            })
8294        }
8295
8296        connectLoyaltyCardTab();
8297        becomeLoyaltyMemberTab();
8298        applyForLoyalty();
8299        createTicketCode();
8300        sendVerificationCode();
8301        confirmVerificationToken();
8302        confirmTicketCode();
8303        modalDefaultPreview();
8304
8305    }
8306
8307
8308    var handleLoyaltyOfferDetailModal = function () {
8309        let loyaltyOffer = $('.loyalty-offer-detail-modal');
8310
8311        if(loyaltyOffer.length == 0) {
8312            return false;
8313        }
8314
8315        $('.loyalty-offer-detail-modal .generate-code').click(function (e) {
8316            e.preventDefault();
8317
8318            $('.loyalty-offer-detail-modal .loyalty-wrapper').addClass('hidden');
8319            $('.loyalty-offer-detail-modal .confirm-loyalty-wrapper').removeClass('hidden');
8320        })
8321
8322        $('.loyalty-offer-detail-modal .generate-code-confirm').click(function (e) {
8323            e.preventDefault();
8324
8325            var url     = $('#all-offers').text();
8326            var offerId = $(this).closest('.loyalty-offer-detail-modal').find('#offer-id').text();
8327            var ticketCode = $(this).closest('.loyalty-offer-detail-modal').find('#ticket-code');
8328
8329            $(".loyalty-offer-detail-modal .loader-wrapper").removeClass('hidden');
8330
8331            $.ajax({
8332                type: "POST",
8333                url: url,
8334                data: {
8335                    ajax: 'yes',
8336                    actionId: offerId,
8337                    task: 'generateticketcode'
8338                },
8339                dataType: 'json',
8340                success: function(ret){
8341                    if(ret.flag){
8342
8343                        if(ret.ticket){
8344                            ticketCode.text(ret.ticket);
8345                        }
8346
8347                        $('.loyalty-offer-detail-modal .confirm-loyalty-wrapper').addClass('hidden');
8348                        $('.loyalty-offer-detail-modal .success-code-generated-wrapper').removeClass('hidden');
8349                        $(".loyalty-offer-detail-modal .loader-wrapper").addClass('hidden');
8350                        $('.loyalty-offer-detail-modal .success-code-generated-wrapper .alert').removeClass('hidden alert-danger').addClass('alert-success').text(ret.info);
8351                    } else {
8352                        $(".loyalty-offer-detail-modal .loader-wrapper").addClass('hidden');
8353                        $('.loyalty-offer-detail-modal .confirm-loyalty-wrapper .alert').removeClass('hidden alert-success').addClass('alert-danger').text(ret.info);
8354                        $('.loyalty-offer-detail-modal .confirm-loyalty-wrapper .btn-wrapper').addClass('hidden');
8355                    }
8356                }
8357            });
8358        })
8359
8360
8361        $('.loyalty-offer-detail-modal').on('hidden.bs.modal', function() {
8362            $('.loyalty-offer-detail-modal .loyalty-wrapper').removeClass('hidden');
8363            $('.loyalty-offer-detail-modal .confirm-loyalty-wrapper').addClass('hidden');
8364            $('.loyalty-offer-detail-modal .success-code-generated-wrapper').addClass('hidden');
8365            $('.loyalty-offer-detail-modal .confirm-loyalty-wrapper .btn-wrapper').removeClass('hidden');
8366            $('.loyalty-offer-detail-modal .alert').addClass('hidden').removeClass (function (index, className) {
8367                return (className.match (/(^|\s)alert-\S+/g) || []).join(' ');
8368            });;
8369        });
8370
8371    }
8372
8373    var handleLoyaltyCouponDetailModal = function () {
8374        let loyaltyCoupon = $('.loyalty-coupon-detail-modal');
8375
8376        if(loyaltyCoupon.length == 0) {
8377            return false;
8378        }
8379
8380        $('.loyalty-coupon-detail-modal .generate-code').click(function (e) {
8381            e.preventDefault();
8382
8383            $('.loyalty-coupon-detail-modal .loyalty-wrapper').addClass('hidden');
8384            $('.loyalty-coupon-detail-modal .confirm-loyalty-wrapper').removeClass('hidden');
8385        })
8386
8387        $('.loyalty-coupon-detail-modal .generate-code-confirm').click(function (e) {
8388            e.preventDefault();
8389
8390            var url     = $('#all-offers').text();
8391            var offerId = $(this).closest('.loyalty-coupon-detail-modal').find('#offer-id').text();
8392            var ticketCode = $(this).closest('.loyalty-coupon-detail-modal').find('#ticket-code');
8393
8394            $(".loyalty-coupon-detail-modal .loader-wrapper").removeClass('hidden');
8395
8396            $.ajax({
8397                type: "POST",
8398                url: url,
8399                data: {
8400                    ajax: 'yes',
8401                    actionId: offerId,
8402                    task: 'generateexternalticketcode'
8403                },
8404                dataType: 'json',
8405                success: function(ret){
8406                    if(ret.flag){
8407
8408                        if(ret.ticket){
8409                            ticketCode.text(ret.ticket);
8410                        }
8411
8412                        $('.loyalty-coupon-detail-modal .confirm-loyalty-wrapper').addClass('hidden');
8413                        $('.loyalty-coupon-detail-modal .success-code-generated-wrapper').removeClass('hidden');
8414                        $(".loyalty-coupon-detail-modal .loader-wrapper").addClass('hidden');
8415                        $('.loyalty-coupon-detail-modal .success-code-generated-wrapper .alert').removeClass('hidden alert-danger').addClass('alert-success').text(ret.info);
8416                    } else {
8417                        $(".loyalty-coupon-detail-modal .loader-wrapper").addClass('hidden');
8418                        $('.loyalty-coupon-detail-modal .confirm-loyalty-wrapper .alert').removeClass('hidden alert-success').addClass('alert-danger').text(ret.info);
8419                        $('.loyalty-coupon-detail-modal .confirm-loyalty-wrapper .btn-wrapper').addClass('hidden');
8420                    }
8421                }
8422            });
8423        })
8424
8425
8426        $('.loyalty-coupon-detail-modal').on('hidden.bs.modal', function() {
8427            $('.loyalty-coupon-detail-modal .loyalty-wrapper').removeClass('hidden');
8428            $('.loyalty-coupon-detail-modal .confirm-loyalty-wrapper').addClass('hidden');
8429            $('.loyalty-coupon-detail-modal .success-code-generated-wrapper').addClass('hidden');
8430            $('.loyalty-coupon-detail-modal .confirm-loyalty-wrapper .btn-wrapper').removeClass('hidden');
8431            $('.loyalty-coupon-detail-modal .alert').addClass('hidden').removeClass (function (index, className) {
8432                return (className.match (/(^|\s)alert-\S+/g) || []).join(' ');
8433            });;
8434        });
8435
8436    }
8437
8438    var miniCartSider = function () {
8439        $('.header-cart .mini-cart.mini-cart-side, .header-cart-item-side .cart-toggle-overlayer').click(function () {
8440            $('#miniCartContent').toggleClass('active');
8441            $('body').toggleClass('search');
8442        });
8443
8444        $('.header-cart-item.header-cart-item-side .close-mini-cart').click(function () {
8445            $('#miniCartContent').removeClass('active');
8446            $('body').removeClass('search');
8447        });
8448    };
8449
8450    var w = $(window).width();
8451    $(window).resize(function(){
8452        if ($(window).width()==w) return;
8453        w = $(window).width();
8454        handleNavMain();
8455        handleAutocomplete();
8456        handleMainNavMobile();
8457    });
8458
8459    window.addEventListener("orientationchange", function() {
8460        handleNavMain();
8461        handleAutocomplete();
8462        handleMainNavMobile();
8463    }, false);
8464
8465    var reloadCartAfterBuy = function(){
8466        $('.product-list-cart .buyButtonOnLists').each(function () {
8467            $(this).click(function () {
8468                setTimeout(function(){
8469                    setTimeout(function(){
8470                        reloadCartOnePage('changeAmount');
8471                        handleBuyProductOnListing();
8472                    }, 1500);
8473                }, 500);
8474            })
8475        })
8476    };
8477
8478    var initTypeheadProductsReclamation = function(element){
8479
8480        var product = $(element);
8481        var nameInput = product.closest('.row').find('.reclamation-product-name');
8482
8483        if(product.length == 0){
8484            return;
8485        }
8486
8487        if(typeof(product.data('typehead-url')) == 'undefined' || product.data('typehead-url') == null || product.data('typehead-url') == ""){
8488            return;
8489        }
8490
8491        var productBH = new Bloodhound({
8492            datumTokenizer: Bloodhound.tokenizers.obj.whitespace('id'),
8493            queryTokenizer: Bloodhound.tokenizers.whitespace,
8494            limit: 150,
8495            remote: {
8496                url: product.data('typehead-url'),
8497                ajax: {
8498                    data: {
8499                        productCode: function(){
8500                            if (typeof(product.val()) != 'undefined' && product.val() != null){
8501                                return product.val();
8502                            }
8503                            return '';
8504                        }
8505                    }
8506                }
8507            }
8508        });
8509
8510        productBH.initialize();
8511        product.typeahead({
8512                minLength: 1,
8513                highlight: true
8514            },
8515            {
8516                displayKey: 'productCode',
8517                source: productBH.ttAdapter()
8518            }).on('typeahead:selected', function (e, ret) {
8519
8520            product.parsley().validate();
8521
8522            product.val(ret.productCode);
8523
8524            nameInput.val(ret.name);
8525        });
8526
8527    };
8528
8529    // var modalAfterAddToCart = function(){
8530    //     window.addEventListener('products_after_add_to_cart', function (e){
8531    //         setTimeout(function(){
8532    //             $('#modal_after_add_to_cart').modal('show');
8533    //         },2000);
8534    //
8535    //     });
8536    // };
8537
8538
8539    $('#product_details_modal').on('show.bs.modal', function () {
8540        handleReadMore();
8541    });
8542
8543    var serilizeSSOCheckbox = function(){
8544        dataCheckBox = '';
8545        if($('.sso-check-wrapper').length > 0){
8546            dataCheckBox = $('.sso-reg-checkbox-wrapper.inner-wrapper .inner-wrapper input:checkbox').serializeArray();
8547            //console.log(dataCheckBox);
8548            $(".sso-reg-checkbox-wrapper.inner-wrapper .inner-wrapper input:checkbox:not(:checked)").each(function() {
8549                dataCheckBox.push({name: this.name, value: '0' });
8550            });
8551            //dataCheckBox = $.param(dataCheckBox);
8552            //return dataCheckBox;
8553        }
8554        return dataCheckBox;
8555    }
8556
8557    var showHideMapAsAccordion = function (mapElement, toggleElement) { // pozvati u theme.script
8558        let map = $(mapElement);
8559        let toggleMapButtonWrapper = $(toggleElement);
8560
8561        if(typeof map === "undefined" || map.length === 0 || typeof toggleMapButtonWrapper === "undefined" || toggleMapButtonWrapper.length === 0) return;
8562
8563        let toggleButton = $(toggleMapButtonWrapper).find(".item a");
8564
8565        if(typeof toggleButton === "undefined" || toggleButton.length === 0 ) return;
8566
8567        map.addClass("accordion-map");
8568
8569        toggleButton.removeAttr("href");
8570
8571        let mapHeight = $(map).find(".store-map-wrapper").height();
8572
8573        toggleButton.click(function () {
8574            if(map.hasClass("show-map-as-accordion")) {
8575                map.removeClass("show-map-as-accordion");
8576                map.css("height", 0);
8577
8578            } else {
8579                map.addClass("show-map-as-accordion");
8580                map.css("height", mapHeight);
8581            }
8582        })
8583
8584    }
8585
8586    function handleStoreFocusOnStoresMap() {
8587        var storePermalink = '' + localStorage.getItem('storePermalink') + '';
8588        if(typeof storePermalink !== 'undefined' && storePermalink && storePermalink !== '') {
8589            var storeId = localStorage.getItem('storeId');
8590            var backUrl = localStorage.getItem('backUrl');
8591            console.log(backUrl);
8592            if(typeof backUrl !== 'undefined' && backUrl && backUrl.includes(storePermalink)) {
8593                setTimeout(function () {
8594                    $("#" + storeId).trigger('click');
8595                }, 500)
8596            }
8597        }
8598    }
8599
8600    let initFilterHexColorOnCheckbox = () => {
8601
8602        $('.nbf-filterHexColorOnCheckbox .color-item-wrapper').each(function (){
8603            let style = $(this).attr('style');
8604            if(style != ''){
8605                $(this).find('> .icheckbox_flat').attr('style', style);
8606                $(this).attr('style', '');
8607            }
8608        })
8609
8610    }
8611
8612    function showMiniCartAfterAddingProduct() {
8613        $(window).on("cartButtonClick", function () {
8614            $("#miniCartContent").addClass('active')
8615        })
8616    }
8617
8618    function handlePersonalizationProductBuy() {
8619
8620        if(nb_type_page !== "product") return;
8621
8622        let personalizationActive = $('.btn-personalization');
8623        let addToCartButton       = $("#nb_addToCartButton");
8624        let isMandatoryPersonalisation = $(".personalization-detail").data("is-mandatory-personalization");
8625
8626        if(typeof personalizationActive === "undefined" || personalizationActive.length === 0 || typeof isMandatoryPersonalisation === "undefined" || !isMandatoryPersonalisation) return;
8627
8628        function disableButton() {
8629            addToCartButton.addClass("disabled");
8630            addToCartButton.css("pointer-events", "none");
8631            addToCartButton.text($(addToCartButton).data("btn-text-select-size"));
8632        }
8633
8634        function enableButton() {
8635            addToCartButton.removeClass("disabled");
8636            addToCartButton.css("pointer-events", "all");
8637            addToCartButton.text($(addToCartButton).data("btn-text-addtocart"));
8638        }
8639
8640        let savedPersonalization = $("#savedPersonalizations .saved-items");
8641
8642        if(typeof isMandatoryPersonalisation !== "undefined" || !isMandatoryPersonalisation) {
8643            disableButton();
8644        }
8645
8646        if(typeof savedPersonalization !== "undefined" && savedPersonalization.length > 0) enableButton();
8647
8648        $(window).on("personalizations_loaded", function () {
8649
8650            let savedPersonalization = $("#savedPersonalizations .saved-items");
8651
8652            if(typeof isMandatoryPersonalisation !== "undefined" || !isMandatoryPersonalisation) {
8653                disableButton();
8654            }
8655
8656            if(typeof savedPersonalization !== "undefined" && savedPersonalization.length > 0) enableButton();
8657
8658        })
8659
8660        $("#modal_personalization").on("show.bs.modal", function () {
8661
8662            $(".personalization-modal .nav-tabs .nav-link.active").trigger("click")
8663
8664        })
8665
8666    }
8667
8668    function handleFindbarSessionID(){
8669        document.addEventListener('findbar_session_id_updated', function (event) {
8670            $.ajax({
8671                type: "POST",
8672                url: nb_active_page_url,
8673                dataType: 'json',
8674                data: {
8675                    nbAjax: 1,
8676                    task: "save_findbar_session_id",
8677                    sessionId: event.detail.sessionId
8678                },
8679                contentType: "application/x-www-form-urlencoded;charset=UTF-8"
8680            });
8681        });
8682    }
8683
8684    function handleAfterClickAddOrderCart(){
8685        if(typeof displayConfirmDialogConfirmOrderPublic === "boolean" && displayConfirmDialogConfirmOrderPublic) {
8686            let form   = $('#cart_onepage_form');
8687            let button = form.find("#submit_order_one_page");
8688            form.on('submit', function (e) {
8689                e.preventDefault();
8690                button.removeClass("active");
8691                bootbox.confirm(button.data('confirm-dialog-message'), function (result) {
8692                    if (result) {
8693                        button.addClass("active");
8694                        document.getElementById('cart_onepage_form').submit();
8695                    }
8696                })
8697            });
8698        }
8699    }
8700
8701    return {
8702        mobileBreakpoint: 767,
8703        setLocales: setLocales,
8704        getDefaultLang:getDefaultLang,
8705        init: function(){
8706            setToastrOptions();
8707            handleTicketModal();
8708            handleTicketModalNew();
8709            handleLoyaltyTab('.profile');
8710            handleLoyaltyOfferDetailModal();
8711            handleLoyaltyCouponDetailModal();
8712            moveSearchBtn();
8713            handleAppearing($('.appear'));
8714            handleTooltip($('[rel=tooltip]'));
8715            handleToggle();
8716            handleCheckboxRadio($('input[type="checkbox"], input[type="radio"]'));
8717            handleForms().initForms(); //najnovije resenje
8718            handleAnchorLinks();
8719            handleProfile();
8720            handleLangToggle();
8721            productzoomer();
8722            handleSidebarInfo();
8723            articleBannerStyle();
8724            handleCurrencyToggle();
8725            handleHeaderCart();
8726            miniCartSider();
8727            handleNavMain();
8728            handlePhoneVerification();
8729            handleShowHideElements();
8730            handleBrendLettersFilter();
8731            handleHTMLEditorTableResponsive();
8732            handleGenericSlider();
8733            handleToggleBanner();
8734            handleFixedHeader();
8735            handleShowHideLabel();
8736            handleFixedDetails();
8737            addTableClass();
8738            groupAllPriceItem();
8739            handleAutocomplete();
8740            handleReadMore($(".read-more-btn"));
8741            handleSlideToggle($(".slidetoggle-init"));
8742            handleProductListing($('.product-listing'));
8743            handleBuyProductOnListing();
8744            handleProductDetails();
8745            handleGalleryImagesSlider();
8746            handleFavoriteProduct($('.favorite'));
8747            handleLowerPriceProduct($('.action-lowerprice'));
8748            handleLowerPriceProductCombinations($('.action-lowerprice-combinatios'));
8749            handleSliderOnLandingPage();
8750            handleAtributeSlider();
8751            handleHandlinesSlider();
8752            handleMainSliderPlaneta();
8753            handleSliderWithText();
8754            handleSliderWithPadding();
8755            handleCatalog();
8756            handleProductsSlider();
8757            handleRelatedProductsSlider();
8758            handlePromoSliderBig();
8759            handlePostsSlider();
8760            handleOneitemSlider();
8761            handleScrollSlider();
8762            handleStoreMap();
8763            handleMainNavMobile();
8764            handleScrollDown();
8765            handleTabsSlider();
8766            handlePopover($('[rel=popover]'));
8767            handleModalPromo($('#onload_modal'));
8768            handleInvoiceOrderModal();
8769            handleFileSelect($('.btn-file :file'));
8770            handlePageOnModal('.showPageOnModal');
8771            handleContactDropdown();
8772            if(typeaheadJsFlag){
8773                handleTypehead().init();
8774            }
8775            handleCountry_lang();
8776            handleProductDetailsQuickViewOnModal('.showProductDetailsQuickViewOnModal');
8777            handleProductQueryViewOnModal('.showProductQueryViewOnModal');
8778            categoryProductViewOnModal();
8779            handleLocationBuyProductOnModal('.locationBuyProduct');
8780            handleSoonSaleProductOnModal('.soonSaleProduct');
8781            handleFilterDropdown();
8782            //HandleInerZoomNinia();
8783            HandleInerZoom();
8784            ImagesLightboxLink();
8785            handleReservation();
8786            reloadCartAfterBuy();
8787            toggleAttributesItems();
8788            selectAttributesItems();
8789            productQuantityParentClass('.tp-product');
8790            productQuantityParentClass('.tp-cart .ncx-mob-cart-v2');
8791            handleStoreFocusOnStoresMap();
8792            //modalAfterAddToCart();
8793            initFilterHexColorOnCheckbox();
8794            setPositionOnAreaElement();
8795            loadBlock();
8796            handlePersonalizationProductBuy();
8797            handleFindbarSessionID();
8798        },
8799
8800        width: windowWidth,
8801        height: windowHeight,
8802        handleBuyProductOnListing: handleBuyProductOnListing,
8803        handleTooltip: handleTooltip,
8804        handleAppearing: handleAppearing,
8805        handleCheckboxRadio: handleCheckboxRadio,
8806        handlePopover: handlePopover,
8807        handleProductListing: handleProductListing,
8808        handleFavoriteProduct: handleFavoriteProduct,
8809        handleHeaderCart: handleHeaderCart,
8810        miniCartSider: miniCartSider,
8811        handleFileSelect:handleFileSelect,
8812        handleFilterDropdown:handleFilterDropdown,
8813        handleProductsSlider: handleProductsSlider,
8814        print: printFrame,
8815        handleMapStoreShowHide: handleMapStoreShowHide,
8816        handleFixedFiltersButton: handleFixedFiltersButton,
8817        handleProductDetailsQuickViewOnModal: handleProductDetailsQuickViewOnModal,
8818        handleProductQueryViewOnModal: handleProductQueryViewOnModal,
8819        handleLocationBuyProductOnModal: handleLocationBuyProductOnModal,
8820        handleSoonSaleProductOnModal: handleSoonSaleProductOnModal,
8821        handleReadMore : handleReadMore,
8822        handleForms:handleForms,
8823        reloadCartAfterBuy: reloadCartAfterBuy,
8824        storeBycityId: storeBycityId,
8825        reinitOpenslider: reinitOpenslider,
8826        handleTypehead:handleTypehead,
8827        initTypeheadProductsReclamation:initTypeheadProductsReclamation,
8828        serilizeSSOCheckbox:serilizeSSOCheckbox,
8829        showHideMapAsAccordion:showHideMapAsAccordion,
8830        handleMasonry: handleMasonry,
8831        productQuantityParentClass:productQuantityParentClass,
8832        showMiniCartAfterAddingProduct: showMiniCartAfterAddingProduct,
8833        initFilterHexColorOnCheckbox:initFilterHexColorOnCheckbox,
8834        handleLoyaltyOfferDetailModal:handleLoyaltyOfferDetailModal,
8835        handleLoyaltyTab:handleLoyaltyTab,
8836        handleLoyaltyCouponDetailModal:handleLoyaltyCouponDetailModal,
8837        handleAfterClickAddOrderCart:handleAfterClickAddOrderCart
8838    };
8839};
8840
8841window.app = new App();
8842window.nbCart  = app;
8843window.nbStore = app;
8844
8845$(document).ready(function(){
8846    app.init();
8847    window.nbCart  = app;
8848    window.nbStore = app;
8849
8850    $(window).on('loadproductsevent', function (){
8851        app.initFilterHexColorOnCheckbox();
8852    });
8853
8854    $(window).on('initCartOnePage', function (){
8855        app.handleAfterClickAddOrderCart();
8856    });
8857});
8858/* end*/

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.