var sprites = new Array();
var g_level = 1;
var g_maxLevel = 1;
var g_inited = false;
var g_timeout = 0;
var g_maxX = 300;
var g_maxY = 350;
var g_spriteCounter = 0;
var g_spritesPerLevel = -1;
var g_countdown = 0;
var g_overrideSubmit = true;

function handleSubmit()
{
    if (g_overrideSubmit) {
        var elmGuess = document.getElementById("guess");
        var guess = elmGuess.value;
        elmGuess.value = "";
        killSpriteIf(guess);
    }
}

function killSpriteIf(guess)
{
    for (var i = 1; i <= g_spriteCounter; i++) {
        if (sprites[i].alive && sprites[i].ref.innerHTML == guess) {
            sprites[i].alive = false;
            addSprite();
        }
    }
}

function showLevel()
{
    var elm = document.getElementById("level");
    elm.innerHTML = g_level;

    var elmForm = document.getElementById("formLevel");
    elmForm.value = g_level;
}

function debug(s)
{
    var elm = document.getElementById("debug");
    elm.innerHTML = s;
}

function move()
{
    for (var i = 1; i <= g_spriteCounter; i++)
    {
        if (sprites[i].alive) {
            sprites[i].x += sprites[i].speedX;
            sprites[i].y += sprites[i].speedY;

            if (sprites[i].y > g_maxY) {
                sprites[i].alive = false;
                g_overrideSubmit = false;
                document.forms.mainForm.submit();
            }
        }
        drawSprite(sprites[i]);
    }

    g_timeout = setTimeout("move()", 30);
}

function addSprite()
{
    switch (++g_spriteCounter)
    {
        case 1 * g_spritesPerLevel:
        case 2 * g_spritesPerLevel:
        case 3 * g_spritesPerLevel:
        case 4 * g_spritesPerLevel:
        case 5 * g_spritesPerLevel:
        case 6 * g_spritesPerLevel:
        case 7 * g_spritesPerLevel:
        case 8 * g_spritesPerLevel:
            g_level++;
            showLevel();
            break;

        case 9 * g_spritesPerLevel:
            g_level++;
            showLevel();
            alert("You won, congratulations!");
            break;
    }

    var x = rand(10, g_maxX - 120);
    var y = -30;
    var speedX = 0;
    var speedY = g_level * .75;

    sprites[g_spriteCounter] = new Sprite(x, y, speedX, speedY, 150, 20, "sprite" + g_spriteCounter);
}

function drawSprite(sprite)
{
    sprite.ref.style.left = sprite.x + "px";
    sprite.ref.style.top = sprite.y + "px";
    sprite.ref.style.display = (sprite.alive) ? "block" : "none";
}

function Sprite(x, y, speedX, speedY, sizeX, sizeY, sId)
{
    this.x = x;
    this.y = y;
    this.speedX = speedX;
    this.speedY = speedY;
    this.sizeX = sizeX;
    this.sizeY = sizeY;
    this.alive = true;

    this.ref = document.getElementById(sId);

    var elmLast = document.getElementById("lastWord");
    elmLast.value = this.ref.innerHTML;
}

function rand(min, max)
{
    return Math.round( Math.random() * ( max - min ) ) + min;
}

