
var timer;
var speed = 0;
var score = 0;
var level = 1;
var perLevel = 2*level;
var levelWait = 25000;
var xpos = 300;
var step = 8;
var dir = 0;
var sprite;
var screenArea;
var levelTimer;

var objArray = ["prezzie", "prezzie", "prezzie2","bomb", "yellow_snow"];

function updateScore(plus) {
	score = score + plus;
	document.getElementById('score').innerHTML = '<b>Score: </b>'+score;
}


function initSprites() {
	
		for (var num = 0; num <= (level+perLevel); num++) {

			var newPrezzie = document.createElement("img");
			newPrezzie.id = "prezzie"+num;

			newPrezzie.style.position = "absolute";
			newPrezzie.style.display = "block";
			newPrezzie.style.width = "32px";
			newPrezzie.style.height = "32px";
			screenArea.appendChild(newPrezzie);
			
			placeObject(newPrezzie.id, 0);

		}

}


function placeObject(obj, ypos) {

	prezzie = document.getElementById(obj);

		var random = Math.ceil(Math.random() * (objArray.length-1));
		prezzie.src =d+objArray[random]+ext;
		prezzie.className = objArray[random];
		ypos  = Math.random()*-800;+'px';
		ypos =  Math.round(ypos);
		ypos = ypos+level;
		prezzie.style.left = Math.random()*620;+'px';
		prezzie.style.top=ypos +'px';


}


function fallingStuff(obj) {
	prezzie = document.getElementById(obj);
	ypos =parseFloat(prezzie.style.top);
	ypos =  Math.round(ypos);
	ypos = ypos+(2);
	if(ypos > 350) {

		//collision detection
		var col = (sprite.offsetLeft - prezzie.offsetLeft);

		if(col> -25 && col < 25) {
			if(sprite.className == 'bite') {
					if(prezzie.className == 'bomb') {
						sprite.src = d+"snowman_boom"+ext;
						updateScore(-50);
					}
					else if(prezzie.className == 'yellow_snow') {
						sprite.src = d+"snowman_barf"+ext;
						updateScore(-10);
						}
					else if(prezzie.className == 'prezzie') {
						sprite.src = d+"snowman_eat"+ext;
						updateScore(10);
						}
					else if(prezzie.className == 'prezzie2') {
						sprite.src = d+"snowman_eat"+ext;
						updateScore(10);
					}

			}
			else {
					if(prezzie.className == 'bomb') {
						sprite.src = d+"snowman_boom"+ext;
						updateScore(-50);
					}
					else if(prezzie.className == 'yellow_snow') {
						sprite.src = d+"snowman_barf"+ext;
						updateScore(-50);
					}
					else {
						sprite.src = d+"snowman_bonk"+ext;
						updateScore(-5);
				}
			}

		}
		else {
			if(prezzie.className != 'bomb') {
				updateScore(-1);
			}
		}

		var random = Math.ceil(Math.random() * (objArray.length-1));
		prezzie.className = objArray[random];
		ypos  = Math.random()*-800;+'px';
		prezzie.style.left = Math.random()*620;+'px';
		prezzie.src = d+objArray[random]+ext;

	}

	
	prezzie.style.top=ypos +'px';
}



function moveChar(id, dist) {

		xpos=xpos+dist;
		if(xpos < 0 || xpos > 660) {
			return false;
		}
		else {
			obj=document.getElementById(id);
			obj.style.left=xpos +'px';
		}


}


function startMoving(key) {
	if (!key) {
		key = event;
		key.which = key.keyCode;
	}
 	switch (key.which) {
		case 39: // 					rightkey
			sprite.className = 'right';
			sprite.src = 'i/snowman_r'+ext;
			dir = 1;
			break;
		case 37: // 					leftkey
			sprite.className = 'left';
			sprite.src = 'i/snowman_l'+ext;
			dir = -1;
			break;
		case 38: // 					upkey
			dir = 0;
			sprite.className = 'bite';
			sprite.src = 'i/snowman_bite'+ext;
			break;
	}
}

function stopMoving(key) {
		dir = 0;
		sprite.className = '';
		sprite.src = 'i/snowman'+ext;
}

