﻿
//These are the test results
var m_arrTestReferences = new Array();

function LoadTest(strFilename, strName)
{
	// Load the test XML and info
	var xdTestXml = SimLoadDocument(g_strResourceDirectory + strFilename);
	var strTestGuid = xdTestXml.documentElement.getAttribute("guid");
	
	AddNavPanel(strTestGuid, strName, "LoadTestContentInfo('" + strTestGuid + "');");
	
	//Load the current results from the player
	var xdTestResultXml = GetLocalResults(strTestGuid);
	
	var tTestRef = new CTest(strTestGuid, strFilename, xdTestXml, xdTestResultXml);
	m_arrTestReferences.push(tTestRef);
}

function GetTestRef(strGuid)
{
	for(var i=0; i < m_arrTestReferences.length;i++)
	{
		var tTestRef = m_arrTestReferences[i];
		if(tTestRef.Guid == strGuid)
			return tTestRef;
	}
	return null;
}

//This will hide the current player, show a summary of the test and put up a start test link
function LoadTestContentInfo(strGuid)
{
	tTestRef = GetTestRef(strGuid);
	//Get the panel
	_ContentWin = GetPageObject("ContentWin");
	
	//Hide eventual content info
	RemoveContentInfo();
	
	//Find the player and hide it
	HidePlayer();
	
	//Show the test info
	var xdTestXml = SimLoadDocument(g_strResourceDirectory + tTestRef.Filename);
	elmTestDocElement = xdTestXml.documentElement;
	var elmDefinition = elmTestDocElement.selectSingleNode("//DEFINITION");
	var intAmountQuestions = parseInt(elmDefinition.getAttribute("askfor"));
	var intTestType = parseInt(elmDefinition.getAttribute("testtype"));
	
	var bShowAnswers = elmDefinition.getAttribute("showanswers");
	
	var strHTML = "";
	var intReqScore = 0;
	if(intTestType==0)
	{
		intReqScore = parseInt(elmDefinition.getAttribute("requiredscore"));
		strHTML = GetString("TEXT_EXAM_CONS_OF") + " " + intAmountQuestions + GetString("TEXT_QUESTIONS") + "<BR>";
		strHTML += GetString("TEXT_YOU_NEED") + " " + intReqScore + " " + GetString("TEXT_PERCENTS_TO_PASS");
	}
	else
	{
		intReqScore = parseInt(elmDefinition.getAttribute("requiredscore"));
		strHTML = GetString("TEXT_DIAGN_CONS_OF") + " " + intAmountQuestions + "&nbsp;" + GetString("TEXT_QUESTIONS") + ".<p>";
		strHTML += GetString("TEXT_DIAGN_DESC");
	}
	
	strHTML += "<p>";
	strHTML += "<span class='arrowlink' onclick='javascript:StartTest(\"" + tTestRef.Filename + "\")'>" + GetString("TEXT_START_TEST") + "</span>";
	strHTML += "<p>";
	
	if(tTestRef.ResultXml == null)
	{
	    strHTML += GetString("TEXT_TEST_NEVER_ATTEMPTED");
	}
	else
	{
		var intScore = parseInt(tTestRef.ResultXml.documentElement.getAttribute("score"));
		if(intTestType == 0) //Exam
		{
			//Default if missing
			if (bShowAnswers == null)
				bShowAnswers = "false";
				
		    strHTML += "<span class=\"header1\">" + GetString("LABEL_YOUR_RESULTS") + "</span><br/>";
			strHTML += "<DIV style='padding-left:20px' >";
			strHTML += "<BR>";
			strHTML += "<img src='design/req_arrow.png' style='position:relative;top:-2px'> = " + GetString("TEXT_REQUIREMENTS") + "&nbsp;";
			strHTML += "<img src='design/cat_passed.png' style='position:relative;top:-0px'> = " + GetString("TEXT_PASSED") + "&nbsp;";
			strHTML += "<img src='design/cat_failed.png' style='position:relative;top:-0px'> = " + GetString("TEXT_FAILED") + "&nbsp;";
			strHTML += "<br>";
			strHTML += "<br>";
			
			strHTML += "<table border=0><tr valign=bottom> <td>";
			strHTML += "<span class='bold'>" + GetString("LABEL_SCORE") + "</span>&nbsp;";
			strHTML += "</td><td>";
			
			if(intScore >= intReqScore)
				strHTML += "<img src='design/cat_passed.png' style='margin-bottom:3px;'>";
			else
			    strHTML += "<img src='design/cat_failed.png' style='margin-bottom:3px;'>";
				
			strHTML += "</td><td>";
			
			strHTML += GetStatusBar(intScore, intReqScore);
			strHTML += "</td><td>";
			strHTML += "&nbsp;" + intScore + "%";
			strHTML += "</td></tr></table>";
			strHTML += "<br>";

			if (intScore >= intReqScore)
			{
			    strHTML += GetString("TEXT_GRATS_EXAM");
			    strHTML += "<br>";
			    strHTML += "<br>";
				strHTML += GetString("TEXT_PRINT_DIPLOMA");
				strHTML += "<br>";
				strHTML += "<br>";
				strHTML += "<input style='border:1px solid silver;' id='txtDiplomaName' type='text' />&nbsp;";
				strHTML += "<a class='arrowlink' href='javascript:PrintTest(" + intScore + ");'>" + GetString("TEXT_PRINT") + "</a>";
			}
			else
			{
			    strHTML += GetString("TEXT_SORRY_EXAM");
			}
			strHTML += "</DIV>";
			
		}
		else if(intTestType == 1)
		{
			//Default if missing
			if (bShowAnswers == null)
				bShowAnswers = "true";

			strHTML += GetCategoryResults(tTestRef);
		}

		if (bShowAnswers.toLowerCase()=="true")
		{
			strHTML += "<p>";
			strHTML += GetRightAnswers(tTestRef);
		}
	}
	var divDest = document.createElement("<DIV id='elmContentInfo'>");
	divDest.innerHTML = strHTML;
	_ContentWin.appendChild(divDest);
}

