var usernamePortion = new Array();
usernamePortion['gtalk'] = '@gmail.com';
usernamePortion['yahoo'] = '';

var statusArray = new Array();
statusArray['Available'] = 0;
statusArray['Invisible'] = 2;
statusArray['Away'] = 1;

function bindChatabFormEvent(registerForm, loginForm) {
    registerForm.submit(function(){
        var username = $(this).find('input[name="username"]').val();
        var password = $(this).find('input[name="password"]').val();
        processChatabRegister(registerForm, username, password);
        return false;
    });
    
    loginForm.submit(function(){
        var username = $(this).find('input[name="username"]').val();
        var password = $(this).find('input[name="password"]').val();
        processChatabLogin(loginForm, username, password);
        return false;
    });
}

function setupMainMenu() {
    $.ajax({
        type: 'POST',
        url: '/chatab/check-chat-ab-login',
        success : function(json) {
            if (json.login) {
                // set the variable in view.js
                //isLoginChatab = true;
                showChatabMemberUserMenu();
            } else {
                //isLoginChatab = false;
                showChatabGuestMenu();
            }
        }
    });
}

function logoutHere(){
    // changes the view
    //    $('#dashBoardView').hide();
    //    $('#loginForm').show();
    //    $( 'body' ).removeClass('dashboardBody');
    //    $( 'body' ).addClass('loginFormBody');
    $.ajax({
        type: 'POST',
        url: '/purple/logout',
        success : function(data) {
            window.onbeforeunload=function(){
        
            };
    
            // removes all dialogs
            for(id in dialogBoxList){
                dialogBoxList[id].remove();
            }
            // clear data
            accounts=null;
            buddies=null;
            buddyRows=null;
            dialogBoxList=null;
            chatContents=null;
            groups=null;
            window.location="";
        },
        beforeSend : function() {
            stopLongPolling();
            $('body').block();
            $('#dashboard').parent().block();
        },
        complete : function() {
            $('body').unblock();
            $('#dashboard').parent().unblock();
        }
    });
}

function addBuddyToServer(){
    var val=$('#add-buddy-dialog form select.account-list').val();
    var strs=val.split('(');
    var username=strs[0];
    var protocol=strs[1];
    protocol=protocol.substr(0,protocol.length-1);

    var accountToAdd=$('#add-buddy-dialog form input.buddyName').val();
    var alias=$('#add-buddy-dialog form input.buddyAlias').val();
    var group=$('#add-buddy-dialog form select.group-list').val();
    // process all data to ensure the correct format
    username = processUsernamePortion(username, protocol);
    accountToAdd = processUsernamePortion(accountToAdd, protocol);
    sendFriendRequest($('#add-buddy-dialog'), protocol, username, accountToAdd, group, alias);
}

function addGroupToServer(){
    var val=$('#add-group-dialog form select.account-list').val();
    var strs=val.split('(');
    var username=strs[0];
    var protocol=strs[1];
    protocol=protocol.substr(0,protocol.length-1);

    var group=$('#add-group-dialog form input').val();
    //end
    processAddGroup($('#add-group-dialog'), protocol, username, group);
}


//receive here
function receiveBuddyRequestFromServer(toAccount,byBuddy,protocol){
    
    //    var toAccount="hakuna_cool";
    //    var byBuddy="gia";
    //    var protocol="yahoo";
    //put the variable in
    initRequestDialog(toAccount,byBuddy,protocol);
}

function declineRequestToServer(dialog, toAccount,byBuddy,protocol){
    $.ajax({
        type: 'POST',
        url: '/purple/deny-friend',
        data: {
            protocol: protocol, 
            account: toAccount,
            fromAccount: byBuddy
        },
        beforeSend : function() {
            dialog.block();
        },
        success : function(json) {
            if (json.error) {
                alert(json.error);
            } else {
                dialog.wijdialog('close');
            }            
        },
        complete : function() {
            dialog.unblock();
        }
    })
}


