﻿var member = false;
var jbtemail = null;

function ReceiveMappingResponse(response)
{
	try{
		ClearPins();
	}
	catch(e)
	{
		//alert(e.message);
	}
	var tally = $(response).find("tally").text();
	var needed = $(response).find("tally").attr("need");
	if(tally >- 1)
		SetTally(tally, needed);
	$(response).find("element").each(function(){
		// Add the element content to the map as pushpin content
		var colour = $(this).attr("colour");
		var icon = "images/btn_hotspots_" + colour + ".png";
		//var title = "test";
		var infoContent = $(this).children("content").text();
		var lat = $(this).attr("lat");
		var lon = $(this).attr("lon");
		AddPushPin(icon, infoContent, lat, lon);
		
	});
}

function SetTally(tally, needed)
{
	var el = $("#tallyValue, #entriesValue");
	$("#tallyValue").text(tally);
	if($.browser.msie)
		el.css("top", "9px");
	if(tally > needed - 1)
	{
		// Set the text of the tally to be vertically centred with this hack
		$("#mapTally .tallyText").css("top", "0px").css("position", "relative");
		$("#underTenNote").hide();
		var entries = tally / needed;
		entries = new String(entries);
		var decimalPoint = entries.indexOf(".");
		if(decimalPoint > 0)
			entries = entries.substr(0, decimalPoint);
			
		$("#entriesValue").text(padleft(entries,"0",2));
		$("#entriesTally").fadeIn();
	}
	else // Set the text of the tally to be vertically centred with this hack
		$("#mapTally .tallyText").css("top", "-8px").css("position", "relative");
	$("#mapTally").fadeIn();
}

function ReceiveLoginResponse(response)
{
	//JBT("ReceiveLoginResponse entry");
	// If answer was already submitted
	// Login will re-submit an answer
	var xmlResponse = $(response);
	////JBT("ReceiveLoginResponse parsed");
	var loginResponse = xmlResponse.find("response").text();
	var answerResponse = xmlResponse.find("answerResponse").text();
	var localEmail = xmlResponse.find("response").attr("email");
	if(localEmail && localEmail != "")
		jbtemail = localEmail;
	
	var ld = $(response).find("ld").text();
	
	//JBT("ReceiveLoginResponse response: " + loginResponse + " answered: " + answerResponse);
	var showAlreadyAnswered = answerResponse == "alreadyAnswered";
	var greaterThanTenAnswered = answerResponse == "correctTenAnswered";
	
	
	//RefreshMap();
	switch(loginResponse)
	{
		case "ok":
			//JBT("ReceiveLoginResponse logging in");
			member = true;
			if(showAlreadyAnswered)
				answer = 2;
			ShowPersonalPage();
			if(showAlreadyAnswered)
				$(".alreadyAnswered, #personalAnswerAlreadySubmitted").show();
			// Display the user's name if they have already registered
			var firstAndLastName = 	xmlResponse.find("response").attr("name");
			firstAndLastName && firstAndLastName != "" && ShowLoggedInUserName(firstAndLastName);
			// Process the registration possibility after ensuring the rest of the page is set up properly if this method is cancelled
			if(greaterThanTenAnswered)
				GreaterThanTenAnswered(ld);
			break;
		case "notverified":
			window.location = "verify.aspx"
			break;
		case "invalid":
			// The details given were invalid. The email auto-validates before form submit, so the password
			// Must have been incorrect
			if(!loginAttempt)
				ShowAnonymousPage();
			loginAttempt = false;
			$(".loginPasswordError").show();
			$("#loginPersonalPasswordError").show();
			break;
		case "norequest":
			break;
	}
}

function ReceiveRegisterResponse(response)
{
	if(response.length > 20)
		response = "invalid";
	var responseVals = response.split(':');
	
	var showCorrect = responseVals.length > 1 && responseVals[1] == "correctLoggedIn";
	if(showCorrect)
		answer = 1;

	RefreshMap();
	switch(responseVals[0])
	{
		case "ok": // Logged in
			member = true;
			CountMe("Registered");
			ShowPersonalPage();
			break;
		case "invalid":
			$(".registerError").show();
			$(".answerInstruction").hide();
			break;
		case "norequest":
			break;
	}
}


function ReceiveAnswerResponse(response)
{
	//JBT("ReceiveAnswerResponse entry");
	var responseVals = response.split(':');
	
	switch(responseVals[0])
	{
		case "correctLoggedIn":
			//JBT("ReceiveAnswerResponse correctLoggedIn");
			// Show personal map
			CountMe("Correct: Logged in");
			answer = 1;
			ShowPersonalPage();
			
			$("#answerPersonalField").hide();
			$("#personalAnswerSubmitted").show();
			break;
		case "correctAnonymous":
			//JBT("ReceiveAnswerResponse correctAnonymous");
			// Show login fields
			// answer == some answer
			CountMe("Correct: Anonymous");
			answer = 1;
			$(".answerCorrect").show();
			$("#submitQuestions, .submitAnswerField").hide();
			$("#combinedLoginRegister").slideDown(1000);
			break;
		case "incorrectLoggedIn":
			// Show personal map and an error message
			// (we already were logged in but got 
			// the answer wrong, so show the error
			// not the field)
			CountMe("Incorrect: Logged in");
			answer = 0;
			ShowPersonalPage();
			$(".submitAnswerField, .answerInstruction").hide();
			$(".answerError, #myPersonalBingMapHeader").show();
			break;
		case "incorrectAnonymous":
			// Leave the answer field in place
			// And show an error message
			CountMe("Incorrect: Anonymous");
			answer = -1;
			$(".answerError").show();
			$(".answerInstruction").hide();
			break;
		case "alreadyAnswered": // Logged in
			//JBT("ReceiveAnswerResponse correctAlreadyAnswered");
			CountMe("Correct: Already Answered");
			member = true;
			answer = 2;
			// Show personal map
			ShowPersonalPage();
			break;
		case "correctTenAnswered":
			GreaterThanTenAnswered(responseVals[1]);
			break;
			
	}
	answering--;
}

function GreaterThanTenAnswered(loginDetail)
{
	// Track
	CountMe("Answered their tenth location");
	// Show a message or...
	// Forward the user to the secure page.
	window.location = secureRegistration + loginDetail;//"register.aspx";
}

var secureRegistration = "https://securebingaroundtheworld.co.uk/register.aspx?ld=";//"http://localhost:50320/BAWSecure/register.aspx?ld=";

function padleft(val, ch, num) {
    var re = new RegExp(".{" + num + "}$");
    var pad = "";
    if (!ch) ch = " ";
    do  {
        pad += ch;
    }while(pad.length < num);
    return re.exec(pad + val)[0];
}

