File "front.js"

Full Path: /home/vantageo/public_html/cache/.wp-cli/wp-content/plugins/woocommerce-products-filter/js/front.js
File size: 59.13 KB
MIME-type: text/plain
Charset: utf-8

"use strict";
var woof_redirect = '';//if we use redirect attribute in shortcode [woof]
var woof_reset_btn_action = false;

jQuery(function () {
    try
    {
        woof_current_values = JSON.parse(woof_current_values);
    } catch (e)
    {
        woof_current_values = null;
    }
    if (woof_current_values == null || woof_current_values.length == 0) {
        woof_current_values = {};
    }

});

//***
if (typeof woof_lang_custom == 'undefined') {
    var woof_lang_custom = {};/*!!important*/
}
if (typeof woof_ext_filter_titles != 'undefined') {
    woof_lang_custom = Object.assign({}, woof_lang_custom, woof_ext_filter_titles);
}

jQuery(function ($) {
    jQuery('body').append('<div id="woof_html_buffer" class="woof_info_popup" style="display: none;"></div>');
//http://stackoverflow.com/questions/2389540/jquery-hasparent
    jQuery.extend(jQuery.fn, {
        within: function (pSelector) {
            // Returns a subset of items using jQuery.filter
            return this.filter(function () {
                // Return truthy/falsey based on presence in parent
                return jQuery(this).closest(pSelector).length;
            });
        }
    });

    //+++

    if (jQuery('#woof_results_by_ajax').length > 0) {
        woof_is_ajax = 1;
    }

    //listening attributes in shortcode [woof]
    woof_autosubmit = parseInt(jQuery('.woof').eq(0).data('autosubmit'), 10);
    woof_ajax_redraw = parseInt(jQuery('.woof').eq(0).data('ajax-redraw'), 10);



    //+++

    woof_ext_init_functions = JSON.parse(woof_ext_init_functions);

    //fix for native woo price range
    woof_init_native_woo_price_filter();


    jQuery('body').on('price_slider_change', function (event, min, max) {

        if (woof_autosubmit && !woof_show_price_search_button && jQuery('.price_slider_wrapper').length < 3) {

            jQuery('.woof .widget_price_filter form').trigger('submit');

        } else {
            var min_price = jQuery(this).find('.price_slider_amount #min_price').val();
            var max_price = jQuery(this).find('.price_slider_amount #max_price').val();
            woof_current_values.min_price = min_price;
            woof_current_values.max_price = max_price;
        }
    });

    jQuery('body').on('change', '.woof_price_filter_dropdown', function () {
        var val = jQuery(this).val();
        if (parseInt(val, 10) == -1) {
            delete woof_current_values.min_price;
            delete woof_current_values.max_price;
        } else {
            var val = val.split("-");
            woof_current_values.min_price = val[0];
            woof_current_values.max_price = val[1];
        }

        if (woof_autosubmit || jQuery(this).within('.woof').length == 0) {
            woof_submit_link(woof_get_submit_link());
        }
    });

    //change value in textinput price filter if WOOCS is installed
    woof_recount_text_price_filter();
    //+++
    jQuery('body').on('change', '.woof_price_filter_txt', function () {

        var from = parseInt(jQuery(this).parent().find('.woof_price_filter_txt_from').val(), 10);
        var to = parseInt(jQuery(this).parent().find('.woof_price_filter_txt_to').val(), 10);

        if (to < from || from < 0) {
            delete woof_current_values.min_price;
            delete woof_current_values.max_price;
        } else {
            if (typeof woocs_current_currency !== 'undefined') {
                from = Math.ceil(from / parseFloat(woocs_current_currency.rate));
                to = Math.ceil(to / parseFloat(woocs_current_currency.rate));
            }

            woof_current_values.min_price = from;
            woof_current_values.max_price = to;
        }

        if (woof_autosubmit || jQuery(this).within('.woof').length == 0) {
            woof_submit_link(woof_get_submit_link());
        }
    });


    //***

    jQuery('body').on('click', '.woof_open_hidden_li_btn', function () {
        var state = jQuery(this).data('state');
        var type = jQuery(this).data('type');

        if (state == 'closed') {
            jQuery(this).parents('.woof_list').find('.woof_hidden_term').addClass('woof_hidden_term2');
            jQuery(this).parents('.woof_list').find('.woof_hidden_term').removeClass('woof_hidden_term');
            if (type == 'image') {
                jQuery(this).find('img').attr('src', jQuery(this).data('opened'));
            } else {
                jQuery(this).html(jQuery(this).data('opened'));
            }

            jQuery(this).data('state', 'opened');
        } else {
            jQuery(this).parents('.woof_list').find('.woof_hidden_term2').addClass('woof_hidden_term');
            jQuery(this).parents('.woof_list').find('.woof_hidden_term2').removeClass('woof_hidden_term2');

            if (type == 'image') {
                jQuery(this).find('img').attr('src', jQuery(this).data('closed'));
            } else {
                jQuery(this).text(jQuery(this).data('closed'));
            }

            jQuery(this).data('state', 'closed');
        }


        return false;
    });
    //open hidden block
    woof_open_hidden_li();

    //*** woocommerce native "AVERAGE RATING" widget synchronizing
    jQuery('.widget_rating_filter li.wc-layered-nav-rating a').on('click', function () {
        var is_chosen = jQuery(this).parent().hasClass('chosen');
        var parsed_url = woof_parse_url(jQuery(this).attr('href'));
        var rate = 0;
        if (parsed_url.query !== undefined) {
            if (parsed_url.query.indexOf('min_rating') !== -1) {
                var arrayOfStrings = parsed_url.query.split('min_rating=');
                rate = parseInt(arrayOfStrings[1], 10);
            }
        }
        jQuery(this).parents('ul').find('li').removeClass('chosen');
        if (is_chosen) {
            delete woof_current_values.min_rating;
        } else {
            woof_current_values.min_rating = rate;
            jQuery(this).parent().addClass('chosen');
        }

        woof_submit_link(woof_get_submit_link());

        return false;
    });

    //WOOF start filtering button action
    jQuery('body').on('click', '.woof_start_filtering_btn', function () {

        var shortcode = jQuery(this).parents('.woof').data('shortcode');
        jQuery(this).html(woof_lang_loading);
        jQuery(this).addClass('woof_start_filtering_btn2');
        jQuery(this).removeClass('woof_start_filtering_btn');
        //redrawing [woof ajax_redraw=1] only
        var data = {
            action: "woof_draw_products",
            page: 1,
            shortcode: 'woof_nothing', //we do not need get any products, seacrh form data only
            woof_shortcode: shortcode
        };

        jQuery.post(woof_ajaxurl, data, function (content) {
            content = JSON.parse(content);
            jQuery('div.woof_redraw_zone').replaceWith(jQuery(content.form).find('.woof_redraw_zone'));
            woof_mass_reinit();
            woof_init_tooltip();
        });


        return false;
    });

    //***

    window.addEventListener("pageshow", function (event) {
        var woof_check_history = event.persisted ||
                (typeof window.performance != "undefined" &&
                        window.performance.navigation.type === 2);
        if (woof_check_history) {
            woof_hide_info_popup();
            woof_submit_link_locked = false;
        }
    });

    var str = window.location.href;
    window.onpopstate = function (event) {

        try {
            if (Object.keys(woof_current_values).length) {

                var temp = str.split('?');
                var get1 = "";
                if (temp[1] != undefined) {
                    get1 = temp[1].split('#');
                }
                var str2 = window.location.href;
                var temp2 = str2.split('?');
                if (temp2[1] == undefined) {
                    //return false;
                    var get2 = {0: "", 1: ""};

                } else {
                    var get2 = temp2[1].split('#');
                }

                if (get2[0] != get1[0]) {

                    woof_show_info_popup(woof_lang_loading);
                    window.location.reload();
                }
                return false;
            }
        } catch (e) {
            console.log(e);
        }
    };
    //***

    //ion-slider price range slider
    woof_init_ion_sliders();

    //***

    woof_init_show_auto_form();
    woof_init_hide_auto_form();

    //***
    woof_remove_empty_elements();

    woof_init_search_form();
    woof_init_pagination();
    woof_init_orderby();
    woof_init_reset_button();
    woof_init_beauty_scroll();
    //+++
    woof_draw_products_top_panel();
    woof_shortcode_observer();

    //tooltip  
    woof_init_tooltip();

    //mobile filter
    woof_init_mobile_filter();


//+++
    //if we use redirect attribute in shortcode [woof is_ajax=0]
    //not for ajax, for redirect mode only
    if (!woof_is_ajax) {
        woof_redirect_init();
    }

    woof_init_toggles();

});

