function getCookie(name) {
    var cookieValue = null;
    if (document.cookie && document.cookie !== '') {
        var cookies = document.cookie.split(';');
        for (var i = 0; i < cookies.length; i++) {
            var cookie = jQuery.trim(cookies[i]);
            // Does this cookie string begin with the name we want?
            if (cookie.substring(0, name.length + 1) === (name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
}

function setCookie(name, value, options) {
    options = options || {};

    var expires = options.expires;

    if (typeof expires == "number" && expires) {
        var d = new Date();
        d.setTime(d.getTime() + expires * 1000);
        expires = options.expires = d;
    }
    if (expires && expires.toUTCString) {
        options.expires = expires.toUTCString();
    }

    value = encodeURIComponent(value);

    var updatedCookie = name + "=" + value;

    for (var propName in options) {
        updatedCookie += "; " + propName;
        var propValue = options[propName];
        if (propValue !== true) {
            updatedCookie += "=" + propValue;
        }
    }

    document.cookie = updatedCookie;
}

function set_session_param(param, value, callback) {
    if (param!=undefined) {
        $.post(
            '/api/set_session_param/',
            {param: param, value: value},
            function(r){if(callback!=undefined) {callback();}},
            'json'
        );
    }
}

function whichAnimationEvent() {
    var t,
        el = document.createElement("fakeelement");

    var animations = {
        "animation"      : "animationend",
        "OAnimation"     : "oAnimationEnd",
        "MozAnimation"   : "animationend",
        "WebkitAnimation": "webkitAnimationEnd"
    }

    for (t in animations){
        if (el.style[t] !== undefined){
            return animations[t];
        }
    }
}
var animationEvent = whichAnimationEvent();

// (123456789.12345).formatMoney(2, '.', ',');
Number.prototype.formatMoney = function(c, d, t){
    var n = this,
        c = isNaN(c = Math.abs(c)) ? 0 : c,
        d = d == undefined ? "," : d,
        t = t == undefined ? " " : t,
        s = n < 0 ? "-" : "",
        i = String(parseInt(n = Math.abs(Number(n) || 0).toFixed(c))),
        j = (j = i.length) > 3 ? j % 3 : 0;
    if (i.length < 5) {
        return s + i;
    }
    return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
};
var RUB_SYMB = '&nbsp;₽';

///////////////////////////////////////
// CSRF
///////////////////////////////////////
var csrftoken = getCookie('_merch_csrf');
function csrfSafeMethod(method) {
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
    beforeSend: function(xhr, settings) {
        if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
            xhr.setRequestHeader("X-CSRFToken", csrftoken);
        }
    }
});

ACCEPT_PRIVACY_MISSING_TEXT = 'К сожалению, без согласия на обработку персональных данных, мы не сможем вам перезвонить.';

///////////////////////////////////////
// Cart functions
///////////////////////////////////////
var cart = {
    add: function (pk, quantity) {
        quantity = quantity || 1
        return $.post(URLS.addItem, {pk: pk, quantity: quantity}, 'json')
    },
    remove: function (itemPK) {
        return $.post(URLS.removeItem, {pk: itemPK}, 'json')
    },
    changeQuantity: function (pk, quantity) {
        return $.post(URLS.changeQuantity, {pk: pk, quantity: quantity}, 'json')
    },
    empty: function () {
        $.post(URLS.emptyCart, 'json')
    },
    updateWidget: function() {
        $('.cart-widget').load('/cart/cart-widget/');
    },
};

function send_feedback(email, source, phone, name, comment, priv, $loader, callback) {
    if(!priv){
        $.alert({
            title:'',
            useBootstrap:false,
            boxWidth:'300px',
            theme:'osn',
            animateFromElement:false,
            content:ACCEPT_PRIVACY_MISSING_TEXT,
            buttons: {
                'ok': {
                    text: 'Хорошо',
                    btnClass: 'btn-center-muted',
                }
            }
        });
        if ($loader != undefined) {
            $loader.remove();
        }
        return false;
    }
    if(!phone){
        $.alert({
            title:'',
            useBootstrap:false,
            boxWidth:'300px',
            theme:'osn',
            animateFromElement:false,
            content:'Укажите телефон',
            buttons: {
                'ok': {
                    text: 'Хорошо',
                    btnClass: 'btn-center-muted',
                }
            }
        });
        if ($loader != undefined) {
            $loader.remove();
        }
        return false;
    } else {
        $.post(
            '/api/feedback/',
            {
                name:name,
                phone:phone,
                comment:comment,
                email:email,
                source:source,
                calltouch_sid:window.call_value,
            }
        ).done(function() {
            $.alert({
                title:'Спасибо!',
                titleClass:'sm',
                useBootstrap:false,
                boxWidth:'300px',
                theme:'osn',
                animateFromElement:false,
                content:'Скоро с вами свяжутся.',
                buttons: {
                    'ok': {
                        text: 'Закрыть',
                        btnClass: 'btn-center-muted',
                    }
                }
            });
            if (callback != undefined) {
                callback();
            }
            if ($loader != undefined) {
                $loader.remove();
            }
        });
    }
}

(function() {
    ///////////////////////////////////////
    // Tabs functions
    ///////////////////////////////////////
    $('ul.tabs li, a.tab-link').click(function() {
        var tab_id = $(this).attr('data-tab');
        $('ul.tabs li').removeClass('current');
        $('.tab-content').removeClass('current');
        $('ul.tabs li[data-tab="'+tab_id +'"]').addClass('current');
        $("#"+tab_id).addClass('current');
    });
    
    /////////////////////////////////
    // Email copy-select events
    $(".email-copy-event").parent().mousedown(function() {
      if (window.yaCounter47159073 != undefined) { yaCounter47159073.reachGoal('EMAIL_SELECT'); }
      return true;
    });
    $(".email-copy-event").click(function() {
      if (window.yaCounter47159073 != undefined) { yaCounter47159073.reachGoal('EMAIL_CLICK'); }
      return true;  
    });
    $(".email-copy-event").bind('copy', function() {
      if (window.yaCounter47159073 != undefined) { yaCounter47159073.reachGoal('EMAIL_COPY'); }
      return true;  
    });
    
    /////////////////////////////////
    // Call request
    $('.request-call').click(function(e) {
        e.preventDefault();
        var box_width = '413px';
        var window_width = $(window).width();
        if (window_width < 1000) {
            box_width='100%';
        }
        $.confirm({
            title: '<span class="emoji bhr lg"></span>&nbsp;Обратный звонок',
            backgroundDismiss: true,
            theme:'osn big',
            useBootstrap: false,
            draggable: false,
            content: '' +
            '<form action="" class="basic-form">' +
            '<div class="group"><input type="text" placeholder="Ваше имя" class="name form-control" required /></div>' +
            '<div class="group"><input type="text" placeholder="Номер телефона" class="phone form-control" required /></div>' +
            '<div class="group flexgroup"><input type="checkbox" class="accept form-control" checked required id="AcceptPrivacy" /><label class="muted" for="AcceptPrivacy">Я&nbsp;согласен на&nbsp;обработку своих персональных данных. <a href="/privacy-policy/">Политика конфиденциальности</a></label></div>' +
            '</form>',
            boxWidth: box_width,
            closeIcon: true,
            closeIconClass: 'close-icon',
            buttons: {
                formSubmit: {
                    text: 'Заказать звонок',
                    btnClass: 'btn-red btn-center',
                    action: function () {
                        var phone = this.$content.find('.phone').val(),
                            name = this.$content.find('.name').val(),
                            priv = this.$content.find('#AcceptPrivacy').prop('checked');
                        if (!priv) {
                            $.alert({
                                title:'',
                                useBootstrap:false,
                                boxWidth:'300px',
                                theme:'osn',
                                animateFromElement:false,
                                content:ACCEPT_PRIVACY_MISSING_TEXT,
                                buttons: {
                                    'ok': {
                                        text: 'Хорошо',
                                        btnClass: 'btn-center-muted',
                                    }
                                }
                            });
                            return false;
                        }
                        if(!phone){
                            $.alert({
                                title:'',
                                useBootstrap:false,
                                boxWidth:'300px',
                                theme:'osn',
                                animateFromElement:false,
                                content:'Укажите телефон',
                                buttons: {
                                    'ok': {
                                        text: 'Хорошо',
                                        btnClass: 'btn-center-muted',
                                    }
                                }
                            });
                            return false;
                        } else {
                            var postdata = {
                                name:name,
                                phone:phone,
                                calltouch_sid:window.call_value,
                            };
                            $.post('/api/request_call/', postdata).done(function() {
                                if (window.yaCounter47159073 != undefined) { yaCounter47159073.reachGoal('zakazzvonka'); }
                                if (window.gtag != undefined) { gtag('event','click', {'event_category':'form','event_label':'zakazzvonka'}); }
                                $.alert({
                                    title:'Спасибо!',
                                    titleClass:'sm',
                                    useBootstrap:false,
                                    animateFromElement:false,
                                    boxWidth:'300px',
                                    theme:'osn',
                                    content:'Вам скоро перезвонят.',
                                    buttons: {
                                        'ok': {
                                            text: 'Закрыть',
                                            btnClass: 'btn-center-muted',
                                        }
                                    }
                                })
                            });
                        }
                    }
                },
            },
            onContentReady: function () {
                // bind to events
                var jc = this;
                this.$content.find('form').on('submit', function (e) {
                    // if the user submits the form by pressing enter in the field.
                    e.preventDefault();
                    jc.$$formSubmit.trigger('click'); // reference the button and click it
                });
            }
        });
    });

    /////////////////////////////////
    // QUASI-like
    $(document).on('click', '.like', function(e) {
        e.preventDefault();
        $.post('/like/', {'subject': $(this).data('subject')}, function(response) {

        })
    });

    /////////////////////////////////
    // OVERLAY MENU
    var triggerBttn = $('#trigger-overlay'),
    overlay = $('div.overlay'),
    closeBttn = overlay.find('.close');
    function toggleOverlay() {
        if(overlay.hasClass('open')) {
            overlay.removeClass('open');
            $('html, body').removeClass('noscroll');
        }
        else if(!overlay.hasClass('close')) {
            overlay.addClass('open');
            $('html, body').addClass('noscroll');
        }
    }

    triggerBttn.on('click', toggleOverlay);
    closeBttn.on('click', toggleOverlay);

    // $('.overlay-big .root-item > a').hover(
    //     function() {
    //         var $parent_li = $(this).parent();
    //         $('.overlay-big .children').hide();
    //         $('.root-item').removeClass('active');
    //         $parent_li.addClass('active');
    //         $parent_li.find('.children').show();
    //     },
    //     function() {
    //
    //     }
    // )

    var $sidebar_overlay = $('.sidebar-overlay');
    var $sidebar_overlay_sidebar = $('.sidebar-overlay .sidebar');
    var $ham = $('.ham');
    var toggle_sidebar = function() {
        $ham.toggleClass('close');
        const targetElement = $sidebar_overlay_sidebar[0];
        if ($sidebar_overlay.hasClass('open')) {
            $sidebar_overlay.removeClass('open');
            $sidebar_overlay.addClass('closed');
            bodyScrollLock.clearAllBodyScrollLocks();
        } else {
            $sidebar_overlay.removeClass('closed');
            $sidebar_overlay.addClass('open');
            bodyScrollLock.disableBodyScroll(targetElement);
        }
    }
    $('.sidebar-toggle').click(toggle_sidebar);
    $sidebar_overlay.click(function(e) {
        var container = $(this).find('.sidebar').first();
        var $ham = $(this).find('.ham').first()
        if ((!container.is(e.target) && container.has(e.target).length === 0) &&
            (!$ham.is(e.target) && $ham.has(e.target).length === 0)) {
            toggle_sidebar();
        }
    });
    var $search = $('._search');
    var toggle_search = function(e) {
        if ($search.hasClass('open')) {
            $search.removeClass('open').empty();
        } else {
            var $form = $('<form action="/search/"><div class="form-wrapper"><input type="text" name="q" value="" placeholder="Артикул или название"><button class="btn" type="submit">Найти</button></div></form>');
            $search.append($form);
            $search.addClass('open');
        }
    };
    $('.search-toggle').click(toggle_search);

    document.onkeydown = function(evt) {
        evt = evt || window.event;
        var isEscape = false;
        if ("key" in evt) {
            isEscape = (evt.key == "Escape" || evt.key == "Esc");
        } else {
            isEscape = (evt.keyCode == 27);
        }
        if (isEscape) {
            overlay.removeClass('open');
            $sidebar_overlay.removeClass('open');
            $ham.removeClass('close');
            $('html, body').removeClass('noscroll');
            bodyScrollLock.disableBodyScroll(targetElement);
        }
    };

    $(document).on('click', '.add-to-cart', function(e) {
        e.preventDefault();
        var self = $(this);
        if (self.hasClass('disabled')) {
            return;
        }
        //if (self.hasClass('in-cart')) {
        //  window.location.href = '/personal/cart/';
        //  return;
        //}
        var pid = self.data('pid');
        var q = self.parent().find('input').val();
        q = q || 1;

        var box_width = '860px';
        var window_width = $(window).width();
        if (window_width < 1000) {
            box_width='100%';
        }

        cart.add(pid, q).done(
            function() {
                $.confirm({
                    title: '<span class="emoji thumbsup"></span> Товар добавлен',
                    useBootstrap: false,
                    boxWidth: box_width,
                    draggable: false,
                    titleClass:'sm',
                    content: 'URL:/cart/cart-popup/',
                    backgroundDismiss: 'continue_shopping',
                    closeIcon: true,
                    closeIconClass: 'close-icon',
                    columnClass: 'cart-popup-wrapper',
                    theme:'osn',
                    onContentReady: function () {
                        this.setContentPrepend('<span></span>'); // safari bugfix

                        // update cart widget in header
                        cart.updateWidget();

                        //self.addClass('in-cart');
                        if (self.hasClass('detail')) {
                            self.text('В корзине');
                        }
                    },
                    onDestroy: function() {
                        // bug workaround:
                        $('body').removeClass('jconfirm-no-scroll-'+this._id);
                        // maybe i've misconfigured jconfirm instance,
                        // but it did not return scrolling to 'body' on modal close...
                        // It happens only if ajax response html contains images
                    },
                    buttons: {
                        goto_cart: {
                            text: 'Перейти в корзину',
                            btnClass: 'btn-right btn-red',
                            keys: ['enter'],
                            action: function(){
                                window.location.href = '/cart/';
                            }
                        },
                        continue_shopping: {
                            text: 'Продолжить покупки',
                            btnClass: 'btn-left btn-outline',
                            keys: ['esc'],
                            action: function() {}
                        },
                    }
                });
            }
        );
    });

    $(document).on('click', '.remove-from-cart', function(e) {
        e.preventDefault();
        var self = $(this);
        var pid = self.data('pid');
        var box_width = '30%';
        var window_width = $(window).width();
        if (window_width < 1000) {
            box_width='300px';
        }

        $.confirm({
            title: '',
            content: 'Подтверждаете удаление из корзины?',
            useBootstrap: false,
            theme:'osn',
            draggable: false,
            boxWidth: box_width,
            backgroundDismiss: 'cancel',
            buttons: {
                confirm: {
                    btnClass: 'btn-left btn-outline btn-sm',
                    text: 'Да',
                    keys: ['enter'],
                    action: function () {
                        cart.remove(pid);
                        self.parent().parent().slideUp('slow', function() {
                            if (!self.hasClass('is-popup')) {
                                window.location.reload();
                            }
                        });
                    },
                },
                cancel: {
                    text: 'Нет',
                    btnClass: 'btn-right btn-red btn-sm',
                    keys: ['esc'],
                    action: function () {
                        // console.log('Canceled!');
                    }
                }
            }
        });
    });

    // MAKE TIMER!
    function update_cart() {
        var cart_data = {};
        var total_cart_sum = 0;
        $('.q').each(function(i, item) {
            var quantity = parseInt($(this).val());
            var price = parseFloat($(this).data('price'));
            cart_data[$(this).data('pid')] = quantity || 1;
            total_cart_sum += quantity * price;
        });
        $('.cart-popup .total .cart-sum').html(total_cart_sum.formatMoney() + RUB_SYMB);
        // $.ajax({
        //     url: '/cart/update/',
        //     type: 'POST',
        //     dataType: 'json',
        //     data: cart_data,
        //     success: function(response){
        //         $('.cart-sum').text(response.cart_sum.formatMoney());
        //         $('.cart-info').load('/personal/cartwidget/');
        //         for (pid in response['cart']) {
        //             $('.value'+pid).text(response['cart'][pid]['sum'].formatMoney());
        //         }
        //         window.location.reload();
        //         update_nextstep_layer();
        //     }
        // });
    }
    var incr_cart_item = function(e){
        var self = $(this);
        var $input = self.parent().find('input');
        var pid = $input.data('pid');
        var $sum = $('.value' + pid);
        var price = $input.data('price');
        var new_q = parseInt($input.val()) + 1;
        new_sum = price * new_q;
        $sum.html(new_sum.formatMoney() + RUB_SYMB);
        $input.val(new_q);
        cart.changeQuantity(pid, new_q);
        update_cart();
    }

    var decr_cart_item = function(e){
        var self = $(this);
        var $input = self.parent().find('input');
        var pid = $input.data('pid');
        var $sum = $('.value' + pid);
        var price = $input.data('price');
        if ($input.val() > 1) {
            var new_q = parseInt($input.val()) - 1;
            new_sum = price * new_q;
            $input.val(new_q);
            $sum.html(new_sum.formatMoney() + RUB_SYMB);
            $input.val(new_q);
            cart.changeQuantity(pid, new_q);
        }
        update_cart();
    }
    $(document).on('click', '.q-control .incr', incr_cart_item);
    $(document).on('click', '.q-control .decr', decr_cart_item);
    $('.q-control input').change(function() {
        var $input = $(this);
        var pid = $input.data('pid');
        var $sum = $('.value' + pid);
        var new_q = $input.val();
        var price = $input.data('price');
        if (new_q >= 1) {
            new_sum = price * new_q;
            $sum.html(new_sum.formatMoney() + RUB_SYMB);
            $input.val(new_q);
            cart.changeQuantity(pid, new_q);
            update_cart();
        }
    });

    $(document).on('click', '.show-more', function(e) {
        e.preventDefault();
        var $self = $(this);
        $self.text('Думаю...');
        var href = $self.attr('href');
        $self.attr('href', '#');
        // $self.append('<span class="loader"></span>');
        $.ajax({
            url:href,
            type:'GET',
        }).done(function(r) {
            // console.log(r);
            $('._products .pagination').remove();
            $('._products').append(r);
        });
    });

    $('.apply-form').click(function(e) {
        e.preventDefault();
        var $self = $(this);
        var priv = true;
        var source = $self.data('source');
        var fields = $self.data('fields');
        var form_fields = [
            '<div class="group"><input type="text" placeholder="Ваше имя" class="name form-control" required /></div>',
            '<div class="group"><input type="text" placeholder="Номер телефона" class="phone form-control" required /></div>',
        ]
        if (fields != undefined) {
            fields = fields.split(',');
            for (var i = 0; i<fields.length; i++) {
                if (fields[i] == 'email') {
                    form_fields.push('<div class="group"><input type="text" placeholder="E-mail" class="email form-control" /></div>');
                }
                if (fields[i] == 'comment') {
                    form_fields.push('<div class="group"><input type="text" placeholder="Комментарий" class="comment form-control" /></div>');
                }
            }
        }
        var formtitle = $self.data('formtitle');
        if (formtitle == undefined) {
            return false;
        }
        var box_width = '413px';
        var window_width = $(window).width();
        if (window_width < 1000) {
            box_width='100%';
        }
        $.confirm({
            title: '<span class="emoji bhr lg"></span>&nbsp;' + formtitle,
            backgroundDismiss: true,
            theme:'osn big',
            useBootstrap: false,
            draggable: false,
            content: '' +
            '<form action="" class="basic-form">' + form_fields.join(' ') + '</form>',
            boxWidth: box_width,
            closeIcon: true,
            closeIconClass: 'close-icon',
            buttons: {
                formSubmit: {
                    text: 'Отправить заявку',
                    btnClass: 'btn-red btn-center',
                    action: function () {
                        var phone = this.$content.find('.phone').val();
                        var name = this.$content.find('.name').val();
                        var comment = this.$content.find('.comment').val();
                        var email = this.$content.find('.email').val();
                        return send_feedback(email, source, phone, name, comment, priv);
                    }
                },
            },
            onContentReady: function () {
                // bind to events
                var jc = this;
                this.$content.find('form').on('submit', function (e) {
                    // if the user submits the form by pressing enter in the field.
                    e.preventDefault();
                    jc.$$formSubmit.trigger('click'); // reference the button and click it
                });
            }
        });
    });
})();
