$.namespace("game");
$.namespace("player.event");

/**
 * TODO: move display text into multi-language resource
 */
// utilities
Array.prototype.remove = function(from, to) {
	// Array Remove - By John Resig (MIT Licensed)
	var rest = this.slice((to || from) + 1 || this.length);
	this.length = from < 0 ? this.length + from : from;
	return this.push.apply(this, rest);
};

// game logic
game = {
	score : 0,
	hiScore : 0,
	lives : 3,
	paused : false,
	level : 0,
	levelUp : false,
	levelScoreInc : 1000,
	nextLevelUpScore: 1000,
	init : function() {
		$("#loading").remove();
		game.addEvents();
		game.createHeader();
		game.ui.startPosition();
		game.ui.Controller.init(game.ui.Controller.gameInterval);
	},
	addEvents : function() {
		game.addPauseEvent();
		game.addGlowTouch();
		game.addMoveEvents();
		document.onkeypress = player.event.keyDelegate;
		document.onkeyup = function() {
			if (game.ui.Player.scale < 0 || game.ui.Player.scale >= game.ui.Player.scaleLimit) {
				if (game.ui.Player.scale >= game.ui.Player.scaleLimit) {
					$("#player").attr("src", "img/player_near_explode_2.png");
				}
				else {
					$("#player").attr("src", "img/player_near_explode.png");
				}
			} else {
				if (game.lives > 0) $("#player").attr("src","img/player_move.png");	
			}
		}; // end document.onkeyup
	}, // end addEvents()
	addMoveEvents : function() {
		$("#controls li.left").mouseover(function(e) {
			player.event.move = "LEFT";
			e.preventDefault();
		}).click(function() {
			void(0);
		});
		
		$("#controls li.right").mouseover(function(e) {
			player.event.move = "RIGHT";
			e.preventDefault();
		}).click(function() {
			void(0);
		});
		
		$("#controls li").mouseout(function() {
			player.event.move = "";
		}).click(function() {
			void(0);
		});
	},
	addGlowTouch : function() {
		$("body").bind("click", function(e) {
			game.ui.setPosition($(".glow"), { x : e.pageX-44, y : e.pageY-44 });
			
			$(".glow").fadeIn(200, function(e) {
				$(this).fadeOut(200);
			});
		});
		
	},
	addPauseEvent : function() {
		$("#pausepanel").toggle(function() {
			game.pause();
		},
		function() {
			game.unPause();
		});
	},
	createHeader : function() {
		$('<div id="lives"><span>'+this.lives+'<span></div>').appendTo("#content");
		$('<div id="score"><span>'+this.score+'<span></div>').appendTo("#content");
	},
	updateHeader : function() {
		$("#score span").stop().animate({ fontSize : "45px" }, 150, function() {
			$(this).css({ color: "#fff" });	
		}).animate({ fontSize : "30px" }, 250, function() {
			$(this).css({ color: "" });
			$("#score span").text(this.score);
		}); // end $("#score span")
		
		$("#score span").text(this.score);
		// update lives
		$("#lives span").text(this.lives);
	},
	checkLife : function() {
		if (game.lives <= 0) {
			
			if (game.ui.Player.scale >= game.ui.Player.scaleLimit) {
				$("#player").animate({
						height: game.ui.Player.height*4 + "px",
						width: game.ui.Player.width*4 + "px",
						top:  "" + (game.ui.content.height / 2) - (game.ui.Player.height*4/2) + "px",
						left:  "" + (game.ui.content.width / 2) - (game.ui.Player.width*4/2) + "px"
					}
				, 300, function() {
					$(this).attr("src","img/explosion.gif").fadeOut(1000);
					$("#shadow").fadeOut(1000);
				});
			} else {
				$("#player").attr("src","img/explosion.gif").fadeOut(1000, function() {
					$("#shadow").fadeOut(1000);
				});
			}
		// end game thread
		clearInterval(game.ui.Controller.gameThread);
		game.gameOver();
		} // if (game.lives <= 0)		
	}, // end checkLife()
	gameOver : function() {
		$('<button id="playagain" class="primary">Play Again?</button>').appendTo("#content");
		$("."+game.ui.Token.PLUS+", ."+game.ui.Token.MINUS+", ."+game.ui.Token.STAR+", ."+
			game.ui.Token.BOMB).fadeOut("slow");
		// centre button
		var posX = Math.round((game.ui.content.width / 2) - ($("#playagain").width() / 2)) - 12;
		var posY = Math.round((game.ui.content.height /2) - ($("#playagain").height() /2));
		game.ui.setPosition($("#playagain"), { x : posX, y : posY }); 
		// save hiScore
		game.hiScore = game.score;
		$("#playagain").bind("click", function() {
			game.resetGame();
			$("#player").attr("src","img/player_move.png").show();
			$("#shadow").show();
			game.init();
		});
	}, // end gameOver()
	resetGame : function() {
		// reset main game variables
		game.score = 0;
		game.lives = 3;
		game.ui.Controller.tokenCounter = 0;
		game.ui.Controller.tokens = [];
		game.ui.Controller.gameInterval = 50;
		game.ui.Controller.gameThread = null;
		game.ui.Player.rotation = 360;
		game.ui.Player.scale = 0;
		game.ui.Player.height = game.ui.Player.origHeight; 
		game.ui.Player.width = game.ui.Player.origWidth;
		game.ui.Controller.rowCounter = 0;
		game.level = 0;
		game.levelUp = false;
		game.nextLevelUpScore = 100;
		game.levelScoreInc = game.nextLevelUpScore;
//		game.ui.Player.height = 63; 
//		game.ui.Player.width = 63;
		$("#pausepanel").unbind("click");
		$("#player, #shadow").removeAttr("style");
		$("#player, #shadow").attr("height", game.ui.Player.height)
		.attr("width", game.ui.Player.width).css({
			top : Math.round((game.ui.content.height - game.ui.Player.height)) + "px"
		}).fadeIn("quick");
		$("#lives, #score, #playagain, ."+game.ui.Token.PLUS+", ."+game.ui.Token.MINUS+
			", ."+game.ui.Token.STAR+", ."+game.ui.Token.BOMB).replaceWith("");
	}, // end resetGame()
	unPause : function() {
		$("#content, ."+game.ui.Token.PLUS+", ."+game.ui.Token.MINUS+
			", ."+game.ui.Token.STAR+", ."+game.ui.Token.BOMB).css({
			opacity : "1"
		});
		$("#paused").remove();
		game.paused = false;
	}, // end game.unPause()
	pause : function() {
		//alert("!!!" + game.lives +" "+game.paused);
		if (game.lives <= 0) return;
		
		$("#content, ."+game.ui.Token.PLUS+", ."+game.ui.Token.MINUS+
			", ."+game.ui.Token.STAR+", ."+game.ui.Token.BOMB).css({
			opacity : "0.5"
		});
		$('<button id="paused" class="primary">Paused</button>').appendTo("body");
		var posX = Math.round((game.ui.content.width / 2) - ($("#paused").width() / 2)) - 12;
		var posY = Math.round((game.ui.content.height /2) - ($("#paused").height() /2));
		game.ui.setPosition($("#paused"), { x : posX, y : posY }); 
		$("#paused").bind("click", function() {
			game.unPause();
		});
		game.paused = true;
	} // end game.pause()
} // end game

