var SERVER_URI = "../../checkers/serv_i.php";

var STATUS_START = 0;
var STATUS_MODE = 1;
var STATUS_SINGLE_PLAY = 2;
var STATUS_SINGLE_WAIT = 3;
var STATUS_MULTI_CHOOSE = 4;
var STATUS_MULTI_INVITE = 5;
var STATUS_MULTI_DECIDE = 6;
var STATUS_MULTI_PLAY = 7;
var STATUS_MULTI_WAIT = 8;
var STATUS_WIN = 9;
var STATUS_LOOSE = 10;
var STATUS_ENEMY_EXIT = 11;

var MODE_SINGLE = 0;
var MODE_MULTI = 1;

function Game(){
	this.name = null;
	this.mode = null;
	this.opponent = null;
	this.turn = null;
	this.status = STATUS_START;
	this.blockes = false;
	
	
	var queue = new Array();
	var that = this;
	
	polling();
	
	function polling(){
	if(!that.blocked){
	
		that.blocked = true;
	
		if(queue.length>0){
			var data = queue.shift();
		} else {
			switch(that.status){
				
				case STATUS_MULTI_CHOOSE:
					var data = {"func":"choose", "args":""};
					break;
					
				case STATUS_MULTI_INVITE:
					var data = {"func":"check_invitation","args":""};
					break;
					
				case STATUS_MULTI_WAIT:
					var data = {"func":"wait","args":""};
					break;
					
				case STATUS_WIN:
				case STATUS_LOOSE:
				case STATUS_ENEMY_EXIT:
					var data = {"func":"end","args":""};
					break;
					
				default : 
					var data = { "func":"", "args":""};
					break;
			}
		}
		$.ajax({
		type:"POST",
		url:SERVER_URI,
		data:"function="+data.func+"&args="+data.args,
		success:function(msg){response(msg)}
		});
		}
		setTimeout(polling,2000);
	}
	
	this.sendInvitation = function(id){
		queue.push({
			"func" : "invite",
			"args" : id
		});
	}
	
	this.sendMove = function(move){
		queue.push({
			"func" : "move",
			"args" : move.join('|')
		});
	}
	
	this.sendWait = function(){
		queue.push({
			"func" : "switch_turn",
			"args" : ""
		});
	}
	
	this.sendName = function(name){
		queue.push({
			"func" : "name",
			"args" : name
		});
	}
	
	this.sendMode = function(mode){
		queue.push({
			"func" : "mode",
			"args" : mode
		});
	}
	
	this.sendDecide = function(decision){
		queue.push({
			"func" : "decide",
			"args" : decision
		});
	}
}

Game.prototype.loginScreen = function(){

	setTimeout(function(){$("#logo").hide(10);$("#left_block").animate({marginLeft: "0px"},300);},1000);
	setTimeout(function(){$("#ok").css("display","block");},1000);
}


Game.prototype.modeScreen = function(){
	$("#left_but").text("Single");
	$("#right_but").text("Multi");
	this.leftHide();
	this.upShow();
	document.getElementById("ok_but").src = '../checkers/client/images/ok.png';
	$("#up_block_text").text("Chose between single player and multi player mode:");
	$("#left_but").css("display","block");
	$("#right_but").css("display","block");
}

Game.prototype.chooseScreen = function(){
	this.upHide();
	this.leftShow();
	$("#login").css("display","none");
	$("#invite").css("display","block");
	$("#left_block").css("background-image","url(../checkers/client/images/opponent.png)");
	document.getElementById("ok_but").src = '../checkers/client/images/ok.png';
}

Game.prototype.decideScreen = function(){
	this.leftHide();
	this.upShow();
	$("#left_but").css("display","block");
	$("#right_but").css("display","block");
	$("#up_block_text").text("You were invited by "+this.opponent);
	$("#left_but").text("Decline");
	$("#right_but").text("Accept");
}

