var xmlhttp = false;
if (window.XMLHttpRequest) {
	xmlhttp = new XMLHttpRequest();
	if (xmlhttp.overrideMimeType) xmlhttp.overrideMimeType('text/xml');
} else if (window.ActiveXObject) {
	xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
/*setTimeout("readscores()", 200);
function readscores() {
	var url = '/cgi-bin/readscores.pl?game=snake';
	xmlhttp.open('GET', url, true);
	xmlhttp.onreadystatechange = readdatascores;
	xmlhttp.send(null);
}
function readdatascores() {
	if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
		try {
			var emailstart = xmlhttp.responseXML.getElementsByTagName('hscore');
			for (var i = 0; i < emailstart.length; i++) {
				for (var j = 0; j < emailstart[i].childNodes.length; j++) {
					var elem = emailstart[i].childNodes[j].nodeName;
					var hscorevalue = emailstart[i].childNodes[j].firstChild.nodeValue;
					if (elem == 'user') {
						users[i] = hscorevalue;
					} else if (elem == 'score') {
						hscores[i] = hscorevalue;
					}
				}
			}
		} catch (e) { alert(e.message);}
		document.getElementById("info").innerHTML = "";
	} else {
		//document.getElementById("info").innerHTML = "<table class='inner'><tr><td>Please Wait. Retrieving Scores<\/td><\/tr><\/table>";
	}
}*/
setTimeout("readProjects()", 1000);
function readProjects() {
	var url = '/cgi-bin/levelretrieve.pl';
	xmlhttp.open('GET', url, true);
	xmlhttp.onreadystatechange = readprojectvalues;
	xmlhttp.send(null);
}
var projects = new Array();
projects[0] = new Array();
projects[1] = new Array();
function readprojectvalues() {
	if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
		try {
			var emailstart = xmlhttp.responseXML.getElementsByTagName('projects');
			for (var i = 0; i < emailstart.length; i++) {
				for (var j = 0; j < emailstart[i].childNodes.length; j++) {
					var elem = emailstart[i].childNodes[j].nodeName;
					var projectvalue = emailstart[i].childNodes[j].firstChild.nodeValue;
					if (elem == 'user') {
						projects[0][i] = projectvalue;
					} else if (elem == 'title') {
						projects[1][i] = projectvalue;
					}
				}
			}
		} catch (e) { alert(e.message);}
	} else {
		//document.getElementById("info").innerHTML = "<table class='inner'><tr><td>Please Wait. Retrieving Levels<\/td><\/tr><\/table>";
	}
}
var preference = new Array();
readStartCookie();
function readStartCookie() {
	var prefs = readCookie('Snake_Prefs');
	if (prefs === null)
		prefs = ";";
	preference = prefs.split(';');
	if (preference[0] === null || preference[0] == "")
		preference[0] = "Original";
}
var Img = new Array();
CreateImages();
function CreateImages() {
	for (var i=0;i<3;i++) 
		Img[i] = new Image();
	Img[0].src = "/Tetris/RedBlock_15x15.gif";
	Img[1].src = "/Tetris/GreenBlock_15x15.gif";
	Img[2].src = "/Tetris/BlueBlock_15x15.gif";
}
var wait;
var StartLoc_x;
var StartLoc_y;
var points = -2;
var food_x;
var food_y;
var lives =5;
var last_x=5;
var last_y=5;
var snake_size=6;
var direction=0;
var curLevel=1;
var Level=new Array();
var speed=0;
var title;
var gridsize_x = 30;
var gridsize_y = 30;
var grid = new Array();
for (var i=0;i<gridsize_y;i++) {
	grid[i] = new Array();
}
var x = new Array();
var y = new Array();
var level1_func;
//setTimeout("StartMenu()", 500);
StartMenu();
function StartMenu() {
	var table = "<table cellpadding='0' cellspacing='0' style='padding-left:250px;'><tr><th colspan='3' style='padding-right:410px;'><span style='font-size:20px;'>Snake</span></th></tr><tr><td width='150px'>";

	table += "<table width='150px' cellspacing='0' cellpadding='0'><tr><td align='center'><input type='button' value='Play Game' onclick='PlayGame()'></td></tr><tr><td align='center' class='links'><input type='button' value='Map Packs' onclick='MapPack()'></td></tr></table>";

	table += "</td><td style='padding-left:60px;' width='350px'>";

	table += "<table cellpadding='0' cellspacing='0'><tr>";
	table += "<td><table cellspacing='0' cellpadding='0'><tr><td align='center'><h2>High Scores</h2></td></tr><tr><td><table cellpadding='0' cellspacing='0' class='center'><tr><td style='padding-right:20px;'><h3>Name</h3></td><td><h3>Score</h3></td></tr></table></td></tr>";
	for(var i=0;i<5;i++){
		if (hscores[i] != "" && hscores[i] != undefined && hscores[i] != null)
			table += "<tr><td>"+(i+1)+". " +users[i]+" "+hscores[i]+"</td></tr>";
		else 
			break;
	}
	table += "</table></td>";
	if (loggedin == "Yes") {
		table += "<td style='padding-left:20px;'><table cellspacing='0' cellpadding='0'><tr><td align='center'><h2>Your High Scores</h2></td></tr>";
		for(var i=0;i<5;i++){
			if (myhscores[i] != "" && myhscores[i] != undefined && myhscores[i] != null)
				table += "<tr><td>"+(i+1)+". "+myhscores[i]+"</td></tr>";
			else 
				break;
		}
		table += "</table>";
	}
	table += "</td></tr></table>";
	table += "</td></tr></table>";
	document.getElementById('field').innerHTML = table;
}
var currentUser = "DumbGamesAdmin";
var user = "DumbGamesAdmin";
readLevels(user);
function readLevels(userinput) {
	currentUser = userinput;
	var url = '/cgi-bin/levelreader.pl?user='+userinput;
	xmlhttp.open('GET', url, true);
	xmlhttp.onreadystatechange = getLevels;
	xmlhttp.send(null);
}

