﻿//
// zifmia-controller-regression.js - Copyright © 2011 - David Cornelson
//
// This file has the UI handlers that gathers information from the dom and passes them
// to the AJAX routines.
//

//
// Initialize Page Variables
//
var NOT_LOGGED_IN = "User is not logged in.";
var LOGGED_IN = "User {0} is logged in.";

var currentTurn = 1;
var totalTurns = 1;
var firstTurn = 1;

var currentAuthKey = "";
var currentplayerKey = "";
var currentSessionKey = "";
var currentGameKey = "";

var sessionList = new Array();
var gameList = new Array();

var displayName = "";

var zifmiaCookie = 'zifmiaData';

var authKeyPanel = "#authKeyPanel";
var sessionKeyPanel = "#sessionKeyPanel";
var gameKeyPanel = "#gameKeyPanel";
var displayNamePanel = "#displayNamePanel";
var inputPanel = "#inputPanel";

var gameListPanel = "#gameListPanel";
var titlePanel = "#titlePanel";
var chapterPanel = "#chapterPanel";
var mainPanel = "#mainPanel";
var statusChannel = "#statusPanel";
var messagePanel = "#messagePanel";
var errorPanel = "#errorPanel";

//
// Channel Names (these are the only ones we care about for now)
//
var MAIN_CHANNEL = "MAIN";
var PROLOGUE_CHANNEL = "PLOG";
var TITLE_CHANNEL = "TITL";
var CHAPTER_CHANNEL = "CHAP";
var LOCATION_CHANNEL = "LOCN";
var TURN_CHANNEL = "TURN";
var DEATH_CHANNEL = "DEAD";
var CREDITS_CHANNEL = "CRED";
var SCORE_CHANNEL = "SCOR";
var HINT_CHANNEL = "HINT";

//
// Utility functions
//
function GetChannelText(channelData, channelName) {
    for (channelIndex = 0; channelIndex < channelData.length; channelIndex++) {
        if (channelData[channelIndex].Name == channelName)
            return channelData[channelIndex].Content;
    }
    return "";
}

function GameLink(authKey, gameKey, title) {
    return "<a href=\"javascript:UIStartGame('" + authKey + "','" + gameKey + "');\">" + title + "</a>";
}

function SessionLink(authKey, sessionKey, turn) {
    return "<a href=\"javascript:UIStartGame('" + authKey + "','" + gameKey + "');\">" + title + "</a>";
}

//
// AJAX error messages handled here...
//
function errorHandler(xhr, textStatus, errorThrown) {
    $(errorPanel).text(xhr.status);

    RunTests(TEST_FAILED, xhr.status);
}

//
// UI functions...transition from DOM to AJAX
//

function UIRegisterUser() {
    var ui_username = "regression";  // this is a special username that is always deleted when registered (and all related data).
    var ui_password = "99";
    var ui_displayName = "Reggie Q. User";
    var ui_emailAddress = "regression@textfyre.com";

    RegisterUser(ui_username, ui_password, ui_displayName, ui_emailAddress);
}

function UILogin() {
    var ui_username = "regression";
    var ui_password = "99";

    Login(ui_username, ui_password);
}

function UIListGames() {
    ListGames();
}

function UIStartGame(authKey, gameKey) {
    SessionStart(authKey, gameKey);

    currentAuthKey = authKey;
    currentGameKey = gameKey;
}

function UISendCommand() {
    command = "look at clock";
    SessionCommand(currentAuthKey, currentSessionKey, 1, currentTurn, command);
}

function UIGetSession() {
    SessionGet(currentAuthKey, currentSessionKey);
}

function UIGetHistory(branchId, turn) {
    SessionGetHistory(currentAuthKey, currentSessionKey, branchId, turn);
}

function UIUserSessionList() {
    UserSessionList(currentAuthKey);
}

// registrationViewModel.Message contains a text message of the results of the registration process.
// registrationViewModel.Status contains 1 for success and 0 for failure.
function registerHandler(registrationViewModel) {
    RunTests(VALIDATE_REGISTER_TEST, registrationViewModel);
}

// loginViewModel.AuthKey is the authKey for this user's login.
// loginViewModel.FullName is the displayName for this user.
// loginViewModel.Message is the status message of the login.
// loginViewModel.Status is 1 for success or 0 for failure.
function loginHandler(loginViewModel) {
    RunTests(VALIDATE_LOGIN_TEST, loginViewModel);
}

function listGamesHandler(gamesViewModel) {
    RunTests(VALIDATE_LIST_GAMES_TEST, gamesViewModel);
}

function sessionStartHandler(sessionViewModel) {
    RunTests(VALIDATE_START_GAME_TEST, sessionViewModel);
}

function sessionCommandHandler(sessionViewModel) {
    RunTests(VALIDATE_SEND_COMMAND_TEST, sessionViewModel);
}

function sessionGetHandler(sessionViewModel) {
    RunTests(VALIDATE_GET_SESSION_TEST, sessionViewModel);
}

function sessionGetHistoryHandler(sessionViewModel) {
    RunTests(VALIDATE_GET_HISTORY_TEST, sessionViewModel);
}

function userSessionListHandler(sessionsViewModel) {
    RunTests(VALIDATE_LIST_USER_SESSIONS_TEST, sessionsViewModel);
}

