PageSourceSearch

https://www.mytrendyphone.dk/images/skins/Bewise/js/filter.v3.js?version=2

js mytrendyphone.dk collected 2026-09-26 05:02:42 UTC 66,281 bytes, 1,816 lines download raw bytes

1(function (global) {
2    function Filter() {
3        var _ = this;
4        var originalPager = $($(".pager")[0]).html();
5        var originalProducts = $($(".maincontainer .ProductList_Custom_UL")[0]).html();
6        var originalItemsFound = $($(".listtoolsleft .itemsfound")[0]).html();
7        var _hasLoadedOriginalProducts = false;
8
9        // private:
10        var _query = {};
11        let _hash = {};
12        var _loaded = false;
13        var _baseApiUrl = "https://api2.mytrendyphone.dk/api-new";
14        var _baseApiUrl2 = "https://"+document.location.hostname+"/_do/filters2.asp";
15
16        let categoryName = $('#categoryName').text().trim();
17
18        var _shopId = LanguageID;
19        var _categoryType = "";
20        var _category = "";
21        var _excludedFilters = "";
22        var _shortfilters = "";
23        let _pageNumber = 1;
24        let _totalProducts = 0;
25        let _productsPerPage = 0;
26        let _sortScore = "";
27        let _queryParameter = "";
28        let _querySeparator = "#";
29        let _forceFilter = false;
30        let _hasRefresh = false;
31
32        var _postEvent;
33        var _skipScroll = false;
34
35        //var _currency = "DKK";
36        var _currency = currency;
37		
38		
39        let minfilterprice = 0;
40        let maxfilterprice = 0;
41        let minstartprice = 0;
42        let maxstartprice = 0;
43
44        let filteredpricemin;
45        let filteredpricemax;
46
47        let _ignorePage = false;
48        let _hasPriceUrl = false;
49        let _runRedrectToFirstPage = false;
50
51
52        var _filterValues = {};
53        var _products = [];
54
55        let _selectedFilterValues = [];
56
57        let isProductList = $('body.webshop-productlist').length;
58
59        let productsfound = $('.btnfilter .found').eq(0).text();
60        //var filterbuttonresettext = 'Se ' + productsfound + ' resultater';
61        var filterbuttonresettext = language('filter.viewresults').replace('###',productsfound);
62        var originalFilterbuttonresettext = filterbuttonresettext;
63
64        var filterButtonReset = $('<div class="button filterbuttonreset">'+language('filter.reset')+'</div>');
65        filterButtonReset.on("click", function () {
66			console.log("filterButtonReset");
67								    if(runRewriteFilters()){
68							 console.log("sve regulare");
69						}
70						else{
71							 console.log("filterButtonReset");
72							  redirectToFirstPage();
73						}
74            _pageNumber = 1;
75            _filterValueUrl = "";
76
77            let url = location.pathname;
78			
79            //window.history.pushState('data', 'Title', url);
80			window.history.pushState({path: url}, '', url);
81            //console.error("push state: " + url);
82console.log('loadFilterValues c');
83            loadFilterValues(false);
84			
85			
86        });
87        var filterButtonShow = $('<div class="button filterbuttonshow">' + filterbuttonresettext + '</div>');
88        filterButtonShow.on("click", function () {
89            closeAside();
90        });
91
92        var filterButtons = $('<div class="filterbuttons"></div>').append(filterButtonReset, filterButtonShow);
93
94
95        var _productFilterContent = $('<div class="productfiltercontent"></div>');
96        var _productFilter = $(".productfilter").append('<div class="headline">'+language('filter.headline')+'</div>', _productFilterContent, filterButtons);
97
98        var _filterGenerateType = {
99            "PRICE RANGE CUSTOM": "price",
100            "REVIEW CUSTOM": "reviews"
101        };
102
103        var _filterValueUrl = "";
104        var _hasFiltered = false;
105        var _loadOriginalValues = false;
106
107        if(isProductList) {
108            _querySeparator = "?filters=true";
109        }
110		
111
112        function getCookie(name) {
113          let nameEQ = name + "=";
114          let ca = document.cookie.split(';');
115
116          for(let i=0;i < ca.length;i++) {
117            let c = ca[i];
118            while (c.charAt(0)==' ') {
119              c = c.substring(1,c.length);
120            }
121            if (c.indexOf(nameEQ) == 0) {
122              return c.substring(nameEQ.length,c.length);
123            }
124          }
125
126          return null;
127        }
128
129        function setLoadedProducts(products, totalProducts) {
130          $('.itemsloaded').text(products);
131          $('.itemstotal').text(totalProducts);
132        }
133		
134		function extractInternalId(url) {
135  const regex = /-(\d+)[sc]/;
136  const match = url.match(regex);
137  return match ? match[1] : null;
138}
139
140function countNonSortElements(queryString) {
141    var elements = queryString.split('&').filter(function(element) {
142        return element !== '';
143    });
144    var nonSortElementsCount = elements.filter(function(element) {
145        return !element.startsWith('sort');
146    }).length;
147    return nonSortElementsCount;
148}
149		
150		function runRewriteFilters(){
151			/*
152  let internalId = extractInternalId(CurrencyReturnUrl);
153  
154  internalId = parseFloat(internalId);
155			
156			if(LanguageID == "1" || LanguageID == "3"){
157				
158				const idArray = [303614,303609,303604,303589,303579,303574,303450,303430, 303435,303425,303505,303510,303332,303388,302865,302853, 303184,303119,303164,303154,303159,303107,303095,302501, 302516,302531,302546,294730,294735, 293027,298711,301958,293074,300646,300678,295016,298696, 294754,295726,293313,288840,283622,289872,288798,298726,290652,297296,300838,293647,296685,290908,301018,297107,295471,302756,293565,300662,298988, 300694,274139,297119,295559,294828,274140,301970,300862,285665,295415,266121,302318,295987,300874,296398,225451,296817,293015,297162, 275001,302781,295483,285623,297083,302686,295775,301258,263332,290194,256478,294629,293779,292219,295421,295511,199029,299003,293727,300337,
159				302576, 295496, 296793, 245120, 292799, 293079, 295762, 296570, 295459, 296528, 297626, 292403, 302776, 296276, 289990, 295750, 295374, 297071, 292843, 302731, 289481, 270335, 285644, 293480, 297380, 296691, 252713, 296522, 295577, 288913, 303388, 278249, 300886,226503, 292838, 295553, 303119, 295016, 280855, 293722, 295195, 272651,
160				297537, 291730, 295592, 296373, 292428, 279108, 290872, 268497, 297645, 299025, 300325, 245338, 287498, 295781, 294742, 302054, 296618, 297634, 295866, 303589, 290074, 300958, 293337, 265303, 297458, 288154, 272160, 303530, 302751,296367, 271576, 295665, 294783, 293264, 300313, 295028, 296965, 295719, 279109];
161const exists = idArray.includes(internalId);
162
163// Ispis rezultata
164if (exists) {
165  return false;
166}
167return false;
168			
169			}
170*/
171
172			
173		
174			
175			return false;
176		}
177		
178		function getCurrentPage() {
179    var match = CurrencyReturnUrl.match(/(s|c)(\d+)\.html$/);
180    return match ? match[2] : null;
181}
182		
183		function redirectToFirstPage(){
184			
185			var currentPage = getCurrentPage();
186			if(currentPage > 1){
187					console.log("redirectToFirstPage 2");
188				               window.location.href = CurrencyReturnUrl.replace(/(s|c)\d+\.html$/, '$11.html');
189
190			}
191			else {
192			     $(".pager").each(function () {
193                           $(this).html(originalPager);
194                    });
195					
196					
197					  $(".itemsfound").each(function () {
198                           $(this).html(originalItemsFound);
199                    });
200					
201					console.log("set original");
202					     $(".maincontainer .ProductList_Custom_UL").each(function () {
203                          $(this).html(originalProducts);
204                      });
205
206			}
207		}
208
209        function buildBrowserUrl(shouldPushState) {
210            console.log('buildurl');
211        	if (!_filterValueUrl || !_filterValueUrl.length) {
212        		if (_pageNumber > 1 || (_hasRefresh && ((_sortScore && _sortScore.length) || (_productsPerPage && _productsPerPage > 0)))) {
213                    var separator_ = isProductList ? _querySeparator : '#';
214        			let url = location.pathname + separator_ + "&start=" + _pageNumber;
215        			//let url = location.pathname + "?start=" + _pageNumber;
216
217        			if (_excludedFilters && _excludedFilters.length) {
218        				url += "&excludedFilters=" + _excludedFilters;
219        			}
220
221        			if (_sortScore && _sortScore.length) {
222        				url += _sortScore;
223        			}
224
225        			if (_productsPerPage && _productsPerPage > 0) {
226        				url += "&perpage=" + _productsPerPage;
227        			}
228
229        			//window.history.pushState('data', 'Title', url);
230                      console.log('buildBrowserUrl pushState', url);
231					  			if(runRewriteFilters()){
232						console.log("sve regulare3", CurrencyReturnUrl);
233									window.history.pushState({path: url}, '', url);
234					}
235					else {
236						
237					console.log("specific");
238					}
239		
240                    //console.log('go');
241                    //setCanocical();
242                    //console.error("push state: " + url);
243        		}
244        		return;
245        	}
246
247        	let filterUrlBrowser = "" + _filterValueUrl;
248
249        	if (filterUrlBrowser[0] !== '&') {
250        		filterUrlBrowser = '&' + filterUrlBrowser;
251        	}
252
253        	filterUrlBrowser = filterUrlBrowser || "";
254
255            for (let n = 0; n < 1000; n++) {
256                filterUrlBrowser = filterUrlBrowser.replace("&start=" + n, "").replace("start=" + n, "");
257            }
258
259        	filterUrlBrowser = filterUrlBrowser
260        		.replace("&perpage=24", "")
261        		.replace("&perpage=48", "")
262        		.replace("&perpage=60", "")
263        		.replace("&perpage=72", "")
264        		.replace("&perpage=96", "")
265        		.replace("&perpage=200", "")
266        		.replace("&perpage=24", "")
267        		.replace("&sort=score", "")
268        		.replace("&sort=price_asc", "")
269        		.replace("&sort=date", "")
270        		.replace("&sort=popular", "");
271            
272            
273            //console.log(_querySeparator);
274            
275        	let url = location.pathname
276        		+ _querySeparator
277        		+ filterUrlBrowser
278        		+ (_pageNumber && _pageNumber > 1 ? ("&start=" + _pageNumber) : "")
279        		+ ((_sortScore && _sortScore.length && _category !== "search") ? (_sortScore) : "")
280        		+ ((_productsPerPage && _productsPerPage > 0) ? ("&perpage=" + _productsPerPage) : "");
281
282                //window.history.pushState('data', 'Title', url);
283				
284				url = url.replace('&q=', 'q=');
285
286                window.history.pushState({path: url}, '', url);
287        }
288
289        function buildUrl() {
290			
291			  console.log('buildurl2');
292			
293			  
294            let url = _baseApiUrl + "?&";
295
296            let queries = [];
297
298            if (_hasFiltered && (!_filterValueUrl || !_filterValueUrl.length) && _pageNumber <= 1) {
299                _hasFiltered = false;
300                _loadOriginalValues = true;
301            }
302			
303
304            if (_filterValueUrl && _filterValueUrl.length) {
305                _hasFiltered = true;
306                _loadOriginalValues = false;
307
308                if (_filterValueUrl[0] === "&") {
309                    _filterValueUrl = _filterValueUrl.substring(1);
310                }
311
312                if (_excludedFilters && _excludedFilters.length) {
313                    if (_filterValueUrl.indexOf('excludedFilters') === -1) {
314                      _filterValueUrl +=  "&excludedFilters=" + _excludedFilters;
315                    }
316                }
317
318                queries.push(_filterValueUrl);
319            } else {
320              if (_excludedFilters && _excludedFilters.length) {
321                  queries.push("excludedFilters=" + _excludedFilters);
322              }
323            }
324
325            // get DD page number
326            const pageUrlRegex = /s(\d+)\.html/;
327            
328            const pageUrlMatch = window.location.href.match(pageUrlRegex);
329            if (pageUrlMatch && location.href.indexOf('filters=true') === -1) {
330              const number = parseInt(pageUrlMatch[1]);
331              if(number > 1) {
332                _pageNumber = number;
333              }
334            }
335
336            if (_pageNumber > 1 && !_ignorePage) {
337                queries.push("start=" + _pageNumber);
338            }
339
340            if (filteredpricemin && filteredpricemax) {
341              queries.push("price_from=" + filteredpricemin);
342              queries.push("price_to=" + filteredpricemax);
343            }
344
345            //queries.push("callback=jQuery351084276979419926_1645180031763");
346            queries.push("shop=" + _shopId);
347            queries.push("categoryType=" + _categoryType);
348            queries.push("category=" + _category);
349            
350            if (_shortfilters && _shortfilters.length) {
351                queries.push("shortfilters=" + _shortfilters);
352            }
353
354            let perPageCookie = +getCookie("itemsperpage");
355
356            if (!isNaN(perPageCookie) && perPageCookie > 0) {
357              let newItemsPerPage = perPageCookie;
358
359              if (newItemsPerPage !== _productsPerPage) {
360                _productsPerPage = perPageCookie;
361                buildBrowserUrl();
362              } else {
363                _productsPerPage = perPageCookie;
364              }
365            }
366
367            if (_productsPerPage > 0) {
368              queries.push("perpage=" + _productsPerPage);
369            }
370
371            let sortValue = $('.Productlist_Sort_Select').val() || "";
372
373            if (sortValue && sortValue.length ) {
374              let sortScore = "";
375              switch (sortValue) {
376                case "Default": sortScore = "sort=score"; break;
377                case "price_asc": sortScore = "sort=price_asc"; break;
378                case "addeddate_desc": sortScore = "sort=date"; break;
379                case "sold_desc": sortScore = "sort=popular"; break;
380              }
381              queries.push(sortScore);
382              let newSortScore = "&"+sortScore;
383
384              if (newSortScore !== _sortScore) {
385                _sortScore = newSortScore;
386                buildBrowserUrl();
387              } else {
388                _sortScore = newSortScore;
389              }
390            }
391
392            if (_queryParameter && _queryParameter.length) {
393              queries.push("q=" + _queryParameter);
394            }
395            //queries.push("_=1645180031764");
396
397            url += queries.join("&");
398			
399            return url;
400        }
401
402        function loadQuery() {
403            let qs = global.location.search.replace("?", "").split("&").map(function (e) {
404                return e.split("=");
405            });
406
407            _query = {};
408
409            if (qs.length > 0) {
410                $.each(qs, function (i, keyValue) {
411                    var key = keyValue[0];
412                    var value = keyValue[1];
413
414                    _query[key] = value;
415                });
416            }
417        }
418		
419
420        function loadHashMap(hash) {
421            let qs = hash.replace(_querySeparator, "").split("&").map(function (e) {
422                return e.split("=");
423            });
424
425            let hashMap = {};
426
427            if (qs.length > 0) {
428                $.each(qs, function (i, keyValue) {
429                    var key = keyValue[0];
430                    var value = keyValue[1];
431
432                    hashMap[key] = value;
433                });
434            }
435
436            return hashMap;
437        }
438
439        function loadHash() {
440            let qs = isProductList ? global.location.search.replace(_querySeparator, "").split("&").map(function (e) {
441                return e.split("=");
442            }) : global.location.hash.replace("#", "").split("&").map(function (e) {
443                return e.split("=");
444            });
445			
446			if (window.location.href.indexOf('search.asp') !== -1) {
447				_querySeparator = "?";
448				 qs = global.location.search.replace("?", "").split("&").map(function (e) {
449					 
450                return e.split("=");
451            });
452			
453			_filterTest = '';
454			 $.each(qs, function(key, value) {
455			
456			_filterTest = _filterTest + '&' + value[0] + '=' + value[1];
457
458            });
459	
460	        if (qs.length > 0) {
461	        _filterValueUrl = _filterTest;
462	        }
463            }
464		
465            _hash = {};
466
467            if (qs.length > 0) {
468                $.each(qs, function (i, keyValue) {
469                    var key = keyValue[0];
470                    var value = keyValue[1];
471
472                    _hash[key] = value;
473                });
474            }
475			
476        }
477
478        function loadInitialData() {
479            var dataElement = $("#filters");
480
481            if (dataElement.length === 0) {
482                return;
483            }
484			
485			            			  			if(runRewriteFilters()){
486						
487					}
488					else {
489						
490						
491					          $('select.Productlist_Sort_Select').on('change',function() {
492                let sortBy = $(this).val();
493				console.log("createCookie", createCookie);
494				  createCookie('sortBy',sortBy);
495		try{SilentAjaxGetRequest("/shop/AjaxWrapper.asp?FC=changesortorder&SortField="+sortBy).then(function(){return document.location.reload()})}catch(t){}
496
497            });
498
499					}
500
501            _categoryType = dataElement.attr("data-category-type");
502            _category = dataElement.attr("class");
503            _excludedFilters = dataElement.attr("data-excluded-filters");
504            _shortfilters = dataElement.attr("data-shortfilters");
505          //  _forceFilter = (""+dataElement.attr("data-force-filters")) === "1";
506            _loadOriginalValues = _forceFilter === true;
507        }
508
509        function get(url, callback) {
510            $.ajax({
511                url: url,
512                type: "GET",
513                cache: false,
514                jsonp: "callback",
515                dataType: "jsonp",
516
517                success: function (response) {
518                    if (!response) {
519                        return;
520                    }
521
522                    if (callback) {
523                        callback.call(_, response);
524                    }
525                },
526                error: function (error) {
527                    console.error(error);
528                }
529            });
530        }
531
532        function loadFilterValues(isInitial, loadCallback) {
533			  console.log('loadFilterValues1');
534			  console.log(isInitial);
535			  console.log(loadCallback);
536            var url = buildUrl();
537            _ignorePage = false;
538            
539            
540            setCanocical();
541
542            get(url, function (response) {
543				console.log('get a');
544
545                if (response.prices && response.prices.priceMinimum >= 0) {
546                    minfilterprice = response.prices.priceMinimum;
547                }
548                if (response.prices && response.prices.priceMaximum >= 0) {
549                    maxfilterprice = response.prices.priceMaximum;
550                }
551
552                minstartprice = response.prices.priceMinimum;
553                maxstartprice = response.prices.priceMaximum;
554
555                if (!response || !response.filters) {
556                    return;
557                }
558				console.log('get b');
559
560                _filterValues = response.filters;
561                let productsPerPage = +response.per_page;
562
563                if (!isNaN(productsPerPage) && productsPerPage > 0) {
564                  let newProductsPerPage = productsPerPage;
565
566                  if (_productsPerPage !== newProductsPerPage) {
567                    _productsPerPage = productsPerPage;
568					console.log("loadFilterValues");
569                    buildBrowserUrl();
570                  } else {
571                    _productsPerPage = productsPerPage;
572                  }
573                }
574
575                _totalProducts = response.totalProducts;
576                let totalProductsWithoutFilters = response.totalProductsWithoutFilters;
577                let customPriceFilterActive = response.custom_price_filter_active;
578
579				console.log('get c');
580
581                //console.log(_totalProducts);
582
583                let selected = renderFilter(isInitial);
584
585                renderActiveFilters();
586
587                if (!isInitial || _forceFilter) {
588                    if (_loadOriginalValues && !_forceFilter) {
589						console.log('start 222');
590                      filteredpricemin = 0;
591                      filteredpricemax = 0;
592                        console.log('return');
593                        $(".maincontainer .ProductList_Custom_UL").each(function () {
594                          $(this).html(originalProducts);
595                      });
596
597                      // $(".pager").each(function () {
598                      //     $(this).html(originalPager);
599                      // });
600
601                      $('.transformed').removeClass('transformed');
602                      //console.log('start');
603					  	console.log("transformProductlist run");
604                      transformProductlist();
605
606                      _loadOriginalValues = false;
607                      $(".button.filterbuttonshow").text(originalFilterbuttonresettext);
608                      $('.btnfilter .count').text("");
609                      renderPager();
610                      _.isfiltered = true;
611
612					  console.log('start 1');
613					  		console.log("_runRedrectToFirstPage", _runRedrectToFirstPage);
614			if(_runRedrectToFirstPage){
615				console.log("run reddirect2!");
616				_runRedrectToFirstPage = false;
617				 redirectToFirstPage();
618			}
619			else{
620				 setLoadedProducts(_totalProducts, totalProductsWithoutFilters);
621			}
622			
623			
624                     
625					  
626					  
627					  
628                    } else if (_loadOriginalValues && _forceFilter) {
629						console.log('start 22');
630                      _loadOriginalValues = false;
631                      $(".button.filterbuttonshow").text(originalFilterbuttonresettext);
632                      $('.btnfilter .count').text("");
633console.log('loadFilterValues d');
634                      loadFilterValues(false,loadCallback);
635                      return;
636                    }
637					else {
638                        _products = response.products || [];
639
640                        $('.btnfilter .found').text("" + (_totalProducts || 0));
641                        $('.btnfilter .count').text(selected > 0 ? ("" + selected) : "");
642
643                        productsfound = $('.btnfilter .found').eq(0).text();
644                        filterbuttonresettext = language('filter.viewresults').replace('###',productsfound);
645
646                        $(".button.filterbuttonshow").text(filterbuttonresettext);
647
648                        loadProductList(isInitial);
649
650                        renderPager();
651
652
653                        _.isfiltered = true;
654
655						console.log('start 2');
656											  				    if(runRewriteFilters()){
657							 setLoadedProducts(_totalProducts, totalProductsWithoutFilters);
658						}
659						else{
660							console.log("specific 44");
661							  console.log(_selectedFilterValues);
662									  console.log(_selectedFilterValues.length);
663							 	  if (!_selectedFilterValues.length && customPriceFilterActive == "0") {
664    console.log("specific 4");
665    redirectToFirstPage();
666}
667					  else{
668						   setLoadedProducts(_totalProducts, totalProductsWithoutFilters);
669					  }
670					  
671					  
672						}
673						
674                       
675                    }
676                }
677				else {
678      _products = response.products || [];
679
680                    $('.btnfilter .found').text("" + (_totalProducts || 0));
681                    $('.btnfilter .count').text(selected > 0 ? ("" + selected) : "");
682
683                    productsfound = $('.btnfilter .found').eq(0).text();
684                    filterbuttonresettext = language('filter.viewresults').replace('###',productsfound);
685
686                    $(".button.filterbuttonshow").text(filterbuttonresettext);
687
688                 
689					
690					
691					    if(runRewriteFilters()){
692							   loadProductList(isInitial);
693
694                    renderPager();
695
696
697                    _.isfiltered = true;
698
699                    setLoadedProducts(_totalProducts, totalProductsWithoutFilters);
700
701                    if (!_hasLoadedOriginalProducts) {
702                        _hasLoadedOriginalProducts = true;
703                        originalProducts = $($(".maincontainer .ProductList_Custom_UL")[0]).html();
704                    }
705							
706							 console.log("sve regulare");
707						}
708						else{
709							  console.log("specific");
710						}
711						
712					
713					
714
715       
716                }
717
718                //let productsresultcount = $('.maincontainer .ProductList_Custom_UL > li').length;
719                //if (productsresultcount <= 40) {
720                if (_totalProducts <= 40) {
721                    $('.listtoolsbottom').addClass('hide');
722                }
723                else {
724                    $('.listtoolsbottom').removeClass('hide');
725                }
726
727                if (_postEvent) {
728                    _skipScroll = true;
729                } else {
730                    _skipScroll = false;
731                }
732
733                if (loadCallback) {
734                  loadCallback(function() {
735                    if (_postEvent) {
736                        _postEvent();
737                    _postEvent = null;
738                    }
739                  });
740                } else if (_postEvent) {
741                    _postEvent();
742                    _postEvent = null;
743                }
744            });
745        }
746
747        function renderPager() {
748            $('.pager,.row.productListHeaderTop').each(function () {
749                renderSpecificPager($(this));
750            });
751        }
752
753        function changePage(pageNumber) {
754          console.log("changing to page: " + pageNumber);
755            _pageNumber = pageNumber;
756
757            buildBrowserUrl();
758
759            _hasFiltered = true;
760console.log('loadFilterValues v');
761            loadFilterValues(false);
762        }
763
764        function createPagingUrl(linkPageNumber) {
765            if (!_filterValueUrl || !_filterValueUrl.length) {
766        		if (linkPageNumber > 1 || (_hasRefresh && ((_sortScore && _sortScore.length) || (_productsPerPage && _productsPerPage > 0)))) {
767                    var separator_ = isProductList ? _querySeparator : '#';
768        			let url = location.pathname + separator_ + "&start=" + linkPageNumber;
769        			//let url = location.pathname + "?start=" + _pageNumber;
770
771        			if (_excludedFilters && _excludedFilters.length) {
772        				url += "&excludedFilters=" + _excludedFilters;
773        			}
774
775        			if (_sortScore && _sortScore.length) {
776        				url += _sortScore;
777        			}
778
779        			if (_productsPerPage && _productsPerPage > 0) {
780        				url += "&perpage=" + _productsPerPage;
781        			}
782
783        			//window.history.pushState('data', 'Title', url);
784					return url;
785                    //console.error("push state: " + url);
786        		}
787        		return;
788        	}
789
790        	let filterUrlBrowser = "" + _filterValueUrl;
791
792        	if (filterUrlBrowser[0] !== '&') {
793        		filterUrlBrowser = '&' + filterUrlBrowser;
794        	}
795
796        	filterUrlBrowser = filterUrlBrowser || "";
797
798            for (let n = 0; n < 1000; n++) {
799                filterUrlBrowser = filterUrlBrowser.replace("&start=" + n, "").replace("start=" + n, "");
800            }
801
802        	filterUrlBrowser = filterUrlBrowser
803        		.replace("&perpage=24", "")
804        		.replace("&perpage=48", "")
805        		.replace("&perpage=60", "")
806        		.replace("&perpage=72", "")
807        		.replace("&perpage=96", "")
808        		.replace("&perpage=200", "")
809        		.replace("&perpage=24", "")
810        		.replace("&sort=score", "")
811        		.replace("&sort=price_asc", "")
812        		.replace("&sort=date", "")
813        		.replace("&sort=popular", "");
814            
815        	let url = location.pathname
816        		+ _querySeparator
817        		+ filterUrlBrowser
818        		+ (linkPageNumber && linkPageNumber > 1 ? ("&start=" + linkPageNumber) : "")
819        		+ ((_sortScore && _sortScore.length && _category !== "search") ? (_sortScore) : "")
820        		+ ((_productsPerPage && _productsPerPage > 0) ? ("&perpage=" + _productsPerPage) : "");
821
822                //window.history.pushState('data', 'Title', url);
823				
824				url = url.replace('&q=', 'q=');
825                return url;
826          }
827
828        function renderSpecificPager(pager) {
829            pager.empty();
830
831            let pageCount = Math.ceil(_totalProducts / _productsPerPage);
832
833            if (pageCount < 2) {
834              //console.log("pageCount less");
835                return;
836            }
837
838            if (_pageNumber > 1) {
839                //var prev = $('<a href="javascript:void(0);">Forrige</a>');
840                let prev = $('<a href="#" rel="prev">'+language('filter.prev')+'</a>');
841                prev.attr('href', createPagingUrl(_pageNumber - 1));
842                prev.on("click", function (e) {
843                    e.preventDefault();
844                    changePage(_pageNumber - 1);
845					return false;
846                });
847                pager.append(prev);
848            }
849
850            let pages = $('<div class="pages"></div>');
851            pager.append(pages);
852            //let hasAnyActive = false;
853
854            for (let i = 0; i < pageCount; i++) {
855                let isHidden = (i < (_pageNumber - 2) || i > _pageNumber) && i < (pageCount - 1) && i > 0;
856                if (isHidden) {
857                    continue;
858                }
859
860                let isActive = (i + 1) === _pageNumber;
861
862                let separateFirst = pageCount > 3 && _pageNumber >= 2 && i === 0;
863                let separateLast = pageCount > 3 && i >= 3 && i === (pageCount - 1);
864
865                if (separateLast) {
866                    let separate = $('<span class="HiddenPagesIndicator_ProductList">...</span>');
867                    pages.append(separate);
868                }
869
870                //let page = $('<a href="javascript:void(0);">' + (i + 1) + '</a>');
871                var navText = isActive ? '' : (_pageNumber > (i + 1) ? 'rel="prev"': 'rel="next"');
872                let page = $(`<a href="#" ${navText}>` + (i + 1) + '</a>');
873                let pageNumber = (i + 1);
874                page.attr('href', createPagingUrl(pageNumber));
875                page.on("click", function (e) {
876                    e.preventDefault();
877                    changePage(pageNumber);
878					return false;
879                });
880
881                if (isActive) {
882                    page.addClass("ActivePageNumber_ProductList");
883                } else {
884                    page.addClass("InactivePageNumber_ProductList");
885                }
886                pages.append(page);
887
888                if (separateFirst) {
889                    let separate = $('<span class="HiddenPagesIndicator_ProductList">...</span>');
890                    pages.append(separate);
891                }
892            }
893
894            if ((_totalProducts / _pageNumber) > _productsPerPage) {
895                //var next = $('<a href="javascript:void(0);">Næste</a>');
896                let next = $('<a href="#" rel="next">'+language('filter.next')+'</a>');
897                next.attr('href', createPagingUrl(_pageNumber + 1));
898                next.on("click", function (e) {
899                    e.preventDefault();
900                    changePage(_pageNumber + 1);
901					return false;
902                });
903                pager.append(next);
904            }
905        }
906
907        function loadProductList(isInitial) {
908            console.log("loadProductList",isInitial);
909            let productList = $(".maincontainer .ProductList_Custom_UL");
910			
911			productList.removeClass('loading');
912            productList.empty();
913
914            if (!_products || !_products.length) {
915                return;
916            }
917
918
919
920            $.each(_products, function (i, p) {
921                let productElement = renderProduct(p, i);
922
923                productList.append(productElement);
924            });
925
926			console.log("transformProductlist run 2");
927            transformProductlist();
928            //if (!_skipScroll && !isInitial) scrollToElement("productlist");
929        }
930
931        function crossParseFloat(s) {
932            if (s.indexOf(',') !== -1 && s.indexOf('.') !== -1) {
933                if (s.indexOf(',') < s.indexOf('.')) {
934                    s = s.replace(",", "");
935                } else {
936                    s = s.replace(".", "").replace(",", ".");
937                }
938            }
939
940            if (s.indexOf(',') !== -1) {
941                return parseFloat(s.replace(",", "."));
942            }
943
944            return parseFloat(s);
945        }
946
947        function createInputField(name, value, type, id) {
948            let inputFIeld = $('<input' + (id && id.length ? ' id="' + id + '"' : '') + ' type="' + type + '"' + (name && name.length ? ' name="' + name + '"' : '') + '  value="' + (value || "") + '" />');
949
950            return inputFIeld;
951        }
952
953        function escapeRegExp(string) {
954            return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
955        }
956
957        function replaceAll(str, find, replace) {
958            return str.replace(new RegExp(escapeRegExp(find), 'g'), replace);
959        }
960        
961        function renderProduct(product, index) {
962
963            console.log(product);
964            product.number = product.primary_id;
965            product.name = product.product_name[0];
966
967            let price = crossParseFloat(product.price).toFixed(2);
968
969            let retailPrice;
970            if (product.retailPrice && product.retailPrice.length) {
971                retailPrice = crossParseFloat(product.retailPrice);
972            } else {
973                retailPrice = 0;
974            }
975
976            //let productListItem = $('<li class="BackgroundColor1_Productlist"></li>');
977            let productListItem = $('<li></li>');
978
979            let productListForm = $('<form method="POST" action="/shop/basket.asp" name="myform' + index + '" id="productlistBuyForm' + index + '"></form>');
980            productListItem.append(productListForm);
981
982            productListForm.append(createInputField("VerticalScrollPos", 1, "hidden"));
983            productListForm.append(createInputField("BuyReturnUrl", location.pathname, "hidden"));
984            productListForm.append(createInputField("Add", 1, "hidden"));
985            productListForm.append(createInputField("ProductID", product.number, "hidden"));
986
987            let productDiv = $('<div class="product" data-id="' + product.number + '" data-master="' + product.number + '"></div>');
988            productListForm.append(productDiv);
989
990            let gtagString = 'gtag("event","select_content",{content_type:"product",items:[{id:"' + product.number + '",name:"' + product.name + '",price:"' + price + '",brand:"",list_position:1,list_name:"categorylist",category: "' + categoryName + '"}]});';
991            gtagString = replaceAll(gtagString, '"', '\'');
992            //console.log(gtagString);
993
994            let nameDiv = $('<div class="name"></div>');
995            productDiv.append(nameDiv);
996            let nameLink = $('<a onclick="' + gtagString + '" title="' + product.name + '" href="' + product.product_url + '">' + product.name + '</a>');
997            nameDiv.append(nameLink);
998
999            let imageDiv = $('<div class="image" data-savings=""></div>');
1000            productDiv.append(imageDiv);
1001            let imageLink = $('<a onclick="' + gtagString + '" title="' + product.name + '" href="' + product.product_url + '"></a>');
1002            imageDiv.append(imageLink);
1003            let imageTag = $('<img alt="' + product.name + '" height="120" loading="lazy" src="' + product.image_url + '" width="120" />');
1004            imageLink.append(imageTag);
1005
1006            let buyDiv = $('<div class="buy"></div>');
1007            productDiv.append(buyDiv);
1008            buyDiv.append('<a href="' + product.product_url + '" title="' + product.name + '">
1008'+language('misc.addtobasket')+'</a>');
1009
1010            productDiv.append('<div class="advancedvariants"></div>');
1011
1012            let priceDiv = $('<div class="price"></div>');
1013            productDiv.append(priceDiv);
1014
1015            let priceUL = $('<ul class="Prices_Custom_UL"></ul>');
1016            priceDiv.append(priceUL);
1017            let priceLI = $('<li></li>');
1018            priceUL.append(priceLI);
1019            let priceStrike;
1020            if (retailPrice >= 1) {
1021                priceStrike = $('<strike>' + retailPrice.toFixed(2) + '</strike>');
1022            } else {
1023                priceStrike = $('<strike class="invisible">&nbsp;</strike>');
1024            }
1025            priceLI.append(priceStrike);
1026            let priceActual = $('<div class="actual"></div>');
1027            priceLI.append(priceActual);
1028            let priceSpan = $('<span content="' + price + '" itemprop="price">' + product.price + '</span><span class="currency">' + product.currency + '</span>');
1029            priceActual.append(priceSpan);
1030
1031
1032
1033            if (LanguageID == 37 || LanguageID == 3 || LanguageID == 41 || LanguageID == 30 || LanguageID == 1) {
1034                console.log("promena console fi2");
1035                console.log(product)
1036
1037                const newStockStatus = getProductStatus(product.primary_id,product.stock,product.dt );
1038
1039                console.log(newStockStatus);
1040
1041                // product.find('.stock ').html(newStockStatus.icon + newStockStatus.stockStatus.first);
1042                // product.find('.productnumber').html(newStockStatus.stockStatus.second)
1043                //
1044                // const newColor = newStockStatus.color; // ili 'red', 'green'
1045                // const el = product.find('.stock');
1046                // const classList = el.attr('class').split(/\s+/);
1047                //
1048                // const currentColorClass = classList.find(c => c.startsWith('color-'));
1049                // if (currentColorClass) {
1050                //     el.removeClass(currentColorClass);
1051                // }
1052                // el.addClass(`color-${newColor}`);
1053
1054
1055                //render
1056                let productStatusDiv = $('<div class="product-status"></div>');
1057                productDiv.append(productStatusDiv);
1058                let productStockDiv = $('<div class="stock color-'+ newStockStatus.color + '"></div>');
1059                productStatusDiv.append(productStockDiv);
1060                let productStockImage;
1061                //console.log(product.stock_status_text.toLowerCase());
1062
1063
1064
1065                    productStockImage = $(newStockStatus.icon + newStockStatus.stockStatus.first);
1066                    console.log("image:" + productStockImage);
1067
1068                productStockDiv.append(productStockImage);
1069                //console.log(product.stock_status_text);
1070                let productNumberDiv = $('<div><span class="productnumber">' + newStockStatus.stockStatus.second + '</span></div>');
1071                productStatusDiv.append(productNumberDiv);
1072
1073            }
1074            else{
1075
1076                let productStatusDiv = $('<div class="product-status"></div>');
1077                productDiv.append(productStatusDiv);
1078                let productStockDiv = $('<div class="stock" style="font-weight: bold; display: flex; align-items: center; gap: 0.4em;"></div>');
1079                productStatusDiv.append(productStockDiv);
1080                let productStockImage;
1081                //console.log(product.stock_status_text.toLowerCase());
1082
1083
1084                if (product.stock_status_text.toLowerCase().indexOf('på lager') !== -1 || product.stock_status_text.toLowerCase().indexOf('på fjernlager') !== -1 || product.stock_status_text.toLowerCase().indexOf('arastossa') !== -1) {
1085                    productStockImage = $('<img alt="'+language('misc.instock')+'" height="8" loading="lazy" src="/images/skins/Bewise/images/icon-instock.svg" width="8" />');
1086                } else {
1087                    productStockImage = $('<img alt="'+language('misc.notinstock')+'" height="8" loading="lazy" src="/images/skins/Bewise/images/icon-notinstock.svg" width="8" />');
1088                }
1089                productStockDiv.append(productStockImage);
1090                //console.log(product.stock_status_text);
1091                let productNumberDiv = $('<div>'+language('misc.productnumber')+': <span class="productnumber">' + product.number + '</span></div>');
1092                productStatusDiv.append(productNumberDiv);
1093                console.log("slide5");
1094            }
1095
1096            console.log("add product");
1097
1098            return productListItem;
1099        }
1100
1101        function renderFilter(isInitial) {
1102            let filterValueId = 1;
1103            let selected = 0;
1104            _selectedFilterValues = [];
1105
1106            _productFilterContent.empty();
1107
1108            for (let groupKey in _filterValues) {
1109                let filterGroup = _filterValues[groupKey];
1110
1111                let valuesObject = filterGroup.filters;
1112
1113                let values = [];
1114
1115                for (let valueKey in valuesObject) {
1116                    let filterValue = valuesObject[valueKey];
1117
1118                    if (filterValue.count <= 0) {
1119                      continue;
1120                    }
1121
1122                    values.push({
1123                        key: valueKey,
1124                        value: filterValue
1125                    });
1126                }
1127
1128                if (!values || !values.length) {
1129                  continue;
1130                }
1131				
1132				let originalFilterGroupname = filterGroup.name;
1133                filterGroup.name = filterGroup.name.toUpperCase();
1134
1135				
1136				/*
1137                let overrideName = global.filtertext && global.filtertext[filterGroup.name];
1138
1139                if (overrideName && overrideName.length) {
1140                    filterGroup.name = overrideName;
1141                }
1142				*/
1143				
1144
1145                let filterGroupElement = $("<div></div>", {
1146                    class: "filter-group filter-group-" + filterGroup.name.replace(" ", "_")
1147                });
1148				
1149				
1150				
1151				let nospacename = originalFilterGroupname.replaceAll(' ','').toLowerCase();
1152				//console.log(originalFilterGroupname,nospacename);
1153				let translatedgroupname = language('filter.'+nospacename);
1154				if (translatedgroupname !== '') {
1155					filterGroup.name = translatedgroupname;
1156				}
1157				
1158				
1159                let filterGroupTitle = $("<div></div>");
1160				if(groupKey == "model_name" && values.length > 5){
1161				 filterGroupTitle = $("<div></div><input type=\"text\" id=\"modelSearch\" placeholder=\"" + language('filter.search_model') + "\" style=\"margin-bottom: 10px;width: 100%;text-align: center;text-transform: uppercase;\">");
1162				}
1163			
1164                filterGroupTitle.text(filterGroup.name);
1165                filterGroupElement.append(filterGroupTitle);
1166
1167                let generateType = _filterGenerateType[originalFilterGroupname];
1168
1169                // if (generateType === "price") {
1170                //
1171                // }
1172                let hasSelectedPrice = false;
1173                if (generateType === "price") {
1174                    //values = values.reverse();
1175                    //console.log(filterGroup)
1176
1177                    let newValues = [];
1178
1179                    for (let i = 0; i < values.length; i++) {
1180                      let kv = values[i];
1181                      let valueKey = kv.key;
1182                      let valueText = valueKey;
1183
1184                      valueText = valueText.replace("price_range", "");
1185
1186                      let ranges = valueText.split("-");
1187
1188                      let rangeX = +ranges[0];
1189
1190                      if (ranges[0] == "0") {
1191                          valueText = language('filter.below')+ " " + ranges[1] + " " + _currency;
1192                      } else if (ranges[1] == "x") {
1193                          valueText = ranges[0] + " " + _currency + " " + language('filter.above');
1194                      } else {
1195                          valueText = ranges[0] + " " + _currency + " - " + ranges[1] + " " + _currency;
1196                      }
1197
1198                      newValues.push({
1199                        rangeX: rangeX,
1200                        kv: kv
1201                      });
1202                    }
1203
1204                    values = newValues.sort(function(a,b) { return a.rangeX - b.rangeX; }).map(function(a) { return a.kv; });
1205
1206                    if (values.length >= 1 && values.length <= 3 && (!isInitial || _hasPriceUrl)) {
1207                      hasSelectedPrice = true;
1208                    }
1209                }
1210
1211                let isOverflow = values.length > 5;
1212
1213                if (isOverflow) {
1214                    filterGroupElement.addClass("filtergroupoverflow");
1215                }
1216
1217                let hasGeneratedAllPrices = false;
1218
1219                let coverInput;
1220
1221                for (let i = 0; i < values.length; i++) {
1222                    let kv = values[i];
1223                    let valueKey = kv.key;
1224                    let filterValue = kv.value;
1225                    filterValueId++;
1226
1227                    if (filterValue.count <= 0) {
1228                      continue;
1229                    }
1230
1231                    let filterValueElement = $("<label></label>", {
1232                        for: filterValueId,
1233                        class: "filter-value filter-value-" + valueKey.replace(" ", "_")
1234                    });
1235
1236                    let filterInput = $("<input />", {
1237                        class: "filterinput"
1238                    });
1239                    if (isInitial && filterGroup.name === "COVER TYPE" && values.length === 1) {
1240                        coverInput = filterInput;
1241                    }
1242                    filterInput.attr("type", "checkbox");
1243                    filterInput.attr("id", "" + filterValueId);
1244
1245                    filterInput.attr("data-url", filterValue.url);
1246
1247                    let isSelected = filterValue.checked > 0;
1248
1249                    if (isSelected) {
1250                        selected++;
1251                        filterInput.prop("checked", true);
1252                    }
1253
1254                    filterInput.on("change", function () {
1255                        filterInput.prop("checked", true);
1256                        _filterValueUrl = filterInput.attr("data-url");
1257                        _pageNumber = 1;
1258
1259                        buildBrowserUrl();
1260console.log('loadFilterValues q');
1261                        loadFilterValues(false);
1262                    });
1263
1264                    filterValueElement.append(filterInput);
1265
1266                    let filterValueTitle = $('<span class="filtertext"></span>');
1267
1268                    let valueText = valueKey;
1269
1270                    if (generateType === "price") {
1271
1272                        valueText = valueText.replace("price_range", "");
1273
1274
1275                        let ranges = valueText.split("-");
1276
1277                        /*
1278                        if (i+1 == values.length) {
1279                            console.log(ranges);
1280                        }
1281                        */
1282
1283                        //maxfilterprice = ranges[ranges.length][0];
1284
1285                        if (ranges[0] == "0") {
1286                            valueText = language('filter.below')+" " + ranges[1] + " " + _currency;
1287                        } else if (ranges[1] == "x") {
1288                            valueText = ranges[0] + " " + _currency + " "+language('filter.above');
1289                        } else {
1290                            valueText = ranges[0] + " " + _currency + " - " + ranges[1] + " " + _currency;
1291                        }
1292                    } else if (valueText == "1") {
1293                        valueText = "Ja";
1294                    } else if (generateType == 'reviews') {
1295                        filterValueElement.addClass('reviewfilter');
1296                        let reviewstars = parseFloat(valueText.replace('r', ''));
1297                        let minstars = 5;
1298
1299                        let starshtml = '<span class="reviewstars">';
1300                        for (let s = 0; s < reviewstars; s++) {
1301                            starshtml += '<img alt="Rating" height="18" loading="lazy" src="/images/skins/Bewise/images/icon-rating-star.svg" width="18">';
1302                            minstars -= 1;
1303                        }
1304
1305                        for (let ms = 0; ms < minstars; ms++) {
1306                            starshtml += '<img alt="Rating" height="18" loading="lazy" src="/images/skins/Bewise/images/icon-rating-star-grey.svg" width="18">';
1307                        }
1308
1309                        starshtml += '</span>';
1310
1311                        valueText = starshtml;
1312                    }
1313
1314                    if (isSelected) {
1315                      _selectedFilterValues.push({
1316                        text: valueText,
1317                        url: filterValue.url
1318                      });
1319                    }
1320
1321                    if (generateType === "price" && hasSelectedPrice) {
1322                      if (!hasGeneratedAllPrices) {
1323                        hasGeneratedAllPrices = true;
1324                        //let allPricesBlock = $('<div></div>');
1325                        let allPricesBlock = $('<label class="filter-value">'+language('filter.allprices')+'</label>');
1326                        allPricesBlock.on("click", function() {
1327                            hasSelectedPrice = false;
1328                            _hasPriceUrl = false;
1329                            filterInput.prop("checked", true);
1330                            _filterValueUrl = filterInput.attr("data-url");
1331							console.log("filterInput", _filterValueUrl);
1332
1333                            let hashMap = loadHashMap(_filterValueUrl || "");
1334							console.log("filterInput", hashMap);
1335
1336                            let newFilterValues = [];
1337
1338                            for (let hashKey in hashMap) {
1339                              if (hashKey.indexOf('price_') === 0) {
1340                                _hasPriceUrl = true;
1341                                continue;
1342                              }
1343
1344                              let hashValue = hashMap[hashKey];
1345
1346                              newFilterValues.push(hashKey + '=' + hashValue);
1347                            }
1348							
1349							newFilterValues.push('resetPriceFilter=1');
1350							
1351							console.log("newFilterValues", newFilterValues);
1352
1353                            _filterValueUrl = newFilterValues.join("&");
1354
1355                            _pageNumber = 1;
1356
1357                            buildBrowserUrl();
1358console.log('loadFilterValues w');
1359                            loadFilterValues(false);
1360                        });
1361                        //let allPricesSpan = $('<span></span>');
1362                        //allPricesSpan.text("< Alle priser");
1363                        //allPricesBlock.append(allPricesSpan);
1364                        filterGroupElement.append(allPricesBlock);
1365                      }
1366                      continue;
1367                    }
1368
1369                    filterValueTitle.html(valueText + "<i>" + filterValue.count + "</i>");
1370
1371                    filterValueElement.append(filterValueTitle);
1372
1373                    filterGroupElement.append(filterValueElement);
1374                }
1375
1376                // if (isInitial && coverInput && filterGroup.name === "COVER TYPE" && values.length === 1) {
1377                //     _postEvent = function() {
1378                //         coverInput.trigger("change");
1379                //     };
1380                // }
1381
1382
1383
1384
1385
1386                if (isOverflow) {
1387                    //let showmorefilterstext = 'Vis alle ' + values.length + ' filtre';
1388                    let showmorefilterstext = language('filter.showall');
1389                    let showAllButton = $('<div class="filter-show-all button">' + showmorefilterstext + '</div>');
1390                    showAllButton.on("click", function () {
1391                        filterGroupElement.toggleClass("filtergroupoverflow");
1392                        //showAllButton.remove();
1393                        showAllButton.toggleClass('expanded');
1394                        if (showAllButton.hasClass('expanded')) {
1395                            showAllButton.html(language('filter.showfewer'));
1396                        } else {
1397                            showAllButton.html(showmorefilterstext);
1398                        }
1399
1400                    });
1401                    filterGroupElement.append(showAllButton);
1402                }
1403
1404                _productFilterContent.append(filterGroupElement);
1405
1406                if (generateType === "price") {
1407
1408                  let priceInput = $('<div class="priceinput"></div>');
1409                  filterGroupElement.children('div').eq(0).after(priceInput);
1410                  if (filteredpricemin) {
1411                    minfilterprice = filteredpricemin;
1412                  }
1413                  if (filteredpricemax) {
1414                    maxfilterprice = filteredpricemax;
1415                  }
1416                  let inputMin = $('<input type="number" id="minfilterprice" name="minfilterprice" value="'+minfilterprice+'">');
1417                  priceInput.append(inputMin);
1418                  let dashSpan = $('<span>-</span>');
1419                  priceInput.append(dashSpan);
1420                  let inputMax = $('<input type="number" id="maxfilterprice" name="maxfilterprice" value="'+maxfilterprice+'">');
1421                  priceInput.append(inputMax);
1422                   priceInput.append('<span>'+_currency+'</span>');
1423                  
1424					
1425					
1426				//let goButton = $('<div class="filter-price-go button">GÃ¥</div>');
1427					
1428					
1429					/*$('.priceinput input[type="number"]').keyup(delayInput(function () {
1430						filteredpricemin = +inputMin.val();
1431						filteredpricemax = +inputMax.val();
1432						_pageNumber = 1;
1433console.log('loadFilterValues r');
1434						loadFilterValues(false);
1435					}, 100));*/
1436					
1437					$('.priceinput input[type="number"]').on('input', delayInput(function () {
1438    filteredpricemin = +inputMin.val();
1439    filteredpricemax = +inputMax.val();
1440    _pageNumber = 1;
1441	 buildBrowserUrl();
1442    console.log('loadFilterValues r');
1443    loadFilterValues(false);
1444}, 500));
1445					
1446					/*
1447                  goButton.on("click", function() {
1448                    filteredpricemin = +inputMin.val();
1449                    filteredpricemax = +inputMax.val();
1450                    _pageNumber = 1;
1451
1452                    loadFilterValues(false);
1453                  })
1454                  priceInput.append(goButton);
1455					*/
1456
1457                    /*
1458                    let priceslider = $('<div class="priceslider"></div>');
1459                    let pricesliderinfo = $('<div class="pricesliderinfo"><span>Min '+minfilterprice+'</span><span>Max '+maxfilterprice+'</span></div>');
1460                    filterGroupElement.children('div').first().after(priceslider,pricesliderinfo);
1461
1462                    console.log('pris');
1463                    console.log(minfilterprice);
1464                    console.log(maxfilterprice);
1465
1466
1467                    //filterGroupElement.prepend('<div class="priceslider"></div>');
1468
1469                    //let minstartprice = response.prices.priceMinimum;
1470                    //let maxstartprice = response.prices.priceMaximum;
1471
1472
1473                    noUiSlider.create(priceslider[0], {
1474                        start: [minstartprice, maxstartprice],
1475                        connect: true,
1476                        range: {
1477                            'min': minfilterprice,
1478                            'max': maxfilterprice
1479                        },
1480                        tooltips: [wNumb({decimals: 0}), wNumb({decimals: 0})]
1481                    });*/
1482
1483
1484                }
1485
1486            }
1487
1488            if (filterValueId > 1) {
1489                $('.productfilter').addClass('active');
1490            }
1491
1492            return selected;
1493        }
1494		
1495        function renderActiveFilters() {
1496
1497
1498
1499            let activeFiltersWrapper = $('.activefilters');
1500            let exists = activeFiltersWrapper.length > 0
1501
1502            let activeFiltersLabel;
1503            let activeFiltersContent;
1504            if (!exists) {
1505                activeFiltersWrapper = $('<div class="activefilters"></div>');
1506                activeFiltersLabel = $('<div class="activefilterslabel"></div>');
1507                activeFiltersWrapper.append(activeFiltersLabel);
1508                activeFiltersContent = $('<div class="activefiltervalues"></div>');
1509                activeFiltersWrapper.append(activeFiltersContent);
1510            } else {
1511                activeFiltersContent = activeFiltersWrapper.find('.activefiltervalues');
1512                activeFiltersLabel = activeFiltersWrapper.find('.activefilterslabel');
1513            }
1514
1515            if (!_selectedFilterValues || !_selectedFilterValues.length) {
1516                activeFiltersWrapper.remove();
1517                return;
1518            }
1519
1520            activeFiltersLabel.text(language('filter.activeFilterLabel') +":");
1521
1522            activeFiltersContent.empty();
1523
1524            $.each(_selectedFilterValues.slice(), function (i, value) {
1525                let activeFilterValue = $('<div class="activefiltervalue"></div>');
1526                activeFilterValue.html(value.text);
1527                activeFilterValue.attr("data-url", value.url);
1528
1529                activeFilterValue.on("click", function () {
1530					console.log("klik za brisanje");
1531				
1532                    _selectedFilterValues = _selectedFilterValues.filter(function(s) {
1533                      return s.text !== value.text;
1534                    });
1535
1536                    if (!_selectedFilterValues || !_selectedFilterValues.length) {
1537                      _pageNumber = 1;
1538                      _filterValueUrl = "";
1539                      filteredpricemin = 0;
1540                      filteredpricemax = 0;
1541
1542                      let url = location.pathname;
1543
1544                      //window.history.pushState('data', 'Title', url);
1545					  window.history.pushState({path: url}, '', url);
1546                      //console.error("push state: " + url);
1547console.log('loadFilterValues y');
1548                      loadFilterValues(false);
1549                    } else {
1550                      _filterValueUrl = activeFilterValue.attr("data-url");
1551
1552                      buildBrowserUrl();
1553console.log('loadFilterValues u');
1554                      loadFilterValues(false);
1555                    }
1556					
1557					  console.log('totall', _selectedFilterValues.length);
1558					  
1559				
1560					  
1561					  				    if(runRewriteFilters()){
1562							 console.log("sve regulare");
1563						}
1564						else{
1565							console.log("specific 2");
1566							 	  if(!_selectedFilterValues.length){
1567									  console.log("specific 3");
1568						 
1569						   _runRedrectToFirstPage = true;
1570						   
1571						   
1572					  }
1573						}
1574					
1575				//	var totalActiveFilters = countNonSortElements(_selectedFilterValues);
1576			  					
1577			  					console.log("done klik");
1578
1579                });
1580
1581                activeFiltersContent.append(activeFilterValue);
1582            });
1583			
1584			
1585			
1586
1587			
1588
1589            if (!exists) {
1590                var activeFiltersResetButton = $('<div class="button filterbuttonreset">'+language('filter.reset')+'</div>');
1591                activeFiltersResetButton.on("click", function () {
1592					console.log("filterButtonReset 2");
1593					
1594										    if(runRewriteFilters()){
1595							 console.log("sve regulare");
1596						}
1597						else{
1598
1599							  redirectToFirstPage();
1600						}
1601						
1602						
1603                    _pageNumber = 1;
1604                    _filterValueUrl = "";
1605                    filteredpricemin = 0;
1606                    filteredpricemax = 0;
1607
1608                    let url = location.pathname;
1609
1610                    //window.history.pushState('data', 'Title', url);
1611					window.history.pushState({path: url}, '', url);
1612                    //console.error("push state: " + url);
1613console.log('loadFilterValues i');
1614                    //loadFilterValues(false);
1615                    loadFilterValues(true);
1616                });
1617                activeFiltersWrapper.append(activeFiltersResetButton);
1618
1619                $('div[name="productlist"]').after(activeFiltersWrapper);
1620            }
1621			
1622			
1623			
1624			
1625			
1626	
1627
1628
1629
1630
1631        }
1632
1633        // public:
1634        _.hasQuery = function (key) {
1635            return _query[key] !== undefined;
1636        };
1637
1638        _.getQuery = function (key, defaultValue) {
1639            let value = _query[key];
1640
1641            if (value === undefined) {
1642                return defaultValue;
1643            }
1644
1645            return value;
1646        };
1647
1648        _.hasHash = function (key) {
1649            return _hash[key] !== undefined;
1650        };
1651
1652        _.getHash = function (key, defaultValue) {
1653            let value = _hash[key];
1654
1655            if (value === undefined) {
1656                return defaultValue;
1657            }
1658
1659            return value;
1660        };
1661
1662        _.refresh = function() {
1663          _hasRefresh = true;
1664console.log('loadFilterValues o');
1665          loadFilterValues(false);
1666        };
1667
1668        let _freshLoad = true;
1669
1670        _.searchById = function(id) {
1671            _baseApiUrl = _baseApiUrl2;
1672
1673            _category = id+"";
1674            _categoryType = "Cases";
1675
1676            if (_freshLoad) {
1677                _freshLoad = false;
1678				console.log('loadFilterValues p');
1679                loadFilterValues(true, function() {
1680                    loadFilterValues(false);
1681                });
1682            } else {
1683				console.log('loadFilterValues l');
1684                loadFilterValues(false);
1685            }
1686        };
1687
1688        _.load = function () {
1689            if (_loaded) {
1690                return;
1691            }
1692
1693            _loaded = true;
1694
1695            if (window.location.href.indexOf('search.asp') !== -1) {
1696			  _querySeparator = "?";
1697              _category = "search";
1698              _categoryType = "search";
1699              _queryParameter = _.getQuery("q");
1700            }
1701
1702            if (!_category || !_category.length || !_categoryType || !_categoryType.length) {
1703                return;
1704            }
1705
1706            let queryIndex_ = location.href.indexOf('?')
1707            let url = isProductList ? (queryIndex_ > -1 ? location.href.substr(queryIndex_) : "") : (location.hash || "");
1708
1709            function loadSortSelector() {
1710              let options = "";
1711
1712              $('.Productlist_Sort_Select').each(function() {
1713                let existingSelector = $(this);
1714
1715                options = existingSelector.html();
1716              });
1717
1718              $('.Productlist_Sort_Select').each(function() {
1719                let existingSelector = $(this);
1720
1721                let selector = $('<select></select>');
1722                //selector.attr("align", "right");
1723                selector.addClass("Productlist_Sort_Select");
1724                selector.attr("name", "SortField");
1725                selector.html(options);
1726                  selector.attr('aria-label','Sortering');
1727                selector.insertBefore(existingSelector);
1728
1729                existingSelector.remove();
1730
1731                selector.on("change", function(e) {
1732                  e.stopPropagation();
1733                  e.preventDefault();
1734
1735                  _hasRefresh = true;
1736				  console.log('loadFilterValues k');
1737                  loadFilterValues(false);
1738                  return false;
1739                });
1740              });
1741            }
1742
1743            function postLoad(cb) {
1744				
1745							  			if(runRewriteFilters()){
1746											console.log("runRewriteFilters 4");
1747						   loadSortSelector();
1748					}
1749					else {
1750						
1751					console.log("specific load selector non");
1752					}
1753           
1754
1755              window.onhashchange = function() {
1756console.log('hash change 1');
1757                url = location.hash || "";
1758
1759                loadHash();
1760
1761                //let urlSeparator_ =  $('body.webshop-productlist').length ? _querySeparator : '#';
1762                if (url && url.length && url.indexOf('#') === 0) {
1763                    console.log('hash change 2');
1764                    _filterValueUrl = url.substring(1);
1765                    _ignorePage = true;
1766
1767                    _pageNumber = +_.getHash("start", "1");
1768console.log('loadFilterValues h');
1769                    loadFilterValues(false);
1770                } else {
1771                    console.log('hash change 3');
1772                  _pageNumber = 1;
1773                  _filterValueUrl = "";
1774console.log('loadFilterValues g');
1775                  loadFilterValues(false);
1776                }
1777              };
1778
1779              if (cb) {
1780                cb();
1781              }
1782            }
1783
1784            let urlSeparator_ = isProductList ? _querySeparator : '#';
1785
1786            if (url && url.length && url.indexOf(urlSeparator_) === 0) {
1787                _filterValueUrl = url.substring(1).replaceAll('filters=true&', '');
1788                //url.substring(1);
1789                _ignorePage = true;
1790
1791                _pageNumber = +_.getHash("start", "1");
1792
1793                _hasPriceUrl = _filterValueUrl.indexOf('price_range_custom') !== -1;
1794
1795				console.log('loadFilterValues a');
1796                loadFilterValues(false, postLoad);
1797            } else {
1798                _freshLoad = false;
1799				console.log('loadFilterValues b');
1800                loadFilterValues(true, postLoad);
1801            }
1802        };
1803
1804        // constructor:
1805        (function initialize() {
1806            loadQuery();
1807            loadHash();
1808            loadInitialData();
1809        })();
1810    }
1811
1812    global.BewiseFilter = new Filter();
1813
1814})(window);
1815
1816BewiseFilter.load();

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.