//if we use redirect attribute in shortcode [woof is_ajax=0]
//not for ajax, for redirect mode only
function woof_redirect_init() {

    try {
        if (jQuery('.woof').length) {
            //https://wordpress.org/support/topic/javascript-error-in-frontjs?replies=1
            if (undefined !== jQuery('.woof').val()) {
                woof_redirect = jQuery('.woof').eq(0).data('redirect');//default value
                if (woof_redirect.length > 0) {
                    woof_shop_page = woof_current_page_link = woof_redirect;
                }
                return woof_redirect;
            }
        }
    } catch (e) {
        console.log(e);
    }

}

function woof_init_orderby() {
    jQuery('body').on('submit', 'form.woocommerce-ordering', function () {
        /* woo3.3 */
        if (!jQuery("#is_woo_shortcode").length) {
            return false;
        }
        /* +++ */
    });
    jQuery('body').on('change', 'form.woocommerce-ordering select.orderby', function () {
        /* woo3.3 */
        if (!jQuery("#is_woo_shortcode").length) {
            woof_current_values.orderby = jQuery(this).val();
            woof_ajax_page_num = 1;
            woof_submit_link(woof_get_submit_link(), 0);
            return false;
        }
        /* +++ */
    });
}

function woof_init_reset_button() {

    jQuery('body').on('click', '.woof_reset_search_form', function () {
        //var link = jQuery(this).data('link');
        woof_ajax_page_num = 1;
        woof_ajax_redraw = 0;
        woof_reset_btn_action = true;
        if (woof_is_permalink) {
            woof_current_values = {};
            woof_submit_link(woof_get_submit_link().split("page/")[0]);

        } else {
            var link = woof_shop_page;
            if (woof_current_values.hasOwnProperty('page_id')) {
                link = location.protocol + '//' + location.host + "/?page_id=" + woof_current_values.page_id;
                woof_current_values = {'page_id': woof_current_values.page_id};
                woof_get_submit_link();
            }
            //***
            woof_submit_link(link);
            if (woof_is_ajax) {
                history.pushState({}, "", link);
                if (woof_current_values.hasOwnProperty('page_id')) {
                    woof_current_values = {'page_id': woof_current_values.page_id};
                } else {
                    woof_current_values = {};
                }
            }
        }
        return false;
    });
}

function woof_init_pagination() {

    if (woof_is_ajax === 1) {
        //jQuery('.woocommerce-pagination ul.page-numbers a.page-numbers').life('click', function () {
        jQuery('body').on('click', '.woocommerce-pagination a.page-numbers', function () {
            var l = jQuery(this).attr('href');

            if (woof_ajax_first_done) {
                //wp-admin/admin-ajax.php?paged=2
                var res = l.split("paged=");
                if (typeof res[1] !== 'undefined') {
                    woof_ajax_page_num = parseInt(res[1]);
                } else {
                    woof_ajax_page_num = 1;
                }
                var res2 = l.split("product-page=");
                if (typeof res2[1] !== 'undefined') {
                    woof_ajax_page_num = parseInt(res2[1]);
                }
            } else {
                var res = l.split("page/");
                if (typeof res[1] !== 'undefined') {
                    woof_ajax_page_num = parseInt(res[1]);
                } else {
                    woof_ajax_page_num = 1;
                }
                var res2 = l.split("product-page=");
                if (typeof res2[1] !== 'undefined') {
                    woof_ajax_page_num = parseInt(res2[1]);
                }
            }

            //+++


            {
                woof_submit_link(woof_get_submit_link(), 0);
            }

            return false;
        });
    }
}

function woof_init_search_form() {
    woof_init_checkboxes();
    woof_init_mselects();
    woof_init_radios();
    woof_price_filter_radio_init();
    woof_init_selects();


    //for extensions
    if (woof_ext_init_functions !== null) {
        jQuery.each(woof_ext_init_functions, function (type, func) {
            eval(func + '()');
        });
    }

    //+++
    jQuery('.woof_submit_search_form').on('click', function () {

        if (woof_ajax_redraw) {
            //[woof redirect="http://test-all/" autosubmit=1 ajax_redraw=1 is_ajax=1 tax_only="locations" by_only="none"]
            woof_ajax_redraw = 0;
            woof_is_ajax = 0;
        }
        //***
        woof_submit_link(woof_get_submit_link());
        return false;
    });



    //***
    jQuery('ul.woof_childs_list').parent('li').addClass('woof_childs_list_li');

    //***

    woof_remove_class_widget();
    woof_checkboxes_slide();
}

