
//var roomId -- generated by php


var hostDataURL = baseURL + 'VM/player/player_ownerSync.php?dbid=AllAdmins';
var launchPageDataURL = baseURL + 'VM/player/player_launchPageSync.php?dbid=AllAdmins';

var pageNames = ['main_page', 'launch_page', 'inProgress_page', 'keypadClosed_page'];
var launchPageSections = ['no_roomId', 'login', 'gameSelector', 'viewerLaunch', 'contacting_server', 'launch_error'];

var session_active = false;

var playerWindowSize = {width:800,height:600,x:10,y:10};
initialWindowState = LWAPW_getWindowState();
var kpWindowSize = {width:360,height:120,x:initialWindowState.screenWidth-360,y:initialWindowState.screenHeight-120};

var sessionWindow;
var sessionWindowSize = playerWindowSize;
		

var loginState;
var loginEmail;
var PHPSESSID;

var loginStateSessionID = '';
var loginErrorMsg = '';

var gameSelectorErrorMsg = '';


function LWAPW_sessionWindowOpen() {
	return sessionWindow && ! sessionWindow.closed;
}

function LWAPW_initPage() {
	LWAPW_initLaunchPage();
}

function LWAPW_initLaunchPage() {
	LWAPW_RefreshLaunchPage();
}

function LWAPW_ShowPage(pageName) {
	//return;
	for (var i=0; i<pageNames.length; i++) {
		var iName = pageNames[i];
		if (iName == pageName) {
			$(iName).style.display = 'block';
		} else {
			$(iName).style.display = 'none';
		}
	}
	//
	if ((loginEmail == undefined) || (! loginState) || LWAPW_sessionWindowOpen()) {
		$('loginStatus').style.display = 'none';
	} else {
		$('loginStatus').style.display = 'block';
	}
}

//

function LWAPW_Logout() {
	loginState = false;
	loginEmail = undefined;
	loginErrorMsg = '';
	LWAPW_RefreshLaunchPage();
}

//

function LWAPW_ShowLaunchSection(sectionName) {
	for (var i=0; i<launchPageSections.length; i++) {
		var iName = launchPageSections[i];
		if (iName == sectionName) {
			$(iName).style.display = 'block';
		} else {
			$(iName).style.display = 'none';
		}
	}
}



// ** SEND/RECEIVE

function LWAPW_StartAjaxRequest(submitToURL, args) {
	
	if (PHPSESSID != undefined) {
		args['PHPSESSID'] = PHPSESSID;
	}
	var jsonString = Object.toJSON(args);
	//send_lv.JSON_args = json.stringify(args);
	var command = args.command;
	new Ajax.Request(submitToURL, {
			method: 'post',
			asynchronous: true,
			parameters: {
				JSON_args: jsonString,
				command: command
			},
			onSuccess: function (response) {
				var command = response.request.parameters.command;
				var responseText = response.responseText;
				var obj =  responseText.parseQuery();
				PHPSESSID = obj.PHPSESSID;
				json = obj.json;
				if (json != undefined && json.isJSON()) {
					jsonObj = json.evalJSON();
					var success = jsonObj.success;
					if (success) {
						LWAPW_AjaxRequest_Success(command, jsonObj)
					} else {
						var errorMsg = jsonObj.errorMsg.replace(/\+/g, ' ');
						LWAPW_AjaxRequest_Failure(command, errorMsg)
					}
				} else {
					LWAPW_AjaxRequest_Error(command, "Undefined Error");
				}
			},
			onFailure: function () {
					LWAPW_AjaxRequest_Error(command, "Connection Failed");
			}
	});
}
	

// ** FOR MANUAL INPUT OF ROOM ID

function LWAPW_InitSessIDForm() {
	$('sessid_input').style.display = 'block';
	$('sessid_1').value = '';
	$('sessid_2').value = '';
	LWAPW_SessionIdSetSubmitEnabled();
}

