var didInit = false;

var pipesMax = 15;
var g_blogMaxX = 8;
var g_blogMaxY = 5;
var g_blockSize = 81;

var pipeOpen = new Array();
var iUp = 0;
var iRight = 1;
var iDown = 2;
var iLeft = 3;
var tile = new Array();

var maxStars = 8;
var starsAnimation = 0;
var starsAnimationEnd = 80;
var star = new Array();

function initPipes()
{
    initPipeData();
    initTileCache();
    initStars();
    didInit = true;
}

function initStars()
{
    for (var i = 0; i < maxStars; i++) {
        star[i] = new Sprite();
    }
}

function initTileCache()
{
    for (var x = 0; x < g_blogMaxX; x++) {
        tile[x] = new Array();
        for (var y = 0; y < g_blogMaxY; y++) {
            tile[x][y] = 0;
            var elm = document.getElementById("tile_" + x + "_" + y);
            if (elm) {
                tile[x][y] = getImageNumber(elm);
            }
        }
    }
}

function initPipeData()
{
    for (var i = 0; i < pipesMax; i++) {
        pipeOpen[i] = new Array();
        pipeOpen[i][iUp] = false;
        pipeOpen[i][iRight] = false;
        pipeOpen[i][iDown] = false;
        pipeOpen[i][iLeft] = false;
    }

    pipeOpen[1][iUp] = true;
    pipeOpen[1][iDown] = true;

    pipeOpen[2][iLeft] = true;
    pipeOpen[2][iRight] = true;

    pipeOpen[3][iLeft] = true;
    pipeOpen[3][iDown] = true;

    pipeOpen[4][iLeft] = true;
    pipeOpen[4][iUp] = true;

    pipeOpen[5][iUp] = true;
    pipeOpen[5][iRight] = true;

    pipeOpen[6][iRight] = true;
    pipeOpen[6][iDown] = true;

    pipeOpen[7][iLeft] = true;
    pipeOpen[7][iUp] = true;
    pipeOpen[7][iRight] = true;

    pipeOpen[8][iUp] = true;
    pipeOpen[8][iRight] = true;
    pipeOpen[8][iDown] = true;

    pipeOpen[9][iLeft] = true;
    pipeOpen[9][iRight] = true;
    pipeOpen[9][iDown] = true;

    pipeOpen[10][iLeft] = true;
    pipeOpen[10][iUp] = true;
    pipeOpen[10][iDown] = true;

    pipeOpen[11][iDown] = true;

    pipeOpen[12][iLeft] = true;

    pipeOpen[13][iUp] = true;

    pipeOpen[14][iRight] = true;
}

function didWin()
{
    var allOk = true;
    for (var x = 0; x < g_blogMaxX && allOk; x++) {
        for (var y = 0; y < g_blogMaxY && allOk; y++) {
            if ( !pipeIsOk(x, y) ) {
                allOk = false;
                // var elm = document.getElementById("tile_" + x + "_" + y);
                // hoverTile(elm);
                break;
            }
        }
    }
    return allOk;
}

function pipeIsOk(x, y)
{
    var isOk = true;

    var i = getPipeNumber(x, y);
    var leftSide = getPipeNumber(x - 1, y);
    var rightSide = getPipeNumber(x + 1, y);
    var upSide = getPipeNumber(x, y - 1);
    var downSide = getPipeNumber(x, y + 1);

    if (
            (pipeOpen[i][iLeft] && !pipeOpen[leftSide][iRight]) ||
            (pipeOpen[i][iUp] && !pipeOpen[upSide][iDown]) ||
            (pipeOpen[i][iRight] && !pipeOpen[rightSide][iLeft]) ||
            (pipeOpen[i][iDown] && !pipeOpen[downSide][iUp])
            ) {
        isOk = false;
    }
    return isOk;
}

function setPipeNumber(x, y, i, elmImg)
{
    tile[x][y] = i;
    elmImg.src = "image/" + i + ".png";
}

function getPipeNumber(x, y)
{
    var n = 0;
    if (x >= 0 && x < g_blogMaxX && y >= 0 && y < g_blogMaxY) {
        n = tile[x][y];
    }
    return n;
}

function getImageNumber(elmImg)
{
    var parts = elmImg.src.split("/");
    var filename = parts[parts.length - 1];
    var name_extension = filename.split(".");
    return name_extension[0];
}

function hoverTile(elm)
{
    if (didInit) {
        var opacity = 60;
        elm.style.MozOpacity = "." + opacity;
        elm.style.filter = "alpha(opacity=" + opacity + ")";
    }
}

function unhoverTile(elm)
{
    if (didInit) {
        elm.style.MozOpacity = 1;
        elm.style.filter = "alpha(opacity=100)";
    }
}

function getRandomInt(min, max)
{
    return Math.floor( ( (max + 1 - min) * Math.random() ) + min );
}