var woof_submit_link_locked = false;
function woof_submit_link(link, ajax_redraw) {


    if (woof_submit_link_locked) {
        return;
    }
    if (typeof WoofTurboMode != 'undefined') {
        WoofTurboMode.woof_submit_link(link);

        return;
    }
    if (typeof ajax_redraw == 'undefined') {
        ajax_redraw = woof_ajax_redraw;
    }

    woof_submit_link_locked = true;

    woof_show_info_popup(woof_lang_loading);

    if (woof_is_ajax === 1 && !ajax_redraw) {

        woof_ajax_first_done = true;
        var data = {
            action: "woof_draw_products",
            link: link,
            page: woof_ajax_page_num,
            shortcode: jQuery('#woof_results_by_ajax').data('shortcode'),
            woof_shortcode: jQuery('div.woof').data('shortcode')
        };

        jQuery.post(woof_ajaxurl, data, function (content) {
            content = JSON.parse(content);

            woof_before_ajax_form_redrawing();

            if (jQuery('.woof_results_by_ajax_shortcode').length) {
                if (typeof content.products != "undefined") {
                    jQuery('#woof_results_by_ajax').replaceWith(content.products);

                    /* compatibility found products count*/
                    var found_count = jQuery('.woof_found_count');
                    jQuery(found_count).show();
                    if (found_count.length > 0) {
                        var count_prod = jQuery("#woof_results_by_ajax").data('count');
                        if (typeof count_prod != "undefined") {
                            jQuery(found_count).text(count_prod);
                        }

                    }

                }
            } else {
                if (typeof content.products != "undefined") {
                    jQuery('.woof_shortcode_output').replaceWith(content.products);
                }
            }
            if (typeof content.additional_fields != "undefined") {
                jQuery.each(content.additional_fields, function (selector, html_data) {
                    jQuery(selector).replaceWith(html_data);
                });
            }


            jQuery('div.woof_redraw_zone').replaceWith(jQuery(content.form).find('.woof_redraw_zone'));
            woof_draw_products_top_panel();
            woof_mass_reinit();
            woof_submit_link_locked = false;
            //removing id woof_results_by_ajax - multi in ajax mode sometimes
            //when uses shorcode woof_products in ajax and in settings try ajaxify shop is Yes
            jQuery.each(jQuery('#woof_results_by_ajax'), function (index, item) {
                if (index == 0) {
                    return;
                }

                jQuery(item).removeAttr('id');
            });
            /*mobile  behavior*/
            //jQuery('.woof_hide_mobile_filter').trigger('click');
	    jQuery('.woof').removeClass('woof_show_filter_for_mobile');



            //infinite scroll
            woof_infinite();
            //*** script after ajax loading here
            woof_js_after_ajax_done();
            //***  change  link  in button "add to cart"
            woof_change_link_addtocart();

            /*tooltip*/
            woof_init_tooltip();

            document.dispatchEvent(new CustomEvent('woof-ajax-form-redrawing', {detail: {
                    link: link
                }}));

        });

    } else {

        if (ajax_redraw) {
            //redrawing [woof ajax_redraw=1] only
            var data = {
                action: "woof_draw_products",
                link: link,
                page: 1,
                shortcode: 'woof_nothing', //we do not need get any products, seacrh form data only
                woof_shortcode: jQuery('div.woof').eq(0).data('shortcode')
            };
            jQuery.post(woof_ajaxurl, data, function (content) {

                woof_before_ajax_form_redrawing();

                content = JSON.parse(content);
                jQuery('div.woof_redraw_zone').replaceWith(jQuery(content.form).find('.woof_redraw_zone'));
                woof_mass_reinit();
                woof_submit_link_locked = false;
                /*tooltip*/
                woof_init_tooltip();

                document.dispatchEvent(new CustomEvent('woof-ajax-form-redrawing', {detail: {
                        link: link
                    }}));
            });
        } else {

            window.location = link;
            woof_show_info_popup(woof_lang_loading);
        }
    }
}

function woof_remove_empty_elements() {
    // lets check for empty drop-downs
    jQuery.each(jQuery('.woof_container select'), function (index, select) {
        var size = jQuery(select).find('option').length;
        if (size === 0) {
            jQuery(select).parents('.woof_container').remove();
        }
    });
    //+++
    // lets check for empty checkboxes, radio, color conatiners
    jQuery.each(jQuery('ul.woof_list'), function (index, ch) {
        var size = jQuery(ch).find('li').length;
        if (size === 0) {
            jQuery(ch).parents('.woof_container').remove();
        }
    });
}

function woof_get_submit_link() {
//filter woof_current_values values
    if (woof_is_ajax) {
        woof_current_values.page = woof_ajax_page_num;
    }
//+++
    if (Object.keys(woof_current_values).length > 0) {
        jQuery.each(woof_current_values, function (index, value) {
            if (index == swoof_search_slug) {
                delete woof_current_values[index];
            }
            if (index == 's') {
                delete woof_current_values[index];
            }
            if (index == 'product') {
//for single product page (when no permalinks)
                delete woof_current_values[index];
            }
            if (index == 'really_curr_tax') {
                delete woof_current_values[index];
            }
        });
    }


    //***
    if (Object.keys(woof_current_values).length === 2) {
        if (('min_price' in woof_current_values) && ('max_price' in woof_current_values)) {
            woof_current_page_link = woof_current_page_link.replace(new RegExp(/page\/(\d+)/), "");
            var l = woof_current_page_link + '?min_price=' + woof_current_values.min_price + '&max_price=' + woof_current_values.max_price;
            if (woof_is_ajax) {
                history.pushState({}, "", l);
            }
            return l;
        }
    }



    //***

    if (Object.keys(woof_current_values).length === 0) {
        if (woof_is_ajax) {
            history.pushState({}, "", woof_current_page_link);
        }
        return woof_current_page_link;
    }
    //+++
    if (Object.keys(woof_really_curr_tax).length > 0) {
        woof_current_values['really_curr_tax'] = woof_really_curr_tax.term_id + '-' + woof_really_curr_tax.taxonomy;
    }
    //+++
    var link = woof_current_page_link + "?" + swoof_search_slug + "=1";

    //just for the case when no permalinks enabled
    if (!woof_is_permalink) {

        if (woof_redirect.length > 0) {
            link = woof_redirect + "?" + swoof_search_slug + "=1";
            if (woof_current_values.hasOwnProperty('page_id')) {
                delete woof_current_values.page_id;
            }
        } else {
            link = location.protocol + '//' + location.host + "?" + swoof_search_slug + "=1";

        }
    }

    //any trash for different sites, useful for quick support
    var woof_exclude_accept_array = ['path'];

    if (Object.keys(woof_current_values).length > 0) {
        jQuery.each(woof_current_values, function (index, value) {
            if (index == 'page' && woof_is_ajax) {
                index = 'paged';//for right pagination if copy/paste this link and send somebody another by email for example
            }
            if (index == "product-page") {
                return;
            }

            //http://dev.products-filter.com/?swoof=1&woof_author=3&woof_sku&woof_text=single
            //avoid links where values is empty
            if (typeof value !== 'undefined') {
                if ((typeof value && value.length > 0) || typeof value == 'number')
                {
                    if (jQuery.inArray(index, woof_exclude_accept_array) == -1) {

                        link = link + "&" + index + "=" + value;
                    }
                }
            }

        });
    }

    //+++
    //remove wp pagination like 'page/2'
    link = link.replace(new RegExp(/page\/(\d+)/), "");
    if (woof_is_ajax) {
        history.pushState({}, "", link);

    }

    return link;
}



