function rookMovement(x,y,color){
	opposite=color=="white"?"black":"white";
	//moving right
	for(i=x+1;i<8;i++){
		if(isEmpty(i,y))
			availableSquares.push(i+","+y);
		else{
			if(squareHasOpposingPiece(opposite,i,y))
				availableSquares.push(i+","+y);
			break;
		}
	}
	//moving left
	for(i=x-1;i>-1;i--){
		if(isEmpty(i,y))
			availableSquares.push(i+","+y);
		else{
			if(squareHasOpposingPiece(opposite,i,y))
				availableSquares.push(i+","+y);
			break;
		}
	}
	//moving up
	for(i=y-1;i>-1;i--){
		if(isEmpty(x,i))
			availableSquares.push(x+","+i);
		else{
			if(squareHasOpposingPiece(opposite,x,i))
				availableSquares.push(x+","+i);
			break;
		}
	}
	//moving down
	for(i=y+1;i<8;i++){
		if(isEmpty(x,i))
			availableSquares.push(x+","+i);
		else{
			if(squareHasOpposingPiece(opposite,x,i))
				availableSquares.push(x+","+i);
			break;
		}
	}
	clickedColor=color
}

function bishopMovement(x,y,color){
	opposite=color=="white"?"black":"white";
	//down-right
	for(i=1;((x+i<8) && (y+i<8));i++){
		if(isEmpty(x+i,y+i))
			availableSquares.push((x+i)+","+(y+i));
		else{
			if(squareHasOpposingPiece(opposite,x+i,y+i))
				availableSquares.push((x+i)+","+(y+i));
			break;
		}
	}
	//up-left
	for(i=1;((x-i>-1) && (y-i>-1));i++){
		if(isEmpty(x-i,y-i))
			availableSquares.push((x-i)+","+(y-i));
		else{
			if(squareHasOpposingPiece(opposite,x-i,y-i))
				availableSquares.push((x-i)+","+(y-i));
			break;
		}
	}
	//up-right
	for(i=1;((x+i<8) && (y-i>-1));i++){
		if(isEmpty(x+i,y-i))
			availableSquares.push((x+i)+","+(y-i));
		else{
			if(squareHasOpposingPiece(opposite,x+i,y-i))
				availableSquares.push((x+i)+","+(y-i));
			break;
		}
	}
	//down-left
	for(i=1;((x-i>-1) && (y+i<8));i++){
		if(isEmpty(x-i,y+i))
			availableSquares.push((x-i)+","+(y+i));
		else{
			if(squareHasOpposingPiece(opposite,x-i,y+i))
				availableSquares.push((x-i)+","+(y+i));
			break;
		}
	}
	clickedColor=color
}

function queenMovement(x,y,color){
	rookMovement(x,y,color);
	bishopMovement(x,y,color);
}

function knightMovement(x,y,color){
	opposite=color=="white"?"black":"white";
	knightcoords=new Array(1,2,-1,2,1,-2,-1,-2,2,1,2,-1,-2,-1,-2,1);
	for(i=0;i<knightcoords.length;i+=2){
		newx=x+knightcoords[i];
		newy=y+knightcoords[i+1];
		if((newx>-1&&newx<8&&newy>-1&&newy<8)//edges
			&&(isEmpty(newx,newy) 	//empty square
			|| squareHasOpposingPiece(opposite,newx,newy))) //square has opposing piece
			
			availableSquares.push(newx+","+newy);
	}
	clickedColor=color
}
function isEmpty(x,y){
	return getPieceByCoords(x,y)=="nothing" || getPieceByCoords(x,y)=="0"
}

function getAvailableMoves(x,y,piece){
	availableSquares=new Array();
	clickedPiece=piece;
	clickedX=x;
	clickedY=y;
	if(piece=="bpawn"){
		//block pawn if piece is ahead of it
		if(y<7){
			if(isEmpty(x,y+1)){
				availableSquares.push(x+","+(y+1));
				if(y==1 && isEmpty(x,y+2)){//allow 2 squares on first move
					availableSquares.push(x+","+(y+2));
				}
			}
			//look for diagonal movement if opposing piece is there
			if(x<7 && squareHasOpposingPiece('white',x+1,y+1))
				availableSquares.push((x+1)+","+(y+1));
			if(x>0 && squareHasOpposingPiece('white',x-1,y+1))
				availableSquares.push((x-1)+","+(y+1));
		}
		clickedColor='black'
	}else if(piece=="wpawn"){
		if(y>0){
			//block pawn if piece is ahead of it
			if(isEmpty(x,y-1)){
				availableSquares.push(x+","+(y-1));
				if(y==6 && isEmpty(x,y-2)){//allow 2 squares on first move
					availableSquares.push(x+","+(y-2));
				}
			}

			//look for diagonal movement if opposing piece is there
			if(x<7 && squareHasOpposingPiece('black',x+1,y-1))
				availableSquares.push((x+1)+","+(y-1));
			if(x>0 && squareHasOpposingPiece('black',x-1,y-1))
				availableSquares.push((x-1)+","+(y-1));
		}
		clickedColor='white'
	}else if(piece=='brook'){
		rookMovement(x,y,"black");
	}
	else if(piece=='wrook'){
		rookMovement(x,y,"white");
	}else if(piece=='bbishop'){
		bishopMovement(x,y,"black");
	}
	else if(piece=='wbishop'){
		bishopMovement(x,y,"white");
	}else if(piece=='bqueen'){
		queenMovement(x,y,"black");
	}
	else if(piece=='wqueen'){
		queenMovement(x,y,"white");
	}else if(piece=='bknight'){
		knightMovement(x,y,"black");
	}
	else if(piece=='wknight'){
		knightMovement(x,y,"white");
	}

	//highlight available squares
	for(i=0;i<availableSquares.length;i++){
		ax=availableSquares[i].split(",")[0];
		ay=availableSquares[i].split(",")[1];

		cell=getTDByCoords(ax,ay)
		cell.className='availableSquare';
	}
}