// game display and events
game.ui = {
	// content boundaries - used to mange display area
	content : {
		height : $("#content").height(),
		width: $("#content").width()
	},
	// get the distance between two points
	getDistance : function(target, point) {
		//caculate distance from centre
		var lenX = target.x - point.x;
		var lenY = target.y - point.y;
		var distance = Math.sqrt((lenX*lenX) + (lenY * lenY));
		
		return distance;
	},
	Player : {
		rotation : 360,
		PosX : null,
		PosY : null,
		origHeight : $("#player").height(),
		origWidth : $("#player").width(),
		height : $("#player").height(),
		width : $("#player").width(),
		speed : 10,
		scale : 0,
		scaleFactor : 5,
		scaleLimit : 60,
		update : function() {
			// scale player size
			 $("#player, #shadow").attr("height", (game.ui.Player.height + game.ui.Player.scale))
			 .attr("width", (game.ui.Player.width + game.ui.Player.scale));
		},
		detect : function(scaleType) {
			var newPlayerWidth = null;
			//console.log(game.ui.Token.PLUS);
			switch (scaleType) {
				case game.ui.Token.PLUS :
					game.ui.Player.scale += game.ui.Player.scaleFactor;
					if (game.ui.Player.scale >= game.ui.Player.scaleLimit && game.lives > 0) {
						$("#player").fadeOut("fast", function() {
							$(this).fadeIn("fast");
							if (game.lives > 1) game.ui.Player.resetSize();
							$("#player").attr("src","img/player_miss.png");
							game.lives--;
						});
					}
					game.ui.Player.update();
				break;
				case game.ui.Token.MINUS :
					game.ui.Player.scale -= game.ui.Player.scaleFactor;
					if (game.ui.Player.scale < 0 && game.lives > 0) {
						$("#player").fadeOut("fast", function() {
							$(this).fadeIn("fast");
							game.ui.Player.resetSize();
							$("#player").attr("src","img/player_miss.png");
							game.lives--;
						});
					}
					game.ui.Player.update();	
				break;
				case game.ui.Token.BOMB :
					game.lives = 0;
				break;
				default : 
					// implement;
			} // end switch
			
			newPlayerWidth = $("#player").attr("height");
				
			// too small or too big
			if (game.ui.Player.scale >= (game.ui.Player.scaleLimit - game.ui.Player.scaleFactor*2)) {
				if (game.ui.Player.scale >= game.ui.Player.scaleLimit) {
					$("#player").attr("src","img/player_near_explode_2.png");
				} else {
					$("#player").attr("src","img/player_near_explode.png");
				}
			}
			
			// adjust position
			$("#player, #shadow").css({
				top : (game.ui.Player.posY - game.ui.Player.scale) + "px"
			});
			// adjust position - right handside
			if ((game.ui.Player.posX + newPlayerWidth) > game.ui.content.width) {
				$("#player, #shadow").css({
					left: (game.ui.content.width - newPlayerWidth) + "px"
				});
			}
			
			game.ui.Player.reposition();
		}, // end detect()
		resetSize : function() {
			game.ui.Player.scale = 0;
			game.ui.Player.height = game.ui.Player.origHeight; 
			game.ui.Player.width = game.ui.Player.origWidth;
			game.ui.Player.reposition();
			game.ui.Player.update();
		}, // end resetSize
		reposition : function() {
			$("#player, #shadow").css({
				top : (game.ui.Player.posY - game.ui.Player.scale) + "px", 
				left : game.ui.Player.posX + "px"
			});
		} // end reposition
	} // end game.ui.Player
};// end game.ui.Player

