$(document).ready(function () {

    /**
     * returns string with all leading and trailing characters
     * eliminated.
     */
    function trim(str) {
        var s = new String(str);
        //trailing spaces
        while (s.length > 0 && isSpaceCharacter("" + s.charAt(s.length - 1))) {
            s = s.substring(0, s.length - 1);
        }
        //leading spaces
        while (s.length > 0 && isSpaceCharacter("" + s.charAt(0))) {
            s = s.substring(1);
        }
        return s
    }

    var spaces = " \t\r\n" + String.fromCharCode(160);

    function isSpaceCharacter(ch) {
        return spaces.indexOf(ch) > -1;
    }

    function isEmpty(elem) {
        return trim(elem.value).length == 0;
    }

    function isEmptyText(text) {
        return trim(text).length == 0;
    }

    function emptyIfNull(s) {
        if (s == 'null') {
            s = "";
        }
        return s;
    }

    let body = $('body');
    let overlay = $('.overlay');

    // клик по бургеру меню
    $('.burger-wrap').click(function () {
        body.toggleClass('menu-open');
        body.removeClass('contacts-open sidebar-open');
    });

    // клик по иконке контактов на моб
    $('.support-mobile').click(function () {
        body.toggleClass('contacts-open');
        body.removeClass('menu-open sidebar-open');
    });

    // клик по кнопке Прочее на моб (отображение сайдбара)
    $('.sidebar-toggle').click(function () {
        body.toggleClass('sidebar-open');
        body.removeClass('menu-open contacts-open');
    });

    // клик по пункту меню на моб
    let menuItemWrap = $('.menu > ul > li');
    let menuItem = $('.menu > ul > li > a');
    menuItem.click(function (e) {
        if ($(window).width() < 1021 || /Android|webOS|iPhone|iPad|Mac|Macintosh|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
            e.preventDefault();
        }
        if ($(this).closest('li').hasClass('active')) {
            menuItemWrap.removeClass('active');
        } else {
            menuItemWrap.removeClass('active');
            $(this).closest('li').addClass('active');
        }
    });

    // закрытие меню при нажатии на оверлей
    overlay.click(function () {
        body.removeClass('menu-open contacts-open sidebar-open');
    });

    // обновление стилей при кэшировании их браузером
    let stylePath = "css/style.css";
    let sctiptPath = "js/main.js";
    let currentDate = new Date().getTime();
    $('head link[href="' + stylePath + '"]').attr('href', stylePath + '?t=' + currentDate);
    $('head script[src="' + sctiptPath + '"]').attr('src', sctiptPath + '?t=' + currentDate);

    // клик по вкладке (таб баннеров) на главной
    let tabs = $('.index-tabs');
    $('.it-tab-1').click(function () {
        tabs.removeClass('active-2 active-3');
        tabs.addClass('active-1');
    });
    $('.it-tab-2').click(function () {
        tabs.removeClass('active-1 active-3');
        tabs.addClass('active-2');
    });
    $('.it-tab-3').click(function () {
        tabs.removeClass('active-1 active-2');
        tabs.addClass('active-3');
    });

    // автофокус на странице логина
    if ($('.aw-login').length > 0) {
        $('input[name="email"]').focus();
    }

    // вставка html (описание) каждого домена для моб. верстки на странице цен
    $('.pb-domain').prepend($('.pb-headline').html());

    // переключение между табами на странице регистрации/проверки доменов
    let domainRegTab = $('.crd-list ul li');
    domainRegTab.click(function () {
        domainRegTab.removeClass('active');
        $(this).addClass('active');
        let tabName = $(this).attr('data-toggle');
        $('.crd-tab-content').removeClass('active');
        $('#' + tabName).addClass('active');
    });

    // общий адаптив для таблиц
    let tableResponsive = $('.table-responsive');
    if (tableResponsive.length > 0) {
        tableResponsive.DataTable({
            responsive: {
                breakpoints: [
                    {name: 'tablet-p', width: 768},
                    {name: 'mobile-l', width: 600},
                    {name: 'mobile-p', width: 600}
                ]
            },
            ordering: false,
            searching: false,
            paging: false,
            info: false,
        });
    }

    // переключить чекбокс для всех зон
    $('.cir-input span').click(function () {
        let inputs = $('.cir-block-2');
        if (inputs.hasClass('all')) {
            inputs.removeClass('all');
            $('.cir-block-2 input:checkbox').prop('checked', false);
            let mainInputs = ['укр', 'com.ua', 'com', 'in.ua', 'net'];
            mainInputs.forEach(function (el) {
                $('.cir-block-2 label[itemzone="' + el + '"] input').prop('checked', true);
            })
        } else {
            inputs.addClass('all');
            $('.cir-block-2 input:checkbox').prop('checked', true);
        }
    });

    // аккордеон
    $('.iw-question').click(function () {
        $(this).parent().toggleClass('iw-open').find('.iw-answers').slideToggle();
    });

    // ещё один аккордеон (colocation)
    $('.av2-switcher').click(function () {
        $(this).toggleClass('av2-switcher-open').next().slideToggle();
    });

    let sslTabs = $('.ssl-d-tab');

    if (sslTabs.length > 0) {

        sslTabs.click(function () {
            $(this).closest('.ssl-data').find('.ssl-d-tab').removeClass('active');
            $(this).addClass('active');
            let target = $(this).attr('data-target');
            $(this).closest('.ssl-data').find('.ssl-d-content').removeClass('active');
            $(this).closest('.ssl-data').find('.ssl-d-content.' + target).addClass('active');
        });
    }

    // прокрутка вверх
    let arrowUp = $('.arrow-up');
    $(window).scroll(function () {
        if ($(this).scrollTop() > 400) {
            arrowUp.addClass('active');
        } else {
            arrowUp.removeClass('active');
        }
    });

    arrowUp.on('click', function () {
        $("html, body").animate({scrollTop: 0}, 800);
        return false;
    });

    // удаление из полей лишних символов
    $('.input-valid').on('input', function () {

        let value = $(this).val();

        if ($(this).hasClass('iv-dot-hyphen')) {
            value = value.replace(/[^a-zA-Zа-яёЁЇїІіЄєҐґ\u3040-\uFFEF\d\.\-]/, '')
        }

        if ($(this).hasClass('iv-dot-hyphen-comma')) {
            value = value.replace(/[^a-zA-Zа-яёЁЇїІіЄєҐґ\u3040-\uFFEF\d\.\-\,]/, '')
        }

        if ($(this).hasClass('iv-word-1-300')) {
            value = value.replace(/[^a-zA-Zа-яёЁЇїІіЄєҐґ\u3040-\uFFEF]/, '')
            value = value.substring(0, 10);
        }

        if ($(this).hasClass('iv-dot-hyphen-comma-space')) {
            value = value.replace(/[^a-zA-Zа-яёЁЇїІіЄєҐґ\u3040-\uFFEF\d\.\-\,\s]/, '')
        }

        if ($(this).hasClass('iv-email')) {
            value = value.replace(/[^a-zA-Zа-яёЁЇїІіЄєҐґ\u3040-\uFFEF\d\.\-\@]/, '')
        }

        $(this).val(value)
    });

    // обработка клика отправки формы к OpenAI
    if ($('.ai-form').length > 0) {
        $('.ai-form input').click(function (e) {
            let inputLength = $(this).val().length;
            if (inputLength < 1) {
                e.preventDefault();
            }
        })
    }

    // проверка при клике, что в инпуте с соответствующем атрибутом есть хотя бы один символ
    $('[target-input-validate]').click(function (e) {
        let id = $(this).attr('target-input-validate');
        let input = $('[target-input="' + id + '"]');
        input.removeClass('red-bordered');
        if(input.val().length < 1) {
            input.addClass('red-bordered');
            e.preventDefault();
        }
    });

    // замена кавычек при инпуте
    let inputsQuoteAllow = $('.quotes-replace');
    inputsQuoteAllow.on("input", function () {
        var newVal = $(this).val().replace(/[«»]/g, '"');
        $(this).val(newVal);
    });

    // скопировать по нажатию с изменением текста на 4 секунды
    let copyBtns = $('.btn-copy');
    copyBtns.click(function(){
        let currentText = $(this).text(); // текущий текст кнопки
        let textDone = $(this).attr('textDone'); // текст при успешном копировани
        let nameTarget = $(this).attr('copy'); // цель копирования
        let targetText = $('*[copy-target=' + nameTarget + ']').text(); // текст копирования
        // создания временного элемента на странице для принудительного фокуса, после копирования
        let temp = $("<textarea>");
        $("body").append(temp);
        temp.val(targetText).select();
        document.execCommand("copy");
        temp.remove(); // удаление временоого элемента
        $(this).text(textDone); // подстановка слова "Скопировано" как указано в атрибуте textDone
        // через 4 секунды обратно меняется текст
        setTimeout(function () {
            $(this).text(currentText);
        }.bind(this), 4000)
    })

    // очистка csr от лишних пробелов
    function removeCsrSpaces(str) {
        // регулярное выражение для csr
        // элементы совпадения 0 - сам csr
        // 1 - часть BEGIN
        // 2 NEW внутри части BEGIN
        // 3 тело csr
        // 4 часть END
        // 5 NEW внутри части END
        let regex = /(-----BEGIN (NEW\s)?CERTIFICATE REQUEST-----)([\S\s]+)(-----END (NEW\s)?CERTIFICATE REQUEST-----)/gi;
        let match = regex.exec(str);

        // если совпадения найдены
        if(match) {
            let updatedBody = match[3].replace(/\s/g, ''); // удаление всех пробелов внутри тела csr
            // конкатенация начало csr, тела без пробелов и конца
            return match[1] + '\n' + updatedBody + '\n' + match[4];
        } else return false;
    }

    removeCsrSpaces();

    // при вводе данных в поле для проверки доменов
    $('.domain-input').on('input', function(){
        let input = $(this).val();
        input = trim(input);
        input = input.replaceAll(/[\s,!?/\\"‘'~`#$%^&*()_+=@\]]|^((http)s?:)/gi, '');
        $(this).val(input);
    });

});

function JSalert(title, text, type) {
    swal(title, text, type);
}

// добавить уведомление об ошибки в правый верхний угол
function addAlert(text) {
    let errors = $('.errors');
    // если блок с ошибкой уже есть
    if(errors.length > 0) {
        // добавление ошибки в конец списка
        errors.append('<div class="error-wrap">' +
            '<p>' + text + '</p>' +
            '<span class="error-wrap-close"></span>' +
            '</div>');
    } else {
        // создание блока с ошибками и добавление первой ошибки
        $('body').append('<div class="errors">' +
            '<div class="error-wrap">' +
            '<p>' + text + '</p>' +
            '<span class="error-wrap-close"></span>' +
            '</div></div>');
    }
    let close = $('.error-wrap-close');
    // удаление всех остальных обработчиков во избежание дубликатов
    close.off('click');
    // после создания блока с ошибкой необходим обработчик закрытия ошибки
    close.click(function () {
        // если ошибка всего одна
        if($('.error-wrap').length === 1) {
            // удаление всего блока с ошибками
            $('.errors').remove();
        } else {
            // иначе удаление только текущей ошибки
            $(this).closest('.error-wrap').remove();
        }
    });
}