var Ridex = {};

$.fn.xLinkChangeMarker = function (marker) {
    let xlink = this.attr('xlink:href'),
        xLinkArray = xlink ? xlink.split('#') : [];

    if(xLinkArray) {
        this.attr('xlink:href', xLinkArray[0] + '#' + marker)
    }

    return this;
};

$.fn.updateQtyInput = function (qty, step, maxQty) {
    this.val(qty);

    if (isNaN(qty)) {
        this.val(step);
    }

    if (step > 1 && qty % 2 !== 0) {
        let result = qty - 1;
        this.val(result === 0 ? step : result);
    }

    if (qty < 1) {
        this.val(step);
    }

    if (qty >= maxQty) {
        this.val(maxQty);
    }

    return this;
};

$.fn.toggleChecked = function () {
    if(this[0].tagName === 'INPUT') {
        this.prop('checked', this.is(':checked'));
    }
};

(function () {
    Ridex.settings = {
        suggestTimeout: 500,
        popupFadeIn: 200,
        popupFadeOut: 0
    };

    Ridex.v = {
        rotatorRoute:               null,
        _jsLink:                    '._js-link',
        _jsHidden:                  '._js-hidden',
        _jsInputBox:                '._js-input-box',
        _jsInputGroup:              '._js-input-group',
        _jsInputError:              '._js-input-error',
        _jsHelperText:              '._js-helper-text',
        _jsHeaderSearch:            '._js-header__search',
        _jsErrorMessagesBlock:      '._js-errorMessagesBlock',
        _jsAmountInput:             '._js-amount-input',
        _jsCheckBoxSubscribe:       '._js-check-box-subscribe',
        _jsQty:                     '._js-qty',
        _jsDate:                    '._js-date',
        _jsMainLoader:              '._js-main-loader',
        _jsLoader:                  '._js-loader',
        _jsOverlay:                 '._js-overlay',
        _jsPopup:                   '._js-popup',
        _jsPopupClose:              '._js-popup-close',
        _jsPopupOverlay:            '._js-popup-overlay',
        _jsPopupBodyDescription:    '._js-popup-body-description',
        _jsPopupBodyButton:         '._js-popup-body-button',
        _jsPopupSignIn:             '._js-popup-signIn',
        _jsPopupForgotPassword:     '._js-popup-forgotPassword',
        _jsPopupForgotSuccess:      '._js-popup-forgotSuccess',
        _jsPopupCookies:            '._js-popup-cookies',
        _jsPopupTanks:              '._js-popup-tanks',
        _jsPopupDefault:            '._js-popup-default',
        _jsPopupFormSubmission:     '._js-popup-form-submission',
        _jsPopupVerify:             '._js-popup-verify',
        _jsPopupVerifySuccess:      '._js-popup-verify-success',
        _jsPopupSiteWrapper:        '._js-popup-site-wrapper',
        _jsPopupVatRequired:        '._js-popup-vatRequired',
        _jsPopupWaitVerifyVat:      '._js-popup-waitVerifyVat',
        _jsPopupVatSuccess:         '._js-popup-vat-success',
        dataPopupDocumentLangs:     '[data-popup-document-langs]',
        _jsPopupSubscribeToProduct: '._js-popup-subscribeToProduct',
        _jsProduct:                 '._js-product',
        _jsTotalQty:                '._js-totalQty',
        _jsGrandQty:                '._js-grandQty',
        _jsGrandTotal:              '._js-grandTotal',
        _jsVatPrefix:               '._js-vatPrefix',
        _jsPopupProductVideo:       '._js-popup-product-video',
        _jsInputText:               '._js-input-text',
        _jsAttachFile:              '._js-attach-file',
        _jsMinus:                   '._js-minus',
        _jsPlus:                    '._js-plus',
    };

    Ridex.vars = function (params) {
        Object.assign(Ridex.v, params);

        return Ridex.v;
    };

    Ridex.slickSliderInit = function ($object, params) {
        if ($object.length) {
            $object.slick(params);
        }
    };

    Ridex.fadeIn = function ($object){
        $object.fadeIn(this.settings.popupFadeIn);
    };

    Ridex.fadeOut = function ($object){
        $object.fadeOut(this.settings.popupFadeOut);
    };

    Ridex.toggleMultipleCheckboxes = function ($object, $checkboxes) {
        $checkboxes.attr('checked', !$object.is(':checked')).each(function (){
            if(!$(this).is(':checked') && $object.is(':checked') || $(this).is(':checked') && !$object.is(':checked')) {
                $(this).trigger('click');
            }
        });
    };

    Ridex.changeStateButton = function (obj) {
        let max = parseInt(obj.data('max'));
        let value = parseInt(obj.val());
        let decrementButton = obj.siblings(Ridex.v._jsMinus);
        let incrementButton = obj.siblings(Ridex.v._jsPlus);
        let step = parseInt(obj.data('step'));

        (value >= max) ? incrementButton.addClass('disabled') : incrementButton.removeClass('disabled');

        (value <= 1 || (value === 2 && step === 2) || (value === 3 && step === 2)) ? decrementButton.addClass('disabled') : decrementButton.removeClass('disabled');
    }

    Ridex.toggleDisabledByCheckboxes = function ($object, $checkboxes) {
        let checked = [];

        $checkboxes.each(function (){
            if ($(this).is(":checked")) {
                checked.push($(this));
            }
        });

        if(checked.length){
            $object.prop("disabled", false);
        } else {
            $object.prop("disabled", true);
        }
    };

    Ridex.pureClassName = function (className) {
        return className.replace('.', '');
    };

    Ridex.buildUrl = function (params) {
        let url,
            urlParams = window.location.search.replace("?", "&");

        $.each(params, function (key, value) {
            urlParams = urlParams.split("&").filter(function (v) {
                return v !== "" && v.search(key) === -1;
            });

            urlParams.push(key + '=' + value);
        });

        url = '?' + urlParams.join('&');

        return url;
    };

    Ridex.setCookie = function (name, value, expireDays) {
        let date = new Date();
        date.setTime(date.getTime() + (expireDays * 24 * 60 * 60 * 1000));

        const expires = "expires=" + date.toUTCString();

        document.cookie = name + "=" + value + "; " + expires + "; path=/";
    }

    Ridex.getCookie = function (name) {
        name = name + "=";
        const decoded = decodeURIComponent(document.cookie);
        let res;

        decoded .split('; ').forEach(val => {
            if (val.indexOf(name) === 0) res = val.substring(name.length);
        })

        return res;
    }

    Ridex.getPrecision = function(number) {
        let s = number + "",
            d = s.indexOf('.') + 1;

        return !d ? 0 : s.length - d;
    };
})();