game.ui.startPosition = function() {
	// centre player
	game.ui.Player.posX = Math.round((game.ui.content.width / 2) - (game.ui.Player.width / 2));
	game.ui.Player.posY = Math.round((game.ui.content.height - game.ui.Player.height));
	game.ui.setPosition($("#player, #shadow"), { x : game.ui.Player.posX, y : game.ui.Player.posY });
};

game.ui.setPosition = function(elem, point) {
	$(elem).css({ top: point.y + "px", left: point.x + "px" });
};

// player display and events
player.event.keyDelegate = function(e) {
	if (game.lives <= 0) return;
	
	var KEY_LEFT = 44; // '<' key
	var KEY_RIGHT = 46; // '>' key
	var KEY_JUMP = 32; // '<space>' key
	var KEY_SPECIAL = 0; // unassigned
	
   	e = e || window.event;
    var pressedKey = e.which || e.keyCode;
    
	switch (pressedKey) {
			case KEY_LEFT :
				player.event.moveLeft();
			break;
			case KEY_RIGHT :
				player.event.moveRight();
			break;
			case KEY_JUMP :
				// implement
			break;
			case KEY_SPECIAL :
				// implement
			break;
			default : 
				//SF.Homepage.Panel.slideDown(this);
		} // end switch
} // end player.event.keyDelegate

player.event.move = "";

player.event.touch = function() {
	if (player.event.move == "LEFT") {
		player.event.moveLeft();
	}
	if (player.event.move == "RIGHT") {
		player.event.moveRight();
	}
}
	
// Player movement
player.event.moveLeft = function() {
	if (game.ui.Player.posX > 0) { 
		game.ui.Player.posX = game.ui.Player.posX - game.ui.Player.speed;
	}
	// rotate player in safari
	$("#player").attr("style", "-webkit-transform: rotate("+ (game.ui.Player.rotation+100 + (game.ui.Player.posX*2)) +"deg);");
	$("#player, #shadow").css({
		top : (game.ui.Player.posY - game.ui.Player.scale) + "px", 
		left : game.ui.Player.posX + "px"
	});
	
	if (game.ui.Player.scale >= game.ui.Player.scaleLimit) {
		$("#player").attr("src","img/player_inflate_left.png");
	} else {
		$("#player").attr("src","img/player_left.png");
	}
}; // end player.event.moveLeft