function acceptRequestToServer(dialog,toAccount,byBuddy,protocol){
    byBuddy = processUsernamePortion(byBuddy, protocol);
    toAccount = processUsernamePortion(toAccount, protocol);
    $.ajax({
        type: 'POST',
        url: '/purple/accept-friend',
        data: {
            protocol: protocol, 
            account: toAccount,
            fromAccount: byBuddy
        },
        beforeSend : function() {
            dialog.block();
        },
        success : function (json) {
            if (json.error) {
                alert(json.error);
            } else {
                dialog.wijdialog('close');
            }
        },
        complete : function() {
            dialog.unblock();
        }
    })
}

function acceptAndAddRequestToServer(dialog, toAccount,byBuddy,protocol,alias,group){
    acceptRequestToServer(dialog, toAccount, byBuddy, protocol);
    sendFriendRequest(dialog, protocol, toAccount, byBuddy, group, alias);
}

function sendMessageToServer(protocol, username, toAccount, message) {
    //alert(protocol + " | " + username + " | " + toAccount);
    username = processUsernamePortion(username, protocol);
    toAccount = processUsernamePortion(toAccount, protocol);
    $.ajax({
        type: 'POST',
        url: '/purple/send-message',
        data: {
            fromAccount: username, 
            protocol: protocol, 
            toAccount: toAccount, 
            message: message
        }
    })
}

function sendFriendRequest(dialog, protocol, username, toAccount, group, alias) {
    username = processUsernamePortion(username, protocol);
    toAccount = processUsernamePortion(toAccount, protocol);
    alert(protocol + " | " + username + " | " + toAccount + " | " + group + " | " + alias);
    $.ajax({
        type: 'POST',
        url: '/purple/add-friend',
        data: {
            account: username, 
            protocol: protocol, 
            toAccount: toAccount, 
            group: group,
            alias: alias
        },
        beforeSend : function() {
            dialog.parent().block();
        },
        success : function(json) {
            if (json.error) {
                alert(json.error);
            } else {
                dialog.wijdialog('close');
            }
        },
        complete : function () {
            dialog.parent().unblock();
        }
    })
}

function sendDeleteToServer(confirmDialog, username, protocol, accountName){
    username = processUsernamePortion(username, protocol);
    accountName = processUsernamePortion(accountName, protocol);
    var removeFriendUrl = '/purple/remove-friend';
    $.ajax({
        type: 'POST',
        url: removeFriendUrl,
        dataType: 'json',
        data: {
            account: accountName, 
            protocol: protocol, 
            remove : username
        },
        beforeSend : function() {
            confirmDialog.parent().block();
        },
        success: function(json){
            if (json.error) {
                alert(json.error);
            } else {
                confirmDialog.wijdialog('close');
            }
        },
        complete : function() {
            confirmDialog.parent().unblock();
        }
    });
}

function addAccountToServer(dialog,username,password,protocol){
    var addAccountUrl = '/purple/login';
    stopLongPolling();
    //username = processUsernamePortion(username, protocol);
    $.ajax({
        type: 'POST',
        url: addAccountUrl,
        dataType: 'json',
        data: {
            username: username, 
            protocol: protocol, 
            password: password
        },
        beforeSend : function() {
            dialog.parent().block(); 
        },
        success: function(json){
            startLongPolling();
            if (json.error) {
                alert(json.error);
            } else {
                dialog.wijdialog('close');
                // also save the added account to db
                processChatabAddAccount(username, password, protocol);
            }
        },
        complete : function() {
            dialog.parent().unblock();
        }
    });
    return true;
}

function changeStatusForAccountToServer(accountName,protocol,status){
    alert(accountName + " " + protocol + " " + status);
    var changeStatusUrl = '/purple/change-status';
    var newStatus = 0;
    alert(statusArray[status]);
    if (statusArray[status]) {
        newStatus = statusArray[status];
    }
    
    $.ajax({
        type: 'POST',
        url: changeStatusUrl,
        dataType: 'json',
        data: {
            account : accountName,
            protocol : protocol,
            status : newStatus
        },
        beforeSend : function() {
            
        },
        success: function(json){
            if (json.error) {
                alert(json.error);
            } else {
                
        }
        },
        complete : function() {
            
        }
    });
}

function processLogoutSingle(username, protocol) {
    username = processUsernamePortion(username, protocol);
    var logoutUrl = "/purple/logout";
    $.ajax({
        type : 'POST',
        url : logoutUrl,
        dataType : 'json',
        data : {
            account : username,
            protocol : protocol
        }
    });
}