function LWAPW_HideSessidInput() {
	$('sessid_input').style.display = 'none';
	$('sessid_input').style.visibility == 'hidden'
}


function LWAPW_SessionIdKeyPress(idField, e) {
	// only allow 3 characters, only allow 0-9
	var digitsOnly = /[1234567890]/g;
	//
	if (!e) var e = window.event;
	if (e.keyCode) code = e.keyCode;
	else if (e.which) code = e.which;
	var character = String.fromCharCode(code);
	// if they pressed esc... remove focus from field...
	if (code==27) { this.blur(); return false; }
	// ignore if they are press other keys
	// strange because code: 39 is the down key AND ' key...
	// and DEL also equals .
	if (!e.ctrlKey && code!=9 && code!=8 && code!=36 && code!=37 && code!=38 && (code!=39 || (code==39 && character=="'")) && code!=40) {
		if (character.match(digitsOnly)) {
			if (idField.value.length > 2) {
				return false;
			}
			return true;
		} else {
			return false;
		}
	}
}


function LWAPW_SessionIdKeyUp(idField) {
	LWAPW_SessionIdSetSubmitEnabled();
	if (idField.value.length > 2 && idField == $('sessid_1')) {
		$('sessid_2').focus();
	}
	if (idField.value.length > 2 && idField == $('sessid_2')) {
		$('sessid_submit').focus();
	}
}

function LWAPW_SessionIdSetSubmitEnabled() {
	if ($('sessid_1').value.length != 3  ||  $('sessid_2').value.length != 3) {
		$('sessid_submit').disabled = true;
	} else {
		$('sessid_submit').disabled = false;
	}
}

function LWAPW_SubmitSessionID(id) {
	if (id==null) {
		roomId = $('sessid_1').value + '-' + $('sessid_2').value;
	} else {
		roomId = id;
	}
	LWAPW_RefreshLaunchPage();
}

//  **  END --FOR MANUAL INPUT OF ROOM ID


function LWAPW_relaunch() {
	if (role == 'host') {
		LWAPW_TryLaunchHost();
	} else {
		LWAPW_launchViewer();
	}
}


// ** COMMANDS FROM ROOM WINDOW

function LWAPW_SessionEnded() {
	session_active = false;
	LWAPW_ShowPage('main_page');
}

function LWAPW_LaunchConfirmed() {
	session_active = true;
	sessionWindow.moveTo(sessionWindowSize.x,sessionWindowSize.y);
	sessionWindow.focus();
	LWAPW_RefreshLaunchPage();
	//LWAPW_ShowPage('inProgress_page');
}

function LWAPW_SessionWindowClosed() {
	if (session_active) {
		 LWAPW_ShowPage('keypadClosed_page');
	}
}

// ** END -- COMMANDS FROM KP WINDOW
	


function LWAPW_getWindowState(){
	var screenHeight = screen.availHeight;
	var screenWidth = screen.availWidth;
	/*var winTop = window.screenX;
	var winLeft = window.screenY;
	if (winTop == undefined) winTop = -4;
	if (winLeft == undefined) winLeft = -4;
	var winWidth = window.outerWidth;
	var winHeight = window.outerHeight;
	if (winWidth == undefined) winWidth = document.body.offsetWidth;
	if (winHeight == undefined) winHeight = document.body.offsetHeight;
	if (winWidth == undefined) winWidth = screenWidth - 100;
	if (winHeight == undefined) winHeight = screenHeight - 200;
	*/
	/*alert ("screenHeight:"+screenHeight+
		"\nscreenWidth:"+screenWidth+
		"\nwinTop:"+winTop+
		"\nwinLeft:"+winLeft+
		"\nwinWidth:"+winWidth+
		"\nwinHeight:"+winHeight);*/
	return {screenHeight:screenHeight,
		screenWidth:screenWidth}; /*,
		y:winTop,
		x:winLeft,
		width:winWidth,
		height:winHeight};*/
}