function woof_show_info_popup(text) {
    if (woof_overlay_skin == 'default') {
        jQuery("#woof_html_buffer").text(text);
        jQuery("#woof_html_buffer").fadeTo(200, 0.9);
    } else {
        //http://jxnblk.com/loading/
        switch (woof_overlay_skin) {
            case 'loading-balls':
            case 'loading-bars':
            case 'loading-bubbles':
            case 'loading-cubes':
            case 'loading-cylon':
            case 'loading-spin':
            case 'loading-spinning-bubbles':
            case 'loading-spokes':
                jQuery('body').plainOverlay('show', {progress: function () {
                        //img style should be inlined
                        return jQuery('<div id="woof_svg_load_container"><img style="height: 100%; width: 100%" src="' + woof_link + 'img/loading-master/' + woof_overlay_skin + '.svg" alt=""></div>');
                    }});
                break;
            default:
                jQuery('body').plainOverlay('show', {duration: -1});
                break;
        }
    }
}


function woof_hide_info_popup() {
    if (woof_overlay_skin == 'default') {
        window.setTimeout(function () {
            jQuery("#woof_html_buffer").fadeOut(400);
        }, 200);
    } else {
        jQuery('body').plainOverlay('hide');
    }
}

function woof_draw_products_top_panel() {

    if (woof_is_ajax) {
        jQuery('#woof_results_by_ajax').prev('.woof_products_top_panel').remove();
    }

    var panel = jQuery('.woof_products_top_panel');

    panel.html('');
    if (Object.keys(woof_current_values).length > 0) {
        panel.show();
        panel.html('<ul></ul>');
        panel.find('ul').attr('class', 'woof_products_top_panel_ul');
        var is_price_in = false;
        //lets show this on the panel

        jQuery.each(woof_current_values, function (index, value) {
            //lets filter data for the panel

            if (jQuery.inArray(index, woof_accept_array) == -1 && jQuery.inArray(index.replace("rev_", ""), woof_accept_array) == -1) {
                return;
            }

            //***

            if ((index == 'min_price' || index == 'max_price') && is_price_in) {
                return;
            }

            if ((index == 'min_price' || index == 'max_price') && !is_price_in) {
                is_price_in = true;
                index = 'price';
                value = woof_lang_pricerange;
            }
            //+++
            value = value.toString().trim();
            if (value.search(',')) {
                value = value.split(',');
            }
            //+++
            jQuery.each(value, function (i, v) {
                if (index == 'page') {
                    return;
                }

                if (index == 'post_type') {
                    return;
                }

                var txt = v;
                if (index == 'orderby') {
                    if (woof_lang[v] !== undefined) {
                        txt = woof_lang.orderby + ': ' + woof_lang[v];
                    } else {
                        txt = woof_lang.orderby + ': ' + v;
                    }
                } else if (index == 'perpage') {
                    txt = woof_lang.perpage;
                } else if (index == 'price') {
                    txt = woof_lang.pricerange;
                } else {

                    var is_in_custom = false;
                    if (Object.keys(woof_lang_custom).length > 0) {
                        jQuery.each(woof_lang_custom, function (i, tt) {
                            if (i == index) {
                                is_in_custom = true;
                                txt = tt;
                                if (index == 'woof_sku') {
                                    txt += " " + v;//because search by SKU can by more than 1 value
                                }
                            }
                        });
                    }

                    if (!is_in_custom) {

                        try {
                            txt = jQuery("input[data-anchor='woof_n_" + index + '_' + v + "']").val();
                        } catch (e) {
                            console.log(e);
                        }

                        if (typeof txt === 'undefined')
                        {
                            txt = v;
                        }
                    }


                }
                if (typeof woof_filter_titles[index] != 'undefined') {

                    var cont_item = panel.find('ul.woof_products_top_panel_ul li ul[data-container=' + index + ']');

                    if (cont_item.length) {
                        cont_item.append(
                                jQuery('<li>').append(
                                jQuery('<a>').attr('href', "").attr('data-tax', index).attr('data-slug', v).append(
                                jQuery('<span>').attr('class', 'woof_remove_ppi').append(txt)
                                )));
                    } else {
                        panel.find('ul.woof_products_top_panel_ul').append(
                                jQuery('<li>').append(
                                jQuery('<ul>').attr('data-container', index).append(
                                jQuery('<li>').text(woof_filter_titles[index] + ":")).append(
                                jQuery('<li>').append(
                                jQuery('<a>').attr('href', "").attr('data-tax', index).attr('data-slug', v).append(
                                jQuery('<span>').attr('class', 'woof_remove_ppi').append(txt)
                                )))));
                    }
                } else {
                    panel.find('ul.woof_products_top_panel_ul').append(
                            jQuery('<li>').append(
                            jQuery('<a>').attr('href', "").attr('data-tax', index).attr('data-slug', v).append(
                            jQuery('<span>').attr('class', 'woof_remove_ppi').append(txt)
                            )));
                }

            });


        });
    }


    if (jQuery(panel).find('li').length == 0 || !jQuery('.woof_products_top_panel').length) {
        panel.hide();
    } else {
        panel.find('ul.woof_products_top_panel_ul').prepend(
                jQuery('<li>').append(
                jQuery('<button>').attr('class', "woof_reset_button_2").append(woof_lang.clear_all))
                );
    }

    jQuery('.woof_reset_button_2').on('click', function () {
        woof_ajax_page_num = 1;
        woof_ajax_redraw = 0;
        woof_reset_btn_action = true;

        if (woof_is_permalink) {
            woof_current_values = {};
            woof_submit_link(woof_get_submit_link().split("page/")[0]);
        } else {
            var link = woof_shop_page;
            if (woof_current_values.hasOwnProperty('page_id')) {
                link = location.protocol + '//' + location.host + "/?page_id=" + woof_current_values.page_id;
                woof_current_values = {'page_id': woof_current_values.page_id};
                woof_get_submit_link();
            }
            //***
            woof_submit_link(link);
            if (woof_is_ajax) {
                history.pushState({}, "", link);
                if (woof_current_values.hasOwnProperty('page_id')) {
                    woof_current_values = {'page_id': woof_current_values.page_id};
                } else {
                    woof_current_values = {};
                }
            }
        }
        return false;
    });
    //+++
    jQuery('.woof_remove_ppi').parent().on('click', function (event) {
        event.preventDefault();
        var tax = jQuery(this).data('tax');
        var name = jQuery(this).data('slug');

        //***

        if (tax != 'price') {

            var values = woof_current_values[tax];
            values = values.split(',');
            var tmp = [];
            jQuery.each(values, function (index, value) {
                if (value != name) {
                    tmp.push(value);
                }
            });
            values = tmp;

            if (values.length) {
                woof_current_values[tax] = values.join(',');
            } else {
                delete woof_current_values[tax];
            }
        } else {
            delete woof_current_values['min_price'];
            delete woof_current_values['max_price'];
        }
        woof_ajax_page_num = 1;
        woof_reset_btn_action = true;
        {
            woof_submit_link(woof_get_submit_link());
        }
        jQuery('.woof_products_top_panel').find("[data-tax='" + tax + "'][href='" + name + "']").hide(333);
        return false;

    });

}