function mainLoop() {
	moveChar('snowman', (dir*step));

	for (var num = 0; num <= (level+perLevel); num++) {
		fallingStuff('prezzie'+num);
	}


	if(score > 600)
		endGame();
	else if(score < -150)
		endGame(); 
	else
		timer = setTimeout("mainLoop();",speed);

}


function initGame() {
// 		hide(loadingMessage)
		document.getElementById('loadingMessage').style.display = "none";
		document.getElementById('splashScreen').style.display = "none";
		document.getElementById('endGame').style.display = "none";

		score = 0;
		updateScore(0);

		//prime sprites

		initSprites();
		sprite = document.getElementById('snowman');

		//keyboard listener
		document.onkeydown = startMoving;
		document.onkeyup = stopMoving;

		//
		levelTimer = setTimeout("nextLevel()",levelWait);

		//and we're off
		mainLoop();
}


function nextLevel() {
		level++;
		clearScreen();
		initSprites();
		if(level < 5) {
			alertStatus();
			clearTimeout(levelTimer);
			levelTimer = setTimeout("nextLevel()",levelWait);
		}
		else {
			 endGame();
		}
}


function alertStatus() {
	var status = document.getElementById('status');
	status.style.display =  'block';
	status.innerHTML = 'Level '+level;
	fadeOut('status', 100);
}


function endGame() {
		level = 1;

		var verdict = 'Rubbish!';

		if(score < -100) {
			var verdict = 'Woeful!';
		}
		else if(score < 0 ) {
			var verdict = 'Rubbish!';
		}
		else if(score > 100 ) {
			var verdict = 'Try harder!';
		}
		else if(score > 300 ) {
			var verdict = 'Need more practice!';
		}
		else if(score > 500 ) {
			var verdict = 'Ha! Christmas will never be the same again!!';
		}

		document.getElementById('endGame').style.display = "block";
		var loadingMessageP = loadingMessage.getElementsByTagName("p")[0];
		loadingMessageP.innerHTML = loadingMessageP.innerHTML = "<strong>Nasty snowman verdict: "+verdict+"<br />Play again?</strong>";

		document.getElementById('loadingMessage').style.display = "block";
		clearTimeout(timer);
		clearTimeout(levelTimer);
		clearScreen();
}


function clearScreen() {
		for (var num = 0; num <= (level+perLevel); num++) {
			if(document.getElementById("prezzie"+num)) {
				var prezzie = document.getElementById("prezzie"+num);
				screenArea.removeChild(prezzie);
			}
			
		}
}

function startUp() {
		screenArea = document.getElementById('screenArea');

		var browser = identifyBrowser();

		if(browser == 'ie6') {
			ext = '.gif';
		}

		imageArray = ["i/loader.gif", "i/background_start.png", "i/background_game.png","i/background_gameover.png", "i/snowman"+ext, "i/snowman_l"+ext, "i/snowman_r"+ext, "i/snowman_bite"+ext, "i/snowman_bonk"+ext, "i/snowman_boom"+ext, "i/snowman_barf"+ext, "i/snowman_eat"+ext, "i/prezzie"+ext, "i/prezzie2"+ext, "i/bomb"+ext,"i/yellow_snow"+ext, "i/start.png"];

		preLoadImages();
}

window.onload = startUp;

function fadeOut(objId,opacity)  {
	obj = document.getElementById(objId);
	if (opacity > -20) {
		setOpacity(obj, opacity);
		opacity -= 10;
		fader = setTimeout("fadeOut('"+objId+"',"+opacity+")", 125);
	 }
	else {
		clearTimeout(fader);
	}
}

function setOpacity(obj, opacity) 
{
	opacity = (opacity == 100)?99.999:opacity;		// IE/Win
	obj.style.filter = "alpha(opacity:"+opacity+")";	// Safari<1.2, Konqueror
	obj.style.KHTMLOpacity = opacity/100;			// Older Mozilla and Firefox
	obj.style.MozOpacity = opacity/100;			// Safari 1.2, newer Firefox and Mozilla, CSS3
	obj.style.opacity = opacity/100;
}


