var userFormTimeout;

function userCaptchaImageURL(object, attrName) {
    // var object = document.getElementById(objectId);
    if (!object || !attrName) return false;
    dojo.xhrPost({
        url: "engine.php",
        timeout: 5000,
        handleAs: "json",
        content: {
            "object": "captcha",
            "action": "get"
        },
        load: function(resp, args) {
            if (resp.status == 0) {
                object.setAttribute(attrName, resp.url);
            } else {
                showNote(resp.text);
            }
            return resp;
        },
        error: function (resp, args) {
            showNote(resp);
            return resp;
        }
    });
}

function userProfile(userid) {

}

function userFormTimeoutActivate() {
    userFormTimeout = setTimeout(function () {
            if (document.getElementById('userFormTable'))
                document.getElementById('userFormTable').style.display = 'none';
            clearTimeout(userFormTimeout);
    }, 5000);
}

function userFormTimeoutDeactivate() {
    clearTimeout(userFormTimeout);
}

function generateUserForm(type) {
    /* TODO: Registration form needs email field */
    var login_button_caption;
    var form_onsubmit;
    var table_id = "userFormTable";
    switch (type) {
        default:
        case 1:
            login_button_caption = 'Войти';
            form_onsubmit = "userLogin(document.getElementById('usernameInput').value"
                    +", document.getElementById('passwordInput').value"
                    +", document.getElementById('captchaInput').value"
                +", 1);return false;";
            login_input_check = "";
            password_input_check = "";
            break;
        case 2:
            login_button_caption = 'Зарегистрироваться';
            form_onsubmit = "userRegister(document.getElementById('usernameInput').value"
                    +", document.getElementById('passwordInput').value"
                    +", document.getElementById('captchaInput').value"
                +");return false;";
            login_input_check = "is_valid_username(this);";
            password_input_check = "is_valid_password(this);";
            break;
    }
    var table = document.getElementById(table_id);
    if (table) {
        if (table.style.display == 'none' || table.getAttribute('type') != type) {
            userCaptchaImageURL(document.getElementById('userCaptchaImage'), "src");
            document.getElementById('captchaInput').value = '';
            document.getElementById('userFormSubmit').setAttribute('onclick', form_onsubmit);
            document.getElementById('userFormSubmit').value = login_button_caption;
            table.style.display = 'table';
            table.setAttribute('type', type);
        } else {
            table.style.display = 'none';
        }
        return;
    }

    var login_input = createInputNode("username", "text", "Имя", "userInput", "usernameInput");
    login_input.setAttribute('onblur', login_input_check);
    var password_input = createInputNode("password", "password", "Пароль", "userInput", "passwordInput");
    password_input.setAttribute('onblur', password_input_check);
    var captcha_input = createInputNode("captcha_key", "text", "Символы с картинки", "userInput", "captchaInput");

    var login_button = createInputNode("submit", "button", login_button_caption, "userInput", "userFormSubmit");
    login_button.style.width = 'auto';
    login_button.setAttribute('onclick', form_onsubmit);

    var captcha_image = createElementNode("IMG", "", "userCaptchaImage");
    captcha_image.setAttribute('alt', 'Captcha');
    captcha_image.setAttribute('src', '');
    userCaptchaImageURL(captcha_image, "src");

    var form = createElementNode('FORM', '', 'userForm');

    table = createElementNode('TABLE', 'userForm', table_id);
    table.style.display = 'table';
    var tbody = createElementNode('TBODY');
    var tr;
    var td;
    /* Username */
    tr = createElementNode('TR');
    td = createElementNode('TD');
    td.appendChild(login_input);
    tr.appendChild(td);
    tbody.appendChild(tr);
    /* Password */
    tr = createElementNode('TR');
    td = createElementNode('TD');
    td.appendChild(password_input);
    tr.appendChild(td);
    tbody.appendChild(tr);
    /* Captcha */
    tr = createElementNode('TR');
    td = createElementNode('TD');
    td.appendChild(captcha_image);
    tr.appendChild(td);
    tbody.appendChild(tr);
    tr = createElementNode('TR');
    td = createElementNode('TD');
    td.appendChild(captcha_input);
    tr.appendChild(td);
    tbody.appendChild(tr);
    /* Button */
    tr = createElementNode('TR');
    td = createElementNode('TD');
    td.appendChild(login_button);
    tr.appendChild(td);
    tbody.appendChild(tr);

    table.appendChild(tbody);
    form.appendChild(table);

    document.body.appendChild(form);
}

function generateUserSettings() {
    var container = document.getElementById('settingsContainer');
    if (container) {
        if (container.style.display == 'none') {
            container.style.display = 'block';
        } else {
            container.style.display = 'none';
        }
        return;
    }

    container = createDivNode("settingsContainer", "settingsContainer");

    

    document.body.appendChild(container);
}

function userLoginForm() {
    generateUserForm(1);
}

function userRegistrationForm() {
    generateUserForm(2);
}

function userSettingsForm() {
    generateUserSettings();
}

