$(document).ready(function () {

    // переключение типа поиска один домен / множество
    let searchTabs = $('.sdw-toggle-search button');
    let btnSearchSingle = $('.sdw-btn-single');
    let btnSearchArray = $('.sdw-btn-array, .sdw-btn-certain');
    let searchMain = $('.sdw-main');
    btnSearchSingle.click(function (e) {
        e.preventDefault();
        searchTabs.removeClass('active');
        $(this).addClass('active');
        searchMain.addClass('sdw-inputs-single');
    });
    btnSearchArray.click(function (e) {
        e.preventDefault();
        searchTabs.removeClass('active');
        $(this).addClass('active');
        searchMain.removeClass('sdw-inputs-single');
    });

    // отображение подробного поиска
    let searchZonesSwitcher = $('.sdw-zones-switcher p');
    searchZonesSwitcher.click(function () {
        $(this).closest('.sdw-zones-switcher').toggleClass('active');
        $('.sdw-zones-wrap').toggleClass('active');
    });

    // открытие списка категорий зон
    let catSwitchChecker = $('.sdw-cat-switch-checker');
    let catList = $('.sdw-cat-list');
    catSwitchChecker.click(function () {
        $(this).toggleClass('active');
        catList.toggleClass('active');
    });

    // закрытие списка категорий зон
    let listSwitchersWrap = document.querySelector('.sdw-categories > div');
    document.body.addEventListener('click', function (e) {
        if (!listSwitchersWrap.contains(e.target)) {
            if (catList.hasClass('active')) {
                catList.removeClass('active');
                catSwitchChecker.removeClass('active');
            }
        }
    });

    // отображение групп зон
    let listSwitchers = $('.sdw-cat-list p');
    listSwitchers.click(function () {
        // если включённый список всего один и он активный - выход из функции, т.к. последний нельзя отключать
        let activeCount = $('.sdw-cat-list p.active').length;
        if (activeCount === 1 && $(this).hasClass('active')) {
            return;
        }
        let currentHref = $(this).attr('data-href');
        if ($(this).hasClass('active')) {
            $(this).toggleClass('active');
            $('div[data-target="' + currentHref + '"]').removeClass('active');
            $('div[data-target="' + currentHref + '"] input').prop('checked', false);
            buildViewZones();
        } else {
            $('div[data-target="' + currentHref + '"]').addClass('active');
            $(this).toggleClass('active');
        }
    });

    let listZonesWrap = $('.sdw-zones-single');
    let zonesView = $('.sdw-zones-view');

    function buildViewZones() {
        zonesView.empty();
        listSwitchers.each(function () {
            let currentHref = $(this).attr('data-href');
            if ($(this).hasClass('active')) {
                $('div[data-target="' + currentHref + '"]').addClass('active');
            }
        });
        listZonesWrap.each(function () {
            let listZonesAll = $(this).find('input');
            let listZonesChecked = $(this).find('input:checkbox:checked');
            let listZones = $(this).find('input[type="checkbox"]');
            // если количество включённых инпутов = количеству инпутов всего
            if (listZonesAll.length === listZonesChecked.length) {
                zonesView.append('<span zone-targets="' +
                    $(this).attr('data-target') +
                    '" class="sdw-zone-view">' +
                    $(this).find('.sdw-zones-list-subtitle').text() + '<span class="sdw-zone-close"></span></span>');
            } else {
                listZones.each(function () {
                    if ($(this).prop('checked')) {
                        zonesView.append('<span zone-target="' + $(this).val() + '" class="sdw-zone-view">.' + $(this).val() + '<span class="sdw-zone-close"></span></span>')
                    }
                });
            }
        });

        let totalInputs = $('.sdw-zones-list').find('input:checkbox:checked');
        if (totalInputs.length === 0) {
            let zone = $('.sdw-zones-list .sdw-zones-single.active')[0];
            zone = $(zone).find('label:nth-of-type(1) input');
            zone.prop('checked', true);
            let zoneVal = zone.val();
            zonesView.append('<span zone-target="' + zoneVal + '" class="sdw-zone-view">.' + zoneVal + '<span class="sdw-zone-close"></span></span>')
        }

        // объявление клика для новых зон в области "Выбор зоны"
        let viewCheckbox = $('.sdw-zone-view');
        viewCheckbox.each(function () {
            $(this).click(function () {
                let target = $(this).attr('zone-target');
                let targets = $(this).attr('zone-targets');
                // если отключить нужно не список
                if (typeof targets === "undefined") {
                    // отключение определённого инпута
                    $('.sdw-zones-list input[value="' + target + '"]').prop('checked', false);
                } else { // иначе отключаются все инпуты
                    $('.sdw-zones-single[data-target="' + targets + '"] input').prop('checked', false);
                }
                buildViewZones();
            });
        });
    }

    // при клике на чекбокс перестройка отображения включённых чекбоксов с области "Выбор зоны"
    let singleCheckbox = $('.sdw-zones-single input');
    singleCheckbox.change(function () {
        buildViewZones();
    });

    // удалить все выбранные инпуты
    $('.sdw-zones-selected-clear').click(function () {
        $('.sdw-zones-list input').prop('checked', false);
        buildViewZones();
    });

    // установить все инпуты в отмеченные из отображаемых списков
    let checkToggle = true; // переключатель отображения всех зон и последних выбранных
    let checkSelected = []; // временный массив с включёнными инпутами
    let activeInputs;
    $('.sdw-check-all').click(function () {
        if(checkToggle) { // если нужно включить все зоны
            activeInputs = $('.sdw-zones-single.active input');
            checkSelected = []; // обнуление временного массива
            activeInputs.each(function(){ // сохранение всех текущих отмеченных зон
                if($(this).prop('checked')) checkSelected.push($(this).val());
            })
            activeInputs.prop('checked', true); // добавление всем инпутам checked
            checkToggle = !checkToggle; // смена состояния переключателя
        } else { // иначе нужно отбразить ранее выбранные
            activeInputs = $('.sdw-zones-single.active input');
            activeInputs.prop('checked', false); // выключение всех инпутов
            checkSelected.forEach(function(item) {
                let current = $( 'input[value="' + item + '"]');
                if(current.closest('.sdw-zones-single').hasClass('active')) current.prop('checked', true)
            });
            checkToggle = !checkToggle; // смена состояния переключателя
        }
        buildViewZones();
    });

    // первичная инициализация построения контента с чекбоксами
    buildViewZones();

    // выбрать все домены для покупки
    let checkboxCheckAll = $('.rdr-check-all');
    checkboxCheckAll.click(function () {
        let searchResultInputs = $('.rdr-line input');
        if ($(this).hasClass('active')) {
            // отключение всех чекбоксов, кроме первого
            disabledAll();
            $(this).toggleClass('active');
        } else {
            // включение всех чекбоксов
            searchResultInputs.each(function () {
                $(this).prop('checked', true);
            });
            $(this).toggleClass('active');
        }

        if($('#result').length > 0) {
            let activeButton = false; // по умолчанию кнопка отключена
            // перебор всех инпутов
            $('#result .checkbox input').each(function(){
                // если хоть один инпут отмечен - значит и кнопка будет активной
                if($(this).prop('checked')) {
                    activeButton = true;
                }
            })
    
            // если после проверки всех инпутов был хотя бы один отмеченный чекбокс
            // удаляется класс btn-disavle
            let submitToCart = $('#cont_but');
            if(activeButton) {
                submitToCart.removeClass('btn-disable');
            } else { // иначе этот класс добавляется
                submitToCart.addClass('btn-disable');
            }
        }
    });

    // отключение всех чекбоксов, кроме первого
    function disabledAll() {
        // отключение всех чекбоксов
        let searchResultInputs = $('.rdr-line input');
        searchResultInputs.each(function () {
            $(this).prop('checked', false);
        });
        // включение только первого
        let zone = $('.reg-domains-result .rdr-line')[0];
        zone = $(zone).find('label input');
        zone.prop('checked', true);
    }

    function checkAllLoad() {
        let checkAll = true;
        $('.reg-domains-result .rdr-line .checkbox input').each(function (){
            if($(this).prop('checked') !== false) {
                checkAll = false;
            }
        });
        if(checkAll) {
            checkboxCheckAll.addClass('active');
        }
    }
    checkAllLoad();

    // // обработка по клику зон при регистрации для отображения чекбокса "выбрать все"
    // $('.rdr-line input').click(function () {
    //     let listZonesChecked = $('.reg-domains-result').find('input:checkbox:checked');
    //     let checkAll = $('.rdr-check-all');
    //     // если количество включённых инпутов = количеству инпутов всего
    //     if ($(this).length === listZonesChecked.length) {
    //         checkAll.addClass('active');
    //     } else {
    //         checkAll.removeClass('active');
    //         // если был отключён последний чекбокс
    //     }
    //
    //     // если отключён был последний чекбокс
    //     if (listZonesChecked.length === 0) {
    //         // отключение всех чекбоксов, кроме первого
    //         disabledAll();
    //     }
    // })

    // отключение всех чекбоксов, кроме первого по клику на корзину
    $('.rdr-zones-selected-clear').click(function () {
        checkboxCheckAll.removeClass('active');
        // отключение всех чекбоксов, кроме первого
        disabledAll();
    });

    // отображение только не занятых доменов
    $('.rdr-zones-only-available').click(function () {
        $(this).toggleClass('active');
        $('.rdr-not-available').closest('.rdr-line').toggleClass('hide');
    });

    // сортировка по цене
    let result = $('#result');
    $('.rdr-zones-sort-by-price').click(function () {
        if($(this).hasClass('asc')) {
            $(this).removeClass('asc').addClass('desc');
            result.removeClass('asc').addClass('desc');
            let prices = $('.rdr-line p[price]');
            let pricesSort = [];
            prices.each(function(index){
                pricesSort.push({index: index, price: $(this).attr('price')});
            })
            pricesSort.sort(function(a,b) {
                return a.price - b.price;
            });
            $.each(pricesSort, function(index, value){
                let order;
                if(value.price > 0) {
                    order = index;
                } else {
                    order = 0;
                }
                prices.eq(value.index).closest('.rdr-line').css("order", order);
            });
        } else if ($(this).hasClass('desc')) {
            $(this).removeClass('desc');
            result.removeClass('desc');
        } else {
            $(this).addClass('asc');
            result.addClass('asc');
            let prices = $('.rdr-line p[price]');
            let pricesSort = [];
            prices.each(function(index){
                pricesSort.push({index: index, price: $(this).attr('price')});
            })
            pricesSort.sort(function(a,b) {
                return a.price - b.price;
            });
            $.each(pricesSort, function(index, value){
                let order;
                if(value.price > 0) {
                    order = index;
                } else {
                    order = 9999;
                }
                prices.eq(value.index).closest('.rdr-line').css("order", order);
            });
        }
    });

});