//control conditions if proucts shortcode uses on the page
function woof_shortcode_observer() {

    var redirect = true;
    if (jQuery('.woof_shortcode_output').length || (jQuery('.woocommerce .products').length && !jQuery('.single-product').length)) {
        redirect = false;
    }
    if (jQuery('.woocommerce .woocommerce-info').length) {
        redirect = false;
    }
    if (typeof woof_not_redirect !== 'undefined' && woof_not_redirect == 1) {
        redirect = false;
    }

    if (jQuery('.woot-data-table').length) {
        redirect = false;
    }

    if (!redirect) {
        woof_current_page_link = location.protocol + '//' + location.host + location.pathname;
    }

    if (jQuery('#woof_results_by_ajax').length) {
        woof_is_ajax = 1;
    }
}



function woof_init_beauty_scroll() {
    if (woof_use_beauty_scroll) {
        try {
            var anchor = ".woof_section_scrolled, .woof_sid_auto_shortcode .woof_container";
            jQuery("" + anchor).addClass('woof_use_beauty_scroll');
        } catch (e) {
            console.log(e);
        }
    }
}

//just for inbuilt price range widget
function woof_remove_class_widget() {
    jQuery('.woof_container_inner').find('.widget').removeClass('widget');
}

function woof_init_show_auto_form() {
    jQuery('.woof_show_auto_form').off('click');

    if (jQuery('.woof_show_auto_form.woof_btn').length) {
        jQuery('.woof_btn_default').remove();
    }

    jQuery('.woof_show_auto_form').on('click', function () {
        var _this = this;
        jQuery(_this).addClass('woof_hide_auto_form').removeClass('woof_show_auto_form');
        jQuery(".woof_auto_show").show().animate(
                {
                    height: (jQuery(".woof_auto_show_indent").height() + 20) + "px",
                    opacity: 0.96
                }, 377, function () {
            woof_init_hide_auto_form();
            jQuery('.woof_auto_show').removeClass('woof_overflow_hidden');
            jQuery('.woof_auto_show_indent').removeClass('woof_overflow_hidden');
            jQuery(".woof_auto_show").height('auto');
        });


        return false;
    });

}


//for woof_auto_show closing on blank place click
document.addEventListener('click', function (e) {
    let opened = document.querySelectorAll('.woof_auto_show');
    let target = e.target;
    let close = !target.classList.contains('woof_sid');
    if (close) {
        close = !target.closest('.woof_sid');
    }

    //this close btn self    
    if (target.classList.contains('woof_show_auto_form')) {
        return true;
    }

    if (close && Array.from(opened).length > 0) {
        Array.from(opened).forEach(function (item) {
            if (item.parentNode.querySelector('.woof_hide_auto_form')) {
                item.parentNode.querySelector('.woof_hide_auto_form').click();
            }
        });
    }

    return true;
});

function woof_init_hide_auto_form() {
    jQuery('.woof_hide_auto_form').off('click');
    jQuery('.woof_hide_auto_form').on('click', function () {
        var _this = this;
        jQuery(_this).addClass('woof_show_auto_form').removeClass('woof_hide_auto_form');
        jQuery(".woof_auto_show").show().animate(
                {
                    height: "1px",
                    opacity: 0
                }, 377, function () {

            jQuery('.woof_auto_show').addClass('woof_overflow_hidden');
            jQuery('.woof_auto_show_indent').addClass('woof_overflow_hidden');
            woof_init_show_auto_form();
        });

        return false;
    });


}

//if we have mode - child checkboxes closed - append openers buttons by js
function woof_checkboxes_slide() {
    if (woof_checkboxes_slide_flag == true) {
        var childs = jQuery('ul.woof_childs_list');
        if (childs.length) {
            jQuery.each(childs, function (index, ul) {

                if (jQuery(ul).parents('.woof_no_close_childs').length) {
                    return;
                }


                var span_class = 'woof_is_closed';
                if (woof_supports_html5_storage()) {
                    //test mode  from 06.11.2017
                    var preulstate = localStorage.getItem(jQuery(ul).closest('li').attr("class"));
                    if (preulstate && preulstate == 'woof_is_opened') {
                        var span_class = 'woof_is_opened';
                        jQuery(ul).show();
                    }
                    jQuery(ul).parent('li').children('label').after('<a href="javascript:void(0);" class="woof_childs_list_opener" ><span class="' + span_class + '"></span></a>');
                    //++   
                } else {
                    if (jQuery(ul).find('input[type=checkbox],input[type=radio]').is(':checked')) {
                        jQuery(ul).show();
                        span_class = 'woof_is_opened';
                    }
                    jQuery(ul).parent('li').children('label').after('<a href="javascript:void(0);" class="woof_childs_list_opener" ><span class="' + span_class + '"></span></a>');

                }

            });



            jQuery.each(jQuery('a.woof_childs_list_opener span'), function (index, a) {

                jQuery(a).on('click', function () {
                    var span = jQuery(this);
                    var this_ = jQuery(this).parent(".woof_childs_list_opener");
                    if (span.hasClass('woof_is_closed')) {
                        //lets open
                        jQuery(this_).parent().find('ul.woof_childs_list').first().show(333);
                        span.removeClass('woof_is_closed');
                        span.addClass('woof_is_opened');
                    } else {
                        //lets close
                        jQuery(this_).parent().find('ul.woof_childs_list').first().hide(333);
                        span.removeClass('woof_is_opened');
                        span.addClass('woof_is_closed');
                    }

                    if (woof_supports_html5_storage()) {
                        //test mode  from 06.11.2017
                        var ullabel = jQuery(this_).closest('li').attr("class");
                        var ullstate = jQuery(this_).children("span").attr("class");
                        localStorage.setItem(ullabel, ullstate);
                    }
                    return false;
                });
            });
        }
    }
}