function userMenu(user_state) {
    var menu_by_state = [
        [
            ["Войти", "button", [
                    ["class", "userMenuButton"],
                    ["onclick", "userLoginForm();"]
            ]],
            ["Регистрация", "button", [
                    ["class", "userMenuButton"],
                    ["onclick", "userRegistrationForm();"]
            ]]
        ],
        [
            ["Настройки", "button", [
                    ["class", "userMenuButton"],
                    ["onclick", "userSettingsForm();"]
            ]],
            ["Выйти", "button", [
                    ["class", "userMenuButton"],
                    ["onclick", "userLogout();"]
            ]]
        ]
    ];
    var menu_id = 'userMenu';

    var table;

    removeNodeById(menu_id);

    if (!user_state || !is_numeric(user_state)) user_state = 0;

    table = createElementNode('TABLE', 'userMenu', menu_id);
    var tbody = createElementNode('TBODY');

    for (ind in menu_by_state[user_state]) {
        var tr = createElementNode('TR');
        var td = createElementNode('TD');
        var elem = createElementNode(menu_by_state[user_state][ind][1]);

        switch(menu_by_state[user_state][ind][1]) {
            case 'button':
                elem.appendChild(document.createTextNode(menu_by_state[user_state][ind][0]));
                break;
            default:
                break;
        }

        for (_ind in menu_by_state[user_state][ind][2]) {
            elem.setAttribute(
                menu_by_state[user_state][ind][2][_ind][0],
                menu_by_state[user_state][ind][2][_ind][1]
            );
        }

        td.appendChild(elem);
        tr.appendChild(td);
        tbody.appendChild(tr);
    }
    table.appendChild(tbody);
    document.body.appendChild(table);
    return false;
}

function userLogin(username, password, captcha_key, note) {
    dojo.xhrPost({
        url: "engine.php",
        timeout: 5000,
        handleAs: "json",
        content: {
            "object": "user",
            "action": "login",
            "name": username,
            "password": password,
            "captcha_key": captcha_key
        },
        load: function(resp, args) {
            if (resp.status == 0) {
                userMenu(1);
                if (document.getElementById('userFormTable')) {
                    document.getElementById('userFormTable').style.display = 'none';
                }
            } else {
                userMenu(0);
                if (note) {
                    showNote("Неверное имя пользователя или пароль!");
                }
                if (username && password && captcha_key)
                    generateUserForm(1);
            }
            return resp;
        },
        error: function (resp, args) {
            showNote(resp);
            return resp;
        }
    });
}

function userLogout() {
    dojo.xhrPost({
        url: "engine.php",
        timeout: 5000,
        handleAs: "json",
        content: {
            "object": "user",
            "action": "logout"
        },
        load: function(resp, args) {
            if (resp.status == 0) {
                userMenu(0);
            } else {
                showNote(resp.text);
            }
            return resp;
        },
        error: function (resp, args) {
            showNote(resp);
            return resp;
        }
    });
    return false;
}

function userRegister(username, password, captcha_key) {
    dojo.xhrPost({
        url: "engine.php",
        timeout: 5000,
        handleAs: "json",
        content: {
            "object": "user",
            "action": "register",
            "name": username,
            "password": password,
            "captcha_key": captcha_key
        },
        load: function(resp, args) {
            if (resp.status == 0) {
                showNote("Вы успешно зарегистрированы.<br>Ваш логин: "+username+"<br>Теперь вы можете зайти в ваш профиль.");
//                setTimeout(function() {document.location.href = "http://nights.ptz.ru/user.php";}, 3000);
            } else {
                showNote(resp.text);
            }
            generateUserForm(2);
            return resp;
        },
        error: function (resp, args) {
            showNote(resp);
            return resp;
        }
    });
}

function userUnregister() {
    dojo.xhrPost({
        url: "engine.php",
        timeout: 5000,
        handleAs: "json",
        content: {
            "object": "user",
            "action": "unregister"
        },
        load: function(resp, args) {
            if (resp.status == 0) {

            } else {
                showNote(resp.text);
            }
            return resp;
        },
        error: function (resp, args) {
            showNote(resp);
            return resp;
        }
    });
}

function is_valid_password(inputObj) {
    if (!inputObj) return false;
    var password = inputObj.getAttribute("value");
    var valid = 1;
    if (!password) valid = 0;
    if (password.toString().length < 4) valid = 0;
    if (valid) {
        inputObj.setAttribute("class", "userInput validInput");
    } else {
        inputObj.setAttribute("class", "userInput invalidInput");
    }
    inputObj.setAttribute("valid", valid);
    return true;
}

function is_valid_username(inputObj) {
    if (!inputObj) return false;
    var username = inputObj.getAttribute("value");
    dojo.xhrPost({
        url: "engine.php",
        timeout: 5000,
        handleAs: "json",
        content: {
            "object": "user",
            "action": "is_valid_username",
            "username": username
        },
        load: function(resp, args) {
            var valid = parseInt(resp.status == 0);
            if (valid) {
                inputObj.setAttribute("class", "userInput validInput");
            } else {
                inputObj.setAttribute("class", "userInput invalidInput");
            }
            inputObj.setAttribute("valid", valid);
            return resp;
        },
        error: function (resp, args) {
            showNote(resp);
            return resp;
        }
    });
    return true;
}