Game.prototype.waitScreen = function(){
	this.leftHide();
	this.upShow();
	document.getElementById("ok_but").src = "../checkers/client/images/button_quit.png";
	$("#up_block_text").text("Wait while "+this.opponent+" is accepting your invitation.");
	$("#left_but").css("display","none");
	$("#right_but").css("display","none");
}

Game.prototype.startSingle = function(){
	$("#player1").text(game.name);
	$("#player2").text("BOT");
	$("#container").removeClass("container");
	$("#container").addClass("container_bottom");
	document.getElementById("ok_but").src = "../checkers/client/images/button_quit.png";
	board.renderView();
}

Game.prototype.startMulti = function(){
	if(game.status == STATUS_MULTI_PLAY){
		$("#player1").text(game.name);
		$("#player2").text(game.opponent);
		$("#container").removeClass("container");
		$("#container").addClass("container_bottom");
		board.renderView();
	}
	else{
		$("#player1").text(game.name);
		$("#player2").text(game.opponent);
		$("#container").removeClass("container");
		$("#container").addClass("container_top");
		board.renderViewReverse();
	}
		document.getElementById("ok_but").src = "../checkers/client/images/button_quit.png";

}

Game.prototype.winScreen = function(){
	$("#player1").text("");
	$("#player2").text("");
	board.clear();
	$("#up_block_text").text("Congratulations! You won! Press QUIT button and you will be returned to the lobby.");
	$("#left_but").css("display","none");
	$("#right_but").css("display","none");
	$("#container").toggleClass("container");
	board = new Board();
	game.upShow();
}

Game.prototype.looseScreen = function(){
	$("#up_block_text").text("Sorry, you lost the game. Press QUIT button and you will be returned to the lobby.");
	$("#left_but").css("display","none");
	$("#right_but").css("display","none");
	$("#player1").text("");
	$("#player2").text("");
	board.clear();
	$("#container").toggleClass("container");
	board = new Board();
	this.upShow();
}

Game.prototype.exitScreen = function(){
	$("#up_block_text").text("Your opponent left the game. You will be returned to the lobby. Press QUIT.");
	$("#left_but").css("display","none");
	$("#right_but").css("display","none");
	$("#player1").text("");
	$("#player2").text("");
	board.clear();
	$("#container").toggleClass("container");
	board = new Board();
	this.upShow();
}


Game.prototype.leftShow = function(){
	$("#left_block").animate({
				marginLeft: "0px"
	},300);
}

Game.prototype.leftHide = function(){
	$("#left_block").animate({
		marginLeft: "-280px"
	},300);
	$("#login").blur();
}

Game.prototype.upShow = function(){
	setTimeout(function(){$("#up_block").animate({
		marginTop: "0px"
	}, 1000);},100);
}

Game.prototype.upHide = function(){
	$("#up_block").animate({
		marginTop: "-542px"
	}, 1000 );
}

Game.prototype.renderView = function(){

	switch (this.status){
		case STATUS_START:
			this.loginScreen();
			break;
		
		case STATUS_MODE:
			this.modeScreen();
			break;
		
		case STATUS_SINGLE_PLAY:
			this.turn = TURN_YELLOW;
			setTimeout(this.startSingle,1000);
			break;
		
		case STATUS_MULTI_CHOOSE:
			this.chooseScreen();
			break;
		
		case STATUS_MULTI_INVITE:
			this.waitScreen();
			break;
		
		case STATUS_MULTI_DECIDE:
			this.decideScreen();
			break;
		
		case STATUS_MULTI_PLAY:
			this.turn = TURN_YELLOW;
			setTimeout(this.startMulti,1000);
			break;
		
		case STATUS_MULTI_WAIT:
			this.turn = TURN_GREEN;
			setTimeout(this.startMulti,1000);
			break;
		
		case STATUS_WIN:
			setTimeout(this.winScreen,300);
			break;
			
		case STATUS_LOOSE:
			this.looseScreen();
			break;
		
		case STATUS_ENEMY_EXIT:
			this.exitScreen();
			break;
	}
}