function processAddGroup(dialog, protocol, account, group) {
    account = processUsernamePortion(account, protocol);
    var addGroupUrl = '/purple/add-group';
    $.ajax({
        type: 'POST',
        url: addGroupUrl,
        dataType: 'json',
        data: {
            protocol: protocol, 
            account: account,
            group: group
        },
        beforeSend : function() {
            dialog.parent().block(); 
        },
        success: function(json){
            if (json.error) {
                alert(json.error);
            } else {
                dialog.wijdialog('close');
            }
        },
        complete : function() {
            dialog.parent().unblock();
        }
    });
}

function processChatabRegister(registerBoxSelector, username, password) {
    var registerUrl = "/chatab/register";
    $.ajax({
        url : registerUrl,
        type : 'POST',
        dataType : 'json',
        data : {
            username : username, 
            password : password
        },
        beforeSend : function() {
            registerBoxSelector.parent().block();
        },
        success : function(json) {
            if (json.error) {
                alert(json.error);
            } else {
                if (dashboardPrepared) {
                    registerBoxSelector.wijdialog('close');
                    showChatabMemberUserMenu();
                } else {
                    prepareDashboard();
                }
            }
        },
        error: function (xhr, ajaxOptions, thrownError) {
            
        },
        complete : function() {
            registerBoxSelector.parent().unblock();
        }
    });
}

function processChatabLogin(loginBoxSelector, username, password) {
    var loginUrl = "/chatab/login";
    $.ajax({
        url : loginUrl,
        type : 'POST',
        dataType : 'json',
        data : {
            username : username, 
            password : password
        },
        beforeSend : function() {
            loginBoxSelector.parent().block();
        },
        success : function(data) {
            if (data.error) {
                alert(data.error);
            } else {
                if (dashboardPrepared) {
                    loginBoxSelector.wijdialog('close');
                    showChatabMemberUserMenu();
                } else {
                    prepareDashboard();
                }
            }
        },
        error: function (xhr, ajaxOptions, thrownError) {
            
        },
        complete : function() {
            loginBoxSelector.parent().unblock();
        }
    });
}

function processChatabAddAccount(username,password,protocol) {
    var addAccountUrl = '/chatab/add-account';
    $.ajax({
        type: 'POST',
        url: addAccountUrl,
        dataType: 'json',
        data: {
            username: username, 
            protocol: protocol, 
            password: password
        },
        beforeSend : function() {

        },
        success: function(json){
            if (json.error) {
                alert(json.error);
            } else {
                
        }
        },
        complete : function() {

        }
    });
}

function processChatabRemoveAccount(dialog, username, protocol) {
    var removeAccountUrl = '/chatab/remove-account';
    $.ajax({
        type: 'POST',
        url: removeAccountUrl,
        dataType: 'json',
        data: {
            username: username, 
            protocol: protocol
        },
        beforeSend : function() {
            dialog.parent().block();
        },
        success: function(json){
            if (json.error) {
                alert(json.error);
            } else {
                getChatClientStatus("/chatab/account-status", dialog);
            }
        },
        complete : function() {
            dialog.parent().unblock();
        }
    });
}

function processChatabUpdateChatClient(dialog, accountToUpdate, protocol, oldPassword, newUsername, newPassword, newProtocol) {
    var editAccountUrl = '/chatab/update-account';
    $.ajax({
        type: 'POST',
        url: editAccountUrl,
        dataType: 'json',
        data: {
            accountToUpdate: accountToUpdate, 
            protocol: protocol,
            oldPassword: oldPassword,
            newUsername: newUsername,
            newPassword: newPassword,
            newProtocol: newProtocol
        },
        beforeSend : function() {
            dialog.parent().block();
        },
        success: function(json){
            if (json.error) {
                alert(json.error);
            } else {
                
            }
        },
        complete : function() {
            dialog.parent().unblock();
        }
    });
}

function processUsernamePortion(username, protocol) {
    if (username.indexOf(usernamePortion[protocol]) == -1) {
        if (username.indexOf("@") != -1) {
            var temp = username.split("@");
            username = temp[0];
        }
        return username + usernamePortion[protocol];
    }
    return username;
}