function woof_init_ion_sliders() {

    jQuery.each(jQuery('.woof_range_slider'), function (index, input) {
        try {


            jQuery(input).ionRangeSlider({
                min: jQuery(input).data('min'),
                max: jQuery(input).data('max'),
                from: jQuery(input).data('min-now'),
                to: jQuery(input).data('max-now'),
                type: 'double',
                prefix: jQuery(input).data('slider-prefix'),
                postfix: jQuery(input).data('slider-postfix'),
                prettify: true,
                hideMinMax: false,
                hideFromTo: false,
                grid: true,
                step: jQuery(input).data('step'),
                onFinish: function (ui) {
                    var tax = jQuery(input).data('taxes');
                    woof_current_values.min_price = (parseFloat(ui.from, 10) / tax);
                    woof_current_values.max_price = (parseFloat(ui.to, 10) / tax);
                    //woocs adaptation
                    if (typeof woocs_current_currency !== 'undefined') {
                        woof_current_values.min_price = woof_current_values.min_price / parseFloat(woocs_current_currency.rate);
                        woof_current_values.max_price = woof_current_values.max_price / parseFloat(woocs_current_currency.rate);
                    }
                    //***
                    woof_ajax_page_num = 1;
                    if (woof_autosubmit || jQuery(input).within('.woof').length == 0) {
                        woof_submit_link(woof_get_submit_link());
                    }
                    return false;
                },
                onChange: function (data) {
                    if (jQuery('.woof_price_filter_txt')) {
                        var tax = jQuery(input).data('taxes');
                        jQuery('.woof_price_filter_txt_from').val(parseInt(data.from, 10) / tax);
                        jQuery('.woof_price_filter_txt_to').val(parseInt(data.to, 10) / tax);
                        //woocs adaptation
                        if (typeof woocs_current_currency !== 'undefined') {
                            jQuery('.woof_price_filter_txt_from').val(Math.ceil(jQuery('.woof_price_filter_txt_from').val() / parseFloat(woocs_current_currency.rate)));
                            jQuery('.woof_price_filter_txt_to').val(Math.ceil(jQuery('.woof_price_filter_txt_to').val() / parseFloat(woocs_current_currency.rate)));
                        }
                    }
                },
            });
        } catch (e) {

        }
    });
}

function woof_init_native_woo_price_filter() {
    jQuery('.widget_price_filter form').off('submit');
    jQuery('.widget_price_filter form').on('submit', function () {

        var min_price = jQuery(this).find('.price_slider_amount #min_price').val();
        var max_price = jQuery(this).find('.price_slider_amount #max_price').val();
        woof_current_values.min_price = min_price;
        woof_current_values.max_price = max_price;
        woof_ajax_page_num = 1;
        if (woof_autosubmit) {
            //comment next code row to avoid endless ajax requests
            woof_submit_link(woof_get_submit_link());
        }
        return false;
    });

}

//we need after ajax redrawing of the search form
function woof_reinit_native_woo_price_filter() {

    // woocommerce_price_slider_params is required to continue, ensure the object exists
    if (typeof woocommerce_price_slider_params === 'undefined') {

        return false;
    }

    // Get markup ready for slider
    jQuery('input#min_price, input#max_price').hide();
    jQuery('.price_slider, .price_label').show();

    // Price slider uses jquery ui
    var min_price = jQuery('.price_slider_amount #min_price').data('min'),
            max_price = jQuery('.price_slider_amount #max_price').data('max'),
            current_min_price = parseInt(min_price, 10),
            current_max_price = parseInt(max_price, 10);

    if (woof_current_values.hasOwnProperty('min_price')) {
        current_min_price = parseInt(woof_current_values.min_price, 10);
        current_max_price = parseInt(woof_current_values.max_price, 10);
    } else {
        if (woocommerce_price_slider_params.min_price) {
            current_min_price = parseInt(woocommerce_price_slider_params.min_price, 10);
        }
        if (woocommerce_price_slider_params.max_price) {
            current_max_price = parseInt(woocommerce_price_slider_params.max_price, 10);
        }
    }

    //***

    var currency_symbol = woocommerce_price_slider_params.currency_symbol;
    if (typeof currency_symbol == 'undefined') {
        currency_symbol = woocommerce_price_slider_params.currency_format_symbol;
    }

    jQuery(document.body).on('price_slider_create price_slider_slide', function (event, min, max) {

        if (typeof woocs_current_currency !== 'undefined') {
            var label_min = min;
            var label_max = max;
            if (typeof currency_symbol == 'undefined') {

                currency_symbol = woocs_current_currency.symbol
            }


            if (woocs_current_currency.rate !== 1) {
                label_min = Math.ceil(label_min * parseFloat(woocs_current_currency.rate));
                label_max = Math.ceil(label_max * parseFloat(woocs_current_currency.rate));
            }

            //+++
            label_min = woof_front_number_format(label_min, 2, '.', ',');
            label_max = woof_front_number_format(label_max, 2, '.', ',');
            if (jQuery.inArray(woocs_current_currency.name, woocs_array_no_cents) || woocs_current_currency.hide_cents == 1) {
                label_min = label_min.replace('.00', '');
                label_max = label_max.replace('.00', '');
            }
            //+++


            if (woocs_current_currency.position === 'left') {

                jQuery('.price_slider_amount span.from').html(currency_symbol + label_min);
                jQuery('.price_slider_amount span.to').html(currency_symbol + label_max);

            } else if (woocs_current_currency.position === 'left_space') {

                jQuery('.price_slider_amount span.from').html(currency_symbol + " " + label_min);
                jQuery('.price_slider_amount span.to').html(currency_symbol + " " + label_max);

            } else if (woocs_current_currency.position === 'right') {

                jQuery('.price_slider_amount span.from').html(label_min + currency_symbol);
                jQuery('.price_slider_amount span.to').html(label_max + currency_symbol);

            } else if (woocs_current_currency.position === 'right_space') {

                jQuery('.price_slider_amount span.from').html(label_min + " " + currency_symbol);
                jQuery('.price_slider_amount span.to').html(label_max + " " + currency_symbol);

            }

        } else {

            if (woocommerce_price_slider_params.currency_pos === 'left') {

                jQuery('.price_slider_amount span.from').html(currency_symbol + min);
                jQuery('.price_slider_amount span.to').html(currency_symbol + max);

            } else if (woocommerce_price_slider_params.currency_pos === 'left_space') {

                jQuery('.price_slider_amount span.from').html(currency_symbol + ' ' + min);
                jQuery('.price_slider_amount span.to').html(currency_symbol + ' ' + max);

            } else if (woocommerce_price_slider_params.currency_pos === 'right') {

                jQuery('.price_slider_amount span.from').html(min + currency_symbol);
                jQuery('.price_slider_amount span.to').html(max + currency_symbol);

            } else if (woocommerce_price_slider_params.currency_pos === 'right_space') {

                jQuery('.price_slider_amount span.from').html(min + ' ' + currency_symbol);
                jQuery('.price_slider_amount span.to').html(max + ' ' + currency_symbol);

            }
        }

        jQuery(document.body).trigger('price_slider_updated', [min, max]);
    });

    jQuery('.price_slider').slider({
        range: true,
        animate: true,
        min: min_price,
        max: max_price,
        values: [current_min_price, current_max_price],
        create: function () {

            jQuery('.price_slider_amount #min_price').val(current_min_price);
            jQuery('.price_slider_amount #max_price').val(current_max_price);

            jQuery(document.body).trigger('price_slider_create', [current_min_price, current_max_price]);
        },
        slide: function (event, ui) {

            jQuery('input#min_price').val(ui.values[0]);
            jQuery('input#max_price').val(ui.values[1]);

            jQuery(document.body).trigger('price_slider_slide', [ui.values[0], ui.values[1]]);
        },
        change: function (event, ui) {
            jQuery(document.body).trigger('price_slider_change', [ui.values[0], ui.values[1]]);
        }
    });


    //***
    woof_init_native_woo_price_filter();
}