function GetRightAnswers(tTestRef)
{
	//ANSWERS
	var strReturn = "<img id='signof_ans_" + tTestRef.Guid + "' border=0 src='design/plus.png' style='cursor:hand' onclick='ToggleChildrenNoStruct(\"_ans_" + tTestRef.Guid + "\")'>";
	strReturn += "&nbsp;";
	strReturn += "<span class='header1' style='cursor:hand' onclick='ToggleChildrenNoStruct(\"_ans_" + tTestRef.Guid + "\")'>" + GetString("LABEL_RIGHT_ANSWERS") + "</span><br/>";
	
	strReturn += "<DIV style='display:none;' style='padding-left:20px' id='childrenof_ans_" + tTestRef.Guid + "' >";
	//Get the answers
	var strGuid = tTestRef.TestXml.documentElement.getAttribute("guid");
	var nlAnswers = tTestRef.ResultXml.selectNodes("//QUESTRESULT");
	for( i = 0; i < nlAnswers.length; i++)
	{
	    strReturn += "<p><span class='header2'>" + GetString("TEXT_QUESTION") + " " + (i + 1) + "</span><br><br>";
		var elmAnswer = nlAnswers.item(i);
		var elmQuestion = tTestRef.TestXml.selectSingleNode("//QUESTION[@guid=\"" + elmAnswer.getAttribute("resource") + "\"]");
		if(elmQuestion.getAttribute("type") == "1") // G A P  Q U E S T I O N
		{
			strReturn += GetGapAnswerReport(elmQuestion, elmAnswer);
		}
		else if(elmQuestion.getAttribute("type") == "0") // C H O I C E  Q U E S T I O N
		{
			strReturn += GetChoiceAnswerReport(elmQuestion, elmAnswer);
		}
		else if(elmQuestion.getAttribute("type") == "2") // P R A C T I C A L  Q U E S T I O N
		{
			strReturn += GetPracticalAnswerReport(elmQuestion, elmAnswer);
		}
	}
	strReturn += "</DIV>";
	return strReturn;
}