player.event.moveRight = function() {
	if (game.ui.Player.posX < (game.ui.content.width - (game.ui.Player.width + game.ui.Player.scale)) ) { 
		game.ui.Player.posX = game.ui.Player.posX + game.ui.Player.speed;
	}
	// rotate player in safari
	$("#player").attr("style", "-webkit-transform: rotate("+ (0+100 + (game.ui.Player.posX*2)) +"deg);");
	$("#player, #shadow").css({
		top : (game.ui.Player.posY - game.ui.Player.scale) + "px", 
		left : game.ui.Player.posX + "px"
	});
	
	if (game.ui.Player.scale >= game.ui.Player.scaleLimit) {
		$("#player").attr("src","img/player_inflate_right.png");
	} else {
		$("#player").attr("src","img/player_right.png");
	}
}; // end player.event.moveRight

// token events and display
game.ui.Token = function(name, type, bonus, point, speed) {
	var name = name;
	var type = type;
	var bonus = bonus;
	var x = point.x;
	var y = point.y;
	var speed = speed;
	var isFalling = true;
	
	// static properties
	game.ui.Token.PLUS = "plus";
	game.ui.Token.MINUS = "minus";
	game.ui.Token.STAR = "star";
	game.ui.Token.BOMB = "bomb";
	
	// add token
	$('<div class="'+ type +' '+ name +'"></div>').insertAfter("#content");
	var tokenRef = $("."+name);
	game.ui.setPosition($(tokenRef), { x : x, y : y }); 
	
	return {
		getName : function() {
			return name;
		},
		getX : function() {
			return x;	
		},
		getY : function() {
			return y;
		},
		setX : function(newX) {
			x = newX;	
		},
		setY : function(newY) {
			y = newY;
		},
		getSpeed : function() {
			return speed;
		},
		isFalling : function() {
			return isFalling;
		},
		hit : function() {
			var playerHeight = $("#player").height();
			var playerSize = (playerHeight/2);
			var playerPoint = {
				x: game.ui.Player.posX + playerSize/2,
				y : game.ui.Player.posY 
			}
			/*
			if (	
					
					x <= game.ui.Player.posX + (playerWidth/2) 
					&& x >= game.ui.Player.posX 
					&& y <= game.ui.Player.posY + (game.ui.Player.height + game.ui.Player.scale) 
					&& y >= game.ui.Player.posY - (30 + game.ui.Player.scale)
					
					
				) {
				return true;
			} else {
				return false;
			}
			*/
			
			return (game.ui.getDistance(playerPoint, {x: x, y: y}) < playerSize);
		},
		drop : function() {
			// TODO: refactor responsibilities of method
			if (y < (game.ui.content.height - game.ui.Player.height)) {
				y = (y + speed);
				isFalling = true;
				//hit test
				if (this.hit()) {
					//console.log("hit! "+type);
					isFalling = false;
					// remove token
					$("."+name).remove();
					// show 'catch' player image
					if (game.ui.Player.scale >= game.ui.Player.scaleLimit) {
						$("#player").attr("src","img/player_inflate_catch.png");
					} else {
						$("#player").attr("src","img/player_catch.png");
					}
					
					$("#player").css({
						top : (game.ui.Player.posY - game.ui.Player.scale) + "px", 
						left : game.ui.Player.posX + "px"
					});
					// scale player if 'plus' or 'minus' type is found
					game.ui.Player.detect(type);					
					// show bonus
					$('<div class="bonus b-'+ name +'">'+ bonus +'</div>').insertAfter("#content");
					game.ui.setPosition($(".b-"+name), { x : x, y : y }); 
					// increment score by token value
					game.score += bonus;
					
					$(".b-"+name).stop().animate({
						top : "0px",
						left : "280px"
					}, function() {
						$(".b-"+name).remove();
						game.updateHeader();
					});
				}
				
			} else {
				isFalling = false;
				$("."+name).remove();
			}
			//console.log("...falling " + isFalling);
			game.ui.setPosition($("." + name), { x : x, y : y });
		} // end drop
	}; // end return
}; // end game.ui.Token

