//***********************************************
//Util
//***********************************************

function setChessLocale(id){
	var date = new Date();
	date.setTime(date.getTime()+(365*24*60*60*1000));
	document.cookie="chessLocaleId=" + id + ";expires=" + date.toGMTString() + "; path=/";
	location.href = location.href;
}

//***********************************************
//AJAX Basic
//***********************************************

function getAjaxObject(typeOfResponse){
	var res = null;
	if (window.XMLHttpRequest) { // Mozilla, Safari, ...
		res = new XMLHttpRequest();
		if (res.overrideMimeType) {
			res.overrideMimeType(typeOfResponse);
		}
	} else if (window.ActiveXObject) { // IE
		try {
			res = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
				try {
					res = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {}
		}
	}
	if(res==null){
		alert(getJavascriptMessage(im_ajax_creation_failed));
	}
	return res;
}

function debugDump(message){
/*
	if (window.ActiveXObject) {
		alert(message);
	} else {
		dump(message + "\n");
	}
*/	
}

//***********************************************
//Game load AJAX
//***********************************************

var http_loadGame;
var popup_loadGame;
var link_loadGame;

function loadGame(gameId, popup){
	if(http_loadGame){
		return;
	}
	http_loadGame = getAjaxObject('text/xhtml');
	if(!http_loadGame){
		return;
	}
	
	popup_loadGame = popup;
	link_loadGame = document.getElementById('link_load_game_' + gameId);
	link_loadGame.className = 'link-ajax-processed';
	
	http_loadGame.onreadystatechange=loadGameOut;
	http_loadGame.open('POST', jsRootUrl + 'loadPlayedGame.do?gameId=' + gameId, true);
	http_loadGame.send(null);
	debugDump("AJAX request is sent");
}

function loadGameOut(){
	debugDump("AJAX response is triggered");
	if (http_loadGame!=null && http_loadGame.readyState == 4) {
		if (http_loadGame.status == 200) {
			debugDump("AJAX response is received");
			var text = http_loadGame.responseText;
			
			http_loadGame = null;
			link_loadGame.className = '';
			
			debugDump("AJAX response is processed : [" + text + "]");
			if(text == 'login'){
				createWindowWithOnlineGames(popup_loadGame);
			} else {
				if(text == 'true'){
						alert(getJavascriptMessage(im_game_offline_loaded));
				} else {
						alert(getJavascriptMessage(im_game_offline_not_loaded));
				}
			} 
		}
	}
}

//***********************************************
// Keep session for online games
//***********************************************

var http_keepSession = false;

function keepSession(){
	var img = document.getElementById("keep_session_1");
	var srcPath = img.src;
	img.src = srcPath;
	
	debugDump("Before AJAX");
	http_keepSession = getAjaxObject('text/xhtml');
	if(!http_keepSession){
		return;
	}
	debugDump("AJAX is found");
	
	http_keepSession.onreadystatechange=keepSessionOut;
	http_keepSession.open('POST', jsRootUrl + 'keepSession.do', true);
	http_keepSession.send(null);
	debugDump("AJAX request is sent");
}

function keepSessionOut(){
	debugDump("AJAX response is triggered");
	if (http_keepSession!=null && http_keepSession.readyState == 4) {
		if (http_keepSession.status == 200) {
			debugDump("AJAX response is received");
			var text = http_keepSession.responseText;
			document.getElementById("keep_session_2").innerHTML = text;
			debugDump("AJAX response is processed");
		}
	}
}

//***********************************************
// Chat
//***********************************************

var http_chat = false;

var chatRequestProcessed = true;
var chatInputID;

function chat(inputID){

	if(inputID!=null){
		debugDump('Input is ' + inputID);
		chatInputID = inputID;
		var messageElement = document.getElementById(chatInputID);
		if(chatRequestProcessed == false) {
			debugDump('Element ' + inputID + ' is about to be disabled');
			messageElement.disabled=true;
		}
	}

	if(chatRequestProcessed == false){
		debugDump('Processing is in progress. No calls.');
		return;
	}
	
	http_chat = getAjaxObject('text/xml');

	if (!http_chat) {
		return false;
	}

	chatRequestProcessed = false;

	http_chat.onreadystatechange=chatOut;
	var enMessage = '';
	debugDump('AJAX request is formed');
	if(chatInputID!=null) {
		var messageElement = document.getElementById(chatInputID);
		chatInputID = null;
		message = messageElement.value;
		debugDump('Message : ' + message);
		arMessage = message.split(' ');
		isFirst = true;
		for(i=0; i<arMessage.length; i++){
			if(!isFirst){
				enMessage = enMessage + '+';
			}
			isFirst = false;
			tmpMessage = encodeURI(arMessage[i]);
			tmpMessage = tmpMessage.replace(/\+/g, '%2B');
			enMessage = enMessage + tmpMessage;
		}
		debugDump('EnMessage : ' + enMessage);
		messageElement.value='';
		messageElement.focus();
		messageElement.disabled=false;
	}

	debugDump('request is ready to be sent\n' + enMessage); 
	http_chat.open('POST', jsRootUrl + 'secured/chat.do?xml=true&message=' + enMessage, true);
	http_chat.send(null);
	debugDump('request is sent\n'); 
}

function chatOut(){

	if (http_chat!=null && http_chat.readyState == 4) {
		if (http_chat.status == 200) {
			var doc = http_chat.responseXML;
			var messages = doc.getElementsByTagName("message");
			debugDump("Received response with " + messages.length + " elements");
			for(var i=0; i<messages.length; i++) {
				var timeData = messages[i].childNodes[0].firstChild.data;
				var playerData = messages[i].childNodes[1].firstChild.data;
				var messageData = decodeURIComponent(messages[i].childNodes[2].firstChild.data);
				var textData = timeData + " <b>" + playerData + "</b> " + messageData;
				debugDump("Element " + i + " = " + textData);
				document.getElementById("chat-td-" + i).innerHTML = textData;
			}
		} else {
			debugDump('There was a problem with the request.');
			location.href=jsRootUrl;
		}
		chatRequestProcessed = true;
	}
}

//***********************************************
//Online connection status AJAX
//***********************************************

var http_onlineGameStatus = null;
var popup_onlineGameStatus;

function onlineGameStatus(popup){

	if(http_onlineGameStatus!=null){
		return;
	}
	
	http_onlineGameStatus = getAjaxObject('text/xhtml');
	if(http_onlineGameStatus==null){
		createWindowWithOnlineGames(popup);
		return;
	}
	
	popup_onlineGameStatus = popup;
	document.getElementById("play_online_link_id").className = 'link-ajax-processed';
	
	http_onlineGameStatus.onreadystatechange=onlineGameStatusOut;
	http_onlineGameStatus.open('POST', jsRootUrl + 'viewOnlineGamesStatus.do', true);
	http_onlineGameStatus.send(null);
	debugDump("AJAX request is sent");
	return;
}

function onlineGameStatusOut(){
	debugDump("AJAX response is triggered");
	if (http_onlineGameStatus!=null && http_onlineGameStatus.readyState==4) {
		if (http_onlineGameStatus.status == 200) {
			debugDump("AJAX response is received");

			document.getElementById("play_online_link_id").className = '';

			var text = http_onlineGameStatus.responseText;
			http_onlineGameStatus = null;
			
			debugDump("AJAX response is processed");
			if(text != 'true'){
				createWindowWithOnlineGames(popup_onlineGameStatus);
			} else {
				displayOnlineGamesAreActive();
			}
		}
	}
}

function createWindowWithOnlineGames(popup) {
	setTimeout('checkCreateWindowWithOnlineGames()', 10000);
	if(popup) {
		window.open(jsRootUrl + "secured/viewPopupOnlineGames.do", "_playchessduel", 'height=670, menubar=no, toolbar=no, resizable=yes, scrollbars=yes, width=730');
	} else {
		window.open(jsRootUrl + "secured/viewOnlineGames.do", "_playchessduel");
	}
}

function checkCreateWindowWithOnlineGames(){
	alert_flag = getCookie("popupReminderCookie");
	if("false"!=alert_flag) {
		document.getElementById("float_alert_div_title").innerHTML=getJavascriptMessage(0, true);
		document.getElementById("float_alert_div_content").innerHTML=getJavascriptMessage(0, false);
		alert_div = document.getElementById("float_alert_div");
		alert_div.style.display='';
		alert_div.style.left=(document.body.clientWidth-alert_div.clientWidth)/2 + 'px';
	}
}

function getCookie(name) {
	if (document.cookie.length>0) {
		c_start=document.cookie.indexOf(name + "=");
		if (c_start!=-1) {
			c_start=c_start + name.length+1;
			c_end=document.cookie.indexOf(";",c_start);
			if (c_end==-1) {
				c_end=document.cookie.length;
			}
			return unescape(document.cookie.substring(c_start,c_end));
		}
	}
	return "";
}

function beginDrag(elementToDrag, event){
	var deltaX = event.clientX - parseInt(elementToDrag.style.left);
	var deltaY = event.clientY - parseInt(elementToDrag.style.top);
	if (document.addEventListener){
		document.addEventListener("mousemove", moveHandler, true);
		document.addEventListener("mouseup", upHandler, true);
	}
	else if (document.attachEvent){
		document.attachEvent("onmousemove", moveHandler);
		document.attachEvent("onmouseup", upHandler);
	}
	else {
		var oldmovehandler = document.onmousemove;
		var olduphandler = document.onmouseup;
		document.onmousemove = moveHandler;
		document.onmouseup = upHandler;
	}
	if (event.stopPropagation) event.stopPropagation();
	else event.cancelBubble = true;
	if (event.preventDefault) event.preventDefault();
	else event.returnValue = false;
	function moveHandler(e){
		if (!e) e = window.event;
		elementToDrag.style.left = (e.clientX - deltaX) + "px";
		elementToDrag.style.top = (e.clientY - deltaY) + "px";
		if (e.stopPropagation) e.stopPropagation();
		else e.cancelBubble = true;
	}
	function upHandler(e){
		if (!e) e = window.event;
		if (document.removeEventListener){
			document.removeEventListener("mouseup", upHandler, true);
			document.removeEventListener("mousemove", moveHandler, true);
		}
		else if (document.detachEvent){
			document.detachEvent("onmouseup", upHandler);
			document.detachEvent("onmousemove", moveHandler);
		}
		else {
			document.onmouseup = olduphandler;
			document.onmousemove = oldmovehandler;
		}
		if (e.stopPropagation) e.stopPropagation();
		else e.cancelBubble = true;
	}
}


