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(text = '', advanced = 0) {
    $.ajax({
        url: '/search',
        type: 'post',
        dataType: 'json',
        data: {
            '_csrf': yii.getCsrfToken(),
            'type': 'product',
            'history': true
        },
        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
    });
};

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 !== undefined) {
        // Получены данные с сервера

        // Окно поиска
        if (data.panel !== undefined) {
            panel = document.getElementById('search_line_window');

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

            // Отображение окна (потом надо переделать)
            $('#search_line').dropdown('show');

            // Реинициализация
            reinitialization(panel);
        };

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

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

                // Запись о существовании запроса
                search_panel_statusCode_progress();

                // Запрос
                setTimeout(product_search, data.timer + '000', text, advanced);
            };
        };

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

    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) {
    // Обработка ответов от неудавшихся запросов

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

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

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

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

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