(function () {
    Ridex.Ajax = function () {
        let v = Ridex.v,
            disable,
            loader,
            loaderOnForm,
            loaderOnFile,
            form;

        $.ajaxSetup({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            },
            beforeSend: function(xhr, settings) {
                if(settings.context){
                    disable = settings.context.disable || undefined;
                    loader = settings.context.loader || undefined;
                    loaderOnForm = settings.context.loaderOnForm || undefined;
                    loaderOnFile = settings.context.loaderOnFile || undefined;
                    form = settings.context.form || undefined;

                    if(disable){
                        Ridex.Ajax.disableClickOnElement(disable);
                    }

                    if(loader){
                        Ridex.Ajax.loader('on');
                    }

                    if(loaderOnForm){
                        Ridex.Ajax.loader.form('on', form);
                    }

                    if(loaderOnFile){
                        Ridex.Ajax.loader.file('on', form);
                    }
                }
            },
            error: function(response) {
                if(disable) {
                    disable.unbind('click');
                }

                if(loader) {
                    Ridex.Ajax.loader('off');
                }

                if(loaderOnForm) {
                    Ridex.Ajax.loader.form('off');
                }

                if(loaderOnFile) {
                    Ridex.Ajax.loader.file('off', form);
                }

                if(form) {
                    let errors = response.responseJSON.errors;

                    $.each(errors, function( key, value ) {
                        if (key === 'both') {
                            form.find(v._jsInputGroup).find(v._jsInputError).html(value[0]);
                            form.find(v._jsInputGroup).find(v._jsInputError).show();
                        } else {
                            let searchInput = '[name="' + key + '"]';

                            form.find(searchInput).closest(v._jsInputGroup).find(v._jsInputError).html(value[0]);
                            form.find(searchInput).closest(v._jsInputGroup).find(v._jsInputError).show();
                        }
                    });
                }
            },
            complete: function() {
                if(this.disable) {
                    this.disable.unbind('click');
                }

                if(this.loader) {
                    Ridex.Ajax.loader('off');
                }

                if(this.loaderOnForm) {
                    Ridex.Ajax.loader.form('off');
                    window.grecaptchaCallBack();
                }

                if(this.loaderOnFile) {
                    Ridex.Ajax.loader.file('off', form);
                }
            }
        });
    };

    Ridex.Ajax.loader = function (status) {
        let v = Ridex.v;

        if(status === 'on') {
            $('body').prepend('' +
                '<div class="main-loader _js-main-loader">' +
                    '<svg class="loader _js-loader" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\n' +
                        '\t viewBox="0 0 532 466" style="enable-background:new 0 0 532 466;" xml:space="preserve">\n' +
                        '<path d="M158.1,301.1L0.7,465.3h91.4l111.7-115.5l103.6,115.5h91.4L249.5,301.1l282-300.6h-91.4L203.8,252.4L92.1,133.3H0.7\n' +
                        '\tL158.1,301.1z"/>\n' +
                    '</svg>' +
                '</div>' +
            '');

            $(v._jsMainLoader).find(v._jsLoader).show();
        }

        if(status === 'off') {
            $(v._jsMainLoader).remove();
        }
    };

    Ridex.Ajax.loader.form = function (status, $form) {
        let v = Ridex.v;

        if(status === 'on') {
            $form.before("<div class=\"_js-main-loader\">" +
                "<img class=\"loader loader--block _js-loader\" src=\"/assets/images/rdx_loader.svg\" />" +
            "</div>");

            $(v._jsMainLoader).find(v._jsLoader).show();
        }

        if(status === 'off') {
            $(v._jsMainLoader).remove();
        }
    };

    Ridex.Ajax.loader.file = function (status, $form) {
        let v = Ridex.v,
            spriteFileUrl = '/assets/images/icon-sprite-bw.svg',
            downloadIconUrl = spriteFileUrl + '#sprite-download-bw',
            loaderIconUrl = spriteFileUrl + '#sprite-loader-icon-bw',
            completeIconUrl = spriteFileUrl + '#sprite-circle-check-icon-bw';

        if(status === 'on') {
            $form.find(v._jsQuickOrderPageField)
                .removeClass('quick-order-page__field--complete')
                .addClass('quick-order-page__field--loader');

            $form.find('input[type=file]').next().find('use').attr('xlink:href', loaderIconUrl);
        }

        if(status === 'off') {
            $form.find(v._jsQuickOrderPageField)
                .removeClass('quick-order-page__field--complete')
                .removeClass('quick-order-page__field--loader');

            $form.find('input[type=file]').next().find('use').attr('xlink:href', downloadIconUrl);
        }

        if(status === 'complete') {
            $form.find(v._jsQuickOrderPageField)
                .removeClass('quick-order-page__field--loader')
                .addClass('quick-order-page__field--complete');

            $form.find('input[type=file]').next().find('use').attr('xlink:href', completeIconUrl);
        }
    };

    Ridex.Ajax.disableClickOnElement = function (obj){
        obj.bind('click', function(){
            return false;
        });
    };

    Ridex.Ajax.loadVerifyPopup = function () {
        let v = Ridex.v;

        if ($(v._jsPopupVerify).length) {
            Ridex.fadeIn($(v._jsPopupVerify));
        } else {
            $.ajax({
                url: '/ajax/load/popup/auth.verify',
                dataType: 'json',
                type: "POST",
                success: function (response) {
                    $(v._jsPopupSiteWrapper).append(response.popup);
                    Ridex.fadeIn($(v._jsPopupVerify));
                }
            });
        }

        return true;
    }

    Ridex.Ajax.loadVerifySuccessPopup = function () {
        let v = Ridex.v;

        if($(v._jsPopupVerifySuccess).length) {
            Ridex.fadeIn($(v._jsPopupVerifySuccess));
        } else {
            $.ajax({
                url: '/ajax/load/popup/auth.verifySuccess',
                dataType: 'json',
                type: "POST",
                success: function (response) {
                    $(v._jsPopupSiteWrapper).append(response.popup);
                    Ridex.fadeIn($(v._jsPopupVerifySuccess));
                }
            });
        }
    };

    Ridex.Ajax.loadEmailVerifyCheck = function () {
        if (window.Laravel.globalUser.email_verified_at) {
            return 1;
        }

        let result = 0;

        $.ajax({
            url: '/ajax/emailVerifyCheck',
            context: {
                loader: true
            },
            async: false,
            dataType: 'json',
            type: "POST",
            success: function (response) {
                result = response.success;
            }
        });

        return result;
    };

    Ridex.Ajax.loadFirstVisitedRoute = function (routeName) {
        $.ajax({
            url: '/ajax/getFirstVisitedRoute',
            context: {
                loader: true
            },
            data: {
                routeName: routeName
            },
            dataType: 'json',
            type: "GET",
            success: function(response) {}
        });
    };

    Ridex.Ajax.loadVatRequiredPopup = function () {
        let v = Ridex.v;

        if($(v._jsPopupVatRequired).length) {
            Ridex.fadeIn($(v._jsPopupVatRequired));
        } else {
            $.ajax({
                url: '/ajax/load/popup/vat.vatRequired',
                context: {
                    loader: true
                },
                dataType: 'json',
                type: "POST",
                success: function (response) {
                    $(v._jsPopupSiteWrapper).append(response.popup);
                    Ridex.fadeIn($(v._jsPopupVatRequired));
                }
            });
        }
    }

    Ridex.Ajax.loadWaitVerifyVatPopup = function () {
        let v = Ridex.v;

        if($(v._jsPopupWaitVerifyVat).length) {
            $(v._jsPopupWaitVerifyVat).fadeIn(500);
        } else {
            $.ajax({
                url: '/ajax/load/popup/vat.waitVerifyVat',
                context: {
                    loader: true
                },
                dataType: 'json',
                type: "POST",
                success: function (response) {
                    $(v._jsPopupSiteWrapper).append(response.popup);
                    Ridex.fadeIn($(v._jsPopupWaitVerifyVat));
                }
            });
        }
    }

    Ridex.Ajax.loadVatSuccessPopup = function () {
        let v = Ridex.v;

        if($(v._jsPopupVatSuccess).length) {
            $(v._jsPopupVatSuccess).fadeIn(500);
        } else {
            $.ajax({
                url: '/ajax/load/popup/vat.vatSuccess',
                dataType: 'json',
                type: "POST",
                success: function (response) {
                    $(v._jsPopupSiteWrapper).append(response.popup);
                    Ridex.fadeIn($(v._jsPopupVatSuccess));
                }
            });
        }
    };

    Ridex.Ajax.loadSignInPopup = function (redirectUrl) {
        redirectUrl = redirectUrl || null;
        let v = Ridex.v;

        if($(v._jsPopupSignIn).length) {
            Ridex.fadeIn($(v._jsPopupSignIn));
        } else {
            $.ajax({
                url: '/ajax/load/popup/auth.signIn',
                context: {
                    loader: true
                },
                dataType: 'json',
                type: "GET",
                success: function (response) {
                    $(v._jsPopupSiteWrapper).append(response.popup);
                    Ridex.fadeIn($(v._jsPopupSignIn));
                    $(v._jsPopupSignIn).find('input[name="redirectUrl"]').val(redirectUrl)
                }
            });
        }
    };

    Ridex.Ajax.loadForgotPasswordPopup = function (){
        let v = Ridex.v;

        if( $(v._jsPopupForgotPassword).length) {
            Ridex.fadeIn($(v._jsPopupForgotPassword));
        } else {
            $.ajax({
                url: '/ajax/load/popup/auth.forgotPassword',
                context: {
                    loader: true
                },
                dataType: 'json',
                type: "GET",
                success: function (response) {
                    $(v._jsPopupSiteWrapper).append(response.popup);
                    Ridex.fadeIn($(v._jsPopupForgotPassword));
                }
            });
        }
    };

    Ridex.Ajax.loadForgotSuccess  = function() {
        let v = Ridex.v;

        $.ajax({
            url: '/ajax/load/popup/auth.forgotSuccess',
            context: {
                loader: true
            },
            dataType: 'json',
            type: "POST",
            success: function (response) {
                $(v._jsPopupSiteWrapper).append(response.popup);
                Ridex.fadeIn($(v._jsPopupForgotSuccess));
            }
        });
    };

    Ridex.Ajax.loadPageThanksPopup = function (dataAttribute) {
        let v = Ridex.v;

        if($(v._jsPopupTanks).length) {
            $(v._jsPopupTanks).fadeIn(500);
        } else {
            $.ajax({
                url: '/ajax/load/popup/pageThanks',
                context: {
                    loader: true
                },
                dataType: 'json',
                type: "POST",
                success: function (response) {
                    $(v._jsPopupSiteWrapper).append(response.popup);
                    Ridex.fadeIn($(v._jsPopupTanks));

                    if(dataAttribute) {
                        $(v._jsPopupSiteWrapper).find('.popup__body').attr(dataAttribute, '');
                    }
                }
            });
        }
    };

    Ridex.Ajax.loadDefaultPopup = function (msg = '', title = '') {
        let v = Ridex.v;

        if ($(v._jsPopupDefault).length) {
            $(v._jsPopupDefault).fadeIn(500);
        } else {
            $.ajax({
                url: '/ajax/load/popup/default',
                context: {
                    loader: true
                },
                data: {msg:msg, title:title},
                dataType: 'json',
                type: "POST",
                success: function (response) {
                    $(v._jsPopupSiteWrapper).append(response.popup);
                    Ridex.fadeIn($(v._jsPopupDefault));
                }
            });
        }
    };

    Ridex.Ajax.loadBackOrderConfirmDeletePopup = function (qty='') {
        let v = Ridex.v;

        if ($('._js-popup-cart-products-delete-selected').length) {
            $('._js-popup-cart-products-delete-selected').fadeIn(500);
        } else {
            $.ajax({
                url: '/ajax/load/popup/back-order',
                context: {
                    loader: true
                },
                data: {qty:qty},
                dataType: 'json',
                type: "POST",
                success: function (response) {
                    $(v._jsPopupSiteWrapper).append(response.popup);
                    Ridex.fadeIn($(v._jsPopupDefault));
                }
            });
        }
    };

    Ridex.Ajax.loadSubmissionPopup = function () {
        let v = Ridex.v;

        if($(v._jsPopupFormSubmission).length) {
            $(v._jsPopupFormSubmission).fadeIn(500);
        } else {
            $.ajax({
                url: '/ajax/load/popup/submission',
                context: {
                    loader: true
                },
                dataType: 'json',
                type: "POST",
                success: function (response) {
                    $(v._jsPopupSiteWrapper).append(response.popup);
                    Ridex.fadeIn($(v._jsPopupFormSubmission));
                }
            });
        }
    };

    Ridex.Ajax.loadCartProductsDeleteSelectedPopup = function () {
        let v = Ridex.v;

        if($(v._jsPopupCartProductsDeleteSelected).length) {
            Ridex.fadeIn($(v._jsPopupCartProductsDeleteSelected));
        } else {
            $.ajax({
                url: '/ajax/load/popup/basket.productsDeleteSelected',
                context: {
                    loader: true
                },
                dataType: 'json',
                type: "GET",
                success: function (response) {
                    $(v._jsPopupSiteWrapper).append(response.popup);
                    Ridex.fadeIn($(v._jsPopupCartProductsDeleteSelected));
                }
            });
        }
    };

    Ridex.Ajax.loadCartProductsDeleteAllPopup = function () {
        let v = Ridex.v;

        if($(v._jsPopupCartProductsDeleteAll).length) {
            Ridex.fadeIn($(v._jsPopupCartProductsDeleteAll));
        } else {
            $.ajax({
                url: '/ajax/load/popup/basket.productsDeleteAll',
                context: {
                    loader: true
                },
                dataType: 'json',
                type: "GET",
                success: function (response) {
                    $(v._jsPopupSiteWrapper).append(response.popup);
                    Ridex.fadeIn($(v._jsPopupCartProductsDeleteAll));
                }
            });
        }
    };

    Ridex.Ajax.loadCartCurrentDataPopup = function (){
        let v = Ridex.v,
            $cartBlock = $(v._jsHeaderCart),
            url = $cartBlock.data('url');

        $.ajax({
            url: url,
            dataType: 'json',
            type: "GET",
            success: function(response) {
                if(!response.success){
                    return false;
                }

                if(!$cartBlock.hasClass('active')){
                    $cartBlock.addClass('active');
                }

                if(!$cartBlock.find(v._jsHeaderCartDropdown).length){
                    $cartBlock.append(response.popup);
                } else {
                    $cartBlock.find(v._jsHeaderCartDropdown).replaceWith(response.popup);
                }

                $cartBlock.find(v._jsHeaderCartDropdown)
                    .addClass('active')
                    .show();

                if($cartBlock.hasClass('active')){
                    setTimeout(function() {
                        $cartBlock.removeClass('active');
                        $cartBlock.find(v._jsHeaderCartDropdown)
                            .removeAttr('style')
                            .removeClass('active');

                    }, 4000);

                    const animatedBlock = $(v._jsHeaderCart);

                    function isElementInViewport(element) {
                        const rect = element[0].getBoundingClientRect();
                        return (
                            rect.top >= 0 &&
                            rect.left >= 0 &&
                            rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
                            rect.right <= (window.innerWidth || document.documentElement.clientWidth)
                        );
                    }

                    function performAction() {
                        if (isElementInViewport(animatedBlock)) {
                            $cartBlock.find(v._jsHeaderCartDropdown)
                                .removeClass('active');
                        }
                    }

                    $(window).on('scroll', performAction);
                }
            }
        });
    }

    Ridex.Ajax.loadCartAddressSavePopup = function (obj) {
        let v = Ridex.v,
            url = obj.data('url');

        $.ajax({
            url: url,
            context: {
                loader: true
            },
            dataType: 'json',
            type: "GET",
            success: function (response) {
                $(v._jsPopupSiteWrapper).html(response.popup);
                Ridex.fadeIn($(v._jsPopupCartAddressSave));
            }
        });
    };

    Ridex.Ajax.loadCabinetContactPersonPopup = function (obj) {
        let v = Ridex.v,
            url = obj.data('url');

        $.ajax({
            url: url,
            context: {
                loader: true
            },
            dataType: 'json',
            type: "GET",
            success: function (response) {
                $(v._jsPopupSiteWrapper).html(response.popup);
                Ridex.fadeIn($(v._jsPopupCabinetContactPersonSave));
            }
        });
    };

    Ridex.Ajax.loadCabinetContactDetailsPopup = function (obj) {
        let v = Ridex.v,
            url = obj.data('url');

        $.ajax({
            url: url,
            context: {
                loader: true
            },
            dataType: 'json',
            type: "GET",
            success: function (response) {
                $(v._jsPopupSiteWrapper).html(response.popup);
                Ridex.fadeIn($(v._jsPopupCabinetContactDetailsSave));
            }
        });
    };

    Ridex.Ajax.loadCabinetAddressPopup = function (obj) {
        let v = Ridex.v,
            url = obj.data('url');

        $.ajax({
            url: url,
            context: {
                loader: true
            },
            dataType: 'json',
            type: "GET",
            success: function (response) {
                $(v._jsPopupSiteWrapper).html(response.popup);
                Ridex.fadeIn($(v._jsPopupCabinetAddressSave));
            }
        });
    };

    Ridex.Ajax.loadWishlistAddPopup = function () {
        let v = Ridex.v;

        if($(v._jsPopupWishlistAdd).length) {
            Ridex.fadeIn($(v._jsPopupWishlistAdd));
        } else {
            $.ajax({
                url: '/ajax/load/popup/wishlist.wishlistAdd',
                context: {
                    loader: true
                },
                dataType: 'json',
                type: "POST",
                success: function (response) {
                    $(v._jsPopupSiteWrapper).append(response.popup);
                    Ridex.fadeIn($(v._jsPopupWishlistAdd));
                }
            });
        }

        return true;
    };

    Ridex.Ajax.loadWishlistSelectPopup = function (data) {
        let v = Ridex.v;

        $(v._jsPopupWishlistSelect).remove();

        $.ajax({
            url: data.url,
            context: {
                loader: true
            },
            dataType: 'json',
            type: "POST",
            success: function (response) {
                $(v._jsPopupSiteWrapper).append(response.popup);

                $(v._jsPopupWishlistSelect).attr('data-article-id', data.articleId);
                $(v._jsPopupWishlistSelect).attr('data-generic-id', data.genericId);
                $(v._jsPopupWishlistSelect).attr('data-step', data.step);

                $(v._jsWishlistAddContent).attr('data-article-id', data.articleId);
                $(v._jsWishlistAddContent).attr('data-generic-id', data.genericId);
                $(v._jsWishlistAddContent).attr('data-add-to-wishlist-source', data.eventWishlist);

                Ridex.fadeIn($(v._jsPopupWishlistSelect));
            }
        });

        return true;
    }

    Ridex.Ajax.loadWishlistThanksPopup = function () {
        let v = Ridex.v;

        if($(v._jsPopup).length) {
            Ridex.fadeOut($(v._jsPopup));
        }

        if($(v._jsPopupWishlistThanks).length) {
            Ridex.fadeIn($(v._jsPopupWishlistThanks));
        } else {
            $.ajax({
                url: '/ajax/load/popup/wishlist.wishlistThanks',
                context: {
                    loader: true
                },
                dataType: 'json',
                type: "POST",
                success: function (response) {
                    $(v._jsPopupSiteWrapper).append(response.popup);
                    Ridex.fadeIn($(v._jsPopupWishlistThanks));
                }
            });
        }
    };

    Ridex.Ajax.loadWishlistProductsDeleteSelectedPopup = function (wishlistId, url) {
        let v = Ridex.v;

        if($(v._jsPopupWishlistProductsDeleteSelected).length) {
            Ridex.fadeIn($(v._jsPopupWishlistProductsDeleteSelected));
        } else {
            $.ajax({
                url: '/ajax/load/popup/wishlist.productsDeleteSelected',
                context: {
                    loader: true
                },
                dataType: 'json',
                type: "GET",
                success: function (response) {
                    $(v._jsPopupSiteWrapper).append(response.popup);
                    $(v._jsPopupWishlistProductsDeleteSelected).attr('data-wishlist-id', wishlistId);
                    $(v._jsWishlistProductDeleteSelectedConfirmation).attr('data-url', url);
                    Ridex.fadeIn($(v._jsPopupWishlistProductsDeleteSelected));
                }
            });
        }
    };

    Ridex.Ajax.loadSubscribeToWishlistPopup = function (url) {
        let v = Ridex.v;

        if($(v._jsPopupSubscribeToWishlist).length) {
            Ridex.fadeIn($(v._jsPopupSubscribeToWishlist));
        } else {
            $.ajax({
                url: '/ajax/load/popup/wishlist.subscribeToWishlist',
                context: {
                    loader: true
                },
                dataType: 'json',
                type: "POST",
                success: function (response) {
                    $(v._jsPopupSiteWrapper).append(response.popup);
                    $(v._jsPopupSubscribeToWishlist).find('form').attr('action', url);

                    Ridex.fadeIn($(v._jsPopupSubscribeToWishlist));
                }
            });
        }
    };

    Ridex.Ajax.loadSubscribeToProductPopup = function (obj, articleId) {
        let v = Ridex.v;

        $.ajax({
            url: '/ajax/load/popup/wishlist.subscribeToProduct',
            context: {
                loader: true
            },
            dataType: 'json',
            type: "POST",
            success: function (response) {
                $(v._jsPopupSiteWrapper).html(response.popup);
                $(v._jsPopupSubscribeToProduct).find('form').prepend('<input type="hidden" name="articleId" value="'+articleId+'" />');
                Ridex.fadeIn($(v._jsPopupSubscribeToProduct));
            }
        });
    };

    Ridex.Ajax.loadSubAccountsAddPopup = function (obj) {
        let v = Ridex.v;

        if($(v._jsPopupSubAccountsAdd).length) {
            Ridex.fadeIn($(v._jsPopupSubAccountsAdd));
        } else {
            $.ajax({
                url: '/ajax/load/popup/cabinet.subAccountAdd',
                context: {
                    disable: obj,
                    loader: true
                },
                dataType: 'json',
                type: "GET",
                success: function (response) {
                    $(v._jsPopupSiteWrapper).append(response.popup);
                    Ridex.fadeIn($(v._jsPopupSubAccountsAdd));
                }
            });
        }
    };

    Ridex.Ajax.loadSubAccountsEditPopup = function (obj, url) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            dataType: 'json',
            type: "GET",
            success: function (response) {
                $(v._jsPopupSiteWrapper).html(response.popup);
                Ridex.fadeIn($(v._jsPopupSubAccountsEdit));
            }
        });
    };

    Ridex.Ajax.loadSubAccountsOrderPopup = function (obj, url) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            dataType: 'json',
            type: "GET",
            success: function (response) {
                $(v._jsPopupSiteWrapper).html(response.popup);
                Ridex.fadeIn($(v._jsPopupSubAccountsOrder));
            }
        });
    };

    Ridex.Ajax.loadQuickOrderAddictionPopup = function (className, context) {
        let v = Ridex.v;

        $(v._jsQuickOrderPageError).html('');
        $(v._jsPopupQuickOrderAddiction).remove();

        $.ajax({
            url: '/ajax/load/popup/quickOrder.addiction',
            context: context,
            dataType: 'json',
            type: "GET",
            success: function (response) {
                $(v._jsPopupSiteWrapper).append(response.popup);
                Ridex.fadeIn($(v._jsPopupQuickOrderAddiction));
                $(v._jsPopupQuickOrderAddiction).find('*[data-addiction]').addClass(className);

                if(className === Ridex.pureClassName(v._jsQuickOrderPageAdditionFile)){
                    Ridex.Ajax.loader.file('off', $(v._jsQuickOrderPageFile));
                }
            }
        });
    };

    Ridex.Ajax.loadQuickOrderDeleteSelectedPopup = function () {
        let v = Ridex.v;

        if($(v._jsPopupQuickOrderItemsDeleteSelected).length) {
            Ridex.fadeIn($(v._jsPopupQuickOrderItemsDeleteSelected));
        } else {
            $.ajax({
                url: '/ajax/load/popup/quickOrder.productsDeleteSelected',
                context: {
                    loader: true
                },
                dataType: 'json',
                type: "GET",
                success: function (response) {
                    $(v._jsPopupSiteWrapper).append(response.popup);
                    Ridex.fadeIn($(v._jsPopupQuickOrderItemsDeleteSelected));
                }
            });
        }
    };

    Ridex.Ajax.loadQuickOrderDeleteAllPopup = function () {
        let v = Ridex.v;

        if($(v._jsPopupQuickOrderItemsDeleteAll).length) {
            Ridex.fadeIn($(v._jsPopupQuickOrderItemsDeleteAll));
        } else {
            $.ajax({
                url: '/ajax/load/popup/quickOrder.productsDeleteAll',
                context: {
                    loader: true
                },
                dataType: 'json',
                type: "GET",
                success: function (response) {
                    $(v._jsPopupSiteWrapper).append(response.popup);
                    Ridex.fadeIn($(v._jsPopupQuickOrderItemsDeleteAll));
                }
            });
        }
    };

    Ridex.Ajax.loadAfterClickJsProductPlayPopup = function (articleId, video) {
        let v = Ridex.v;

        Ridex.fadeOut($(v._jsPopup));

        if($(v._jsPopupProductVideo).length) {
            Ridex.fadeIn($(v._jsPopupProductVideo));
        } else {
            $.ajax({
                url: '/ajax/load/popup/product-video',
                data: {
                    articleId: articleId,
                    videoId: video
                },
                context: {
                    loader: true
                },
                dataType: 'json',
                type: "GET",
                success: function (response) {
                    $(v._jsPopupSiteWrapper).append(response.popup);
                    Ridex.fadeIn($(v._jsPopupProductVideo));
                }
            });
        }
    };

    Ridex.Ajax.loadDataDocumentLangsPopup = function (documentId) {
        let v = Ridex.v;

        $.ajax({
            url: '/ajax/load/popup/document-languages',
            data: {documentId: documentId},
            context: {
                loader: true
            },
            dataType: 'json',
            type: "GET",
            success: function (response) {
                $(v._jsPopupSiteWrapper).html(response.popup);
                Ridex.fadeIn($(v.dataPopupDocumentLangs));
            }
        });
    };

    Ridex.Ajax.loadCartUpdatePrice = function (obj, url, qty) {
        var temporaryBackOrderQty = obj.closest('.item-buy__backorder').find('.backOrderQty').val();
        $.ajax({
            url: url,
            data: {qty:qty, boQty:temporaryBackOrderQty},
            context: {
                loader: true
            },
            dataType: 'json',
            type: "POST",
            success: function (response) {
                if (response.success) {
                    Ridex.Cart.refreshCartBlocks(response);
                    obj.closest('.item-buy').find('._js-amount-input-cart').val(response.data.productBlock.qty);
                    obj.closest('.item-buy').find('.item-buy__total span').text(response.data.productBlock.total);
                    obj.closest('.item-buy').find('.item-buy__single span').text(response.data.productBlock.price);
                    // obj.closest('.item-buy').html(response.data.productBlock);
                    obj.closest('.item-buy').find('.product-amount__tooltip').remove();
                }
            }
        });
    };

    Ridex.Ajax.loadQuickOrderUpdatePrice = function (url, qty) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            data: {qty:qty},
            context: {
                loader: true
            },
            dataType: 'json',
            type: "POST",
            success: function (response) {
                if(response.success){
                    $(v._jsQuickOrderPageItems).html(response.view);
                }
            }
        });
    };

    Ridex.Ajax.loadAfterClickPopupVerifyButton = function (obj, url) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            dataType: 'json',
            type: "POST",
            success: function(response) {
                obj.closest(v._jsPopupVerify).find(v._jsPopupBodyDescription).text(response.message);
                obj.closest(v._jsPopupBodyButton).remove();
            }
        });
    };

    Ridex.Ajax.loadAfterClickPopupUnsubscribeOrSubscribeUpdate = function (obj, url) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            dataType: 'json',
            type: "POST",
            success: function(response) {
                $(v._jsPopupSiteWrapper).append(response.popup);
                Ridex.fadeIn($(v._jsPopupTanks));

                $('._js-popup-close').click(function (){
                    if(response.redirect) {
                        window.location = response.redirect;
                    }
                });
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsCategoriesItem = function (obj, url, categoryId, level, makerId, modelId, carId) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            data: {
                categoryId: categoryId,
                level: level,
                maker: makerId,
                model: modelId,
                car: carId
            },
            context: {
                disable: obj,
                loader: true
            },
            dataType: 'json',
            type: "GET",
            success: function(response) {
                obj.find(v._jsCategoriesItemPopup).html(response.categoriesPopupHtml);
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsFormSelectCustomListItem = function (obj, url, selector) {
        let v = Ridex.v,
            selectorNext = selector.next(),
            selectorNextAll = selector.nextAll();

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            dataType: 'json',
            type: "GET",
            success: function(response) {
                if(response.select){
                    if(selectorNext.hasClass(Ridex.pureClassName(v._jsFormSelectCustom))){
                        selectorNext.html(response.select);
                    } else {
                        $('<div class="'+selector.attr('class')+' '+Ridex.pureClassName(v._jsUploadedSelector)+'">'
                            +response.select+
                        '</div>').insertAfter(selector)
                    }
                }
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsCatalogMenuItemLink = function (obj, level, categoryId, mainCategoryAlias, currencyUrlToolsPage) {
        let v = Ridex.v;

        $.ajax({
            url: '/ajax/catalog/menuLoad',
            data: {
                level: level,
                categoryId: categoryId,
                mainCategoryAlias: mainCategoryAlias
            },
            context: {
                disable: obj,
                loader: true
            },
            dataType: 'JSON',
            type: "GET",
            global: false,
            success: function(response) {
                if (response.success && response.subcategoryHtml.length) {
                    obj.addClass('check');

                    if(level === 2){
                        obj.closest(v._jsHeaderCatalogMenu)
                            .find(v._jsCatalogMenuSub)
                            .append(response.subcategoryHtml)
                            .show();
                        if ($(window).width() < '700') {
                            $(v._jsCatalogMenuPopular).hide();
                        }
                    }

                    if(level === 3 || level === 4){
                        if ($(window).width() > '700') {
                            obj.closest(v._jsCatalogMenuSubRow).append(response.subcategoryHtml);
                        } else {
                            $(response.subcategoryHtml).insertAfter(obj.closest(v._jsCatalogMenuSubItem));
                            $('._js-catalog-menu__popular').hide();
                        }
                        obj.addClass('active');

                    }
                }
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsSignInFormButton = function (obj, form, url, data, redirectUrl) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            data: data,
            context: {
                disable: obj,
                loaderOnForm: true,
                form: form
            },
            dataType: 'json',
            type: "POST",
            success: function(response) {
                dataLayer.push({
                    'event':'Autorization_form',
                    'form_action':'success',
                    'user_id': response.id
                });

                if (window.location.hash) {
                    if(window.location.hash !== '#vatRequired' && window.location.hash !== '#verify') {
                        window.location.hash = '';
                    }
                }

                if(redirectUrl){
                    window.location.href = redirectUrl;
                } else {
                    location.reload();
                }
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsSignUpFormButton = function (obj, form, url, data) {
        $.ajax({
            url: url,
            data: data,
            context: {
                disable: obj,
                loaderOnForm: true,
                form: form
            },
            dataType: 'json',
            type: "POST",
            success: function(response) {
                let successSubscr = $("._js-check-box.subscr input").is(":checked") ? 'success%subscr' : 'success%no_subscr';

                dataLayer.push({
                    'event':'Registration_form',
                    'form_action': successSubscr,
                    'user_id': response.id
                });

                Ridex.Ajax.loadSubmissionPopup();

                form.trigger("reset");

                if (response.redirect) {
                    window.location = response.redirect;
                }
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsForgotPasswordFormButton = function (obj, form, url, data) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            data: data,
            context: {
                disable: obj,
                loaderOnForm: true,
                form: form
            },
            dataType: 'json',
            type: "POST",
            success: function() {
                if($(v._jsPopupForgotSuccess).length){
                    $(v._jsPopupForgotSuccess).fadeIn(500);
                } else {
                    Ridex.Ajax.loadForgotSuccess();
                }

                Ridex.fadeOut($(v._jsForgotPassword));

                dataLayer.push({
                    'event':'Forgot_password_form',
                    'form_action':'success'
                });

                form.trigger("reset");
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsMarketingKitDownload = function (obj, url) {
        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            dataType: 'json',
            type: "GET",
            success: function(response) {
                if(response.success){
                    let interval = setInterval(download, 300, response.links);

                    function download(urls) {
                        let url = urls.pop();

                        let a = document.createElement("a");
                        a.setAttribute('href', url);
                        a.setAttribute('download', '');
                        a.setAttribute('target', '_blank');
                        a.click();

                        if (urls.length == 0) {
                            clearInterval(interval);
                        }
                    }
                }
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsSendFormFooter = function (obj, form, url, data) {
        $.ajax({
            url: url,
            data: data,
            context: {
                disable: obj,
                loader: true,
                form: form
            },
            dataType: 'json',
            type: "POST",
            success: function() {
                dataLayer.push({
                    'event':'Footer_subscribe_form',
                    'subscribe_action':'success'
                });

                form.trigger("reset");
                Ridex.Ajax.loadPageThanksPopup();
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsSendFormFeedback = function (obj, form, url, data) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            data: data,
            context: {
                disable: obj,
                loaderOnForm: true,
                form: form
            },
            contentType: false,
            processData: false,
            dataType: 'json',
            type: "POST",
            success: function() {
                let successSubscribe,
                    mainQuestionId = 0;

                if($(v._jsCheckBoxSubscribe + " input").is(":checked")) {
                    successSubscribe = 'success%subscr';
                } else {
                    successSubscribe = 'success%no_subscr';
                }

                $('.jq-selectbox__dropdown ul li').each(function(index, value) {
                    if($(this).hasClass('selected')) {
                        mainQuestionId = index + 1;
                    }
                });

                dataLayer.push({
                    'event':'Contact_form',
                    'form_action': successSubscribe,
                    'question_id': mainQuestionId
                });

                form.trigger("reset");
                form.find(v._jsAttachFile).closest(v._jsInputGroup).find(v._jsInputText).text('');
                Ridex.Ajax.loadPageThanksPopup('data-contact-form-success');
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsSendFormB2b = function (obj, form, url, data) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            data: data,
            context: {
                disable: obj,
                loaderOnForm: true,
                form: form
            },
            dataType: 'json',
            type: "POST",
            success: function() {
                dataLayer.push({
                    event: 'become-a-partner_form',
                    event_action: 'success_form_sent',
                    parameters: {
                        'route': window.Laravel.currentUrl
                    }
                });

                form.trigger("reset");
                Ridex.Ajax.loadPageThanksPopup('data-partner-request-success');
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsOtherCarsName = function (obj, url) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            dataType: 'json',
            type: "GET",
            success: function(response) {
                obj.next(v._jsProduct__OtherCarsAccordion).html(response.data);
                obj.next().slideToggle('slow');
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsAddToCart = function(obj, url, qty) {
        let v = Ridex.v;

        $.ajax({
            url: url + '/' + qty,
            context: {
                disable: obj,
                loader: true
            },
            dataType: 'json',
            type: "POST",
            success: function (response) {
                Ridex.Ajax.loadCartCurrentDataPopup();
                Ridex.Cart.refreshCartBlocks(response);
                $(v._jsTotalPrice).find('span').html(response.data.totalPrice.total);
                window.JsVars.cart_count = response.data.productsCount;
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsCartProductDelete = function (obj, url) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            dataType: 'json',
            type: "POST",
            success: function (response) {
                obj.closest(v._jsCartProduct).fadeOut(400, function () {
                    obj.detach();
                });

                Ridex.Cart.refreshCartBlocks(response);
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsCartProductDeleteConfirmation = function (obj, url, articleIds) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            data: {
                articleIds: articleIds
            },
            dataType: 'json',
            type: "POST",
            success: function (response) {
                Ridex.fadeOut($(v._jsPopupCartProductsDeleteSelected));
                $(v._jsPopupCartProductsDeleteSelected).delay(1000).remove();

                Ridex.Cart.refreshCartBlocks(response);

                articleIds.forEach(function (articleId) {
                    $('[data-itemid="' + articleId + '"]').remove();
                })
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsCartProductDeleteAllConfirmation = function (obj, url) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            dataType: 'json',
            type: "POST",
            success: function (response) {
                Ridex.fadeOut($(v._jsPopupCartProductsDeleteAll));
                Ridex.Cart.refreshCartBlocks(response);
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsPalletCalculateButton = function (obj, url) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            dataType: 'json',
            type: "POST",
            success: function (response) {
                if (response.success) {
                    $(v._jsPalletsResult).html(response.palletsResult);
                    obj.replaceWith('<span>' + response.palletsCount + '</span>');
                }
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsCartAddressButton = function (obj, form, url, data) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loaderOnForm: true,
                form: form
            },
            data: data,
            dataType: 'json',
            type: "POST",
            success: function (response) {
                Ridex.fadeOut($(v._jsPopupCartAddressSave));
                $(v._jsPopupCartAddressSave).delay(1000).remove();

                $(v._jsCartPageAddresses).html(response.addressesView);
            }
        });
    };

    Ridex.Ajax.loadAfterUpdateWishlistPrice = function (url, wishBlock, wishItemBlock) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                loader: true
            },
            data: {
                qty: qty
            },
            dataType: 'json',
            type: "POST",
            success: function(response) {
                let wish = response.wish;

                wishBlock.find(v._jsGrandQty).html(wish.totalQty);
                wishItemBlock.find(v._jsWishProductTotal).html(wish.item.totalPrice);
                wishBlock.find(v._jsGrandTotal).html(wish.grandTotal);
                $('.wishlistQty').html(response.grandQty);
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsWishlistNew = function (obj, url, articleId, genericId, step, active, storageQty) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            data: {
                articleId: articleId,
                step: step
            },
            dataType: 'json',
            type: "POST",
            success: function(response) {
                if(window.Laravel.auth){
                    if (active) {
                        Ridex.Wishlist.updateIconAndXlink(obj, 'remove');
                        $(v._jsWishlistAddContent).html(response.wishlistView);
                    } else if(storageQty < 1) {
                        Ridex.Wishlist.updateIconAndXlink(obj, 'add');

                        if (!$(v._jsQuickOrderPage).length) {
                            Ridex.Ajax.loadWishlistThanksPopup();
                        }

                        dataLayer.push({
                            'event':'Add_to_Wishlist_success',
                            'event_object': obj.data('event-object'),
                            'generic_id': genericId,
                            'article_id': articleId
                        });
                    }
                }
            },
            error:function(response) {
                $(v._jsErrorMessagesBlock).html(response.responseJSON.errorsHtml);
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsWishlistFormButton = function (obj, form, url, data) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loaderOnForm: true,
                form: form
            },
            data: data,
            dataType: 'json',
            type: "POST",
            success: function(response) {
                dataLayer.push({
                    'event':'Wishlist',
                    'wishlist_action':'add_new'
                });
                $(v._jsWishlistAddContent).append(response.wishlistOne);
                $(v._jsWishGroupAdd + ' input').val('');

                if($(v._jsPopupWishlistAdd).length) {
                    Ridex.fadeOut($(v._jsPopupWishlistAdd));
                    $(v._jsPopupWishlistAdd).delay(1000).remove();
                }
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsAddItemToWishlist = function (obj, url, articleId, genericId, step) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loaderOnForm: true,
                form: $(v._jsNewWishlistForm)
            },
            data: {
                articleId: articleId,
                step: step
            },
            dataType: 'json',
            type: "POST",
            success: function(response) {
                dataLayer.push({
                    'event':'Add_to_Wishlist_success',
                    'event_object': obj.data('event-object'),
                    'generic_id': genericId,
                    'article_id': articleId
                });

                obj.find(v._jsWishGroupAmount).find(v._jsQty).html(response.wishlistData.grandQty);
                obj.find(v._jsWishGroupDate).find(v._jsDate).html(response.wishlistData.updated_at);

                Ridex.Wishlist.updateIconAndXlink($(v._jsWishlistNew + '[data-article-id='+articleId+']'), 'add');

                $(v._jsWishlistAddContent).html(response.wishlistView);

                if (!$(v._jsQuickOrderPage).length) {
                    Ridex.Ajax.loadWishlistThanksPopup();
                }
            },
            error:function(response) {
                $(v._jsErrorMessagesBlock).html(response.responseJSON.errorsHtml);
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsWishlistProductDelete = function (obj, url) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            dataType: 'json',
            type: "POST",
            success: function (response) {
                obj.closest(v._jsWishlistItemBuy).fadeOut(400, function () {
                    $(this).remove();
                });

                setTimeout(function () {
                    Ridex.Wishlist.refreshWishlistBlocks(response);
                }, 500);
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsWishlistProductDeleteConfirmation = function (obj, url, wishlistId, articleIds) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            data: {
                wishlistId: wishlistId,
                articleIds: articleIds
            },
            dataType: 'json',
            type: "POST",
            success: function (response) {
                Ridex.fadeOut($(v._jsPopupWishlistProductsDeleteSelected));
                $(v._jsPopupWishlistProductsDeleteSelected).delay(1000).remove();

                Ridex.Wishlist.refreshWishlistBlocks(response);
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsAddToSpecialWishlist = function (obj, url, qty) {
        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            data: {
                qty: qty
            },
            dataType: 'json',
            type: "POST",
            success: function() {
                Ridex.Ajax.loadWishlistThanksPopup();
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsSpecialSubscribeToProduct = function (obj, form, url, data, articleId) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loaderOnForm: true,
                form: form
            },
            data: data,
            dataType: 'json',
            type: "POST",
            success: function() {
                Ridex.fadeOut($(v._jsPopupSubscribeToProduct));
                $(v._jsPopupSubscribeToProduct).delay(1000).remove();

                let inputArticle = $(v._jsWishlistItemBuy).find('input[value="'+articleId+'"]');
                if(inputArticle.length) {
                    let itemBuySubscription = inputArticle.closest(v._jsWishlistItemBuy).find(v._jsItemBuySubscription);
                    itemBuySubscription.html(itemBuySubscription.data('subscribed-text'));
                    itemBuySubscription
                        .removeClass(Ridex.pureClassName(v._jsShowSubscribeToProductPopup))
                        .addClass('item-buy__subscription--active')
                }

                Ridex.Ajax.loadPageThanksPopup();

                dataLayer.push({
                    'event':'Wishlist',
                    'wishlist_action':'sent_inform',
                    'generic_id': inputArticle.data('generic-id'),
                    'article_id': articleId
                });
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsSpecialSubscribeByWishlist = function (obj, form, url, data) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loaderOnForm: true,
                form: form
            },
            data: data,
            dataType: 'json',
            type: "POST",
            success: function() {
                let arrArtId= [],
                    arrGaId= [];

                $(v._jsWishlistItemBuy).find('input[name="articleIds"]').each(function () {
                    arrArtId.push($(this).val());
                    arrGaId.push($(this).data('generic-id'));
                });

                $(v._jsWishlistItemBuy).find(v._jsItemBuySubscription).each(function () {
                    $(this).html($(this).data('subscribed-text'));
                    $(this)
                        .removeClass(Ridex.pureClassName(v._jsShowSubscribeToProductPopup))
                        .addClass('item-buy__subscription--active');
                });

                dataLayer.push({
                    'event':'Wishlist',
                    'wishlist_action':'sent_inform',
                    'generic_id': arrGaId.join('%'),
                    'article_id': arrArtId.join('%')
                });

                Ridex.fadeOut($(v._jsPopupSubscribeToWishlist))

                Ridex.Ajax.loadPageThanksPopup();
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsDeleteItemFromSpecialOrTruncate = function (obj, url) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            dataType: 'json',
            type: "POST",
            success: function(response) {
                Ridex.Wishlist.refreshWishlistBlocks(response);
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsSpecialProductToBasket = function (obj, url) {
        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            dataType: 'json',
            type: "POST",
            success: function(response) {
                if (response.success){
                    Ridex.Wishlist.refreshWishlistBlocks(response);
                }
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsSpecialWishlistToBasket = function (obj, url) {
        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            dataType: 'json',
            type: "POST",
            success: function(response) {
                Ridex.Wishlist.refreshWishlistBlocks(response);
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsQuickOrderPageFilterAndSort = function (obj, url) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            type: "GET",
            success: function(response) {
                let quickOrderItems = $(response).find(v._jsQuickOrderPageItems).html();
                $(v._jsQuickOrderPageItems).html(quickOrderItems);
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsQuickOrderPageDeleteItem = function (obj, url) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            dataType: 'json',
            type: "POST",
            success: function(response) {
                let block = obj.closest(v._jsPopupQuickOrderProductsWithProblemsBlock);
                obj.closest(v._jsQuickOrderPageItemBuy).remove();

                if(!block.find(v._jsQuickOrderPageItemBuy).length){
                    block.remove();
                }

                if(response.viewEmpty){
                    Ridex.QuickOrder.setEmptyPageResponse(response);

                    Ridex.fadeOut($(v._jsPopup));
                    $(v._jsPopup).delay(1000).remove();
                } else {
                    Ridex.toggleDisabledByCheckboxes(
                        $(v._jsQuickOrderPageDeleteSelected),
                        $(v._jsQuickOrderPageItemBuy).find('input[name="articleIds"]')
                    );

                    dataLayer.push({
                        'event': 'Quick_order_click',
                        'quick_action': 'delete_1'
                    });
                }
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsTruncateQuickOrder = function (obj, url) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            dataType: 'json',
            type: "POST",
            success: function(response) {
                if (response.redirect) {
                    window.location = response.redirect;
                }

                let checkCount = $(v._jsQuickOrderUnpinProduct + '[type="checkbox"]:checked').length;

                if(obj.hasClass('_js-delete-selected') && checkCount < 2) {
                    dataLayer.push({
                        'event': 'Quick_order_click',
                        'quick_action': 'delete_' + checkCount
                    });
                }
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsSubAccountFormButton = function (obj, form, url, data) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            data: data,
            context: {
                disable: obj,
                loaderOnForm: true,
                form: form
            },
            dataType: 'json',
            type: "POST",
            success: function (response) {
                Ridex.fadeOut($(v._jsPopup));
                $(v._jsPopup).delay(1000).remove();

                if(response.subUserItemView) {
                    $(v._jsSubAccountsTableBody).append(response.subUserItemView);
                }

                if(response.subUserItemsListView) {
                    $(v._jsSubAccountsTableBody).html(response.subUserItemsListView);
                }
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsCabinetContactPersonFormButton = function (obj, form, url, data) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            data: data,
            context: {
                disable: obj,
                loaderOnForm: true,
                form: form
            },
            dataType: 'json',
            type: "POST",
            success: function (response) {
                if(response.success) {
                    Ridex.fadeOut($(v._jsPopup));
                    $(v._jsPopup).delay(1000).remove();

                    $(v._jsCabinetContactPerson).html(response.view);
                }
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsCabinetContactDetailsFormButton = function (obj, form, url, data) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            data: data,
            context: {
                disable: obj,
                loaderOnForm: true,
                form: form
            },
            dataType: 'json',
            type: "POST",
            success: function (response) {
                if(response.success) {
                    Ridex.fadeOut($(v._jsPopup));
                    $(v._jsPopup).delay(1000).remove();

                    $(v._jsCabinetContactDetails).html(response.view);
                }
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsCabinetAddressButton = function (obj, form, url, data) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            data: data,
            context: {
                disable: obj,
                loaderOnForm: true,
                form: form
            },
            dataType: 'json',
            type: "POST",
            success: function (response) {
                if(response.success) {
                    Ridex.fadeOut($(v._jsPopup));
                    $(v._jsPopup).delay(1000).remove();
                    $(v._jsCabinetAddresses).html(response.view);
                }
            }
        });
    };

    Ridex.Ajax.loadAfterKeyupSearchInput = function (url, keyword, searchPopularBlock) {
        $.ajax({
            url: url,
            context: {
                loader: true
            },
            data: {
                keyword: keyword
            },
            dataType: 'json',
            type: "POST",
            success: function (response) {
                searchPopularBlock.html(response.view);
                searchPopularBlock.show();
            }
        });
    };

    Ridex.Ajax.loadAfterMouseenterJsHeaderCart = function (obj, url) {
        $.ajax({
            url: url,
            context: {
                disable: obj
            },
            dataType: 'json',
            type: "GET",
            success: function(response) {
                obj.append(response.popup);
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsConfirmOrder = function (obj, form, url, data) {
        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true,
                form: form
            },
            data: data,
            dataType: 'json',
            type: "POST",
            success: function (response) {
                Ridex.Ajax.disableClickOnElement(obj);
                if (response.success) {
                    dataLayer.push({
                        'event':'Request_price_basket',
                        'parameters': {
                            'order_id': response.parameters.orderId,
                            'value': response.parameters.value,
                            'generic_id': response.parameters.genericArticleIds,
                            'article_id': response.parameters.articleIds
                        }
                    });

                    dataLayer.push({ ecommerce: null });
                    dataLayer.push({
                        event: "purchase",
                        parameters: {
                            basket_id: response.parameters.basketId,
                            route_name: response.parameters.routeName,
                        },
                        ecommerce: {
                            transaction_id: response.parameters.orderId,
                            value: response.parameters.value,
                            shipping: response.parameters.shipping,
                            currency: response.parameters.currency,
                            items: response.parameters.items
                        }
                    });
                } else {
                    Ridex.Ajax.loadDefaultPopup(response.message)
                }
                if (response.redirect) {
                    window.location = response.redirect;
                } else {
                    obj.unbind('click');
                }
            },
            complete: function() {
                Ridex.Ajax.loader('off');
                Ridex.Ajax.loader.form('off');
            }
        });
    };

    Ridex.Ajax.loadAfterChangeJsQuickFileOrderLabel = function (obj, form, url, data) {
        let v = Ridex.v;

        $(v._jsQuickOrderPageError).remove();
        Ridex.fadeOut($(v._jsPopupQuickOrderAddiction));

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loaderOnFile: true,
                form: form,
            },
            data: data,
            dataType: 'JSON',
            type: "POST",
            processData: false,
            contentType: false,
            success: function(response) {
                if (response.success && response.redirect) {
                    form.find(v._jsQuickOrderPageFileLabel).val('');
                    Ridex.Ajax.loader.file('complete', form);

                    dataLayer.push({
                        'event':'Quick_order_send',
                        'quick_action':'success'
                    });

                    window.location.href = response.redirect;
                    //$(v._jsQuickOrderPageResult).html(response.view);
                } else if(!response.success && response.status === 'addiction') {
                    Ridex.Ajax.loadQuickOrderAddictionPopup(
                        Ridex.pureClassName(v._jsQuickOrderPageAdditionFile), {loader: true}
                    );
                } else {
                    $(response.failsView).insertAfter(v._jsQuickOrderPageDescription);
                    $("html, body").animate({scrollTop: $(v._jsQuickOrderPage).offset().top - 100 }, 'slow');
                }
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsQuickOrderPageButton = function (obj, url, data) {
        let v = Ridex.v;

        $(v._jsQuickOrderPageError).remove();
        Ridex.fadeOut($(v._jsPopupQuickOrderAddiction));

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            data: data,
            dataType: 'JSON',
            type: "POST",
            success: function(response) {
                if (response.success && response.redirect) {
                    window.location.href = response.redirect;
                } else if(!response.success && response.status === 'addiction') {
                    Ridex.Ajax.loadQuickOrderAddictionPopup(
                        Ridex.pureClassName(v._jsQuickOrderPageAdditionText), {loader: true}
                    );
                } else {
                    $(response.failsView).insertAfter(v._jsQuickOrderPageDescription);
                    $("html, body").animate({scrollTop: $(v._jsQuickOrderPage).offset().top - 100 }, 'slow');
                }
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsQuickOrderPageDeleteSelectedConfirmation = function (obj, url, articleIds) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            data: {
                articleIds: articleIds
            },
            dataType: 'json',
            type: "POST",
            success: function (response) {
                Ridex.fadeOut($(v._jsPopupQuickOrderItemsDeleteSelected));
                $(v._jsPopupQuickOrderItemsDeleteSelected).delay(1000).remove();

                if(response.view) {
                    $(v._jsQuickOrderPageItems).html(response.view);

                    Ridex.toggleDisabledByCheckboxes(
                        $(v._jsQuickOrderPageDeleteSelected),
                        $(v._jsQuickOrderPageItemBuy).find('input[name="articleIds"]')
                    );
                } else {
                    Ridex.QuickOrder.setEmptyPageResponse(response);
                }
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsQuickOrderPageDeleteAllConfirmation = function (obj, url) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            dataType: 'json',
            type: "POST",
            success: function (response) {
                Ridex.fadeOut($(v._jsPopupQuickOrderItemsDeleteAll));
                $(v._jsPopupQuickOrderItemsDeleteAll).delay(1000).remove();

                Ridex.QuickOrder.setEmptyPageResponse(response);
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsQuickOrderPagePinAllToggle = function (obj, form, url) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            dataType: 'JSON',
            type: "POST",
            success: function(response) {
                if (response.success) {
                    if(obj.is(':checked')){
                        form.find('input[name=articleIds]').prop('checked', true);
                    } else {
                        form.find('input[name=articleIds]').prop('checked', false);
                    }

                    Ridex.toggleDisabledByCheckboxes(
                        $(v._jsQuickOrderPageDeleteSelected),
                        $(v._jsQuickOrderPageItemBuy).find('input[name="articleIds"]')
                    );
                }
            }
        });
    };

    Ridex.Ajax.clickJsQuickOrderPagePinToggleProduct = function (obj, form, url, articleId, productsCount) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            data: {
                articleIds: [articleId]
            },
            dataType: 'JSON',
            type: "POST",
            success: function(response) {
                if (response.success) {
                    if(productsCount === obj.closest('form').find('input:checked[name="articleIds"]').length){
                        $(v._jsQuickOrderProductSelectAll).prop('checked', true);
                    } else {
                        $(v._jsQuickOrderProductSelectAll).prop('checked', false);
                    }

                    Ridex.toggleDisabledByCheckboxes(
                        $(v._jsQuickOrderPageDeleteSelected),
                        $(v._jsQuickOrderPageItemBuy).find('input[name="articleIds"]')
                    );
                }
            }
        });
    };

    Ridex.Ajax.loadAfterChangeJsQuickOrderPageDuplicate = function (obj, url, articleIdsChecked, articleIdsAll) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            data: {
                articleIds: {
                    'checked': articleIdsChecked,
                    'all': articleIdsAll
                }
            },
            dataType: 'json',
            type: "POST",
            success: function(response) {
                obj.closest(v._jsQuickOrderPageDuplicateBlock).remove();

                Ridex.QuickOrder.setEmptyPageResponse(response);

                if(response.redirect) {
                    window.location.href = response.redirect;
                }
            }
        });
    };

    Ridex.Ajax.loadAfterChangeJsQuickOrderPageDismiss = function (obj, url, articleIds) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            data: {
                articleIds: articleIds
            },
            dataType: 'json',
            type: "POST",
            success: function(response) {
                obj.closest(v._jsQuickOrderPageDuplicateBlock).remove();

                Ridex.QuickOrder.setEmptyPageResponse(response);

                if(response.redirect) {
                    window.location.href = response.redirect;
                }
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsQuickOrderPageConfirmation = function (obj, url, data) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            data: data,
            dataType: 'JSON',
            type: "POST",
            success: function(response) {
                if (response.success) {
                    if (response.popup) {
                        $(v._jsPopupQuickOrderProductsWithProblems).remove();

                        $(v._jsPopupSiteWrapper).append(response.popup);
                        Ridex.fadeIn($(v._jsPopupQuickOrderProductsWithProblems));

                        Ridex.Ajax.loadCartCurrentDataPopup();
                        $(v._jsTotalPrice).find('span').html(response.basketTotalPrice);

                        dataLayer.push({
                            'event': 'Quick_order_popup',
                            'quick_action': 'view'
                        })
                    } else if (response.redirect) {
                        window.location = response.redirect;
                    }

                    if(response.view){
                        $(v._jsQuickOrderPageItems).html(response.view);
                    } else {
                        Ridex.QuickOrder.setEmptyPageResponse(response);
                    }
                }
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsQuickOrderPageDeleteProblemProductConfirmation = function (obj, form, url, data) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            data: data,
            dataType: 'JSON',
            type: "POST",
            success: function(response) {
                if (response.success) {
                    obj.parent().hide();
                    obj.closest('form').find(v._jsQuickOrderPageDeleteProblemProducts).show();

                    let checkedInputs = form.find("input:checked");
                    if (checkedInputs.length > 0) {
                        checkedInputs.closest(v._jsQuickOrderPageItemBuy).remove();
                    }

                    $(v._jsQuickOrderPageItems).html(response.view);

                    Ridex.QuickOrder.setEmptyPageResponse(response);

                    if(response.viewEmpty) {
                        Ridex.fadeOut($(v._jsPopup));
                        $(v._jsPopup).delay(1000).remove();

                        if(response.redirect) {
                            window.location = response.redirect;
                        }
                    }

                    obj.closest(v._jsPopupQuickOrderProductsWithProblemsBlock).remove();
                }
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsQuickOrderPageOverProblemProductsToBasket = function (obj, form, url, data) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            data: data,
            dataType: 'JSON',
            type: "POST",
            success: function(response) {
                if (response.success) {
                    let arrArtId= [],
                        arrGaId= [];

                    if($(obj).hasClass('add-wishlist')) {
                        obj.closest('._js-overProducts._js-problemProducts').find('._js-popup-quick-order__list-item ._js-qo-popupCheckbox[type="checkbox"]:checked').each(function () {
                            arrArtId.push($(this).attr('articleid'));
                            arrGaId.push($(this).attr('genericid'));
                        });
                    } else {
                        obj.closest('._js-overProducts._js-problemProducts').find('._js-popup-quick-order__list-item ._js-qo-popupCheckbox[type="checkbox"]').each(function () {
                            arrArtId.push($(this).attr('articleid'));
                            arrGaId.push($(this).attr('genericid'));
                        });
                    }

                    dataLayer.push({
                        'event':'Add_to_Basket_quickOrder',
                        'generic_id': arrGaId.join('%'),
                        'article_id': arrArtId.join('%')
                    });

                    let checkedInputs = form.find("input:checked");
                    if (checkedInputs.length > 0) {
                        checkedInputs.closest(v._jsQuickOrderPageItemBuy).remove();
                    } else {
                        Ridex.fadeOut($(v._jsPopup));
                        $(v._jsPopup).delay(1000).remove();
                    }

                    $(v._jsQuickOrderPageItems).html(response.view);

                    if(!form.find(v._jsQuickOrderPageItemBuy).length){
                        Ridex.fadeOut($(v._jsPopup));
                        $(v._jsPopup).delay(1000).remove();

                        window.location = response.redirect;
                    }
                }
            }
        });
    };

    Ridex.Ajax.loadAfterClickJsQuickOrderPageAddProblemProductsToWishlist = function (obj, form, url, data) {
        let v = Ridex.v;

        $.ajax({
            url: url,
            context: {
                disable: obj,
                loader: true
            },
            data: data,
            dataType: 'JSON',
            type: "POST",
            success: function(response) {
                if (response.success) {
                    let block = obj.closest(v._jsPopupQuickOrderProductsWithProblemsBlock);

                    let checkedInputs = form.find("input:checked");
                    if (checkedInputs.length > 0) {
                        checkedInputs.closest(v._jsQuickOrderPageItemBuy).remove();
                    }

                    if (!block.find(v._jsQuickOrderPageItemBuy).length) {
                        block.remove();
                    }

                    $(v._jsQuickOrderPageItems).html(response.view);

                    Ridex.QuickOrder.setEmptyPageResponse(response);

                    if(response.viewEmpty) {
                        Ridex.fadeOut($(v._jsPopup));
                        $(v._jsPopup).delay(1000).remove();

                        if(response.redirect) {
                            window.location = response.redirect;
                        }
                    }
                }
            }
        });
    };

    Ridex.Ajax.prototype.loadPopupByHash = function (hash) {
        if (hash === '#verify') {
            Ridex.Ajax.loadVerifyPopup();
        } else if (hash === '#verifySuccess') {
            Ridex.Ajax.loadVerifySuccessPopup();
        } else if (hash === '#signIn') {
            if (window.Laravel.auth) {
                if (window.location.hash) {
                    window.location.hash = '';
                }
                return false;
            }
            Ridex.Ajax.loadSignInPopup();
        } else if (hash === '#vatSuccess') {
            Ridex.Ajax.loadVatSuccessPopup();
        }
    };
})();

const ajax = new Ridex.Ajax();

ajax.loadPopupByHash(window.location.hash);


(function () {
    let v = Ridex.vars({
        _jsCarSelectorFormSearch:         '._js-carSelectorFormSearch',
        _jsFormSelectCustom:              '._js-form-select-custom',
        _jsFormSelectCustomCurrent:       '._js-form-select-custom__current',
        _jsFormSelectCustomCurrentBody:   '._js-form-select-custom__current-body',
        _jsFormSelectCustomList:          '._js-form-select-custom__list',
        _jsFormSelectCustomListItem:      '._js-form-select-custom__list-item',
        _jsFormSelectCustomSelect:        '._js-form-select-custom__select',
        _jsFormSelectCustomTooltip:       '._js-form-select-custom__tooltip',
        _jsFormSelectCustomTooltipTitle:  '._js-form-select-custom__tooltip-title',
        _jsFormSelectCustomTooltipScroll: '._js-form-select-custom__tooltip-scroll',
        _jsFormSelectCustomInputCurrent:  '._js-form-select-custom__input-current',
        _jsSelectorButtonSend:            '._js-selector-button-send',
        _jsSearchFilterCarsInput:         '._js-search-filter-cars-input',
        _jsSearchFilterInput:             '._js-search-filter-input',
        _jsFormSelectChild:               '._js-form-select-child',
        _jsUploadedSelector:              '._js-uploaded-selector',
        _jsCountryList:                  '._js-countryList'
    });

    Ridex.Filters = function () {
        $(document).on('click', this.clickEverywhere);
        $(document).on('click', v._jsFormSelectCustomCurrent, this.clickJsFormSelectCustomCurrent);
        $(document).on('click', v._jsFormSelectCustomListItem, this.clickJsFormSelectCustomListItem);
        $(document).on('click', v._jsSelectorButtonSend, this.clickJsSelectorButtonSend);
        $(document).on('click', v._jsFormSelectChild, this.clickJsFormSelectChild);
        $(document).on('keyup', v._jsSearchFilterCarsInput, this.keyupJsSearchFilterCarsInput);
        $(document).on('keyup', v._jsSearchFilterInput, this.keyupJsSearchFilterInput);
    };

    Ridex.Filters.prototype.clickEverywhere = function (e){
        let documentClickNone = $(v._jsFormSelectCustomSelect);

        if (!documentClickNone.is(e.target) && documentClickNone.has(e.target).length === 0) {
            $(v._jsFormSelectCustomTooltip).fadeOut();
            $(v._jsFormSelectCustomCurrent).removeClass('active');
        }
    };

    Ridex.Filters.prototype.clickJsFormSelectCustomCurrent = function (e) {
        e.stopPropagation();

        let obj = $(this),
            customSelectTooltip = obj.closest(v._jsFormSelectCustomSelect).find(v._jsFormSelectCustomTooltip);

        $(v._jsFormSelectCustomTooltip).fadeOut();
        $(v._jsFormSelectCustomCurrent).removeClass('active');

        if (customSelectTooltip.is(':hidden')) {
            customSelectTooltip.fadeIn();
            obj.addClass('active');
        } else {
            customSelectTooltip.fadeOut();
            obj.removeClass('active');
        }
    };

    Ridex.Filters.prototype.clickJsFormSelectCustomListItem = function (e) {
        e.stopPropagation();

        let obj = $(this),
            countryList = obj.closest(v._jsCountryList),
            id = obj.data('id'),
            code = obj.data('code'),
            url = obj.data('url'),
            selector = obj.closest(v._jsFormSelectCustom),
            customSelect = obj.closest(v._jsFormSelectCustomSelect),
            nextSelectorAll = selector.nextAll(),
            optionTitleValue = obj.html(),
            currentBody = customSelect.find(v._jsFormSelectCustomCurrentBody),
            currentInput = customSelect.find(v._jsFormSelectCustomInputCurrent);

        currentBody.nextAll().each(function (){
            $(this).data('id', false)
        });

        currentBody.html(optionTitleValue).addClass('select').data('id', id);

        $(v._jsFormSelectCustomCurrent).removeClass('active');
        obj.closest(v._jsFormSelectCustomSelect).find(v._jsFormSelectCustomTooltip).hide();

        if(countryList.length) {
            $(v._jsVatPrefix).val(code);
        }

        if(currentInput.length) {
            if(parseInt(currentInput.val()) === id) {
                return false;
            }

            currentInput.val(id);
        }

        nextSelectorAll.each(function (){
            if($(this).hasClass(Ridex.pureClassName(v._jsUploadedSelector))) {
                $(this).remove();
            }

            if($(this).hasClass(Ridex.pureClassName(v._jsFormSelectCustom))){
                let defaultName = $(this).find(v._jsFormSelectCustomCurrentBody).data('default-name');

                $(this).find(v._jsFormSelectCustomCurrentBody).removeClass('select').html('<span>'+defaultName+'</span>');
                $(this).find(v._jsFormSelectCustomTooltip).remove();
            }
        });

        if(customSelect.data('type') === 'maker') {
            window.JsVars.car_maker_id = id;
        }

        if(customSelect.data('type') === 'model') {
            window.JsVars.car_model_id = id;
        }

        if(customSelect.data('type') === 'car') {
            window.JsVars.car_id = id;
        }

        if(url) {
            Ridex.Ajax.loadAfterClickJsFormSelectCustomListItem(obj, url, selector);
        }
    };

    Ridex.Filters.prototype.clickJsSelectorButtonSend = function () {
        let obj = $(this),
            params = [],
            url = obj.closest(v._jsCarSelectorFormSearch).attr('action'),
            urlParams = window.location.search.replace("?", "&");

        obj.closest(v._jsCarSelectorFormSearch)
            .find(v._jsFormSelectCustomCurrentBody)
            .each(function () {
                if($(this).data('id')){
                    params.push($(this).data('id'));
                }
            });

        urlParams = urlParams.split("&").filter(function (v) {
            return v !== "" && v.search("maker") === -1 && v.search("model") === -1 && v.search("car") === -1;
        });

        $.each(params, function (k, v) {
            if(k === 0){
                urlParams.push('maker=' + v);
            }

            if(k === 1){
                urlParams.push('model=' + v);
            }

            if(k === 2){
                urlParams.push('car=' + v);
            }
        });

        window.location.href = url + "?" + urlParams.join("&");
    };

    Ridex.Filters.prototype.clickJsFormSelectChild = function () {
        let obj = $(this),
            url = obj.data('url');
    };

    Ridex.Filters.prototype.keyupJsSearchFilterCarsInput = function () {
        let obj = $(this),
            val = obj.val().toLowerCase(),
            $titles = obj.closest(v._jsFormSelectCustomTooltip).find(v._jsFormSelectCustomTooltipTitle),
            $items = obj.closest(v._jsFormSelectCustomTooltip).find(v._jsFormSelectCustomListItem);

        $titles.hide();
        $items.hide();

        $items.each(function(){
            let text = $(this).text().toLowerCase().trim();
            if(text.startsWith(val)) {
                $(this).show();
                $(this).closest(v._jsFormSelectCustomList).prev().show();
            }
        });
    };

    Ridex.Filters.prototype.keyupJsSearchFilterInput = function () {
        let obj = $(this),
            val = obj.val().toLowerCase(),
            $items = obj.closest(v._jsFormSelectCustomTooltip).find(v._jsFormSelectCustomListItem);

        $items.hide();

        $items.each(function(){
            let text = $(this).text().toLowerCase().trim();
            if(text.indexOf(val) !== -1) {
                $(this).show();
            }
        });
    };
})();

new Ridex.Filters();

(function () {
    let v = Ridex.vars({
        inteval:                      null,
        _jsHeaderSearch:              '._js-header-search',
        _jsHeaderSearchPopup:         '._js-header-search-popup',
        _jsSearchInput:               '._js-search-input',
        _jsPopularCategoriesSearch:   '._js-popular-categories-search',
        _jsHeaderSearchInputDropdown: '._js-header-search__input-dropdown'
    });

    Ridex.Search = function () {
        $(document).on('focus', v._jsSearchInput, this.focusJsSearchInput);
        $(document).on('keyup', v._jsSearchInput, this.keyupJsSearchInput);
    };

    Ridex.Search.suggest = function() {
        let url = $(v._jsSearchInput).data('url'),
            keyword = $(v._jsSearchInput).val(),
            searchPopularBlock = $(v._jsHeaderSearchInputDropdown);

        $(v._jsHeaderSearch).find('input').val(keyword);

        if (keyword.length > 2) {
            Ridex.Ajax.loadAfterKeyupSearchInput(url, keyword, searchPopularBlock);
        } else {
            $(v._jsHeaderSearchPopup).find(v._jsHeaderSearchInputDropdown).hide();
        }
    }

    Ridex.Search.prototype.focusJsSearchInput = function (){
        $(v._jsPopularCategoriesSearch).show();
    };

    Ridex.Search.prototype.keyupJsSearchInput = function (){
        clearTimeout(v.inteval);
        v.inteval = setTimeout(Ridex.Search.suggest.bind(this), Ridex.settings.suggestTimeout);

        return false;
    };
})();

new Ridex.Search();

(function () {
    let v = Ridex.vars({
        productImageSliderArrows:          true,
        _jsProduct:                        '._js-product',
        _jsProduct__ImageSlider:           '._js-product__image-slider',
        _jsProduct__ImageThumbs:           '._js-product__image-thumbs',
        _jsProductThumbsItem:              '._js-product-thumbs__item',
        _jsProduct__ImageSliderItem:       '._js-product__image-slider-item',
        _jsProduct__InfoBtn:               '._js-product__info-btn',
        _jsProduct__InfoParams:            '._js-product__info-params',
        _jsProduct__TopSlider:             '._js-top-slider',
        _jsProduct__CarCompatibilityTitle: '._js-car-compatibility__title',
        _jsProduct__CarCompatibility:      '._js-car-compatibility',
        _jsProduct__OtherCarsName:         '._js-other-cars__name',
        _jsProduct__OtherCarsAccordion:    '._js-other-cars__accordion',
        _jsProduct__PopupProductImages:    '._js-popup-product-images',
        _jsProduct__Qty:                   '._js-qty',
        _jsProduct__Minus:                 '._js-minus',
        _jsProduct__Plus:                  '._js-plus',
        _jsProduct__Counter:               '._js-product-counter',
        _jsProduct__ItemQtyTooltip:        '._js-item-qty-tooltip',
        _jsProduct_playPopup:              '._js-play-popup',
        dataDocumentLangsPopup:            '[data-document-langs-popup]'
    });

    let sP = Ridex.vars({
        topProductsSliderParams: {
            infinite: false,
            slidesToShow: 5,
            responsive:[
                {
                    breakpoint: 1520,
                    settings: {
                        slidesToShow: 4,
                        arrows: false,
                        dots: true
                    }
                },
                {
                    breakpoint: 1140,
                    settings: {
                        slidesToShow: 3,
                        arrows: false,
                        dots: true
                    }
                },
                {
                    breakpoint: 900,
                    settings: {
                        slidesToShow: 2,
                        arrows: false,
                        dots: true
                    }
                },
                {
                    breakpoint: 590,
                    settings: {
                        slidesToShow: 1,
                        arrows: false,
                        dots: true
                    }
                }
            ]
        },
        productImageSliderParams: {
            arrows: v.productImageSliderArrows,
            accessibility: false,
            draggable: false,
            asNavFor: v._jsProduct__ImageThumbs,
            responsive:[
                {
                    breakpoint: 576,
                    settings: {
                        arrows: true
                    }
                }
            ]
        },
        productProductImageThumbsParams: {
            slidesToShow: 3,
            asNavFor: v._jsProduct__ImageSlider,
            arrows: false,
            vertical: true,
            focusOnSelect: true,
            responsive:[
                {
                    breakpoint: 900,
                    settings: {
                        slidesToShow: 4,
                    }
                }
            ]
        }
    });

    Ridex.Product = function (){
        let constructor = this.constructor;

        constructor.checkProductImageSliderArrows();

        $(window).on("resize orientationchange", this.resizeOrientationChange);

        $(document).on('click', v._jsProduct__InfoBtn, this.clickJsProductInfoBtn);
        $(document).on('click', v._jsProduct__CarCompatibilityTitle, this.clickJsCarCompatibilityTitle);
        $(document).on('click', v._jsProduct + ' ' + v._jsProduct__ImageSliderItem+'.slick-active', this.clickJsProductImageSlider);
        $(document).on('click', v._jsAmountInput, this.clickJsProductAmountInput);
        $(document).on('click', v._jsProduct_playPopup, this.clickJsProductPlayPopup);
        $(document).on('click', v.dataDocumentLangsPopup, this.clickDataDocumentLangsPopup);

        $(document).on('click touch', v._jsProduct__OtherCarsName, this.clickJsOtherCarsName);
        $(document).on('click touch', v._jsProduct__Qty + ' ' + v._jsProduct__Minus, this.clickJsProductQtyMinusPlus);
        $(document).on('click touch', v._jsProduct__Qty + ' ' + v._jsProduct__Plus, this.clickJsProductQtyMinusPlus);

        $(document).on('keypress', v._jsAmountInput, this.keypressJsProductAmountInput);

        $(document).on('change', v._jsAmountInput, this.changeJsProductAmountInput);

        $(document).ready(function () {
            let countImageThumbs = $(v._jsProduct + ' ' + v._jsProduct__ImageThumbs + ' ' + v._jsProductThumbsItem).length

            if ($('.listing__item').length > 4) {
                Ridex.slickSliderInit($(v._jsProduct__TopSlider).not('.slick-initialized'), constructor.topProductsSliderParams());
            }

            Ridex.slickSliderInit(
                $(v._jsProduct).find(v._jsProduct__ImageSlider),
                constructor.productImageSliderParams({
                    asNavFor: countImageThumbs > 3 ? v._jsProduct + ' ' + v._jsProduct__ImageThumbs : false
                })
            );
            Ridex.slickSliderInit($(v._jsProduct).find(v._jsProduct__ImageThumbs), constructor.productProductImageThumbsParams({
                asNavFor: v._jsProduct + ' ' + v._jsProduct__ImageSlider
            }));
        });
    };

    Ridex.Product.checkProductImageSliderArrows = function() {
        let elementCount = $(v._jsProduct__ImageSlider).not('.slick-cloned').length;

        if(($(window).width() < 900 && elementCount <= 4) || ($(window).width() >= 900 && elementCount <= 3)) {
            v.productImageSliderArrows = false;
        } else {
            v.productImageSliderArrows = true;
        }
    }

    Ridex.Product.topProductsSliderParams = function (params) {
        params = params || {};
        Object.assign(sP.topProductsSliderParams, params);

        return sP.topProductsSliderParams;
    };

    Ridex.Product.productImageSliderParams = function (params) {
        params = params || {};
        Object.assign(sP.productImageSliderParams, params);

        return sP.productImageSliderParams;
    };

    Ridex.Product.productProductImageThumbsParams = function (params) {
        params = params || {};
        Object.assign(sP.productProductImageThumbsParams, params);

        return sP.productProductImageThumbsParams;
    };

    Ridex.Product.changeAmount = function (inp, sign) {
        let val = Math.abs(parseInt(inp.val(), 10)),
            step = inp.data('step'),
            stepSign = sign * step;

        if (isNaN(val)) {
            inp.val(Math.abs(stepSign));
            return;
        }

        if(step % 2 == 0 && val % 2 != 0) {
            inp.val(Math.abs(val + sign));
            return;
        }

        val = val + stepSign;

        if(val <= 0) {
            val = val + Math.abs(stepSign)
        }

        inp.val(Math.abs(val));
    }

    Ridex.Product.checkingStock = function (obj) {
        let currentInputVal = Math.abs(parseInt(obj.val(), 10)),
            currentInputMax = +obj.data('max'),
            currentInputStep = +obj.data('step');

        obj.val(currentInputVal);

        if (isNaN(currentInputVal)) {
            currentInputVal = currentInputStep;
            obj.val(currentInputStep);
        }

        if(currentInputVal < 1) {
            currentInputVal = currentInputStep;
            obj.val(currentInputVal);
        }

        if(currentInputVal > currentInputMax) {
            /*if(currentInputStep > 1 && currentInputMax % 2 !== 0) {
                obj.val(currentInputMax-1);
                showTooltip(obj);
            } else {
                obj.val(currentInputMax);
                showTooltip(obj);
            }*/
            Ridex.Product.showTooltip(obj);
            obj.val(currentInputMax);
        } else {
            this.closeTooltip(obj);
        }
    }

    Ridex.Product.showTooltip = function (obj) {
        obj.closest(v._jsProduct__Counter).find(v._jsProduct__ItemQtyTooltip).removeClass('hide');
        obj.closest(v._jsProduct__Counter).find(v._jsProduct__Plus).addClass('disabled');
    }

    Ridex.Product.closeTooltip = function (obj) {
        obj.closest(v._jsProduct__Counter).find(v._jsProduct__ItemQtyTooltip).addClass('hide');
        obj.closest(v._jsProduct__Counter).find(v._jsProduct__Plus).removeClass('disabled');
    }

    Ridex.Product.prototype.resizeOrientationChange = function () {
        Ridex.Product.checkProductImageSliderArrows();

        Ridex.slickSliderInit($(v._jsProduct).find(v._jsProduct__ImageSlider), "resize");
    };

    Ridex.Product.prototype.clickJsProductInfoBtn = function (){
        if (!$(this).hasClass('open')) {
            $(this).addClass('open');
            $(v._jsProduct__InfoParams).addClass('show');
        } else {
            $(this).removeClass('open');
            $(v._jsProduct__InfoParams).removeClass('show');
        }
    }

    Ridex.Product.prototype.clickJsCarCompatibilityTitle = function (){
        if (!$(this).closest(v._jsProduct__CarCompatibility).hasClass('open')) {
            $(this).closest(v._jsProduct__CarCompatibility).addClass('open')
        } else {
            $(this).closest(v._jsProduct__CarCompatibility).removeClass('open')
        }
    }

    Ridex.Product.prototype.clickJsOtherCarsName = function (){
        let obj = $(this),
            url = obj.data('url');

        obj.toggleClass('open');

        if(!$(this).next().children().length){
            Ridex.Ajax.loadAfterClickJsOtherCarsName(obj, url);
        } else {
            $(this).next().slideToggle('slow');
        }
    }

    Ridex.Product.prototype.clickJsProductImageSlider = function (){
        if(!$(v._jsProduct__PopupProductImages).find(v._jsProduct__ImageSlider).hasClass('slick-slider')){
            let countImageThumbs = $(v._jsProduct__PopupProductImages)
                .find(v._jsProduct__ImageThumbs)
                .find(v._jsProductThumbsItem).length;

            Ridex.slickSliderInit(
                $(v._jsProduct__PopupProductImages).find(v._jsProduct__ImageSlider),
                Ridex.Product.productImageSliderParams({
                    asNavFor: countImageThumbs > 4 ? $(v._jsProduct__PopupProductImages).find(v._jsProduct__ImageThumbs) : false
                })
            );

            Ridex.slickSliderInit(
                $(v._jsProduct__PopupProductImages).find(v._jsProduct__ImageThumbs),
                Ridex.Product.productProductImageThumbsParams({
                    slidesToShow: 4,
                    asNavFor: $(v._jsProduct__PopupProductImages).find(v._jsProduct__ImageSlider)
                })
            );
        }

        Ridex.fadeIn(
            $(v._jsProduct__PopupProductImages)
        );
    };

    Ridex.Product.prototype.clickJsProductQtyMinusPlus = function (e) {
        e.preventDefault();
        let sign = $(this).hasClass('_js-plus') ? 1 : -1,
            currentInput = $(this).closest(v._jsProduct__Counter).find(v._jsAmountInput);

        if($(this).parent().find('input').val == 0){
            return;
        }

        Ridex.Product.changeAmount($(this).parent().find('input'), sign);
        // Ridex.Product.checkingStock(currentInput);

        $(this).closest(v._jsListingItem).attr('data-item-qty', $(this).parent().find('input').val());
    };

    Ridex.Product.prototype.clickJsProductAmountInput = function () {
        // Ridex.Product.checkingStock($(this));

        return false;
    };

    Ridex.Product.prototype.clickJsProductPlayPopup = function () {
        let articleId = $(this).data('id'),
            video = $(this).data('video');

        Ridex.Ajax.loadAfterClickJsProductPlayPopup(articleId, video);

        return false;
    };

    Ridex.Product.prototype.clickDataDocumentLangsPopup = function (){
        Ridex.fadeOut($(v._jsPopup));

        let documentId = $(this).data('document-id');

        Ridex.Ajax.loadDataDocumentLangsPopup(documentId);
    };

    Ridex.Product.prototype.keypressJsProductAmountInput = function (e) {
        if(e.keyCode == 13) {
            e.preventDefault();
            return false;
        }
    };

    Ridex.Product.prototype.changeJsProductAmountInput = function () {
        // Ridex.Product.checkingStock($(this));

        return false;
    };
})();

new Ridex.Product();

(function () {
    let v = Ridex.vars({
        _jsPhotos360__exit360: false,
        _jsPhotos360__Icon3d: '<svg class="img">\n' +
        '                <use xlink:href="assets/images/icon-sprite-bw.svg#sprite-360-icon-bw"></use>\n' +
        '            </svg>',
        _jsPhotos360__ListingItem:         '._js-listing__item',
        _jsPhotos360__ListingItemImage:    '._js-listing__item-image',
        _jsPhotos360__ListingSliderImg:    '._js-listing-slider__img',
        _jsPhotos360__ProductImage360:     '._js-product__image-360',
        _jsPhotos360__ProductImageSlider:  '._js-product__image-slider',
        _jsPhotos360__imProdZoom:          '.im-prod-zoom',
        _jsPhotos360__playButton:          '.play_button',
        _jsPhotos360__pauseButton:         '.pause_button',
        _jsPhotos360__photos360Popup:      '.photos360-popup',
        _jsPhotos360__photo360PopupWrapBg: '.photo360-popup-wrap-bg',
        _jsPhotos360__popupXClose:         '.popup-x-close',
        _jsPhotos360__pkwThumb360Y:        '.pkw-thumb360-y',
        _jsPhotos360__pkwThumb360N:        '.pkw-thumb360-n',
        _jsPhotos360__thumb360Y:           '.thumb360-y',
        _jsPhotos360__thumb360N:           '.thumb360-n',
        _jsPhotos360__thumbnailDirectProd: '.thumbnail-direckt-prod'
    });

    Ridex.Photo360 = function (route){
        v.rotatorRoute = route;

        $(document).on('click', v._jsPhotos360__ProductImage360, this.clickJsProductImage360);
        $(document).on('click', v._jsPhotos360__photos360Popup, this.clickPhotos360Popup);
        $(document).on('click', v._jsPhotos360__pkwThumb360Y, this.clickPkwThumb360Y);
        $(document).on('click', v._jsPhotos360__thumb360Y, this.clickThumb360Y);
        $(document).on('click touchstart', this.clickTouchstart);

        $(document).ready(function() {
            if ($('body').find(v._jsPhotos360__imProdZoom).length > 0) {
                Ridex.Photo360.initXzoom();
            }
        });
    };

    Ridex.Photo360.imageRotatorFS = function(rotator) {
        rotator.rg = function () {
            if (this.qS()) {
                return;
            }

            let zIndex = 50000,
                suffix = "_fs",
                fullScreenElm,
                pF,
                qj;

            this.rh();

            if (this.gD() === true) {
                this.sm.Event(WR360.sY.rU.FULLSCREEN);
            }

            this.mp();

            if (this.qR == null) {
                let pG = this.cR + suffix,
                    pw = this.oY + suffix;

                if (jQuery(pG).length == 0) {
                    let parentElement = jQuery("body"),
                        rf = jQuery(this.cR).attr("class");

                    if (parentElement == null) {
                        throw new Error("Can't create full-screen image rotator: parent element is NULL.");
                    }

                    fullScreenElm = jQuery("<div id='" + pw + "' class='wr360_player'></div>").appendTo(parentElement);
                    fullScreenElm.addClass(rf);

                    pF = fullScreenElm[0];
                    qj = this.pz(pF);

                    if (qj) {
                        if (pF.requestFullScreen) {
                            pF.requestFullScreen();
                        } else if (pF.mozRequestFullScreen) {
                            pF.mozRequestFullScreen();
                        } else if (pF.webkitRequestFullScreen) {
                            pF.webkitRequestFullScreen();
                        } else if (pF.msRequestFullscreen) {
                            pF.msRequestFullscreen();
                        }

                        fullScreenElm.css({
                            width: screen.width,
                            height: screen.height,
                            'background-color': this.bA.settings.bI.fullScreenBackColor
                        });
                    } else {
                        this.ScrollbarsToggleOff(false);

                        let hf = this.mF();

                        fullScreenElm.css({
                            position: "absolute",
                            top: hf.scrollY,
                            left: hf.scrollX,
                            width: jQuery(window).width(),
                            height: window.innerHeight ? window.innerHeight : jQuery(window).height(),
                            'z-index': zIndex,
                            'background-color': this.bA.settings.bI.fullScreenBackColor
                        });
                    }
                }

                this.qR = new WR360.ImageRotator(pw);
                this.qR.settings.viewName = this.settings.viewName;
                this.qR.settings.googleEventTracking = this.settings.googleEventTracking;
                this.qR.settings.graphicsPath = this.settings.graphicsPath;
                this.qR.settings.configFileURL = this.configFileFullScreenURL.length > 0 ? this.configFileFullScreenURL : this.settings.configFileURL;
                this.qR.licenseFileURL = this.licenseFileURL;
                this.qR.licenseCode = this.licenseCode;
                this.qR.settings.fullScreenOnClick = this.settings.fullScreenOnClick;
                this.qR.settings.rootPath = this.settings.rootPath;
                this.qR.settings.zIndexLayersOn = this.settings.zIndexLayersOn;
                this.qR.settings.inBrowserFullScreen = this.settings.inBrowserFullScreen;
                this.qR.settings.crossDomainConfigLoader = this.settings.crossDomainConfigLoader;
                this.qR.settings.apiReadyCallback = this.settings.apiReadyCallback;
                this.qR.av = true;
                this.qR.settings.progressCallback = this.settings.progressCallback;
                this.qR.pH = this;
                this.qR.pF = pF;
                this.qR.qj = qj;

                if (qj) {
                    this.qR.pN();
                }

                this.qR.runImageRotator();

                $(window).scroll(function () {
                    $('body').css({
                        overflow : ''
                    });

                    fullScreenElm.addClass('fs_popup_wr');
                });

                $(document).on('click', '#' + this.oY + '_fs_X', function () {
                    setTimeout(function () {
                        rotator.mR();
                    }, 300);
                });

            } else {
                this.qR.qy = function () {
                    this.ScrollbarsToggleOff(false);

                    let  hf = this.mF();

                    jQuery(this.cR).css({
                        top: hf.scrollY,
                        left: hf.scrollX,
                        width: jQuery(window).width(),
                        height: window.innerHeight ? window.innerHeight : jQuery(window).height()
                    });
                    jQuery(this.pf).css({
                        width: jQuery(window).width(),
                        height: window.innerHeight ? window.innerHeight : jQuery(window).height()
                    });

                    this.gs();
                };

                this.qR.qi();
            }
        };
    }

    Ridex.Photo360.initXzoom = function() {
        let img = $(v._jsPhotos360__imProdZoom + ' > img').attr('xoriginal');

        return $(v._jsPhotos360__imProdZoom).zoom({url: img, duration: 0}) || 1;
    }

    Ridex.Photo360.onkeydown = function (e){
        if ( e.keyCode === 27 ) {
            if (isFullScreen === false) {
                setTimeout(function () {
                    if (rotator.qR != null)
                        rotator.qR.cJ();
                }, 5000);
            }
            // $('body, html').css('overflow-y', 'auto', 'important');
            setTimeout(function () {
                rotator.mR();
            }, 100);
        }
    }

    Ridex.Photo360.createRotator = function($object, nameFolder, route, height, width) {
        let id = 'f' + nameFolder,
            rotator = WR360.ImageRotator.Create(id);

        rotator.licenseFileURL = '/license360.lic';
        rotator.settings.configFileURL = route+nameFolder.replace('popup', '')+'/config.xml';
        rotator.settings.graphicsPath = '/assets/images/basic';
        rotator.settings.googleEventTracking = false;
        rotator.settings.inBrowserFullScreen = true;
        rotator.settings.responsiveBaseWidth = width;
        rotator.settings.responsiveMinHeight = height;
        rotator.settings.fullScreenOnClick = false;

        rotator.settings.apiReadyCallback = function(api, isFullScreen, eventTrackingAlias)  {
            if($('div').hasClass(v._jsPhotos360__thumbnailDirectProd)){
                $(v._jsPhotos360__thumbnailDirectProd).prepend($('#wr360ThemePanel__'+id));
            } else if($object.attr('id') === id){
                $object.append($('#wr360ThemePanel__'+id));
            }

            window.onkeydown = Ridex.Photo360.onkeydown;
        };

        //edit fullscreen
        Ridex.Photo360.imageRotatorFS(rotator);

        rotator.runImageRotator();

        return rotator;
    }

    Ridex.Photo360.prototype.clickPlayButton = function(){
        $(v._jsPhotos360__playButton).click();
    };

    Ridex.Photo360.prototype.clickPauseButton = function(){
        $(v._jsPhotos360__pauseButton).click();
    };

    Ridex.Photo360.prototype.clickPhoto360PopupWrapBg = function(){
        $(this).parent().fadeOut(200);
    };

    Ridex.Photo360.prototype.clickPopupXClose = function(){
        $(this).parent().parent().fadeOut(200);
    };

    Ridex.Photo360.prototype.clickJsProductImage360 = function (e) {
        e.preventDefault();

        let height;

        $(this).parent().addClass('photo360-helper');

        if (!$(this).hasClass('wr360_player') && !$(this).hasClass('tyres-product-img')) {
            $(this).empty();

            if ($(this).closest(v._jsPhotos360__ListingItem).find(v._jsPhotos360__ListingSliderImg).length) {
                $(this).css('left', 0);
                $(this).parent().css('position', 'relative')

                height = $(v._jsPhotos360__ListingItem).find(v._jsPhotos360__ListingSliderImg).height();
            } else if($(this).closest(v._jsPopup).find(v._jsPhotos360__ProductImageSlider).length) {
                height = $(this).closest(v._jsPopup).find(v._jsPhotos360__ProductImageSlider).height();
            } else {
                height = $(this).closest(v._jsProduct).find(v._jsPhotos360__ProductImageSlider).height();
            }

            Ridex.Photo360.createRotator($(this), $(this).attr('id').substring(1), v.rotatorRoute, height, 10000);
        }

        $(v._jsPhotos360__ListingSliderImg + ' .container').click(this.clickPlayButton);
        $(v._jsPhotos360__ProductImageSlider + ' .container').click(this.clickPlayButton);

        v._jsPhotos360__exit360 = true;

        e.stopPropagation();
    }

    Ridex.Photo360.prototype.clickPhotos360Popup = function () {
        let id = $(this).find('img').data('src'),
            folder = 'f'+id;

        if($("div").is("#popup-wrap-"+folder)){
            $('#popup-wrap-'+folder).fadeIn(200);
        } else {
            let body = '<div class="popup-body" id="'+folder+'"><div class="popup-x-close"></div></div><div class="photo360-popup-wrap-bg"></div>';

            $('body').append('<div id="popup-wrap-'+folder+'" class="photo360-popup-wrap">'+body+'</div>');

            setTimeout(function () {
                Ridex.Photo360.createRotator($('#popup-wrap-'+folder), id, Ridex.vars.rotatorRoute, 400, 500);
            }, 200);
        }

        $(v._jsPhotos360__photo360PopupWrapBg).on('click', this.clickPhoto360PopupWrapBg);
        $(v._jsPhotos360__popupXClose).on('click', this.clickPopupXClose);

        return false;
    }

    Ridex.Photo360.prototype.clickPkwThumb360Y = function (e) {
        e.preventDefault();

        if($('a').is(v._jsPhotos360__playButton)){
            $(v._jsPhotos360__playButton).click();
        } else {
            $(v._jsPhotos360__ProductImage360).click();
        }

        $(v._jsPhotos360__pkwThumb360N).on('click', this.clickPauseButton);
    }

    Ridex.Photo360.prototype.clickThumb360Y = function (e) {
        e.preventDefault();

        if($('a').is(v._jsPhotos360__playButton)) {
            $(v._jsPhotos360__playButton).click();
        } else {
            $(v._jsPhotos360__ProductImage360).click();
        }

        $(v._jsPhotos360__thumb360N).on('click', this.clickPauseButton);
    }

    Ridex.Photo360.prototype.clickTouchstart = function (e) {
        let el = '.wr360_player';

        if ($(e.target).closest(el).length){
            return;
        }

        if($(el).length && v._jsPhotos360__exit360){
            $(v._jsPhotos360__ListingSliderImg + ' > div')
                .css('position', '')
                .height('');

            $(v._jsPhotos360__ProductImageSlider).height('');

            if($(el).closest(v._jsProduct).find(v._jsPhotos360__ProductImageSlider).length){
                $(el).removeClass().addClass('icon-3d-show product__image-360 _js-product__image-360').append(v._jsPhotos360__Icon3d);
            } else {
                $(el).removeClass().addClass('photo-360 _js-product__image-360').append(v._jsPhotos360__Icon3d);
            }

            $(v._jsPhotos360__ListingSliderImg + ' > div, ' + v._jsPhotos360__ProductImageSlider).removeClass('photo360-helper');

            $(v._jsPhotos360__ProductImage360).find('.container').remove();
            $(v._jsPhotos360__ProductImage360).find('.theme_panel').remove();
            $(v._jsPhotos360__ProductImage360).height('');
            $(v._jsPhotos360__ProductImage360).css('left', '')

            v._jsPhotos360__exit360 = false;
        }
    }
})();

(function () {
    let v = Ridex.vars({
        _jsMenuSidebar:                     '._js-menu-sidebar',
        _jsMenuSidebarCurrent:              '._js-menu-sidebar__current',
        _jsSubAccountsAdd:                  '._js-sub-accounts-add',
        _jsSubAccountsEdit:                 '._js-sub-accounts-edit',
        _jsSubAccountsOrder:                '._js-sub-accounts-order',
        _jsPopupSubAccountsAdd:             '._js-popup-subAccountsAdd',
        _jsPopupSubAccountsEdit:            '._js-popup-subAccountsEdit',
        _jsPopupSubAccountsOrder:           '._js-popup-subAccountsOrder',
        _jsPopupCabinetContactPersonSave:   '._js-popup-cabinetContactPersonSave',
        _jsPopupCabinetContactDetailsSave:  '._js-popup-cabinetContactDetailsSave',
        _jsPopupCabinetAddressSave:         '._js-popup-cabinetAddressSave',
        _jsSubAccountForm:                  '._js-subAccountForm',
        _jsSubAccountFormButton:            '._js-subAccountFormButton',
        _jsSubAccountFormBoxMarkup:         '._js-custom-form__box--markup',
        _jsSubAccountFormMarkupPrice:       '._js-subAccountFormMarkupPrice',
        _jsSubAccountsTableBody:            '._js-sub-accounts__table-body',
        _jsSubAccountsOrdersTableBody:      '._js-sub-accounts-orders__table-body',
        _jsCabinetContactPerson:            '._js-cabinet-contact-person',
        _jsCabinetContactPersonEdit:        '._js-cabinet-contact-person-edit',
        _jsCabinetContactDetails:           '._js-cabinet-contact-details',
        _jsCabinetContactDetailsEdit:       '._js-cabinet-contact-details-edit',
        _jsCabinetContactPersonForm:        '._js-cabinetContactPersonForm',
        _jsCabinetContactPersonFormButton:  '._js-cabinetContactPersonFormButton',
        _jsCabinetContactDetailsForm:       '._js-cabinetContactDetailsForm',
        _jsCabinetContactDetailsFormButton: '._js-cabinetContactDetailsFormButton',
        _jsCabinetAddresses:                '._js-cabinet-addresses',
        _jsCabinetAddressAdd:               '._js-cabinet-address-add',
        _jsCabinetAddressEdit:              '._js-cabinet-address-edit',
        _jsCabinetAddressButton:            '._js-cabinetAddressButton',
        _jsCabinetAddressForm:              '._js-cabinet-address-form',
        _jsOrderHistoryTooltip:             '._js-order-history__tooltip',
        _jsOrderHistoryTooltipIcon:         '._js-order-history-tooltip-icon'
    });

    Ridex.Cabinet = function (){
        $(document).on('click', v._jsMenuSidebar, this.clickJsMenuSidebarCurrent);
        $(document).on('click', v._jsSubAccountsAdd, this.clickJsSubAccountsAdd);
        $(document).on('click', v._jsSubAccountsEdit, this.clickJsSubAccountsEdit);
        $(document).on('click', v._jsSubAccountsOrder, this.clickJsSubAccountsOrder);
        $(document).on('click', v._jsSubAccountFormButton, this.clickJsSubAccountFormButton);
        $(document).on('keyup change', v._jsSubAccountFormBoxMarkup, this.keyupJsSubAccountFormBoxMarkup);
        $(document).on('click', v._jsCabinetContactPersonEdit, this.clickJsCabinetContactPersonEdit);
        $(document).on('click', v._jsCabinetContactDetailsEdit, this.clickJsCabinetContactDetailsEdit);
        $(document).on('click', v._jsCabinetContactPersonFormButton, this.clickJsCabinetContactPersonFormButton);
        $(document).on('click', v._jsCabinetContactDetailsFormButton, this.clickJsCabinetContactDetailsFormButton);
        $(document).on('click', v._jsCabinetAddressAdd, this.clickJsCabinetAddressAddOrEdit);
        $(document).on('click', v._jsCabinetAddressEdit, this.clickJsCabinetAddressAddOrEdit);
        $(document).on('click', v._jsCabinetAddressButton, this.clickJsCabinetAddressButton);
        $(document).on('click', v._jsOrderHistoryTooltipIcon, this.clickJsOrderHistoryTooltipIcon);
    };

    Ridex.Cabinet.prototype.clickJsMenuSidebarCurrent = function () {
        if (!$(this).closest(v._jsMenuSidebar).hasClass("open")) {
            $(this).closest(v._jsMenuSidebar).addClass('open');
        } else {
            $(this).closest(v._jsMenuSidebar).removeClass('open');
        }
    };

    Ridex.Cabinet.prototype.clickJsSubAccountsAdd = function () {
        let obj = $(this);

        Ridex.Ajax.loadSubAccountsAddPopup(obj);
    };

    Ridex.Cabinet.prototype.clickJsSubAccountsEdit = function (e) {
        e.preventDefault();

        let obj = $(this),
            url = obj.attr('href');

        Ridex.Ajax.loadSubAccountsEditPopup(obj, url);
    };

    Ridex.Cabinet.prototype.clickJsSubAccountsOrder = function (e) {
        e.preventDefault();

        let obj = $(this),
            url = obj.attr('href');

        Ridex.Ajax.loadSubAccountsOrderPopup(obj, url);
    };

    Ridex.Cabinet.prototype.clickJsSubAccountFormButton = function () {
        let obj = $(this),
            form = obj.closest(v._jsPopup).find(v._jsSubAccountForm),
            url = form.attr('action'),
            data = form.serialize();

        form.find(v._jsInputError).hide();

        Ridex.Ajax.loadAfterClickJsSubAccountFormButton(obj, form, url, data);
    };

    Ridex.Cabinet.prototype.keyupJsSubAccountFormBoxMarkup = function () {
        let obj = $(this);
        let markup = Number(obj.val());
        let price = markup * 100;

        if(Ridex.getPrecision(markup) > 2) {
            $(this).val(markup.toFixed(2));
        }

        obj.parent().find(v._jsSubAccountFormMarkupPrice).find('span').text(price.toFixed(0));
    };

    Ridex.Cabinet.prototype.clickJsCabinetContactPersonEdit = function () {
        Ridex.Ajax.loadCabinetContactPersonPopup($(this));
    };

    Ridex.Cabinet.prototype.clickJsCabinetContactDetailsEdit = function () {
        Ridex.Ajax.loadCabinetContactDetailsPopup($(this));
    };

    Ridex.Cabinet.prototype.clickJsCabinetContactPersonFormButton = function () {
        let obj = $(this),
            form = obj.closest(v._jsPopup).find(v._jsCabinetContactPersonForm),
            url = form.attr('action'),
            data = form.serialize();

        form.find(v._jsInputError).hide();

        Ridex.Ajax.loadAfterClickJsCabinetContactPersonFormButton(obj, form, url, data);
    };

    Ridex.Cabinet.prototype.clickJsCabinetContactDetailsFormButton = function () {
        let obj = $(this),
            form = obj.closest(v._jsPopup).find(v._jsCabinetContactDetailsForm),
            url = form.attr('action'),
            data = form.serialize();

        form.find(v._jsInputError).hide();

        Ridex.Ajax.loadAfterClickJsCabinetContactDetailsFormButton(obj, form, url, data);
    };

    Ridex.Cabinet.prototype.clickJsCabinetAddressAddOrEdit = function () {
        Ridex.Ajax.loadCabinetAddressPopup($(this));
    };

    Ridex.Cabinet.prototype.clickJsCabinetAddressButton = function (e) {
        e.preventDefault();

        let obj = $(this),
            form = obj.closest(v._jsPopup).find(v._jsCabinetAddressForm),
            url = form.attr('action'),
            data = form.serialize();

        form.find(v._jsInputError).hide();

        Ridex.Ajax.loadAfterClickJsCabinetAddressButton(obj, form, url, data);
    };

    Ridex.Cabinet.prototype.clickJsOrderHistoryTooltipIcon = function (e) {
        if($(window).width() < 992) {
            if ($(this).closest(v._jsOrderHistoryTooltip).hasClass('show')) {
                $(this).closest(v._jsOrderHistoryTooltip).removeClass('show');
            } else {
                $(v._jsOrderHistoryTooltip).removeClass('show');
                $(this).closest(v._jsOrderHistoryTooltip).addClass('show');
            }

        }
    };

})();

new Ridex.Cabinet();

(function () {
    let v = Ridex.vars({
        intervalForUpdateCart:                    null,
        _jsAddToCart:                             '._js-addToCart',
        _jsCartDropdown:                          '._js-cart-dropdown',
        _jsAmountInputCart:                       '._js-amount-input-cart',
        _jsTotalQty:                              '._js-totalQty',
        _jsChangeQty:                             '._js-changeQty',
        _jsTotalPrice:                            '._js-totalPrice',
        _jsRecommendedProductsCart:               '._js-recommended-products-cart',
        _jsCartAddressShow:                       '._js-cartAddressShow',
        _jsCartAddressButton:                     '._js-cartAddressButton',
        _jsConfirmOrder:                          '._js-confirmOrder',
        _jsCartProduct:                           '._js-cart-product',
        _jsCartProductAmount:                     '._js-cart-product__amount',
        _jsCartProductsSelectAll:                 '._js-cart-product__select-all',
        _jsCartProductDelete:                     '._js-cart-product__delete',
        _jsCartProductDeleteSelected:             '._js-cart-product__delete-selected',
        _jsCartProductDeleteSelectedConfirmation: '._js-cart-product__delete-selected-confirmation',
        _jsCartProductDeleteAll:                  '._js-cart-product__delete-all',
        _jsCartProductDeleteAllConfirmation:      '._js-cart-product__delete-all-confirmation',
        _jsCartPageProducts:                      '._js-cart-page__products',
        _jsCartCheckoutBlock:                     '._js-cart-checkout-block',
        _jsPopupCartProductsDeleteSelected:       '._js-popup-cart-products-delete-selected',
        _jsPopupCartProductsDeleteAll:            '._js-popup-cart-products-delete-all',
        _jsPopupCartAddressSave:                  '._js-popup-cart-address-save',
        _jsPalletCalculateButton:                 '._js-pallet-calculate-button',
        _jsPalletsResult:                         '._js-pallets-result',
        _jsCartPage:                              '._js-cart-page',
        _jsCartPageHeader:                        '._js-cart-page__header',
        _jsCartPagePallet:                        '._js-cart-page__pallet',
        _jsCartPageTop:                           '._js-cart-page__top',
        _jsCartPageTotal:                         '._js-cart-page__total',
        _jsCartPagePalletMore:                    '._js-cart-page__pallet-more',
        _jsCartPageEmpty:                         '._js-cart-page__empty',
        _jsCartPageAddresses:                     '._js-cart-page__addresses',
        _jsBackOrderQty:                          '._js-back-order-qty'
    });

    Ridex.Cart = function (){
        $(document).on('click', v._jsAddToCart, this.clickJsAddToCart);
        $(document).on('click', v._jsChangeQty, this.clickJsChangeQty);
        $(document).on('click', v._jsCartProduct + ' input[type="checkbox"]', this.clickJsCartProductCheckbox);
        $(document).on('click', v._jsCartProductDelete, this.clickJsCartProductDelete);
        $(document).on('click', v._jsCartProductDeleteSelected, this.clickJsCartProductsDeleteSelected);
        $(document).on('click', v._jsCartProductDeleteSelectedConfirmation, this.clickJsCartProductsDeleteSelectedConfirmation);
        $(document).on('click', v._jsCartProductDeleteAll, this.clickJsCartProductDeleteAll);
        $(document).on('click', v._jsCartProductDeleteAllConfirmation, this.clickJsCartProductsDeleteAllConfirmation);
        $(document).on('click', v._jsPalletCalculateButton, this.clickJsPalletCalculateButton);
        $(document).on('click', v._jsCartPagePalletMore, this.clickJsCartPagePalletMore);
        $(document).on('click', v._jsCartAddressShow, this.clickJsCartAddressShow);
        $(document).on('click', v._jsCartAddressButton, this.clickJsCartAddressButton);
        $(document).on('click', v._jsConfirmOrder, this.clickJsConfirmOrder);

        $(document).on('change', v._jsCartProductsSelectAll + ' input[type="checkbox"]', this.changeJsCartProductsSelectAllCheckbox);
        $(document).on('change', v._jsAmountInputCart, this.changeJsAmountInputCart);
        $(document).on('change', v._jsBackOrderQty, this.changeJsBackOrderQty);

        $(document).ready(function () {
            $(v._jsAmountInputCart).each(function() {
                Ridex.changeStateButton($(this));
            });
        });
    };

    Ridex.Cart.updateCartPrice = function (obj) {
        let url =  obj.closest(v._jsCartProductAmount).data('url'),
            qty =  obj.closest(v._jsCartProductAmount).find(v._jsAmountInputCart).val(),
            step = obj.closest(v._jsCartProductAmount).find(v._jsAmountInputCart).data('step'),
            maxQty = obj.closest(v._jsCartProductAmount).find(v._jsAmountInputCart).data('max'),
            storageQuantityText = obj.closest(v._jsCartProductAmount).find(v._jsAmountInputCart).data('storage-quantity-text');

        obj.closest(v._jsCartProductAmount).find(v._jsProduct__ItemQtyTooltip).remove();

        Ridex.changeStateButton(obj.closest(v._jsCartProductAmount).find(v._jsAmountInputCart))

        if (!url) {
            return false;
        }

        obj.closest(v._jsCartProductAmount).find(v._jsAmountInputCart).updateQtyInput(qty, step, maxQty);

        if (qty > maxQty) {
            obj.closest(v._jsCartProductAmount).append('<div class="product-amount__tooltip _js-item-qty-tooltip">'+storageQuantityText+'</div>');
            Ridex.Ajax.loadCartUpdatePrice(obj, url, maxQty);
        } else {
            Ridex.Ajax.loadCartUpdatePrice(obj, url, obj.closest(v._jsCartProductAmount).find(v._jsAmountInputCart).val());
        }
    };

    Ridex.Cart.refreshCartBlocks = function (response) {
        $(v._jsTotalPrice).find('span').html(response.data.totalPrice.total);
        $(v._jsHeaderCartDropdown).remove();

        if ($(v._jsCartPage).length) {
            if (response.data.totalPrice.inTotal === 0) {
                $(v._jsCartPageHeader).remove();
                $(v._jsCartPageProducts).remove();
                $(v._jsPalletsResult).remove();
                $(v._jsCartPageTotal).remove();
                $(v._jsCartPageTop).remove();
                $(v._jsCartPage).find('.container').append(response.data.cartEmptyView);
            } else {
                // $(v._jsCartPageProducts).html(response.data.productsBlock);
                $(v._jsCartCheckoutBlock).html(response.data.checkoutBlock);
                Ridex.toggleDisabledByCheckboxes(
                    $(v._jsCartProductDeleteSelected),
                    $(v._jsCartProduct).find('input[name="articleIds"]')
                );
            }
        }
    };

    Ridex.Cart.prototype.clickJsAddToCart = function () {
        if (window.Laravel.auth && !window.Laravel.globalUser.showPrice && !window.Laravel.globalUser.vatNumber) {
            Ridex.Ajax.loadVatRequiredPopup();
            return false;
        } else if (window.Laravel.auth && !window.Laravel.globalUser.showPrice) {
            Ridex.Ajax.loadWaitVerifyVatPopup();
            return false;
        } else if (!window.Laravel.auth) {
            Ridex.Ajax.loadSignInPopup();
        }

        let obj = $(this),
            url = obj.data('action'),
            qty= window.Laravel.auth ? obj.closest(v._jsProduct).find(v._jsAmountInput).val() : 1;

        Ridex.Ajax.loadAfterClickJsAddToCart(obj, url, qty);

        return false;
    };

    Ridex.Cart.boLogic = function (obj) {
        let qty =  obj.closest(v._jsCartProductAmount).find(v._jsAmountInputCart).val(),
            maxQty = obj.closest(v._jsCartProductAmount).find(v._jsAmountInputCart).data('max'),
            stepQty = obj.closest(v._jsCartProductAmount).find(v._jsAmountInputCart).data('step'),
            backOrderFooter = obj.closest('.item-buy__backorder').find('.item-buy__backorder-footer');

        let newBackOrderQty = 0;
        if (qty > maxQty) {
            backOrderFooter.removeClass('hide');
            newBackOrderQty = qty - maxQty
        } else {
            backOrderFooter.addClass('hide');
        }

        backOrderFooter.find(v._jsBackOrderQty).updateQtyInput(newBackOrderQty, stepQty, maxQty);

        return false;
    };

    Ridex.Cart.prototype.clickJsChangeQty = function () {
        let obj = $(this);

        clearTimeout(v.intervalForUpdateCart);
        v.intervalForUpdateCart = setTimeout(function () {
            Ridex.Cart.boLogic(obj);
            Ridex.Cart.updateCartPrice(obj);
        }, 500);

        return false;
    };

    Ridex.Cart.prototype.clickJsCartProductCheckbox = function () {
        Ridex.toggleDisabledByCheckboxes(
            $(v._jsCartProductDeleteSelected),
            $(v._jsCartProduct).find('input[name="articleIds"]')
        );
    };

    Ridex.Cart.prototype.clickJsCartProductDelete = function () {
        let obj = $(this),
            url = obj.data('action');

        Ridex.Ajax.loadAfterClickJsCartProductDelete(obj, url);

        return false;
    };

    Ridex.Cart.prototype.clickJsCartProductsDeleteSelected = function () {
        Ridex.Ajax.loadCartProductsDeleteSelectedPopup();
    };

    Ridex.Cart.prototype.clickJsCartProductsDeleteSelectedConfirmation = function () {
        let obj = $(this),
            url = obj.data('url'),
            articleIds = [];

        $(v._jsCartProduct).find('input[name="articleIds"]').each(function () {
            if ($(this).is(':checked')) {
                articleIds.push($(this).val());
            }
        });

        Ridex.Ajax.loadAfterClickJsCartProductDeleteConfirmation(obj, url, articleIds);

        return false;
    }

    Ridex.Cart.prototype.clickJsCartProductDeleteAll = function (e) {
        e.preventDefault();

        Ridex.Ajax.loadCartProductsDeleteAllPopup();
    };

    Ridex.Cart.prototype.clickJsCartProductsDeleteAllConfirmation = function () {
        let obj = $(this),
            url = obj.data('url');

        Ridex.Ajax.loadAfterClickJsCartProductDeleteAllConfirmation(obj, url);

        return false;
    };

    Ridex.Cart.prototype.clickJsPalletCalculateButton = function () {
        let obj = $(this),
            url = obj.attr('href');

        Ridex.Ajax.loadAfterClickJsPalletCalculateButton(obj, url);

        return false;
    };

    Ridex.Cart.prototype.clickJsCartPagePalletMore = function () {
        if (!$(this).closest(v._jsCartPagePallet).hasClass("open")) {
            $(v._jsCartPagePallet).removeClass('open');
            $(this).closest(v._jsCartPagePallet).addClass('open');
        } else {
            $(this).closest(v._jsCartPagePallet).removeClass('open');
        }
    };

    Ridex.Cart.prototype.clickJsCartAddressShow = function () {
        Ridex.Ajax.loadCartAddressSavePopup($(this));
        return false;
    };

    Ridex.Cart.prototype.clickJsCartAddressButton = function () {
        let obj = $(this),
            form = obj.closest('form'),
            url = form.attr('action'),
            data = form.serialize();

        form.find(v._jsInputError).hide();

        Ridex.Ajax.loadAfterClickJsCartAddressButton(obj, form, url, data);

        return false;
    };

    Ridex.Cart.prototype.clickJsConfirmOrder = function () {
        if (Ridex.Ajax.loadEmailVerifyCheck() === 0) {
            Ridex.Ajax.loadVerifyPopup();

            return false;
        }

        let obj = $(this),
            form = obj.closest('form'),
            url = form.attr('action'),
            data = form.serialize();

        form.find(v._jsInputError).hide();

        Ridex.Ajax.loadAfterClickJsConfirmOrder(obj, form, url, data);

        return false;
    };

    Ridex.Cart.prototype.changeJsCartProductsSelectAllCheckbox = function () {
        let obj = $(this),
            checkboxes = $(v._jsCartProduct).find('input[name="articleIds"]');

        Ridex.toggleMultipleCheckboxes(obj, checkboxes);
        Ridex.toggleDisabledByCheckboxes($(v._jsCartProductDeleteSelected), checkboxes);
    };

    Ridex.Cart.prototype.changeJsAmountInputCart = function () {
        Ridex.Cart.boLogic($(this));
        Ridex.Cart.updateCartPrice($(this));
        return false;
    };

    Ridex.Cart.prototype.changeJsBackOrderQty = function () {
        let obj = $(this),
            step = obj.attr('step'),
            qty = obj.val();

        if (step > 1 && qty % 2 !== 0) {
            let result = qty - 1;
            obj.val(result === 0 ? step : result);
        }
    };
})();

new Ridex.Cart();

(function () {

    let v = Ridex.vars({
        intervalForUpdateCart:                          null,
        _jsBackOrder:                                   '._js-back-order',
        _jsBackOrderHeaderSelectAll:                    '._js-back-order__header-select-all',
        _jsBackOrderHeaderDeleteSelected:               '._js-back-order__header-delete-selected',
        _jsItemBuyCheckBackOrder:                       '._js-item-buy__check-back-order',
        _jsItemBuyDeleteBackOrder:                      '._js-item-buy__delete-back-order',
        _jsItemBuyAvailabilityManager:                  '._js-item-buy__availability-manager',
        _jsBackOrderBtnCart:                            '._js-back-order__btn-cart',
        _jsBackOrderChangeQty:                          '._js-back-order-change-qty',
        _jsBackOrderAmountInput:                        '._js-back-order-amount-input',
        _jsBackOrderProductAmount:                      '._js-back-order-product__amount',
        _jsBackOrderProductDeleteSelectedConfirmation:  '._js-back-order-product__delete-selected-confirmation',
        _jsMinus:                                       '._js-minus',
        _jsPlus:                                        '._js-plus',
    });

    Ridex.BackOrder = function (){
        $(document).on('click', v._jsBackOrderHeaderSelectAll, this.clickJsBackOrderHeaderSelectAll);
        $(document).on('click', v._jsBackOrderHeaderDeleteSelected, this.clickJsBackOrderHeaderDeleteSelected);
        $(document).on('click', v._jsItemBuyCheckBackOrder, this.clickJsItemBuyCheckBackOrder);
        $(document).on('click', v._jsItemBuyDeleteBackOrder, this.clickJsItemBuyDeleteBackOrder);
        $(document).on('click', v._jsItemBuyAvailabilityManager, this.clickJsItemBuyAvailabilityManager);
        $(document).on('click', v._jsBackOrderBtnCart, this.clickJsBackOrderBtnCart);
        $(document).on('click', v._jsBackOrderChangeQty, this.clickJsBackOrderChangeQty);
        $(document).on('change', v._jsBackOrderAmountInput, this.clickJsBackOrderAmountInput);
        $(document).on('click', v._jsBackOrderProductDeleteSelectedConfirmation, this.clickJsBackOrderProductDeleteSelectedConfirmation);

        $(document).ready(function () {
            $(v._jsBackOrderAmountInput).each(function() {
                Ridex.changeStateButton($(this));
            });
        });
    };

    Ridex.BackOrder.prototype.clickJsBackOrderHeaderSelectAll = function () {
        let obj = $(this);
        let isChecked = obj.prop('checked');
        obj.closest(v._jsBackOrder).find('[data-checkbox]:not([disabled])').prop('checked', isChecked);
        toggleButtonState();
    };

    Ridex.BackOrder.prototype.clickJsItemBuyCheckBackOrder = function () {
        let checkSelectedCheckbox =  $(this).closest('.back-order').find('[data-checkbox]:checked')
        if (checkSelectedCheckbox.length === 0) {
            $(v._jsBackOrderHeaderSelectAll).prop('checked', false)
        }
        toggleButtonState();
    };

    Ridex.BackOrder.prototype.clickJsItemBuyAvailabilityManager = function () {
        let obj = $(this);
        obj.attr('disabled', 'disabled');
        let url = obj.data('action');

        $.ajax({
            url: url,
            data: {},
            dataType: 'JSON',
            type: "POST",
            success: function (response) {
                Ridex.Ajax.loadDefaultPopup(response.message.description, response.message.title);
                obj.addClass('disabled');
            },
            error:function (response) {
            },
            complete:function (data) {
                obj.removeAttr('disabled');
            }
        });
    };

    Ridex.BackOrder.prototype.clickJsBackOrderBtnCart = function () {
        let obj = $(this);
        let form = obj.closest('.back-order');
        obj.attr('disabled', 'disabled');
        let url = form.attr('action');
        let checkBoxes = form.find('[data-checkbox]:checked');

        let articles = [];
        checkBoxes.each(function () {
            articles.push({
                'articleId' : $( this ).data('article'),
                'qty' : $( this ).closest('.item-buy').find(v._jsBackOrderAmountInput).val()
            });
        });

        $.ajax({
            url: url,
            data: {articles : articles},
            dataType: 'JSON',
            type: "POST",
            success: function (response) {
                if(response.success) {
                    window.location = response.redirect;
                }
            },
            error:function (response) {
            },
            complete:function (data) {
                obj.removeAttr('disabled');
            }
        });
    };

    Ridex.BackOrder.prototype.clickJsBackOrderChangeQty = function () {
        let obj = $(this);
        clearTimeout(v.intervalForUpdateCart);

        v.intervalForUpdateCart = setTimeout(function () {
            updateOrderPrice(obj)
        }, 500);

        return false;
    };

    Ridex.BackOrder.prototype.clickJsBackOrderAmountInput = function () {
        updateOrderPrice($(this));
        return false;
    };

    Ridex.BackOrder.prototype.clickJsItemBuyDeleteBackOrder = function () {
        let obj = $(this);
        obj.attr('disabled', 'disabled');
        let url = obj.data('action');

        $.ajax({
            url: url,
            data: {},
            dataType: 'JSON',
            type: "POST",
            success: function (response) {
                obj.closest('.item-buy').remove();
                if($('.back-order__products .item-buy').length === 0) {
                    $('.back-order__btn').remove();
                    $('.back-order__header').remove();
                    $('.profile-page__body-content').append(response.data.emptyView);
                }
            },
            error:function (response) {
            },
            complete:function (data) {
                obj.removeAttr('disabled');
            }
        });
    };

    Ridex.BackOrder.prototype.clickJsBackOrderHeaderDeleteSelected = function () {
        let obj = $(this);
        obj.attr('disabled', 'disabled');
        let checkBoxes = obj.closest('.back-order').find('[data-checkbox]:checked');
        let quantitySelected = checkBoxes.length;

        Ridex.Ajax.loadBackOrderConfirmDeletePopup(quantitySelected);
    };

    Ridex.BackOrder.prototype.clickJsBackOrderProductDeleteSelectedConfirmation = function () {
        let obj = $(this);
        let url = obj.data('action');

        let articleIds = [];
        let checkBoxes = $(v._jsBackOrder).find('[data-checkbox]:checked');
        checkBoxes.each(function () {
            articleIds.push($( this ).data('article'));
        });

        $.ajax({
            url: url,
            data: {articleIds:articleIds},
            dataType: 'JSON',
            type: "POST",
            success: function (response) {
                window.location.reload();
            },
            error:function (response) {
            },
            complete:function (data) {
                obj.removeAttr('disabled');
            }
        });
    };

    function updateOrderPrice(obj) {
        let qty =  obj.closest(v._jsBackOrderProductAmount).find(v._jsBackOrderAmountInput).val(),
            maxQty = obj.closest(v._jsBackOrderProductAmount).find(v._jsBackOrderAmountInput).data('max'),
            step = obj.closest(v._jsBackOrderProductAmount).find(v._jsBackOrderAmountInput).data('step'),
            url =  obj.closest(v._jsBackOrderProductAmount).data('url'),
            storageQuantityText = obj.closest(v._jsBackOrderProductAmount).find(v._jsBackOrderAmountInput).data('storage-quantity-text');

        obj.closest(v._jsBackOrderProductAmount).find('._js-item-qty-tooltip').remove();

        Ridex.changeStateButton(obj.closest(v._jsBackOrderProductAmount).find(v._jsBackOrderAmountInput));

        if (!url) {
            return false;
        }

        obj.closest(v._jsBackOrderProductAmount).find(v._jsBackOrderAmountInput).updateQtyInput(qty, step, maxQty);

        let newQty = obj.closest(v._jsBackOrderProductAmount).find(v._jsBackOrderAmountInput).val();

        if (newQty > maxQty) {
            obj.closest(v._jsBackOrderProductAmount).append('<div class="product-amount__tooltip _js-item-qty-tooltip">'+storageQuantityText+'</div>');
            newQty = maxQty;
        }
        
        $.ajax({
            url: url,
            data: {qty:newQty},
            context: {
                loader: true
            },
            dataType: 'json',
            type: "POST",
            success: function (response) {
                if (response.success) {
                    obj.closest('.item-buy').find(v._jsBackOrderAmountInput).val(response.data.qty);
                    obj.closest('.item-buy').find('.item-buy__total span').text(response.data.total);
                    obj.closest('.item-buy').find('.item-buy__single span').text(response.data.price);
                }
            }
        });
    }
    function toggleButtonState() {
        if ($('[data-checkbox]:checked, [data-select-all]:checked').length > 0) {
            $('.back-order__btn .btn').removeClass('btn-disabled').addClass('btn-yellow');
            $('.back-order__header-delete').removeClass('back-order__header-delete--disabled');
        } else {
            $('.back-order__btn .btn').removeClass('btn-yellow').addClass('btn-disabled');
            $('.back-order__header-delete').addClass('back-order__header-delete--disabled');
        }
    }

})();

new Ridex.BackOrder();
(function () {
    let v = Ridex.vars({
        intervalForUpdateWishlist:                    null,
        _jsWishlistPage:                              '._js-wishlist-page',
        _jsWishlistPageHeader:                        '._js-wishlist-page__header',
        _jsWishlistPageFooter:                        '._js-wishlist-page__footer',
        _jsPopupWishlistSelect:                       '._js-popup-wishlistSelect',
        _jsPopupWishlistThanks:                       '._js-popup-wishlistThanks',
        _jsPopupWishlistProductsDeleteSelected:       '._js-popup-wishlistProductsDeleteSelected',
        _jsPopupSubscribeToWishlist:                  '._js-popup-subscribeToWishlist',
        _jsChangeWishQty:                             '._js-changeWishQty',
        _jsWishProductNum:                            '._js-wish-product__num',
        _jsWishAmount:                                '._js-wishAmount',
        _jsAmountInputWishlist:                       '._js-amount-input-wishlist',
        _jsItemBuySubscription:                       '._js-item-buy__subscription',
        _jsWishlistNew:                               '._js-wishlistNew',
        _jsShowWishlist:                              '._js-showWishlist',
        _jsRemoveFromWishlist:                        '._js-removeFromWishlist',
        _jsAddItemToWishlist:                         '._js-addItemToWishlist',
        _jsWishlistFormButton:                        '._js-wishlistFormButton',
        _jsAddToSpecialWishlist:                      '._js-addToSpecialWishlist',
        _jsSpecialSubscribeToProduct:                 '._js-specialSubscribeToProduct',
        _jsSpecialSubscribeByWishlist:                '._js-specialSubscribeByWishlist',
        _jsDeleteItemFromSpecial:                     '._js-deleteItemFromSpecial',
        _jsSpecialWishListTruncate:                   '._js-specialWishListTruncate',
        _jsSpecialProductToBasket:                    '._js-specialProductToBasket',
        _jsSpecialWishlistToBasket:                   '._js-specialWishlistToBasket',
        _jsProductToBasket:                           '._js-productToBasket',
        _jsWishlistToBasket:                          '._js-wishlistToBasket',
        _jsShowSubscribeToWishlistPopup:              '._js-showSubscribeToWishlistPopup',
        _jsShowSubscribeToProductPopup:               '._js-showSubscribeToProductPopup',
        _jsPopupWishlistAdd:                          '._js-popup-wishlistAdd',
        _jsWishlistProductSelectAll:                  '._js-wishlist-product__select-all',
        _jsWishProduct:                               '._js-wish-product',
        _jsWishProductCart:                           '._js-wish-product__cart',
        _jsWishProductTotal:                          '._js-wish-product__total',
        _jsWishGroupAdd:                              '._js-wish-group-add',
        _jsWishGroupAmount:                           '._js-wish-group__amount',
        _jsWishGroupDate:                             '._js-wish-group__date',
        _jsWishlistGroup:                             '._js-wishlist-group',
        _jsWishlistAddContent:                        '._js-wishlist-add__content',
        _jsWishlistPageItems:                         '._js-wishlist-page__items',
        _jsWishlistItemBuy:                           '._js-wishlist-item-buy',
        _jsWishlistProductDelete:                     '._js-wishlist-product__delete',
        _jsWishlistProductDeleteSelected:             '._js-wishlist-product__delete-selected',
        _jsWishlistProductDeleteSelectedConfirmation: '._js-wishlist-product__delete-selected-confirmation',
        _jsNewWishlistForm:                           '._js-newWishlistForm'
    });

    Ridex.Wishlist = function (){
        $(document).on('click', v._jsChangeWishQty, this.clickJsChangeWishQty);
        $(document).on('click', v._jsWishlistNew, this.clickJsWishlistNew);
        $(document).on('click', v._jsShowWishlist, this.clickJsShowWishlist);
        $(document).on('click', v._jsWishlistItemBuy + ' input[type="checkbox"]', this.clickJsWishlistItemBuyCheckbox);
        $(document).on('click', v._jsAddItemToWishlist, this.clickJsAddItemToWishlist);
        $(document).on('click', v._jsWishlistFormButton, this.clickJsWishlistFormButton);
        $(document).on('click', v._jsAddToSpecialWishlist, this.clickJsAddToSpecialWishlist);
        $(document).on('click', v._jsSpecialSubscribeToProduct, this.clickJsSpecialSubscribeToProduct);
        $(document).on('click', v._jsSpecialSubscribeByWishlist, this.clickJsSpecialSubscribeByWishlist);
        $(document).on('click', v._jsDeleteItemFromSpecial, this.clickJsDeleteItemFromSpecialOrTruncate);
        $(document).on('click', v._jsSpecialWishListTruncate, this.clickJsDeleteItemFromSpecialOrTruncate);
        $(document).on('click', v._jsSpecialProductToBasket, this.clickJsSpecialProductToBasket);
        $(document).on('click', v._jsSpecialWishlistToBasket, this.clickJsSpecialWishlistToBasket);
        $(document).on('click', v._jsProductToBasket, this.clickJsProductToBasket);
        $(document).on('click', v._jsWishlistToBasket, this.clickJsWishlistToBasket);
        $(document).on('click', v._jsShowSubscribeToWishlistPopup, this.clickJsShowSubscribeToWishlistPopup);
        $(document).on('click', v._jsShowSubscribeToProductPopup, this.clickJsShowSubscribeToProductPopup);
        $(document).on('click', v._jsWishlistProductDelete, this.clickJsWishlistProductDelete);
        $(document).on('click', v._jsWishlistProductDeleteSelected, this.clickJsWishlistProductsDeleteSelected);
        $(document).on('click', v._jsWishlistProductDeleteSelectedConfirmation, this.clickJsWishlistProductsDeleteSelectedConfirmation);

        $(document).on('change', v._jsAmountInputWishlist, this.changeJsAmountInputWishlist);
        $(document).on('change', v._jsWishlistProductSelectAll, this.changeJsWishlistProductsSelectAllCheckbox);
    };

    Ridex.Wishlist.updateIconAndXlink = function (obj, type) {
        let text,
            nextSibling = obj.find('svg').get(0).nextSibling;

        if(nextSibling) {
            nextSibling.remove();
        }

        if(type === 'add') {
            text = obj.data('remove-from-wishlist-text');
            obj.addClass('wishlist--add');
            obj.find('use').xLinkChangeMarker('sprite-wishlist-icon-bw');
        }

        if(type === 'remove') {
            text = obj.data('add-to-wishlist-text');
            obj.removeClass('wishlist--add');
            obj.find('use').xLinkChangeMarker('sprite-wishlist-icon-outline-bw');
        }

        if (typeof text !== 'undefined' && text !== false) {
            obj.append(text);
        }
    };

    Ridex.Wishlist.updateWishlistPrice = function (obj){
        let url = obj.closest(v._jsWishProductNum).data('url'),
            qty = Math.abs(parseInt(obj.closest(v._jsWishProductNum).find(v._jsWishAmount).val(), 10)),
            step = obj.data('step');

        obj.val(qty);

        if (isNaN(qty)) {
            qty = step;
            obj.val(step);
        }

        if (step > 1) {
            if(qty % 2 !== 0) {
                qty = qty -1;
                obj.val(qty);
            }
        }

        if (qty < 1) {
            qty = step;
            obj.val(qty);
        }

        let wishItemBlock = obj.closest(v._jsWishProduct),
            wishBlock = obj.closest(v._jsWishlistGroup);

        Ridex.Ajax.loadAfterUpdateWishlistPrice(url, qty, wishBlock, wishItemBlock);
    };

    Ridex.Wishlist.refreshWishlistBlocks = function (response) {
        $(v._jsGrandQty).find('span').html(response.grandQty);

        if(response.grandQty === 0){
            $(v._jsWishlistPageHeader).remove();
            $(v._jsWishlistPageItems).remove();
            $(v._jsWishlistPageFooter).remove();
            $(v._jsWishlistPage).find('.container').append(response.wishlistEmptyView);
        } else {
            $(v._jsGrandTotal).html(response.grandTotal);

            if(response.wishlistItemsView) {
                $(v._jsWishlistPageItems).replaceWith(response.wishlistItemsView);
            }

            Ridex.toggleDisabledByCheckboxes(
                $(v._jsWishlistProductDeleteSelected),
                $(v._jsWishlistItemBuy).find('input[name="articleIds"]')
            );
        }
    };

    Ridex.Wishlist.prototype.changeJsWishlistProductsSelectAllCheckbox = function() {
        let obj = $(this),
            checkboxes = $(v._jsWishlistItemBuy).find('input[name="articleIds"]');

        Ridex.toggleMultipleCheckboxes(obj, checkboxes);
        Ridex.toggleDisabledByCheckboxes(
            $(v._jsWishlistProductDeleteSelected),
            checkboxes
        );
    };

    Ridex.Wishlist.prototype.clickJsChangeWishQty = function () {
        if (!window.Laravel.auth) {
            Ridex.Ajax.loadSignInPopup();
            return false;
        }

        let obj = $(this);

        clearTimeout(v.intervalForUpdateWishlist);
        v.intervalForUpdateWishlist = setTimeout(function () {
            Ridex.Wishlist.updateWishlistPrice(obj)
        }, 500);

        return false;
    };

    Ridex.Wishlist.prototype.clickJsWishlistNew = function () {
        if (!window.Laravel.auth) {
            Ridex.Ajax.loadSignInPopup();

            return false;
        }

        let obj = $(this),
            active = obj.hasClass('wishlist--add'),
            articleId = obj.data('article-id'),
            genericId = obj.data('generic-id'),
            step = obj.data('step'),
            storageQty = obj.data('storage-qty'),
            eventObject = obj.data('event-object'),
            eventWishlist = obj.data('event-wishlist'),
            url = obj.data('add-to-wishlist-url');

        if (active) {
            url = obj.data('remove-url');
        } else if (storageQty < 1) {
            url = obj.data('add-to-special-url');
        } else if(url === undefined || url === false) {
            if(window.Laravel.auth){
                Ridex.Ajax.loadWishlistAddPopup();
            }

            return false;
        } else {
            if(window.Laravel.auth){
                Ridex.Ajax.loadWishlistSelectPopup({
                    url: obj.data('show-wishlist-url'),
                    articleId: articleId,
                    genericId: genericId,
                    step: step,
                    eventObject: eventObject,
                    eventWishlist: eventWishlist
                });
            }

            return false;
        }

        Ridex.Ajax.loadAfterClickJsWishlistNew(obj, url, articleId, genericId, step, active, storageQty);

        return false;
    };

    Ridex.Wishlist.prototype.clickJsShowWishlist = function () {
        if (!window.Laravel.auth) {
            Ridex.Ajax.loadSignInPopup();
            return false;
        }

        let obj = $(this),
            url = obj.data('url'),
            articleId = obj.data('articleid'),
            genericId = obj.data('genericid'),
            eventObject = obj.data('event-object'),
            eventWishlist = obj.data('event-wishlist'),
            step = obj.data('step');

        Ridex.Ajax.loadWishlistSelectPopup({
            url: url,
            articleId: articleId,
            genericId: genericId,
            step: step,
            eventObject: eventObject,
            eventWishlist: eventWishlist
        });

        return true;
    };

    Ridex.Wishlist.prototype.clickJsWishlistItemBuyCheckbox = function () {
        Ridex.toggleDisabledByCheckboxes(
            $(v._jsWishlistProductDeleteSelected),
            $(v._jsWishlistItemBuy).find('input[name="articleIds"]')
        );
    };

    Ridex.Wishlist.prototype.clickJsAddItemToWishlist = function () {
        if (!window.Laravel.auth) {
            Ridex.Ajax.loadSignInPopup();
            return false;
        }

        let obj = $(this),
            articleId = $(this).closest(v._jsPopupWishlistSelect).data('article-id'),
            genericId = $(this).closest(v._jsPopupWishlistSelect).data('generic-id'),
            step = $(this).closest(v._jsPopupWishlistSelect).data('step-id'),
            url = obj.data('url');

        Ridex.Ajax.loadAfterClickJsAddItemToWishlist(obj, url, articleId, genericId, step)
    };

    Ridex.Wishlist.prototype.clickJsWishlistFormButton = function () {
        let obj = $(this),
            form = obj.closest('form'),
            url = form.attr('action'),
            articleId = obj.closest(v._jsPopupWishlistSelect).data('article-id'),
            data = form.serialize();

        form.find(v._jsInputError).html('');
        form.find(v._jsInputError).hide();

        if(articleId !== undefined && articleId !== false){
            data += '&articleId='+articleId;
        }

        Ridex.Ajax.loadAfterClickJsWishlistFormButton(obj, form, url, data);

        return false;
    };

    Ridex.Wishlist.prototype.clickJsAddToSpecialWishlist = function () {
        if (!window.Laravel.auth) {
            Ridex.Ajax.loadSignInPopup();

            return false;
        }

        let obj = $(this),
            url = obj.data('action'),
            qty = obj.data('step');

        Ridex.Ajax.loadAfterClickJsAddToSpecialWishlist(obj, url ,qty);

        return false;
    };

    Ridex.Wishlist.prototype.clickJsSpecialSubscribeToProduct = function () {
        let obj = $(this),
            form = obj.closest('form'),
            url = form.attr('action'),
            data = form.serialize(),
            articleId = form.find('[name="articleId"]').val();

        form.find(v._jsInputError).hide();

        Ridex.Ajax.loadAfterClickJsSpecialSubscribeToProduct(obj, form, url, data, articleId);

        return false;
    };

    Ridex.Wishlist.prototype.clickJsSpecialSubscribeByWishlist = function () {
        let obj = $(this),
            form = obj.closest('form'),
            url = form.attr('action'),
            data = form.serialize();

        form.find(v._jsInputError).hide();

        Ridex.Ajax.loadAfterClickJsSpecialSubscribeByWishlist(obj, form, url, data);

        return false;
    };

    Ridex.Wishlist.prototype.clickJsDeleteItemFromSpecialOrTruncate = function () {
        let obj = $(this),
            url = obj.data('url');

        Ridex.Ajax.loadAfterClickJsDeleteItemFromSpecialOrTruncate(obj, url);

        return false;
    };

    Ridex.Wishlist.prototype.clickJsSpecialProductToBasket = function () {
        if (!window.Laravel.globalUser.showPrice) {
            Ridex.Ajax.loadWaitVerifyVatPopup();

            return false;
        }

        let obj = $(this),
            url = obj.data('url');

        Ridex.Ajax.loadAfterClickJsSpecialProductToBasket(obj, url);

        return false;
    };

    Ridex.Wishlist.prototype.clickJsSpecialWishlistToBasket = function () {
        if (!window.Laravel.globalUser.showPrice) {
            Ridex.Ajax.loadWaitVerifyVatPopup();

            return false;
        }

        let obj = $(this),
            url = obj.data('url');

        Ridex.Ajax.loadAfterClickJsSpecialWishlistToBasket(obj, url);

        return false;
    };

    Ridex.Wishlist.prototype.clickJsProductToBasket = function () {
        if (!window.Laravel.globalUser.showPrice) {
            Ridex.Ajax.loadWaitVerifyVatPopup();

            return false;
        }

        let obj = $(this),
            articleId = obj.closest(v._jsWishProduct).data('articleid'),
            genericId = obj.closest(v._jsWishProduct).data('genericid');

        /*dataLayer.push({
            'event':'Add_to_Basket',
            'generic_id': genericId,
            'article_id': articleId
        });*/

        return true;
    };

    Ridex.Wishlist.prototype.clickJsWishlistToBasket = function () {
        if (!window.Laravel.globalUser.showPrice) {
            Ridex.Ajax.loadWaitVerifyVatPopup();

            return false;
        }

        let obj = $(this),
            arrArtId= [],
            arrGaId= [];

        obj.closest(v._jsWishlistPage).find(v._jsWishlistItemBuy).find('input:lt(2)[type="checkbox"]').each(function () {
            arrArtId.push($(this).data('article-id'));
            arrGaId.push($(this).data('generic-id'));
        });

        dataLayer.push({
            'event': 'Add_to_Basket_wishlist',
            'parameters': {
                'event_action': obj.data('event-action'),
                'index': obj.data('index'),
                'generic_id': arrGaId.join('%'),
                'article_id': arrArtId.join('%')
            }
        });

        return true;
    };

    Ridex.Wishlist.prototype.clickJsShowSubscribeToWishlistPopup = function (e) {
        e.preventDefault();

        let obj = $(this),
            url = obj.data('url');

        Ridex.Ajax.loadSubscribeToWishlistPopup(url);

        dataLayer.push({
            'event':'Wishlist',
            'wishlist_action':'click_inform'
        });

        return true;
    };

    Ridex.Wishlist.prototype.clickJsShowSubscribeToProductPopup = function (e) {
        e.preventDefault();

        let obj = $(this),
            articleId = obj.closest(v._jsWishlistItemBuy).find('input[name="articleIds"]').val();

        Ridex.Ajax.loadSubscribeToProductPopup(obj, articleId);

        dataLayer.push({
            'event':'Wishlist',
            'wishlist_action':'click_inform'
        });

        return true;
    };

    Ridex.Wishlist.prototype.changeJsAmountInputWishlist = function () {
        Ridex.Wishlist.updateWishlistPrice($(this));

        return false;
    };

    Ridex.Wishlist.prototype.clickJsWishlistProductDelete = function () {
        let obj = $(this),
            url = $(this).data('url');

        Ridex.Ajax.loadAfterClickJsWishlistProductDelete(obj, url);
    };

    Ridex.Wishlist.prototype.clickJsWishlistProductsDeleteSelected = function () {
        let wishlistId = $(this).data('wishlist-id'),
            url = $(this).data('url');

        Ridex.Ajax.loadWishlistProductsDeleteSelectedPopup(wishlistId, url);
    };

    Ridex.Wishlist.prototype.clickJsWishlistProductsDeleteSelectedConfirmation = function() {
        let obj = $(this),
            url = obj.data('url'),
            wishlistId = obj.closest(v._jsPopupWishlistProductsDeleteSelected).data('wishlist-id'),
            articleIds = [];

        $(v._jsWishlistItemBuy).find('input[name="articleIds"]').each(function (){
            if($(this).is(':checked')){
                articleIds.push($(this).val());
            }
        });

        Ridex.Ajax.loadAfterClickJsWishlistProductDeleteConfirmation(obj, url, wishlistId, articleIds);

        return false;
    }
})();

new Ridex.Wishlist();

(function () {
    let v = Ridex.vars({
        intervalForUpdateOrder:                             null,
        _jsQuickOrderUnpinProduct:                          '._js-quickOrderUnpinProduct',
        _jsQuickOrderPage:                                  '._js-quick-order-page',
        _jsQuickOrderPageTitle:                             '._js-quick-order-page__title',
        _jsQuickOrderPageDescription:                       '._js-quick-order-page__description',
        _jsQuickOrderPageItem:                              '._js-quick-order-page__item',
        _jsQuickOrderPageSubtitle:                          '._js-quick-order-page__subtitle',
        _jsQuickOrderPageSelectionWrapper:                  '._js-quick-order-page__selection-wrapper',
        _jsQuickOrderPageFileLabel:                         '._js-quick-order-page__file-label',
        _jsQuickOrderPageField:                             '._js-quick-order-page__field',
        _jsQuickOrderPageFile:                              '._js-quick-order-page__file',
        _jsQuickOrderPageArea:                              '._js-quick-order-page__area',
        _jsQuickOrderPageButton:                            '._js-quick-order-page__button',
        _jsQuickOrderPageAddictionButton:                   '._js-quick-order-page__addiction-button',
        _jsQuickOrderPageAdditionFile:                      '._js-quick-order-page__addition-file',
        _jsQuickOrderPageAdditionText:                      '._js-quick-order-page__addition-text',
        _jsQuickOrderPageResult:                            '._js-quick-order-page__result',
        _jsQuickOrderPageError:                             '._js-quick-order-page__error',
        _jsQuickOrderPageContent:                           '._js-quick-order-page__content',
        _jsQuickOrderPageItems:                             '._js-quick-order-page__items',
        _jsQuickOrderPageItemBuy:                           '._js-quick-order-page__item-buy',
        _jsQuickOrderProductSelectAll:                      '._js-quick-order-page__select-all',
        _jsQuickOrderPagePinAll:                            '._js-quick-order-page__pin-all',
        _jsQuickOrderPageUnpinAll:                          '._js-quick-order-page__unpin-all',
        _jsQuickOrderPagePinProduct:                        '._js-quick-order-page__pin-product',
        _jsQuickOrderPageUnpinProduct:                      '._js-quick-order-page__unpin-product',
        _jsQuickOrderPageDeleteItem:                        '._js-quick-order-page__delete-item',
        _jsQuickOrderPageDeleteSelected:                    '._js-quick-order-page__delete-selected',
        _jsQuickOrderPageDeleteSelectedConfirmation:        '._js-quick-order-page__delete-selected-confirmation',
        _jsQuickOrderPageDeleteProblemProducts:             '._js-quick-order-page__delete-problem-products',
        _jsQuickOrderPageDeleteProblemProductsConfirmation: '._js-quick-order-page__delete-problem-products-confirmation',
        _jsQuickOrderPageDeleteProblemProductsCancel:       '._js-quick-order-page__delete-problem-products-cancel',
        _jsQuickOrderPageDeleteAll:                         '._js-quick-order-page__delete-all',
        _jsQuickOrderPageDeleteAllConfirmation:             '._js-quick-order-page__delete-all-confirmation',
        _jsQuickOrderPageAddProblemProductsToWishlist:      '._js-quick-order-page__add-problem-products-to-wishlist',
        _jsQuickOrderPageOverProblemProductsToBasket:       '._js-quick-order-page__over-problem-products-to-basket',
        _jsQuickOrderPageFilter:                            '._js-quick-order-page__filter',
        _jsQuickOrderPageSort:                              '._js-quick-order-page__sort',
        _jsQuickOrderPageProductAmount:                     '._js-quick-order-page__product-amount',
        _jsQuickOrderPageAmountInput:                       '._js-quick-order-page__amount-input',
        _jsQuickOrderPageDuplicate:                         '._js-quick-order-page__duplicate',
        _jsQuickOrderPageDuplicateBlock:                    '._js-quick-order-page__duplicate-block',
        _jsQuickOrderPageDismiss:                           '._js-quick-order-page__dismiss',
        _jsQuickOrderPageConfirmation:                      '._js-quick-order-page__confirmation',
        _jsPopupQuickOrderAddiction:                        '._js-popup-quick-order__addiction',
        _jsPopupQuickOrderItemsDeleteSelected:              '._js-popup-quick-order__items-delete-selected',
        _jsPopupQuickOrderItemsDeleteAll:                   '._js-popup-quick-order__items-delete-all',
        _jsPopupQuickOrderProductsWithProblems:             '._js-popup-quick-order__products-with-problems',
        _jsPopupQuickOrderProductsWithProblemsBlock:        '._js-popup-quick-order__products-with-problems-block'
    });

    Ridex.QuickOrder = function () {
        $(document).on('click', v._jsChangeQty, this.clickJsChangeQty);
        $(document).on('click', v._jsQuickOrderPageFilter, this.clickJsQuickOrderPageFilter);
        $(document).on('click', v._jsQuickOrderPageSort, this.clickJsQuickOrderPageSort);
        $(document).on('click', v._jsQuickOrderProductSelectAll, this.clickJsQuickOrderPagePinAllToggle);
        $(document).on('click', v._jsQuickOrderPageItemBuy + ' ' + 'input[name="articleIds"]', this.clickJsQuickOrderPagePinToggleProduct);
        $(document).on('click', v._jsQuickOrderPageDeleteItem, this.clickJsQuickOrderPageDeleteItem);
        $(document).on('click', v._jsQuickOrderPageButton + ', ' + v._jsQuickOrderPageAdditionText, this.clickJsQuickOrderPageButton);
        $(document).on('click', v._jsQuickOrderPageDeleteSelected, this.clickJsQuickOrderPageDeleteSelected);
        $(document).on('click', v._jsQuickOrderPageDeleteSelectedConfirmation, this.clickJsQuickOrderPageDeleteSelectedConfirmation);
        $(document).on('click', v._jsQuickOrderPageDeleteAll, this.clickJsQuickOrderPageDeleteAll);
        $(document).on('click', v._jsQuickOrderPageDeleteAllConfirmation, this.clickJsQuickOrderPageDeleteAllConfirmation);
        $(document).on('click', v._jsQuickOrderPageConfirmation, this.clickJsQuickOrderPageConfirmation);
        $(document).on('click', v._jsQuickOrderPageDuplicate, this.clickJsQuickOrderPageDuplicate);
        $(document).on('click', v._jsQuickOrderPageDismiss, this.clickJsQuickOrderPageDismiss);
        $(document).on('click', v._jsQuickOrderPageDeleteProblemProducts, this.clickJsQuickOrderPageDeleteProblemProducts);
        $(document).on('click', v._jsQuickOrderPageDeleteProblemProductsConfirmation, this.clickJsQuickOrderPageDeleteProblemProductsConfirmation);
        $(document).on('click', v._jsQuickOrderPageDeleteProblemProductsCancel, this.clickJsQuickOrderPageDeleteProblemProductsCancel);
        $(document).on('click', v._jsQuickOrderPageOverProblemProductsToBasket, this.clickJsQuickOrderPageOverProblemProductsToBasket);
        $(document).on('click', v._jsQuickOrderPageAddProblemProductsToWishlist, this.clickJsQuickOrderPageAddProblemProductsToWishlist);
        $(document).on('click', v._jsQuickOrderPageAdditionFile, this.changeJsQuickPageFileLabel);

        $(document).on('dragenter',  v._jsQuickOrderPageField, false)
            .on('dragover', v._jsQuickOrderPageField, false)
            .on('drop', v._jsQuickOrderPageField, this.changeJsQuickPageFileLabel);

        $(document).on('change', v._jsQuickOrderPageFileLabel, this.changeJsQuickPageFileLabel);
        //$(document).on('change', v._jsQuickOrderProductSelectAll, this.changeJsQuickOrderProductsSelectAllCheckbox);

        $(document).on('keyup', v._jsQuickOrderPageArea + ' textarea', this.keyupJsQuickOrderPageAreaTextarea);

        $(document).ready(function() {
            if($.trim($(v._jsQuickOrderPageContent).html()).length) {
                $("html, body").animate({scrollTop: $(v._jsQuickOrderPageContent).offset().top - 100 },"slow");
            }
        });
    };

    Ridex.QuickOrder.updateQuickOrderPrice = function (obj) {
        let url =  obj.closest(v._jsQuickOrderPageProductAmount).data('url'),
            qty =  obj.closest(v._jsQuickOrderPageProductAmount).find(v._jsQuickOrderPageAmountInput).val(),
            step = obj.closest(v._jsQuickOrderPageProductAmount).find(v._jsQuickOrderPageAmountInput).data('step'),
            maxQty = obj.closest(v._jsQuickOrderPageProductAmount).find(v._jsQuickOrderPageAmountInput).data('max');

        if(!url) {
            return false;
        }

        obj.updateQtyInput(qty, step, maxQty);

        Ridex.Ajax.loadQuickOrderUpdatePrice(url, qty);
    };

    Ridex.QuickOrder.setEmptyPageResponse = function (response) {
        if(response.viewEmpty) {
            $(v._jsQuickOrderPageContent).html(response.viewEmpty);
        }
    };

    Ridex.QuickOrder.prototype.clickJsQuickOrderPageFilter = function () {
        let obj = $(this),
            url = document.location.href,
            params = Ridex.buildUrl({'show': $(this).data('key')});

        window.history.pushState(url, "", params);

        Ridex.Ajax.loadAfterClickJsQuickOrderPageFilterAndSort(obj, window.location.href);
    };

    Ridex.QuickOrder.prototype.clickJsQuickOrderPageSort = function () {
        let obj = $(this),
            url = document.location.href,
            params = Ridex.buildUrl({'sort': $(this).data('key')});

        window.history.pushState(url, "", params);

        Ridex.Ajax.loadAfterClickJsQuickOrderPageFilterAndSort(obj, window.location.href);
    };

    Ridex.QuickOrder.prototype.clickJsQuickOrderPageDeleteItem = function () {
        let obj = $(this),
            url = obj.data('url');

        Ridex.Ajax.loadAfterClickJsQuickOrderPageDeleteItem(obj, url);

        return false;
    };

    Ridex.QuickOrder.prototype.clickJsQuickOrderPageButton = function () {
        if (!window.Laravel.globalUser.showPrice) {
            Ridex.Ajax.loadWaitVerifyVatPopup();
            return false;
        }

        let obj = $(this),
            form = $(v._jsQuickOrderPageArea),
            url = form.attr('action'),
            data = form.serialize();

        if(obj.hasClass(Ridex.pureClassName(v._jsQuickOrderPageAdditionText))){
            data += '&addiction=' + obj.data('addiction');
        }

        Ridex.Ajax.loadAfterClickJsQuickOrderPageButton(obj, url, data);
    };

    Ridex.QuickOrder.prototype.clickJsQuickOrderPageDeleteSelected = function (e) {
        e.preventDefault();

        Ridex.Ajax.loadQuickOrderDeleteSelectedPopup();
    };

    Ridex.QuickOrder.prototype.clickJsQuickOrderPageDeleteSelectedConfirmation = function () {
        let obj = $(this),
            url = obj.data('url'),
            articleIds = [];

        $(v._jsQuickOrderPageItemBuy).find('input[name="articleIds"]').each(function (){
            if($(this).is(':checked')){
                articleIds.push($(this).val());
            }
        });

        Ridex.Ajax.loadAfterClickJsQuickOrderPageDeleteSelectedConfirmation(obj, url, articleIds);

        return false;
    };

    Ridex.QuickOrder.prototype.clickJsQuickOrderPageDeleteAll = function (e) {
        e.preventDefault();

        Ridex.Ajax.loadQuickOrderDeleteAllPopup();
    };

    Ridex.QuickOrder.prototype.clickJsQuickOrderPageDeleteAllConfirmation = function () {
        let obj = $(this),
            url = obj.data('url');

        Ridex.Ajax.loadAfterClickJsQuickOrderPageDeleteAllConfirmation(obj, url);

        return false;
    }

    Ridex.QuickOrder.prototype.clickJsQuickOrderPageConfirmation = function () {
        if (!window.Laravel.globalUser.showPrice) {
            Ridex.Ajax.loadWaitVerifyVatPopup();
            return false;
        }

        let obj = $(this),
            form = obj.closest('form'),
            url = form.attr('action'),
            data = form.serialize();

        Ridex.Ajax.loadAfterClickJsQuickOrderPageConfirmation(obj, url, data);

        return false;
    };

    Ridex.QuickOrder.prototype.changeJsQuickPageFileLabel = function (e) {
        e.stopPropagation();
        e.preventDefault();

        if (!window.Laravel.globalUser.showPrice) {
            Ridex.Ajax.loadWaitVerifyVatPopup();

            return false;
        }

        let obj = $(this),
            form = $(v._jsQuickOrderPageFile),
            url = form.attr('action'),
            data = new FormData(),
            dataTransfer = e.originalEvent.dataTransfer,
            quickOrderFile = dataTransfer ? dataTransfer.files[0] : $(v._jsQuickOrderPageFileLabel)[0].files[0];

        data.append('quickOrder', quickOrderFile);

        // //Form data
        $.each(form.serializeArray(), function (key, input) {
            data.append(input.name, input.value);
        });

        if(obj.hasClass(Ridex.pureClassName(v._jsQuickOrderPageAdditionFile))){
            data.append('addiction', obj.data('addiction'));
        }

        form.find(v._jsInputError).hide();

        Ridex.Ajax.loadAfterChangeJsQuickFileOrderLabel(obj, form, url, data);
    };

    Ridex.QuickOrder.prototype.changeJsQuickOrderProductsSelectAllCheckbox = function () {
        let obj = $(this),
            checkboxes = $(v._jsQuickOrderPageItemBuy).find('input[name="articleIds"]');

        Ridex.toggleMultipleCheckboxes(obj, checkboxes);
    };

    Ridex.QuickOrder.prototype.keyupJsQuickOrderPageAreaTextarea = function () {
        let $this = $(this),
            val = $this.val();

        if(val.length >= 1) {
            $(v._jsQuickOrderPageButton)
                .removeClass('btn-disabled')
                .removeAttr('disabled')
                .addClass('btn-yellow');
        } else {
            $(v._jsQuickOrderPageButton)
                .removeClass('btn-yellow')
                .addClass('btn-disabled');

            $(v._jsQuickOrderPageButton).prop("disabled", true);
        }
    };

    Ridex.QuickOrder.prototype.clickJsChangeQty = function () {
        let obj = $(this);

        clearTimeout(v.intervalForUpdateOrder);
        v.intervalForUpdateOrder = setTimeout(function () {
            Ridex.QuickOrder.updateQuickOrderPrice(obj)
        }, 500);

        return false;
    };

    Ridex.QuickOrder.prototype.clickJsQuickOrderPageDuplicate = function () {
        let obj = $(this),
            block = obj.closest(v._jsQuickOrderPageDuplicateBlock),
            url = obj.data('url'),
            articleIdsChecked = [],
            articleIdsAll = [];

        block.find('input[name="duplicate"]').each(function() {
            if ($(this).prop('checked')) {
                articleIdsChecked.push($(this).val());
            }

            articleIdsAll.push($(this).val());
        });

        if (articleIdsChecked.length < 1) {
            return false;
        }

        Ridex.Ajax.loadAfterChangeJsQuickOrderPageDuplicate(obj, url, articleIdsChecked, articleIdsAll);

        return false;
    };

    Ridex.QuickOrder.prototype.clickJsQuickOrderPageDismiss = function () {
        let obj = $(this),
            block = obj.closest(v._jsQuickOrderPageDuplicateBlock),
            url = obj.data('url'),
            articleIds = [];

        block.find('input[name="duplicate"]').each(function() {
            articleIds.push($(this).val());
        });

        Ridex.Ajax.loadAfterChangeJsQuickOrderPageDismiss(obj, url, articleIds);

        return false;
    };

    Ridex.QuickOrder.prototype.clickJsQuickOrderPagePinAllToggle = function () {
        let obj = $(this),
            form = obj.closest('form'),
            url;

        $(this).toggleChecked();

        url = form.data('unpin-all');
        if($(this).is(':checked')){
            url = form.data('pin-all')
        }

        Ridex.Ajax.loadAfterClickJsQuickOrderPagePinAllToggle(obj, form, url);
    };

    Ridex.QuickOrder.prototype.clickJsQuickOrderPagePinToggleProduct = function () {
        let obj = $(this),
            form = obj.closest('form'),
            url,
            articleId = obj.val(),
            productsCount = form.find('input[name=articleIds]').length;

        $(this).toggleChecked();

        url = form.data('unpin');
        if($(this).is(':checked')){
            url = form.data('pin')
        }

        Ridex.Ajax.clickJsQuickOrderPagePinToggleProduct(obj, form, url, articleId, productsCount);
    };

    Ridex.QuickOrder.prototype.clickJsQuickOrderPageDeleteProblemProducts = function () {
        let checkCount = $(this).closest('form').find('input:checked').length;

        $(this).hide();
        $(this).closest('form').find(v._jsQuickOrderPageDeleteProblemProductsConfirmation).parent().show();

        if(checkCount < 2) {
            dataLayer.push({
                'event': 'Quick_order_click',
                'quick_action': 'delete_' + checkCount
            });
        }
    };

    Ridex.QuickOrder.prototype.clickJsQuickOrderPageDeleteProblemProductsCancel = function () {
        $(this).parent().hide();
        $(this).closest('form').find(v._jsQuickOrderPageDeleteProblemProducts).show();
    };

    Ridex.QuickOrder.prototype.clickJsQuickOrderPageDeleteProblemProductsConfirmation = function () {
        let obj = $(this),
            form = obj.closest('form'),
            url = form.data('delete'),
            data = form.serialize();

        if (form.find("input:checked").length > 0) {
            url = url + '/1';
        }

        Ridex.Ajax.loadAfterClickJsQuickOrderPageDeleteProblemProductConfirmation(obj, form, url, data);

        return false;
    };

    Ridex.QuickOrder.prototype.clickJsQuickOrderPageOverProblemProductsToBasket = function () {
        let obj = $(this),
            form = obj.closest('form'),
            url = form.data('over-products-to-basket'),
            data = form.serialize();

        if (form.find("input:checked").length > 0) {
            url = url + '/1';
        }

        Ridex.Ajax.loadAfterClickJsQuickOrderPageOverProblemProductsToBasket(obj, form, url, data);

        return false;
    };

    Ridex.QuickOrder.prototype.clickJsQuickOrderPageAddProblemProductsToWishlist = function () {
        let obj = $(this),
            form = obj.closest('form'),
            url = form.data('not-available-products-to-wishlist'),
            data = form.serialize();

        if (form.find("input:checked").length > 0) {
            url = url + '/1';
        }

        Ridex.Ajax.loadAfterClickJsQuickOrderPageAddProblemProductsToWishlist(obj, form, url, data);

        return false;
    };
})();

(function () {
    let v = Ridex.vars({
        dataLayer:         window.dataLayer,
        fieldsDataLength:  0,
        currentIndex:      0,
        currentUrl:        window.Laravel.currentUrl,
        genericId:         typeof window.Laravel.genericId !== 'undefined' ? window.Laravel.genericId : null,
        articleId:         typeof window.Laravel.articleId !== 'undefined' ? window.Laravel.articleId : null,
        userId:            window.Laravel.auth ? window.Laravel.globalUser.id : 'guest',
        userRegistered:    window.Laravel.userRegistered,
        basketId:          typeof window.Laravel.basketId !== 'undefined' ? window.Laravel.basketId : null,
        sessionStart:      window.Laravel.sessionStart,
        //pageIndex:       window.Laravel.pageIndex,
        routeName:         window.Laravel.routeName,
        routeFirstVisited: window.Laravel.routeFirstVisited,
        userSessionId:     window.Laravel.userSessionId,
        randomSessionId:   new Date().getTime() + '.' + Math.random().toString(36).substring(5),
        country:           window.Laravel.Country,

        _jsItem:                                      '._js-item',
        _jsLinks:                                     '._js-links',
        _jsStars:                                     '._js-stars',
        _jsGridItem:                                  '._js-grid-item',
        _jsDropdown:                                  '._js-dropdown',
        _jsDropdownOption:                            '._js-dropdown-option',
        _jsChangeQty:                                 '._js-changeQty',
        _jsSelectBox:                                 '._js-select-box',
        _jsAddField:                                  '._js-add-field',
        _jsModel:                                     '._js-model',
        _jsCarType:                                   '._js-carType',
        _jsProductPreview:                            '._js-product-preview',
        _jsGtmB2bLandingBecomePartnerHeaderButton:    '._js-gtm-b2b-landing-become-partner-header-button',
        _jsGtmB2bLandingBecomePartnerForm:            '._js-gtm-b2b-landing-become-partner-form',
        _jsGtmB2bLandingBecomePartnerFormFile:        '._js-gtm-b2b-landing-become-partner-form-file',
        _jsGtmB2bLandingBecomePartnerFormBSegment:    '._js-gtm-b2b-landing-become-partner-form-bSegment',
        _jsGtmB2bLandingBecomePartnerFooterButton:    '._js-gtm-b2b-landing-become-partner-footer-button',
        _jsGtmB2bLandingShowMoreQuestions:            '._js-gtm-b2b-landing-show-more-questions',
        _jsGtmSearchSuggestItem:                      '._js-gtm-search-suggest-item',
        _jsGtmSearchSuggestCategoryPopular:           '._js-gtm-search-suggest-category-popular',
        _jsGtmSearchSuggestCategoryNew:               '._js-gtm-search-suggest-category-new',
        _jsGtmSearchPageCategory:                     '._js-gtm-search-page-category',
        _jsGtmSearchPageCategoriesSlider:             '._js-gtm-search-page-categories-slider',
        _jsHeaderMainLogo:                            '._js-gtm-header__main-logo',
        _jsHeaderTopLinks:                            '._js-gtm-header__top-links',
        _jsHeaderMainMobileList:                      '._js-gtm-header__main-mobile-list',
        _jsHeaderMainAccount:                         '._js-gtm-header__main-account',
        _jsHeaderMainCart:                            '._js-gtm-header__main-cart',
        _jsHeaderTopLang:                             '._js-gtm-header__top-lang',
        _jsHeaderMainSearch:                          '._js-gtm-header__main-search',
        _jsHeaderMainSearchAutocomplete:              '._js-header__main-search-autocomplete',
        _jsSearchInput:                               '._js-search-input',
        _jsSearchButton:                              '._js-search-button',
        _jsAutocompleteSuggestion:                    '._js-autocomplete-suggestion',
        _jsFooterLogo:                                '._js-footer__logo',
        _jsFooterLinks:                               '._js-footer__links',
        _jsFooterSubscribe:                           '._js-footer__subscribe',
        _jsCartProduct:                               '._js-cart-product',
        _jsCartProductDelete:                         '._js-cart-product__delete',
        _jsCartProductNum:                            '._js-cart-product__num',
        _jsAboutRidexTextButton:                      '._js-about-ridex__text-button',
        _jsLinkImageMainSlider:                       '._js-link-image-main-slider',
        _jsTopCategoriesItem:                         '._js-top-categories__item',
        _jsButtonGroupButtonDealer:                   '._js-button-group__button-dealer',
        _jsButtonGroupButtonOrder:                    '._js-button-group__button-order',
        _jsDownloadCentrePageFormRow:                 '._js-download-centre-page__form-row',
        _jsDownloadCentrePageItems:                   '._js-download-centre-page__items',
        _jsDownloadCentrePageItemsButton:             '._js-download-centre-page__items-button',
        _jsDownloadCentrePageItemsLink:               '._js-download-centre-page__items-link',
        _jsQuickOrderPageDownloadText:                '._js-quick-order-page__download-text',
        _jsQuickOrderPageControlInfo:                 '._js-quick-order-page__control-info',
        _jsQuickOrderPageItem:                        '._js-quick-order-page__item',
        _jsQuickOrderPageItemImage:                   '._js-quick-order-page__item-image',
        _jsQuickOrderPageItemCheckLabel:              '._js-quick-order-page__item-check-label',
        _jsPopupQuickOrderPageItemImage:              '._js-popup-quick-order-page__item-image',
        _jsOverProducts:                              '._js-overProducts',
        _jsProblemProducts:                           '._js-problemProducts',
        _jsNotAvailableProducts:                      '._js-notAvailableProducts',
        _jsQuickOrderPageItemDescriptionDetails:      '._js-quick-order-page__item-description-details',
        _jsPopupQuickOrderPageItemDescriptionDetails: '._js-popup-quick-order-page__item-description-details',
        _jsProductCardBtn:                            '._js-product-card__btn',
        _jsWishlistGroupButDel:                       '._js-wishlist-group__but-del',
        _jsWishProductDelete:                         '._js-wish-product__delete',
        _jsWrapperIconText:                           '._js-wrapper-icon-text',
        _jsCatalogListItem2:                          '._js-catalog-list__item--2',
        _jsCatalogListItem3:                          '._js-catalog-list__item--3',
        _jsCatalogListItem4:                          '._js-catalog-list__item--4',
        _jsCatalogItemBrochure:                       '._js-catalog-item__brochure',
        _jsListingSliderIconblockBrochure:            '._js-listing-slider__iconblock-brochure',
        _jsProductSliderIconblockBrochure:            '._js-product-slider__iconblock-brochure',
        _jsAvailableWorldwideCountriesItem:           '._js-available-worldwide__countries-item',
        _jsAvailableWorldwideDealersKink:             '._js-available-worldwide__dealers-link',
        _jsFaqDealersItems:                           '._js-faq-dealers__items',
        _jsOrderPadTextInput:                         '._js-order-pad__text input',
        _jsOrderPadItem:                              '._js-order-pad__item',
        _jsBtnCountPlus:                              '._js-btn-cout-plus',
        _jsBtnCountMinus:                             '._js-btn-cout-minus',
        _jsOrderPadWrap:                              '._js-order-pad__wrap',
        _jsProfileDetailsSave:                        '._js-profile-details__save',
        _jsSelectAutoRefreshLink:                     '._js-select-auto__refresh-link',
        _jsSelectAutoSelectMaker:                     '._js-select-auto__select-maker',
        _jsSelectAutoSelectModel:                     '._js-select-auto__select-model',
        _jsSelectAutoSelectEngine:                    '._js-select-auto__select-engine',
        _jsSelectorLinkListItem:                      '._js-selector-link__list-item',
        _jsChangeViewSwitch:                          '._js-change-view__switch',
        _jsListingContainer:                          '._js-listing-container',
        _jsProductContainer:                          '._js-product-container',
        _jsWishlist:                                  '._js-wishlist',
        _jsProductDetailsName:                        '._js-product-details__name',
        _jsProductImage360:                           '._js-product__image-360',
        _jsListingPage:                               '._js-listing-page',
        _jsProductPage:                               '._js-product-page',
        _jsProductCardCount:                          '._js-product-card__count',
        _jsCrumbs:                                    '._js-crumbs',
        _jsProductNameLink:                           '._js-product-name__link',
        _jsProductThumbsItem:                         '._js-product-thumbs__item',
        _jsToolsPageSliderItem:                       '._js-tools-page__slider-item',
        _jsContactPageFaqItem:                        '._js-contact-page__faq-item',
        _jsFaqContactToggle:                          '._js-faq-contact-toggle',
        _jsMaintanceLangListLink:                     '._js-maintance__lang-list-link',
        _jsWishGroupAdd:                              '._js-wish-group-add',
        _jsQuarantyPageInfoText:                      '._js-guaranty-page__info-text',
        _jsQuarantyPageInfoButton:                    '._js-guaranty-page__info-button',
        _jsRecommendedProducts:                       '._js-recommended_products',
        _jsRecommendedProductsCart:                   '._js-recommended-products-cart',
        _jsAddToCart:                                 '._js-addToCart',
        _jsWishlistNew:                               '._js-wishlistNew',
        _jsRecentlyViewedItems:                       '._js-recently-viewed__items',
        _jsCatalogPdfBlockLink:                       '._js-catalog-pdf-block__link',
        _jsCatalogPdfBlockTextDownload:               '._js-catalog-pdf-block__text-download',
        _jsOtherCarsTabs:                             '._js-other-cars__tabs',
        _jsOtherCarsName:                             '._js-other-cars__name',
        _jsWishProductImg:                            '._js-wish-product__img',
        _jsWishProductData:                           '._js-wish-product__data',
        _jsWishProductSeeAll:                         '._js-wish-product__seeall',
        _jsWishProductNum:                            '._js-wish-product__num',
        _jsChangeWishQty:                             '._js-changeWishQty',
        _jsDownloadCentrePagePresentations:           '._js-download-centre-page__presentations',
        _jsDownloadCentrePagePresentationsImage:      '._js-download-centre-page__presentations-image',
        _jsDownload:                                  '._js-download',
        _jsPlus:                                      '._js-plus',
        _jsMinus:                                     '._js-minus',
        _jsGtmCategoriesItem:                         '._js-gtm-categories-item',
        _jsGtmQuickOrderClick:                        '._js-gtm-quick-order-click',
        _jsGtmTopItems:                               '._js-gtm-top-items'
    });

    Ridex.Statistics = function (){
        $(document).on('click', v._jsGtmB2bLandingBecomePartnerHeaderButton, this.clickJsGtmB2bLandingBecomePartnerHeaderButton);
        $(document).on('click', v._jsGtmB2bLandingBecomePartnerFormFile, this.clickJsGtmB2bLandingBecomePartnerFormFile);
        $(document).on('click', v._jsGtmB2bLandingBecomePartnerFormBSegment, this.clickJsGtmB2bLandingBecomePartnerFormBSegment);
        $(document).on('click', v._jsGtmB2bLandingBecomePartnerFooterButton, this.clickJsGtmB2bLandingBecomePartnerFooterButton);
        $(document).on('click', v._jsGtmB2bLandingShowMoreQuestions, this.clickJsGtmB2bLandingShowMoreQuestions);
        $(document).on('click', v._jsGtmSearchSuggestItem, this.clickJsGtmSearchSuggestItem);
        $(document).on('click', v._jsGtmSearchSuggestCategoryPopular, this.clickJsGtmSearchSuggestCategoryPopular);
        $(document).on('click', v._jsGtmSearchSuggestCategoryNew, this.clickJsGtmSearchSuggestCategoryNew);
        $(document).on('click', v._jsGtmSearchPageCategory, this.clickJsGtmSearchPageCategory);
        $(document).on('click', v._jsGtmSearchPageCategoriesSlider + ' .slick-arrow', this.clickJsGtmSearchPageCategoriesSlider);
        $(document).on('click', v._jsHeaderMainLogo, this.clickJsHeaderMainLogo);
        $(document).on('click', v._jsHeaderTopLinks + ' a', this.clickJsHeaderTopLinks);
        $(document).on('click', v._jsHeaderMainMobileList + ' a', this.clickJsHeaderMainMobileList);
        $(document).on('click', v._jsHeaderMainAccount + ' a', this.clickJsHeaderMainAccount);
        $(document).on('click', v._jsHeaderMainCart + ' a', this.clickJsHeaderMainCart);
        $(document).on('click', v._jsHeaderTopLang + ' a', this.clickJsHeaderTopLangLinks);
        $(document).on('click', v._jsDropdown + ' .header__lang-selected', this.clickJsDropdownLangSelected);
        $(document).on('click', v._jsDropdownOption + ' a', this.clickJsDropdownOption);
        $(document).on('click', v._jsHeaderMainSearch + ' input', this.clickJsHeaderMainSearchInput);
        $(document).on('click', v._jsHeaderMainSearchAutocomplete + ' ' + v._jsAutocompleteSuggestion, this.clickJsAutocompleteSuggestion);
        $(document).on('click', v._jsHeaderMainSearch + ' ' + v._jsSearchButton, this.clickJsSearchButton);
        $(document).on('click', v._jsFooterLogo + ' img', this.clickJsFooterLogoImg);
        $(document).on('click', v._jsFooterLinks + ' a', this.clickJsFooterLinks);
        $(document).on('click', v._jsFooterSubscribe + ' input:checked', this.clickJsFooterSubscribe);
        $(document).on('click', v._jsCartProduct + ' ' + v._jsCartProductDelete, this.clickJsCartProductDelete);
        $(document).on('click', v._jsCartProductNum + ' ' + v._jsChangeQty, this.clickJsCartProductNumChangeQty);
        $(document).on('click', v._jsAboutRidexTextButton + ' .btn', this.clickJsAboutRidexTextButton);
        $(document).on('click', v._jsLinkImageMainSlider, this.clickJsLinkImageMainSlider);
        $(document).on('click', v._jsTopCategoriesItem, this.clickJsTopCategoriesItem);
        $(document).on('click', v._jsButtonGroupButtonDealer, this.clickJsButtonGroupButtonDealer);
        $(document).on('click', v._jsButtonGroupButtonOrder, this.clickJsButtonGroupButtonOrder);
        $(document).on("click", v._jsDownloadCentrePageItemsButton, this.clickJsDownloadCentrePageItems);
        $(document).on("click", v._jsDownloadCentrePageItemsLink, this.clickJsDownloadCentrePageItems);
        $(document).on('click', v._jsQuickOrderPageDownloadText + ' a', this.clickJsQuickOrderPageDownloadText);
        $(document).on('click', v._jsQuickOrderPageControlInfo + ' .download a', this.clickJsQuickOrderPageControlInfoDownload);
        $(document).on("click", v._jsProductCardBtn, this.clickJsProductCardBtn);
        $(document).on("click", v._jsWishlistGroupButDel, this.clickJsWishlistGroupButDel);
        $(document).on("click", v._jsWishProductDelete, this.clickJsWishProductDelete);
        $(document).on("click", v._jsWrapperIconText, this.clickJsWrapperIconText);
        $(document).on("click", v._jsCatalogListItem2, this.clickJsCatalogListItem2);
        $(document).on("click", v._jsCatalogListItem3, this.clickJsCatalogListItem3);
        $(document).on("click", v._jsCatalogListItem4, this.clickJsCatalogListItem4);
        $(document).on("click", v._jsCatalogItemBrochure, this.clickJsCatalogItemBrochure);
        $(document).on("click", v._jsListingSliderIconblockBrochure, this.clickJsListingSliderIconBlockBrochure);
        $(document).on("click", v._jsProductSliderIconblockBrochure, this.clickJsProductSliderIconBlockBrochure);
        $(document).on("click", v._jsAvailableWorldwideCountriesItem, this.clickJsAvailableWorldwideCountriesItem);
        $(document).on("click", v._jsAvailableWorldwideDealersKink + ' a', this.clickJsAvailableWorldwideDealersKink);
        $(document).on("click", v._jsFaqDealersItems + ' ' + v._jsItem, this.clickJsFaqDealersItemsItem);
        $(document).on("click", v._jsOrderPadItem + ' ' + v._jsBtnCountPlus, this.clickJsOrderPadItemBtnCountPlus);
        $(document).on("click", v._jsOrderPadItem + ' ' + v._jsBtnCountMinus, this.clickJsOrderPadItemBtnCountMinus);
        $(document).on("click", v._jsOrderPadWrap + ' ' + v._jsAddField, this.clickJsOrderPadWrapAddField);
        $(document).on("click", v._jsProfileDetailsSave, this.clickJsProfileDetailsSave);
        $(document).on("click", v._jsSelectAutoRefreshLink, this.clickJsSelectAutoRefreshLink);
        $(document).on("click", v._jsSelectorLinkListItem + ' span', this.clickJsSelectorLinkListItemSpan);
        $(document).on("click", v._jsChangeViewSwitch + ' span', this.clickJsChangeViewSwitchSpan);
        $(document).on(
            "click",
            v._jsListingContainer + ' ' + v._jsWishlist + ' span,' + v._jsProductContainer + ' ' + v._jsWishlist + ' span',
            this.clickJsListingProductContainerWishlistSpan
        );
        $(document).on("click", v._jsListingContainer + ' ' + v._jsProductDetailsName + ' a', this.clickJsListingContainerProductDetailsNameLink);
        $(document).on("click", v._jsProductImage360, this.clickJsProductImage360);
        $(document).on("click", v._jsListingPage + ' ' + v._jsCrumbs + ' li, ' + v._jsProductPage + ' ' + v._jsCrumbs + ' li', this.clickJsListingProductPageCrumbs);
        $(document).on("click", v._jsProductNameLink, this.clickJsProductPageNameLink);
        $(document).on("click", v._jsProductThumbsItem + ', .bx-controls-direction', this.clickJsProductThumbsItem);
        $(document).on("click", v._jsToolsPageSliderItem, this.clickJsToolsPageSliderItem);
        $(document).on("click", v._jsContactPageFaqItem + ' a', this.clickJsContactPageFaqItemLink);
        $(document).on("click", v._jsContactPageFaqItem + ' ' + v._jsFaqContactToggle, this.clickJsContactPageFaqItemToggle);
        $(document).on("click", v._jsMaintanceLangListLink, this.clickJsMaintanceLangListLink);
        $(document).on("click", v._jsWishGroupAdd + ' input', this.clickJsWishGroupAddInput);
        $(document).on("click", v._jsQuarantyPageInfoText + ' a', this.clickJsQuarantyPageInfoTextLink);
        $(document).on("click", v._jsQuarantyPageInfoButton + ' .btn', this.clickJsQuarantyPageInfoButton);
        $(document).on("click", v._jsRecommendedProducts + ' ' + v._jsAddToCart, this.clickJsRecommendedProductsAddToCart);
        $(document).on("click", v._jsRecommendedProducts + ' ' + v._jsWishlistNew, this.clickJsRecommendedProductsWishlistNew);
        $(document).on("click", v._jsRecommendedProducts + ' ' + v._jsListingSliderImg + ' a', this.clickJsRecommendedProductsListingSliderImgLinkOrProductDetailsName);
        $(document).on("click", v._jsRecommendedProducts + ' ' + v._jsProductDetailsName, this.clickJsRecommendedProductsListingSliderImgLinkOrProductDetailsName);
        $(document).on('click', '.slick-dots li', this.clickSlickDotsLi);
        $(document).on("click", v._jsProductPage + ' ' + v._jsProductCardCount + ' ' + v._jsPlus, this.clickJsProductPageCartCountPlus);
        $(document).on("click", v._jsProductPage + ' ' + v._jsProductCardCount + ' ' + v._jsMinus, this.clickJsProductPageCartCountMinus);
        $(document).on("click", v._jsProductPage + ' ' + v._jsOtherCarsTabs + ' li', this.clickJsProductPageOtherCarsTabsLiOrName);
        $(document).on("click", v._jsProductPage + ' ' + v._jsOtherCarsName, this.clickJsProductPageOtherCarsTabsLiOrName);
        $(document).on("click", v._jsWishProductImg + ' a', this.clickJsWishProductImgLinkOrWithProductDataSeeAll);
        $(document).on("click", v._jsWishProductData + ' ' + v._jsWishProductSeeAll, this.clickJsWishProductImgLinkOrWithProductDataSeeAll);
        $(document).on("click", v._jsWishProductNum + ' ' + v._jsChangeWishQty, this.clickJsWishProductNumChangeWishQty);
        $(document).on('click', v._jsDownloadCentrePagePresentations + ' ' + v._jsDownloadCentrePagePresentationsImage, this.clickJsDownloadCentrePagePresentationsImage);
        $(document).on('click', v._jsDownloadCentrePagePresentations + ' ' + v._jsDownload + ' a', this.clickJsDownloadCentrePagePresentationsDownloadLink);
        $(document).on('click', v._jsDownloadCentrePageItems + ' ' + v._jsCatalogPdfBlockLink, this.clickJsDownloadCentrePageItemsCatalogPdfBlockLink);
        $(document).on('click', v._jsDownloadCentrePageItems + ' ' + v._jsCatalogPdfBlockTextDownload + ' a', this.clickJsDownloadCentrePageItemsCatalogPdfBlockTextDownloadLink);
        $(document).on("click", v._jsGtmCategoriesItem, this.clickJsGtmCategoriesItem);
        $(document).on('click', v._jsGtmQuickOrderClick, this.clickJsGtmQuickOrderClick);
        $(document).on('click', v._jsGtmTopItems, this.clickJsGtmTopItems);

        $(document).on('blur click', v._jsQuickOrderPageItemImage + ' a', this.clickJsQuickOrderPageItemImage);
        $(document).on('blur click', v._jsPopupQuickOrderPageItemImage + ' a', this.clickJsPopupQuickOrderPageItemImage);
        $(document).on('blur click', v._jsQuickOrderPageItemDescriptionDetails, this.clickJsQuickOrderPageItemDescriptionDetails);
        $(document).on('blur click', v._jsPopupQuickOrderPageItemDescriptionDetails, this.clickJsPopupQuickOrderPageItemDescriptionDetails);

        $(document).on('change', v._jsGtmB2bLandingBecomePartnerFormFile, this.changeJsGtmB2bLandingBecomePartnerFormFile);
        $(document).on("change", v._jsDownloadCentrePageFormRow + " " + v._jsSelectBox + "[data-level='2'] select", this.clickJsDownloadCentrePageFormRowLvl2Select);
        $(document).on("change", v._jsDownloadCentrePageFormRow + " " + v._jsSelectBox + "[data-level='3'] select", this.clickJsDownloadCentrePageFormRowLvl3Select);
        $(document).on("change", v._jsDownloadCentrePageFormRow + " " + v._jsSelectBox + "[data-level='4'] select", this.clickJsDownloadCentrePageFormRowLvl4Select);
        $(document).on('change', v._jsSelectAutoSelectMaker + ' select', this.changeJsSelectAutoSelectMakerSelect);
        $(document).on('change', v._jsSelectAutoSelectModel + ' select', this.changeJsSelectAutoSelectModelSelect);
        $(document).on('change', v._jsSelectAutoSelectEngine + ' select', this.changeJsSelectAutoSelectEngineSelect);

        $(document).on('keyup', v._jsGtmB2bLandingBecomePartnerForm + ' textarea', this.clickJsGtmB2bLandingBecomePartnerForm);
        $(document).on('keyup',
            v._jsGtmB2bLandingBecomePartnerForm + ' input:not([type=file],[type=hidden],[type=checkbox])',
            this.clickJsGtmB2bLandingBecomePartnerForm
        );

        $(document).on('focusout', v._jsOrderPadTextInput, this.focusoutJsOrderPadTextInput);
        $(document).on('touchend', v._jsRecommendedProducts + ' > ' + v._jsRecentlyViewedItems + ' > .slick-list > .slick-track', this.touchendJsRecommendedProductsRecentlyViewedItemsSlickTrack);
    };

    Ridex.Statistics.dataLayerObject = function (params) {
        let dataObject = {
            'generic_id':       v.genericId,
            'article_id':       v.articleId,
            'user_id':          v.userId,
            'basketID':         v.basketId,
            'session_start':    v.sessionStart,
            'Country':          v.country,
            //'pageIndex':      v.pageIndex,
            'routeName' :       v.routeName,
            'user_sessionID':   v.userSessionId,
            'random_sessionID': v.randomSessionId,
            'entrance_route':   v.routeFirstVisited
        };

        if(v.userRegistered){
            dataObject.visitor_type = 'registered_user';
        } else if(window.Laravel.auth){
            dataObject.visitor_type = 'logged_user';
        } else {
            dataObject.visitor_type = 'unknown_user';
        }

        for (let k in params){
            dataObject[k] = params[k];
        }

        if(dataObject.entrance_route === null){
            dataObject.entrance_route = dataObject.routeName;

            Ridex.Ajax.loadFirstVisitedRoute(dataObject.routeName);
        }

        return dataObject;
    };

    Ridex.Statistics.getChooseSelector = function (action, value){
        return this.dataLayerObject({
            'event':'Selector_choose',
            'listing_action': action,
            'car_id': value
        });
    };

    Ridex.Statistics.prototype.dataLayerObject = function (params){
        return Ridex.Statistics.dataLayerObject(params);
    };

    Ridex.Statistics.prototype.dataLayerObject = function (params){
        let dataObject = {
            'generic_id':       v.genericId,
            'article_id':       v.articleId,
            'user_id':          v.userId,
            'basketID':         v.basketId,
            'session_start':    v.sessionStart,
            'Country':          v.country,
            //'pageIndex':      v.pageIndex,
            'routeName' :       v.routeName,
            'user_sessionID':   v.userSessionId,
            'random_sessionID': v.randomSessionId,
            'entrance_route':   v.routeFirstVisited
        };

        if(v.userRegistered){
            dataObject.visitor_type = 'registered_user';
        } else if(window.Laravel.auth){
            dataObject.visitor_type = 'logged_user';
        } else {
            dataObject.visitor_type = 'unknown_user';
        }

        for (let k in params){
            dataObject[k] = params[k];
        }

        if(dataObject.entrance_route === null){
            dataObject.entrance_route = dataObject.routeName;

            Ridex.Ajax.loadFirstVisitedRoute(dataObject.routeName);
        }

        return dataObject;
    };

    Ridex.Statistics.prototype.clickJsGtmB2bLandingBecomePartnerHeaderButton = function (){
        v.dataLayer.push(
            Ridex.Statistics.dataLayerObject({
                event: 'autoEvent',
                eventCategory: 'become-a-partner_header-button',
                eventAction: 'click',
                eventLabel: v.currentUrl
            })
        );
    };

    Ridex.Statistics.prototype.clickJsGtmB2bLandingBecomePartnerForm = function (){
        let $form = $(v._jsGtmB2bLandingBecomePartnerForm),
            fieldsData = $form.find('textarea').val();

        $form.find('input:not([type=file],[type=hidden],[type=checkbox])').each(function (){
            fieldsData += $(this).val();
        });

        if(v.fieldsDataLength === 0){
            if(fieldsData.length){
                v.dataLayer.push({
                    event: 'become-a-partner_form',
                    event_action: 'engagement',
                    parameters: {
                        route: v.currentUrl
                    }
                });

                v.fieldsDataLength = fieldsData.length;
            }
        }
    };

    Ridex.Statistics.prototype.clickJsGtmB2bLandingBecomePartnerFormFile = function (){
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            event: 'autoEvent',
            eventCategory: 'become-a-partner_form',
            eventAction: 'click%add-a-file',
            eventLabel: v.currentUrl
        }));
    };

    Ridex.Statistics.prototype.changeJsGtmB2bLandingBecomePartnerFormFile = function (){
        if ($(this).get(0).files.length !== 0) {
            v.dataLayer.push(Ridex.Statistics.dataLayerObject({
                event: 'autoEvent',
                eventCategory: 'become-a-partner_form',
                eventAction: 'success%add-a-file',
                eventLabel: v.currentUrl
            }));
        }
    };

    Ridex.Statistics.prototype.clickJsGtmB2bLandingBecomePartnerFormBSegment = function (){
        if($(this).is(":checked")) {
            v.dataLayer.push(Ridex.Statistics.dataLayerObject({
                event: 'autoEvent',
                eventCategory: 'become-a-partner_form',
                eventAction: 'click%' + $(this).val(),
                eventLabel: v.currentUrl
            }));
        }
    };

    Ridex.Statistics.prototype.clickJsGtmB2bLandingBecomePartnerFooterButton = function (){
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            event: 'autoEvent',
            eventCategory: 'become-a-partner_footer-button',
            eventAction: 'click',
            eventLabel: v.currentUrl
        }));
    };

    Ridex.Statistics.prototype.clickJsGtmB2bLandingShowMoreQuestions = function (){
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            event: 'autoEvent',
            eventCategory: 'show-more-questions_landing',
            eventAction: 'click',
            eventLabel: v.currentUrl
        }));
    };

    /**
     * Search tracking
     */
    Ridex.Statistics.prototype.clickJsGtmSearchSuggestItem = function (){
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event': 'Search',
            'search_action': 'Listing-click'
        }));
    };

    Ridex.Statistics.prototype.clickJsGtmSearchSuggestCategoryPopular = function (){
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event': 'Search',
            'search_action': 'Popular-click'
        }));
    };

    Ridex.Statistics.prototype.clickJsGtmSearchSuggestCategoryNew = function (){
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event': 'Search',
            'search_action': 'New-click'
        }));
    };

    Ridex.Statistics.prototype.clickJsGtmSearchPageCategory = function (){
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            event: 'autoEvent',
            eventCategory: 'popular-categories_block',
            eventAction: 'click',
            eventLabel: v.currentUrl
        }));
    };

    Ridex.Statistics.prototype.clickJsGtmSearchPageCategoriesSlider = function (){
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            event: 'autoEvent',
            eventCategory: 'popular-categories_block',
            eventAction: 'arrow-click',
            eventLabel: v.currentUrl
        }));
    };
    /**
     * End Search tracking
     */

    Ridex.Statistics.prototype.clickJsHeaderMainLogo = function(){
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Header_click',
            'header_action':'Logo'
        }));
    };

    Ridex.Statistics.prototype.clickJsHeaderTopLinks = function(){
        let currentTracking = $(this).data('event-tracking');

        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Header_click',
            'header_action': currentTracking
        }));
    };

    Ridex.Statistics.prototype.clickJsHeaderMainMobileList = function(){
        let currentTracking = $(this).data('event-tracking');
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Header_click',
            'header_action': currentTracking
        }));
    };

    Ridex.Statistics.prototype.clickJsHeaderMainAccount = function(){
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Header_click',
            'header_action':'Account'
        }));
    };

    Ridex.Statistics.prototype.clickJsHeaderMainCart = function(){
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Header_click',
            'header_action':'Cart'
        }));
    };

    Ridex.Statistics.prototype.clickJsHeaderTopLangStars = function(){
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Header_click',
            'header_action':'Wishlist'
        }));
    };

    Ridex.Statistics.prototype.clickJsHeaderTopLangLinks = function(){
        let currentTracking = $(this).data('event-tracking');

        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Header_click',
            'header_action': currentTracking
        }));
    };

    Ridex.Statistics.prototype.clickJsDropdownLangSelected = function(){
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Header_click',
            'header_action':'Lang_drop_down'
        }));
    };

    Ridex.Statistics.prototype.clickJsDropdownOption = function(){
        let languageCurrent = $(this).data('layer-lang-action');
        let selectLang = 'Select_lang%' + languageCurrent;

        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Header_click',
            'header_action': selectLang
        }));
    };

    Ridex.Statistics.prototype.clickJsHeaderMainSearchInput = function(){
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event': 'Search',
            'search_action': 'Click'
        }));

        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event': 'Search',
            'search_action': 'Enter-request'
        }));
    };

    Ridex.Statistics.prototype.clickJsAutocompleteSuggestion = function() {
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Search',
            'search_action':'Listing-click'
        }));
    };

    Ridex.Statistics.prototype.clickJsSearchButton = function() {
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Search',
            'search_action':'Search'
        }));
    };

    Ridex.Statistics.prototype.clickJsFooterLogoImg = function () {
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Footer_click',
            'footer_action':'Logo'
        }));
    };

    Ridex.Statistics.prototype.clickJsFooterLinks = function() {
        let currentTracking = $(this).data('event-tracking');
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Footer_click',
            'footer_action': currentTracking
        }));
    };

    Ridex.Statistics.prototype.clickJsFooterSubscribe = function() {
        let currentSubscribe = $(this).data('event-tracking');
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Footer_click',
            'footer_action': currentSubscribe
        }));
    };

    Ridex.Statistics.prototype.clickJsCartProductDelete = function() {
        let currentElement = $(this).closest(v._jsCartProduct);
        let currentGenericId = currentElement.data('genericid');
        let currentItemId = currentElement.attr('itemid');

        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Remove_from_basket',
            'generic_id': currentGenericId,
            'article_id':currentItemId
        }));
    };

    Ridex.Statistics.prototype.clickJsCartProductNumChangeQty = function() {
        let currentElement = $(this).closest(v._jsCartProduct);
        let currentGenericId = currentElement.data('genericid');
        let currentItemId = currentElement.attr('itemid');

        if($(this).hasClass('_js-minus')){
            v.dataLayer.push(Ridex.Statistics.dataLayerObject({
                'event':'Quantity_decrease_basket',
                'generic_id': currentGenericId,
                'article_id': currentItemId
            }));
        } else if($(this).hasClass('_js-plus')) {
            v.dataLayer.push(Ridex.Statistics.dataLayerObject({
                'event':'Quantity_increase_basket',
                'generic_id': currentGenericId,
                'article_id': currentItemId
            }));
        }
    };

    Ridex.Statistics.prototype.clickJsAboutRidexTextButton = function() {
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Click_on_main',
            'main_action':'show_more'
        }));
    };

    Ridex.Statistics.prototype.clickJsLinkImageMainSlider = function(e) {
        e.preventDefault();
        let currentTracking = $(this).data('event-tracking');
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event': 'Banner_on_main',
            'main_action': currentTracking
        }));
        document.location = $(this).attr('href');
    };

    Ridex.Statistics.prototype.clickJsTopCategoriesItem = function() {
        let currentTracking = $(this).data('event-tracking');

        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event': 'Top_category',
            'main_action': currentTracking
        }));
    };

    Ridex.Statistics.prototype.clickJsButtonGroupButtonDealer = function() {
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Click_on_main',
            'main_action':'become_a_dealer'
        }));
    };

    Ridex.Statistics.prototype.clickJsButtonGroupButtonOrder = function() {
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Click_on_main',
            'main_action':'quick_order'
        }));
    };

    Ridex.Statistics.prototype.clickJsDownloadCentrePageFormRowLvl2Select = function() {
        let downloadLvl2 = $(v._jsDownloadCentrePageFormRow + " " + v._jsSelectBox + "[data-level='2'] select option:selected").val();

        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Category_selector_click',
            'catalog_action': downloadLvl2
        }));
    };

    Ridex.Statistics.prototype.clickJsDownloadCentrePageFormRowLvl3Select = function() {
        let downloadLvl2 = $(v._jsDownloadCentrePageFormRow + " " + v._jsSelectBox + "[data-level='2'] select option:selected").val(),
            downloadLvl3 = $(v._jsDownloadCentrePageFormRow + " " + v._jsSelectBox + "[data-level='3'] select option:selected").val();

        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Category_selector_click',
            'catalog_action': downloadLvl2 + '%' + downloadLvl3
        }));
    };

    Ridex.Statistics.prototype.clickJsDownloadCentrePageFormRowLvl4Select = function() {
        let downloadLvl2 = $(v._jsDownloadCentrePageFormRow + " " + v._jsSelectBox + "[data-level='2'] select option:selected").val(),
            downloadLvl3 = $(v._jsDownloadCentrePageFormRow + " " + v._jsSelectBox + "[data-level='3'] select option:selected").val(),
            downloadLvl4 = $(v._jsDownloadCentrePageFormRow + " " + v._jsSelectBox + "[data-level='4'] select option:selected").val();

        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Category_selector_click',
            'catalog_action': downloadLvl2 + '%' + downloadLvl3 + '%' + downloadLvl4
        }));
    };

    Ridex.Statistics.prototype.clickJsDownloadCentrePageItems = function() {
        let currentClickButName = 'download-centre-page__items-button',
            currentClickLinkName = 'block',
            resultdownload = 'none',
            currentTracking = $(this).data('event-tracking'),
            downloadLvl2 = $(v._jsDownloadCentrePageFormRow + " " + v._jsSelectBox + "[data-level='2'] select option:selected").val(),
            downloadLvl3 = $(v._jsDownloadCentrePageFormRow + " " + v._jsSelectBox + "[data-level='3'] select option:selected").val(),
            downloadLvl4 = $(v._jsDownloadCentrePageFormRow + " " + v._jsSelectBox + "[data-level='4'] select option:selected").val();

        if(typeof downloadLvl2 !== "undefined"){
            resultdownload = '';
            resultdownload = resultdownload + downloadLvl2 ;
        }

        if(typeof downloadLvl3 !== "undefined"){
            resultdownload = resultdownload + '%' + downloadLvl3;
        }

        if(typeof downloadLvl4 !== "undefined"){
            resultdownload = resultdownload + '%' + downloadLvl4;
        }

        if(e.target.className === currentClickButName) {
            v.dataLayer.push(Ridex.Statistics.dataLayerObject({
                'event':'PDF_download',
                'download_action': resultdownload,
                'pdf_id': currentTracking
            }));
        }

        if(e.target.className === currentClickLinkName) {
            v.dataLayer.push(Ridex.Statistics.dataLayerObject({
                'event':'PDF_new_page',
                'download_action': resultdownload,
                'pdf_id': currentTracking
            }));
        }
    };

    Ridex.Statistics.prototype.clickJsQuickOrderPageDownloadText = function () {
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Quick_order_click',
            'quick_action':'download_xls'
        }));
    };

    Ridex.Statistics.prototype.clickJsQuickOrderPageControlInfoDownload = function () {
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event': 'Quick_order_click',
            'quick_action': 'download_list'
        }));
    };

    Ridex.Statistics.prototype.clickJsQuickOrderPageItemImage = function (e) {
        e.preventDefault();

        let articleId = $(this).closest(v._jsQuickOrderPageItem).find(v._jsQuickOrderPageItemCheckLabel + ' input').data('articleid');
        let genericId = $(this).closest(v._jsQuickOrderPageItem).find(v._jsQuickOrderPageItemCheckLabel + ' input').data('genericid');

        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Go_to_product_Photo',
            'generic_id': genericId,
            'article_id': articleId
        }));

        document.location = $(this).attr('href');
    };

    Ridex.Statistics.prototype.clickJsPopupQuickOrderPageItemImage = function (e) {
        e.preventDefault();

        let articleId = $(this)
            .closest(v._jsOverProducts + v._jsProblemProducts + ', ' + v._jsNotAvailableProducts._jsProblemProducts)
            .find(v._jsQuickOrderPageItemCheckLabel + ' input')
            .data('articleid');

        let genericId = $(this)
            .closest(v._jsOverProducts + v._jsProblemProducts + ', ' + v._jsNotAvailableProducts._jsProblemProducts)
            .find(v._jsQuickOrderPageItemCheckLabel + ' input')
            .data('genericid');

        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Go_to_product_Photo',
            'generic_id': genericId,
            'article_id': articleId
        }));

        document.location = $(this).attr('href');
    };

    Ridex.Statistics.prototype.clickJsQuickOrderPageItemDescriptionDetails = function (e) {
        e.preventDefault();

        let articleId = $(this).closest(v._jsQuickOrderPageItem).find(v._jsQuickOrderPageItemCheckLabel + ' input').data('articleid');
        let genericId = $(this).closest(v._jsQuickOrderPageItem).find(v._jsQuickOrderPageItemCheckLabel + ' input').data('genericid');

        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Go_to_product',
            'generic_id': genericId,
            'article_id': articleId
        }));

        document.location = $(this).attr('href');
    };

    Ridex.Statistics.prototype.clickJsPopupQuickOrderPageItemDescriptionDetails = function (e) {
        e.preventDefault();

        let articleId = $(this)
            .closest(v._jsOverProducts + v._jsProblemProducts + ', ' + v._jsNotAvailableProducts._jsProblemProducts)
            .find(v._jsQuickOrderPageItemCheckLabel + ' input')
            .data('articleid');

        let genericId = $(this)
            .closest(v._jsOverProducts + v._jsProblemProducts + ', ' + v._jsNotAvailableProducts._jsProblemProducts)
            .find(v._jsQuickOrderPageItemCheckLabel + ' input')
            .data('genericid');

        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Go_to_product',
            'generic_id': genericId,
            'article_id': articleId
        }));

        document.location = $(this).attr('href');
    };

    Ridex.Statistics.prototype.clickJsWrapperIconText = function () {
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Quick_order_click',
            'quick_action':'choose_file'
        }));
    };

    Ridex.Statistics.prototype.clickJsCatalogListItem2 = function (e) {
        e.preventDefault();

        let categoryId = $(this).data('categoryid');
        $.cookie('categoryId', categoryId);

        if(e.target.classList[0] !== 'catalog-item__brochure') {
            v.dataLayer.push(Ridex.Statistics.dataLayerObject({
                'event':'Catalog_page_click',
                'catalog_action':categoryId
            }));

            document.location = $(this).find('a._js-catalog-item__img').attr('href');
        }
    };

    Ridex.Statistics.prototype.clickJsCatalogListItem3 = function (e) {
        e.preventDefault();

        let categoryId = $(this).data('categoryid');
        let subCategoryId = $(this).data('sub-categoryid');

        if(e.target.classList[0] !== 'catalog-item__brochure') {
            v.dataLayer.push(Ridex.Statistics.dataLayerObject({
                'event':'Parent_page_click',
                'catalog_action': categoryId + '%' + subCategoryId
            }));

            document.location = $(this).find('a._js-catalog-item__img').attr('href');
        }
    };

    Ridex.Statistics.prototype.clickJsCatalogListItem4 = function (e) {
        e.preventDefault();

        let mainCategoryId = $.cookie('categoryId');
        let categoryId = $(this).data('categoryid');
        let subCategoryId = $(this).data('sub-categoryid');

        if(e.target.classList[0] !== 'catalog-item__brochure') {
            v.dataLayer.push(Ridex.Statistics.dataLayerObject({
                'event':'Category_page_click',
                'catalog_action': mainCategoryId + '%' + categoryId + '%' + subCategoryId
            }));

            document.location = $(this).find('a._js-catalog-item__img').attr('href');
        }
    };

    Ridex.Statistics.prototype.clickJsCatalogItemBrochure = function (e) {
        e.preventDefault();

        let categoryId = $(this).closest('._js-catalog-list__item').find('._js-catalog-item__action').data('event-tracking');

        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'PDF_new_page',
            'download_action': categoryId
        }));
    };

    Ridex.Statistics.prototype.clickJsListingSliderIconBlockBrochure = function (e) {
        e.preventDefault();

        let categoryId = $(this).closest(v._jsGridItem).data('event-tracking');

        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'PDF_new_page',
            'download_action': categoryId
        }));
    };

    Ridex.Statistics.prototype.clickJsProductSliderIconBlockBrochure = function(e) {
        e.preventDefault();

        let categoryId = $(this).closest(v._jsProductPreview).data('event-tracking');

        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'PDF_new_page',
            'download_action': categoryId
        }));
    };

    Ridex.Statistics.prototype.clickJsAvailableWorldwideCountriesItem = function(){
        let eventLang = $(this).data('event-lang');
        let eventLangRes = eventLang.toUpperCase();
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Dealers_Choose_country',
            'dealer_action': eventLangRes
        }));
    };

    Ridex.Statistics.prototype.clickJsAvailableWorldwideDealersKink = function(){
        let eventLangsite = $(this).data('event-langsite');
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Dealers_Choose_site',
            'dealer_action': eventLangsite
        }));
    };

    Ridex.Statistics.prototype.clickJsFaqDealersItemsItem = function(){
        let eventNumber = $(this).data('event-number');
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Dealers_FAQ',
            'dealer_action': eventNumber
        }));
    };

    Ridex.Statistics.prototype.focusoutJsOrderPadTextInput = function(){
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Bulk_order_click',
            'bulk_action':'Article'
        }));
    };

    Ridex.Statistics.prototype.clickJsOrderPadItemBtnCountPlus = function(){
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Bulk_order_click',
            'bulk_action':'increase_qty'
        }));
    };

    Ridex.Statistics.prototype.clickJsOrderPadItemBtnCountMinus = function(){
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Bulk_order_click',
            'bulk_action':'decrease_qty'
        }));
    };

    Ridex.Statistics.prototype.clickJsOrderPadWrapAddField = function(){
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Bulk_order_click',
            'bulk_action':'add_field'
        }));
    };

    Ridex.Statistics.prototype.clickJsProfileDetailsSave = function(){
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Cabinet_New_password_form',
            'form_action':'success'
        }));
    };

    Ridex.Statistics.prototype.clickJsSelectAutoRefreshLink = function (e) {
        e.preventDefault();

        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Selector_click',
            'listing_action':'reset'
        }));

        if($(this).hasClass('_js-popular-categories-search__selector-refresh')){
            $(this).closest('form').find('select').val(null).trigger('change');
            $(this).closest('form').find(v._jsModel + ' option:not(:first)').remove();
            $(this).closest('form').find(v._jsCarType + ' option:not(:first)').remove();
        } else {
            document.location = $(this).attr('href');
        }
    };

    Ridex.Statistics.prototype.changeJsSelectAutoSelectMakerSelect = function () {
        v.dataLayer.push(
            self.getChooseSelector('maker', $(this).val())
        );
    };

    Ridex.Statistics.prototype.changeJsSelectAutoSelectModelSelect = function () {
        v.dataLayer.push(
            self.getChooseSelector('model', $(this).val())
        );
    };

    Ridex.Statistics.prototype.changeJsSelectAutoSelectEngineSelect = function () {
        v.dataLayer.push(
            self.getChooseSelector('engine', $(this).val())
        );
    };

    Ridex.Statistics.prototype.clickJsSelectorLinkListItemSpan = function () {
        let currentOption = $(this).data('event-option');
        let currentOptionResult = 'products%' + currentOption;
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Listing_view_Option',
            'listing_action': currentOptionResult
        }));
    };

    Ridex.Statistics.prototype.clickJsChangeViewSwitchSpan = function () {
        let currentView = $(this).data('event-view');
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Listing_view_Option',
            'listing_action': currentView
        }));
    };

    Ridex.Statistics.prototype.clickJsListingProductContainerWishlistSpan =  function () {
        let articleid = $(this).attr('articleid');
        let genericid = $(this).attr('genericid');
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Add_to_Wishlist',
            'generic_id': genericid,
            'article_id': articleid
        }));
    };

    Ridex.Statistics.prototype.clickJsProductImage360 = function (e) {
        let articleid = $(this).attr('articleid');
        let genericid = $(this).attr('genericid');
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'3D_image',
            'generic_id': genericid,
            'article_id': articleid
        }));
    };

    Ridex.Statistics.prototype.clickJsListingContainerProductDetailsNameLink = function (e) {
        e.preventDefault();
        let articleid = $(this).attr('articleid');
        let genericid = $(this).attr('genericid');
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Go_to_product',
            'generic_id': genericid,
            'article_id': articleid
        }));
        document.location = $(this).attr('href');
    };

    Ridex.Statistics.prototype.clickJsProductCardBtn = function () {
        let articleid = $(this).data('articleid'),
            articleName = $(this).data('article-name'),
            genericid = $(this).data('genericid'),
            brandNo = $(this).data('brand-no'),
            currentEvent = $(this).data('event-price'),
            eventObject = $(this).data('event-object'),
            price = $(this).data('price'),
            qty = $(this).closest(v._jsProduct).find(v._jsAmountInput).val();

        if(currentEvent !== 'Add_to_Basket') {
            v.dataLayer.push(Ridex.Statistics.dataLayerObject({
                'event': currentEvent,
                'event_object': eventObject,
                'generic_id': genericid,
                'article_id': articleid
            }));
        }

        if(eventObject === 'listing' || eventObject === 'product') {
            v.dataLayer.push({ ecommerce: null });
            v.dataLayer.push({
                event: "add_to_cart",
                parameters: {
                    //shipping_date: "shipping_date",
                    route_name: window.Laravel.routeName
                },
                ecommerce: {
                    currency: window.Laravel.currency.iso,
                    value: price * qty,
                    items: [
                        {
                            item_id: articleid,
                            item_name: articleName,
                            item_brand: brandNo,
                            item_category: genericid,
                            price: price,
                            quantity: qty
                        }
                    ]
                }
            });
        }
    };

    Ridex.Statistics.prototype.clickJsListingProductPageCrumbs = function () {
        let currentTracking = $(this).data('event-tracking');
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Breadcrumbs',
            'listing_action': currentTracking
        }));
    };

    Ridex.Statistics.prototype.clickJsProductPageNameLink = function () {
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'About_Ridex_Reman'
        }));
    };

    Ridex.Statistics.prototype.clickJsProductThumbsItem = function () {
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Product_gallery'
        }));
    };

    Ridex.Statistics.prototype.clickJsProductPageCartCountPlus = function () {
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Quantity_increase_product'
        }));
    };

    Ridex.Statistics.prototype.clickJsProductPageCartCountMinus = function () {
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Quantity_decrease_product'
        }));
    };

    Ridex.Statistics.prototype.clickJsProductPageOtherCarsTabsLiOrName = function () {
        let currentTracking = $(this).data('event-tracking'),
            currentAction = $(this).data('action-tracking');

        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event': currentTracking,
            'listing_action': currentAction
        }));
    };

    Ridex.Statistics.prototype.clickJsWishProductImgLinkOrWithProductDataSeeAll = function () {
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Wishlist',
            'wishlist_action':'see_details'
        }));
    };

    Ridex.Statistics.prototype.clickJsWishProductNumChangeWishQty = function () {
        let articleId = $(this).closest('._js-wish-product').data('article-id'),
            genericId = $(this).closest('._js-wish-product').data('generic-id'),
            quantity = '';

        if($(this).hasClass('_js-minus')){
            quantity = 'Quantity_decrease_wishlist';
        }

        if($(this).hasClass('_js-plus')){
            quantity = 'Quantity_increase_wishlist';
        }

        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event': quantity,
            'generic_id': articleId,
            'article_id': genericId
        }));
    };

    Ridex.Statistics.prototype.clickJsWishGroupAddInput = function(){
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Wishlist',
            'wishlist_action':'name'
        }));
    };

    Ridex.Statistics.prototype.clickJsWishlistGroupButDel = function () {
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Wishlist',
            'wishlist_action':'delete_wishlist'
        }));
    };

    Ridex.Statistics.prototype.clickJsWishProductDelete = function () {
        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Wishlist',
            'wishlist_action':'delete_product'
        }));
    };

    Ridex.Statistics.prototype.clickJsMaintanceLangListLink = function () {
        let countryText = $(this).data('lang-text');
        let countryLink = $(this).data('lang-link');

        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Select_country',
            'eu_category': countryText,
            'eu_action': countryLink
        }));
    };

    Ridex.Statistics.prototype.clickJsContactPageFaqItemToggle = function(){
        let eventNumber = $(this).data('event-number');

        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'Contacts_FAQ',
            'contact_action': eventNumber
        }));
    };

    Ridex.Statistics.prototype.clickJsContactPageFaqItemLink = function(e){
        e.preventDefault();
        let eventTracking = $(this).data('event-tracking');

        if(eventTracking !== undefined) {

            v.dataLayer.push(Ridex.Statistics.dataLayerObject({
                'event':'Contacts_FAQ_link',
                'contact_action': eventTracking
            }));
        }

        let href = $(this).attr('href');

        if(href !== undefined) {
            document.location = href;
        }

    };

    Ridex.Statistics.prototype.clickJsToolsPageSliderItem = function() {
        let eventTrackingElement = $(this).data('event-tracking');
        let eventTrackingSlider = $(this).closest('.tools-page__slider').data('event-tracking');
        let currencyUrlToolsPage = window.location.href;

        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'autoEvent',
            'eventCategory': eventTrackingSlider,
            'eventAction': eventTrackingElement,
            'eventLabel': currencyUrlToolsPage
        }));

        let href = $(this).attr('href');
        if(href !== undefined) {
            document.location = href;
        }
    };

    Ridex.Statistics.prototype.clickJsDownloadCentrePagePresentationsImage = function(e) {
        e.preventDefault();

        let pdfName = $(this).closest(v._jsDownloadCentrePagePresentations).find(v._jsDownload + ' a').data('event-name'),
            href = $(this).attr('href');

        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'PDF_new_page',
            'download_action': pdfName
        }));

        if(href !== undefined) {
            window.open(href);
        }
    };

    Ridex.Statistics.prototype.clickJsDownloadCentrePagePresentationsDownloadLink = function() {
        let pdfName = $(this).data('event-name');

        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'PDF_download',
            'download_action': pdfName
        }));
    };

    Ridex.Statistics.prototype.clickJsDownloadCentrePageItemsCatalogPdfBlockLink = function(e) {
        e.preventDefault();

        let pdfId = $(this).data('event-tracking'),
            href = $(this).attr('href');

        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'PDF_new_page',
            'download_action': pdfId
        }));

        if(href !== undefined) {
            window.open(href);
        }
    };

    Ridex.Statistics.prototype.clickJsDownloadCentrePageItemsCatalogPdfBlockTextDownloadLink = function() {
        let pdfId = $(this).data('event-tracking');

        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event':'PDF_download',
            'download_action': pdfId
        }));
    };

    Ridex.Statistics.prototype.clickJsGtmCategoriesItem = function () {
        v.dataLayer.push({
             event: 'catalogue_click',
             parameters: {
                 parent_category_id: $(this).data('parent_category_id'),
                 child_category_id: $(this).data('child_category_id'),
                 event_action: $(this).data('event_action')
            }
        });
    };

    Ridex.Statistics.prototype.clickJsGtmQuickOrderClick = function () {
        v.dataLayer.push({
            event: 'quick_order_click',
            parameters: {
                event_action: $(this).data('event-action'),
            }
        });
    };

    Ridex.Statistics.prototype.clickJsGtmTopItems = function () {
        v.dataLayer.push({
            event: 'top-items',
            parameters: {
                event_action: $(this).data('event-object'),
                index: $(this).data('index'),
                generic_id: $(this).data('genericid'),
                article_id: $(this).data('articleid')
            }
        });
    };

    Ridex.Statistics.prototype.clickJsQuarantyPageInfoTextLink = function(e){
        e.preventDefault();
        let currencyGuaranty = window.location.href;
        let anchor = $(this).attr('href');
        let result = anchor.replace(/(^\w+:|^)\/\//, '');

        v.dataLayer.push(Ridex.Statistics.dataLayerObject({
            'event' : 'autoEvent' ,
            'eventCategory' : 'extended-warranty' ,
            'eventAction' : 'link-click%' + result ,
            'eventLabel' : currencyGuaranty
        }));

        if(anchor) {
            document.location = anchor;
        }
    };

    Ridex.Statistics.prototype.clickJsQuarantyPageInfoButton = function(){
        if (!window.Laravel.auth) {
            loadSignInPopup();
        } else {
            let currencyGuaranty = window.location.href;
            let anchor = $(this).attr('url');

            v.dataLayer.push(Ridex.Statistics.dataLayerObject({
                'event' : 'autoEvent' ,
                'eventCategory' : 'extended-warranty_button' ,
                'eventAction' : 'click' ,
                'eventLabel' : currencyGuaranty
            }));

            if(anchor) {
                document.location = anchor;
            }
        }
    };

    Ridex.Statistics.prototype.clickSlickDotsLi = function(){
        let current = $(v._jsRecommendedProducts + ' > ' + v._jsRecentlyViewedItems + ' > .slick-list > .slick-track').find('.slick-current.slick-active');
        v.currentIndex = current.data('slick-index');
    };

    Ridex.Statistics.prototype.touchendJsRecommendedProductsRecentlyViewedItemsSlickTrack = function(){
        let current = $(this).find('.slick-current.slick-active'),
            eventCategory = $(this).closest(v._jsRecommendedProductsCart).length ? 'universal-items' : 'top-items';

        if(current && v.currentIndex !== current.data('slick-index')){
            v.currentIndex = current.data('slick-index');

            v.dataLayer.push({
                'event': 'autoEvent',
                'eventCategory': eventCategory,
                'eventAction': 'block_scroll',
                'eventLabel': window.Laravel.routeName
            });
        }
    };

    Ridex.Statistics.prototype.clickJsRecommendedProductsListingSliderImgLinkOrProductDetailsName = function(){
        let genericId = $(this).attr('genericid'),
            articleid = $(this).attr('articleid'),
            index = $(this).attr('index'),
            eventCategory = $(this).closest(v._jsRecommendedProductsCart).length ? 'universal-items' : 'top-items';

        v.dataLayer.push({
            'event': 'autoEvent',
            'eventCategory': eventCategory,
            'eventAction': 'block_go_to_product%'+index,
            'eventLabel': window.Laravel.routeName,
            'generic_id': genericId,
            'article_id': articleid
        });
    };

    Ridex.Statistics.prototype.clickJsRecommendedProductsWishlistNew = function(){
        let genericId = $(this).attr('genericid'),
            articleid = $(this).attr('articleid'),
            index = $(this).attr('index'),
            eventCategory = $(this).closest(v._jsRecommendedProductsCart).length ? 'universal-items' : 'top-items';

        v.dataLayer.push({
            'event': 'autoEvent',
            'eventCategory': eventCategory,
            'eventAction': 'block_wishlist%'+index,
            'eventLabel': window.Laravel.routeName,
            'generic_id': genericId,
            'article_id': articleid
        });
    };

    Ridex.Statistics.prototype.clickJsRecommendedProductsAddToCart = function(){
        let genericId = $(this).attr('genericid'),
            articleid = $(this).attr('articleid'),
            index = $(this).attr('index'),
            eventCategory = $(this).closest(v._jsRecommendedProductsCart).length ? 'universal-items' : 'top-items';

        let dataObject = {
            'event': 'autoEvent',
            'eventCategory': eventCategory,
            'eventAction': 'block_add_to_cart%'+index,
            'eventLabel': window.Laravel.routeName,
            'generic_id': genericId,
            'article_id': articleid
        };

        if(window.Laravel.auth){
            dataObject.user_id = window.Laravel.globalUser.id;
        }

        v.dataLayer.push(dataObject);

        if(window.Laravel.auth) {
            dataObject.eventCategory = 'Add_to_Basket';
            dataObject.eventAction = genericId;
            v.dataLayer.push(dataObject);
        }
    };
})();

