/**
Events methods
@module Events
**/
/**
Events methods
This is not actually a class, but a necessary convention to get YUIdoc to document standalone items.
@class Events
*/
/**
* chess board click event.
* @method click
* @param {Object} evt click event data
*/
function click(evt) {
var chessCoor = getChessCoordinates(evt);
if(selectedPiece != null && selectedPiece.color == board.sideToMove && board.sideToMove == board.side) {
if(selectedPiece.type == "Pawn" && selectedPiece.isPromotionMove(chessCoor)) {
if(selectedPiece.color == "white") {
$('#white-to-promote').fadeIn("fast");
} else {
$('#black-to-promote').fadeIn("fast");
}
$('.queen-promotion').click(clickPromote);
$('.rook-promotion').click(clickPromote);
$('.knight-promotion').click(clickPromote);
$('.bishop-promotion').click(clickPromote);
promotionCoor = chessCoor;
return;
}
var ms = selectedPiece.move(chessCoor.x, chessCoor.y, "none");
if(ms != null) {
var gameResult = "in progress";
var gameFinished = "none";
if(ms.isMate) {
gameResult = board.side;
gameFinished = "Checkmate";
}
if(ms.isStalemate) {
gameResult = "draw";
gameFinished = "Stalemate"
}
if(board.drawMoves >= 100) {
gameResult = "draw";
gameFinished = "Draw by 50 moves rule"
}
var res = submitMove(
game_id,
board.getFEN(),
getHTMLcharFromNotation(ms.move, selectedPiece.color),
ms.castling,
ms.enpassant,
board.drawMoves,
board.whiteCanCastleLong,
board.whiteCanCastleShort,
board.blackCanCastleLong,
board.blackCanCastleShort,
gameResult,
gameFinished
);
}
}
for(var i = 0; i < board.pieces.length; i++) {
if(board.pieces[i].X == chessCoor.x && board.pieces[i].Y == chessCoor.y) {
var piece = board.pieces[i];
if(selectedPiece != null && piece.ID == selectedPiece.ID) {
board.clearSelection();
selectedPiece = null;
return;
}
if(piece.color == board.sideToMove && board.sideToMove == board.side) {
selectedPiece = piece;
board.highlightSelectedPiece(piece);
}
return;
}
}
}
/**
* promotion panel click event.
* @method clickPromote
* @param {Object} evt click event data
*/
function clickPromote(evt) {
if(this.className == "queen-promotion") pc = "Q";
else if(this.className == "rook-promotion") pc = "R";
else if(this.className == "knight-promotion") pc = "N";
else if(this.className == "bishop-promotion") pc = "B";
else return;
var ms = selectedPiece.move(promotionCoor.x, promotionCoor.y, pc);
if(ms != null) {
var gameResult = "in progress";
var gameFinished = "none";
if(ms.isMate) {
gameResult = board.side;
gameFinished = "Checkmate";
}
if(ms.isStalemate) {
gameResult = "draw";
gameFinished = "Stalemate"
}
if(board.drawMoves >= 100) {
gameResult = "draw";
gameFinished = "Draw by 50 moves rule"
}
var res = submitMove(
game_id,
board.getFEN(),
getHTMLcharFromNotation(ms.move, selectedPiece.color),
ms.castling,
ms.enpassant,
board.drawMoves,
board.whiteCanCastleLong,
board.whiteCanCastleShort,
board.blackCanCastleLong,
board.blackCanCastleShort,
gameResult,
gameFinished
);
}
if(selectedPiece.color == "white") {
$('#white-to-promote').fadeOut("fast");
} else {
$('#black-to-promote').fadeOut("fast");
}
promotionCoor = null;
selectedPiece = null;
board.clearSelection();
}
/**
* offer a draw button click event
* @method offerDrawClick
*/
function offerDrawClick() {
$('#offer-a-draw').fadeOut('fast').promise().done(function(){
$('#cancel-a-draw').fadeIn('fast').css("display","inline-block");
drawOffer = board.sideToMove;
});
}
/**
* cancel offer a draw button click event
* @method cancelDrawClick
*/
function cancelDrawClick() {
$('#cancel-a-draw').fadeOut('fast').promise().done(function(){
$('#offer-a-draw').fadeIn('fast').css("display","inline-block");
drawOffer = "none";
});
}
/**
* accept a draw button click event
* @method acceptDrawClick
*/
function acceptDrawClick() {
$('#buttons').fadeOut("fast");
$('#opponent-draw-offer').fadeOut("fast");
finishGame("draw", "A draw was agreed");
submitResult("draw", "A draw was agreed");
}
/**
* resign button click event
* @method resignClick
*/
function resignClick() {
$('#buttons').fadeOut("fast");
if(board.side == "white") {
submitResult("black", "White resigns");
finishGame("black", "White resigns");
} else {
submitResult("white", "Black resigns");
finishGame("white", "Black resigns");
}
}
/**
* mouse hover over the board event
* @method mousemove
* @param {Object} evt click event data
*/
function mousemove(evt) {
var c = this;
var ct = c.getContext('2d');
ct.clearRect(0, 0, c.width, c.height);
var mousePos = getMousePos(c, evt);
var fieldSize = c.width / 8;
ct.beginPath();
ct.lineWidth="2";
ct.rect(mousePos.x * fieldSize, mousePos.y * fieldSize, fieldSize, fieldSize);
ct.stroke();
}
/**
* mouse leave the board event
* @method mouseleave
* @param {Object} evt click event data
*/
function mouseleave(evt) {
var c = this;
var ct = c.getContext('2d');
ct.clearRect(0, 0, c.width, c.height);
}