var done = false;
var guessed = 0;
var remaining;
var timestaken = 0;
var sumofscores = 0;
var leaders;
var ourLeader;
var guessedArray = new Array();

function load()
{
	remaining = answers.length;
	document.getElementById("userinput").disabled = false;
	document.getElementById("btnGiveUp").disabled = false;
	displayNumGuessed();
	displayClock();
	setTimeout( decrementClock, 1000 );
	document.getElementById("userinput").focus();
}

function decrementClock()
{
	if ( done ) 
		return;

	seconds--;

	displayClock();
	if ( seconds == 0 )
	{
		finish();
	}
	else	
		setTimeout( decrementClock, 1000 );
}

function displayClock()
{
	var s = seconds % 60;
	var m = ( seconds - s ) / 60;
	document.getElementById("clock").innerHTML = m + ":" + padZero(s);
}

function padZero(num)
{
	if ( num == 0 )
		return "00";
	else if ( num < 10 )
		return "0" + num;
	else
		return "" + num;
}

function giveUp()
{
	finish();
}

function finish()
{
	document.getElementById("btnGiveUp").disabled = true;
	document.getElementById("userinput").disabled = true;
	done = true;
	document.getElementById("loading").style.display = "block";
	document.getElementById("div_guessed").style.display = "none";
	getResults();
}

function keyDownUser(e)
{
	attempted = true;

	if (document.all)
		code = window.event.keyCode;
	else code = e.which;

	 document.getElementById("guessStatus").innerHTML = "";

	if ( code == 13 )
		checkResults();
}


function checkResults()
{
	var text = document.getElementById("userinput").value;

	var alreadyGuessed = -1;
	var guessStatus = document.getElementById("guessStatus");

	for (var i=0; i<answers.length; i++)
	{
		var a = answers[i];
		if ( text.match( a.regex ) )
		{
			if ( !a.guessed )
			{
				a.guessed = true;
				guessed++;
				remaining--;
				document.getElementById("userinput").value = "";
				guessedArray.push( a.display );
				document.getElementById("div_guessed").innerHTML = guessedArray.join(", ");
				displayNumGuessed();
				if ( remaining == 0 ) finish();
				return;
			}
			alreadyGuessed = i;
		}
	}
	if ( alreadyGuessed != -1 )
	{
		guessStatus.innerHTML = "<b>Already guessed!</b>&nbsp;&nbsp;" + answers[alreadyGuessed].display;
		document.getElementById("userinput").value = "";
	}
	else guessStatus.innerHTML = "<b>Not on the list.</b>";


}

function displayNumGuessed()
{
	document.getElementById("div_numguessed").innerHTML = "<span class=\"a\">" + guessed + "</span> guessed, <span class=\"a\">" + remaining + "</span> remaining";
}

function Answer(id, display, regex)
{
	this.id = id;
	this.display = display;
	this.regex = regex;
	this.guessed = false;
	this.numCorrect = 0;
	this.note = "";
}

function sortAnswersForStats(a, b)
{
	if ( a.guessed && !b.guessed )
		return -1;
	if ( !a.guessed && b.guessed )
		return 1;

	if ( quizId == 3 || quizId == 8 || quizId == 22 || quizId == 28 || quizId == 33 || quizId == 34 || quizId == 39 || quizId == 40 
		|| quizId == 54 || quizId == 57 || quizId == 60 || quizId == 63 || quizId == 76 )
	{
		if ( a.note > b.note )
			return -1;
		if ( b.note > a.note )
			return 1;
	}

	if ( quizId == 26 || quizId == 27 || quizId == 82 || quizId == 89 || quizId == 95 )
	{
		if ( a.note > b.note )
			return 1;
		if ( b.note > a.note )
			return -1;
	}

	if ( a.numCorrect > b.numCorrect )
		return -1;
	if ( b.numCorrect > a.numCorrect )
		return 1;


	if ( a.display < b.display )
		return -1;
	if ( a.display > b.display )
		return 1;

	return 0;
}

function Leader()
{
	this.id = -1;
	this.screenname = "";
	this.score = -1;
	this.timeused = -1;
	this.validation = "";
}


