home *** CD-ROM | disk | FTP | other *** search
/ Chip 2003 December / CMCD1203.ISO / Software / Shareware / Programare / toolkit / toolkitsetup.msi / Instal01.cab / _DD2FF7660D144EF3ADA8DC9AD8DE8805 < prev    next >
Text File  |  2003-10-15  |  19KB  |  452 lines

  1. var correctAnswers = lastPage = currentPage = 0;
  2. var evalCompleted = false;
  3.  
  4. //Declare needed variables
  5. var pageURL = hasQuery = queryString = queryParts = whatStep = nextStep = evalUniqueID = "";
  6. var usedQuestions = new Array();
  7.  
  8. //OBJECT: Evaluation Question Object created by USER in inc_Questions and inc_Objectives 
  9. function objEvalQuestion(intUniqueID, txtQuestionType)
  10. {
  11.     this.type = 'EvaluationQuestion';
  12.     this.evalUniqueID = intUniqueID;
  13.     this.name = "q" + intUniqueID;
  14.     this.evalQuestion = '';
  15.     this.evalQuestionType = txtQuestionType.toLowerCase();
  16.     this.evalRationale = '';
  17.     this.evalPointValue = 1;
  18.     this.evalDistractors = new Array();
  19.     this.addDistractor = setDistractor;
  20.     this.shuffleDistractors = randomizeDistractors;
  21.     this.answeredCorrectly = false;
  22.     var instrVerb = (this.evalQuestionType == "text") ? "Enter": "Select";
  23.     var instrNum = (this.evalQuestionType == "checkbox") ? "s": "";
  24.     this.txtInstructions = "<b>" + instrVerb + " the correct answer" + instrNum + " and click the 'Submit' button</b>\n";
  25.     return(this);
  26. }
  27.  
  28. //OBJECT: Question Distractor Object created by setDistractor()
  29. function buildDistractor(blnCorrect)
  30. {
  31.     this.isCorrect = blnCorrect;
  32.     this.txtValue = "";
  33.     this.txtDisplay = "";
  34.     this.incorrectRationale = "";
  35.     this.isSelected = false;
  36.     this.txtInput = "";
  37.     return(this);
  38. }
  39.  
  40. //Called by User in Lesson Page, used to retrieve the CopyRight statement
  41. function txtCopyRight()
  42. {
  43.     var theReturn = (copyright != "") ? copyright: " ";
  44.     return theReturn;
  45. }
  46.  
  47. //Called by evalDisplay AND getStarted() to set all variables for the current page's use
  48. function setEnvironment()
  49. {
  50.     pageURL = parent.frames.evalFrame.location.href;
  51.     hasQuery = (pageURL.indexOf("?") > 0) ? true: false;
  52.     queryString = (hasQuery) ? pageURL.split("?")[1]: "";
  53.     whatStep = (getQueryStringValue("whatStep") == '') ? "overview": getQueryStringValue("whatStep");
  54.     nextStep = (whatStep == "next") ? "check": "next";
  55.     lastPage = (whatStep == "overview") ? 0: parseInt(getQueryStringValue("currentPage"));
  56.     currentPage = (whatStep == "next") ? lastPage+1: lastPage;
  57.     evalUniqueID = getQueryStringValue("evalUniqueID");
  58. }
  59.  
  60. ///Called by evalDisplay, evaluates the current state and draws the correct page
  61. function getStarted()
  62. {
  63.     setEnvironment();
  64.     var theReturn;
  65.     if(whatStep == "check")
  66.     {
  67.         var evalToCheck = rtnEvalQuestion(evalUniqueID, arrQuestions);
  68.         var answerSubmitted = getQueryStringValue(evalToCheck.name);
  69.         answerSubmitted = (answerSubmitted) ? answerSubmitted: answerSubmitted = " ";
  70.         setSelected(answerSubmitted, evalToCheck);
  71.         theReturn = writeAnswerHTML(evalToCheck, answerSubmitted);
  72.         evalCompleted = (intNumQuestions == currentPage) ? true: false;
  73.     }else{
  74.         if(whatStep == "overview")
  75.         {
  76.             theReturn = writeOverviewHTML();
  77.         }else{
  78.             theReturn = (intNumQuestions >= currentPage) ? writeQuestionHTML(arrQuestions[lastPage]): writeResultsHTML();
  79.         }
  80.     }
  81.     return(theReturn);
  82. }
  83.  
  84. //Called by getStarted() AND setEnvironment(), used to extract a named value from Querystring
  85. function getQueryStringValue(fieldName)
  86. {
  87.     var theFieldName = fieldName + "=";
  88.     var rtnValue = "";
  89.     var tmpHolder = new Array();
  90.     var arrRtnValue = new Array();
  91.     if(hasQuery)
  92.     {
  93.         if(queryString.indexOf(theFieldName) > -1)
  94.         {
  95.             tmpHolder = queryString.split(theFieldName);
  96.             if(tmpHolder.length < 3)
  97.                 rtnValue = tmpHolder[1].split("&")[0];
  98.             else
  99.                 for(i = 1; i < tmpHolder.length; i++)
  100.                     arrRtnValue[arrRtnValue.length] = tmpHolder[i].split("&")[0];
  101.         }
  102.     }
  103.     if(arrRtnValue.length < 1)
  104.         return(rtnValue);
  105.     else
  106.         return(arrRtnValue);
  107. }
  108.  
  109. //Called by evalDisplay to write the page title
  110. function writePageTitle()
  111. {
  112.     return(modTitle);
  113. }
  114.  
  115. //Called by evalDisplay to write the "Question number of questions" images
  116. function writePageInfo()
  117. {
  118.     var txtPageInfo;
  119.     if(currentPage == 0)
  120.     {
  121.         txtPageInfo = 'Overview';
  122.     }else{
  123.         if(currentPage <= intNumQuestions)
  124.         {
  125.             txtPageInfo = 'Question ' + currentPage + ' of ' + intNumQuestions;
  126.         }else{
  127.             txtPageInfo = 'Results';
  128.         }
  129.     }
  130.     return(txtPageInfo);
  131. }
  132.  
  133. //Called by getStarted(), uses to return a reference to an Evaluation Question Object by UniqueID
  134. function rtnEvalQuestion(intTheUniqueID, arrEvalQuestions)
  135. {
  136.     var found = false, evalQuestion;
  137.     for(evalQuestion in arrEvalQuestions)
  138.         if(arrEvalQuestions[evalQuestion].evalUniqueID == intTheUniqueID)
  139.             return(arrEvalQuestions[evalQuestion]);
  140.     return(found);
  141. }
  142.  
  143. //Called by getStarted(), used to verify identify the answer provided
  144. function setSelected(theSelectedAnswers, objQuestion)
  145. {
  146.     var theReturn;
  147.     var arrQuestionAnswers = objQuestion.evalDistractors;
  148.     var arrSelectedAnswers = new Array();
  149.     var questionType = objQuestion.evalQuestionType;
  150.     if(theSelectedAnswers[1])
  151.         arrSelectedAnswers = theSelectedAnswers;
  152.     else
  153.         arrSelectedAnswers[0] = theSelectedAnswers;
  154.     var thisTestValue, theSetValue;
  155.     if(questionType == "text")
  156.     {
  157.         thisTestValue = new RegExp(objQuestion.evalDistractors[0].txtValue,"gi");
  158.         theReturn = arrSelectedAnswers[0].match(thisTestValue);
  159.         theReturn = (theReturn != null) ? true: false;
  160.         objQuestion.evalDistractors[0].isSelected = theReturn;
  161.         theSelectedAnswers = cleanText(theSelectedAnswers);
  162.         objQuestion.evalDistractors[0].txtInput = theSelectedAnswers;
  163.     }else{
  164.         var thisDistractor, thisAnswer;
  165.         for(thisAnswer in arrSelectedAnswers)
  166.             for(thisDistractor in arrQuestionAnswers)
  167.                 if(arrSelectedAnswers[thisAnswer] == arrQuestionAnswers[thisDistractor].txtValue)
  168.                     arrQuestionAnswers[thisDistractor].isSelected = true;
  169.     }
  170.     return true;
  171. }
  172.  
  173. //Called by setSelected() and writeAnswerHTML(), used to format selected values
  174. function cleanText(inText)
  175. {
  176.     var theReturn = unescape(inText).replace(/\s|\+/gi, " ").replace("\"", """).replace(/\'/gi, "´");
  177.     return(theReturn);
  178. }
  179.  
  180. //Called by objEvalQuestion(): addDistractor() method to create a Distractor (potential answer)
  181. function setDistractor(blnCorrect)
  182. {
  183.     this.evalDistractors[this.evalDistractors.length] = new buildDistractor(blnCorrect);
  184. }
  185.  
  186. //Called by objEvalQuestion(): shuffleDistractors() used to shuffle the order of the Distractors
  187. function randomizeDistractors()
  188. {
  189.     shuffle(this.evalDistractors);
  190. }
  191.  
  192. //Called by randomizeDistractors() and inc_Questions, used to shuffle the order of Distractors or Evaluation Questions
  193. function shuffle(arrToShuffle)
  194. {
  195.     var i, j, tempHolder;
  196.     for(i = 0; i < arrToShuffle.length; i++)
  197.     {
  198.         j = Math.floor(Math.random() * arrToShuffle.length);
  199.         tempHolder = arrToShuffle[i];
  200.         arrToShuffle[i] = arrToShuffle[j];
  201.         arrToShuffle[j] = tempHolder;
  202.     }
  203.     return(arrToShuffle);
  204. }
  205.  
  206. //Called by writeAnswerHTML(), used to return negative feedback for incorrect selections
  207. function getIndivRationale(theDistractor)
  208. {
  209.     var theReturn = "";
  210.     if(theDistractor.incorrectRationale)
  211.         if(theDistractor.isCorrect != theDistractor.isSelected)
  212.             theReturn =  "<font color='#ff3300'> - " + theDistractor.incorrectRationale + "</font>\n";
  213.     return(theReturn);
  214. }
  215.  
  216. //Called by writeAnswerHTML(), used to verify if answer provided for a given question is correct
  217. function checkCorrect(objQuestion)
  218. {
  219.     var theReturn = true, thisDistractor;
  220.     var arrQuestionDistractors = objQuestion.evalDistractors;
  221.     for(thisDistractor in arrQuestionDistractors)
  222.         if(arrQuestionDistractors[thisDistractor].isSelected != arrQuestionDistractors[thisDistractor].isCorrect)
  223.             theReturn = false;
  224.     objQuestion.answeredCorrectly = theReturn;
  225.     return(theReturn);
  226. }
  227.  
  228. //Called by checkCorrect(), used to determine the correct values for the provided Question
  229. function getCorrect(objEvlQuestion)
  230. {
  231.     var arrCorrectAnswers = new Array();
  232.     var distractorItem;
  233.     for (distractorItem in objEvlQuestion.evalDistractors)
  234.         if(objEvlQuestion.evalDistractors[distractorItem].isCorrect)
  235.             arrCorrectAnswers[arrCorrectAnswers.length] = objEvlQuestion.evalDistractors[distractorItem].txtValue;
  236.     return(arrCorrectAnswers);
  237. }
  238.  
  239. //Called by getStarted(), used to write the QUESTION pages
  240. function writeQuestionHTML(theEvalQuestion)
  241. {
  242.     var questionType = theEvalQuestion.evalQuestionType;
  243.     var writeThis = "<br clear='all'>\n<table width='100%' align='center' cellpadding=0 cellspacing=0 border=0>\n<form name='theForm'><tr><td height=37><b>Question " + currentPage + ": </b>" + theEvalQuestion.evalQuestion + "<br clear='all'><br>\n" +
  244.             theEvalQuestion.txtInstructions +
  245.             "<br clear='all'><table width='100%' align='center' cellpadding=3 cellspacing=0 border=0><tr><td width=35 height=1><img src='./images/kleer.gif' width=35 height=1 border=0></td>" +
  246.             "<td width=1 height=1><img src='./images/kleer.gif' width=1 height=1 border=0></td>" +
  247.             "<td width='100%' height=1><img src='./images/kleer.gif' height=1 border=0></td></tr>\n";
  248.     if(questionType == "select")
  249.     {
  250.         var evalAnswers = getCorrect(theEvalQuestion);
  251.         var multiAttribute = (evalAnswers.length > 1) ? " MULTIPLE size='" + (theEvalQuestion.evalDistractors.length + 1) + "'": "";
  252.         writeThis += "<tr><td> </td><td align='center' colspan=2 width='100%'>\n<select name='" + theEvalQuestion.name + "'" + multiAttribute + isDisabled + ">" +
  253.             "<option value=0>Select a value...</option>\n";
  254.     }
  255.     var distractorItem, isDisabled;
  256.     isDisabled = oneOrOther(findValInArr(theEvalQuestion.evalUniqueID, usedQuestions), ' disabled', '');
  257.     for(distractorItem in theEvalQuestion.evalDistractors)
  258.     {
  259.         switch(questionType)
  260.         {
  261.             case "select":
  262.                 writeThis += "<option value='" + theEvalQuestion.evalDistractors[distractorItem].txtValue + "'>" + 
  263.                     theEvalQuestion.evalDistractors[distractorItem].txtDisplay + "</option>\n";
  264.                 break;
  265.             case "checkbox":
  266.             case "radio":
  267.                 writeThis += "<tr><td> </td><td valign='top'><input type='" + questionType + "' name='" + theEvalQuestion.name + "' value='" + theEvalQuestion.evalDistractors[distractorItem].txtValue + "'" + isDisabled + "></td><td width='100%'>" + 
  268.                     theEvalQuestion.evalDistractors[distractorItem].txtDisplay + "</td></tr>\n";
  269.                 break;
  270.             case "text":
  271.                 writeThis += "<tr><td> </td><td valign='top' width='100%'><input type='" + questionType + "' name='" + theEvalQuestion.name + "' value='' size=20" + isDisabled + "></td><td> </td></tr>\n";
  272.                 break;
  273.             default:
  274.                 break;
  275.         }
  276.     }
  277.     if(questionType == "select")
  278.         writeThis += "</select><br><br></td></tr>\n";
  279.     writeThis += "<input type='hidden' name='currentPage' value='" + currentPage + "'>\n" +
  280.         "<input type='hidden' name='whatStep' value='" + nextStep + "'>\n" +
  281.         "<input type='hidden' name='evalUniqueID' value='" + theEvalQuestion.evalUniqueID + "'>\n" +
  282.         "</td></tr>\n</table>\n</td></tr>\n<tr><td align='right'><input type='submit' name='theButton' value='Submit'></td></tr>\n" +
  283.         "</form></table>";
  284.     return(writeThis);
  285. }
  286.  
  287. //Called by getStarted(), used to write the ANSWER pages
  288. function writeAnswerHTML(theEvalQuestion, answerSubmitted)
  289. {
  290.     var questionType = theEvalQuestion.evalQuestionType;
  291.     var writeThis = "<br clear='all'>\n<table width='100%' align='center' cellpadding=0 cellspacing=0 border=0>\n<form name='theForm'><tr><td><b>Question " + currentPage + ": </b>" + theEvalQuestion.evalQuestion + "<br clear='all'><br>\n" +
  292.             "<table width='100%' align='center' cellpadding=3 cellspacing=0 border=0>";
  293.     if((questionType != "select") && (questionType != "text"))
  294.         writeThis += "<tr><td width=35 align='center'><img src='./images/correctanswer3.gif' width=35 height=37></td><td width=35 align='center'><img src='./images/youranswer3.gif' width=35 height=37></td><td width='100%'> </td></tr>\n";
  295.     if(questionType == "select")
  296.         writeThis += "<tr><td> </td><td align='center' valign='top'>\n<select name='" + theEvalQuestion.name + "' size=" + (theEvalQuestion.evalDistractors.length + 1) + " MULTIPLE>\n" +
  297.                         "<option value=0>Select a value...</option>\n";
  298.     var distractorItem;
  299.     for(distractorItem in theEvalQuestion.evalDistractors)
  300.     {
  301.         switch(questionType)
  302.         {
  303.             case "select":
  304.                 writeThis += "<option value='" + theEvalQuestion.evalDistractors[distractorItem].txtValue + "'" +
  305.                     oneOrOther(theEvalQuestion.evalDistractors[distractorItem].isCorrect, ' selected', '') +
  306.                     ">" + theEvalQuestion.evalDistractors[distractorItem].txtDisplay + "</option>\n";
  307.                 break;
  308.             case "checkbox":
  309.             case "radio":
  310.                 writeThis += "<tr><td align='center' valign='top'><img src='./images/" + questionType +
  311.                     oneOrOther(theEvalQuestion.evalDistractors[distractorItem].isCorrect, 'true', 'false') +
  312.                     ".gif' width=12 height=12></td><td align='center' valign='top'><img src='./images/" + questionType +
  313.                     oneOrOther(theEvalQuestion.evalDistractors[distractorItem].isSelected, 'true', 'false') +
  314.                     ".gif'></td><td valign='top' width='100%'>" + theEvalQuestion.evalDistractors[distractorItem].txtDisplay + 
  315.                     getIndivRationale(theEvalQuestion.evalDistractors[distractorItem]) +
  316.                     "</td></tr>\n";
  317.                 break;
  318.             case "text":
  319.                 writeThis += "<tr><td align='center'><img src='./images/correctanswer-horiz.gif' width=44 height=26></td>" +
  320.                     "<td valign='top' width='100%'><input type='" + questionType + "' name='" + theEvalQuestion.name + "' value='" + cleanText(theEvalQuestion.evalDistractors[distractorItem].txtDisplay) + "' size=30 disabled></td><td> </td></tr>\n" +
  321.                     "<tr><td align='center'><img src='./images/youranswer-horiz.gif' width=44 height=26></td>" +
  322.                     "<td valign='top' width='100%'><input type='" + questionType + "' name='" + theEvalQuestion.name + "' value='" + cleanText(answerSubmitted) + "' size=30 disabled>" + 
  323.                     getIndivRationale(theEvalQuestion.evalDistractors[distractorItem]) +
  324.                     "</td><td> </td></tr>\n";
  325.                 break;
  326.             default:
  327.                 break;
  328.         }
  329.     }
  330.     if(questionType == "select")
  331.     {
  332.         writeThis += "\n</select>\n</td><td align='center' valign='top'>\n<select name='" + theEvalQuestion.name + "' size=" + (theEvalQuestion.evalDistractors.length + 1) + " MULTIPLE>\n" +
  333.             "<option value='0'" + 
  334.             oneOrOther(findValInArr(0, answerSubmitted), ' selected', '') +
  335.             ">Select a value...</option>\n";
  336.         for(distractorItem in theEvalQuestion.evalDistractors)
  337.         {
  338.             writeThis += "<option value='" + theEvalQuestion.evalDistractors[distractorItem].txtValue + "'" +
  339.                     oneOrOther(theEvalQuestion.evalDistractors[distractorItem].isSelected, ' selected', '') + ">" + 
  340.                     theEvalQuestion.evalDistractors[distractorItem].txtDisplay + "</option>\n";
  341.         }
  342.         writeThis += "</td></tr>\n";
  343.     }
  344.     writeThis += "</table>\n<br clear='all'>\n";
  345.     if(checkCorrect(theEvalQuestion))
  346.     {
  347.         writeThis += "<font color='#339900'><b>Correct.</b></font><br>\n";
  348.         if(!findValInArr(theEvalQuestion.evalUniqueID, usedQuestions))
  349.             correctAnswers++;
  350.     }else{
  351.         writeThis += "<font color='#ff3300'><b>Incorrect.</b></font><br>\n";
  352.     }
  353.     if(!findValInArr(theEvalQuestion.evalUniqueID, usedQuestions))
  354.         usedQuestions[usedQuestions.length] = theEvalQuestion.evalUniqueID;
  355.     writeThis += theEvalQuestion.evalRationale + "<br><br>\n";
  356.     var nextButtonText = (window.currentPage == window.intNumQuestions) ? "My Score": "Next";
  357.     writeThis += "<b>Click '" + nextButtonText + "' to continue</b><br><br>\n" +
  358.         "<input type='hidden' name='currentPage' value='" + currentPage + "'>\n" +
  359.         "<input type='hidden' name='whatStep' value='" + nextStep + "'>\n" +
  360.         "</td></tr>\n<tr><td align='right'><input type='submit' name='theButton' value='" + nextButtonText + "'></td>" +
  361.         "</tr>\n</form></table>";
  362.     return(writeThis);
  363. }
  364.  
  365. //Called by getStarted(), used to write the OVERVIEW page
  366. function writeOverviewHTML()
  367. {
  368.     var writeThis = "<b>Overview of evaluation module</b><br clear='all'>\n" +
  369.         "<br>\n" +
  370.         "Three different types of questions may be used in this evaluation:\n" +
  371.         "<ol>\n" +
  372.         "<li>True/false</li>\n" +
  373.         "<li>Multiple-choice with a single correct answer</li>\n" +
  374.         "<li>Multiple-choice with more than one correct answer</li>\n" +
  375.         "</ol>\n" +
  376.         "For true/false and multiple-choice questions, use the mouse to make, or to change your selection(s)." +
  377.         "<br><br>\n" +
  378.         "As you complete each question, click on the 'Submit' button. " +
  379.         "When you are ready to move on to the next question, click on the 'Next' button. " +
  380.         "When you complete all of the questions, click the 'My Score' " +
  381.         "button to view  the results of your evaluation." +
  382.         "<br><br>\n" +
  383.         "At this time, you can repeat the evaluation to try to improve your score, or you may submit " +
  384.         "your results as part of your final score." +
  385.         "<br><br>\n" +
  386.         "When you are ready to begin, click on the 'Next' button.\n" +
  387.         "<br><br>\n" +
  388.         "<form name='theForm'>" +
  389.         "<input type='hidden' name='currentPage' value=0>\n" +
  390.         "<input type='hidden' name='whatStep' value='next'>\n" +
  391.         "<div align='right'><input type='submit' name='theButton' value='Next'></div>\n" +
  392.         "</form>\n";
  393.     return(writeThis);
  394. }
  395.  
  396. //Called by getStarted(), used to write the RESULTS page
  397. function writeResultsHTML()
  398. {
  399.     var newIntNumQuestions = (intNumQuestions < 1) ? 1: intNumQuestions;
  400.     var finalScore = (correctAnswers / newIntNumQuestions * 100);
  401.     var txtFinalScore = finalScore.toString();
  402.     var intDecPos = txtFinalScore.indexOf(".");
  403.     if(intDecPos > 0)
  404.         if(txtFinalScore.length > 4)
  405.             txtFinalScore = txtFinalScore.substring(0, (intDecPos + 3));
  406.     var writeThis = "<br><table width='100%' align='center' cellpadding=0 cellspacing=0 border=0><form name='theForm'><tr><td><b>Results</b><br><br>" +
  407.             "Here are your results:<br><br>" +
  408.             "<div align='center'><b>You answered " + correctAnswers + " out of " + intNumQuestions + " correctly, " +
  409.             "giving you a score of " + txtFinalScore + "%.</b></div><br><br>";
  410.     if(useSCORM)
  411.         writeThis += "You can now choose either to submit this score or repeat the evaluation.<br><br>" +
  412.             "</td></tr>\n<tr><td align='right'><input type='button' name='restartEval' value='Repeat Evaluation' onclick='parent.frames.codeFrame.resetEval();'>  " +
  413.             "<input type='button' name='submitEval' value='Submit Results' onclick='parent.frames.codeFrame.SubmitCompletion();'></td>" +
  414.             "</tr>\n</form></table>";
  415.     else
  416.         writeThis += "You can now print this score or repeat the evaluation.<br><br>" +
  417.             "</td></tr>\n<tr><td align='right'><input type='button' name='restartEval' value='Repeat Evaluation' onclick='parent.frames.codeFrame.resetEval();'>" +
  418.             "</td></tr>\n</form></table>";
  419.     return(writeThis);
  420. }
  421.  
  422. //Called from Results page by USER to reset and restart the evaluation
  423. function resetEval()
  424. {
  425.     parent.location.reload(true);
  426. }
  427.  
  428. //Called by writeQuestion() AND writeAnswer(), used to return thisOne if testVal is true or thatOne if false
  429. function oneOrOther(testVal, thisOne, thatOne)
  430. {
  431.     theReturn = (testVal) ? thisOne: thatOne;
  432.     return(theReturn);
  433. }
  434.  
  435. //Called by writeQuestion() AND writeAnswer(), used to look for a specific value in an array- returns True if value is found
  436. function findValInArr(inValue, arrObj)
  437. {
  438.     var thisItem;
  439.     var theArr = new Array();
  440.     if(arrObj[0])
  441.         theArr = arrObj;
  442.     else
  443.         theArr[0] = arrObj;
  444.     for(thisItem in theArr)
  445.         if(inValue.toString() == theArr[thisItem].toString())
  446.             return(true);
  447.     return(false);
  448. }
  449. var arrQuestions = new Array();
  450. var EvalID, thisID, thisOpt;
  451. //Called by evalDisplay, used to detect if this file is loaded
  452. var isEvalLoaded = true;