// JScript File 
// $$$ Depedency on GameHostScripts.js and PlayGame.aspx

var eventType;
var docRequest;
var docResponse;

function OnError(data)
{
    // $$$ Developer Use Only
	OutputDebugString("OnError:" + data);
    // $$$ END Developer Use Only

    //
    // sample for SYS_EndGame
    //
//    var re = new RegExp("\<eventType\>([a-zA-Z_]+)\</eventType\>");
//    var eventName = lastEvent.match(re);
	if (eventType == "SYS_EndGame" || eventType == "SYS_EndGame".toLowerCase())
	{
		$("endGameScreenTween").className = "endGameScreenHide";
		closeEndGameScreen();
	}



	docRequest = null;
	docResponse = null;
}

function OnResponse(data)
{
    // $$$ Developer Use Only
	OutputDebugString("OnResponse:" + data);
    // $$$ END Developer Use Only

    //
    // sample for SYS_EndGame
    //

    var oEndGameData = {};
    //oEndGameData.IsMultiplayerGame = false;
    //oEndGameData.IsOnlineGame = false;
    
    //////////////////         Get SessionToken updated with new score by GIS //////////
	var tokenRE = new RegExp("<string>SessionToken<\/string><string>(.)*<\/string>");
	var sessionPare = data.match(tokenRE, "gm");
	var updatedSessionToken = "";

	if(sessionPare && sessionPare[0])
	{
		if(sessionPare[0].split("<string>")[2])
			updatedSessionToken = sessionPare[0].split("<string>")[2].replace("</string>", "");
	}
	/////////////////////////////////////////////////////////////////////////////////////

	
    // save data
    // data.toLowerCase() is HACK, because Firefox xpath dont work with upper cases
    // remove <?xml version="1.0" encoding="utf-16"?> from GIS response.	
    data = data.replace('<?xml version="1.0" encoding="utf-16"?>', "");
	docResponse = XML.parse(XML.unescape(data));

	var eventTypeNode = XML.getNode(docRequest, "/GameEvent/eventType", null);
    if (eventTypeNode != null) eventType = XML.getNodeText(eventTypeNode);

    // parse high-score - start
    if(eventType == "SYS_EndGame" || eventType == "SYS_EndGame".toLowerCase())
    {

        var isMultiplayer = false;
		var playerSelfNode = XML.getNode(docRequest, "GameEvent/eventParams/Entry/string/data/player[@self = 'true']", null);

		if (playerSelfNode != null)
		{
			isMultiplayer = true;
		}

//		alert("isMultiplayer: " + isMultiplayer);

		if (isMultiplayer == false) 
		{
		    oEndGameData.isSinglePlayer = true;
		    oEndGameData.isMultiplayer = false;
		    
  			var scoreEntryNode = XML.getNode(docRequest, "GameEvent/eventParams/Entry[string = 'ScoreSubmit']", null);
			var scoreNode;
			if(scoreEntryNode)
				scoreNode = XML.getNode(scoreEntryNode.lastChild, "game/score", null);

			if (scoreEntryNode != null && scoreNode != null)
			{
				oEndGameData.yourScore = Number(XML.getNodeText(scoreNode));
				
				// Refresh chat for update user-score, for single player game only.
				var user = new UA.User();
				user.GetUserDetails(Chat_UpdatePlayerScore(Number(XML.getNodeText(scoreNode))), function(){}, function(){} );
				
//				alert("oEndGameData.yourScore: " + oEndGameData.yourScore);

				var userHighScoreEntryNode = XML.getNode(docResponse, "GameEventResponse/responseParams/Entry[string = 'UserHighScoreDiff']", null);
				var userHighScoreNode;
				if(userHighScoreEntryNode)
					userHighScoreNode = userHighScoreEntryNode.lastChild;
			
				
				if (userHighScoreEntryNode != null && userHighScoreNode != null)
				{
					var diffNum
					// update fields
					diffNum = Number(XML.getNodeText(userHighScoreNode));
					if (diffNum > 0)
					{
						oEndGameData.highScore = oEndGameData.yourScore;
						oEndGameData.isPersonalHighScore = true;
						
					}
					else
					{
						oEndGameData.highScore = oEndGameData.yourScore - diffNum;
						oEndGameData.isPersonalHighScore = false;
					}
					
//					alert(" oEndGameData.isPersonalHighScore: " + oEndGameData.isPersonalHighScore);
//					alert(" oEndGameData.highScore : " + oEndGameData.highScore);
				}
			}
		}
		else  // multiplayer = true
		{
			try
			{
				var newRatingNum = Number(XML.getNodeText(XML.getNode(playerSelfNode, "newrating", null)));
				var oldRatingNum = Number(XML.getNodeText(XML.getNode(playerSelfNode, "oldrating", null)));
				oEndGameData.isSinglePlayer = false;
				oEndGameData.isMultiplayer = true;
				oEndGameData.newRating = newRatingNum;
				oEndGameData.isWinner = newRatingNum > oldRatingNum;
			}
			catch(e)
			{
				oEndGameData.isSinglePlayer = false;
				oEndGameData.isMultiplayer = true;
				oEndGameData.isWinner = false;
				oEndGameData.newRating = 0;
			}

//		  alert("new rating: " + oEndGameData.newRating);
		}
        
        
		if(updatedSessionToken)
			Clearance.load(updatedSessionToken);

        GIS_PopulateEndGameScreen(oEndGameData)
         
        // display high score.
        $("endGameScreen").className = "endGameScreenShow";
        $("endGameScreenTween").className = "endGameScreenHide";
    }

    // reset data
}

function OnEvent(data)
{
	docRequest = XML.parse(XML.unescape(data));
	
	var eventTypeNode = XML.getNode(docRequest, "/GameEvent/eventType", null);


    // find event name.
	eventType = XML.getNodeText(eventTypeNode);
	if (eventType == "SYS_EndGame" || eventType == "SYS_EndGame".toLowerCase())
	{
		// find score submitted
		// find high score diff
		// update fields
		// display high score.
		gameHostContainer.className = "oghStartup";
		$("endGameScreenTween").className = "endGameScreenShow";
	}
}
