// Created by Philipp Lenssen, GamesfortheBrain.com

var board = new Array();
var g_max = 9;
var g_highlighted = false;
var g_hiX = -1;
var g_hiX = -1;
var g_inited = false;

function init()
{
    var layout = "" +
            "........." +
            "...ooo..." +
            "...ooo..." +
            ".ooooooo." +
            ".ooo_ooo." +
            ".ooooooo." +
            "...ooo..." +
            "...ooo..." +
            ".........";

    for (var n = 0; n < g_max; n++) {
        board[n] = new Array();
    }

    var i = 0;
    for (var y = 0; y < g_max; y++) {
        for (var x = 0; x < g_max; x++) {
            board[x][y] = layout.substring(i, i + 1);
            i++;
        }
    }
    g_inited = true;
}

function setPiece(x, y, v)
{
    var src = (v == "o") ? "piece" : "blank";
    setImg(x, y, src);
}

function clickPiece(x, y)
{
    if (g_inited)
    {
        if (g_highlighted && g_hiX == x && g_hiY == y) {
            lowlightPiece(x, y);
        }
        else if (g_highlighted && board[x][y] == "o") {
            lowlightPiece(g_hiX, g_hiY);
            highlightPiece(x, y);
        }
        else if (!g_highlighted) {
            highlightPiece(x, y);
        }
        else {
            if ( handleMove(g_hiX, g_hiY, x, y) ) {
                showPiecesLeft();
                g_hiX = -1;
                g_hiY = -1;
                g_highlighted = false;
            }
        }
    }
}

function showPiecesLeft()
{
    var piecesLeft = 0;
    for (var y = 0; y < g_max; y++) {
        for (var x = 0; x < g_max; x++) {
            if (board[x][y] == "o") {
                piecesLeft++;
            }
        }
    }

    var elm = document.getElementById("piecesLeft");
    var msg = piecesLeft;
    if (piecesLeft == 1) {
        msg += " <strong>(You mastered the game, congratulations!)</strong>";
    }

    elm.innerHTML = msg;
}

function handleMove(xOld, yOld, xNew, yNew)
{
    var didMove = false;
    var killX = -1;
    var killY = -1;

    var successfullJumpToLeft = (xNew == xOld - 2 && yOld == yNew && board[xOld - 1][yOld] == "o" && board[xNew][yNew] == "_");
    var successfullJumpToTop = (yNew == yOld - 2 && xOld == xNew && board[xOld][yOld - 1] == "o" && board[xNew][yNew] == "_");
    var successfullJumpToRight = (xNew == xOld + 2 && yOld == yNew && board[xOld + 1][yOld] == "o" && board[xNew][yNew] == "_");
    var successfullJumpToBottom = (yNew == yOld + 2 && xOld == xNew && board[xOld][yOld + 1] == "o" && board[xNew][yNew] == "_");

    if (successfullJumpToLeft) { killX = xOld - 1; killY = yOld; }
    else if (successfullJumpToTop) { killX = xOld; killY = yOld - 1; }
    else if (successfullJumpToRight) { killX = xOld + 1; killY = yOld; }
    else if (successfullJumpToBottom) { killX = xOld; killY = yOld + 1; }

    if (killX != -1 && killY != -1) {

        board[xOld][yOld] = "_";
        setImg(xOld, yOld, "blank");

        var img = document.getElementById("x" + xOld + "y" + yOld);
        img.style.MozOpacity = .95;
        img.style.filter = "alpha(opacity=95)";

        board[xNew][yNew] = "o";
        setImg(xNew, yNew, "piece");

        board[killX][killY] = "_";
        setImg(killX, killY, "blank");

        didMove = true;
    }

    return didMove;
}

function highlightPiece(x, y)
{
    var img = document.getElementById("x" + x + "y" + y);
    img.style.MozOpacity = .5;
    img.style.filter = "alpha(opacity=50)";
    g_highlighted = true;
    g_hiX = x;
    g_hiY = y;
}

function lowlightPiece(x, y)
{
    var img = document.getElementById("x" + x + "y" + y);
    img.style.MozOpacity = .95;
    img.style.filter = "alpha(opacity=95)";
    g_highlighted = false;
    g_hiX = -1;
    g_hiY = -1;
}

function setImg(x, y, src)
{
    var img = document.getElementById("x" + x + "y" + y);
    img.src = src + ".gif";
}