function GetCategoryResults(tTestRef)
{
	var intAmountQuest = tTestRef.TestXml.selectSingleNode("//DEFINITION/@askfor").value
	var strReturn = "";

	//CATEGORIES
	strReturn += "<img id='signof_cat_" + tTestRef.Guid + "' border=0 src='design/minus.png' style='cursor:hand' onclick='ToggleChildrenNoStruct(\"_cat_" + tTestRef.Guid + "\")'>";
	strReturn += "&nbsp;";
	strReturn += "<span class='header1' style='cursor:hand' onclick='ToggleChildrenNoStruct(\"_cat_" + tTestRef.Guid + "\")'>" + GetString("LABEL_CATEGORY_RESULTS") + "</span><br/>";
	
	strReturn += "<DIV style='display:block;' id='childrenof_cat_" + tTestRef.Guid + "'  style='padding-left:20px' >";

	//Get the categories from the test
	var elmCategories = tTestRef.TestXml.selectSingleNode("//TEST/CATEGORIES");

	var strGuid = tTestRef.TestXml.documentElement.getAttribute("guid");

	strReturn += "<BR>";
	strReturn += "<img src='design/req_arrow.png' style='position:relative;top:-2px'> = " + GetString("TEXT_REQUIREMENTS") + "&nbsp;";
	strReturn += "<img src='design/cat_passed.png' style='position:relative;top:-0px'> = " + GetString("TEXT_PASSED") + "&nbsp;";
	strReturn += "<img src='design/cat_failed.png' style='position:relative;top:-0px'> = " + GetString("TEXT_FAILED") + "&nbsp;";
	strReturn += "<BR>";
	strReturn += "<BR>";

	strReturn += "<table border='0'>";
	for (var i = 0; i < elmCategories.childNodes.length; i++)
	{
		var elmCategory = elmCategories.childNodes(i);
		var strCatName = "";

		if (CatHasResults(tTestRef, elmCategory.getAttribute("id")) == false)
			continue;

		var intScore = parseInt(GetOneCategoryResult(tTestRef, elmCategory.getAttribute("id")));
		var intReq = parseInt(GetOneCategoryRequirement(tTestRef, elmCategory.getAttribute("id")));

		if (elmCategory.getAttribute("id") == "-1")
		{
			strCatName = "Uncategorized";
		}
		else
		{
			strCatName = elmCategory.getAttribute("name");
		}
		strReturn += "<TR valign='bottom'>";
		strReturn += "<TD valign=middle>";

		if (intScore >= intReq)
			strReturn += "<img src='design/cat_passed.png' style='position:relative;top:3px'>";
		else
			strReturn += "<img src='design/cat_failed.png' style='position:relative;top:3px'>";

		strReturn += "</TD >";
		strReturn += "<TD width=200 nowrap>";
		strReturn += strCatName;
		strReturn += "</TD>";
		strReturn += "<TD align=\"right\" >";
		strReturn += GetStatusBar(intScore, intReq);
		strReturn += "</TD>";
		strReturn += "<TD >";
		strReturn += "" + intScore + "%";
		strReturn += "</TD>";
		strReturn += "</TR>";
	}
	strReturn += "</table>";
	strReturn += "</DIV>";

	return strReturn;
}

function GetPracticalAnswerReport(elmQuestion, elmUserAnswer)
{
	var strReturn = "<DIV style='padding-left:20px' >";
	strReturn += "<SPAN >" + elmQuestion.getAttribute("text") + "</SPAN><BR>";
	strReturn += "<br>";
	strReturn += "<SPAN class='bold' >" + GetString("TEXT_CHOSEN_COMB") + " ";
	strReturn += elmUserAnswer.getAttribute("score") + " points</SPAN>";
	strReturn += "</DIV>";
	return strReturn;
}

function GetGapAnswerReport(elmQuestion, elmUserAnswer)
{
	var strReturn = "<DIV style='padding-left:20px' >";
	//These are the answers
	var arrAnswers = elmUserAnswer.getAttribute("answerdefinition").split(',');

	var strUserAnswer = "<SPAN class='bold'>" + GetString("TEXT_YOUR_ANSWER") + "</SPAN><BR>";
	var strRightAnswer = "<SPAN class='bold'>" + GetString("TEXT_RIGHT_ANSWER") + "</SPAN><BR>";
	
	var intGapCounter=0;
	for(var j = 0 ; j < elmQuestion.childNodes.length;j++)
	{
		var elmSegment = elmQuestion.childNodes(j);
		if(elmSegment.getAttribute("type")=="gap")
		{
			strUserAnswer	+= "<SPAN class=\"gap\" >";
			if(arrAnswers[intGapCounter] == "")
				strUserAnswer	+= "&nbsp;";
			else
				strUserAnswer	+= arrAnswers[intGapCounter];
			
			strUserAnswer	+= "</SPAN>";
			
			strRightAnswer	+= "<SPAN class=\"gap\" >";
			var k;
			var strSlash = "";
			for(k = 0; k < elmSegment.childNodes.length; k++)
			{
				var elmAnswer = elmSegment.childNodes(k);
				strRightAnswer += strSlash + elmAnswer.getAttribute("value") + " (" + elmAnswer.getAttribute("points") + ")";
				strSlash = "/";
			}
			strRightAnswer += "</SPAN>";
			intGapCounter++;
		}
		else
		{
			var str = new String();
			str = elmSegment.getAttribute("value");
			rxRep = /¤/g;
			//Ugly fix for the spaces
			strRightAnswer +="<SPAN >" + str.replace(rxRep," ") + "</SPAN>";
			strUserAnswer  +="<SPAN  >" + str.replace(rxRep," ") + "</SPAN>";
		}
	}
	strReturn += strUserAnswer + "<BR><BR>";
	strReturn += strRightAnswer + "<BR><BR>";

	strReturn += "<SPAN class='bold'>" + GetString("TEXT_CHOSEN_COMB") + " </SPAN>";
	strReturn += "<SPAN class='bold'> " + elmUserAnswer.getAttribute("score") + " </SPAN>";
	strReturn += "<SPAN class='bold'>" + GetString("TEXT_POINTS") + ".</SPAN>";
	strReturn += "</DIV>";
	
	return strReturn;

}

