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

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

        product_search_history();
    }
};

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

function search_panel_success(line, advanced, data, status) {
    if (data.search_line_window !== undefined) {
        search_line_window = document.getElementById('search_line_window');

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

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

        // Реинициализация
        reinitialization(search_line_window);
    }
    if (data.timer !== undefined) {
        // Ожидание перед повторным запросом

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

            // Запись о существовании запроса
            document.cookie = "search=processing; path=/";

            // Запрос
            setTimeout(product_search, data.timer + '000', line, advanced);
        }
    }
    if (data.search_line_window_hide === 1) {
        // Скрытие окна (потом надо переделать)
        $('#search_line').dropdown('hide');
    }
    if (data.main !== undefined) {
        main = document.getElementsByTagName('main')[0];

        // Обновление документа
        main.innerHTML = data.main;

        // Реинициализация
        reinitialization(main);
    }
    if (data.redirect !== undefined) {
        // Перенаправление
        history.pushState({}, document.title, data.redirect);
    }
    if (data._csrf !== undefined) {
        // Обновление документа
        $('meta[name=csrf-token]').prop("content", data._csrf);
    }
};

function search_panel_error(line, advanced, data, status) {
    if (data.responseJSON.search_line_window !== undefined) {
        search_line_window = document.getElementById('search_line_window');

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

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

        // Реинициализация
        reinitialization(search_line_window);
    }
    if (data.responseJSON.main !== undefined) {
        main = document.getElementsByTagName('main')[0];

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

        // Реинициализация
        reinitialization(main);
    }
    if (data.responseJSON.redirect !== undefined) {
        // Перенаправление
        history.pushState({}, document.title, data.responseJSON.redirect);
    }
    if (data.responseJSON.timer !== undefined) {
        // Ожидание перед повторным запросом

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

            // Запись о существовании запроса
            document.cookie = "search=processing; path=/";

            // Запрос
            setTimeout(product_search, data.responseJSON.timer + '000', line, advanced);
        }
    }
    if (data.responseJSON.search_line_window_hide === 1) {
        // Скрытие окна (потом надо переделать)
        $('#search_line').dropdown('hide');
    }
    if (data.responseJSON._csrf !== undefined) {
        // Обновление документа
        $('meta[name=csrf-token]').prop("content", data.responseJSON._csrf);
    }
};

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=/";
};