(function () {
   let v = Ridex.vars({
        _jsCategoriesItem:              '._js-categories-item',
        _jsCatalogPageCategoriesItem:   '._js-catalog-page__categories-item',
        _jsCatalogPageCategoriesItems:  '._js-catalog-page__categories-items',
        _jsCategoriesItemPopupItem:     '._js-categories-item__popup-item',
        _jsCategoriesItemPopup:         '._js-categories-item__popup',
        _jsCatalogItemHasSubcategories: '._js-catalog-item__hasSubcategories',
        _jsCategoriesItemPopupDrop:     '._js-categories-item__popup-drop',
        _jsCategoriesItemPopupItems:    '._js-categories-item__popup-items'
    });

    Ridex.Catalog = function () {
        $(document).on('click touch', v._jsCategoriesItem, this.clickJsCategoriesItem);
        $(document).on('click', v._jsCatalogItemHasSubcategories, this.clickJsCatalogItemHasSubcategories);
    };

    Ridex.Catalog.prototype.clickJsCategoriesItem = function (){
        let obj = $(this).closest(v._jsCatalogPageCategoriesItem),
            url = $(this).data('url'),
            categoryId = $(this).data('categoryid'),
            level = $(this).data('level'),
            makerId = $(this).data('makerid'),
            modelId = $(this).data('modelid'),
            carId = $(this).data('carid');
            $('html, body').animate({scrollTop: obj.offset().top - 100 }, 'slow');

        $(v._jsCatalogPageCategoriesItem).not(obj).removeClass('active');

        obj.toggleClass('active');

        if(!obj.find(v._jsCategoriesItemPopup).children().length){
            Ridex.Ajax.loadAfterClickJsCategoriesItem(obj, url, categoryId, level, makerId, modelId, carId);
        }
    };

    Ridex.Catalog.prototype.clickJsCatalogItemHasSubcategories = function (e) {
        $(this).closest(v._jsCategoriesItemPopupItem).toggleClass('active');

        if ($(v._jsCategoriesItemPopupDrop).length) {
            $(v._jsCategoriesItemPopupDrop).each(function () {
                let o1 = $(this).closest(v._jsCategoriesItemPopupItem).offset();
                let o2 = $(v._jsCatalogPageCategoriesItems).offset();
                let marginLeftPosition = o1.left - o2.left - 40;

                $(this).css({
                    'width': $(v._jsCategoriesItemPopupItems).outerWidth(),
                    'margin-left': '-' + marginLeftPosition + 'px'
                });
            })
        }
    };
})();

