PageSourceSearch

https://alcopro.com/wp-content/plugins/annasta-woocommerce-product-filters/code/js/awf.js?ver=1.8.4

js alcopro.com collected 2026-09-28 23:24:27 UTC 129,416 bytes, 3,328 lines download raw bytes

1/* annasta Filters for WooCommerce */
2
3var a_w_f = typeof( a_w_f ) === 'undefined' ? {} : a_w_f;
4a_w_f.pretty_scrollbars = [];
5a_w_f.daterangepickers = {};
6
7var awf_data = typeof( awf_data ) === 'undefined' ? { query: {} } : awf_data;
8
9jQuery( document ).ready( function( $ ){
10  'use strict';
11
12  if( ! ( 'preset_wrappers' in a_w_f ) ) {
13    a_w_f.preset_wrappers = $( '.awf-preset-wrapper' );
14  }
15
16  a_w_f.awf_nonce_refresh_queue = [];
17  a_w_f.awf_nonce_refresh_in_progress = false;
18
19  a_w_f.refresh_nonce = function( callback ) {
20    a_w_f.awf_nonce_refresh_queue.push( callback );
21    if( a_w_f.awf_nonce_refresh_in_progress ) { return; }
22
23    a_w_f.awf_nonce_refresh_in_progress = true;
24
25    $.get( awf_data.ajax_url, { action: 'awf_get_nonce', awf_front: 1 }, function( nonce ) {
26      awf_data.nonce = $.trim( nonce );
27      a_w_f.awf_nonce_refresh_in_progress = false;
28      var pending = a_w_f.awf_nonce_refresh_queue.splice( 0 );
29      $.each( pending, function( i, fn ) { fn(); } );
30    } );
31  };
32
33  a_w_f.set_filter_events = function( $filter ) {
34    
35    var $preset_wrapper = $filter.closest( '.awf-preset-wrapper' );
36    var $filter_container = $filter.closest( '.awf-filter-container' );
37    
38    if( 'premium' in a_w_f ) { a_w_f.set_premium_filter_events( $filter_container, $filter ); }
39    
40    if( $preset_wrapper.hasClass( 'awf-url' ) && ( $filter.is(':checkbox') || $filter.is(':radio') ) ) {
41      if( $filter.hasClass( 'awf-button-filter' ) ) {
42        $filter.on( 'click', function( e ) {
43          e.stopPropagation();
44        });
45
46        $filter.closest( 'a' ).on( 'click', function( e ) {
47          e.preventDefault();
48          $filter.trigger( 'click' );
49        });
50  
51      } else {
52        $filter.on( 'click', function() {
53
54          if( $preset_wrapper.hasClass( 'awf-left-popup-sidebar-mode' ) ) {
55            a_w_f.close_togglable_preset();
56          }
57          $( 'body' ).block( { message: $( '<div class="awf-loader"></div>' ), blockMsgClass: 'blockMsg awf-blockMsg' } );
58
59          if( 'pre_button_query' in awf_data ) {
60            awf_data.page_reload = true;
61          } else {
62            window.location.href = $( this ).closest( 'a' ).attr( 'href' );
63          }
64          
65        });
66      }
67    }
68    
69    if( $filter_container.hasClass( 'awf-active' ) ) {
70      if( $filter_container.closest( 'ul.awf-children-container' ).first().hasClass( 'awf-collapsed' ) ) {
71        $filter_container.parents( 'ul.awf-children-container' ).removeClass( 'awf-collapsed' ).prev( 'li.awf-parent-container' ).removeClass( 'awf-collapsed-on' );
72      }
73      $filter_container.removeClass( 'awf-collapsed-on' ).next( 'ul.awf-children-container' ).removeClass( 'awf-collapsed' );
74    }
75      
76    if( $filter_container.hasClass( 'awf-product-search-container' ) ) {
77      var $clear_btn = $filter.siblings( '.awf-clear-search-btn' ).first();
78
79      $filter.on( 'keydown', function( e ) {
80        if( e.keyCode === 13 ) {
81          e.preventDefault();
82
83          if( $filter.hasClass( 'awf-submit-on-change') ) {
84            $filter.removeClass( 'awf-cancel-product-search-update' ).trigger( 'change' );
85            $clear_btn.trigger( 'focus' );
86            $( '#' + $filter.attr( 'id' ) + '-autocomplete-container' ).first().addClass( 'awf-collapsed' );
87
88          } else if( $filter.hasClass( 'awf-button-filter' ) ) {
89            $filter.closest( '.awf-filter-wrapper' ).find( '.awf-apply-filter-btn, .awf-submit-btn' ).first().trigger( 'focus' );
90            
91          } else {
92            $filter.addClass( 'awf-cancel-product-search-update' );
93            $clear_btn.trigger( 'focus' );
94          }
95
96        } else if( e.keyCode === 9 ) {
97
98          $filter.addClass( 'awf-cancel-product-search-update' );
99
100          if( ! e.shiftKey ) {
101            e.preventDefault();
102            $clear_btn.trigger( 'focus' );
103          }
104        }
105      } )
106      .on( 'blur', function( e ) {
107        if( ! $( e.relatedTarget ).is( $clear_btn ) ) {
108          $filter.removeClass( 'awf-cancel-product-search-update' ).trigger( 'change' );
109        }
110      })
111      ;
112
113      $clear_btn
114        .on( 'click', function() {
115          $( '.awf-product-search-autocomplete-container' ).empty();
116          $filter.removeClass( 'awf-cancel-product-search-update' ).val( '' ).trigger( 'change' ).trigger( 'focus' );
117        })
118        .on( 'keydown', function( e ) {
119          if( e.keyCode === 13 || e.keyCode === 32 ) {
120            e.preventDefault();
121
122            $( '.awf-product-search-autocomplete-container' ).empty();
123            $filter.addClass( 'awf-cancel-product-search-update' ).val( '' ).trigger( 'focus' );
124          }
125        })
126        .on( 'blur', function( e ) {
127          if( ! $( e.relatedTarget ).is( $filter ) ) {
128            $filter.removeClass( 'awf-cancel-product-search-update' ).trigger( 'change' );
129          }
130        });
131      ;
132
133      if( $filter_container.hasClass( 'awf-search-autocomplete' ) ) {
134        var $autocomplete = $( '#' + $filter.attr( 'id' ) + '-autocomplete-container' ).first();
135
136        $filter.on( 'focusin', function() {
137          $autocomplete.removeClass( 'awf-collapsed' );
138        });
139
140        $filter.on( 'focusout', function( e ) {
141          if( 0 === $autocomplete.has( $( e.relatedTarget ) ).length && ! $( e.relatedTarget ).is( $clear_btn ) ) {
142            $autocomplete.addClass( 'awf-collapsed' );
143          }
144        });
145
146        $autocomplete.on( 'focusout', function( e ) {
147          if( 0 === $autocomplete.has( $( e.relatedTarget ) ).length && ! $( e.relatedTarget ).is( $filter ) && ! $( e.relatedTarget ).is( $clear_btn ) ) {
148            $autocomplete.addClass( 'awf-collapsed' );
149            $filter.removeClass( 'awf-cancel-product-search-update' ).trigger( 'change' );
150          }
151        });
152
153        $clear_btn.on( 'focusout', function( e ) { 
154          if( 0 === $autocomplete.has( $( e.relatedTarget ) ).length && ! $( e.relatedTarget ).is( $filter ) ) {
155            $autocomplete.addClass( 'awf-collapsed' );
156          }
157        });
158
159        a_w_f.autocomplete_cid = 0;
160        var debounce_autocomplete = null;
161
162        $filter.on( 'input', function() {
163          var cid = a_w_f.autocomplete_cid = ++a_w_f.autocomplete_cid;
164          clearTimeout( debounce_autocomplete );
165
166          debounce_autocomplete = setTimeout( function() {
167            if( cid === a_w_f.autocomplete_cid ) {
168              a_w_f.get_search_autocomplete_products( $filter_container, $filter, $autocomplete );
169            }
170          }, 400);
171        } );
172        
173        $filter.on( 'change', function() {
174
175          setTimeout( function() {
176            if( $autocomplete.has( document.activeElement ).length === 0 ) {
177
178              var old_value = ( $filter.attr( 'data-taxonomy' ) in awf_data.query ) ? awf_data.query[$filter.attr( 'data-taxonomy' )] : '';
179
180              if( $filter.val() !== old_value ) {
181
182                if( ! $filter.hasClass( 'awf-cancel-product-search-update' ) ) {
183                  a_w_f.product_search_onchange( $filter );
184                  if( ( ! $preset_wrapper.hasClass( 'awf-button' ) && ! $filter.hasClass( 'awf-button-filter' ) ) || $filter.hasClass( 'awf-submit-on-change') ) {
185                    a_w_f.apply_filter( true, $preset_wrapper );
186                  }
187                }
188
189                $filter.removeClass( 'awf-cancel-product-search-update' );
190              }
191            }
192          }, 100 );
193        });
194        
195      } else {
196
197        $filter.on( 'change', function( e ) {
198          var old_value = ( $filter.attr( 'data-taxonomy' ) in awf_data.query ) ? awf_data.query[$filter.attr( 'data-taxonomy' )] : '';
199
200          if( $filter.val() !== old_value ) {
201            setTimeout( function() {
202              if( ! $filter.hasClass( 'awf-cancel-product-search-update' ) ) {
203                a_w_f.product_search_onchange( $filter );
204                if( ( ! $preset_wrapper.hasClass( 'awf-button' ) && ! $filter.hasClass( 'awf-button-filter' ) ) || $filter.hasClass( 'awf-submit-on-change') ) {
205                  a_w_f.apply_filter( true, $preset_wrapper );
206                }
207              }
208
209              $filter.removeClass( 'awf-cancel-product-search-update' );
210            }, 100 );
211          }
212        });
213      }
214
215    } else if( $filter_container.hasClass( 'awf-daterangepicker-container' ) ) {
216      
217      a_w_f.setup_daterangepicker( $filter, $filter_container, $preset_wrapper );
218  
219    } else {
220
221      /* No jQuery solution https://github.com/jquery/jquery/issues/2871*/
222      $filter.siblings('label').each( function() {
223        this.addEventListener( 'touchstart', function() { $filter_container.addClass( 'awf-hover-off' ); }, { passive: true } );
224      } );
225      
226      $filter.on( 'click', function() {
227        a_w_f.filter_onclick( $filter );
228
229        if( $filter.is( '[data-archive-permalink]' ) ) {
230          awf_data.filters_url = $filter.attr( 'data-archive-permalink' );
231          awf_data.archive_page_switch = 'archive switch unavailable';
232        }
233      });
234      
235      if( ! $preset_wrapper.hasClass( 'awf-button' ) && ! $filter.hasClass( 'awf-button-filter' ) ) {
236        $filter.on( 'click', function() { a_w_f.apply_filter( $filter, $preset_wrapper ); });
237      }
238    }
239  };
240
241  a_w_f.product_search_onchange = function( $searchbox ) {
242
243    if( $searchbox.hasClass( 'awf-button-filter' ) && ! ( 'pre_button_query' in awf_data ) ) {
244      awf_data.pre_button_query = $.extend( true, {}, awf_data.query );
245    }
246    
247    $( '.awf-product-search-container .awf-filter' ).each( function( i, el ) {
248      
249      var $container = $( el ).closest( '.awf-filter-container' );
250
251      if( 0 === $( $searchbox ).val().length ) { $container.removeClass( 'awf-active' ); }
252      else { $container.addClass( 'awf-active' ); }
253
254      if( el === $searchbox[0] ) { a_w_f.update_query( $searchbox, $container, true ); }
255      else { $( el ).val( $( $searchbox ).val() ); }
256      
257    });
258  };
259  
260  a_w_f.get_search_autocomplete_products = function( $filter_container, $filter, $autocomplete, retried ) {
261
262    var $autocompletes = $( '.awf-product-search-autocomplete-container' );
263
264    if( $autocomplete.attr( 'data-after' ) < $filter.val().length ) {
265      $filter_container.addClass( 'awf-autocomplete-searching' );
266      
267      var data = {
268        action: 'awf',
269        awf_action: 'get_search_autocomplete',
270        awf_front: 1,
271        awf_nonce: awf_data.nonce,
272        awf_filter: $filter.closest( '.awf-filter-wrapper' ).first().attr( 'id' ),
273        awf_ajax_extras: ( 'ajax_extras' in awf_data ) ? awf_data.ajax_extras : ''
274      };
275      
276      if( 'sc_page' in awf_data ) { data.awf_sc_page = awf_data.sc_page; }
277      else if( 'archive_page' in awf_data ) { data.awf_archive_page = awf_data.archive_page; }
278      
279      data.awf_query = $.extend( true, {}, awf_data.query );
280      data.awf_query[$filter.attr('data-taxonomy')] = $filter.val();
281      
282      $.ajax({
283        type:     "get",
284        url:      awf_data.ajax_url,
285        dataType: "html",
286        data:     data,
287        success:  function( response ) {
288
289          if( '-1' === response ) {
290            if( ! retried ) {
291              a_w_f.refresh_nonce( function() {
292                a_w_f.get_search_autocomplete_products( $filter_container, $filter, $autocomplete, true );
293              });
294            }
295            $filter_container.removeClass( 'awf-autocomplete-searching' );
296            return;
297          }
298          
299          if( response ) {
300            var $response = $( response );
301            if( $response.hasClass( 'woocommerce' ) ) {
302              $response.removeClass().addClass( 'awf-ac-container' ).find( awf_data.products_container ).removeClass().addClass( 'awf-ac-products-container' );
303              $response.find( 'a' ).attr( 'tabindex', '-1' );
304              $autocompletes.empty().append( $response );
305            }
306
307            $filter_container.removeClass( 'awf-autocomplete-searching' );
308            
309            if( $autocompletes.hasClass( 'awf-pretty-scrollbars' ) ) {
310              $.each( a_w_f.pretty_scrollbars, function( i, ps ) {
311                $autocompletes.each( function() {
312                  if( ps.element === this ) {
313                    ps.update();
314                    return false;
315                  }
316                });
317              });
318            }
319          }
320        },
321        error: function( response ) { console.log( response ); }
322      });
323      
324    } else {
325      $autocompletes.empty();
326    }
327  };
328  
329  a_w_f.setup_daterangepicker = function( $filter, $filter_container, $preset_wrapper ) {
330      
331      if( 'undefined' !== typeof daterangepicker && 'undefined' !== typeof moment ) {
332        var $daterangepicker = $filter_container.find( '.awf-daterangepicker' );
333        var daterangepicker_options = {
334          'showDropdowns': true,
335          'isUTC': true,
336          locale: { cancelLabel: $daterangepicker.attr( 'data-clear-btn-label' ) }
337        };
338        
339        if( $daterangepicker.hasClass( 'awf-single-daterangepicker' ) ) {
340          daterangepicker_options.singleDatePicker = true;
341        }
342        
343        if( $daterangepicker.hasClass( 'awf-timepicker' ) ) {
344          daterangepicker_options.timePicker = true;
345          daterangepicker_options.timePicker24Hour = true;
346          daterangepicker_options.locale.format = 'DD/MM/YY HH:mm';
347          $daterangepicker.addClass( '' );
348          
349        } else {
350          daterangepicker_options.locale.format = 'DD/MM/YYYY';
351        }
352        
353        if( 0 < $filter.val().length ) {
354          var values = $filter.val().split( ',' );
355          $.each( values, function( i, el ) {
356            if( 0 === i ) {
357              daterangepicker_options.startDate = moment.unix( el ).utc().format( daterangepicker_options.locale.format );
358            } else if( 1 === i ) {
359              daterangepicker_options.endDate = moment.unix( el ).utc().format( daterangepicker_options.locale.format );
360            }
361          });
362        }
363        
364        if( 'filter_daterangepicker_options' in a_w_f ) {
365          daterangepicker_options = a_w_f.filter_daterangepicker_options( $daterangepicker, daterangepicker_options );
366        }
367        
368        $daterangepicker.daterangepicker( daterangepicker_options, function( start, end ) {
369          
370          if( $daterangepicker.hasClass( 'awf-single-daterangepicker' ) ) {
371            if( 'timePicker' in daterangepicker_options ) {
372              $filter.val( start.utc( true ).unix() );
373            } else { $filter.val( start.utc( true ).startOf( 'date' ).unix() ); }
374            
375          } else {
376            if( 'timePicker' in daterangepicker_options ) {
377              $filter.val( start.utc( true ).unix() + ',' + end.utc( true ).unix() );
378            } else { $filter.val( start.utc( true ).startOf( 'date' ).unix() + ',' + end.utc( true ).startOf( 'date' ).unix() ); }
379          }
380        });
381        
382        a_w_f.daterangepickers[$daterangepicker.attr( 'id' )] = $daterangepicker;
383        
384        $daterangepicker.on( 'apply.daterangepicker', function( event, picker ) {
385          a_w_f.daterangepicker_update_values( $daterangepicker, $filter, $filter_container );
386          if( ! $preset_wrapper.hasClass( 'awf-button' ) ) { a_w_f.apply_filter( true, $preset_wrapper ); }
387        });
388        $daterangepicker.on( 'cancel.daterangepicker', function() {
389          $filter.val( '' );
390          a_w_f.daterangepicker_update_values( $daterangepicker, $filter, $filter_container );
391          if( ! $preset_wrapper.hasClass( 'awf-button' ) ) { a_w_f.apply_filter( true, $preset_wrapper ); }
392        });
393        $daterangepicker.on( 'hide.daterangepicker', function() {
394          if( 0 === $filter.val().length ) { $daterangepicker.val( '' ); }
395        });
396        
397        if( 0 === $filter.val().length ) { $daterangepicker.val( '' ); }
398      }
399  };
400  
401  a_w_f.filter_onclick = function( $filter ) {
402    var $container = $filter.closest( '.awf-filter-container' );
403    var taxonomy = $filter.attr( 'data-taxonomy' );
404    var $filter_wrappers =  $( '.awf-filter-wrapper[data-taxonomy="' + taxonomy + '"]' );
405
406    if( $filter.hasClass( 'awf-button-filter' ) && ! ( 'pre_button_query' in awf_data ) ) {
407      awf_data.pre_button_query = $.extend( true, {}, awf_data.query );
408    }
409    
410    if( $container.hasClass( 'awf-active' ) ) {
411      
412      if( $container.hasClass( 'awf-block-deselection' ) && -1 === awf_data.query[taxonomy].toString().indexOf( ',' ) ) {
413        $filter.prop( 'checked', true );
414        return;
415      }
416
417      if( $filter.is( ':radio' ) ) {
418        
419        if( $container.hasClass( 'awf-range-filter-container' ) ) {
420          var $slider = $filter_wrappers.find( '.awf-style-range-slider .awf-filter-container' ).first();
421          if( $slider.length > 0 ) {
422            a_w_f.reset_filter_value( $filter, $slider );
423            return;
424          }
425
426          $filter_wrappers.filter( '.awf-range' ).find( 'input.awf-filter[value="' + $filter.val() + '"][data-next-value="' + $filter.attr( 'data-next-value' ) + '"]' ).prop( 'checked', false ).siblings( 'label' ).attr( 'aria-selected', 'false' ).closest( '.awf-filter-container' ).removeClass( 'awf-active' );
427
428        } else {
429          $filter_wrappers.filter( '.awf-single' ).find( '.awf-filter-container.awf-active' ).removeClass( 'awf-active' ).find( 'input' ).prop( 'checked', false );
430          $filter_wrappers.filter( '.awf-multi' ).find( 'input.awf-filter[value="' + $filter.val() + '"]' ).prop( 'checked', false ).siblings( 'label' ).attr( 'aria-selected', 'false' ).closest( '.awf-filter-container' ).removeClass( 'awf-active' );
431          
432          var $defaults = $filter_wrappers.find( '.awf-default' );
433          if( 0 < $defaults.length ) {
434            $filter = $defaults.first();
435            $container = $filter.closest( '.awf-filter-container' );
436            $defaults.prop( 'checked', true ).siblings( 'label' ).attr( 'aria-selected', 'true' ).closest( '.awf-filter-container' ).addClass( 'awf-active' );
437          }
438        }
439
440      } else {
441        $filter_wrappers.find( 'input.awf-filter[value="' + $filter.val() + '"]' ).prop( 'checked', false ).siblings( 'label' ).attr( 'aria-selected', 'false' ).closest( '.awf-filter-container' ).removeClass( 'awf-active' );
442      }
443      
444    } else {
445
446      if( $filter.is( ':radio' ) ) {
447
448        var $filter_containers = $filter_wrappers.find( '.awf-filter-container' );
449        $filter_containers.removeClass( 'awf-active' ).find( 'input' ).prop( 'checked', false ).siblings( 'label' ).attr( 'aria-selected', 'false' );
450        
451        if( $container.hasClass( 'awf-range-filter-container' ) ) {
452          var $slider = $filter_wrappers.find( '.awf-style-range-slider .awf-filter-container' ).first();
453          if( $slider.length > 0 ) {
454            var min = parseFloat( $filter.val() );
455            var max = parseFloat( $filter.attr( 'data-next-value' ) );
456            $slider[0].noUiSlider.set( [min, max] );
457            a_w_f.range_slider_update_values( $slider[0], [min, max], $slider[0].noUiSlider.options.range.min[0], $slider[0].noUiSlider.options.range.max[0] );
458            
459            return;
460          }
461
462          $filter_containers.find( 'input.awf-filter[value="' + $filter.val() + '"][data-next-value="' + $filter.attr( 'data-next-value' ) + '"]' ).prop( 'checked', true ).siblings( 'label' ).attr( 'aria-selected', 'true' ).closest( '.awf-filter-container' ).addClass( 'awf-active' );
463
464        } else {
465          $filter_containers.find( 'input.awf-filter[value="' + $filter.val() + '"]' ).prop( 'checked', true ).siblings( 'label' ).attr( 'aria-selected', 'true' ).closest( '.awf-filter-container' ).addClass( 'awf-active' );
466        }
467                
468      } else {
469        $filter_wrappers.filter( '.awf-single' ).find( '.awf-filter-container.awf-active' ).removeClass( 'awf-active' ).find( 'input' ).prop( 'checked', false ).siblings( 'label' ).attr( 'aria-selected', 'false' );
470        $filter_wrappers.find( 'input.awf-filter[value="' + $filter.val() + '"]' ).prop( 'checked', true ).siblings( 'label' ).attr( 'aria-selected', 'true' ).closest( '.awf-filter-container' ).addClass( 'awf-active' );
471        $filter_wrappers.filter( '.awf-multi' ).find( 'input.awf-filter[value="' + $filter.val() + '"]' ).each( function() {
472          a_w_f.uncheck_parents_and_children( this );
473        });
474      }
475    }
476
477    if( $filter.hasClass( 'awf-hierarchical-sbs-taxonomy' ) ) { a_w_f.hierarchical_sbs_oncl
477ick( $filter, $container, taxonomy ); }
478
479    if( $filter_wrappers.hasClass( 'awf-active-dropdown-title' ) ) {
480      a_w_f.set_active_dropdown_title( $filter_wrappers );
481    }
482
483    a_w_f.update_query( $filter, $container, true );
484  };
485  
486  a_w_f.uncheck_parents_and_children = function( checkbox ) {
487    $( checkbox ).parents( 'ul' ).prev( 'li.awf-filter-container.awf-active' ).each( function( i, container ) {
488      $( container ).removeClass( 'awf-active' ).find( '.awf-filter' ).each( function( ii, filter ) {
489        $( filter ).prop( 'checked', false ).siblings( 'label' ).attr( 'aria-selected', 'false' );
490        a_w_f.update_query( $( filter ), $( container ), false );
491      });
492    });
493    
494    $( checkbox ).parents( 'li.awf-filter-container' ).next( 'ul' ).find( '.awf-filter-container.awf-active' ).each( function( i, container ) {
495      $( container ).removeClass( 'awf-active' ).find( '.awf-filter' ).each( function( ii, filter ) {
496        $( filter ).prop( 'checked', false ).siblings( 'label' ).attr( 'aria-selected', 'false' );
497        a_w_f.update_query( $( filter ), $( container ), false );
498      });
499    });
500  };
501  
502  a_w_f.reset_filter_value = function( $filter, $container ) {
503    
504    if( $container.hasClass( 'awf-product-search-container' ) ) {
505      $filter.val( '' );
506      a_w_f.product_search_onchange( $filter );
507      
508    } else if( $container.hasClass( 'awf-daterangepicker-container' ) ) {
509      $filter.val( '' );
510      a_w_f.daterangepicker_update_values( $container.find( '.awf-daterangepicker' ), $filter, $container );
511      
512    } else if( $container.hasClass( 'awf-range-slider-container' ) ) {
513      var range_slider = $container[0];
514      var min = range_slider.noUiSlider.options.range.min[0];
515      var max = range_slider.noUiSlider.options.range.max[0];
516      range_slider.noUiSlider.set( [min, max] );
517      a_w_f.range_slider_update_values( range_slider, [min, max], min, max );
518      
519    } else if( $filter.hasClass( 'awf-taxonomy-range-value' ) ) {
520      if( 'premium' in a_w_f ) { a_w_f.reset_taxonomy_range( $container ); }
521
522    } else {
523      a_w_f.filter_onclick( $filter );
524    }
525  };
526  
527  a_w_f.update_query = function( $filter, $container, build_badges ) {
528    var taxonomy = $filter.attr( 'data-taxonomy' );
529    var values = [];
530    var i = -1;
531    
532    if( taxonomy in awf_data.query ) {
533      if( $filter.is( ':checkbox' ) ) {
534        values = awf_data.query[taxonomy].split( ',' );
535        i = values.indexOf( $filter.val() );
536      }
537    }
538    
539    if( $container.hasClass( 'awf-active' ) ) {
540      if( $filter.hasClass( 'awf-default' ) && ! ( $container.hasClass( 'awf-range-slider-container' ) && 1 === $container.find( '.awf-default' ).length ) ) {
541        values = [];
542        
543      } else {
544        if( i === -1 ) {
545          values.push( $filter.val() );
546        }
547      }
548      
549    } else {
550      if( values.length > 0 ) {
551        if( i > -1 ) { values.splice( i, 1 ); }
552      }
553    }
554    
555    if( values.length > 0 ) {
556      values.sort();
557      awf_data.query[taxonomy] = values.join( ',' );
558      
559      if( $container.hasClass( 'awf-range-filter-container' ) ) {
560        awf_data.query[$filter.attr( 'data-max-name' )] = $filter.attr( 'data-next-value' );
561      }
562
563    } else {
564      if( ( 'archive_page' in awf_data ) && taxonomy === awf_data.archive_page && build_badges ) {
565        a_w_f.filter_onclick( $filter );
566        return;
567      }
568
569      delete awf_data.query[taxonomy];
570      
571      if( $container.hasClass( 'awf-range-filter-container' ) ) {
572        delete awf_data.query[$filter.attr( 'data-max-name' )];
573      }
574    }
575    
576    if( 'sc_page' in awf_data ) { delete awf_data.query['product-page']; }
577    
578    if( build_badges ) {
579      if( ( 'premium' in a_w_f ) && ( a_w_f.filter_reset_taxonomies.indexOf( taxonomy ) >= 0 ) ) { a_w_f.adjust_reset_active( taxonomy, $filter ); }
580    }
581  };
582    
583  a_w_f.build_active_badges = function() {
584    $( '.awf-active-badge' ).remove();
585    
586    $.each( awf_data.query, function( key, values ) {
587
588      var $active_filter_containers = $( '.awf-filter-wrapper[data-taxonomy="' + key + '"] .awf-filter-container.awf-active' );
589      if( 0 === $active_filter_containers.length ) { return true; }
590      
591      var $filter;
592      var $filter_container;
593      
594      if( $active_filter_containers.hasClass( 'awf-range-slider-container' ) ) {
595        $filter_container = $active_filter_containers.filter( '.awf-range-slider-container' ).first();
596        $filter = $filter_container.find( '.awf-filter' ).first();
597        
598        if( 0 === $( '.awf-active-badge[data-taxonomy="' + $filter.attr( 'data-taxonomy' ) + '"]' ).first().length ) {
599          a_w_f.create_active_badge( $filter_container.find( '.awf-filter[name="' + key + '"]' ).first(), $filter_container );
600        }
601
602      } else if( $active_filter_containers.hasClass( 'awf-taxonomy-range-container' ) ) {
603        $filter = $active_filter_containers.find( '.awf-filter.awf-taxonomy-range-value' ).first();
604        
605        if( 0 === $( '.awf-active-badge[data-taxonomy="' + $filter.attr( 'data-taxonomy' ) + '"]' ).first().length ) {
606          a_w_f.create_active_badge( $filter, $filter.closest( '.awf-filter-container' ) );
607        }
608
609      } else {
610        
611        if( $active_filter_containers.hasClass( 'awf-range-filter-container' ) ) {
612          $filter_container = $active_filter_containers.filter( '.awf-range-filter-container' ).first();
613          $filter = $filter_container.find( '.awf-filter' ).first();
614          
615          if( 0 === $( '.awf-active-badge[data-taxonomy="' + $filter.attr( 'data-taxonomy' ) + '"]' ).length ) {
616            a_w_f.create_active_badge( $filter, $filter_container );
617          }
618
619        } else if( $active_filter_containers.hasClass( 'awf-product-search-container' ) ) {
620          $filter_container = $active_filter_containers.filter( '.awf-product-search-container' ).first();
621          a_w_f.create_active_badge( $filter_container.find( '.awf-filter' ).first(), $filter_container );
622
623        } else if( $active_filter_containers.hasClass( 'awf-daterangepicker-container' ) ) {
624          $filter_container = $active_filter_containers.filter( '.awf-daterangepicker-container' ).first();
625          a_w_f.create_active_badge( $filter_container.find( '.awf-filter' ).first(), $filter_container );
626
627        } else {
628          var slugs = values.split( ',' );
629
630          if( ( 'archive_page' in awf_data ) && key === awf_data.archive_page && 1 === slugs.length ) {
631            return;
632          }
633                
634          $.each( slugs, function( i, slug ) {
635            $filter = $active_filter_containers.find( '.awf-filter[value="' + slug + '"]' ).first();
636
637            if( 0 < $filter.length ) {
638              a_w_f.create_active_badge( $filter, $filter.closest( '.awf-filter-container' ) );
639            }
640          });
641        }
642      }
643    });
644
645    if( 0 < $( '.awf-active-badge' ).first().length ) {
646      $( '.awf-reset-btn-container' ).show();
647    } else {
648      $( '.awf-reset-btn-container' ).hide();
649    }
650		
651    if( 'premium' in a_w_f ) { a_w_f.adjust_dropdown_options(); }
652    
653  };
654
655  a_w_f.create_active_badge = function( $filter, $container ) {
656    
657    if( $filter.hasClass( 'awf-default' ) && ! $filter.hasClass( 'awf-range-slider-value' ) ) { return; }
658
659    var label;
660    var classes = ['awf-active-badge'];
661    var badge_taxonomy = $filter.attr( 'data-taxonomy');
662    var preset_wrapper_id = '#' + $filter.closest( '.awf-preset-wrapper' ).attr( 'id' );
663    
664    if( $filter.hasClass( 'awf-range-slider-value' ) ) {
665
666      if( 2 === $container.find( '.awf-default').length ) { return; }
667      badge_taxonomy = $filter.attr( 'data-taxonomy' );
668      
669      var format = wNumb( {
670        decimals: $container.attr( 'data-decimals' ),
671        mark:     $container.attr( 'data-decimals-separator' ),
672        thousand: $container.attr( 'data-thousand-separator' ),
673        prefix:   $container.attr( 'data-prefix' ),
674        suffix:   $container.attr( 'data-postfix' )
675      } );
676      
677      label = $container.attr( 'data-label' ) + ' ' + format.to( parseFloat( $container.attr( 'data-min' ) ) ) + ' - ' + format.to( parseFloat( $container.attr( 'data-max' ) ) );
678      
679    } else if( $filter.hasClass( 'awf-taxonomy-range-value' ) ) {
680      if( 'premium' in a_w_f ) {
681        label = a_w_f.create_taxonomy_range_badge( $container );
682      }
683      
684    } else if( $container.hasClass( 'awf-range-filter-container' ) ) {
685      badge_taxonomy = $filter.attr( 'data-taxonomy' );
686      label = $filter.siblings( 'label' ).attr( 'data-badge-label' );
687      
688    } else if( $container.hasClass( 'awf-product-search-container' ) ) {
689      label = $filter.siblings( 'label' ).attr( 'data-badge-label' ) + ' ' + $filter.val();
690      
691    } else if( $container.hasClass( 'awf-daterangepicker-container' ) ) {
692      label = $filter.attr( 'data-label' ) + ' ' + $filter.siblings( '.awf-daterangepicker' ).first().val();
693      
694    } else {
695      label = $filter.siblings( 'label' ).attr( 'data-badge-label' );
696
697      if( $container.hasClass( 'awf-block-deselection' ) && ( badge_taxonomy in awf_data.query ) && -1 === awf_data.query[badge_taxonomy].toString().indexOf( ',' ) ) {
698        classes.push( 'awf-is-last-active' );
699      }
700    }
701		
702		if( typeof( label ) === 'undefined' ) { label = ''; }
703    
704    var $badge = $( '<div>', {
705      class: classes.join( ' ' ),
706			title: awf_data.i18n.badge_reset_label,
707			'data-taxonomy': badge_taxonomy,
708      'tabindex': '0',
709      'role': 'button',
710      'aria-label': label
711    }).append( 
712      $( '<i class="fas fa-times"></i>' ),
713      '<span>' + label + '</span>'
714    );
715		
716		$badge.on( 'click', function() {
717      var $badge_filter = $filter;
718
719			a_w_f.reset_filter_value( $badge_filter, $container );
720
721			if( ( 'sbs' in a_w_f ) && ( 0 < $( '.awf-sbs .awf-filter-wrapper[data-taxonomy="' + badge_taxonomy + '"], .awf-sbs .awf-filter-wrapper[data-taxonomy-max="' + badge_taxonomy + '"]' ).first().length ) ) {
722
723				$( '.awf-sbs' ).each( function( i, preset_wrapper ) {
724					var $preset_wrapper = $( preset_wrapper );
725					var $filter_wrapper = $preset_wrapper.find( '.awf-filter-wrapper[data-taxonomy="' + badge_taxonomy + '"], .awf-sbs .awf-filter-wrapper[data-taxonomy-max="' + badge_taxonomy + '"]' ).first();
726
727					if( 0 < $filter_wrapper.length ) {
728						var ii = parseInt( $filter_wrapper.attr( 'data-sbs-i' ) );
729						var $reset_next = $preset_wrapper.find( '.awf-sbs-' + (ii + 1) );
730						if ( 0 < $reset_next.length ) { a_w_f.reset_filter( $reset_next.attr( 'data-taxonomy' ) ); }
731
732						if( 'redirect_ajax' in awf_data ) {
733							a_w_f.update_sbs( $preset_wrapper, ii, false );
734						} else {
735							if( $preset_wrapper.hasClass( 'awf-sbs-next-btn-on' ) ) {
736								if( ! preset_wrapper.hasAttribute( 'data-sbs-redirect' ) ) { $preset_wrapper.addClass( 'awf-sbs-redirect' ); }
737								a_w_f.update_sbs( $preset_wrapper, ii, ( 0 < $reset_next.length ? false : true ) );
738
739							} else {
740								a_w_f.update_sbs( $preset_wrapper, ii, true );
741							}
742						}
743					}
744				});
745
746			} else {
747
748        if( a_w_f.force_reload && ( a_w_f.force_reload.indexOf( badge_taxonomy ) >= 0 ) ) { a_w_f.page_reload = true; }
749        a_w_f.apply_filter( true, $( preset_wrapper_id ) );
750			}
751		} );
752    
753    $badge.clone( true ).appendTo( $( '.awf-filter-wrapper[data-taxonomy="' + badge_taxonomy + '"] .awf-filters-container' ).siblings( '.awf-active-badges-container' ) );
754    
755    if( ! $filter.hasClass( 'awf-no-active-badge' ) ) {
756      $badge.clone( true ).appendTo( $( '.awf-preset-wrapper > .awf-active-badges-container' ) );
757      $badge.clone( true ).appendTo( $( '.awf-active-badges-container.awf-extra-badges' ) );
758      $badge.appendTo( $( '#awf-title-badges-storage' ) );
759    }
760  };
761
762  a_w_f.apply_filter = function( $filter, $preset_wrapper ) {
763
764    if( $preset_wrapper.hasClass( 'awf-url' ) ) {
765      
766      if( ( $filter instanceof jQuery ) && ! awf_data.page_reload ) {
767        a_w_f.update_url();
768
769      } else {
770        if( $preset_wrapper.hasClass( 'awf-left-popup-sidebar-mode' ) ) {
771          a_w_f.close_togglable_preset();
772        }
773
774        $( 'body' ).block( { message: $( '<div class="awf-loader"></div>' ), blockMsgClass: 'blockMsg awf-blockMsg' } );
775
776        if( 'rewrite_page' in awf_data ) {
777          a_w_f.request_url().then( function( response ) {
778            if( 'url' in response ) { window.location.href = response.url; } else { window.location.href = a_w_f.build_url(); }
779          } );
780
781        } else {
782          window.location.href = a_w_f.build_url();
783        }
784      }
785      
786    } else if( $preset_wrapper.hasClass( 'awf-ajax' ) ) {
787
788      if( 'redirect_ajax' in awf_data ) {
789        a_w_f.load_new_history_state();
790
791      } else {
792        if( a_w_f.page_reload ) {
793          a_w_f.load_new_history_state();
794
795        } else {
796          delete awf_data.pre_button_query;
797          a_w_f.build_active_badges();
798          a_w_f.update_url();
799          a_w_f.ajax_filter( $filter );
800        }
801      }
802      
803    } else if( $preset_wrapper.hasClass( 'awf-sbs' ) ) {
804      if( 'sbs' === $filter ) {
805        
806        if( ( 'redirect_ajax' in awf_data ) || $preset_wrapper[0].hasAttribute( 'data-sbs-redirect' ) ) {
807          if( $preset_wrapper.hasClass( 'awf-sbs-redirect' ) ) {
808            if( $preset_wrapper[0].hasAttribute( 'data-sbs-redirect' ) ) {
809              var url = $preset_wrapper.attr( 'data-sbs-redirect' );
810              var q = $.extend( true, {}, awf_data.query );
811              
812              delete q.post_type;
813              
814              if( ! ( 'permalinks_on' in awf_data ) ) { delete q.page_id; }
815              
816              if( ( 'archive_page' in awf_data ) ) {
817                delete q[awf_data.archive_identifier];
818                if( 0 === $preset_wrapper.find( '.awf-filter-wrapper[data-taxonomy="' + awf_data.archive_page + '"]' ).length ) {
819                  delete q[awf_data.archive_page];
820                }
821              }
822              
823              url = url.split('?');
824              
825              if( 2 === url.length ) {
826                var params = url[1].split('&');
827                $.each( params, function( i, p ){
828                  var param_data = p.split( '=' );
829                  if( 2 === param_data.length ) { q[param_data[0]] = param_data[1]; }
830                } );
831              }
832              
833              if( ! $.isEmptyObject( q ) ) { url[0] += '?' + $.param( q ).replace( /%2C/g, ',' ); }
834              a_w_f.load_new_history_state( url[0] ); // redirect to the requested page
835              
836            } else {
837              a_w_f.load_new_history_state(); // to shop / archive / sc page
838            }
839          } else {
840            if( $preset_wrapper[0].hasAttribute( 'data-sbs-redirect' ) ) {
841              delete awf_data.pre_button_query;
842
843              a_w_f.update_url();
844              a_w_f.ajax_filter( true );
845            } else {
846              a_w_f.update_counts();
847            }
848          }
849
850        } else {
851          delete awf_data.pre_button_query;
852          
853          a_w_f.update_url();
854          a_w_f.ajax_filter( true );
855        }
856        
857        $preset_wrapper.removeClass( 'awf-sbs-redirect' );
858      }
859    }
860  };
861  
862  a_w_f.ajax_filter = function( $filter ) {
863    $( document ).trigger( 'awf_ajax_filter' );
864
865    $( 'body' ).addClass( 'awf-loading-ajax' );
866    
867    var ajax_data = {
868      action: 'awf', 
869      awf_front: 1, 
870      awf_action: 'filter',
871      awf_query: awf_data.query,
872      awf_ajax_extras: ( 'ajax_extras' in awf_data ) ? awf_data.ajax_extras : ''
873    };
874    
875    if( 'archive_page' in awf_data ) { ajax_data.awf_archive_page = awf_data.archive_page; }
876    
877    if( 'ajax_pagination' in awf_data ) {
878
879      if( 'pre_button_query' in awf_data ) { ajax_data.awf_query = awf_data.pre_button_query; }
880      
881      if( awf_data.ajax_pagination_loading ) {
882        ajax_data.page_number = awf_data.ajax_pagination_number;
883        
884        if( 'page_numbers' === awf_data.ajax_pagination.type ) { awf_data.ajax_pagination_loading = false; }              
885      }
886      
887      if( 'infinite_scroll' === awf_data.ajax_pagination.type ) {
888        var ajax_pagination_loading_query = JSON.stringify( ajax_data.awf_query );
889        
890        if( awf_data.ajax_pagination_loading && awf_data.ajax_pagination_loading_query !== ajax_pagination_loading_query ) {
891          delete ajax_data.page_number;
892          awf_data.ajax_pagination_number = 0;
893          awf_data.ajax_pagination_end_reached = false;
894        }
895        
896        awf_data.ajax_pagination_loading_query = ajax_pagination_loading_query;
897      }
898    }
899    
900    if( 'sc_page' in awf_data ) {
901      ajax_data.awf_sc_page = awf_data.sc_page;
902
903      var sc_data;
904      var $awf_sc = $( '.woocommerce.awf-sc' );
905
906      if( 1 < $awf_sc.length ) {
907        awf_data.ajax_mode = 'dedicated_ajax';
908      }
909      
910      $awf_sc.each( function( i, sc_wrapper ) {
911        sc_data = $.extend( true, {}, ajax_data );
912        sc_data.awf_sc = {};
913        var $sc_wrapper = $( sc_wrapper );
914        
915        $sc_wrapper.find( '.awf-sc-var' ).each( function( ii, input ) {
916          sc_data.awf_sc[$( input ).attr( 'name' )] = $( input ).val();
917        } );
918
919        a_w_f.update_products( sc_data, $sc_wrapper );
920      });
921      
922      if( ! ( 'page_number' in ajax_data ) ) {
923        if( 1 === $awf_sc.length ) {
924          a_w_f.update_counts( { 'sc_attrs': sc_data.awf_sc } );
925        } else {
926          a_w_f.update_counts();
927        }
928      }
929      
930    } else {
931      a_w_f.update_products( $.extend( true, {}, ajax_data ), false );
932      if( ! ( 'page_number' in ajax_data ) ) { a_w_f.update_counts(); }
933    }
934  };
935  
936  a_w_f.update_products = function( ajax_data, is_sc ) {
937
938    var $wrapper;
939    var $loader = $( '<div class="awf-loader"></div>' );
940    var is_cm_v2 = false;
941
942    if( false === is_sc ) {
943      $wrapper = a_w_f.products_wrappers;
944
945    } else {
946      $wrapper = is_sc;
947      is_sc = true;
948    }
949    
950    if( 0 === $wrapper.length ) { return; }
951
952    if( 'ajax_pagination' in awf_data ) {
953      
954      if( awf_data.ajax_pagination_loading ) {
955        if( 'infinite_scroll' === awf_data.ajax_pagination.type || 'more_button' === awf_data.ajax_pagination.type ) {
956          $( '<div class="awf-infinite-scroll-loader" style="position: relative; display: block; width: 100%; height: 100px;"></div>' ).block({ message: $loader }).insertAfter( $wrapper.find( awf_data.products_container ) );
957        }
958        
959      } else { $wrapper.block({ message: $loader }); }
960      
961    } else {
962      $wrapper.block({ message: $loader });
963    }
964
965    if( ! ( 'skip_loader_adjustment' in awf_data ) ) {
966      if( 'fixed' !== $loader.css( 'position' ) ) {
967        if( ! ( 'max_padding' in a_w_f ) ) {
968          var wrapper_top = parseInt( $wrapper.offset().top );
969          var loader_height = parseInt( window.getComputedStyle( $loader.get(0), ':before').height );
970
971          a_w_f.max_padding = parseInt( wrapper_top + $wrapper.innerHe
971ight() - loader_height*1.5 - 10 );
972          a_w_f.base_padding = ( document.documentElement.clientHeight / 2 ) - ( loader_height / 2 ) - wrapper_top;
973        }
974
975        var padding_top = parseInt( document.documentElement.scrollTop + a_w_f.base_padding );
976        if( padding_top > a_w_f.max_padding ) { padding_top = a_w_f.max_padding; }
977
978        $loader.css( 'padding-top', padding_top );
979      }
980    }
981
982    var url;
983    var $response;
984
985    if( 'rewrite_page' in awf_data ) {
986      ajax_data.awf_rewrite = a_w_f.get_rewrites_ajax_data();
987    }
988
989    if( 'dedicated_ajax' === awf_data.ajax_mode ) {
990      url = awf_data.ajax_url;
991      ajax_data.awf_nonce = awf_data.nonce;
992
993    } else {
994
995      if( 'rewrite_page' in awf_data ) {
996        url = a_w_f.build_url();
997      } else {
998        url = window.location.href;
999      }
1000
1001      delete ajax_data.action;
1002
1003      if( 'yes' === awf_data.cm_v2 ) {
1004        is_cm_v2 = true;
1005      }
1006    }
1007
1008    if( is_cm_v2 ) {
1009      a_w_f.get_products_cm_v2( url, ajax_data, $wrapper, is_sc );
1010
1011    } else {
1012
1013      $.ajax({
1014        type:       'get',
1015        url:         url,
1016        dataType:   'html',
1017        data:        ajax_data,
1018        success:  function( response ) {
1019
1020          if( '-1' === response ) {
1021
1022            a_w_f.refresh_nonce( function() {
1023              ajax_data.awf_nonce = awf_data.nonce;
1024              a_w_f.update_products( ajax_data, is_sc ? $wrapper : false );
1025            });
1026
1027            $wrapper.unblock();
1028            $( 'body' ).removeClass( 'awf-loading-ajax' );
1029            return;
1030          }
1031
1032          if( response ) {
1033
1034            if( 'ajax_pagination' in awf_data
1035              && 'infinite_scroll' === awf_data.ajax_pagination.type
1036              && JSON.stringify( ajax_data.awf_query ) !== awf_data.ajax_pagination_loading_query
1037              )
1038            {
1039              $( document ).trigger( 'awf_ajax_products_update_cancellation' );
1040              return;
1041            }
1042
1043            $response = $( response );
1044
1045            if( $response instanceof jQuery && 0 < $response.length ) {
1046              a_w_f.parse_ajax_response( $response, ajax_data, $wrapper, is_sc );
1047            } else {
1048              a_w_f.get_products_cm_v2( url, ajax_data, $wrapper, is_sc );
1049            }
1050
1051          }
1052        },
1053        error: function( error_msg ) {
1054          if( 'debug' in awf_data ) {
1055            console.log( error_msg );
1056          } else {
1057            a_w_f.get_products_cm_v2( url, ajax_data, $wrapper, is_sc );
1058          }
1059        }
1060      });
1061
1062    }
1063
1064  };
1065  
1066  a_w_f.get_products_cm_v2 = function( url, ajax_data, $wrapper, is_sc ) {
1067
1068    var url_parts = url.split('?');
1069    var params = 'awf_cm_v2=1';
1070
1071    if( ( 'ajax_pagination' in awf_data ) && awf_data.ajax_pagination_loading && 'page_number' in ajax_data ) {
1072      if( is_sc ) {
1073        params += '&product-page=' + ajax_data.page_number;
1074      } else {
1075        params += '&paged=' + ajax_data.page_number;
1076      }
1077    }
1078
1079    if( 'awf_rewrite' in ajax_data && 0 < Object.keys( ajax_data.awf_rewrite ).length ) {
1080      params += '&' + Object.keys( ajax_data.awf_rewrite ).map( function( k ) {
1081        return 'awf_rewrite[' + k + ']=' + ajax_data.awf_rewrite[k];
1082      } ).join( '&' );
1083    }
1084
1085    if( 2 === url_parts.length ) {
1086      url = url + '&' + params;
1087    } else if( 1 === url_parts.length ) {
1088      url = url + '?' + params;
1089    }
1090
1091    $.ajax({
1092      type:       'get',
1093      url:         url,
1094      dataType:   'html',
1095      success:  function( response ) {
1096
1097        if( response ) {
1098          if( 'ajax_pagination' in awf_data
1099             && 'infinite_scroll' === awf_data.ajax_pagination.type
1100             && JSON.stringify( ajax_data.awf_query ) !== awf_data.ajax_pagination_loading_query
1101            )
1102          {
1103            $( document ).trigger( 'awf_ajax_products_update_cancellation' );
1104            return;
1105          }
1106
1107          var $response = $( response );
1108
1109          if( $response instanceof jQuery && 0 < $response.length ) {
1110            a_w_f.parse_ajax_response( $response, ajax_data, $wrapper, is_sc );
1111
1112          } else {
1113            if( 'debug' in awf_data ) {
1114              console.log( 'Filters AJAX call has returned invalid response.' );
1115            } else {
1116              window.location.reload();
1117            }
1118            
1119          }
1120        }
1121      },
1122      error: function( error_msg ) {
1123        if( 'debug' in awf_data ) {
1124          console.log( error_msg );
1125        } else {
1126          window.location.reload();
1127        }
1128      }
1129    });
1130
1131  };
1132  
1133  a_w_f.parse_ajax_response = function( $response, ajax_data, $wrapper, is_sc ) {
1134
1135    if( ( 'ajax_pagination' in awf_data ) && awf_data.ajax_pagination_loading && 'page_number' in ajax_data ) {
1136
1137      if( ( 'ajax_scroll' in awf_data ) && 'more_button' === awf_data.ajax_pagination.type ) {
1138        $( [document.documentElement, document.body] ).animate( { scrollTop: awf_data.ajax_pagination.last_product.offset().top + awf_data.ajax_pagination.last_product.height() - parseInt( awf_data.ajax_scroll, 10 ) }, 500, 'swing' );
1139      }
1140      
1141      $wrapper.find( awf_data.ajax_pagination.product_container ).last().after( $response.find( awf_data.ajax_pagination.product_container ) );
1142      a_w_f.setup_ajax_pagination( $wrapper );
1143      
1144      var $awf_result_count = $response.find( '.awf-ajax-pagination-result-count' ).first();
1145      if( 0 < $awf_result_count.length ) {
1146        $wrapper.find( awf_data.result_count_container ).text( $awf_result_count.text() );
1147      } else {
1148        $wrapper.find( awf_data.result_count_container ).text( '' );
1149      }
1150
1151      $( '.awf-infinite-scroll-loader' ).remove();
1152
1153    } else {
1154      
1155      if( 'yes' === awf_data.wrapper_reload ) {
1156        if( 'dedicated_ajax' === awf_data.ajax_mode ) {
1157          $wrapper.html( $response.html() );
1158        } else {
1159          $wrapper.html( a_w_f.extract_products_wrappers( $response ).html() );
1160          a_w_f.update_breadcrumbs( $response );
1161        }
1162
1163      } else {
1164
1165        var $pagination_containers = $wrapper.find( awf_data.pagination_container );
1166        var $new_pagination = $response.find( awf_data.pagination_container ).first();
1167
1168        if( 0 === $new_pagination.length ) {
1169          $pagination_containers.html( '' );
1170
1171        } else {
1172          if( 0 === $pagination_containers.length ) {
1173            if( ! ( 'pagination_after' in awf_data ) ) {
1174              a_w_f.setup_pagination_after( $response );
1175            }
1176
1177            var $pagination_after = '';
1178
1179            if( 'pagination_after' in awf_data ) {
1180              $pagination_after = $wrapper.find( awf_data.pagination_after );
1181            }
1182
1183            if( 0 < $pagination_after.length ) {
1184              $pagination_after.after( $new_pagination );
1185            } else {
1186              $wrapper.find( awf_data.products_container ).after( $new_pagination );
1187            }
1188
1189          } else {
1190            $pagination_containers.replaceWith( $new_pagination );
1191          }
1192        }
1193
1194        $( '.awf-pagination-more-btn-container' ).remove();
1195
1196        var $result_count = $response.find( awf_data.result_count_container ).first();
1197        if( 0 === $result_count.length ) {
1198          $wrapper.find( awf_data.result_count_container ).html( '' );
1199        } else {
1200          $wrapper.find( awf_data.result_count_container ).replaceWith( $result_count );
1201        }
1202            
1203        var $new_products = $response.find( awf_data.products_container ).first();
1204        var $no_result_container = $wrapper.find( awf_data.no_result_container ).first();
1205
1206        $no_result_container.html( '' ).hide();
1207
1208        if( 0 === $new_products.length ) {
1209          if( 0 === $no_result_container.length ) {
1210            a_w_f.products_wrappers.find( awf_data.products_container ).before( $response.find( awf_data.no_result_container ).first() );
1211          } else {
1212            $no_result_container.replaceWith( $response.find( awf_data.no_result_container ).first() );
1213          }
1214
1215          $no_result_container.show();
1216          $wrapper.find( awf_data.products_container ).html( '' );
1217
1218        } else {
1219          $wrapper.find( awf_data.products_container ).html( $new_products.html() );
1220        }
1221
1222        $wrapper.unblock();
1223      }
1224
1225      if( 'ajax_scroll' in awf_data ) {
1226        $( [document.documentElement, document.body] ).animate( { scrollTop: a_w_f.products_wrappers.offset().top - parseInt( awf_data.ajax_scroll, 10 ) }, 500, 'swing' );
1227      }
1228      
1229      if( 'ajax_pagination' in awf_data ) {
1230        if( 'infinite_scroll' === awf_data.ajax_pagination.type || 'more_button' === awf_data.ajax_pagination.type ) {
1231          awf_data.ajax_pagination_number = 1;
1232        }
1233  
1234        a_w_f.setup_ajax_pagination( $wrapper );
1235      }
1236
1237      a_w_f.update_orderby( $wrapper );
1238    }
1239    
1240    if( ! is_sc ) {
1241      a_w_f.update_breadcrumbs( $response );
1242
1243      var $document_title = $response.find( '.awf-document-title' ).first();
1244      if( 0 < $document_title.length ) { document.title = $("<div/>").html( $document_title.first().html() ).text(); }
1245
1246      var $shop_title = $response.find( '.awf-wc-shop-title' ).first();
1247
1248      if( 'archive_page' in awf_data ) {
1249        if( 'archive_components_support' in awf_data ) {
1250          if( 0 < $shop_title.length ) { $( 'h1.woocommerce-products-header__title' ).html( $shop_title.html() ); }
1251
1252          var $archive_description = $response.find( '.term-description' ).first();
1253          if( 0 < $archive_description.length ) { $( '.term-description' ).html( $archive_description.html() ); }
1254        }
1255
1256      } else {
1257        if( 0 < $shop_title.length ) { $( 'h1.woocommerce-products-header__title' ).html( $shop_title.html() ); }
1258      }
1259
1260      var $meta_description = $response.find( '.awf-meta-description' ).first();
1261      if( 0 < $meta_description.length && 0 < document.querySelectorAll( 'meta[name="description"]' ).length ) {
1262        document.querySelector( 'meta[name="description"]' ).setAttribute( 'content', $meta_description.text() );
1263      }
1264    }
1265    
1266    a_w_f.build_products_wrappers();
1267    $( 'body' ).removeClass( 'awf-loading-ajax' );
1268    
1269    $( document ).trigger( 'awf_after_ajax_products_update', [ $response ] );
1270  };
1271  
1272  a_w_f.update_counts = function( data ) {
1273
1274    if( ( 'undefined' === typeof data ) || ( 'string' === typeof data ) ) {
1275      data = {};
1276    }
1277    
1278    var callers = [];
1279
1280    a_w_f.preset_wrappers.each( function( i, el ) {
1281      callers.push( $( el ).attr( 'id' ) );
1282    });
1283
1284    $.ajax({
1285      type:     "get",
1286      url:      awf_data.ajax_url,
1287      dataType: "json",
1288      data:     { 
1289        action: 'awf', 
1290        awf_action: 'update_filters',
1291        awf_front: 1,
1292        awf_nonce: awf_data.nonce,
1293        awf_query: awf_data.query,
1294        awf_ajax_extras: ( 'ajax_extras' in awf_data ) ? awf_data.ajax_extras : '',
1295        awf_archive_page: ( 'archive_page' in awf_data ) ? awf_data.archive_page : '',
1296        awf_sc_attrs: ( 'sc_attrs' in data ) ? data.sc_attrs : {},
1297        awf_rewrite: a_w_f.get_rewrites_ajax_data(),
1298        awf_callers: callers,
1299      },
1300      success:  function( response ) {
1301
1302        if( -1 === response ) {
1303          a_w_f.refresh_nonce( function() { a_w_f.update_counts( data ); });
1304          return;
1305        }
1306
1307        if( response ) {
1308
1309          $.each( response.counts, function( taxonomy, slugs ) {
1310            $.each( slugs, function( slug, count ) {
1311              var $filters = $( 'input.awf-filter[data-taxonomy="' + taxonomy + '"][value="' + slug + '"]' );
1312              
1313              $filters.each( function( i, el ) {
1314                var $filter = $( el );
1315                var $container = $filter.closest( '.awf-filter-container' );
1316                $container.find( '.awf-filter-count' ).text(count);
1317                
1318                if( count > 0 ) {
1319                  $container.removeClass( 'awf-empty' );
1320                  if( $container.hasClass( 'awf-empty-disabled' ) ) { $filter.prop( 'disabled', false ); }
1321                } else {
1322                  $container.addClass( 'awf-empty' );
1323                  if( $container.hasClass( 'awf-empty-disabled' ) ) { $filter.prop( 'disabled', true ); }
1324                }
1325              });
1326              
1327            });
1328          });
1329
1330          if( 'price_filter_min_max' in response ) {
1331            if( 'min_price' in response.price_filter_min_max && 'max_price' in response.price_filter_min_max ) {
1332              var min_price = parseFloat( response.price_filter_min_max.min_price );
1333              var max_price = parseFloat( response.price_filter_min_max.max_price );
1334
1335              $( '.awf-style-range-slider.awf-filters-price-min .awf-range-slider-container' ).each( function( i, slider) {
1336                var $slider = $( slider );
1337
1338                var slider_min = Math.floor( min_price );
1339                var slider_max = Math.ceil( max_price );
1340                var step = Math.ceil( parseFloat( $slider.attr( 'data-step' ) ) );
1341                
1342                if( (slider_max - slider_min) < step || (slider_min % step) !== 0 || (slider_max % step) !== 0 ) {
1343                  slider_min = slider_min - (slider_min % step);
1344                  slider_max = slider_max + (step - (slider_max % step));
1345                }
1346
1347                $slider.attr( 'data-min-limit', slider_min ).attr( 'data-max-limit', slider_max );
1348
1349                var $min_control = $slider.find( '.awf-range-slider-min' ).clone( true );
1350                var $max_control = $slider.find( '.awf-range-slider-max' ).clone( true );
1351
1352                if( $min_control.hasClass( 'awf-default' ) && $max_control.hasClass( 'awf-default' ) ) {
1353                  $min_control.val( slider_min );
1354                  $max_control.val( slider_max );
1355                  $slider.attr( 'data-min', slider_min ).attr( 'data-max', slider_max );
1356                }
1357
1358                if( 'undefined' !== typeof( slider.noUiSlider ) ) {
1359                  slider.noUiSlider.destroy();
1360                }
1361
1362                $slider.prepend( $max_control ).prepend( $min_control );
1363                a_w_f.build_range_slider( slider, slider_min, slider_max );
1364              } );
1365            }
1366
1367          }
1368
1369          a_w_f.update_hrefs( response );
1370          
1371          $( document ).trigger( 'awf_after_counts_update' );
1372          
1373          $.each( a_w_f.pretty_scrollbars, function( i, ps ) { ps.update(); });
1374        }
1375      },
1376      error: function( response ) { console.log( response ); }
1377    });
1378  };
1379  
1380  a_w_f.update_orderby = function( $wrappers ) {
1381
1382    var $containers = $( awf_data.orderby_container );
1383
1384    if( false === $wrappers ) {
1385      $wrappers = a_w_f.products_wrappers;
1386
1387    } else {
1388      if( 'yes' === awf_data.wrapper_reload ) {
1389        $wrappers.find( '.woocommerce-ordering select.orderby' ).on( 'change', function() { $( this ).closest( 'form' ).submit(); });
1390
1391      } else {
1392        var $selects = $containers.find( 'select' );
1393
1394        $containers.find( 'input:hidden' ).remove();
1395
1396        if( 'orderby' in awf_data.query ) {
1397          if( $selects.first().val() !== awf_data.query['orderby'] ) {
1398            $selects.val( awf_data.query['orderby'] );
1399          }
1400
1401        } else {
1402          if( 'menu_order' !== $selects.first().val() && $selects.first().find( 'option[value="menu_order"]' ).length > 0 ) {
1403            $selects.val( 'menu_order' );
1404          }
1405        }
1406
1407        $.each( awf_data.query, function( k, v ) {
1408          if( 'orderby' === k ) { return true; }
1409          if( ( 'current_rewrites' in awf_data ) && ( 0 <= awf_data.current_rewrites.indexOf( k ) ) ) { return true; }
1410
1411          $containers.append( '<input type="hidden" name="' + k + '" value="' + v  + '">' );
1412        });
1413      }
1414    }
1415    
1416    if( 'permalinks_on' in awf_data ) {
1417      if( 'archive_page' in awf_data ) {
1418        $containers.find( 'input:hidden[name="' + awf_data.archive_page + '"]' ).remove();
1419      }
1420
1421    } else {
1422      if( 'yes' === awf_data.wrapper_reload ) {
1423        if( ( 'post_type' in awf_data.query ) ) {
1424          $wrappers.find( 'form.woocommerce-ordering' ).append( $( '<input type="hidden" name="post_type" value="product" />' ) );
1425        } else if( 'sc_page' in awf_data ) {
1426          $wrappers.find( 'form.woocommerce-ordering' ).append( $( '<input type="hidden" name="page_id" value="' + awf_data.sc_page + '" />' ) );
1427        }
1428      }
1429
1430      if( 'archive_page' in awf_data ) {
1431        $containers.find( 'input:hidden[name="' + awf_data.archive_page + '"],input:hidden[name="' + awf_data.archive_page_tax + '"]' ).remove();
1432        $containers.append( '<input type="hidden" name="' + awf_data.archive_page_tax + '" value="' + awf_data.query[awf_data.archive_page]  + '">' );
1433      }
1434    }
1435  };
1436  
1437  a_w_f.update_breadcrumbs = function( $ajax_response ) {
1438    
1439    if( 0 === a_w_f.woocommerce_breadcrumbs.length ) { return; }
1440
1441    if( 'archive_page' in awf_data ) {
1442      var $replace_breadcrumb = $ajax_response.find( '#awf-breadcrumbs-support' );
1443      if( 0 < $replace_breadcrumb.length ) {
1444        a_w_f.woocommerce_breadcrumbs.contents().last()[0].textContent = $replace_breadcrumb.text();
1445      }
1446    }
1447  };
1448  
1449  a_w_f.reset_all_filters = function( excluded_taxonomies ) {
1450    excluded_taxonomies = $.merge( excluded_taxonomies, awf_data.reset_all_exceptions );
1451    
1452    $.each( awf_data.query, function( taxonomy ) {
1453      if( $.inArray( taxonomy, excluded_taxonomies) !== -1 ) { return; }
1454      a_w_f.reset_filter( taxonomy );
1455    });
1456  };
1457  
1458  a_w_f.reset_filter = function( taxonomy ) {
1459    var $wrappers = $( '.awf-filter-wrapper[data-taxonomy="' + taxonomy + '"] .awf-filters-container' );
1460
1461    if( 0 >= $wrappers.length ) {
1462      delete awf_data.query[taxonomy];
1463      return;
1464      
1465    } else if( ! ( taxonomy in awf_data.query ) ) {
1466      if( $wrappers.hasClass( 'awf-style-range-slider' ) ) {
1467        $wrappers.filter( '.awf-style-range-slider' ).find( '.awf-filter' ).each( function( i, filter ) {
1468          if( $( filter ).attr( 'data-taxonomy' ) in awf_data.query ) {
1469            taxonomy = $( filter ).attr( 'data-taxonomy' );
1470            return true;
1471          }
1472        } );
1473      }
1474
1475      if( ! ( taxonomy in awf_data.query ) )  { return; }
1476    }
1477
1478    if( a_w_f.force_reload && ( a_w_f.force_reload.indexOf( taxonomy ) >= 0 ) ) { a_w_f.page_reload = true; }
1479    
1480    var values;
1481
1482    if( $wrappers.hasClass( 'awf-product-search' ) || $wrappers.hasClass( 'awf-style-daterangepicker' ) ) {
1483      values = [awf_data.query[taxonomy]];
1484    } else {
1485      values = awf_data.query[taxonomy].toString().split( ',' );
1486    }
1487
1488    $.each( values, function( i, v ) {
1489
1490      if( $wrappers.hasClass( 'awf-style-range-slider' ) ) {
1491        var $wrapper = $wrappers.filter( '.awf-style-range-slider' ).first();
1492        if( taxonomy in awf_data.query ) {
1493          a_w_f.reset_filter_value( $wrapper.find( '.awf-filter' ).first(), $wrapper.find( '.awf-filter-container' ).first() );
1494        }
1495
1496      } else if( $( $wrappers[0] ).hasClass( 'awf-product-search' ) || $( $wrappers[0] ).hasClass( 'awf-style-daterangepicker' ) ) {
1497        a_w_f.reset_filter_value( $( $wrappers[0] ).find( '.awf-filter' ).first(), $( $wrappers[0] ).find( '.awf-filter-container' ).first() );
1498
1499      } else {
1500
1501        var $filter = $wrappers.find( '.awf-filter[value="' + v + '"]' ).first();
1502
1503        if( 0 === $filter.length ) { return true; }
1504
1505        if( $filter[0].hasAttribute( 'data-max-name' ) && ( $filter.attr( 'data-max-name' ) in awf_data.query ) ) {
1506          var $range_filter = $wrappers.find( '.awf-filter[value="' + v + '"][data-next-value="' + awf_data.query[$filter.attr( 'data-max-name' )] + '"]' ).first();
1507          if( 0 !== $range_filter.length ) {
1508            a_w_f.reset_filter_value( $range_filter, $range_filter.closest( '.awf-filter-container' ) );
1509          }
1510
1511        } else {
1512          a_w_f.reset_filter_value( $filter, $filter.closest( '.awf-filter-container' ) );
1513        }
1514      }
1515
1516    });
1517  };
1518      
1519  a_w_f.apply_filters_reset = function( $preset_wrapper ) {
1520    if( 0 < $preset_wrapper.length ) {
1521
1522      if( ! $preset_wrapper.hasClass( 'awf-ajax' ) && ! $preset_wrapper.hasClass( 'awf-url' ) && ! $preset_wrapper.hasClass( 'awf-sbs' ) ) {
1523        a_w_f.update_url();
1524        $preset_wrapper.find( '.awf-form-submit-btn' ).first().trigger( 'click' );
1525
1526      } else {
1527        if( 'sbs' in a_w_f ) {
1528          $( '.awf-sbs' ).each( function( i, wrapper ) {
1529            if( 'redirect_ajax' in awf_data ) {
1530              a_w_f.update_sbs( $( wrapper ), 0, false );
1531
1532            } else {
1533              if( ( $( wrapper ).hasClass( 'awf-sbs-next-btn-on' ) || $( wrapper ).hasClass( 'awf-button' ) ) && ! wrapper.hasAttribute( 'data-sbs-redirect' ) ) {
1534                $( wrapper ).addClass( 'awf-sbs-redirect' );
1535              }
1536
1537              a_w_f.update_sbs( $( wrapper ), 0, true );
1538            }
1539          } );
1540
1541        } else {
1542          a_w_f.apply_filter( true, $preset_wrapper );
1543        }
1544      }
1545
1546    } else {
1547      a_w_f.load_new_history_state();
1548    }
1549  };
1550  
1551  a_w_f.get_rewrites_ajax_data = function() {
1552    var data = {};
1553    
1554    if( 'rewrite_page' in awf_data ) {
1555      data.rewrite = 1;
1556
1557      if( 'archive_page' in awf_data ) {
1558        data.archive_page = awf_data.archive_page;
1559
1560      } else if( 'sc_page' in awf_data ) {
1561        data.sc_page = awf_data.sc_page;
1562      }
1563    }
1564
1565    return data;
1566  }
1567
1568  a_w_f.request_url = function( query, retried ) {
1569
1570    if( 'undefined' === typeof( query ) ) {
1571      query = $.extend( true, {}, awf_data.query );
1572    }
1573
1574    var data = {
1575      action: 'awf',
1576      awf_front: 1,
1577      awf_action: 'request_url',
1578      awf_nonce: awf_data.nonce,
1579      awf_query: query,
1580      awf_rewrite: a_w_f.get_rewrites_ajax_data()
1581    }
1582
1583    var deferred = $.Deferred();
1584
1585    $.ajax({
1586      type:     "get",
1587      url:      awf_data.ajax_url,
1588      dataType: "json",
1589      data: data
1590    }).then( function( response ) {
1591      if( -1 === response && ! retried ) {
1592        a_w_f.refresh_nonce( function() {
1593          a_w_f.request_url( query, true ).then( function( r ) {
1594            deferred.resolve( r );
1595          });
1596        });
1597      } else {
1598        deferred.resolve( -1 === response ? {} : response );
1599      }
1600    });
1601
1602    return deferred.promise();
1603  }
1604  
1605  a_w_f.build_url = function( query, archive_url ) {
1606
1607    if( 'undefined' === typeof( query ) ) {
1608      query = $.extend( true, {}, awf_data.query );
1609    }
1610
1611    var url = awf_data.filters_url;
1612    
1613    if( ( 'archive_page' in awf_data ) ) {
1614      query[awf_data.archive_identifier] = 1;
1615
1616      if( 'permalinks_on' in awf_data ) {
1617        if( 'undefined' === typeof archive_url ) {
1618          if( awf_data.archive_page in query ) {
1619            url = url.replace( awf_data.archive_page_switch, '/' + query[awf_data.archive_page] + awf_data.archive_page_trailingslash );
1620          }
1621
1622        } else {
1623          url = archive_url;
1624        }
1625        
1626      } else {
1627        query[awf_data.archive_page_tax] = query[awf_data.archive_page];
1628      }
1629
1630      delete query[awf_data.archive_page];
1631    }
1632    
1633    if( 'ajax_pagination_url' in awf_data ) {
1634      if( 'sc_page' in awf_data ) {
1635        if( 1 < awf_data.ajax_pagination_number ) { query['product-page'] = awf_data.ajax_pagination_number; }
1636        
1637      } else {
1638        if( 'permalinks_on' in awf_data ) {
1639          var url_parts = awf_data.ajax_pagination_url.split('?');
1640          if( 1 < url_parts.length ) { url = url_parts[0]; } else { url = awf_data.ajax_pagination_url; }
1641
1642        } else {
1643          if( 1 < awf_data.ajax_pagination_number ) { query.paged = awf_data.ajax_pagination_number; }
1644        }
1645      }
1646      
1647      delete awf_data.ajax_pagination_url;
1648      
1649    }
1650    
1651    if( ! $.isEmptyObject( query ) ) { url += '?' + $.param( query ).replace( /%2C/g, ',' ); }
1652
1653    return url;
1654  };
1655  
1656  a_w_f.update_hrefs = function( ajax_data ) {
1657
1658    if( 'links' in ajax_data ) {
1659      a_w_f.preset_wrappers.filter( '.awf-url' ).each( function( i, preset_wrapper ) {
1660        var $preset_wrapper = $( preset_wrapper );
1661        var preset_id = $preset_wrapper.attr( 'data-preset-id' );
1662        
1663        if( preset_id in ajax_data.links ) {
1664          $.each( ajax_data.links[preset_id], function( filter_id, filters ) {
1665            var $links = $preset_wrapper.find( '.awf-filters-' + preset_id + '-' + filter_id + '-container a' );
1666            $.each( filters, function( slug, href ) {
1667              var nofollow = '';
1668              if( 'nofollow' in ajax_data && href in ajax_data.nofollow && 1 == ajax_data.nofollow[href] ) {
1669                nofollow = 'nofollow';
1670              }
1671              $links.filter( '.awf-' + slug + '-href' ).attr( 'href', href ).attr( 'rel', nofollow );
1672            });
1673          });
1674        }
1675      });
1676
1677    } else {
1678      $( '.awf-url .awf-filter-wrapper' ).each( function( i, wrapper ) {
1679        
1680        if( $( wrapper ).hasClass( 'awf-reset-all' ) ) {
1681          if( 'premium' in a_w_f ) { a_w_f.update_reset_all_hrefs( $( wrapper ) ); }
1682          
1683        } else if( $( wrapper ).hasClass( 'awf-single' ) || $( wrapper ).hasClass( 'awf-range' ) ) {
1684          $( wrapper ).find( '.awf-filter' ).each( function( ii, filter ) {
1685            
1686            var $filter = $( filter );
1687            var query = $.extend( true, {}, awf_data.query );
1688            var taxonomy = $filter.attr( 'data-taxonomy' );
1689            
1690            if( ! ( taxonomy in query ) ) {
1691              query[taxonomy] = '';
1692            }
1693            
1694            if( $filter.hasClass( 'awf-default' ) || $filter.val() === query[taxonomy] ) {
1695              if( ! ( ( 'archive_page' in awf_data ) && taxonomy === awf_data.archive_page ) ) {
1696                delete query[taxonomy];
1697
1698                if( $filter.is( '[data-max-name]' ) ) { delete query[$filter.attr( 'data-max-name' )]; }
1699              }
1700              
1701            } else {
1702              query[taxonomy] = $filter.val();
1703              if( $filter.is( '[data-max-name]' ) ) { query[$filter.attr( 'data-max-name' )] = $filter.attr( 'data-next-value' ); }
1704            }
1705            
1706            if( $filter.is( '[data-archive-permalink]' ) ) {
1707              $filter.closest( 'a' ).attr( 'href', a_w_f.build_url( query, $filter.attr( 'data-archive-permalink' ) ) );
1708            } else {
1709              $filter.closest( 'a' ).attr( 'href', a_w_f.build_url( query ) );
1710            }
1711                
1712          });
1713          
1714        } else if( $( wrapper ).hasClass( 'awf-multi' ) ) {
1715          
1716          $( wrapper ).find( '.awf-filter' ).each( function( ii, filter ) {
1717            
1718            var $filter = $( filter );
1719            var query = $.extend( true, {}, awf_data.query );
1720            var taxonomy = $filter.attr( 'data-taxonomy' );
1721            var values;
1722            if( taxonomy in query ) { values = query[taxonomy].split( ',' ); } else { values = []; }
1723            
1724            if( $filter.is( ':checked' ) ) {
1725              values = $.grep( values, function( v ) { return v !== $filter.val(); } );
1726
1727            } else {
1728              $filter.parents( 'ul' ).prev( 'li.awf-filter-container' ).find( '.awf-filter' ).each( function( i, f ) {
1729                values = $.grep( values, function( v ) { return v !== $( f ).val(); } );
1730              });
1731
1732              $filter.parents( 'li.awf-filter-container' ).next( 'ul' ).find( '.awf-filter' ).each( function( i, f ) {
1733                values = $.grep( values, function( v ) { return v !== $( f ).val(); } );
1734              });
1735              
1736              values.push( $filter.val() );
1737            }
1738            
1739            if( values.length > 0 ) {
1740              values.sort();
1741              query[taxonomy] = values.join( ',' );
1742
1743            } else {
1744              if( ( 'archive_page' in awf_data ) && taxonomy === awf_data.archive_page ) {
1745                query[taxonomy] = $filter.val();
1746              } else {
1747                delete query[taxonomy];
1748              }
1749            }
1750            
1751            $filter.closest( 'a' ).attr( 'href', a_w_f.build_url( query ) );
1752          });
1753        }
1754      });
1755    }
1756  };
1757  
1758  a_w_f.range_slider_onchange = function( range_container, values, min, max ) {
1759    var $range_container = $( range_container );
1760
1761    if( ( $range_container.hasClass( 'awf-button-filter' ) || $range_container.hasClass( 'awf-range-btn' ) ) && ! ( 'pre_button_query' in awf_data ) ) {
1762      awf_data.pre_button_query = $.extend( true, {}, awf_data.query );
1763    }
1764    
1765    if( $range_container.hasClass( 'awf-reset-all' ) && typeof a_
1765w_f.range_slider_reset_all === 'function' ) {
1766      a_w_f.range_slider_reset_all( $range_container );
1767    }
1768
1769    a_w_f.range_slider_update_values( range_container, values, min, max );
1770
1771    var $preset_wrapper = $range_container.closest( '.awf-preset-wrapper' );
1772
1773    if( $preset_wrapper.hasClass( 'awf-sbs' ) ) {
1774
1775      if( '1' === $range_container.attr( 'data-force-sbs-redirect' ) ) {
1776        $preset_wrapper.addClass( 'awf-sbs-redirect' );
1777      }
1778
1779      a_w_f.update_sbs( $preset_wrapper, $range_container.closest( '.awf-filter-wrapper' ).first().attr( 'data-sbs-i' ), ( '1' === $range_container.attr( 'data-apply-sbs' ) ) );
1780    }
1781
1782    if( ! ( $range_container.hasClass( 'awf-range-btn' ) || $preset_wrapper.hasClass( 'awf-button' ) ) ) {
1783      a_w_f.apply_filter( true, $preset_wrapper );
1784    }
1785  };
1786    
1787  a_w_f.range_slider_update_values = function( range_container, values, min, max ) {
1788    var $range_container = $( range_container );
1789    var taxonomy = $range_container.find( '.awf-filter.awf-range-slider-min').first().attr( 'data-taxonomy' );
1790
1791    values[0] = parseFloat( values[0] );
1792    values[1] = parseFloat( values[1] );
1793    
1794    $( '.awf-filter-wrapper[data-taxonomy="' + taxonomy + '"] .awf-range-slider-container' ).each( function( i, filter_container ) {
1795      
1796      var $min_filter = $( filter_container ).find( '.awf-range-slider-min' );
1797      var $max_filter = $( filter_container ).find( '.awf-range-slider-max' );
1798      
1799      $min_filter.val( values[0] );
1800      $max_filter.val( values[1] );
1801
1802      $( filter_container ).attr( 'data-min', values[0] ).attr( 'data-max', values[1] );
1803
1804      if( values[0] === parseFloat( min ) ) { $min_filter.addClass( 'awf-default' ); } else { $min_filter.removeClass( 'awf-default' ); }
1805      if( values[1] === parseFloat( max ) ) { $max_filter.addClass( 'awf-default' ); } else { $max_filter.removeClass( 'awf-default' ); }
1806      
1807      if( filter_container === range_container ) {
1808        
1809        $( filter_container ).addClass( 'awf-active' );
1810        
1811        a_w_f.update_query( $min_filter, $range_container, false );
1812        a_w_f.update_query( $max_filter, $( range_container ), true );
1813
1814        $( '.awf-filter-wrapper[data-taxonomy="' + taxonomy + '"] .awf-range-filter-container.awf-active' ).removeClass( 'awf-active' ).find( 'input.awf-filter' ).prop( 'checked', false );
1815        $( '.awf-filter-wrapper[data-taxonomy="' + taxonomy + '"] .awf-range-filter-container input[value="' + values[0] + '"][data-next-value="' + values[1] + '"]' ).prop( 'checked', true ).closest( '.awf-filter-container' ).addClass( 'awf-active' );
1816        
1817      } else {
1818        filter_container.noUiSlider.set( [values[0], values[1]] );
1819        $( filter_container ).removeClass( 'awf-active' );
1820      }
1821    });
1822  };
1823  
1824  a_w_f.daterangepicker_update_values = function( $daterangepicker, $filter, $filter_container ) {
1825
1826    if( $filter.hasClass( 'awf-button-filter' ) && ! ( 'pre_button_query' in awf_data ) ) {
1827      awf_data.pre_button_query = $.extend( true, {}, awf_data.query );
1828    }
1829    
1830    $( '.awf-style-daterangepicker .awf-filter[data-taxonomy="' + $filter.attr( 'data-taxonomy' ) + '"]' ).each( function( i, el ) {
1831      
1832      var $el = $( el );
1833      var is_caller = ( $el.attr( 'id' ) === $filter.attr( 'id' ) );
1834      var $el_daterangepicker = $el.siblings( '.awf-daterangepicker' );
1835      var $el_filter_container = $el.closest( '.awf-filter-container' );
1836      
1837      if( 0 === $filter.val().length ) {
1838        
1839        $el_daterangepicker.data( 'daterangepicker' ).setStartDate( moment().utc().format( $el_daterangepicker.data( 'daterangepicker' ).locale.format ) );
1840        
1841        if( $el_daterangepicker.data( 'daterangepicker' ).singleDatePicker ) {
1842          $el_daterangepicker.data( 'daterangepicker' ).setEndDate( moment().utc().format( $el_daterangepicker.data( 'daterangepicker' ).locale.format ) );
1843        } else {
1844          $el_daterangepicker.data( 'daterangepicker' ).setEndDate( moment().utc().add( 2, 'd' ).format( $el_daterangepicker.data( 'daterangepicker' ).locale.format ) );
1845        }
1846        
1847        $el.val( '' );
1848        $el_daterangepicker.val( '' );
1849        $el_filter_container.removeClass( 'awf-active' );
1850        
1851      } else {
1852        if( ! is_caller ) {
1853          $el.val( $filter.val() );
1854          $el_daterangepicker.val( $daterangepicker.val() );
1855          
1856          $el_daterangepicker.data( 'daterangepicker' ).setStartDate( $daterangepicker.data( 'daterangepicker' ).startDate.format( $el_daterangepicker.data( 'daterangepicker' ).locale.format ) );
1857          $el_daterangepicker.data( 'daterangepicker' ).setEndDate( $daterangepicker.data( 'daterangepicker' ).endDate.format( $el_daterangepicker.data( 'daterangepicker' ).locale.format ) );
1858        }
1859        
1860        $el_filter_container.addClass( 'awf-active' );
1861      }
1862    });
1863    
1864    a_w_f.update_query( $filter, $filter_container, true );
1865  };
1866  
1867  a_w_f.update_sbs = function( $preset_wrapper, i, apply_filters ) {
1868    if( $preset_wrapper.hasClass( 'awf-sbs-redirect' )
1869        && ( ( 'redirect_ajax' in awf_data ) || $preset_wrapper[0].hasAttribute( 'data-sbs-redirect' ) )
1870      ) {
1871      a_w_f.apply_filter( 'sbs', $preset_wrapper );
1872      return;
1873    }
1874    
1875    var current_i = i = parseInt( i );
1876    var next_i = i + 1;
1877    var total = parseInt( $preset_wrapper.attr( 'data-sbs-total' ) );
1878    var gap = false;
1879    var filter_wrappers = {};
1880    
1881    for( var fi = i; fi <= total; fi++ ) {
1882      if( fi === 0 ) { continue; }
1883      
1884      var $filter_wrapper = $( $preset_wrapper ).find( '.awf-sbs-' + fi );
1885      if( 0 === $filter_wrapper.length ) { continue; }
1886      
1887      var has_active_filters = a_w_f.filter_wrapper_has_active( $filter_wrapper );
1888      
1889      if( 0 === i ) {
1890        if( has_active_filters ) {
1891          if( gap ) {
1892            a_w_f.reset_filter( $filter_wrapper.attr( 'data-taxonomy' ) );
1893          } else {
1894            current_i++; next_i++;
1895          }
1896
1897        } else {
1898          gap = true;
1899        }
1900
1901      } else {
1902        if( has_active_filters ) {
1903          if( gap ) {
1904            a_w_f.reset_filter( $filter_wrapper.attr( 'data-taxonomy' ) );
1905          } else {
1906            if( fi === next_i && ( $preset_wrapper.hasClass( 'awf-button' ) || fi < total ) ) {
1907              current_i = fi; next_i = current_i + 1;
1908            }
1909          }
1910          
1911        } else {
1912          if( current_i >= 1 && fi === current_i ) { next_i = current_i; current_i--; }
1913          gap = true;
1914        }
1915      }
1916      
1917      if( $preset_wrapper.hasClass( 'awf-sbs-unhide' ) && fi < next_i ) {
1918        $filter_wrapper.removeClass( 'awf-hidden' );
1919      } else {
1920        $filter_wrapper.addClass( 'awf-hidden' );
1921      }
1922      
1923      filter_wrappers[fi] = $filter_wrapper;
1924    }
1925    
1926    if( next_i < 2 ) { $preset_wrapper.addClass( 'awf-sbs-first' ); } else { $preset_wrapper.removeClass( 'awf-sbs-first' ); }
1927    $preset_wrapper.removeClass( 'awf-sbs-next-btn-hidden' ).removeClass( 'awf-sbs-last' );
1928    
1929    var show = next_i;
1930    var update_counts = true;
1931    
1932    if( $preset_wrapper.hasClass( 'awf-sbs-next-btn-on' ) ) {
1933      
1934      if( current_i < 1 || next_i > total || ( next_i === total && apply_filters ) ) {
1935        $preset_wrapper.addClass( 'awf-sbs-next-btn-hidden' );
1936      }
1937      
1938      if( current_i === i ) { update_counts = false; }
1939      if( next_i === 2 && i > 0 && i !== next_i ) { $preset_wrapper.addClass( 'awf-sbs-first' ); }
1940      
1941      if( i > 0 && i === current_i ) { show = current_i; }
1942    }
1943    
1944    if( show > total ) { show = total; } else {
1945      if( ! ( show in filter_wrappers ) ) {
1946        var $fw = $( $preset_wrapper ).find( '.awf-sbs-' + show );
1947        if( 0 < $fw.length ) { filter_wrappers[show] = $fw; }
1948      }
1949    }
1950    
1951    if( show in filter_wrappers ) { 
1952      var $loading = filter_wrappers[show].has( '.awf-filters-container:not(.awf-style-range-slider):not(.awf-product-search):not(.awf-style-daterangepicker)' );
1953      
1954      if( 0 < $loading.length ) {
1955        filter_wrappers[show].addClass( 'awf-sbs-loading' );
1956        
1957        $( document ).one( 'awf_after_counts_update', function() {
1958          filter_wrappers[show].removeClass( 'awf-sbs-loading' );
1959        }); 
1960      }
1961      
1962      filter_wrappers[show].removeClass( 'awf-hidden' );
1963    }
1964    
1965    if( $preset_wrapper.hasClass( 'awf-sbs-submit-last' ) && next_i > total ) {
1966      
1967      if( ! gap ) {
1968        
1969        $preset_wrapper.addClass( 'awf-sbs-last' );
1970        
1971        if( apply_filters ) {
1972          if( $preset_wrapper.hasClass( 'awf-sbs-next-btn-on' ) ) {
1973            apply_filters = false;
1974          } else {
1975            if( ! $preset_wrapper.hasClass( 'awf-button' ) ) { $preset_wrapper.addClass( 'awf-sbs-redirect' ); }
1976          }
1977
1978        } else {
1979          
1980          if( ! $preset_wrapper.hasClass( 'awf-button' ) ) {
1981            if( current_i === total && i !== 0 ) { $preset_wrapper.addClass( 'awf-sbs-redirect' ); }
1982          }
1983          
1984        }
1985      }
1986
1987    } else {
1988      
1989      if( apply_filters ) {
1990        if( $preset_wrapper.hasClass( 'awf-sbs-submit-last' ) ) {
1991          apply_filters = false;
1992          if( $preset_wrapper.hasClass( 'awf-sbs-next-btn-on' ) ) {
1993            update_counts = true;
1994          }
1995
1996        } else {
1997          if( $preset_wrapper.hasClass( 'awf-button' ) ) { apply_filters = false; } else { $preset_wrapper.addClass( 'awf-sbs-redirect' ); }
1998        }
1999      }
2000    }
2001    
2002    if( next_i > total && ( i === (next_i - 1) ) ) {
2003      update_counts = false;
2004      
2005      if( $preset_wrapper.hasClass( 'awf-sbs-next-btn-on' ) && ! $preset_wrapper.hasClass( 'awf-button' ) ) {
2006        $preset_wrapper.addClass( 'awf-sbs-redirect' );
2007      }
2008    }
2009    
2010    if( apply_filters || $preset_wrapper.hasClass( 'awf-sbs-redirect' ) ) {
2011      a_w_f.apply_filter( 'sbs', $preset_wrapper );
2012      
2013    } else {
2014      if( update_counts ) {
2015        a_w_f.update_counts();
2016        
2017      } else {
2018        if( show in filter_wrappers ) {
2019          filter_wrappers[show].removeClass( 'awf-sbs-loading' );
2020          
2021          var $has_ps = filter_wrappers[show].find( '.awf-pretty-scrollbars' );
2022
2023          if( 0 < $has_ps.length ) {
2024            $.each( a_w_f.pretty_scrollbars, function( i, ps ) { if( ps.element === $has_ps[0] ) { ps.update(); return false; } });
2025          }
2026        }
2027      }
2028    }
2029  };
2030      
2031  a_w_f.filter_wrapper_has_active = function( $filter_wrapper ) {
2032    if( $filter_wrapper.attr( 'data-taxonomy' ) in awf_data.query ) {
2033      return true;
2034    } else {
2035      if( $filter_wrapper[0].hasAttribute( 'data-taxonomy-max' ) && ( $filter_wrapper.attr( 'data-taxonomy-max' ) in awf_data.query ) ) {
2036        return true;
2037      }
2038    }
2039
2040    return false;
2041  };
2042  
2043  a_w_f.update_url = function() {
2044
2045    if( 'rewrite_page' in awf_data ) {
2046
2047      a_w_f.request_url().then( function( response ) {
2048        if( 'url' in response ) {
2049          window.history.pushState( { awf_ajax_call: true }, '', response.url );
2050        } else {
2051          window.history.pushState( { awf_ajax_call: true }, '', a_w_f.build_url() );
2052        }
2053      } );
2054
2055    } else {
2056      var url = a_w_f.build_url();
2057      window.history.pushState( { awf_ajax_call: true }, '', url );
2058    }
2059  };
2060  
2061  a_w_f.build_products_wrappers = function() {
2062    if( 'products_wrapper' in awf_data ) {
2063      a_w_f.products_wrappers = $( awf_data.products_wrapper );
2064
2065    } else if( 'products_container' in awf_data ) {
2066      a_w_f.products_wrappers = $( awf_data.products_container ).parent();
2067      
2068      if( 0 === a_w_f.products_wrappers.length ) {
2069        a_w_f.products_wrappers = $( awf_data.no_result_container ).first().parent();
2070      }
2071			
2072    } else {
2073			a_w_f.products_wrappers = $([]);
2074		}
2075  };
2076  
2077  a_w_f.extract_products_wrappers = function( $html ) {
2078    var $wrappers;
2079
2080    if( 'products_wrapper' in awf_data ) {
2081      $wrappers = $html.find( awf_data.products_wrapper );
2082
2083    } else if( 'products_container' in awf_data ) {
2084      $wrappers = $html.find( awf_data.products_container ).parent();
2085      
2086      if( 0 === $wrappers.length ) {
2087        $wrappers = $html.find( awf_data.no_result_container ).first().parent();
2088      }
2089    }
2090
2091    if( 'undefined' === typeof( $wrappers ) ) {
2092      $wrappers = $([]);
2093    }
2094
2095    return $wrappers;
2096  };
2097  
2098  a_w_f.setup_pagination_after = function( $container ) {
2099    var classes_array = [];
2100
2101    $container.find( awf_data.pagination_container ).each( function() {
2102      var classes = $( this ).prev().attr( 'class' );
2103      
2104      if( 'undefined' === typeof( classes ) ) {
2105        classes = '';
2106      } else {
2107        classes = classes.split( /\s+/ ).join( '.' );
2108      }
2109
2110      if( 0 < classes.length ) {
2111        classes_array.push( '.' + classes );
2112      }
2113    } );
2114
2115    if( 0 < classes_array.length ) {
2116      awf_data.pagination_after = classes_array.join( ',' );
2117    }
2118  }
2119  
2120  a_w_f.setup_ajax_pagination = function( $wrappers ) {
2121
2122    var $pagination_containers = $wrappers.find( awf_data.pagination_container );
2123    
2124    awf_data.ajax_pagination_loading = false;
2125    
2126    if( 'page_numbers' === awf_data.ajax_pagination.type ) {
2127      if( 0 === $pagination_containers.length ) { return; }
2128      
2129      var $page_numbers = $pagination_containers.find( awf_data.ajax_pagination.page_number );
2130
2131      if( 'block_pagination' in awf_data.ajax_pagination ) {
2132        $page_numbers = $page_numbers.add( $pagination_containers.find( awf_data.ajax_pagination.next ) ).add( $pagination_containers.find( awf_data.ajax_pagination.prev ) );
2133      }
2134
2135      $page_numbers
2136        .off( 'click' )
2137        .on( 'click', function( event ) {
2138          event.preventDefault();
2139        
2140          var $page_number = $( this );
2141          var number = '';
2142
2143          if( $page_number.is( awf_data.ajax_pagination.next ) ) {
2144            if( 'block_pagination' in awf_data.ajax_pagination ) {
2145              $page_number = $pagination_containers.find( '.current' ).next( awf_data.ajax_pagination.page_number );
2146            } else {
2147              $page_number = $pagination_containers.find( '.current' ).first().parent().next().find( awf_data.ajax_pagination.page_number );
2148            }
2149            
2150          } else if( $page_number.is( awf_data.ajax_pagination.prev ) ) {
2151            if( 'block_pagination' in awf_data.ajax_pagination ) {
2152              $page_number = $pagination_containers.find( '.current' ).prev( awf_data.ajax_pagination.page_number );
2153            } else {
2154              $page_number = $pagination_containers.find( '.current' ).first().parent().prev().find( awf_data.ajax_pagination.page_number );
2155            }
2156          }
2157
2158          number = $page_number.text().replace( /[^0-9]/gi, '' );
2159          if( 0 === number.length ) { return; }
2160
2161          awf_data.ajax_pagination_number = parseInt( number, 10 );
2162          awf_data.ajax_pagination_url = $page_number.attr( 'href' );
2163          awf_data.ajax_pagination_loading = true;
2164
2165          if( 'rewrite_page' in awf_data ) {
2166            window.history.pushState( { awf_ajax_call: true }, '', awf_data.ajax_pagination_url );
2167          } else {
2168            a_w_f.update_url();
2169          }
2170          
2171          a_w_f.ajax_filter( true );
2172      });
2173
2174    } else if( 'infinite_scroll' === awf_data.ajax_pagination.type ) {
2175      if( ( 'sc_page' in awf_data ) && 1 < a_w_f.products_wrappers.length ) { return; }
2176      
2177      $pagination_containers.hide();
2178      
2179      a_w_f.setup_ajax_pagination_next( $pagination_containers.first() );
2180      
2181      awf_data.ajax_pagination.last_product = $wrappers.find( awf_data.ajax_pagination.product_container ).last();
2182      if( 0 === awf_data.ajax_pagination.last_product.length ) { return; }
2183      awf_data.ajax_pagination.is_top = ( 'is_adjustment' in awf_data ) ? awf_data.ajax_pagination.last_product.offset().top + parseInt( awf_data.is_adjustment, 10 ) : awf_data.ajax_pagination.last_product.offset().top - ( 2 * awf_data.ajax_pagination.last_product.height() );
2184
2185      if( ! ( 'initiated' in awf_data.ajax_pagination ) && ! awf_data.ajax_pagination_end_reached ) {
2186        var $window = $( window );
2187        awf_data.ajax_pagination.body = $( 'body' );
2188        awf_data.ajax_pagination_loading_query = JSON.stringify( awf_data.query );
2189        
2190        $( document ).on( 'awf_after_ajax_products_update awf_ajax_products_update_cancellation', function() {
2191          var $w = $( window );
2192          if( $w.height() >= $( document ).height() ) { $w.trigger( 'scroll' ); }
2193        } );
2194
2195        $window.on( 'scroll touchstart', function() {
2196            var $w = $( this );
2197
2198            if( 0 === awf_data.ajax_pagination.last_product.length ) { return; }
2199
2200            if ( ! awf_data.ajax_pagination_end_reached
2201                && ! awf_data.ajax_pagination_loading
2202                && ! awf_data.ajax_pagination.body.hasClass( 'awf-loading-ajax' )
2203                && ! ( awf_data.ajax_pagination.body.hasClass( 'awf-togglable-preset-on' ) && a_w_f.togglable_preset.hasClass( 'awf-left-popup-sidebar-mode' ) )
2204                && ( $w.scrollTop() + $w.height() ) >= awf_data.ajax_pagination.is_top
2205            ) {
2206              awf_data.ajax_pagination_loading = true;
2207              a_w_f.ajax_filter( true );
2208            }
2209        });
2210        
2211        if( $window.height() >= $( document ).height() ) { $window.trigger( 'scroll' ); }
2212        
2213        awf_data.ajax_pagination.initiated = true;
2214      }
2215      
2216    } else if( 'more_button' === awf_data.ajax_pagination.type ) {
2217      
2218      if( 0 === $pagination_containers.length ) { return; }
2219      
2220      if( ( 'sc_page' in awf_data ) && 1 < a_w_f.products_wrappers.length ) { return; }
2221      
2222      awf_data.ajax_pagination.last_product = $wrappers.find( awf_data.ajax_pagination.product_container ).last();
2223      if( 0 === awf_data.ajax_pagination.last_product.length ) { return; }
2224      
2225      $pagination_containers.hide();
2226
2227      a_w_f.setup_ajax_pagination_next( $pagination_containers.first() );
2228      
2229      if ( ! awf_data.ajax_pagination_end_reached ) {
2230        $( '<div class="awf-pagination-more-btn-container"><button type="button" title="' + awf_data.i18n.ajax_pagination_more_button + '" class="awf-pagination-more-btn">' + awf_data.i18n.ajax_pagination_more_button + '</button></div>' )
2231          .on( 'click', function() {
2232            var $button = $( this );
2233          
2234            awf_data.ajax_pagination_loading = true;
2235            a_w_f.ajax_filter( true );
2236          
2237            $button.remove();
2238          })
2239          .insertAfter( $wrappers.find( awf_data.products_container ) );
2240      }
2241    }
2242  };
2243      
2244  a_w_f.setup_ajax_pagination_next = function( $container ) {
2245    if( ! ( 'ajax_pagination_number' in awf_data ) ) { awf_data.ajax_pagination_number = 1; }
2246    
2247    if( 1 === awf_data.ajax_pagination_number ) {
2248      awf_data.ajax_pagination_last = 0;
2249      
2250      var $last_container = $container.find( awf_data.ajax_pagination.page_number + ':not(.next)' ).last();
2251      if( 0 < $last_container.length ) {
2252        var text = $last_container.text().replace( /[^0-9]/gi, '' );
2253        if( 0 < text.length ) { awf_data.ajax_pagination_last = parseInt( text, 10 ); }
2254      }
2255    }
2256    
2257    var next_number = parseInt( ( awf_data.ajax_pagination_number + 1 ), 10 );
2258    
2259    if( next_number > awf_data.ajax_pagination_last ) {
2260      awf_data.ajax_pagination_end_reached = true;
2261      
2262    } else {
2263      awf_data.ajax_pagination_number = next_number;
2264      awf_data.ajax_pagination_end_reached = false;
2265    }
2266  };
2267  
2268  a_w_f.setup_togglable_preset = function() {
2269
2270    a_w_f.togglable_preset = $( '.awf-togglable-preset' );
2271
2272    if( 0 < a_w_f.togglable_preset.length ) {
2273      if( 1 < a_w_f.togglable_preset.length ) {
2274        a_w_f.togglable_preset.each( function( i, el ) {
2275          if( 0 < i ) { $( el ).remove(); }
2276        });
2277        
2278        a_w_f.togglable_preset = $( '.awf-togglable-preset' );
2279      }
2280
2281    } else {
2282      a_w_f.togglable_preset = $( '.awf-togglable-on-s-preset' );
2283
2284      if( 1 < a_w_f.togglable_preset.length ) {
2285        a_w_f.togglable_preset.each( function( i, el ) {
2286          if( 0 < i ) { $( el ).removeClass( 'awf-togglable-on-s-preset' ); }
2287        });
2288
2289        a_w_f.togglable_preset = $( '.awf-togglable-on-s-preset' );
2290      }
2291    }
2292
2293    if( 0 < a_w_f.togglable_preset.length ) {
2294      
2295      a_w_f.togglable_preset.css( 'opacity', '1' );
2296      a_w_f.insert_togglable_preset_btn();
2297      
2298      $( document ).on( 'awf_ajax_filter', function() {
2299        if( a_w_f.togglable_preset.hasClass( 'awf-above-products-mode' ) ) {
2300          if( a_w_f.togglable_preset.hasClass( 'awf-togglable-preset' )
2301             || ( a_w_f.togglable_preset.hasClass( 'awf-togglable-on-s-preset' ) && $( 'body' ).hasClass( 'awf-togglable-preset-mode-on' ) )
2302          ) {
2303            a_w_f.move_togglable_preset_to_placeholder();
2304   
2304       }
2305        }
2306        
2307        if( awf_data.togglable_preset.close_preset_on_ajax_update ) {
2308          a_w_f.close_togglable_preset();
2309        }
2310      } );
2311      
2312      $( document ).on( 'awf_after_ajax_products_update', function() {
2313        if( 0 === $( '.awf-togglable-preset-btn' ).length ) { a_w_f.insert_togglable_preset_btn(); }
2314        
2315        if( a_w_f.togglable_preset.hasClass( 'awf-above-products-mode' ) ) {
2316          if( a_w_f.togglable_preset.hasClass( 'awf-togglable-preset' )
2317             || ( a_w_f.togglable_preset.hasClass( 'awf-togglable-on-s-preset' ) && $( 'body' ).hasClass( 'awf-togglable-preset-mode-on' ) )
2318          ) {
2319            a_w_f.move_togglable_preset_above_products();
2320          }
2321          
2322        }
2323      } );
2324
2325      if( a_w_f.togglable_preset.hasClass( 'awf-togglable-on-s-preset' ) ) {
2326        
2327        if( a_w_f.togglable_preset.attr( 'data-responsive-width' ) >= window.innerWidth ) {
2328          
2329          if( a_w_f.togglable_preset.hasClass( 'awf-left-popup-sidebar-mode' ) ) {
2330            a_w_f.togglable_preset.hide();
2331            setTimeout( function() {
2332              a_w_f.togglable_preset.show();
2333
2334              var $thl = a_w_f.togglable_preset.find( '.awf-filter-wrapper.awf-thl' );
2335              if( 0 < $thl.length && ( 'update_thl' in a_w_f ) ) {
2336                a_w_f.update_thl( $thl );
2337              }
2338            }, 1000);
2339          }
2340
2341          $( 'body' ).addClass( 'awf-togglable-preset-mode-on' );
2342          
2343          if( a_w_f.togglable_preset.hasClass( 'awf-above-products-mode' ) ) {
2344            a_w_f.move_togglable_preset_above_products();
2345          }
2346        }
2347
2348        $( window ).resize( function() {
2349          if( a_w_f.togglable_preset.attr( 'data-responsive-width' ) >= window.innerWidth ) {
2350            if( ! $( 'body' ).hasClass( 'awf-togglable-preset-mode-on' ) ) {
2351              $( 'body' ).addClass( 'awf-togglable-preset-mode-on' );
2352              if( a_w_f.togglable_preset.hasClass( 'awf-above-products-mode' ) ) {
2353                a_w_f.move_togglable_preset_above_products();
2354              }
2355            }
2356            
2357          } else {
2358            if( $( 'body' ).hasClass( 'awf-togglable-preset-mode-on' ) ) {
2359              $( 'body' ).removeClass( 'awf-togglable-preset-mode-on' );
2360              if( a_w_f.togglable_preset.hasClass( 'awf-above-products-mode' ) ) {
2361                a_w_f.move_togglable_preset_to_placeholder();
2362              }
2363            }
2364          }
2365        });
2366        
2367      } else {
2368        if( a_w_f.togglable_preset.hasClass( 'awf-above-products-mode' ) ) {
2369          a_w_f.move_togglable_preset_above_products();
2370        }
2371      }
2372      
2373      if( a_w_f.togglable_preset.hasClass( 'awf-fix-popup-close-btn' ) && ! a_w_f.togglable_preset.hasClass( 'awf-above-products-mode' ) && 0 === $( '#awf-fixed-popup-close-btn' ).length ) {
2374        a_w_f.togglable_preset.find( '.awf-togglable-preset-close-btn' ).first().appendTo( 'body' ).attr( 'id', 'awf-fixed-popup-close-btn');
2375      }
2376
2377      $( '.awf-togglable-preset-close-btn' ).on( 'click', a_w_f.close_togglable_preset );        
2378    }
2379  };
2380  
2381  a_w_f.move_togglable_preset_above_products = function() {
2382    a_w_f.togglable_preset.after( '<div id="awf-togglable-preset-placeholder"></div>' );
2383    a_w_f.togglable_preset.insertAfter( $( '.awf-togglable-preset-btn' ) );
2384  };
2385  
2386  a_w_f.move_togglable_preset_to_placeholder = function() {
2387    a_w_f.togglable_preset.insertBefore( $( '#awf-togglable-preset-placeholder' ) );
2388    $( '#awf-togglable-preset-placeholder' ).remove();
2389  };
2390  
2391  a_w_f.insert_togglable_preset_btn = function() {
2392
2393    var $togglable_preset_btn = $( '<div class="awf-togglable-preset-btn" role="button" aria-label="' + awf_data.i18n.togglable_preset_btn_label + '" tabindex="0"><i class="fas fa-bars awf-togglable-preset-btn-icon"></i><span>' + awf_data.i18n.togglable_preset_btn_label + '</span></div>' );
2394
2395    var $position = $( '.annasta-toggle-filters-button' ).first();
2396    
2397    if( 0 < $position.length ) {
2398      $togglable_preset_btn.insertBefore( $position );
2399
2400    } else {
2401
2402      if( 0 < awf_data.togglable_preset.insert_btn_before_container.length ) {
2403        $position = $( awf_data.togglable_preset.insert_btn_before_container ).first();
2404      }
2405
2406      if( 0 < $position.length ) {
2407        $togglable_preset_btn.insertBefore( $position );
2408
2409      } else if( 0 < a_w_f.products_wrappers.length ) {
2410        $togglable_preset_btn.prependTo( a_w_f.products_wrappers.first() );
2411
2412        if( 'fixed' === $togglable_preset_btn.css( 'position' ) ) {
2413          $togglable_preset_btn.appendTo( $( 'body' ) );
2414
2415        } else {
2416          if( 'body' === awf_data.products_wrapper ) {
2417            $togglable_preset_btn.insertBefore( $( [awf_data.products_container, awf_data.no_result_container].join( ',' ) ).first() );
2418          }
2419        }
2420      } else {
2421        return;
2422      }
2423    }
2424
2425    if( 'fixed' === $togglable_preset_btn.css( 'position' ) ) {
2426      a_w_f.togglable_preset.removeClass( 'awf-above-products-mode' ).addClass( 'awf-left-popup-sidebar-mode' );
2427    }
2428    
2429    if( a_w_f.togglable_preset.hasClass( 'awf-togglable-preset' ) ) {
2430      $togglable_preset_btn.addClass( 'awf-show-togglable-preset-btn' );
2431    }
2432    
2433    $togglable_preset_btn
2434    .off( 'click' )
2435    .on( 'click', function() {
2436    
2437      if( a_w_f.togglable_preset.hasClass( 'awf-left-popup-sidebar-mode' ) ) {
2438        $( 'body' ).addClass( 'awf-togglable-preset-on' );
2439        
2440        a_w_f.togglable_preset.before( '<div class="awf-togglable-preset-overlay"></div>' );
2441        $( '.awf-togglable-preset-overlay' ).on( 'click', a_w_f.close_togglable_preset );
2442
2443        $( '.awf-togglable-preset-close-btn' ).trigger( 'focus' );
2444        
2445      } else if( a_w_f.togglable_preset.hasClass( 'awf-above-products-mode' ) ) {
2446        $( 'body' ).toggleClass( 'awf-togglable-preset-on' );
2447      }
2448
2449      if( ! a_w_f.togglable_preset.find( '.awf-pretty-scrollbars' ).first().hasClass( 'ps--active-y' ) ) {
2450        $.each( a_w_f.pretty_scrollbars, function( i, ps ) {
2451          if( a_w_f.togglable_preset.has( $( ps.element ) ) ) { ps.update(); }
2452        });
2453      }
2454    
2455    })
2456    .off( 'keydown' )
2457    .on( 'keydown', function( event ) {
2458      if( event.keyCode === 13 || event.keyCode === 32 ) {
2459        event.preventDefault();
2460
2461        $( this ).trigger( 'click' );
2462      }
2463    })
2464  };
2465  
2466  a_w_f.close_togglable_preset = function() {
2467
2468    var $b = $( 'body' );
2469    
2470    if( $b.hasClass( 'awf-togglable-preset-on' ) ) {
2471      $b.removeClass( 'awf-togglable-preset-on' );
2472      $( '.awf-togglable-preset-overlay' ).remove();
2473
2474      if( ! ( 'disable_accessibility_support' in awf_data ) ) {
2475        $( '.awf-togglable-preset-btn' ).trigger( 'focus' );
2476      }
2477    }
2478  };
2479  
2480  a_w_f.toggle_collapsible = function( $filter_title_container ) {
2481
2482    if( 0 === $filter_title_container.length ) { return; }
2483
2484    var $fw = $filter_title_container.closest( '.awf-filter-wrapper' );
2485    $fw.toggleClass( 'awf-collapsed' );
2486
2487    if( $fw.hasClass( 'awf-collapsed' ) ) {
2488      $filter_title_container.attr( 'aria-expanded', 'false' );
2489
2490    } else {
2491      $filter_title_container.attr( 'aria-expanded', 'true' );
2492      $fw.find( '.awf-filters-container :focusable' ).first().trigger( 'focus' );
2493
2494      var $has_ps = $fw.find( '.awf-pretty-scrollbars' ).first();
2495
2496      if( 0 < $has_ps.length ) {
2497        $.each( a_w_f.pretty_scrollbars, function( i, ps ) {
2498          if( ps.element === $has_ps[0] ) {
2499            ps.update();
2500            return false;
2501          }
2502        });
2503      }
2504
2505      if( $fw.hasClass( 'awf-thl' ) ) {
2506        a_w_f.update_thl( $fw );
2507      }
2508    }
2509  };
2510 
2511  a_w_f.build_range_slider = function ( range_container ) {
2512    var $range_container = $( range_container );
2513
2514    var range_values = $range_container.attr( 'data-values' ).split( '--' );
2515    $( range_values ).each( function( i, v ) {
2516      range_values[i] = parseFloat( v );
2517    });
2518
2519    var min = parseFloat( range_values[0] );
2520    var max = parseFloat( range_values[range_values.length-1] );
2521
2522    if( $range_container.hasClass( 'awf-price-range-slider-container' ) ) {
2523      
2524      var min_limit = parseFloat( $range_container.attr( 'data-min-limit' ) );
2525      var max_limit = parseFloat( $range_container.attr( 'data-max-limit' ) );
2526
2527      if( ( min !== min_limit) || ( max !== max_limit) ) {
2528        range_values = range_values.filter( function( value ) {
2529          if( value <= min_limit || value >= max_limit ) { return false; }
2530
2531          return true;
2532        });
2533
2534        range_values.unshift( min_limit );
2535        range_values.push( max_limit );
2536
2537        min = min_limit;
2538        max = max_limit;
2539      }
2540    }
2541
2542    var format = {
2543      decimals: $range_container.attr( 'data-decimals' ),
2544      mark: $range_container.attr( 'data-decimals-separator' ),
2545      thousand: $range_container.attr( 'data-thousand-separator' ),
2546      prefix: $range_container.attr( 'data-prefix' ),
2547      suffix: $range_container.attr( 'data-postfix' ) 
2548    }
2549    
2550    var display_tooltips = false;
2551
2552    if( ( format.mark === format.thousand ) || 'disable_thousand_separator' in awf_data ) {
2553      $range_container.attr( 'data-thousand-separator', '' );
2554      format.thousand = '';
2555    }
2556    
2557    if( 'above_handles' === $range_container.attr( 'data-tooltips' ) ) {
2558      display_tooltips = [ wNumb( format ), wNumb( format ) ];
2559    }
2560    
2561    noUiSlider.create( range_container, {
2562      range: {
2563        'min': [min],
2564        'max': [max]
2565      },
2566      start: [parseFloat( $range_container.find( '.awf-range-slider-min' ).val() ), parseFloat( $range_container.find( '.awf-range-slider-max' ).val() )],
2567      step: parseFloat( $range_container.attr( 'data-step' ) ),
2568      pips: {
2569        mode: 'values',
2570        values: range_values,
2571        density: 5,
2572        format: wNumb( format )
2573      },
2574      connect: true,
2575      tooltips: display_tooltips,
2576      behaviour: 'drag'
2577    });
2578    
2579    range_container.noUiSlider.on( 'change', function( values, handle ) {
2580      a_w_f.range_slider_onchange( range_container, values, min, max );
2581    });
2582    
2583    if( 'premium' in a_w_f ) { a_w_f.set_interactive_slider_tooltips( range_container ); }
2584  };
2585 
2586  a_w_f.get_ajax_history_state = function () {
2587    var history_state = window.history.state;
2588
2589    if( 'object' === typeof( history_state ) && null !== history_state ) {
2590      history_state.awf_ajax_call = true;
2591    } else {
2592      history_state = { awf_ajax_call: true };
2593    }
2594
2595    return history_state;
2596  };
2597  
2598  a_w_f.load_new_history_state = function( url ) {
2599
2600    if( 'undefined' === typeof( url ) ) {
2601
2602      if( 'rewrite_page' in awf_data ) {
2603        $( 'body' ).block( { message: $( '<div class="awf-loader"></div>' ), blockMsgClass: 'blockMsg awf-blockMsg' } );
2604
2605        a_w_f.request_url().then( function( response ) {
2606
2607          if( 'url' in response ) {
2608            a_w_f.load_new_history_state( response.url );
2609
2610          } else {
2611            url = a_w_f.build_url();
2612            a_w_f.load_new_history_state( url );
2613          }
2614        } );
2615
2616      } else {
2617        url = a_w_f.build_url();
2618        a_w_f.load_new_history_state( url );
2619      }
2620
2621    } else {
2622
2623      var history_state = a_w_f.get_ajax_history_state();
2624
2625      window.history.replaceState( history_state, document.title, window.location.href );
2626      window.history.pushState( history_state, '', url );
2627      window.location.reload();
2628    }
2629  };
2630
2631  $( window ).on( 'popstate', function( event ) {
2632    if( ( 'undefined' !== typeof( event.originalEvent.state ) && null !== event.originalEvent.state ) && ( 'awf_ajax_call' in event.originalEvent.state ) ) {
2633      window.location.reload();
2634    }
2635  });
2636  
2637  if( ! ( 'redirect_ajax' in awf_data ) ) {
2638
2639    window.history.replaceState( a_w_f.get_ajax_history_state(), document.title, window.location.href );
2640
2641    $( window ).on( 'beforeunload', function() {
2642      var state = window.history.state;
2643
2644      if( 'object' === typeof( state ) && null !== state ) {
2645        delete state.awf_ajax_call;
2646      }
2647
2648      window.history.replaceState( state, document.title, window.location.href );
2649    });
2650
2651    $( 'body' ).addClass( 'awf-filterable' );
2652    
2653    a_w_f.build_products_wrappers();
2654
2655    a_w_f.page_reload = false;
2656    if( 'no' === awf_data.wrapper_reload ) {
2657      if( a_w_f.products_wrappers.find( awf_data.products_container ).length < a_w_f.products_wrappers.length && 0 < a_w_f.products_wrappers.find( awf_data.no_result_container ).first().length ) {
2658        a_w_f.page_reload = true;
2659      }
2660    }
2661  
2662    a_w_f.update_orderby( false );
2663    a_w_f.setup_togglable_preset();
2664    
2665    if( ( 'title_badges' in awf_data ) || 'yes' === awf_data.wrapper_reload ) {
2666      $( '<div id="awf-title-badges-storage" style="display: none;" class="awf-active-badges-container"></div>' ).insertAfter( a_w_f.products_wrappers );
2667    }
2668
2669    if( 'ajax_pagination' in awf_data ) {
2670      $( '.awf-preset-wrapper.awf-ajax.awf-button' ).find( '.awf-filter, .awf-range-slider-container, .awf-taxonomy-range-slider-container' ).addClass( 'awf-button-filter' );
2671      a_w_f.setup_ajax_pagination( a_w_f.products_wrappers );
2672    }
2673    
2674    $( '.awf-force-reload .awf-filter' ).each( function( i, filter ) {
2675      var $filter = $( filter );
2676      if( 0 === i ) {
2677        if( a_w_f.force_reload ) {
2678          if( ! ( $filter.attr( 'data-taxonomy' ) in a_w_f.force_reload ) ) {
2679            a_w_f.force_reload.push( $filter.attr( 'data-taxonomy' ) );
2680          }
2681        } else {
2682          a_w_f.force_reload = [$filter.attr( 'data-taxonomy' )];
2683        }
2684      }
2685      $filter.on( 'click', function() { a_w_f.page_reload = true; });
2686    });
2687
2688    a_w_f.woocommerce_breadcrumbs = $( '.woocommerce-breadcrumb' );
2689    
2690    if( 'undefined' !== typeof $.blockUI ) {
2691      $.blockUI.defaults.message = '<div class="awf-loader"></div>';
2692      $.blockUI.defaults.overlayCSS = { backgroundColor: '#fff', opacity: 0.5, cursor: 'none' };
2693      $.blockUI.defaults.css = { border: 'none' };
2694    }
2695  }
2696  
2697  $( '.awf-filter' ).each( function( i, filter ) {
2698    a_w_f.set_filter_events( $( filter ) );
2699  });
2700  
2701  $( '.awf-range-slider-container' ).each( function( i, el ) {
2702    var $el = $( el );
2703
2704    if( i === 0 ) { $el.addClass( 'awf-active' );  }
2705    a_w_f.build_range_slider( el );
2706
2707    if( $el.hasClass( 'awf-range-btn' ) ) {
2708      $el.parent().find( '.awf-apply-filter-btn' ).on( 'click', function() {
2709        a_w_f.build_active_badges();
2710      } );
2711    }
2712  });
2713  
2714  $( '.awf-sbs' ).each( function( nn, wrapper ) {
2715    a_w_f.sbs = 'yes';
2716    var $wrapper = $( wrapper );
2717    var apply = true;
2718    var force_redirect = false;
2719    
2720    if( $wrapper.hasClass( 'awf-sbs-submit-last' ) ) { apply = false; }
2721    
2722    if( $wrapper.hasClass( 'awf-button' ) ) {
2723      apply = false;
2724      $wrapper.find( '.awf-apply-filter-btn' ).on( 'click', function() {
2725        if( ( 'redirect_ajax' in awf_data ) || wrapper.hasAttribute( 'data-sbs-redirect' ) ) { $wrapper.addClass( 'awf-sbs-redirect' ); }
2726        a_w_f.apply_filter( 'sbs', $wrapper );
2727      });
2728    } else {
2729      if( ! $wrapper.hasClass( 'awf-sbs-submit-last' ) ) { force_redirect = true; }
2730    }
2731    
2732    if( $wrapper.hasClass( 'awf-sbs-next-btn-on' ) ) {
2733      apply = false;
2734      var redirect_next = force_redirect;
2735      force_redirect = false;
2736      
2737      $wrapper.find( '.awf-sbs-next-btn' ).on( 'click', function() {
2738        if( redirect_next ) { $wrapper.addClass( 'awf-sbs-redirect' ); }
2739        a_w_f.update_sbs( $wrapper, 0, true );
2740      });
2741      
2742    }
2743    
2744    if( $wrapper.hasClass( 'awf-sbs-back-btn-on' ) ) {
2745      $wrapper.find( '.awf-sbs-back-btn' ).on( 'click', function() {
2746        var i = parseInt( $wrapper.find( '.awf-filter-wrapper:not(.awf-hidden)' ).last().attr( 'data-sbs-i' ) ) - 1;
2747        
2748        if( $wrapper.hasClass( 'awf-sbs-next-btn-on' ) ) {
2749          a_w_f.reset_filter( $wrapper.find( '.awf-filter-wrapper.awf-sbs-' + (i + 1) ).attr( 'data-taxonomy' ) );
2750        } else {
2751          a_w_f.reset_filter( $wrapper.find( '.awf-filter-wrapper.awf-sbs-' + i ).attr( 'data-taxonomy' ) );
2752          if( i < 2 ) { i = 0; }
2753        }
2754        
2755        a_w_f.update_sbs( $wrapper, i, apply );
2756      });
2757    }
2758    
2759    $wrapper.find( '.awf-filter[type="checkbox"], .awf-filter[type="radio"]' ).on( 'click', function() {
2760      if( force_redirect ) { $wrapper.addClass( 'awf-sbs-redirect' ); }
2761      a_w_f.update_sbs( $wrapper, $( this ).closest( '.awf-filter-wrapper' ).first().attr( 'data-sbs-i' ), apply );
2762    });
2763    $wrapper.find( '.awf-filter[type="search"]' ).on( 'change', function() {
2764      if( force_redirect ) { $wrapper.addClass( 'awf-sbs-redirect' ); }
2765      a_w_f.update_sbs( $wrapper, $( this ).closest( '.awf-filter-wrapper' ).first().attr( 'data-sbs-i' ), apply );
2766    });
2767    $wrapper.find( '.awf-range-slider-container' ).each( function( i, range ) {
2768      $( range ).attr( 'data-force-sbs-redirect', ( force_redirect ? '1' : '0' ) ).attr( 'data-apply-sbs', ( apply ? '1' : '0' ) ).closest( '.awf-filter-wrapper' ).first().addClass( 'awf-sbs-range-slider' );
2769    });
2770    $wrapper.find( '.awf-taxonomy-range-slider-container' ).each( function( i, slider ) {
2771      $( slider ).attr( 'data-force-sbs-redirect', ( force_redirect ? '1' : '0' ) ).attr( 'data-apply-sbs', ( apply ? '1' : '0' ) );
2772    });
2773    $wrapper.find( '.awf-daterangepicker' ).each( function( i, daterangepicker ) {
2774      $( daterangepicker ).on( 'apply.daterangepicker cancel.daterangepicker', function() {
2775        if( force_redirect ) { $wrapper.addClass( 'awf-sbs-redirect' ); }
2776        a_w_f.update_sbs( $wrapper, $( daterangepicker ).closest( '.awf-filter-wrapper' ).first().attr( 'data-sbs-i' ), apply );
2777      });
2778    });
2779    
2780    a_w_f.update_sbs( $wrapper, 0, false );
2781  });
2782  
2783  $( document ).on( 'click', '.awf-url label', function() {
2784    if( $( this ).siblings( 'input' ).first().is( ':disabled' ) ) { return; }
2785    
2786    $( this ).siblings( 'input' ).prop( 'checked', true );    
2787  });
2788  
2789  $( document ).on( 'click', '.awf-apply-filter-btn', function() {
2790    a_w_f.apply_filter( true, $( this ).closest( '.awf-preset-wrapper' ) );
2791  });
2792  
2793  $( document ).on( 'submit', '.awf-filters-form', function() {
2794    a_w_f.update_url();
2795    
2796    $( this ).find( '.awf-filter' ).each( function( i, filter ) {
2797      var name = $( filter ).attr( 'name' );
2798      
2799      var brackets_pos = name.lastIndexOf( '[]' );
2800      if( -1 < brackets_pos ) { name = name.substr( 0, brackets_pos ); }
2801      
2802      if( ! ( name in awf_data.query ) ) {
2803        $( filter ).attr( 'disabled', 'disabled' ); }
2804    });
2805  });
2806  
2807  $( document ).on( 'click', '.awf-collapsible .awf-filter-title-container', function() { a_w_f.toggle_collapsible( $( this ) ); });
2808
2809  a_w_f.cc_filters = $( '.awf-collapsible-children' );
2810
2811  if( 0 < a_w_f.cc_filters.length ) {
2812
2813    a_w_f.cc_filters.each( function( i, filter ) {
2814      var $fsc = $( filter );
2815
2816      $fsc.children( 'ul').first().on( 'click', '.awf-parent-container:not(.awf-hide-collapse-button)', function( event ) {
2817        
2818        if( ( 'target' in event ) && ! $( event.target ).hasClass( 'awf-filter-container' ) ) { return; }
2819
2820        var $filter_container = $( this );
2821        var $filter_wrapper = $filter_container.closest( '.awf-filter-wrapper' );
2822        $filter_container.toggleClass( 'awf-collapsed-on' );
2823        $filter_container.next( '.awf-children-container' ).toggleClass( 'awf-collapsed' );
2824
2825        if( $filter_container.hasClass( 'awf-collapsed-on' ) ) {
2826          $filter_container.attr( 'aria-expanded', 'false' );
2827        } else {
2828          $filter_container.attr( 'aria-expanded', 'true' );
2829        }
2830
2831        $filter_container.find( 'label' ).first().trigger( 'focus' ); // Talkback fix
2832
2833        var $a_filter = $filter_container.find( '.awf-filter' ).first();
2834        if( $a_filter.length > 0 ) {
2835          $.each( a_w_f.pretty_scrollbars, function( i, ps ) {
2836            if( 0 < $( ps.element ).closest( '.awf-filter-wrapper' ).is( '[data-taxonomy="' + $a_filter.attr( 'data-taxonomy' ) + '"]' ) ) {
2837              ps.update();
2838            }
2839          });
2840
2841          if( $filter_wrapper.hasClass( 'awf-thl' ) ) {
2842            a_w_f.update_thl( $filter_wrapper );
2843          }
2844        }
2845      });
2846
2847      if( ( 'premium' in a_w_f ) && 0 < $fsc.find( '.awf-empty-hidden').first().length ) {
2848        a_w_f.adjust_cc_filters( $fsc );
2849
2850        $( document ).on( 'awf_after_counts_update', function() {
2851          a_w_f.adjust_cc_filters( $fsc );
2852        } );
2853      }
2854    } );
2855  }
2856
2857  a_w_f.preset_wrappers.find( '.awf-terms-search' ).each( function() {
2858    var $ts = $( this );
2859
2860    $ts.on( 'input', function() {
2861      awf_search_filter_terms( $( this ) );
2862    });
2863
2864    $ts.siblings( '.awf-clear-terms-search-btn' ).on( 'click', function() {
2865      awf_search_filter_terms( $( this ).siblings( '.awf-terms-search' ).val( '' ).trigger( 'focus' ) );
2866    });
2867  });
2868  
2869  awf_register_reset_btns();
2870  a_w_f.build_active_badges();
2871
2872  $( '.awf-block-deselection-container .awf-filter-container' ).addClass( 'awf-block-deselection' ).each( function() {
2873    var taxonomy = '';
2874    
2875    $( this ).find( '.awf-filter' ).each( function() {
2876      taxonomy = $( this ).attr( 'data-taxonomy' );
2877  
2878      $( this ).on( 'click', function() {
2879        if( taxonomy in awf_data.query && -1 === awf_data.query[taxonomy].toString().indexOf( ',' ) ) {
2880          $( '.awf-filter[data-taxonomy="' + taxonomy + '"][value="' + awf_data.query[taxonomy] + '"]' ).closest( '.awf-filter-container' ).addClass( 'awf-is-last-active' );
2881          $( '.awf-active-badge[data-taxonomy="' + taxonomy + '"]' ).addClass( 'awf-is-last-active' );
2882        } else {
2883          $( '.awf-filter-wrapper[data-taxonomy="' + taxonomy + '"] .awf-filter-container' ).removeClass( 'awf-is-last-active' );
2884          $( '.awf-active-badge[data-taxonomy="' + taxonomy + '"]' ).removeClass( 'awf-is-last-active' );
2885        }
2886      } );
2887    });
2888
2889    if( taxonomy in awf_data.query && -1 === awf_data.query[taxonomy].toString().indexOf( ',' ) ) {
2890      $( '.awf-filter[data-taxonomy="' + taxonomy + '"][value="' + awf_data.query[taxonomy] + '"]' ).closest( '.awf-filter-container' ).addClass( 'awf-is-last-active' );
2891      $( '.awf-active-badge[data-taxonomy="' + taxonomy + '"]' ).addClass( 'awf-is-last-active' );  
2892    }
2893
2894  } );
2895  
2896  if( 0 < $( '.awf-product-categories' ).length ) {
2897    $( document ).on( 'awf_after_ajax_products_update', function( event, $response ) {
2898      var $categories_list = $response.find( '.awf-product-categories' ).first();
2899      if( 0 < $categories_list.length ) {
2900        $( '.awf-product-categories' ).replaceWith( $categories_list );
2901      } else {
2902        $( '.awf-product-categories' ).html( '' );
2903      }
2904    } );
2905  }
2906
2907  a_w_f.accessibility_alert = function( text ) {
2908
2909    if( 'disable_accessibility_support' in awf_data ) { return; }
2910
2911    setTimeout( function() {
2912      $( '#awf-accessibility-alert' ).css( 'display', 'block' ).attr( 'role', 'alert' ).attr( 'aria-live', 'assertive' ).text( text );
2913      setTimeout( function() {
2914        $( '#awf-accessibility-alert' ).css( 'display', 'none' ).attr( 'role', '' ).attr( 'aria-live', '' );
2915      }, 2000);
2916    }, 500);
2917
2918  }
2919  
2920  if( ! ( 'disable_accessibility_support' in awf_data ) ) {
2921
2922    $( document ).on( 'keydown', '.awf-active-badge', function( event ) {
2923      if( event.keyCode === 13 || event.keyCode === 32 ) {
2924        event.preventDefault();
2925        this.click();
2926      }
2927    });
2928
2929    $( document ).on( 'focusout', '.awf-extra-badges, .awf-extra-reset-btn-container', function( e ) {
2930      delete a_w_f.blockui_focus_backup;
2931    } );
2932
2933    $( document ).on( 'awf_after_ajax_products_update', function( event, $response ) {
2934
2935      if( 'ajax_pagination_end_reached' in awf_data ) { return; }
2936
2937      if( 'blockui_focus_backup' in a_w_f ) {
2938        if( a_w_f.blockui_focus_backup.is( ':focusable' ) ) {
2939          a_w_f.blockui_focus_backup.trigger( 'focus' );
2940
2941        } else {
2942          var $bfb = a_w_f.blockui_focus_backup.find( ':focusable' ).first();
2943
2944          if( 1 === $bfb.length ) {
2945            $bfb.trigger( 'focus' );
2946          } else {
2947            $bfb = a_w_f.blockui_focus_backup.closest( '.awf-filter-wrapper' ).find( ':focusable' ).first();
2948            if( 1 === $bfb.length ) {
2949              $bfb.trigger( 'focus' );
2950            } else {
2951                $( awf_data.products_container ).find( ':focusable' ).first().trigger( 'focus' ).trigger( 'blur' );
2952            }
2953          }
2954        }
2955
2956        delete a_w_f.blockui_focus_backup;
2957
2958      } else {
2959          $( awf_data.products_container ).find( ':focusable' ).first().trigger( 'focus' ).trigger( 'blur' );
2960      }
2961
2962      var alert = $( '.woocommerce-result-count' ).first().text();
2963
2964      if( 0 < alert.length ) {
2965        a_w_f.accessibility_alert( alert );
2966      } else {
2967        alert = $( awf_data.no_result_container ).first().text();
2968        if( 0 < alert.length ) {
2969          a_w_f.accessibility_alert( alert );
2970        } 
2971      }
2972
2973    } );
2974
2975    a_w_f.preset_wrappers.each( function() {
2976      var $pw = $( this );
2977     
2978      $pw.on( 'focusout', function( e ) {
2979        if( 0 === $pw.has( $( e.relatedTarget ) ).length ) {
2980          if( $pw.hasClass( 'awf-togglable-preset' ) && awf_data.togglable_preset.close_preset_on_ajax_update ) {
2981            a_w_f.blockui_focus_backup = $( '.awf-togglable-preset-btn' );
2982
2983          } else {
2984            a_w_f.blockui_focus_backup = $( e.target );
2985
2986            if( a_w_f.blockui_focus_backup.hasClass( 'awf-reset-active-container' ) ) {
2987              a_w_f.blockui_focus_backup = a_w_f.blockui_focus_backup.closest( '.awf-filter-wrapper' ).first();
2988            } else if( a_w_f.blockui_focus_backup.hasClass( 'awf-reset-btn' ) ) {
2989              a_w_f.blockui_focus_backup = a_w_f.blockui_focus_backup.closest( '.awf-preset-wrapper' ).first()
2990            } else if( a_w_f.blockui_focus_backup.hasClass( 'awf-active-badge' ) ) {
2991                a_w_f.blockui_focus_backup = a_w_f.blockui_focus_backup.closest( '.awf-filter-wrapper, .awf-preset-wrapper' ).first();
2992            }
2993          }
2994        }
2995      } );
2996    
2997      $pw.find( '.awf-filter-wrapper' ).each( function() {
2998        var $fw = $( this );
2999        var fw_is;
3000        var $cont;
3001
3002        if( $fw.hasClass( 'awf-date' ) ) {
3003          fw_is = 'date';
3004        } else if( 0 < $fw.find( '.awf-product-search' ).first().length ) {
3005          $cont = $fw.find( '.awf-search-autocomplete' ).first();
3006          if( 0 < $cont.length ) {
3007            fw_is = 'search_ac';
3008          } else {
3009            fw_is = 'search';
3010          }
3011        } else if( $fw.hasClass( 'awf-range' ) && 0 < $fw.find( '.awf-style-range-slider' ).first().length ) {
3012          fw_is = 'slider';
3013        } else {
3014          fw_is = 'list';
3015          $cont = $fw.find( '.awf-filters-container' ).first();
3016          
3017          $( document ).on( 'awf_after_setup', function() {
3018            $fw.children( '.awf-pretty-scrollbars' ).find( '.ps__thumb-y' ).attr( 'tabindex', '' );
3019          } );
3020        }
3021                
3022        $fw.on( 'keydown', function( e ) {
3023
3024          switch( e.keyCode ) {
3025            case 40:
3026              e.preventDefault();
3027
3028              var $active = $( e.target );
3029
3030              if( 'search_ac' === fw_is && $cont.has( $active ) ) {
3031                if( $active.is( 'a' ) ) {
3032                  var f = false;
3033
3034                  $cont.find( 'a' ).each( function( i, a ) {
3035                    if( f ) {
3036                      $( a ).trigger( 'focus' );
3037                      return false;
3038                    } else {
3039                      if( $active.is( $( a ) ) ) { f = true; }
3040                    }
3041                  });
3042                } else {
3043                  $cont.find( 'a' ).first().trigger( 'focus' );
3044                }
3045
3046              } else if( 'list' === fw_is ) {
3047                if( ! $active.is( 'label' ) ) {
3048                  $active = $active.find( 'label:focusable' ).first();
3049                }
3050    
3051                if( 0 === $active.length ) {
3052                  $active = $fw.find( 'label:focusable' ).first();
3053    
3054                } else {
3055                  var f = false;
3056
3057                  $fw.find( 'label:focusable' ).each( function( i, label ) {
3058                    if( f ) {
3059                      $active = $( label );
3060                      return false;
3061                    } else {
3062                      if( $active.is( $( label ) ) ) { f = true; }
3063                    }
3064                  });                  
3065                }
3066    
3067                $active.trigger( 'focus' );
3068              }
3069  
3070              break;
3071            case 38:            
3072              e.preventDefault();
3073              var $active = $( e.target );
3074
3075              if( 'search_ac' === fw_is && $cont.has( $active ) ) {
3076                if( $active.is( 'a' ) ) {
3077                  var all = $cont.find( 'a' ).get().reverse();
3078                  var f = false;
3079
3080                  $( all ).each( function( i, a ) {
3081                    if( f ) {
3082                      $( a ).trigger( 'focus' );
3083                      return false;
3084                    } else {
3085                      if( $active.is( $( a ) ) ) { f = true; }
3086                    }
3087                  });
3088                } else {
3089                  $cont.find( 'a' ).last().trigger( 'focus' );
3090                }
3091
3092              } else if( 'list' === fw_is ) {
3093
3094                if( ! $active.is( 'label' ) ) {
3095                  $active = $active.find( 'label:focusable' ).first();
3096                }
3097    
3098                if( 0 === $active.length ) {
3099                  $active = $fw.find( 'label:focusable' ).last();
3100    
3101                } else {
3102                  var $all = $fw.find( 'label:focusable' ).get().reverse();
3103                  var f = false;
3104
3105                  $( $all ).each( function( i, label ) {
3106                    if( f ) {
3107                      $active = $( label );
3108                      return false;
3109                    } else {
3110                      if( $active.is( $( label ) ) ) { f = true; }
3111                    }
3112                  });
3113                }
3114    
3115                $active.trigger( 'focus' );                
3116              }
3117  
3118              break;
3119            case 39:
3120              e.preventDefault();
3121              var $active = $( e.target ).closest( '.awf-parent-container.awf-collapsed-on' );
3122
3123              if( 1 === $active.length ) {
3124                $active.trigger( 'click' );
3125              }
3126  
3127              break;
3128            case 37:
3129              e.preventDefault();
3130              var $active = $( e.target ).closest( '.awf-filter-container:not(.awf-collapsed-on)' );
3131
3132              if( 1 === $active.length ) {
3133                $active.trigger( 'click' );
3134              }
3135  
3136              break;
3137            case 27:
3138              var $active = $( e.target );
3139  
3140              if( ! $active.hasClass( 'awf-dropdown' ) ) {
3141                $active = $active.closest( '.awf-dropdown' );
3142              }
3143  
3144              if( 0 < $active.length && ! $active.hasClass( 'awf-collapsed' ) ) {
3145                $active.find( '.awf-filter-title-container').trigger( 'focus' ).trigger( 'click' );
3146              }
3147  
3148              break;
3149
3150            case 9:
3151              if( 'list' === fw_is ) {
3152
3153                if( ! e.shiftKey ) {
3154                  var $active = $( e.target );
3155
3156                  if( $active.hasClass( 'awf-terms-search' ) ) {
3157                    e.preventDefault();
3158                    $( e.target ).siblings( '.awf-clear-terms-search-btn' ).trigger( 'focus' );
3159
3160                  } else if( $active.hasClass( 'awf-clear-terms-search-btn' ) ) {
3161                    e.preventDefault();
3162                    $active.closest( '.awf-filters-container' ).find( 'label:focusable' ).first().trigger( 'focus' );
3163                  }
3164                }
3165              }
3166
3167              break;
3168  
3169            defaut: break;
3170          }
3171        } );
3172
3173        $fw.find( '.awf-filters-container > ul' ).first()
3174          .on( 'focusin', function( e ) {
3175            if( 0 === $( this ).has( $( e.relatedTarget ) ).length ) {
3176              var $ul = $( this );
3177
3178              if( 'list' === fw_is ) {
3179                $ul.find( 'label' ).attr( 'tabindex', '-1');
3180
3181                if( ! $( e.target ).is( 'label:focusable' ) && ! $( e.target ).is( '.awf-terms-search' ) ) {
3182                  $ul.find( 'label:focusable' ).first().trigger( 'focus' );
3183                }
3184              }
3185            }
3186          } )
3187          .on( 'focusout', function( e ) {
3188            if( 0 === $( this ).has( $( e.relatedTarget ) ).length ) {
3189              var $fsc = $( this );
3190
3191              if( 'list' === fw_is ) {
3192                $fsc.find( 'label[tabindex="-1"]' ).attr( 'tabindex', '0' );
3193              }
3194            }
3195          } )
3196        ;
3197          
3198        if( $pw.hasClass( 'awf-url' ) ) {
3199          $fw.on( 'keydown', 'label', function( event ) {
3200            if( event.keyCode === 13 || event.keyCode === 32 ) {
3201              event.preventDefault();
3202              event.stopPropagation();
3203
3204              $( this ).siblings( '.awf-filter' ).first().trigger( 'click' );
3205            }
3206          });
3207
3208        } else {
3209          $fw.on( 'keydown', 'label', function( event ) {
3210            if( event.keyCode === 13 || event.keyCode === 32 ) {
3211              event.preventDefault();
3212              event.stopPropagation();
3213
3214              $( this ).siblings( '.awf-filter' ).first().trigger( 'click' );
3215            }
3216          });
3217        }
3218
3219      });
3220  
3221      var $parent_cs = $pw.find( '.awf-collapsible-children .awf-filter-container.awf-parent-container:not(.awf-hide-collapse-button)' ).attr( 'role', 'button' ).attr( 'aria-label', awf_data.i18n.cc_button_label ).attr( 'tabindex', '-1' ).attr( 'aria-expanded', 'false' );
3222      $parent_cs.not( '.awf-collapsed' ).attr( 'aria-expanded', 'true' );
3223  
3224      $pw.on( 'keydown', '.awf-filter-title-container, .awf-reset-btn, .awf-reset-active-container, .awf-togglable-preset-close-btn, .awf-thl-more-btn, .awf-thl-less-btn, .awf-apply-filter-btn, .awf-submit-btn', function( event ) {
3225        if( event.keyCode === 13 || event.keyCode === 32 ) {
3226          event.preventDefault();
3227          this.click();
3228        }
3229      });
3230    });
3231  
3232    $( '.awf-product-search-autocomplete-container' ).on( 'keydown', 'a', function( e ) {
3233      if( e.keyCode === 13 || e.keyCode === 32 ) {
3234        e.preventDefault();
3235        this.click();
3236      }
3237    });
3238  }
3239    
3240  if( 'undefined' !== typeof PerfectScrollbar ) {
3241    $( '.awf-pretty-scrollbars' ).each( function( i, container ) {
3242      var ps = new PerfectScrollbar( container, { suppressScrollX: true, suppressScrollY: false, wheelPropagation: true } );
3243      a_w_f.pretty_scrollbars.push( ps );
3244    });
3245  }
3246
3247  a_w_f.resize_cid = 0;
3248
3249  a_w_f.preset_wrappers.each( function() {
3250    var $ss_layouts = $( this ).find( '.awf-ss-layout' );
3251
3252    if( 0 < $ss_layouts.length ) {
3253
3254      var rw = this.getAttribute( 'data-responsive-width' );
3255
3256      $ss_layouts.each( function() {
3257        var $ssl = $( this );
3258
3259        if( window.innerWidth <= rw ) {
3260          $ssl.removeClass( $ssl.attr( 'data-layout' ) ).addClass( $ssl.attr( 'data-ss-layout' ) );
3261        } else {
3262          $ssl.removeClass( $ssl.attr( 'data-ss-layout' ) ).addClass( $ssl.attr( 'data-layout' ) );
3263        }    
3264      });
3265
3266      var debounce_resize = null;
3267
3268      $( window ).resize( function() {
3269        var cid = a_w_f.resize_cid = ++a_w_f.resize_cid;
3270        clearTimeout( debounce_resize );
3271
3272        debounce_resize = setTimeout( function() {
3273          if( cid === a_w_f.resize_cid ) {
3274            $ss_layouts.each( function() {
3275              var $ssl = $( this );
3276              if( window.innerWidth <= rw ) {
3277                $ssl.removeClass( $ssl.attr( 'data-layout' ) ).addClass( $ssl.attr( 'data-ss-layout' ) );
3278              } else {
3279                $ssl.removeClass( $ssl.attr( 'data-ss-layout' ) ).addClass( $ssl.attr( 'data-layout' ) );
3280              }    
3281            });
3282          }
3283        }, 200);
3284      } );
3285    }
3286  });
3287
3288  $( document ).trigger( 'awf_after_setup' );
3289  
3290  function awf_search_filter_terms( $input ) {
3291
3292    var $filter_containers = $input.closest( '.awf-filters-container' ).find( '.awf-filter-container' ).removeClass( 'awf-hidden' ).filter( ':visible' );
3293    var search = $input.val().toLowerCase();
3294    
3295    if ( 0 < search.length ) {
3296      for( var i = ( $filter_containers.length - 1 ); i >= 0; i-- ) {
3297        var $row = $( $filter_containers[i] );
3298        var $label = $row.find( ' > label, > a > label' ).first();
3299        var label = $label.clone().children().remove().end().text();
3300        
3301        if( 0 >= label.length ) {
3302          label = $label.attr( 'data-badge-label' );
3303          if( typeof( label ) === 'undefined' ) { label = ''; }
3304        }
3305        
3306        if( label.toLowerCase().indexOf( search ) === -1 ) { $row.addClass( 'awf-hidden' ); }
3307      }
3308    }
3309  }
3310  
3311  function awf_register_reset_btns() {
3312    $( document ).on( 'click', '.awf-reset-btn', function() {
3313      var $reset_btn = $( this );
3314      var $preset_wrapper;
3315
3316      if( $reset_btn.hasClass( 'awf-extra-reset-btn' ) ) {
3317        $preset_wrapper = a_w_f.preset_wrappers.filter( '.awf-ajax' ).first();
3318        if( 0 === $preset_wrapper.length ) { $preset_wrapper = a_w_f.preset_wrappers.first(); }
3319
3320      } else {
3321        $preset_wrapper = $reset_btn.closest( '.awf-preset-wrapper' );
3322      }
3323      
3324      a_w_f.reset_all_filters( [] );
3325      a_w_f.apply_filters_reset( $preset_wrapper );
3326    });
3327  }
3328});

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.