function product_search(text = '', advanced = 0) {
    if (text.length > 1) {
        // Проверка на длину запроса пройдена

        $.ajax({
            url: '/search',
            type: 'post',
            dataType: 'json',
            data: {
                '_csrf': yii.getCsrfToken(),
                'type': 'product',
                'advanced': advanced,
                'request': text
            },
            success: function (data, status, xhr) {
                search_panel_success(text, advanced, data, status, xhr);
            },
            error: function (data, status, xhr) {
                search_panel_error(text, advanced, data, status, xhr);
            },
            statusCode: search_panel_statusCode
        });
    } else {
        // Показ истории поиска

        product_search_history();
    };
};

function product_search_history() {
    $.ajax({
        url: '/search',
        type: 'post',
        dataType: 'json',
        data: {
            '_csrf': yii.getCsrfToken(),
            'type': 'product',
            'history': true
        },
        success: function (data, status, xhr) {
            search_panel_success('', 0, data, status, xhr);
        },
        error: function (data, status, xhr) {
            search_panel_error('', 0, data, status, xhr);
        },
        statusCode: search_panel_statusCode
    });
};

function search_panel_show(line = 'search_line', panel = 'search_line_window') {
    // Показ панели поиска

    // Активация
    document.getElementById(panel).style.display = '';

    // Открытие
    $('#' + line).dropdown('show');
};

function search_panel_hide(line = 'search_line', panel = 'search_line_window') {
    // Сокрытие панели поиска

    // Закрытие
    $('#' + line).dropdown('hide');

    // Деактивация
    document.getElementById(panel).style.display = 'none';
};

function search_panel_response(text, advanced, data, status, xhr) {
    // Отображение окна поиска
    if (data.search_line_window_show === 1) {
        search_panel_show();
    };

    // Сокрытие окна поиска
    if (data.search_line_window_hide === 1) {
        search_panel_hide();
    };

    // Таймер для повтора запроса
    if (data.timer !== undefined) {
        // Ожидание перед повторным запросом

        if (getCookie('search') === 'awaiting') {
            // На данный момент нет других запросов поиска

            if (data.panel === undefined) {
                // Запись о существовании запроса
                search_panel_statusCode_progress(setInterval(product_search, data.timer + '000', text, advanced));
            } else {
                // Удаление цикла
                clearInterval(getCookie('search'));

                // Запись о начале ожидания
                search_panel_statusCode_awaiting();
            }
        }
    } else {
        // Удаление цикла
        clearInterval(getCookie('search'));

        // Запись о начале ожидания
        search_panel_statusCode_awaiting();
    }

    if (data !== undefined) {
        // Получены данные с сервера

        // Окно поиска
        if (data.panel !== undefined) {
            // Получены данные для окна поиска

            if (getCookie('search') !== 'awaiting') {
                // Удаление цикла
                clearInterval(getCookie('search'));
            }

            // Инициализация панели
            let panel = document.getElementById('search_line_window');

            // Обновление окна результатов поиска
            panel.innerHTML = data.panel;

            // Инициализация индикатора загрузки
            let icon = document.getElementById('loading_search');

            // Удаление индикатора загрузки
            if (icon !== null) icon.remove();

            // Реинициализация
            reinitialization(panel);
        } else {
            // Не получены данные для окна поиска

            if (document.getElementById('loading_search') === null) {
                // Не найден индикатор загрузки поиска

                // Инициализация панели
                let panel = document.getElementById('search_line_window');

                // Очистка
                panel.innerHTML = null;

                // Запись индикатора загрузки
                panel.appendChild(generate('search', 'Поиск'));
            }
        }
    };

    main_response(data, status, xhr);
}

function search_panel_success(text, advanced, data, status, xhr) {
    // Обработка ответов от удавшихся запросов

    search_panel_response(text, advanced, data, status, xhr);
};

function search_panel_error(text, advanced, data, status, xhr) {
    // Обработка ответов от неудавшихся запросов

    // Инициализация
    data = data.responseJSON;

    search_panel_response(text, advanced, data, status, xhr);
};

function search_panel_statusCode() {
    return {
        200: search_panel_statusCode_awaiting,
        404: search_panel_statusCode_awaiting,
    };
};

function search_panel_statusCode_awaiting() {
    // Ожидание нового запроса
    document.cookie = "search=awaiting; path=/";
    document.body.style.cursor = "unset";
};

search_panel_statusCode_awaiting();

function search_panel_statusCode_progress(id = 0) {
    // Выполнение запроса
    document.cookie = "search=" + id + "; path=/";
    document.body.style.cursor = "progress";
};