new Ridex.Catalog();

(function () {
    let v = Ridex.vars({
        actionDone: false,
        _jsHeader:                            '._js-header',
        _jsHeaderLogin:                       '._js-header__login',
        _jsHeaderCatalogMenu:                 '._js-header__catalog-menu',
        _jsHeaderCatalogOpen:                 '._js-header__catalog-open',
        _jsHeaderCart:                        '._js-header-cart',
        _jsHeaderCartDropdown:                '._js-header-cart-dropdown',
        _jsHeaderSearch:                      '._js-header__search',
        _jsHeaderSearchPopup:                 '._js-header-search-popup',
        _jsHeaderBurger:                      '._js-header__burger',
        _jsHeaderMenuMobile:                  '._js-header-menu-mobile',
        _jsCatalogMenuItemLink:               '._js-catalog-menu__item-link',
        _jsCatalogMenuItemLinkLvl1:           '._js-catalog-menu__item-link-lvl-1',
        _jsCatalogMenuScroll:                 '._js-catalog-menu__scroll',
        _jsCatalogMenu_SelectClose:           '._js-catalog-menu__select-close',
        _jsCatalogMenuSub:                    '._js-catalog-menu__sub',
        _jsCatalogMenuSubBack:                '._js-catalog-menu__sub-back',
        _jsCatalogMenuSubDrop:                '._js-catalog-menu__sub-drop',
        _jsCatalogMenuSubItem:                '._js-catalog-menu__sub-item',
        _jsCatalogMenuSubRow:                 '._js-catalog-menu__sub-row',
        _jsParamsToggle:                      '._js-params-toggle',
        _jsListingItem:                       '._js-listing__item',
        _jsSignInFormButton:                  '._js-signInFormButton',
        _jsSignUpFormButton:                  '._js-signUpFormButton',
        _jsForgotPassword:                    '._js_forgot-password',
        _jsForgotPasswordFormButton:          '._js-forgotPasswordFormButton',
        _jsCookiesAcceptAll:                  '._js-cookies-accept-all',
        _jsCookiesAcceptSelected:             '._js-cookies-accept-selected',
        _jsCookiesDenied:                     '._js-cookies-denied',
        _jsCookiesClose:                      '._js-cookies-close',
        _jsCookiesShowAll:                    '._js-cookies-show-all',
        _jsPopupChooseCookiesFirstBlock:      '._js-popup-choose-cookies__first-block',
        _jsPopupChooseCookiesContent:         '._js-popup-choose-cookies__content',
        _jsPopupChooseCookiesTab:             '._js-popup-choose-cookies-tab',
        _jsPopupChooseCookiesTabsContentItem: '._js-popup-choose-cookies__tabs-content-item',
        _jsPopupChooseCookiesDetails:         '._js-popup-choose-cookies-details',
        _jsPopupChooseCookiesDetailsBlock:    '._js-popup-choose-cookies__details-block',
        _jsPopupChooseCookiesMainInfo:        '._js-popup-choose-cookies__main-info',
        _jsSendFormFooter:                    '._js-send_form-footer',
        _jsSendFormFeedback:                  '._js-send_form-feedback',
        _jsSendFormB2b:                       '._js-send_form-b2b',
        _jsAvailableWorldwideCountries:       '._js-available-worldwide__countries',
        _jsAvailableWorldwideDrop:            '._js-available-worldwide__drop',
        _JsAboutRdxYoutube:                   '._Js-about-rdx-youtube',
        _JsAboutRdxYoutubeInsert:             '._Js-about-rdx-youtube-insert',
        _jsPlusRdxYoutube:                    '._js-plus-rdx-youtube',
        _jsPlusRdxYoutubeInsert:              '._js-plus-rdx-youtube-insert',
        _jsBaseRdxYoutube:                    '._js-base-rdx-youtube',
        _jsBaseRdxYoutubeInsert:              '._js-base-rdx-youtube-insert',
        _jsRemanRdxYoutube:                   '._js-reman-rdx-youtube',
        _jsRemanRdxYoutubeInsert:             '._js-reman-rdx-youtube-insert',
        _jsRidexPageVideo:                    '._js-ridex-page__video',
        _jsListingPageHeaderViewGrid:         '._js-listing-page__header-view-grid',
        _jsListingPageHeaderViewList:         '._js-listing-page__header-view-list',
        _jsPagination:                        '._js-pagination',
        _jsFaqItem:                           '._js-faq-item',
        _jsAnimItems:                         '._js-anim-items',
        _jsDealersPageReviewMore:             '._js-dealers-page__review-more',
        _jsDealersPageReviewBody:             '._js-dealers-page__review-body',
        _jsMainSliderItems:                   '._js-main-slider__items',
        _jsDropDownLanguage:                  '._js-dropdown',
        _jsDropDownLanguageOption:            '._js-dropdown-option',
        _jsPopupVerifyButton:                 '._js-popup-verify-button',
        _jsCatalogPagePopularItems:           '._js-catalog-page__popular-items',
        _jsCatalogPagePopularItem:            '._js-catalog-page__popular-item',
        _jsHeaderSearchPopularItems:          '._js-header-search__popular-items',
        _jsCatalogMenuPopular:                '._js-catalog-menu__popular',
        _jsArrowTop:                          '._js-arrow-top',
        _jsAjaxUnsubscribe:                   '._js-ajaxUnsubscribe',
        _jsAjaxSubscribeUpdate:               '._js-ajaxSubscribeUpdate',
        _jsFooterCookiesPopup:                '._js-footer-cookies-popup',
        _jsMarketingKitDownload:              '._js-marketing-kit-download',
        _jsDealersPageReviewItemsSlider:      '._js-dealers-page__review-items-slider',
        _jsPopupBodyLanguage:                 '._js-popup__body-language'
    });

    let sP = Ridex.vars({
        MainSliderItemsSliderParams: {
            infinite: false,
            slidesToShow: 1,
            arrows: false,
            slidesToScroll: 1,
            autoplay: true,
            dots: true,
            autoplaySpeed: 4000,
        },

        DealersPageReviewItemsSliderParams: {
            infinite: false,
            slidesToShow: 1,
            arrows: false,
            slidesToScroll: 1,
            autoplay: true,
            dots: true,
            autoplaySpeed: 5000,
        },

        CatalogSliderItemsParams: {
            infinite: true,
            slidesToShow: 5,
            slidesToScroll: 1,
            dots: true,
            responsive:[
                {
                    breakpoint: 1150,
                    settings: {
                        slidesToShow: 4
                    }
                },
                {
                    breakpoint: 992,
                    settings: {
                        slidesToShow: 3,
                        arrows: false
                    }
                },
                {
                    breakpoint: 798,
                    settings: {
                        slidesToShow: 2,
                        arrows: false
                    }
                },
                {
                    breakpoint: 460,
                    settings: {
                        slidesToShow: 1,
                        arrows: false
                    }
                }
            ]
        },

        HeaderSearchPopularItems: {
            infinite: false,
            slidesToShow: 7,
            slidesToScroll: 1,
            variableWidth: false,
            responsive:[
                {
                    breakpoint: 9999,
                    settings: "unslick"
                },
                {
                    breakpoint: 1000,
                    settings: {
                        slidesToShow: 6,
                    }
                },
                {
                    breakpoint: 900,
                    settings: {
                        slidesToShow: 5,
                    }
                },
                {
                    breakpoint: 750,
                    settings: {
                        slidesToShow: 4,
                    }
                },
                {
                    breakpoint: 600,
                    settings: {
                        slidesToShow: 3,
                    }
                },
                {
                    breakpoint: 500,
                    settings: {
                        slidesToShow: 2,
                    }
                },
                {
                    breakpoint: 400,
                    settings: {
                        slidesToShow: 1,
                    }
                }
            ]
        }

    });

    Ridex.Main = function (){
        let constructor = this.constructor;

        $(window).on("resize orientationchange", this.resizeOrientationChange);

        $(window).on("scroll", this.scrollJsArrowTop);

        $(document).on('click', v._jsLink, this.clickJsLink);
        $(document).on('click', v._jsHeaderLogin, this.clickJsHeaderLogin);
        $(document).on('click', v._jsHeaderCatalogOpen, this.clickJsHeaderCatalogOpen);
        $(document).on('click', v._jsHeaderSearch, this.clickJsHeaderSearch);
        $(document).on('click', v._jsCatalogMenuSubBack, this.clickJsCatalogMenuSubBack);
        $(document).on('click', v._jsCatalogMenu_SelectClose, this.clickJsCatalogMenuSelectClose);
        $(document).on('click', v._jsCatalogMenuItemLinkLvl1, this.clickJsCatalogMenuItemLinkLvl1);
        $(document).on('click', v._jsParamsToggle, this.clickJsParamsToggle);
        $(document).on('click', v._jsPopupClose, this.clickPopupCloseOrOverlay);
        $(document).on('click', v._jsOverlay, this.clickPopupCloseOrOverlay);
        $(document).on('click', v._jsPopupOverlay, this.clickPopupCloseOrOverlay);
        $(document).on('click', v._jsCookiesAcceptAll, this.clickJsCookiesAcceptAllSelected);
        $(document).on('click', v._jsCookiesAcceptSelected, this.clickJsCookiesAcceptAllSelected);
        $(document).on('click', v._jsCookiesDenied, this.clickJsCookiesDenied);
        $(document).on('click', v._jsCookiesClose, this.clickJsCookiesClose);
        $(document).on('click', v._jsCookiesShowAll, this.clickJsCookiesShowAll);
        $(document).on('click', v._jsPopupChooseCookiesTab, this.clickJsPopupChooseCookiesTab);
        $(document).on('click', v._jsPopupChooseCookiesDetails, this.clickJsPopupChooseCookiesDetails);
        $(document).on('click', v._jsSendFormFooter, this.clickJsSendFormFooter);
        $(document).on('click', v._jsSendFormFeedback, this.clickJsSendFormFeedback);
        $(document).on('click', v._jsSendFormB2b, this.clickJsSendFormB2b);
        $(document).on('click', v._jsAvailableWorldwideCountries, this.clickJsAvailableWorldwideCountries);
        $(document).on('click', v._jsHeaderBurger, this.clickJsHeaderBurger);
        $(document).on('click', v._JsAboutRdxYoutube, this.clickJsAboutRdxYoutube);
        $(document).on('click', v._jsPlusRdxYoutube, this.clickJsPlusRdxYoutube);
        $(document).on('click', v._jsBaseRdxYoutube, this.clickJsBaseRdxYoutube);
        $(document).on('click', v._jsRemanRdxYoutube, this.clickJsRemanRdxYoutube);
        $(document).on('click', v._jsListingPageHeaderViewGrid, this.clickJsListingPageHeaderViewGrid);
        $(document).on('click', v._jsListingPageHeaderViewList, this.clickJsListingPageHeaderViewList);
        $(document).on('click', v._jsPagination + ' a', this.clickJsPaginationLink);
        $(document).on('click', v._jsPagination + ' ' + v._jsLink, this.clickJsPaginationLink);
        $(document).on('click', v._jsFaqItem, this.clickJsFaqItem);
        $(document).on('click', v._jsDealersPageReviewMore, this.clickDealersPageReviewMore);
        $(document).on('click', v._jsDropDownLanguage, this.clickDropDownLanguage);
        $(document).on('click', v._jsPopupVerifyButton, this.clickPopupVerifyButton);
        $(document).on('click', v._jsAjaxUnsubscribe, this.clickPopupUnsubscribe);
        $(document).on('click', v._jsAjaxSubscribeUpdate, this.clickPopupSubscribeUpdate);
        $(document).on('click', v._jsFooterCookiesPopup, this. clickPopupCookies);
        $(document).on('afterChange', v._jsDealersPageReviewItemsSlider, this. clickDealersPageReviewItemsSlider);
        $(document).on('click', this.clickCloseElement);

        $(document).on('click touch', v._jsCatalogMenuItemLink, this.clickJsCatalogMenuItemLink);
        $(document).on('click touch', v._jsSignInFormButton, this.clickJsSignInFormButton);
        $(document).on('click touch', v._jsSignUpFormButton, this.clickJsSignUpFormButton);
        $(document).on('click touch', v._jsForgotPassword, this.clickJsForgotPassword);
        $(document).on('click touch', v._jsForgotPasswordFormButton, this.clickJsForgotPasswordFormButton);
        $(document).on('click touch', v._jsArrowTop, this.clickJsArrowTop);
        $(document).on('click touch', v._jsMarketingKitDownload, this.clickJsMarketingKitDownload);
        $(document).on('click touch', v._jsPopupBodyLanguage, this.clickJsPopupBodyLanguage);

        $(document).on('change', v._jsAttachFile, this.changeJsAttachFile);

        $(document).ready(function () {
            if ( v._jsMainSliderItems.length ) {
                Ridex.slickSliderInit($(v._jsMainSliderItems).not('.slick-initialized'), constructor.MainSliderItemsSliderParams());
            }

            if ( v._jsDealersPageReviewItemsSlider.length ) {
                Ridex.slickSliderInit($(v._jsDealersPageReviewItemsSlider).not('.slick-initialized'), constructor.DealersPageReviewItemsSliderParams());
            }

            if ( v._jsCatalogPagePopularItems.length && $(v._jsCatalogPagePopularItem).length > 1 ) {
                Ridex.slickSliderInit($(v._jsCatalogPagePopularItems).not('.slick-initialized'), constructor.CatalogSliderItemsParams());
            }

        });

    };

    Ridex.Main.prototype.resizeOrientationChange = function () {
        if ( v._jsHeaderSearchPopularItems.length ) {
            Ridex.slickSliderInit($(v._jsHeaderSearchPopularItems).not('.slick-initialized'), sP.HeaderSearchPopularItems);
        }
    };

    Ridex.Main.emailVerifyCheck = function (){
        if (window.Laravel.globalUser.email_verified_at) {
            return 1;
        }

        return Ridex.Ajax.loadEmailVerifyCheck(0);
    };

    Ridex.Main.MainSliderItemsSliderParams = function (params) {
        params = params || {};
        Object.assign(sP.MainSliderItemsSliderParams, params);

        return sP.MainSliderItemsSliderParams;
    }

    Ridex.Main.CatalogSliderItemsParams = function (params) {
        params = params || {};
        Object.assign(sP.CatalogSliderItemsParams, params);

        return sP.CatalogSliderItemsParams;
    }

    Ridex.Main.HeaderSearchPopularItems = function (params) {
        params = params || {};
        Object.assign(sP.HeaderSearchPopularItems, params);

        return sP.HeaderSearchPopularItems;
    }

    Ridex.Main.DealersPageReviewItemsSliderParams = function (params) {
        params = params || {};
        Object.assign(sP.DealersPageReviewItemsSliderParams, params);

        return sP.DealersPageReviewItemsSliderParams;
    }

    Ridex.Main.animOnScroll = function (animItems) {
        for (let index = 0; index < animItems.length; index++) {
            const animItem = animItems[index];
            const animItemHeight = animItem.offsetHeight;
            const animItemOffset = Ridex.Main.offset(animItem).top;
            const animStart = 3;

            let animItemPoint = window.innerHeight - animItemHeight / animStart;
            if (animItemHeight > window.innerHeight) {
                animItemPoint = window.innerHeight - window.innerHeight / animStart;
            }

            if((pageYOffset > animItemOffset - animItemPoint) && pageYOffset < (animItemOffset + animItemHeight)) {
                animItem.classList.add('_active');
                $('.digit').addClass('animated-digit');
            } else {
                // animItem.classList.remove('_active');
                $('.digit').removeClass('animated-digit');
            }
        }
    };

    Ridex.Main.offset = function (el) {
        const rect = el.getBoundingClientRect(),
            scrollLeft = window.pageXOffset || document.documentElement.scrollLeft,
            scrollTop = window.pageYOffset || document.documentElement.scrollTop;
        return {top: rect.top + scrollTop, left: rect.left + scrollLeft}
    };

    Ridex.Main.showCookiesPopupAndSetAttribute = function () {
        $(v._jsPopupCookies).show();
        $(v._jsPopupCookies).attr('data-cookies-popup-visible', '');
    };

    Ridex.Main.prototype.showPopupCookies = function () {
        ///cookies popup block
        if (typeof(Storage) !== "undefined") {
            if(!window.localStorage.getItem('cookiePopup')) {
                Ridex.Main.showCookiesPopupAndSetAttribute();
            }
        } else {
            if (!$.cookie('cookiePopup')) {
                Ridex.Main.showCookiesPopupAndSetAttribute();
            }
        }
    };

    Ridex.Main.prototype.clickJsLink = function () {
        let url = $(this).attr('url') || $(this).data('url'),
            target = $(this).attr("target");

        if (target === '_blank')
            window.open(url, '_blank');
        else
            window.location.href = url;
    };

    Ridex.Main.prototype.clickJsCookiesAcceptAllSelected = function() {
        let adStorage = 'granted',
            analyticsStorage = 'granted';

        if($(this).hasClass(Ridex.pureClassName(v._jsCookiesAcceptSelected)) && !$('input[name=adStorageDef]').is(':checked')){
            adStorage = 'denied';
        }

        if($(this).hasClass(Ridex.pureClassName(v._jsCookiesAcceptSelected)) && !$('input[name=analyticsStorageDef]').is(':checked')){
            analyticsStorage = 'denied';
        }

        if (typeof(Storage) !== "undefined") {
            window.localStorage.setItem('cookiePopup', 'true');
        } else {
            $.cookie('cookiePopup', 'true');
        }

        if(adStorage === 'granted'){
            window.localStorage.setItem('adStorage', 'true');
            $.cookie('adStorage', 'true');
        } else {
            window.localStorage.removeItem('adStorage');
        }

        if(analyticsStorage === 'granted'){
            window.localStorage.setItem('analyticsStorage', 'true');
            $.cookie('analyticsStorage', 'true');
        } else {
            window.localStorage.removeItem('analyticsStorage');
        }

        $(v._jsPopupCookies).hide();

        dataLayer.push({
            'ad_storage': adStorage,
            'analytics_storage': analyticsStorage,
            'event': 'consent_mode_option'
        });
    };

    Ridex.Main.prototype.clickJsCookiesShowAll = function() {
        $(this).closest(v._jsPopupChooseCookiesFirstBlock).hide();
        $(v._jsPopupChooseCookiesContent).show();
    };

    Ridex.Main.prototype.clickJsPopupChooseCookiesTab = function() {
        if (!$(this).hasClass("active")) {
            $(v._jsPopupChooseCookiesTab).removeClass("active").eq($(this).index()).addClass("active");
            $(v._jsPopupChooseCookiesTabsContentItem).hide().eq($(this).index()).fadeIn()
        }
    };

    Ridex.Main.prototype.clickJsPopupChooseCookiesDetails = function(e) {
        e.preventDefault();

        $(this).closest(v._jsPopupChooseCookiesTabsContentItem)
               .find(v._jsPopupChooseCookiesMainInfo)
               .toggle();


        $(this).closest(v._jsPopupChooseCookiesTabsContentItem)
               .find(v._jsPopupChooseCookiesDetailsBlock)
               .toggle();
    };

    Ridex.Main.prototype.clickJsCookiesDenied = function(){
        if (typeof(Storage) !== "undefined") {
            window.localStorage.setItem('cookiePopup', 'true');
        }

        window.localStorage.removeItem('adStorage');
        window.localStorage.removeItem('analyticsStorage');

        $(v._jsPopupCookies).hide();

        dataLayer.push({
            'ad_storage_def': 'denied',
            'analytics_storage_def': 'denied',
            'event': 'consent_mode_option'
        });
    };

    Ridex.Main.prototype.clickJsCookiesClose = function(){
        $(v._jsPopupCookies).hide();
    };

    Ridex.Main.prototype.clickJsHeaderLogin = function (){
        Ridex.fadeOut($(v._jsPopup));

        Ridex.Ajax.loadSignInPopup($(this).data('redirect'));
    };

    Ridex.Main.prototype.clickJsForgotPassword = function (){
        Ridex.fadeOut($(v._jsPopup));

        Ridex.Ajax.loadForgotPasswordPopup();
    };

    Ridex.Main.prototype.clickJsHeaderCatalogOpen = function (){
        $(this).toggleClass('active');

        $(v._jsHeaderCatalogMenu).toggle();
    };

    Ridex.Main.prototype.clickJsHeaderBurger = function () {
        $(this).toggleClass('active');
        $(this).closest(v._jsHeader).toggleClass('active');
        $(v._jsHeaderMenuMobile).toggleClass('open');
    };

    Ridex.Main.prototype.mouseenterJsHeaderCart = function () {
        let $this = $(this);
        if(!$this.find(v._jsHeaderCartDropdown).length){
            let url = $this.data('url');

            Ridex.Ajax.loadAfterMouseenterJsHeaderCart($this, url);
        }

        $this.addClass('active');
    };

    Ridex.Main.prototype.mouseleaveJsHeaderCart = function () {
        let $cartBlock = $(v._jsHeaderCart);

        if($cartBlock.hasClass('active')){
            setTimeout(function() {
                $cartBlock.removeClass('active');
                $cartBlock.removeClass('add-to-cart');
            }, 4000);
        }
    };

    Ridex.Main.prototype.clickJsCatalogMenuSubBack = function (e){
        e.preventDefault();

        $(v._jsCatalogMenuSub).hide();
        if ($(window).width() < '700') {
            $(v._jsCatalogMenuPopular).show();
        }
        $(v._jsCatalogMenuSub).find(v._jsCatalogMenuScroll).hide();
    };

    Ridex.Main.prototype.clickJsCatalogMenuSelectClose = function (){
        $(v._jsHeaderCatalogOpen).removeClass('active');
        $(v._jsHeaderCatalogMenu).hide();
    };

    Ridex.Main.prototype.clickJsCatalogMenuItemLinkLvl1 = function (){
        $(v._jsCatalogMenuSub).show();
    };

    Ridex.Main.prototype.clickJsParamsToggle = function (){
        let more = $(this).data('text-more'),
            less = $(this).data('text-less'),
            jsHidden = $(this).closest(v._jsListingItem).find(v._jsHidden);

        if(!$(this).data('clicked')){
            $(this).data('clicked', true);

            $(this).find('span').text(less);

            jsHidden.each(function (){
                $(this).show();
            });

            $(this).closest(v._jsListingItem).find('._js-details-hide').addClass('open');
        } else {
            $(this).data('clicked', false);
            $(this).find('span').text(more);

            jsHidden.each(function (){
                $(this).hide();
            });

            $(this).closest(v._jsListingItem).find('._js-details-hide').removeClass('open');
        }
    };

    Ridex.Main.prototype.clickJsCatalogMenuItemLink = function (e){
        e.preventDefault();

        let obj = $(this);
        let level = obj.data('level');
        let categoryId = obj.data('categoryid');
        let mainCategoryAlias = obj.data('alias');
        let currencyUrlToolsPage = window.location.href;

        if(!obj.hasClass('check')) {
            Ridex.Ajax.loadAfterClickJsCatalogMenuItemLink(obj, level, categoryId, mainCategoryAlias, currencyUrlToolsPage);
        } else {
            if(level === 2){
                obj.closest(v._jsHeaderCatalogMenu)
                    .find(v._jsCatalogMenuSub)
                    .show();
                $(v._jsCatalogMenuPopular).hide();

                obj.closest(v._jsHeaderCatalogMenu)
                    .find(v._jsCatalogMenuSub)
                    .find(v._jsCatalogMenuScroll + '[data-categoryId='+categoryId+']')
                    .show();
            }

            if(level === 3 || level === 4){
                if(obj.hasClass('active')){
                    obj.removeClass('active');
                    obj.closest(v._jsCatalogMenuSubRow)
                        .find(v._jsCatalogMenuSubDrop + '[data-categoryId='+categoryId+']')
                        .hide();
                } else {
                    obj.addClass('active');
                    obj.closest(v._jsCatalogMenuSubRow)
                        .find(v._jsCatalogMenuSubDrop + '[data-categoryId='+categoryId+']')
                        .show();
                }
            }
        }
    };

    Ridex.Main.prototype.clickPopupCloseOrOverlay = function (){
        Ridex.fadeOut(
            $(v._jsPopup)
        );

        Ridex.fadeOut(
            $(v._jsOverlay)
        );
    };

    Ridex.Main.prototype.clickJsHeaderSearch = function (){
        Ridex.fadeIn(
            $(v._jsHeaderSearchPopup)
        );

        Ridex.fadeIn(
            $(v._jsOverlay)
        );

        $(v._jsHeaderSearchPopup).find(v._jsSearchInput).focus();

        if ( v._jsHeaderSearchPopularItems.length ) {
            Ridex.slickSliderInit($(v._jsHeaderSearchPopularItems).not('.slick-initialized'), sP.HeaderSearchPopularItems);
        }
    };

    Ridex.Main.prototype.clickJsSignInFormButton = function (){
        let obj = $(this),
            form = obj.closest('form'),
            url = form.attr('action'),
            redirectUrl = form.find('input[name="redirectUrl"]').val(),
            data = form.serialize();

        form.find(v._jsInputError).hide();

        Ridex.Ajax.loadAfterClickJsSignInFormButton(obj, form, url, data, redirectUrl);
    };

    Ridex.Main.prototype.clickJsSignUpFormButton = function () {
        let obj = $(this),
            form = obj.closest('form'),
            url = form.attr('action'),
            data = form.serialize();

        form.find(v._jsInputError).hide();

        Ridex.Ajax.loadAfterClickJsSignUpFormButton(obj, form, url, data);

        return false;
    };

    Ridex.Main.prototype.clickJsForgotPasswordFormButton = function (){
        let obj = $(this),
            form = obj.closest('form'),
            url = form.attr('action'),
            data = form.serialize();

        form.find(v._jsInputError).hide();

        Ridex.Ajax.loadAfterClickJsForgotPasswordFormButton(obj, form, url, data);
    };

    Ridex.Main.prototype.clickJsArrowTop = function (){
        $('html, body').animate({scrollTop : 0},800);
        return false;
    };

    Ridex.Main.prototype.clickJsMarketingKitDownload = function () {
        let obj = $(this),
            url = obj.attr('href');

        Ridex.Ajax.loadAfterClickJsMarketingKitDownload(obj, url);

        return false;
    };

    Ridex.Main.prototype.changeJsAttachFile = function () {
        let obj = $(this);

        console.log(obj.val());

        obj.closest(v._jsInputGroup).find(v._jsInputText).text(obj.val());
    };

    Ridex.Main.prototype.scrollJsArrowTop = function () {
        if ($(this).scrollTop() > 350) {
            $(v._jsArrowTop).fadeIn('slow');
        } else {
            $(v._jsArrowTop).fadeOut();
        }
    };

    Ridex.Main.prototype.clickJsSendFormFooter = function () {
        let obj = $(this),
            form = obj.closest('form'),
            url = form.attr('action'),
            data = form.serialize();

        form.find(v._jsInputError).hide();

        Ridex.Ajax.loadAfterClickJsSendFormFooter(obj, form, url, data);
    };

    Ridex.Main.prototype.clickJsSendFormFeedback = function () {
        let obj = $(this),
            form = obj.closest('form'),
            url = form.attr('action'),
            data = new FormData(form[0]);

        form.find(v._jsInputError).hide();

        Ridex.Ajax.loadAfterClickJsSendFormFeedback(obj, form, url, data);
    };

    Ridex.Main.prototype.clickJsSendFormB2b = function () {
        let obj = $(this),
            form = obj.closest('form'),
            url = form.attr('action'),
            data = form.serialize();

        form.find(v._jsInputError).hide();

        Ridex.Ajax.loadAfterClickJsSendFormB2b(obj, form, url, data);
    };

    Ridex.Main.prototype.clickJsAvailableWorldwideCountries = function () {
        if(!$(this).hasClass('active')){
            $(v._jsAvailableWorldwideCountries).removeClass('active');
            $(this).addClass('active');
            $(v._jsAvailableWorldwideDrop).hide();
            $(this).next().css('display', 'flex');
        } else {
            $(this).removeClass('active');
            $(this).next().css('display', 'none');
        }
    };

    Ridex.Main.prototype.clickJsAboutRdxYoutube = function () {
        let urlVideo = '<iframe width="100%" height="819" src="https://www.youtube.com/embed/0jt5FFGN-Vc?autoplay=1playlist=0jt5FFGN&rel=0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>'
        $(v._JsAboutRdxYoutubeInsert).html(urlVideo);
    };

    Ridex.Main.prototype.clickJsPlusRdxYoutube = function () {
        let urlVideo = '<iframe width="100%" height="819" src="https://www.youtube.com/embed/v6JANu6UT7o?autoplay=1" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>'
        $(v._jsPlusRdxYoutubeInsert).html(urlVideo);
    };

    Ridex.Main.prototype.clickJsBaseRdxYoutube = function () {
        let urlVideo = '<iframe width="100%" height="819" src="https://www.youtube.com/embed/tnwYsLF6qOM?autoplay=1" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>'
        $(v._jsBaseRdxYoutubeInsert).html(urlVideo);
    };

    Ridex.Main.prototype.scrollAddYouTubeVideo = function () {
        let videoRdxYoutube;
        let windowTop = $(window).scrollTop();
        let windowBottom = windowTop + $(window).height();
        let targetTop = $(v._jsRidexPageVideo).offset().top;
        let targetBottom = targetTop + $(v._jsRidexPageVideo).outerHeight();
        if ($(v._jsRidexPageVideo).hasClass(Ridex.pureClassName(v._jsBaseRdxYoutubeInsert))) {
            videoRdxYoutube = 'tnwYsLF6qOM';
        } else if ($('.ridex-page__video').hasClass(Ridex.pureClassName(v._jsRemanRdxYoutubeInsert))) {
            videoRdxYoutube = 'dEfxOjI9zGE';
        } else if ($('.ridex-page__video').hasClass(Ridex.pureClassName(v._jsPlusRdxYoutubeInsert))){
            videoRdxYoutube = 'v6JANu6UT7o';
        }

        if (!v.actionDone) {
            if (targetBottom >= windowTop && targetTop <= windowBottom) {
                let urlVideo = `<iframe width="100%" height="100%" src="https://www.youtube.com/embed/${videoRdxYoutube}?autoplay=1&playlist=${videoRdxYoutube}&rel=0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>`
                $('.ridex-page__video').html(urlVideo);
                v.actionDone = true;
            }
        }
    };

    Ridex.Main.prototype.clickJsRemanRdxYoutube = function () {
        let urlVideo = '<iframe width="100%" height="819" src="https://www.youtube.com/embed/dEfxOjI9zGE?autoplay=1" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>'
        $(v._jsRemanRdxYoutubeInsert).html(urlVideo);
    };

    Ridex.Main.prototype.clickJsListingPageHeaderViewGrid = function () {
        //let viewType = 'grid',
        //    url = Ridex.buildUrl({'view': viewType});
        //$(this).find('.btn').removeClass('btn-outline').addClass('btn-black');
        //$(v._jsListingPageHeaderViewList + ' .btn').removeClass('btn-black').addClass('btn-outline');
        //$(v._jsListingContainer).addClass('listing-grid');

        Ridex.setCookie('rdx-listing-view', 'grid', 365);
        location.reload();
        //window.history.pushState({ path: url }, '', url);
    };

    Ridex.Main.prototype.clickJsListingPageHeaderViewList = function () {
        //let viewType = 'list',
        //    url = Ridex.buildUrl({'view': viewType});

        //$(this).find('.btn').removeClass('btn-outline').addClass('btn-black');
        //$(v._jsListingPageHeaderViewGrid + ' .btn').removeClass('btn-black').addClass('btn-outline');
        //$(v._jsListingContainer).removeClass('listing-grid');

        Ridex.setCookie('rdx-listing-view', 'list', 365);
        location.reload();
        //window.history.pushState({ path: url }, '', url);
    };

    Ridex.Main.prototype.clickJsPaginationLink = function (e) {
        e.preventDefault();

        let pageNr = $(this).text();
        if(!pageNr) {
            pageNr = $(this).data('page');
        }

        window.location.href = Ridex.buildUrl({'page': pageNr})
    };

    Ridex.Main.prototype.clickJsFaqItem = function (e) {
        let obj = $(this);
        if($(window).width() < 992) {
            if(!obj.hasClass('open')) {
                $(v._jsFaqItem).removeClass('open');
                obj.addClass('open');
            } else {
                obj.removeClass('open')
            }
        }
    };

    Ridex.Main.prototype.loadAnimation = function () {
        const animItems = document.querySelectorAll(v._jsAnimItems);

        if (animItems.length > 0) {
            window.addEventListener('scroll', function (){
                Ridex.Main.animOnScroll(animItems);
            });

            setTimeout(() => {
                Ridex.Main.animOnScroll(animItems);
            }, 400);
        }
    };

    Ridex.Main.prototype.clickDealersPageReviewMore = function (e) {
        e.preventDefault();
        if (!$(this).hasClass('open')) {
            $(this).addClass('open');
            $(this).closest(v._jsDealersPageReviewBody).addClass('show');
        } else {
            $(this).removeClass('open');
            $(this).closest(v._jsDealersPageReviewBody).removeClass('show');
        }
    };

    Ridex.Main.prototype.clickDropDownLanguage = function (e) {
        $(this).toggleClass('active');
        $(this).find(v._jsDropDownLanguageOption).fadeToggle() .toggleClass('active');
    };

    Ridex.Main.prototype.clickPopupVerifyButton = function () {
        let obj = $(this),
            url = obj.data('url');

        if (!window.Laravel.auth) {
            Ridex.fadeOut($(v._jsPopupVerify));
            Ridex.Ajax.loadSignInPopup();

            return false;
        }

        Ridex.Ajax.loadAfterClickPopupVerifyButton(obj, url);
    };

    Ridex.Main.prototype.clickPopupUnsubscribe = function () {
        let obj = $(this),
            url = obj.data('url');

        Ridex.Ajax.loadAfterClickPopupUnsubscribeOrSubscribeUpdate(obj, url);
    };

    Ridex.Main.prototype.clickPopupSubscribeUpdate = function () {
        let obj = $(this),
            url = obj.data('url');

        Ridex.Ajax.loadAfterClickPopupUnsubscribeOrSubscribeUpdate(obj, url);
    };

    Ridex.Main.prototype.clickPopupCookies = function () {
        Ridex.Main.showCookiesPopupAndSetAttribute();
    };

    Ridex.Main.prototype.clickCloseElement = function (e) {
        if (!$(event.target).closest(v._jsDropDownLanguage).length) {
            $(v._jsDropDownLanguageOption).hide();
            $(v._jsDropDownLanguage).removeClass('active');
        }

        if (!$(event.target).closest($('.header__catalog')).length) {
            $(v._jsHeaderCatalogOpen).removeClass('active');
            $(v._jsHeaderCatalogMenu).hide();
        }

        if (!$(event.target).closest($('._js-order-history-tooltip-icon')).length) {
            $('._js-order-history__tooltip').removeClass('show');
        }
    };

    Ridex.Main.prototype.clickDealersPageReviewItemsSlider = function () {
        $(v._jsDealersPageReviewBody).removeClass('show');
        $(v._jsDealersPageReviewMore).removeClass('open');
    };

    Ridex.Main.prototype.clickJsPopupBodyLanguage = function () {
        let url = $(this).data('url');

        if(!$(this).hasClass('active')) {
            $(v._jsPopupBodyLanguage).removeClass('active');
            $(this).addClass('active');
            $('._js-popup__body-language-btn')
                .removeClass('btn-disabled')
                .addClass('btn-yellow')
                .addClass('_js-link')
                .attr('target', '_blank')
                .data('url', url);
        } else {
            $(this).removeClass('active');
            $('._js-popup__body-language-btn')
                .removeClass('btn-yellow')
                .removeClass('_js-link')
                .addClass('btn-disabled')
                .removeAttr('target')
                .data('url', null);
        }
    };



})();

const main = new Ridex.Main();
$(window).on('load', function(){
    main.showPopupCookies();
});

$(document).ready(function () {
    $(Ridex.v._jsHeaderCart).on({
        mouseenter: main.mouseenterJsHeaderCart,
        mouseleave: main.mouseleaveJsHeaderCart
    });

    main.loadAnimation();

    if($(Ridex.v._jsRidexPageVideo).length) {
        $(window).on('scroll', main.scrollAddYouTubeVideo);
    }

    function getCountryCodeId () {
        let countryList = $('._js-countryList');
        let currentDataCode = countryList.find("[name='countryId']").val();
        let countryCode = countryList.find(`[data-id='${currentDataCode}']`).data('code');
        $('._js-vatPrefix').val(countryCode)
    }

    getCountryCodeId();

});