function GetChoiceAnswerReport(elmQuestion, elmAnswer)
{
	//These are the answers
	var arrAnswers = elmAnswer.getAttribute("answerdefinition").split(',');
	
	//The question text
	var strReturn = "<DIV style='padding-left:20px' >";
	strReturn += "<SPAN >" + elmQuestion.getAttribute("text") + "</SPAN><BR>";
	
	//Loop the possible answers
	for(var j = 0 ; j < elmQuestion.childNodes(0).childNodes.length; j++)
	{
		var elmAnswerItem = elmQuestion.childNodes(0).childNodes(j);
		
		var strChecked = "";
		if(arrAnswers[j] == "1")
			strChecked = "checked";

		strReturn += "<INPUT type=\"checkbox\" " + strChecked + " disabled>";
		strReturn += "<SPAN class=\"small\">" + elmAnswerItem.getAttribute("value") + " (" + elmAnswerItem.getAttribute("points") + ")" + "</SPAN><BR>";
	}
	strReturn += "<br>";
	strReturn += "	<SPAN class='bold'>" + GetString("TEXT_CHOSEN_COMB") + " </SPAN>";
	strReturn += "	<SPAN class='bold'> " + elmAnswer.getAttribute("score") + " </SPAN>";
	strReturn += "	<SPAN class='bold'>" + GetString("TEXT_POINTS") + ".</SPAN>";
	strReturn += "</DIV>";
	return strReturn;
}

function GetOneCategoryRequirement(tTestRef, intId)
{
	var intRequirement = 0;
	var elmRequirement = tTestRef.TestXml.selectSingleNode("//CATEGORYREQUIREMENTS/CATEGORY[@id=\"" + intId + "\"]");
	
	if(elmRequirement!=null)
		intRequirement = elmRequirement.getAttribute("value");
	
	return intRequirement;
}


function GetOneCategoryResult(tTestRef, intId)
{
	var strGuid = tTestRef.TestXml.documentElement.getAttribute("guid");
	var nlAnswers = tTestRef.ResultXml.selectNodes("//QUESTRESULT[@categoryid=\"" + intId + "\"]");
	
	var intCatMaxScore = 0;
	var intCatScore = 0;
	for( i = 0; i < nlAnswers.length; i++)
	{
		var elmQuestion = nlAnswers.item(i);
		intCatMaxScore	+= parseInt(elmQuestion.getAttribute("maxscore"));
		intCatScore		+= parseInt(elmQuestion.getAttribute("score"));
	}
	
	//Now get a percent
	var intCatPercentScore = 0;
	if(intCatScore > 0 && intCatMaxScore > 0)
	{
		intCatPercentScore = (100 / intCatMaxScore) * intCatScore;
	}
	
	return 	intCatPercentScore;
}

//Used from the course
function IsCategoryPassed(intCategoryId)
{
	for(var i=0; i < m_arrTestReferences.length;i++)
	{
		var tTestRef = m_arrTestReferences[i];
		if(TestHasCategory(tTestRef, intCategoryId)==true && CatHasResults(tTestRef, intCategoryId))
		{
			return GetOneCategoryResult(tTestRef, intCategoryId) >= GetOneCategoryRequirement(tTestRef, intCategoryId);
		}
	}
	
	//Not found (no results or cat not tested)
	return true;
}

function TestHasCategory(tTestRef,intCategoryId)
{
	//Exams dont test categories
	if(tTestRef.TestXml.documentElement.getAttribute("type")=="0")
		return false;
		
	var elmCategory = tTestRef.TestXml.selectSingleNode("//CATEGORIES/CATEGORY[@id=\"" + intCategoryId + "\"]" );
	return (elmCategory != null);
}
function CatHasResults(tTestRef,intCategoryId)
{
	if(tTestRef.ResultXml == null)
		return false; //Not results at all
	
	var elmCategory = tTestRef.ResultXml.selectSingleNode("//QUESTRESULT[@categoryid=\"" + intCategoryId + "\"]" );
	return (elmCategory != null);
}

var m_intPrintPoints = 0;
var m_strPrintName = "";
var m_strPrintTraining = "";
function PrintTest(intPoints)
{
	var wPopWin = window.open("diploma/diploma.htm", "diploma");
	if (wPopWin == null)
	{
		alert(GetString("TEXT_POPUP_BLOCK_PRINT"));
		return;
	}
	else
	{
		wPopWin.SetData(intPoints, txtDiplomaName.value, m_strProjectTitle);
		wPopWin.print();
	}
}