function flashCmd(cmd)
{
	document.getElementById('communicator').sendCmd(cmd);
}

function onFlashConnect() {
	var flash = true;
	if ($('#onlineGameUsers').length > 0) {
		flashCmd('[-56,'+gameName+']');
	}

}


function prepareCmd(cmd)
{
	return encodeURIComponent(JSON.stringify(cmd) + "\n");
}



function onFlashMessage(str)
{
	str = str.replace(/%22/g, "\"").replace(/%5c/g, "\\").replace(/%26/g, "&").replace(/%25/g, "%");
	processCmd(str);
}


function deJSON(cmd)
{

	return eval('(' + cmd + ')');
}


function processCmd(cmd_json)
{

	cmd = deJSON(cmd_json);
	if(cmd == null) {
		return;
	}

	switch(cmd[0])
	{
		case -56:	// list users
		{
			for (var i=0; i<cmd[2].length; i++)
			{
				displayGameOnlineUser(cmd[2][i][0], cmd[2][i][1], cmd[2][i][2]);
			}

			if (cmd[3][0]) {
				displayGameOnlineBot(cmd[3][0], cmd[3][1], gameName);
			}
			if (cmd[3][2]) {
				displayGameOnlineBot(cmd[3][2], cmd[3][3], gameName);
			}
			if (cmd[3][4]) {
				displayGameOnlineBot(cmd[3][4], cmd[3][5], gameName);
			}

			break;
		}

		case -57:	// add/remove users
		{
			if (cmd[2] > 0) {
				$('#gameOnlineUser'+cmd[2]).css('display', 'none');
			}
			if (cmd[3].length > 0) {
				if ($('#gameOnlineUser'+cmd[3][0]))
				{
					$('#gameOnlineUser'+cmd[3][0]).css('display', 'block');
				}
				else
				{
					displayGameOnlineUser(cmd[3][0], cmd[3][1], cmd[3][2]);
				}
			}
			break;
		}

		case 24:
		{
			LiveChat.startChat(user);
			break;
		}

		case 28:
		{
			var vid = cmd[1].split('.');
			var id = vid[1];
			LiveChat.close(id);
			break;
		}

		case 25:
		{
			var vid = cmd[1].split('.');
			var id = vid[1];
			LiveChat.openChat(id, cmd[2], cmd[3], cmd[4], cmd[5], cmd[6]);
			break;
		}

		case 25.2:
		{

			$('.chat-body').find('div.chit-chat').each(function() {
		        $(this).addClass('chat-unread');
		    });

		    /*
			var i = 1;
			cmd[1].each(function(v, k) {
				if (i == 1) {
					LiveChat.click(v);
				}
				else {
					LiveChat.markRead(v);
					console.log('------------------------------------- MARK READ '+v);
				}
				i++;
			});
			*/

			for( var k=1; k<cmd[1].length; k++)
			{
				LiveChat.markRead(cmd[1][k]);
			}
			LiveChat.click(cmd[1][0]);


			break;
		}

		case 25.3:
		{
			var text = cmd[1];
			var id = cmd[2];
			flashAsk(text);
			break;
		}

		case 25.8:
		{
			var text = cmd[1];
			flashAlert(text);
			break;
		}

		case 25.5:
		{
			gameAddPlayUser(cmd[1], cmd[2], cmd[3]);
			break;
		}

		case 25.6:
		{
			gameRemovePlayUser(cmd[1]);
			break;
		}

		case 25.7:
		{
			notify(cmd[1], cmd[2]);
			break;
		}

		case 25.11:
		{
			tableHost(cmd[1]);
			break;
		}

		case 25.12:
		{
//			alert('Session expired alert')
			break;
		}

		case 26:
		{
			var vid = cmd[1].split('.');
			var id = vid[1];

			LiveChat.newLine(id, cmd[2]);
			break;
		}

		case -60:
		{

			var game = cmd[2].game_name; //
			var sender = cmd[2].username; //
			var invitation_id = cmd[2].inv_id; //
			var time_left = cmd[2].expire; //
			var i_send = cmd[2].inv_sender; //
			var points = cmd[2].points; //
			var domain = cmd[2].domain;
			var free_sits = 0; //

			if (cmd[2].free_sits)
			{
				free_sits = cmd[2].free_sits; //
			}

			if (cmd[2].players)
			{
				var players = cmd[2].players;
			}
			else
			{
				var players = new Array();
			}

			Invite.newInvitation(game, sender, invitation_id, time_left, i_send, points, domain, free_sits, players);

			break;
		}

		case -61:
		{

			if (cmd[3] == 0) {
				Invite.opponentDeny(cmd[2]);
			}
			else if (cmd[3] == 1) {
				Invite.opponentAccept(cmd[2]);
			}
			else if (cmd[3] == 2) {
				Invite.timeOff(cmd[2]);
			}

			break;
		}

		case -62:
		{
			Invite.clear();
			break;
		}

		case -66:
		{
			friendManager.adminOnline(cmd[2], cmd[3], cmd[4]);

			break;
		}


	}
}

function displayGameOnlineUser(id, username, points) {
	var template = onlineGameUserTpl;

	var key = new Array('USER_ID', 'USERNAME', 'POINTS', 'TYPE');
	var val = new Array(id, username, points, gameCurrency);

	var html = parseTemplate(template, key, val);

	var cur = $('#onlineGameUsers').html();
	$('#onlineGameUsers').html(cur+html);

}

function displayGameOnlineBot(id, name, game_domain) {

	var template = onlineGameBotTpl;

	var key = new Array('USER_ID', 'USERNAME', 'POINTS', 'TYPE');
	var val = new Array(id, name, '', '');

	var html = parseTemplate(template, key, val);

	var cur = $('#onlineGameUsers').html();
	$('#onlineGameUsers').html(cur+html);
}

