var startGame = 0;
var score, tonyTime, decTime, stop, noTonyUp, incTonyUp;
var hiScore, gameOver;

function init()
{
	NUM_ARRAY = 20;
	
	hiScore = document.getElementById ("hiscore");
	gameOver = document.getElementById ("gameover");
	topScore = document.getElementById ("topscore");
	hidePopups();
	document.forms.scoreboard.yourscore.value = "Wait";
	
	blockImg = new Image ();
	blockImg.src = "gfx/whack/block100.gif";
	unblockImg = new Image ();
	unblockImg.src = "gfx/whack/unblock100.gif";
	htopImg = new Image ();
	htopImg.src = "gfx/whack/hammertop100.gif";
	hhitImg = new Image ();
	hhitImg.src = "gfx/whack/hammerhit100.gif";
	hblankImg = new Image ();
	hblankImg.src = "gfx/whack/hammerblank100.gif";
	missedImg = new Image ();
	missedImg.src = "gfx/whack/missed100.gif";
	
	thisHammer = new Array (NUM_ARRAY);
	thisOverlay = new Array (NUM_ARRAY);
	
	for (i = 0; i < NUM_ARRAY; i++) {
		thisOverlay [i] = new Image ();
		thisHammer [i] = new Image ();
		}
	
	tonyUp = new Array (NUM_ARRAY);
	checked = new Array (NUM_ARRAY);
	
	checkComplete ();
}

function donowt ()
{
}

function checkComplete ()
{
if (blockImg.complete == false || unblockImg.complete == false || htopImg.complete == false || hhitImg.complete == false || missedImg.complete == false || hblankImg.complete == false) setTimeout ("checkComplete ()", 1000);
else {
	resetVars ();
	startGame = 1;
	document.getElementById ("startbutton").style.visibility = "visible";
	}
}

function resetVars ()
{
score = 0;
tonyTime = 2000;
decTime = 45;
stop = 1;
noTonyUp = 1;
incTonyUp = 0;

for (i = 0; i < NUM_ARRAY; i++) {
	thisOverlay [i].src = blockImg.src;
	thisHammer [i].src = hblankImg.src;
	tonyUp [i] = 0;
	checked [i] = 0;
	cmdText = "document.im" + i + ".src = blockImg.src";
	eval (cmdText);
	}
document.forms.scoreboard.yourscore.value = score;
}

function hit (number)
{

if (stop == 0 && tonyUp [number] == 1) {
	tonyUp [number] = 0;
	cmdText = "document.im" + number + ".src = hhitImg.src";
	eval (cmdText);
	thisOverlay [number].src = hhitImg.src;
	setTimeout ("unHit (" + number + ")", 500);
	score++;
	document.forms.scoreboard.yourscore.value = score;
	}
}

function unHit (number)
{
cmdText = "document.im" + number + ".src = blockImg.src";
eval (cmdText);
thisOverlay [number].src = blockImg.src;
thisHammer [number].src = hblankImg.src;
}

function popUpTony (number)
{
thisOverlay [number].src = unblockImg.src;
thisHammer [number].src = htopImg.src;
tonyUp [number] = 1;
checked [number] = 1;
cmdText = "document.im" + number + ".src = unblockImg.src";
eval (cmdText);
}

function randPopup ()
{
if (stop == 0) {

	if (incTonyUp++ == 50) {
		tonyTime = 2200 - (noTonyUp * 150);
		noTonyUp++;
		incTonyUp = 0;
		if (noTonyUp < 4) decTime = 60 - (15 * noTonyUp);
		else decTime = 15;
		}

	for (i = 0; i < noTonyUp; i++) {
		j = 0;
		do {
			thisTony = Math.floor (Math.random () * NUM_ARRAY);
			j++;
			}
		while ((checked [thisTony] == 1) && j < 10);

		if (j < 10) {
			popUpTony (thisTony);
			setTimeout ("checkMiss (" + thisTony + ")", 2000);
			if (tonyTime > (400 + 100*noTonyUp)) tonyTime -= decTime;
			}
		}
	setTimeout ("randPopup ()", tonyTime);
	}
}

