/* USER FUNCTIONS */

/* Attempt to log user in with supplied credentials */
function attemptLogin() {
    userSetTab('PleaseWait');
    makeRequest('login', {
        username: $('username').value,
        password: $('password').value
    }, receiveLoginConfirmation);
}

/* Tells us if a user has logged in OK or not - if so, load up his data */
function receiveLoginConfirmation(data) {
    if(data == 'fail') {
        userSetTab('Login');
        displayBadMessage('Unable to connect to server. Please try again later.');
    }
    else if(!data.error && data.user) {
        userLogin(data.user);
        if(data.message) displayGoodMessage(data.message);
    }
    else {
        userSetTab('Login');
        if(data.message) displayBadMessage(data.message);
    }
}

/* Attempts to log user out and delete server-side session */
function attemptLogout() {
    makeRequest('logout', {
        username: $('username').value,
        password: $('password').value
    });
    userLogout();
}

/* USER LIST FUNCTIONS */

/* Add a new user to the list */
function userListAdd(username) {
    user_list.push(username);
    userListRender();
}

/* Remove a user from the list */
function userListRemove(username) {
    user_list = user_list.without(username);
    userListRender(true);
}

/* Re-render the user list. Can optionally skip the sort step (for removes) */
function userListRender(no_sort) {
    if(!no_sort) user_list = user_list.uniq().sort();
    var counter = 0;
    var html = '<ul>';
    if(user_list.length > 0) {
        user_list.each(function(username) {
            html += '<li><span class="' + getGradientClassName(username) + ' nonPostAuthor userListUser"';
            html += ' id="userListUser' + (counter++) + '"';
            html += ' style="color: ' + getNameColour(username) + '">';
            html += username.escapeHTML() + '</span></li>';
        });
        html += '</ul>';
        $('userList').innerHTML = html;
        for(var i = 0; i < counter; i++) {
            gradientText.set($('userListUser' + counter));
        }
    }
    else {
        $('userList').innerHTML = '<p>No users logged in.</p>';
    }
}

/* Updates the user list from an array */
function userListUpdate(arr) {
    user_list = $A(arr);
    userListRender();
}

/* Clears the user list */
function userListClear() {
    user_list = $A();
    userListRender();
}
