#include sakuya.js

var Misuzu = function() {
    Sakuya.trackElements($qa('time'));
    hljs.initHighlighting();

    MszEmbed.init(location.protocol + '//uiharu.' + location.host);

    Misuzu.initQuickSubmit(); // only used by the forum posting form
    Misuzu.Forum.Editor.init();
    Misuzu.Events.dispatch();
    Misuzu.initLoginPage();

    MszEmbed.handle($qa('.js-msz-embed-media'));
};

#include utils.js
#include embed.js
#include forum/editor.js
#include events/events.js

Misuzu.showMessageBox = function(text, title, buttons) {
    if($q('.messagebox'))
        return false;

    text = text || '';
    title = title || '';
    buttons = buttons || [];

    var element = document.createElement('div');
    element.className = 'messagebox';

    var container = element.appendChild(document.createElement('div'));
    container.className = 'container messagebox__container';

    var titleElement = container.appendChild(document.createElement('div')),
        titleBackground = titleElement.appendChild(document.createElement('div')),
        titleText = titleElement.appendChild(document.createElement('div'));

    titleElement.className = 'container__title';
    titleBackground.className = 'container__title__background';
    titleText.className = 'container__title__text';
    titleText.textContent = title || 'Information';

    var textElement = container.appendChild(document.createElement('div'));
    textElement.className = 'container__content';
    textElement.textContent = text;

    var buttonsContainer = container.appendChild(document.createElement('div'));
    buttonsContainer.className = 'messagebox__buttons';

    var firstButton = null;

    if(buttons.length < 1) {
        firstButton = buttonsContainer.appendChild(document.createElement('button'));
        firstButton.className = 'input__button';
        firstButton.textContent = 'OK';
        firstButton.addEventListener('click', function() { element.remove(); });
    } else {
        for(var i = 0; i < buttons.length; i++) {
            var button = buttonsContainer.appendChild(document.createElement('button'));
            button.className = 'input__button';
            button.textContent = buttons[i].text;
            button.addEventListener('click', function() {
                element.remove();
                buttons[i].callback();
            });

            if(firstButton === null)
                firstButton = button;
        }
    }

    document.body.appendChild(element);
    firstButton.focus();
    return true;
};
Misuzu.initLoginPage = function() {
    var updateForm = function(avatarElem, usernameElem) {
        var xhr = new XMLHttpRequest;
        xhr.addEventListener('readystatechange', function() {
            if(xhr.readyState !== 4)
                return;

            var json = JSON.parse(xhr.responseText);
            if(!json)
                return;

            if(json.name)
                usernameElem.value = json.name;
            avatarElem.src = json.avatar;
        });
        // need to figure out a url registry system again, current one is too much overhead so lets just do this for now
        xhr.open('GET', '/auth/login.php?resolve=1&name=' + encodeURIComponent(usernameElem.value));
        xhr.send();
    };

    var loginForms = $c('js-login-form');

    for(var i = 0; i < loginForms.length; ++i)
        (function(form) {
            var loginTimeOut = 0,
                loginAvatar = form.querySelector('.js-login-avatar'),
                loginUsername = form.querySelector('.js-login-username');

            updateForm(loginAvatar, loginUsername);
            loginUsername.addEventListener('keyup', function() {
                if(loginTimeOut)
                    return;
                loginTimeOut = setTimeout(function() {
                    updateForm(loginAvatar, loginUsername);
                    clearTimeout(loginTimeOut);
                    loginTimeOut = 0;
                }, 750);
            });
        })(loginForms[i]);
};
Misuzu.initQuickSubmit = function() {
    var ctrlSubmit = Array.from($qa('.js-quick-submit, .js-ctrl-enter-submit'));
    if(!ctrlSubmit)
        return;

    for(var i = 0; i < ctrlSubmit.length; ++i)
        ctrlSubmit[i].addEventListener('keydown', function(ev) {
            if((ev.code === 'Enter' || ev.code === 'NumpadEnter') // i hate this fucking language so much
                && ev.ctrlKey && !ev.altKey && !ev.shiftKey && !ev.metaKey) {
                // hack: prevent forum editor from screaming when using this keycombo
                //       can probably be done in a less stupid manner
                Misuzu.Forum.Editor.allowWindowClose = true;

                this.form.submit();
                ev.preventDefault();
            }
        });
};