function getLevels() {
	try {
		if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
			var code = xmlhttp.responseText;
			code = code.replace(/\s+$/, '');
			eval(code);

		}
	} catch (e) {
		alert(e.message);
	}
}
function MapPack() {
	var table = "<table cellspacing='0' cellpadding='0'><tr><td align='center' class='text'><form name='map'><select name='map' size='4'><option value='DumbGamesAdmin' ";
	if (preference[0] == "Original")
		table += "selected";
	table += ">Original</option></select></form></td></tr><tr><td align='center' class='text'><input type='button' value='User Maps' onclick='UserMapPack()'></td></tr><tr><td align='center' class='text'><input type='button' value='Choose' onclick='readLevels(document.map.map.value)'></td></tr><tr><td align='center' class='text'><input type='button' value='Main Menu' onclick='StartMenu()'></td></tr></table>";
	document.getElementById('field').innerHTML = table;
}
function UserMapPack() {
	var table = "<table cellspacing='0' cellpadding='0'><tr><td align='center' class='text'><form name='map'><select name='map' size='4'>";
	for (var i=0;i<20;i++) {
		if (projects[0][i] != null) {
			table += "<option value='"+projects[0][i]+"'>"+projects[1][i]+"</option>";
		}
	}
	table += "</select></form></td></tr><tr><td align='center' class='text'><input type='button' value='Choose' onclick='readLevels(document.map.map.value)'></td></tr><tr><td align='center' class='text'><input type='button' value='Main Menu' onclick='StartMenu()'></td></tr></table>";
	document.getElementById('field').innerHTML = table;
}
function ChooseLevel() {
	table = "<table cellspacing='0' width='50px' cellpadding='0'><tr><td colspan='2' align='center' class='text'><div id='level'>1<\/div></td></tr><tr><td align='center' class='text'><input type='button' value='-' onclick='if(document.getElementById(\"level\").innerHTML > 1) {document.getElementById(\"level\").innerHTML--}'></td><td align='center' class='text'><input type='button' value='+' onclick='if(document.getElementById(\"level\").innerHTML < 10) {document.getElementById(\"level\").innerHTML++}'></td></tr><tr><td colspan='2' align='center' class='text'><input type='button' value='Start' onclick='curLevel=document.getElementById(\"level\").innerHTML;PlayGame();'></td></tr></table>";
	document.getElementById('field').innerHTML = table;
}
function PlayGame() {
	points = 0;
	lives = 5;
	snake_size=6;
	var table = "<table cellspacing='0' cellpadding='0'><tr><td><table cellspacing='0' cellpadding='0'>";
	for (var i=0;i<gridsize_y;i++) {
		table += "<tr>";
		for (var j=0;j<gridsize_x;j++) {
			table += "<td id='block_"+i+"_"+j+"' style='background-color: #808080; width:15px;height:15px;'></td>";
		}
		table += "</tr>";
	}
	table += "</table></td><td>Lives:<span id='lives'>5</span><br>Points:<span id='points'>0</span><br>High Score: "+hscores[0]+"<br><input type='button' value='End Game' onclick='lives = -1;wait = \"End\";EndGame()'></td></tr></table>";
	document.getElementById('field').innerHTML = table;
	if (document.addEventListener)
		document.addEventListener("keydown",keyPress, false);
	else if (document.attachEvent)
		document.attachEvent("onkeydown",keyPress);
	else 
		document.onkeydown=keyPress;
	Temp();
	//setTimeout(title+"_"+level+"()", 0);
	//level1_func();
	//Level_1();
	points = -curLevel*2;
	ActivateGrid();
	DrawMap();
	FoodEaten();
	DrawFood();
	for (var i=0;i<1;i++) {
		//document.write(Level[1][0]);
		x[i] = StartLoc_x;
		y[i] = StartLoc_y;
	}
	AddChain();
	setTimeout('Main()', 1000);
}
function EndGame() {
	if (title == 'Level' && currentUser == "DumbGamesAdmin") SubmitScore();
	if (document.addEventListener)
		document.removeEventListener("keydown",keyPress, false);
	else if (document.attachEvent)
		document.detachEvent("onkeydown",keyPress);
	else
		document.onkeypress=null;
	ResetMap();
	var table = "<table cellspacing='0' cellpadding='0'><tr><td align='center' class='text'>Game Over</td></tr><tr><td align='center' class='text'>Points: "+points+"</td></tr><tr><td class='text'><input type='button' value='Main Menu' onclick='document.location=\"/snake/\";'></td></tr></table>";
	document.getElementById('field').innerHTML = table;
	direction=0;
	for (var i=snake_size;i>=1;i--) {
		x[i]=0;
		y[i]=0;
	}
	last_x = 1;
	last_y = 1;
	//points = 0;
	snake_size=6;
}
function ActivateGrid() {
	StartLoc_x= Level[curLevel][1];
	StartLoc_y= Level[curLevel][2];
	for (var i=3;i<2000;i+=3) {
		if (Level[curLevel][i] != null && Level[curLevel][i+2] == 1) {
			grid[Level[curLevel][i]][Level[curLevel][i+1]] = 1;
		} else if (Level[curLevel][i] == null) {
			break;
		}
	}
}
function DrawMap() {
	for (var i=0;i<gridsize_y;i++) {
		for (var j=0;j<gridsize_x;j++) {
			if (grid[i][j] == 1) {
				document.getElementById('block_'+ i + '_' + j).style.backgroundImage='url('+Img[2].src+')';
			}
		}
	}
}
function ResetMap() {
	for (var i=0;i<gridsize_y;i++) {
		for (var j=0;j<gridsize_x;j++) {
				var gridBlock = document.getElementById('block_'+ i + '_' + j);
				if (gridBlock != undefined) gridBlock.style.backgroundImage='';
				grid[i][j] = 0;
		}
	}
}
function SubmitScore() {
	try {
		var url = '/cgi-bin/submitscores.pl?points='+points+'&game=snake';
		xmlhttp.open('GET', url, true);
		//xmlhttp.onreadystatechange = check;
		xmlhttp.send(null);
	} catch(e) { alert(e.message);}
}
function Main() {
	if (lives > 0 && wait!="Yes") {
		AutoMove();
		if (Check()) {
			RemDraw();
			Draw();
		} else {
			Died();
			last_x=StartLoc_x-1;
			last_y=StartLoc_y;
			x[0]=StartLoc_x-1;
			y[0]=StartLoc_y;
			for (var i=1;i<snake_size;i++) {
				x[i] = StartLoc_x-1;
				y[i] = StartLoc_y;
			}
			Draw();
		}
		setTimeout('Main()', 75);
	} else if (wait=="Yes") {
		ResetMap();
		Temp();
		//setTimeout(title+"_"+level, 0);
		//if (level == 2) {
		//	Level_2();
		//} else if (level == 3) {
		//	Level_3();
		//}
		ActivateGrid()
		document.getElementById('block_'+ x[0] + '_' + y[0]).style.backgroundImage='url(/grey.gif)';
		x[0]=StartLoc_x;
		y[0]=StartLoc_y;
		wait="No";
		lives=6;
		Died();
		DrawMap();
		AutoMove();
		for (var i=70;i>0;i--) {
			x[i]="";
			y[i]="";
		}
		
		snake_size=6;
		FoodEaten()
		DrawFood();
		setTimeout('Main()', 1000);
		AddChain();
	} else if (wait != "End") {
		EndGame();
	}
}
function AutoMove() {
	last_x = (x[snake_size-1] != "") ? x[snake_size-1] : 0;
	last_y = (y[snake_size-1] != "") ? y[snake_size-1] : 0;
	for (var i=snake_size-1;i>=0;i--) {
		if (x[i-1] != null && x[i-1] != "") {
			x[i] = x[i-1];
			y[i] = y[i-1];
		}
	}
	if (direction == 0) {
		x[0] += 1;
	} else if (direction == 1) {
		y[0] += 1;
	} else if (direction == 3) {
		y[0] -= 1;
	} else if (direction == 2) {
		x[0] -= 1;
	}
	CheckFood();
}
function CheckFood() {
	if (x[0] == food_x && y[0] == food_y) {
		FoodEaten();
		//document.getElementById('points').innerHTML = (snake_size+=2)-6;
		snake_size+=2 //=========================================  ^
		if (snake_size >= 75-(curLevel*5) && curLevel == 10) {
			curLevel=1;
			wait="Yes";
		} else if (snake_size >= 75-(curLevel*5)) {
			snake_size=6;
			curLevel++;
			wait="Yes";
		} else {
			AddChain();
			if (x[0] == food_x && y[0] == food_y) {
				CheckFood();
			} else {
				DrawFood();
			}
		}
	}
}
function AddChain() {
	for (var i=0;i<snake_size;i++) {
		if (x[i] == null || x[i] == "") {
			x[i]=x[i-1];
			y[i]=y[i-1];
			//a
		}
	}
}
function Draw() {
	var firstBlock = document.getElementById('block_'+ x[0] + '_' + y[0]);
	if (grid[x[0]][y[0]] != 1 && firstBlock != undefined) {
		firstBlock.style.backgroundImage='url(/Tetris/RedBlock_15x15.gif)';
	}
	var lastBlock = document.getElementById('block_'+ x[snake_size-2] + '_' + y[snake_size-2]);
	if ((x[snake_size-2] != food_x || y[snake_size-2] != food_y) && grid[x[snake_size-2]][y[snake_size-2]] != 1 && lastBlock != undefined) {
		lastBlock.style.backgroundImage='url(/Tetris/RedBlock_15x15.gif)';
	}
}
function RemDraw() {
	var blockRem = document.getElementById('block_'+ last_x + '_' + last_y);
	if ((last_x != food_x || last_y != food_y) && grid[last_x][last_y] != 1 && blockRem != undefined) {
		blockRem.style.backgroundImage='url(/grey.gif)';
	}
	//document.getElementById('block_1_1').innerHTML=last_x;
}
function Died() {
	for (var i=snake_size-1;i>0;i--) {
		if ((x[i] != food_x || y[i] != food_y) && grid[x[i]][y[i]] != 1) {
			document.getElementById('block_'+ x[i] + '_' + y[i]).style.backgroundImage='url(/grey.gif)';
		}
	}
	RemDraw();
	direction=0;
	document.getElementById('lives').innerHTML = --lives;
}
function stopPropagate(e) {
	if (e.preventDefault) e.preventDefault();
	else e.returnValue = false;
}
function keyPress(event) {
	var e = event || window.event;
	var code = e.charCode || e.keyCode;
	if (code == 40) {
		stopPropagate(e);
		if (direction != 2)
			direction = 0;
	} else if (code == 39) {
		stopPropagate(e);
		if (direction != 3)
			direction = 1;
	} else if (code == 37) {
		stopPropagate(e);
		if (direction != 1)
			direction = 3;
	} else if (code == 38) {
		stopPropagate(e);
		if (direction != 0)
			direction = 2;
	}
}
function Check() {
	if (grid[x[0]][y[0]] == 1) {
		return 0;
	}
	for (var i=1;i<snake_size;i++) {
		if (x[0] == x[i] && y[0] == y[i])
			return 0;
;
	}
	return 1;
}
function FoodEaten() {
	points += 2*curLevel;
	document.getElementById('points').innerHTML = points;
	for (var i=0;;i++) {
		food_x = parseInt(Math.random()*(gridsize_y-2)+1);
		food_y = parseInt(Math.random()*(gridsize_x-2)+1);
		if(grid[food_x][food_y] != 1) {
			break;
		} 
	}
}
function DrawFood() {
	document.getElementById('block_'+ food_x + '_' + food_y).style.backgroundImage='url(/Tetris/GreenBlock_15x15.gif)';
}