function woof_mass_reinit() {
    woof_remove_empty_elements();
    woof_open_hidden_li();
    woof_init_search_form();
    woof_hide_info_popup();
    woof_init_beauty_scroll();
    woof_init_ion_sliders();
    woof_reinit_native_woo_price_filter();//native woo price range slider reinit
    woof_recount_text_price_filter();
    woof_draw_products_top_panel();
}

function woof_recount_text_price_filter() {
    //change value in textinput price filter if WOOCS is installed
    if (typeof woocs_current_currency !== 'undefined') {
        jQuery.each(jQuery('.woof_price_filter_txt_from, .woof_price_filter_txt_to'), function (i, item) {
            jQuery(this).val(Math.ceil(jQuery(this).data('value')));
        });
    }
}

function woof_init_toggles() {

    jQuery('body').off('click', '.woof_front_toggle');
    jQuery('body').on('click', '.woof_front_toggle', function () {

        if (jQuery(this).data('condition') == 'opened') {
            jQuery(this).removeClass('woof_front_toggle_opened');
            jQuery(this).addClass('woof_front_toggle_closed');
            jQuery(this).data('condition', 'closed');

            if (woof_toggle_type == 'text') {
                jQuery(this).text(woof_toggle_closed_text);
            } else {
                jQuery(this).find('img').prop('src', woof_toggle_closed_image);
            }
        } else {

            jQuery(this).addClass('woof_front_toggle_opened');
            jQuery(this).removeClass('woof_front_toggle_closed');
            jQuery(this).data('condition', 'opened');
            if (woof_toggle_type == 'text') {
                jQuery(this).text(woof_toggle_opened_text);
            } else {
                jQuery(this).find('img').prop('src', woof_toggle_opened_image);
            }
        }

        jQuery(this).parents('.woof_container_inner').find('.woof_block_html_items').slideToggle(500);

        /* fix  for chosen*/
        var is_chosen_here = jQuery(this).parents('.woof_container_inner').find('.chosen-container');
        if (is_chosen_here.length && jQuery(this).hasClass('woof_front_toggle_opened')) {
            jQuery(this).parents('.woof_container_inner').find('select').chosen('destroy').trigger("liszt:updated");
            jQuery(this).parents('.woof_container_inner').find('select').chosen(/*{disable_search_threshold: 10}*/);
        }
        if (jQuery(this).hasClass('woof_front_toggle_opened')) {
            woof_reinit_selects()
        }

        return false;
    });
}

//for "Show more" blocks
function woof_open_hidden_li() {
    if (jQuery('.woof_open_hidden_li_btn').length > 0) {
        jQuery.each(jQuery('.woof_open_hidden_li_btn'), function (i, b) {
            if (jQuery(b).parents('ul').find('li.woof_hidden_term input[type=checkbox],li.woof_hidden_term input[type=radio]').is(':checked')) {
                jQuery(b).trigger('click');
            }
        });
    }
}

//http://stackoverflow.com/questions/814613/how-to-read-get-data-from-a-url-using-javascript
function $_woof_GET(q, s) {
    s = (s) ? s : window.location.search;
    var re = new RegExp('&' + q + '=([^&]*)', 'i');
    return (s = s.replace(/^\?/, '&').match(re)) ? s = s[1] : s = '';
}

function woof_parse_url(url) {
    var pattern = RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?");
    var matches = url.match(pattern);
    return {
        scheme: matches[2],
        authority: matches[4],
        path: matches[5],
        query: matches[7],
        fragment: matches[9]
    };
}


//      woof price radio;
function woof_price_filter_radio_init() {
    if (icheck_skin != 'none') {
        jQuery('.woof_price_filter_radio').iCheck('destroy');

        jQuery('.woof_price_filter_radio').iCheck({
            radioClass: 'iradio_' + icheck_skin.skin + '-' + icheck_skin.color,

        });

        jQuery('.woof_price_filter_radio').siblings('div').removeClass('checked');

        jQuery('.woof_price_filter_radio').off('ifChecked');
        jQuery('.woof_price_filter_radio').on('ifChecked', function (event) {
            jQuery(this).attr("checked", true);
            jQuery('.woof_radio_price_reset').removeClass('woof_radio_term_reset_visible');
            jQuery(this).parents('.woof_list').find('.woof_radio_price_reset').removeClass('woof_radio_term_reset_visible');
            jQuery(this).parents('.woof_list').find('.woof_radio_price_reset').hide();
            jQuery(this).parents('li').eq(0).find('.woof_radio_price_reset').eq(0).addClass('woof_radio_term_reset_visible');
            var val = jQuery(this).val();
            if (parseInt(val, 10) == -1) {
                delete woof_current_values.min_price;
                delete woof_current_values.max_price;
                jQuery(this).removeAttr('checked');
                jQuery(this).siblings('.woof_radio_price_reset').removeClass('woof_radio_term_reset_visible');
            } else {
                var val = val.split("-");
                woof_current_values.min_price = val[0];
                woof_current_values.max_price = val[1];
                jQuery(this).siblings('.woof_radio_price_reset').addClass('woof_radio_term_reset_visible');
                jQuery(this).attr("checked", true);
            }
            if (woof_autosubmit || jQuery(this).within('.woof').length == 0) {
                woof_submit_link(woof_get_submit_link());
            }
        });

    } else {
        jQuery('body').on('change', '.woof_price_filter_radio', function () {
            var val = jQuery(this).val();
            jQuery('.woof_radio_price_reset').removeClass('woof_radio_term_reset_visible');
            if (parseInt(val, 10) == -1) {
                delete woof_current_values.min_price;
                delete woof_current_values.max_price;
                jQuery(this).removeAttr('checked');
                jQuery(this).siblings('.woof_radio_price_reset').removeClass('woof_radio_term_reset_visible');
            } else {
                var val = val.split("-");
                woof_current_values.min_price = val[0];
                woof_current_values.max_price = val[1];
                jQuery(this).siblings('.woof_radio_price_reset').addClass('woof_radio_term_reset_visible');
                jQuery(this).attr("checked", true);
            }
            if (woof_autosubmit || jQuery(this).within('.woof').length == 0) {
                woof_submit_link(woof_get_submit_link());
            }
        });
    }
    //***
    jQuery('.woof_radio_price_reset').on('click', function () {
        delete woof_current_values.min_price;
        delete woof_current_values.max_price;
        jQuery(this).siblings('div').removeClass('checked');
        jQuery(this).parents('.woof_list').find('input[type=radio]').removeAttr('checked');

        jQuery(this).removeClass('woof_radio_term_reset_visible');
        if (woof_autosubmit) {
            woof_submit_link(woof_get_submit_link());
        }
        return false;
    });
}
//    END  woof price radio;