function gameAddPlayUser(id, domain, position) {
	if ($('#ingameUser'+id).length == 0) {

		$.post("/ajax/system.php", {
									'template': 'ingameUser',
									'userId': id,
									'domain': domain
									},
									function(data){
//										if ($('#ingameUser'+id).length == 0) {
											var cur = $('#tblPos'+position).html();
											$('#tblPos'+position).html(cur+data);
//										}
//										else
//										{
//											$('#ingameUser'+id).css('display', 'block');
//										}
										flashCmd('[25.11, 0]');
									},
				"json");
	}
	else
	{
		$('#ingameUser'+id).css('display', 'block');
	}
}

function gameRemovePlayUser(id, domain) {
	$('#ingameUser'+id).css('display', 'none');
	flashCmd('[25.11, 0]');
}


function goTo(url) {
	window.location = url;
}

function reloadClient() {
	window.location.reload(true);
}


function setCookie(name, value, expires, path, domain, secure, reload) {
	var today = new Date();
	today.setTime( today.getTime() );

	if(expires){
		expires = expires * 1000 * 60 * 60 ;
	}
	var expires_date = new Date( today.getTime() + (expires) );

	document.cookie = name + "=" +escape( value ) +
	( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) +
	( ( path ) ? ";path=" + path : "" ) +
	( ( domain ) ? ";domain=" + domain : "" ) +
	( ( secure ) ? ";secure" : "" );

	if(reload)
		location.reload();
}


function flashAsk(text) {
	$('#askText').html(text);
	jQuery.facebox($('#flashAsk').html());
}

function flashAskReply(reply) {
	flashCmd('[25.4,'+reply+', 1]');
	jQuery(document).trigger('close.facebox');
}

function flashAlert(text) {
	if ($('#flashAsk')) {
		var req = new Request({
			method: 'post',
			url: '/ajax/system.php',
			data: {
				'flashAlert' : text
			},
			onComplete: function(response) {
				$('#flashAsk').html(response);
			}
		 }).send();
	}
}



function flashGameTitle(o) {

	var obj = eval('(' + o + ')');
	var content = '';

	if (obj.time) {
//		content += '<b class="i-game-move">'+obj.time+'</b>';
	}

	if (obj.wins) {
		if (obj.wins > 1)
		{
			if (content != '') { content += ' | '; }
			content += 'игра до '+obj.wins;
		}
	}

	if (obj.rules) {
		if (content != '') { content += ' | '; }
		content += obj.rules;
	}

	if (obj.trump) {
		if (content != '') { content += ' | '; }
		content += t('trump')+' <b>'+obj.trump+'</b>';
	}

	if (obj.result) {
		if (content != '') { content += ' | '; }
		content += t('result')+' <b>'+obj.result+'</b>';
	}

	if (obj.turn) {
		if (content != '') { content += ' | '; }
		content += t('turn')+' '+obj.turn
	}

	if (obj.maxTurns) {
		if (content != '') { content += ' | '; }
		content += ' '+t('from')+' '+obj.maxTurns
	}

	if (obj.points) {
		if (obj.points > 0)
		{
			if (content != '') { content += ' | '; }
			content += ' '+t('game with rating');
		}
	}
	else
	{
		if (content != '') { content += ' | '; }
		content += ' '+t('game without rating');
	}

	if (content != '') {
		$('#gameInfo').html(content);
	}


}


function tableHost(userId)
{
	if ($('#tableHost').length > 0)
	{
		$('#tableHost').css('display', 'none');
	}


	new Element("div", {
		id: 'tableHost',
		html: 'Домакин',
		"class": 'tableHost'
	}).injectBefore($('#ingameUser'+userId));
}


/*
@todo - да се пренапише за jquery
*/
function slowFlash(text)
{
	var el = new Element('div', {
		'id': 'slowFlash',
		'class': 'msg-info'
	});

	el.set('html', '<span>'+text+'</span>');

	el.inject('flashContainer','before');
	setTimeout(function(){
		$(el).fade('out').get('tween').chain(function(){
			el.destroy();
		})
	},15000);
}

var muteStatus = 0;
function mute() {

	if (muteStatus == 1) {
		muteStatus = 0;
		$('.g-sound-off').addClass('g-sound-on').removeClass('g-sound-off');
	}
	else {
		muteStatus = 1;
		$('.g-sound-on').addClass('g-sound-off').removeClass('g-sound-on');
	}

	flashCmd('[25.8, '+muteStatus+']');
}

function setMute(status) {
	muteStatus = status;
	if (status == 1)
	{
		$('.g-sound-on').addClass('g-sound-off').removeClass('g-sound-on');
	}
	else
	{
		$('.g-sound-off').addClass('g-sound-on').removeClass('g-sound-off');
	}
}

function gameQuitTable() {
	flashCmd('[3]');
}

function gameOfferDraw() {
	flashCmd('[103]');
}

// Play demo game
function startDemo(game_domain, power)
{
	flashCmd('[-58,'+game_domain+','+power+']');
}



//za ajax ping-pong
var timers = {};

function endTimer(idx)
{
	//time = (new Date().getTime()-timers[idx]);
	//console.log('Response Time: '+time+', idx='+idx+', time:'+timers[idx]);
	document.getElementById('communicator').networkTimeResult(idx+','+timers[idx]+','+(new Date().getTime()));
	timers[idx] = null;
	//return time;
};

function networkTime(idx)
{
	timers[idx] = new Date().getTime();
	$.ajax({
	 url: '/ajax/networkTest.php?'+timers[idx],
	 complete: function(xhr)
	 {
		 //console.log(xhr);
		 endTimer(idx);
		 return xhr.status;
	 }
	});
};
//------end ajax ping pong