function getResults()
{
	var p = new Array();
	p.push( "?quiz=" + quizId );
	p.push( "&timeleft=" + seconds );
	for (var i=0; i<answers.length; i++)
	{
		var a = answers[i];
		p.push("&a" + a.id + "=");
		if ( a.guessed )
			p.push("1");
		else
			p.push("0");
	}

	var params = p.join('');

	var http = createRequestObject();
	http.open("get", "/quizzes/includes/set-results.php" + params, true);
	http.onreadystatechange = function()
	{
		if ( http.readyState == 4 )
			response = http.responseText;
		else
			return;

		var lines = response.split('\n');
		var mode = 0;

		for (var i=0; i<lines.length-1; i++)
		{
			if ( lines[i] == "TIMES TAKEN" )
			{
				mode = 1;
				continue;
			}
			if ( lines[i] == "SUM" )
			{
				mode = 2;
				continue;
			}
			if ( lines[i] == "CORRECT" )
			{
				mode = 3;
				continue;
			}
			if ( lines[i] == "LEADERBOARD" )
			{
				mode = 4;
				leaders = new Array();
				continue;
			}

			if ( mode == 1 )
			{
				timestaken = parseInt(lines[i]);
			}
			if ( mode == 2 )
			{
				sumofscores = parseInt(lines[i]);
			}
			if ( mode == 3 )
			{
				var tabs = lines[i].split('\t');
				var id = parseInt(tabs[0]);
				for (var j=0; j<answers.length; j++)
				{
					if ( answers[j].id == id )
					{
						answers[j].numCorrect = parseInt(tabs[1]);
						answers[j].note = tabs[2];
						if ( quizId == 3 || quizId == 8 || quizId == 27 || quizId == 28 || quizId == 33 || quizId == 34 || quizId == 39 || quizId == 40 || 
							quizId == 54 || quizId == 57 || quizId == 60 || quizId == 63 || quizId == 76 || quizId == 82 || quizId == 95 )
							answers[j].note = parseInt( answers[j].note );				
						break;
					}
				}
			}
			if ( mode == 4 )
			{
				var ld = new Leader();
				var tabs = lines[i].split('\t');
				ld.id = parseInt(tabs[0]);
				ld.screenname = tabs[1];
				ld.score = parseInt(tabs[2]);
				ld.timeused = parseInt(tabs[3]);
				ld.validation = tabs[4];
				leaders.push(ld);
			}
		}
		
		document.getElementById("loading").style.display = "none";
		document.getElementById("postQuizA").innerHTML = "<div class=\"a\">You got <span class=\"x\">" + guessed + "</span> correct</div><div class=\"b\">The average score is <span class=\"y\">" + Math.round(sumofscores/timestaken) + "</span>, but some people take it many times.</div>";
		document.getElementById("postQuiz").style.display = "block";
	}
	http.send(null);
}

function signAndShow()
{
	mlJoin(2);
	justShow();
}

function justShow()
{
	document.getElementById("postQuiz").style.display = "none";
	drawStats();
}

function createRequestObject() {
	var ro;
	var browser = navigator.appName;
	if(browser == "Microsoft Internet Explorer"){
		ro = new ActiveXObject("Microsoft.XMLHTTP");
	}else{
		ro = new XMLHttpRequest();
	}
	return ro;
}

