function notification_last() {
    $.ajax({
        url: '/notification',
        type: 'post',
        dataType: 'json',
        data: {
            '_csrf': yii.getCsrfToken(),
            'last': 1
        },
        success: notification_response_success,
        error: notification_response_error,
        statusCode: {
            403: function () {
                // Отмена отправки запросов чтения всплывающих уведомлений
                clearInterval(notificationsInterval);
            }
          }
    });

    return false;
};

// Проверка уведомлений
let notificationsInterval = setInterval(notification_last, 3000);

function notification_popup_create(html, id) {
    // Инициализация
    let wrap = document.getElementById('notifications_popup_wrap');

    // Количество уведомлений
    let notifications_count = wrap.childElementCount;

    // Запись
    wrap.insertAdjacentHTML("beforeEnd", html);

    setTimeout(() => {
        // Анимация появления
        wrap.children[notifications_count].style.opacity = 1;
    }, 500);

    return false;
};

function notification_popup_delete(notification) {
    // Эффект затухания (статус того, что уведомление прочитано)
    notification.style.opacity = 0.75;
    notification.style.borderColor = '#c0b7d0';

    setTimeout(() => {
        // Анимация затухания
        notification.style.opacity = 0;

        setTimeout(() => {
            // Удаление
            notification.remove();
        }, 300);
    }, 1000);

    return false;
};

function notification_stream(preload = 0) {
    $.ajax({
        url: '/notification',
        type: 'post',
        dataType: 'json',
        data: {
            '_csrf': yii.getCsrfToken(),
            'stream': 1,
            'preload': preload
        },
        success: notification_response_success,
        error: notification_response_error
    });

    return false;
};

// Предзагрузка уведомлений
notification_stream(1);

function notification_response(data, status, xhr) {
    // Обработка ответов

    main_response(data, status, xhr);
};

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

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

        // Кнопка уведомлений
        if (data.button !== undefined) {
            // Инициализация
            button_old = document.getElementById('notification_button');

            // Запись
            button_old.insertAdjacentHTML("beforebegin", data.button);

            // Запись
            button_old.remove();

            // Реинициализация
            $('#notification_button').dropdown().init();
        };

        // Панель уведомлений
        if (data.panel !== undefined) {
            // Инициализация
            panel = document.getElementById('notification_button_panel');

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

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

        // Всплывающее окно
        if (data.popup !== undefined && data.popup['html'] !== undefined && data.popup['id'] !== undefined) {
            // Инициализация
            popup = document.getElementById('notification_popup');

            // Генерация
            notification_popup_create(data.popup['html'], data.popup['id']);
        };
    };

    notification_response(data, status, xhr);
};

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

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

    notification_response(data, status, xhr);
};