function checkMiss (mNumber)
{
var scorestring;

if (stop == 0) {
	if (tonyUp [mNumber] == 1) {
		stop = 1;
		cmdText = "document.im" + mNumber + ".src = missedImg.src";
		eval (cmdText);
		thisHammer [mNumber].src = missedImg.src;
		thisOverlay [mNumber].src = missedImg.src;
//		setTimeout ('popupHiScores()', 2000);
		if (score > TopScore) {
			setTimeout ('popupTopScore()', 1000);
			scorestring = endgame(score);
			document.forms.topscore.tscore.value = score;
			document.forms.topscore.encscore.value = scorestring;
			}
		else if (score > BottomScore) {
			setTimeout ('popupHiScore()', 1000);
			scorestring = endgame(score);
			document.forms.hiscore.hscore.value = score;
			document.forms.hiscore.encscore.value = scorestring;
			}
		else {
			setTimeout ('popupGameOver()', 1000);
			document.forms.gameover.gameoverscore.value = score;
		}
//		endgame (score);
		}
	setTimeout ("checked [" + mNumber + "] = 0", 500);
	}
}

function popupHiScore()
{
	hiScore.style.visibility = "visible";
	document.forms.hiscore.name.focus();
}

function popupTopScore()
{
	topScore.style.visibility = "visible";
	document.forms.topscore.name.focus();
}

function popupGameOver()
{
	gameOver.style.visibility = "visible";
}

function hidePopups()
{
	topScore.style.visibility = "hidden";
	hiScore.style.visibility = "hidden";
	gameOver.style.visibility = "hidden";
	document.getElementById ("startbutton").style.visibility = "hidden";
	return true;
}	

function start ()
{
	if (startGame == 1) {
	//	init ();
		hidePopups();
		resetVars ();
		setTimeout ("randPopup ()", 1000);
		stop = 0;
	}
}

function stoppit ()
{
	stop = 1;
	hidePopups();
	document.forms.scoreboard.yourscore.value = "Stopped";
	startGame = 0;
	setTimeout("init()", 1000);
}

function endgame (yourscore)
{
	// alert ("Game over.  You scored " + yourscore);
	
	r1 = Math.floor (Math.random () * 16 + 75);
	r2 = Math.floor (Math.random () * 16 + 75);
	r3 = Math.floor (Math.random () * 16 + 75);
	r4 = Math.floor (Math.random () * 16 + 75);
	r5 = Math.floor (Math.random () * 16 + 75);
	
	if (yourscore < 10) score3digit = "0000" + yourscore;
	else if (yourscore < 100) score3digit = "000" + yourscore;
	else if (yourscore < 1000) score3digit = "00" + yourscore;
	else if (yourscore < 10000) score3digit = "0" + yourscore
	else score3digit = "" + yourscore;
	
	s1 = r1 - (score3digit.charCodeAt (0) - 48);
	s2 = r2 - (score3digit.charCodeAt (1) - 48);
	s3 = r3 - (score3digit.charCodeAt (2) - 48);
	s4 = r4 - (score3digit.charCodeAt (3) - 48);
	s5 = r5 - (score3digit.charCodeAt (4) - 48);
	
	c1 = (Math.floor ((s1 * r1) % 26)) + 65;
	c2 = (Math.floor ((s2 * r2) % 26)) + 65;
	c3 = (Math.floor ((s3 * r3) % 26)) + 65;
	c4 = (Math.floor ((s4 * r4) % 26)) + 65;
	c5 = (Math.floor ((s5 * r5) % 26)) + 65;
	
	scorestring = String.fromCharCode (c4, c5, r1, c2, s3, s4, s5, c1, s2, r3, r4,r5, s1, r2, c3);
	return scorestring;
}