game.ui.Controller = {
	tokens : [],
	tokenCounter : 0,
	rowCounter : 0,
	gameInterval : 50,
	gameThread : null,
	lineBreaks : 48,
	//rowDataRef : [5,50,94,138,182,225,270],
	rowData : [],
	rowDataRef : [
		[5,50,94,225,270],
		[5,50,182,225,270],
		[5,138,182,225,270],
		[94,138,182,225,270],
		[5,138,182,225,270],
		[5,50,182,225,270],
		[5,50,94,225,270],
		[5,50,94,138,270],
		[5,50,94,138,182]
	],
	
	crossData : [
		[false],
		[5, 270],
		[false],
		[50,225],
		[false],
		[94,182],
		[false],
		[138],
		[false],
		[94,182],
		[false],
		[50,225],
		[false],
		[5, 270],
		[false]
	],
	
	squareData : [
		[false],
		[50,94,138,182,225],
		[false],
		[50,225],
		[false],
		[50,225],
		[false],
		[50,225],
		[false],
		[50,94,138,182,225],
		[false]
	],
	diamondData : [
		[138],
		[false],
		[94,182],
		[false],
		[50,225],
		[false],
		[5,270],
		[false],
		[50,225],
		[false],
		[94,182],
		[false],
		[138],
		[false]
	],
	init : function(gameInterval) {
		game.ui.Controller.gameThread = setInterval(game.ui.Controller.action, gameInterval);
		if (game.hiScore == 0) {
			game.ui.Controller.randomiseRowData();
			//game.ui.Controller.addLineBreaksToDisplayData(game.ui.Controller.rowData);
			game.ui.Controller.addLineBreaksToDisplayData(game.ui.Controller.crossData);
			game.ui.Controller.addLineBreaksToDisplayData(game.ui.Controller.squareData);
			game.ui.Controller.addLineBreaksToDisplayData(game.ui.Controller.diamondData);
		}
	},
	randomiseRowData : function() {
		var rowData = [[false],[false]];
		var rowDataLen = game.ui.Controller.rowDataRef.length;
		var randNumber = 0;
		for (var i=0; i < rowDataLen; i++) {
			randNumber = this.getRandomNumber(rowDataLen);
			rowData.push(game.ui.Controller.rowDataRef[randNumber]);
			rowData.push([false]);
		}
		rowData.push([[false],[false]]);
		game.ui.Controller.rowData = rowData;
		// delete line display data
		rowData = null;
	},
	addLineBreaksToDisplayData : function(displayData) {
		var newData = [];
		var lineBreakData = null;
		//console.log("start: " + displayData.length);
		for (var i=0; i<displayData.length; i++) {
			//console.log(displayData[i][0]);
			if (displayData[i][0] == false) {
				lineBreakData = displayData[i][0];
				for (var j=0; j < this.lineBreaks; j++) {
					//console.log("got here?");
					// add empty entries to line break display
					newData.push(lineBreakData);
				}
			} else {
				newData.push(displayData[i]);
			}
		}
		// update display data with linebreak data
		/*
		if (displayData == game.ui.Controller.rowData) {
			game.ui.Controller.rowData = newData;
		}
		if (displayData == game.ui.Controller.crossData) {
			game.ui.Controller.crossData = newData;
		}
		if (displayData == game.ui.Controller.squareData) {
			game.ui.Controller.squareData = newData;
		}
		if (displayData == game.ui.Controller.diamondData) {
			game.ui.Controller.diamondData = newData;
		}
		*/
		switch (displayData) {
			case game.ui.Controller.rowData :
				game.ui.Controller.rowData = newData;
			break;
			case game.ui.Controller.crossData :
				game.ui.Controller.crossData = newData;
			break;
			case game.ui.Controller.squareData :
				game.ui.Controller.squareData = newData;
			break;
			case game.ui.Controller.diamondData :
				game.ui.Controller.diamondData = newData;
			break;
			default : 
				//
		} // end switch
		
		//console.log("end: " + game.ui.Controller.crossData.length);
	}, // end addLineBreaksToDisplayData()
	createToken : function() {
		// create random falling tokens
		var randNumber = this.getRandomNumber(300);
		var posX = this.getRandomNumber(280);
		var speed = 5 + this.getRandomNumber(5);
		//console.log("random "+randNumber);
		// ----
		//console.log(this.rowCounter);
		this.displayLevel();
		// game token display rules
		game.ui.Controller.BOMB_RULE = (randNumber == 0);
		game.ui.Controller.PLUS_RULE = (randNumber >= 1 && randNumber <= 5);
		game.ui.Controller.MINUS_RULE = (randNumber >= 6 && randNumber <= 10);
		game.ui.Controller.STAR_RULE = (randNumber >= 11 && randNumber < 15);
		
		// ----
		if (!game.levelUp) {
			if (game.ui.Controller.BOMB_RULE) {
				this.tokens.push(new game.ui.Token("token" + this.tokenCounter, game.ui.Token.BOMB, 0, {
					x: posX,
					y: 0
				}, (speed - 4)));
			}
			if (game.ui.Controller.PLUS_RULE) {
				this.tokens.push(new game.ui.Token("token" + this.tokenCounter, game.ui.Token.PLUS, 20, {
					x: posX,
					y: 0
				}, speed));
			}
			if (game.ui.Controller.MINUS_RULE) {
				this.tokens.push(new game.ui.Token("token" + this.tokenCounter, game.ui.Token.MINUS, 0, {
					x: posX,
					y: 0
				}, speed));
			}
			if (game.ui.Controller.STAR_RULE) {
				this.tokens.push(new game.ui.Token("token" + this.tokenCounter, game.ui.Token.STAR, 50 + Math.floor(game.ui.Player.scale / 2), {
					x: posX,
					y: 0
				}, speed - 2));
			}
		} // if (!game.levelUp)
		this.tokenCounter++;
	}, // end createToken()
	levelRules : function() {
		if (game.score >= game.nextLevelUpScore) {
			game.level += 1;
			game.nextLevelUpScore += game.levelScoreInc;
		}
	},
	displayLevel : function() {
		//console.log(Math.floor(game.score % 100));
		//console.log(game.nextLevelUpScore);
		if (game.score >= game.nextLevelUpScore && game.lives > 0) {
			//this.levelUp = true;
			//console.log("levelled ");
			game.levelUp = true;
			game.level += 1;
			game.nextLevelUpScore += game.levelScoreInc;
		} else {
			//this.levelUp = false;
		}
		// TODO: add level delegation here ...			
		if (game.levelUp) {
			game.ui.Controller.randomiseRowData();
			game.ui.Controller.addLineBreaksToDisplayData(game.ui.Controller.rowData);
			this.displayTokenShape(this.rowData, game.ui.Token.BOMB);
		}
	}, // end displayLevel()
	displayTokenShape : function(data, tokenType) {
		if (this.rowCounter < data.length) {
			var rowRef = data[this.rowCounter];
			for (var i=0; i < rowRef.length; i++) {
				if (rowRef[i]) {
					this.tokens.push(new game.ui.Token("token"+this.tokenCounter, 
					tokenType, 50 + Math.floor(game.ui.Player.scale/2), 
					{x : rowRef[i], y : 0}, 4));
				}
				this.tokenCounter++;
			} // end for
			this.rowCounter++;
		} else {
			this.rowCounter = 0;
			game.levelUp = false;
		}
	},
	action : function() { // called by setInterval
		if (game.paused) return;
		// execute touch events
		player.event.touch();
		var self = game.ui.Controller;
		// create new token
		self.createToken();
		// iterate over all tokens and call drop method
		for (var i=0; i < self.tokens.length; i++) {
			if (self.tokens[i].isFalling()) {
				self.tokens[i].drop();
			} 
			else {
				// remove all fallen tokens
				self.tokens.remove(i,i);
			}
		}
		// check remaining lives
		// end game if lives == 0
		game.checkLife();
		//console.log("+" + self.tokens.length);
	}, // end action()
	getRandomNumber : function(range) {
		// get random number (for token selection)
		var randomNumber = Math.floor(Math.random() * range);
		return randomNumber;
	}
}; // end game.ui.Controller

// dom ready
$(function() {
	if (navigator.userAgent.match(/iPhone/i) || 
		navigator.userAgent.match(/iPod/i)) {
			// hide URL bar
			window.scrollTo(0,1);
		}
	
	game.init();
});

