var loaded;

var images = new Array(
	'../checkers/client/images/beginning.png',
	'../checkers/client/images/logo.png',
	'../checkers/client/images/loop.png',
	'../checkers/client/images/name.png',
	'../checkers/client/images/bg_toplight.jpg',
	'../checkers/client/images/bg_bottomlight.jpg',
	'../checkers/client/images/windows.png',
	'../checkers/client/images/end.png',
	'../checkers/client/images/opponent.png',
	'../checkers/client/images/checker-0.png',
	'../checkers/client/images/checker-1.png',
	'../checkers/client/images/checker-3.png');


function img_load(){
	
	loaded++;
	
	if(loaded >= images.length-1){
		setTimeout("game.renderView()",1000);
		return 1;
	}
	

	if(loaded >0 ){
	if(document.images['pre_0'].complete)
		$("#begin").css("background-image",'url(../checkers/client/images/beginning.png)');
	else
		return 1;
	}
	

	if(loaded > images.length-5){
	$("#loop").animate({
		width: "156px"
		}, 100 , function(){$("#end").css("background-image",'url(../checkers/client/images/end.png)');} );
	return 1;
	}	
	
	$("#loop").animate({
		width: loaded*11+"px"
		}, 10 );
}

function setup(){
	
	loaded = 0;

    try {
        var div = document.createElement("div");
        var s = div.style;
        s.position = "absolute";
        s.top = s.left = 0;
        s.visibility = "hidden";
        document.body.appendChild(div);
        for (var i = 0; i < images.length; i++) 
        div.innerHTML += "<img name='pre_"+i+"' style = 'position:absolute;' src='" + images[i] + "' onload = 'img_load();' />";
    } catch(e) {
        // Error. Do nothing.
    }

	game = new Game();
	board = new Board();
}

function response(msg){

game.blocked = false;
var tmp_opp = "";
	
	switch(game.status){
	
			case STATUS_MULTI_INVITE:
			if(msg != "0"){
				game.upHide();
				if(msg == "1"){
					game.status = STATUS_MULTI_PLAY;
				}
				if(msg == "-1"){
					game.opponent = null;
					game.status = STATUS_MULTI_CHOOSE;
				}
				game.renderView();
			}
			break;
		
		case STATUS_MULTI_CHOOSE:
			if(msg.split('|')[0]=="list"){
					with(document.getElementById("invite")){
						if((options.length>0)&&(selectedIndex>=0)){
							tmp_opp = options[selectedIndex].text;
						}
					}

				$("#invite").html(msg.split('|')[1]);
				
					with(document.getElementById("invite")){
						if(tmp_opp!=""){
							for(var i=0; i<options.length; i++){
								if(options[i].text == tmp_opp)
									selectedIndex = i;
							}
						}
					}

			}
			if(msg.split('|')[0]=="invby"){
				game.opponent = msg.split('|')[1];
				game.status = STATUS_MULTI_DECIDE;
				game.renderView();
			}
			break;
			
		case STATUS_MULTI_WAIT:
			if(msg != "0"){
				if(msg == "-1"){
					game.status = STATUS_ENEMY_EXIT;
					game.renderView();
					break;
				}
				var moves = msg.split('&');
				if(moves[0].length>0){
					for(var i=0; i<moves.length; i++){
						var move = moves[i].split('|');
						board.select(move[0],move[1]);
						board.move(board.selected.x,board.selected.y,move[2],move[3]);
						board.prepareMultiJump();
						setTimeout(board.updateView,200);
					}
					board.switchTurn();
					if(board.gameover){
						game.status = STATUS_LOOSE;
						game.renderView();
					}
					else{
						game.status = STATUS_MULTI_PLAY;
					}
					
				}
			}
			break;

	}
}

function ok_click(){
	if(game.status == STATUS_MULTI_INVITE){
	game.opponent = null;
	game.status = STATUS_MULTI_CHOOSE;
	game.renderView();
	return 1;
	}
	
	if(game.status == STATUS_START){
		game.name = document.getElementById("login").value;
		if(game.name == "") return false;
		game.sendName(game.name);
		game.status = STATUS_MODE;
	}
	if(game.mode==MODE_MULTI&&game.status == STATUS_MULTI_CHOOSE){
		with(document.getElementById("invite")){
if(options[selectedIndex].value!=10000){
		game.opponent = options[selectedIndex].text;
		game.sendInvitation(options[selectedIndex].value);
}
else{
game.sendMode(MODE_SINGLE);
game.mode = MODE_SINGLE;
game.status = STATUS_SINGLE_PLAY;
game.leftHide();
game.renderView();
return 1;
}
		}
		game.status = STATUS_MULTI_INVITE;
	}
	if(game.status == STATUS_WIN || game.status == STATUS_LOOSE || game.status == STATUS_ENEMY_EXIT){
		game.status = STATUS_MODE;
		game.mode = null;
		game.opponent = null;
		game.turn = null;
		game.upHide();
	}
	
	if(game.status == STATUS_MULTI_PLAY || game.status == STATUS_SINGLE_PLAY || game.status == STATUS_SINGLE_WAIT || game.status == STATUS_MULTI_WAIT){
		board.clear();
		game.status = STATUS_LOOSE;
	}
	game.renderView();
}

function lb_click(){
	game.upHide();
	
	if(game.status == STATUS_MODE){
		game.sendMode(MODE_SINGLE);
		game.mode = MODE_SINGLE;
		game.status = STATUS_SINGLE_PLAY;
	}
	if(game.status == STATUS_MULTI_DECIDE){
		game.opponent = null;
		game.sendDecide(0);
		game.status = STATUS_MULTI_CHOOSE;
	}
	
	game.renderView();
}

function rb_click(){
	game.upHide();
	
	if(game.status == STATUS_MODE){
		game.sendMode(MODE_MULTI);
		game.mode = MODE_MULTI;
		game.status = STATUS_MULTI_CHOOSE;
	}
	if(game.status == STATUS_MULTI_DECIDE){
		game.sendDecide(1);
		game.status = STATUS_MULTI_WAIT;
	}
	
	game.renderView();
}

function click(x,y)
{
	if(game.turn!=board.turn){
		return;
	}
	if(board.selected!=board.getCell(x,y)){
		board.select(x,y);
	}
	if(board.getCell(x,y).empty&&board.selected!=null){
		var move = board.move(board.selected.x,board.selected.y,x,y);
		if(move){
			game.sendMove(move);
			setTimeout(board.updateView,200);
			if(board.checkMultiJump(x,y)){
				board.select(x,y);
			}
			else{
				game.status = STATUS_MULTI_WAIT;
				game.sendWait();
				board.switchTurn();
				if(board.gameover){
					game.status = STATUS_WIN;
					game.renderView();
				}
			}
		}
	}
}