var BOARD_ID = "#board-table";
var ROWS = 10;
var COLS = 10;

var counter = 1;

function getMask(pRow, pCol) {
    var row = Number(pRow);
    var col = Number(pCol);
    var cols = new Array();
    var offsets = [[-2,1],[-1,2],[1,2],[2,1],[2,-1],[1,-2],[-1,-2],[-2,-1]];
    for(var i=0; i<offsets.length; i++) {
        var offset = offsets[i];
        var newRow = row-offset[0];
        var newCol = col-offset[1];
        if(newRow >= 0 && newRow < ROWS && newCol >= 0 && newCol < COLS && !$(BOARD_ID + " td[row="+newRow+"][col="+newCol+"]").hasClass('selected'))
            cols.push([newRow, newCol]);
    }
    return cols;
}

function youWon() {
    $("#won-msg").show();
}
function youLost() {
    $("#lost-msg").show();
}

function hasWon() {
    return $(BOARD_ID + " td.selected").length == ROWS*COLS;
}
function hasLost() {
    return $(BOARD_ID + " td.selectable").length == 0 && !hasWon();
}

function cellClick() {
    if(!$(this).hasClass('selectable'))
        return;
    
    $(BOARD_ID + ' td').removeClass('selectable').removeClass('highlighted');
    
    var selectables = getMask($(this).attr('row'), $(this).attr('col'));
    for(var i=0; i<selectables.length; i++) {
        var selectable = selectables[i];
        $(BOARD_ID + " td[row="+selectable[0]+"][col="+selectable[1]+"]").addClass('selectable');
    }
    $(this).addClass('selected');
    
    if(hasLost())
        youLost();
    else if(hasWon())
        youWon();
}

function createBoard(boardId, numCols, numRows) {
    var table = $(boardId);
    counter = 1;
    table.empty();
    var rows;
    for(var i=0; i<numRows; i++) {
        var row = $("<tr></tr>").attr('row', i);
        for(var j=0; j<numCols; j++) {
            var col = $("<td></td>").attr('row', i).attr('col', j).addClass('selectable');
            col.click(cellClick);
            row.append(col);
        }
        table.append(row);
    }
}

function startBoxmaster() {
    createBoard(BOARD_ID, 10,10);
    $("#won-msg").hide();
    $("#lost-msg").hide();
}

$(document).ready(function() {
    startBoxmaster();
    
    $(".replay").click(function() {
        startBoxmaster();
    });
});
