<!--
// Whack a Mole Game - Copyright 2004 Forrest Coleman
//
var MOLE_NUMBER_OF_MOLES = 13;      // must agree with number of moles listed in body
var MOLE_TOTAL_TIME = 20 * 1000;
var MOLE_UPDATE_TIME = 333;
var MOLE_CHANCE_OF_OUT = 1 / MOLE_NUMBER_OF_MOLES;
var MOLE_CHANCE_OF_HIDING = 2 / MOLE_NUMBER_OF_MOLES;

var MOLE_STATE_HIDING = 0;
var MOLE_STATE_OUT = 1;
var MOLE_STATE_JUST_WHACKED = 2;
var MOLE_STATE_STILL_WHACKED = 3;

var MoleImages = new Array(4);
var MoleStates = new Array(MOLE_NUMBER_OF_MOLES);
var MoleScore = 0;
var MoleGameTimerID = "";
var MoleUpdateTimerID = "";
var MoleGameOn = new Boolean;

function MoleInitialize()
{
    MoleGameOn = false;

    MoleImages[MOLE_STATE_HIDING] = new Image;
    MoleImages[MOLE_STATE_OUT] = new Image;
    MoleImages[MOLE_STATE_JUST_WHACKED] = new Image;
    MoleImages[MOLE_STATE_STILL_WHACKED] = new Image;
    MoleImages[MOLE_STATE_HIDING].src = "/games/images/TruemanHiding.gif";
    MoleImages[MOLE_STATE_OUT].src = "/games/images/TruemanOut.gif";
    MoleImages[MOLE_STATE_JUST_WHACKED].src = "/games/images/TruemanWhacked.gif";
    MoleImages[MOLE_STATE_STILL_WHACKED].src = "/games/images/TruemanWhacked.gif";

    MoleUpdateScores();    
}

function MoleUpdateScores()
{
    document.MoleScoreForm.MoleScoreLabel.value = "Times Whacked: " + MoleScore;
}

function MoleUpdateBoard()
{
    for (i=0; i<MOLE_NUMBER_OF_MOLES; i++)
    {
        document["MoleImage"+i].src = MoleImages[MoleStates[i]].src;
    }
    MoleUpdateScores();
}

function MoleStartGame()
{
    document.MoleGameMenuForm.MoleStartGameButton.disabled = true;
    document.MoleGameMenuForm.MoleStartGameButton.value = "Get to Whacking!";
    MoleGameOn = true;
    MoleScore = 0;
    for (i=MOLE_NUMBER_OF_MOLES-1; i>=0; i--)
    {
        MoleStates[i] = MOLE_STATE_HIDING;
    }
    MoleUpdateBoard();
    clearTimeout(MoleGameTimerID);
    clearTimeout(MoleUpdateTimerID);
    MoleGameTimerID = setTimeout('MoleGameTimeOver()',MOLE_TOTAL_TIME);
    MoleUpdateTimerID = setTimeout('MoleUpdateTimer()',MOLE_UPDATE_TIME);
}

function MoleWhacked(index)
{
    if ((MoleGameOn) && (MoleStates[index] == MOLE_STATE_OUT))
    {
        MoleStates[index] = MOLE_STATE_JUST_WHACKED;
        MoleScore++;
        MoleUpdateScores()
        MoleUpdateBoard();
    }
}

function MoleUpdateTimer()
{
    if (MoleGameOn)
    {
        for (i=0; i<MOLE_NUMBER_OF_MOLES; i++)
        {
            switch (MoleStates[i])
            {
                case MOLE_STATE_HIDING:
                    if (Math.random() < MOLE_CHANCE_OF_OUT)
                    {
                        MoleStates[i] = MOLE_STATE_OUT;
                    }
                    break;

                case MOLE_STATE_OUT:
                    if (Math.random() < MOLE_CHANCE_OF_HIDING)
                    {
                        MoleStates[i] = MOLE_STATE_HIDING;
                    }
                    break;

                case MOLE_STATE_JUST_WHACKED:
                    MoleStates[i] = MOLE_STATE_STILL_WHACKED;
                    break;

                case MOLE_STATE_STILL_WHACKED:
                    MoleStates[i] = MOLE_STATE_HIDING;
                    break;
            }
        }
        MoleUpdateBoard();
        setTimeout('MoleUpdateTimer()',MOLE_UPDATE_TIME);
    }
}

function MoleGameTimeOver()
{
    clearTimeout(MoleUpdateTimerID);
    MoleGameOn = false;
    MoleUpdateBoard();

    var ScoreComment = "Game Over!\n\nYou whacked Terry Trueman " + MoleScore + " times in " + MOLE_TOTAL_TIME / 1000 + " seconds";
    if (MoleScore > 30)
    {
        for (i=MOLE_NUMBER_OF_MOLES-1; i>=0; i--)
        {
            MoleStates[i] = MOLE_STATE_JUST_WHACKED;
        }
        MoleUpdateBoard();
        ScoreComment += "!\n\nTBF Live is saved!";
        MoleUpdateScores();
    }
    else
    {
        ScoreComment += ".\n\nTBF Live still needs your help.  Try again!";
        for (i=MOLE_NUMBER_OF_MOLES-1; i>=0; i--)
        {
            MoleStates[i] = MOLE_STATE_OUT;
        }
        MoleUpdateBoard();
    }

    window.alert(ScoreComment);

    document.MoleGameMenuForm.MoleStartGameButton.disabled = false;
    document.MoleGameMenuForm.MoleStartGameButton.value = "Start New Game";
}

// -->