//compatibility with YITH Infinite Scrolling
function woof_serialize(serializedString) {
    var str = decodeURI(serializedString);
    var pairs = str.split('&');
    var obj = {}, p, idx, val;
    for (var i = 0, n = pairs.length; i < n; i++) {
        p = pairs[i].split('=');
        idx = p[0];

        if (idx.indexOf("[]") == (idx.length - 2)) {
            // Eh um vetor
            var ind = idx.substring(0, idx.length - 2)
            if (obj[ind] === undefined) {
                obj[ind] = [];
            }
            obj[ind].push(p[1]);
        } else {
            obj[idx] = p[1];
        }
    }
    return obj;
}


//compatibility with YITH Infinite Scrolling
function woof_infinite() {

    if (typeof yith_infs === 'undefined') {
        return;
    }


    //***
    var infinite_scroll1 = {
        //'nextSelector': ".woof_infinity .nav-links .next",
        'nextSelector': '.woocommerce-pagination li .next',
        'navSelector': yith_infs.navSelector,
        'itemSelector': yith_infs.itemSelector,
        'contentSelector': yith_infs.contentSelector,
        'loader': '<img src="' + yith_infs.loader + '">',
        'is_shop': yith_infs.shop
    };
    var curr_l = window.location.href;
    var curr_link = curr_l.split('?');
    var get = "";
    if (curr_link[1] != undefined) {
        var temp = woof_serialize(curr_link[1]);
        delete temp['paged'];
        get = decodeURIComponent(jQuery.param(temp))
    }

    var page_link = jQuery('.woocommerce-pagination li .next').attr("href");

    if (page_link == undefined) {
        page_link = curr_link + "page/1/"
    }

    var ajax_link = page_link.split('?');
    var page = "";
    if (ajax_link[1] != undefined) {
        var temp1 = woof_serialize(ajax_link[1]);
        if (temp1['paged'] != undefined) {
            page = "/page/" + temp1['paged'] + "/";
        }
    }

    page_link = curr_link[0].replace(/\/$/, "") + page + '?' + get;

    jQuery('.woocommerce-pagination li .next').attr('href', page_link);

    jQuery(window).off("yith_infs_start"), jQuery(yith_infs.contentSelector).yit_infinitescroll(infinite_scroll1)
}
//End infinity scroll

//fix  if woof - is ajax  and  cart - is redirect
function woof_change_link_addtocart() {
    if (!woof_is_ajax) {
        return;
    }
    jQuery(".add_to_cart_button").each(function (i, elem) {
        var link = jQuery(elem).attr('href');
        if (link) {
            var link_items = link.split("?");
            var site_link_items = window.location.href.split("?");
            if (link_items[1] != undefined) {
                link = site_link_items[0] + "?" + link_items[1];
                jQuery(elem).attr('href', link);
            }
        }
    });

}
//https://github.com/kvz/phpjs/blob/master/functions/strings/number_format.js
function woof_front_number_format(number, decimals, dec_point, thousands_sep) {
    number = (number + '')
            .replace(/[^0-9+\-Ee.]/g, '');
    var n = !isFinite(+number) ? 0 : +number,
            prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
            sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
            dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
            s = '',
            toFixedFix = function (n, prec) {
                var k = Math.pow(10, prec);
                return '' + (Math.round(n * k) / k)
                        .toFixed(prec);
            };
// Fix for IE parseFloat(0.55).toFixed(0) = 0;
    s = (prec ? toFixedFix(n, prec) : '' + Math.round(n))
            .split('.');
    if (s[0].length > 3) {
        s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
    }
    if ((s[1] || '')
            .length < prec) {
        s[1] = s[1] || '';
        s[1] += new Array(prec - s[1].length + 1)
                .join('0');
    }
    return s.join(dec);
}

//additional function to check local storage

function woof_supports_html5_storage() {
    try {
        return 'localStorage' in window && window['localStorage'] !== null;
    } catch (e) {
        return false;
    }
}

function woof_init_tooltip() {
    var tooltips = jQuery(".woof_tooltip_header");

    if (tooltips.length) {

        jQuery(tooltips).tooltipster({
            theme: 'tooltipster-noir',
            side: 'right',
            trigger: 'click'
        });
    }

}
function woof_before_ajax_form_redrawing() {
    if (woof_select_type == 'selectwoo') {
        try {
            jQuery("select.woof_mselect").selectWoo('destroy');
            jQuery("select.woof_meta_mselect").selectWoo('destroy');
        } catch (e) {
            return false;
        }

    }

}
function woof_reinit_selects() {
    if (woof_select_type == 'chosen') {
        try {
            jQuery("select.woof_select, select.woof_mselect").chosen('destroy').trigger("liszt:updated");
            jQuery("select.woof_select, select.woof_mselect").chosen(/*{disable_search_threshold: 10}*/);
            jQuery("select.woof_meta_select, select.woof_meta_mselect").chosen('destroy').trigger("liszt:updated");
            jQuery("select.woof_meta_select, select.woof_meta_mselect").chosen(/*{disable_search_threshold: 10}*/);
        } catch (e) {

        }
    } else if (woof_select_type == 'selectwoo') {
        try {
            jQuery("select.woof_select, select.woof_mselect").selectWoo('destroy');
            jQuery("select.woof_select, select.woof_mselect").selectWoo();
            jQuery("select.woof_meta_select, select.woof_meta_mselect").selectWoo('destroy');
            jQuery("select.woof_meta_select, select.woof_meta_mselect").selectWoo();
        } catch (e) {

        }

    }
}
function woof_init_mobile_filter() {
    var show_btn = jQuery('.woof_show_mobile_filter');
    var show_btn_container = jQuery('.woof_show_mobile_filter_container');
    var def_container = jQuery(woof_m_b_container);
    if (!show_btn_container.length) {
        show_btn_container = def_container;
    }
    if (show_btn && show_btn_container) {
        jQuery(show_btn_container).append(show_btn);
    }


    jQuery('.woof_show_mobile_filter').on('click', function (e) {
        var sid = jQuery(this).data('sid');
        jQuery('.woof.woof_sid_' + sid).toggleClass('woof_show_filter_for_mobile');
        setTimeout(function () {
            try {
                jQuery('.woof.woof_sid_' + sid).find("select.woof_mselect").chosen('destroy');
                jQuery('.woof.woof_sid_' + sid).find("select.woof_select").chosen('destroy');
                jQuery('.woof.woof_sid_' + sid).find("select.woof_mselect").chosen();
                jQuery('.woof.woof_sid_' + sid).find("select.woof_select").chosen();
            } catch (e) {

            }
        }, 300);

    });
    jQuery('.woof_hide_mobile_filter').on('click', function (e) {
        jQuery(this).parents('.woof').toggleClass('woof_show_filter_for_mobile');
    });


}