// JavaScript Document

//
// login result values
/** Indicates that the login request was successfull */
var LOGIN_SUCCESS = 0;
/** Indicates that the login request failed */
var LOGIN_FAILED = 1;
/** Indicates that the clients login state is "logged in" */
var ALREADY_LOGGED_IN = 2;

/**
 * Create an authenticated session (login).
 * @param accountID (user name)
 * @param password Password for the account
 * @param loginResultHandler function call back for handling login request results.
 *        loginResultHandler signature: fnc(aResultCode:int), where aResultCode can be LOGIN_SUCCESS | LOGIN_FAILED | ALREADY_LOGGED_IN.
 */
function login(accountID, password, loginResultHandler) {
	//
	//
	var loginState = isLoggedIn();
	//
	//
	if(loginState==false) {
		var req = initRequest("/servlets/AuthenticateServlet?function=LOGIN&ACCOUNT_ID="+accountID+"&PASSWORD="+password, "GET");
		req.setRequestHeader("Content-Type", "text/plain; charset=\"UTF-8\"");
		req.send("");
		response = ((req.responseXML!=null && req.responseXML!=undefined) ? req.responseXML.documentElement : null);
		//
		//
		var cmdMessageElement = (response!=null ? response.getElementsByTagName('MESSAGE')[0] : null);
		//
		//
		if(cmdMessageElement!=null && cmdMessageElement.firstChild!=null) {
			//
			//
			var cmdMessageElementData = cmdMessageElement.firstChild.data;
			//
			//
			if(cmdMessageElementData!=null && cmdMessageElementData=="LOGIN_OK") {
				//
				//
				writeSessionCookie("LOGIN_STATE", "true");
				writeSessionCookie("accountID", accountID);
				//
				//
				if(loginResultHandler) {
					loginResultHandler(LOGIN_SUCCESS, accountID);
				}
			}
			else {
				if(loginResultHandler) loginResultHandler(LOGIN_FAILED);
			}
		}
		else {
			if(loginResultHandler) loginResultHandler(LOGIN_FAILED);
		}
		//
		//
		return req.ResponseXML;
	}
	else {
		if(loginResultHandler) loginResultHandler(ALREADY_LOGGED_IN);
	}
}

/**
 * Terminate the current session.
 * @return void.
 */
function logout() {
	//
	//
	var logoutReq = initRequest("/servlets/AuthenticateServlet?function=LOGOUT", "GET");
    logoutReq.setRequestHeader("Content-Type", "text/plain; charset=\"UTF-8\"");
    try {
		logoutReq.send("");
	}
	catch(connectionE) {
		logoutReq = null;
		writeSessionCookie("LOGIN_STATE", "false");
	}
	if(logoutReq!=null) {
		response  = (logoutReq.responseXML ? logoutReq.responseXML.documentElement:null);
		var cmdMessageElement = (response ? response.getElementsByTagName('MESSAGE')[0] : null);
		if(cmdMessageElement && cmdMessageElement.firstChild) {
			var cmdMessageElementData = cmdMessageElement.firstChild.data;
			if(cmdMessageElementData!=null && cmdMessageElementData=="LOGOUT_OK") {
				//
				// Optional: add logout message ot required
			}
		}
	}
	//
	//
	writeSessionCookie("LOGIN_STATE", "false");
	writeSessionCookie("accountID", "");
}

/**
 * Resolves the login state of the client. Implementation based on cookie value (session inactivity expiration is undetected).
 * @return true if client is logged in (an authenticated session exists).
 */
function isLoggedIn() {
	//
	//
	var retValue = false;
	var sessionCookie = getCookie("LOGIN_STATE");
    if(sessionCookie=="true") retValue = true;
	//
	//
	return retValue;
}

/**
 * Gets the account ID (user name) of the current session
 * @return account ID (user name) or null if account id is not found (client is not logged in)
 */
 function getAccountID() {
	//
	//
	var retValue = null;
	//
	//
	var accountIDCookie = getCookie("accountID");
	if(accountIDCookie) {
		retValue = accountIDCookie;
	}
	//
	//	
	return retValue;
}