function drawStats()
{
	var html = new Array();

	html.push("<table cellpadding=\"0\" cellspacing=\"0\" id=\"stattable\">");
	answers.sort( sortAnswersForStats );

	var hasNote = false;
	for (var i=0; i<answers.length; i++)
	{
		if ( answers[i].note != "" )
		{
			hasNote = true;
			break;
		}
	}

	switch ( quizId )
	{
		case 26:
			html.push("<tr><th>Bowl</th><th>Started</th></tr>"); break;
		case 27:
			html.push("<tr><th>Element</th><th>Number</th></tr>"); break;
		case 28:
			html.push("<tr><th>Company</th><th style=\"text-align: right;\">Rev.'07</th></tr>"); break;
		case 33:
		case 34:
			html.push("<tr><th>Name</th><th style=\"text-align: right;\"># Born '07</th></tr>"); break;
		case 39:
		case 40:
			html.push("<tr><th>Name</th><th style=\"text-align: right;\">Wins</th></tr>"); break;
		case 54:
			html.push("<tr><th>Company</th><th style=\"text-align: right;\">Rev.'07</th></tr>"); break;
		case 57:
			html.push("<tr><th>Language</th><th style=\"text-align: right;\">Native Speakers</th></tr>"); break;
		case 60:
			html.push("<tr><th>Golfer</th><th style=\"text-align: right;\">Wins</th></tr>"); break;
		case 63:
			html.push("<tr><th>Movie</th><th style=\"text-align: right;\">Year</th></tr>"); break;
		case 76:
			html.push("<tr><th>Billed Name&nbsp; - &nbsp;# of Wrestlemanias</th></tr>"); break;
	}



	for (var i=0; i<answers.length; i++)
	{
		var a = answers[i];
		html.push("<tr>");
		html.push("<td valign=\"top\" class=\"");
		if ( a.guessed )
			html.push("right");
		else
			html.push("wrong");
		html.push("\">" + a.display + "</td>");

		if ( hasNote )
		{
			html.push("<td valign=\"top\" class=\"");
			if ( a.guessed )
				html.push("right");
			else
				html.push("wrong");
			if ( quizId == 3 || quizId == 8 || quizId == 28 || quizId == 33 || quizId == 34 || quizId == 39 || quizId == 40 || quizId == 54 || quizId == 57 || quizId == 60 || quizId == 63 || quizId == 76 )
				html.push("\" style=\"text-align: right");
			var note = a.note;
			if ( quizId == 3 || quizId == 33 || quizId == 34 || quizId == 57 )
				note = addCommas(note);
			if ( quizId == 28 )
				note = "$" + Math.round(note/1000000000) + "B"
			if ( quizId == 54 )
				note = "$" + addCommas(Math.round(note/1000000)) + "M"

			
			html.push("\">" + note + "</td>");
		}

		var pct = a.numCorrect / timestaken;

		html.push("<td valign=\"top\" ><div class=\"bar\"><div class=\"bar_");
		if ( a.guessed )
			html.push("right");
		else
			html.push("wrong");
		html.push("\" style=\"width: " + Math.floor(pct * 300) + "px;\"></div></div></td>");
		html.push("<td valign=\"top\" class=\"");
		if ( a.guessed )
			html.push("right");
		else
			html.push("wrong");
		html.push("\">" + Math.floor(pct * 100) + "%</td>");
		html.push("</tr>");
		
	}
	html.push("</table>");

	document.getElementById("statsContainer").innerHTML = html.join('');
	document.getElementById("stats").style.display = "block";
}

function drawLeaderboard()
{
	var html = new Array();
	html.push("<div class=\"h\">Leaderboard</div>");
	html.push("<table cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">");
	html.push("<tr><th></th><th>Name</th><th class=\"r\">Score</th><th class=\"r\">Time</th></tr>");
	for (var i=0; i<leaders.length; i++)
	{
		var ld = leaders[i];

		var s = ld.timeused % 60;
		var m = ( ld.timeused - s ) / 60;
		timeused = m + ":" + padZero(s);
		html.push("<tr><td valign=\"top\">" + (i+1) + ".</td><td valign=\"top\">")
		if ( ld.validation != "" )
		{
			html.push("<input type=\"text\" id=\"txtScreen\" maxlength=\"12\" onkeydown=\"keyDownEnterName(event)\">");
			alert("Congrats!  You made the leaderboard at #" + (i+1) + "!\nPlease enter your name.");
			ourLeader = ld;
		}
		else html.push(ld.screenname);
		html.push("</td><td valign=\"top\" class=\"r\">" + ld.score + "</td><td valign=\"top\" class=\"r\">" + timeused + "</td></tr>");
	}
	html.push("</table>");
	document.getElementById("leaderboard").innerHTML = html.join('');
}

function keyDownEnterName(e)
{
	if (document.all)
		code = window.event.keyCode;
	else code = e.which;

	if ( code == 13 )
	{
		var text = document.getElementById("txtScreen").value;
		document.getElementById("txtScreen").disabled = true;

		var http = createRequestObject();
		http.open("get", "/quizzes/includes/set-name.php?screenname=" + escape(text) + "&validation=" + ourLeader.validation + "&id=" + ourLeader.id, true);
		http.send(null);
	}
}

function addCommas(nStr)
{
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}
