From: "Saved by Windows Internet Explorer 8"
Subject: Assessment
Date: Tue, 20 Mar 2012 08:18:37 -0000
MIME-Version: 1.0
Content-Type: multipart/related;
	type="text/html";
	boundary="----=_NextPart_000_001E_01CD0672.0CDB27E0"
X-MimeOLE: Produced By Microsoft MimeOLE V6.1.7601.17609

This is a multi-part message in MIME format.

------=_NextPart_000_001E_01CD0672.0CDB27E0
Content-Type: text/html;
	charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
Content-Location: file://D:\program files\Package\assessment_2008_02_12\C5.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>Assessment</TITLE>
<META content=3D"text/html; charset=3Dwindows-1252" =
http-equiv=3DContent-Type>
<META name=3DAuthor content=3D"David Pinching, Pearson Education"><LINK=20
rel=3Dstylesheet type=3Dtext/css=20
href=3D"file:///D:/program%20files/Package/assessment_2008_02_12/yui/buil=
d/base/base.css"><LINK=20
rel=3Dstylesheet type=3Dtext/css=20
href=3D"file:///D:/program%20files/Package/assessment_2008_02_12/css/asse=
ss.css">
<SCRIPT>

var chapter=3D5;
var globalOptions=3D{};

</SCRIPT>

<SCRIPT=20
src=3D"file:///D:/program%20files/Package/assessment_2008_02_12/js/common=
.js"></SCRIPT>

<SCRIPT=20
src=3D"file:///D:/program%20files/Package/assessment_2008_02_12/js/unobtr=
_onload.js"></SCRIPT>

<SCRIPT=20
src=3D"file:///D:/program%20files/Package/assessment_2008_02_12/questions=
/questionList.js"></SCRIPT>

<SCRIPT=20
src=3D"file:///D:/program%20files/Package/assessment_2008_02_12/js/assess=
.js"></SCRIPT>

<META name=3DGENERATOR content=3D"MSHTML 8.00.7601.17720"></HEAD>
<BODY>
<DIV id=3DmainContent>
<DIV id=3Dbanner></DIV>
<DIV id=3Dtop>
<DIV id=3DquestionOuter>
<DIV id=3Dprogress></DIV>
<DIV id=3Dquestion></DIV></DIV>
<DIV id=3DinteractionOuter>
<DIV id=3Dinteraction></DIV></DIV>
<DIV id=3DfeedbackOuter>
<DIV id=3Dfeedback></DIV></DIV></DIV>
<DIV id=3Dbottom>
<DIV id=3DbuttonsOuter>
<DIV id=3Dbuttons></DIV></DIV></DIV></DIV></BODY></HTML>

------=_NextPart_000_001E_01CD0672.0CDB27E0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/program%20files/Package/assessment_2008_02_12/yui/build/base/base.css

H1 {
	FONT-SIZE: 138.5%
}
H2 {
	FONT-SIZE: 123.1%
}
H3 {
	FONT-SIZE: 108%
}
H1 {
	MARGIN: 1em 0px
}
H2 {
	MARGIN: 1em 0px
}
H3 {
	MARGIN: 1em 0px
}
H1 {
	FONT-WEIGHT: bold
}
H2 {
	FONT-WEIGHT: bold
}
H3 {
	FONT-WEIGHT: bold
}
H4 {
	FONT-WEIGHT: bold
}
H5 {
	FONT-WEIGHT: bold
}
H6 {
	FONT-WEIGHT: bold
}
STRONG {
	FONT-WEIGHT: bold
}
ABBR {
	BORDER-BOTTOM: #000 1px dotted; CURSOR: help
}
ACRONYM {
	BORDER-BOTTOM: #000 1px dotted; CURSOR: help
}
EM {
	FONT-STYLE: italic
}
BLOCKQUOTE {
	MARGIN: 1em
}
UL {
	MARGIN: 1em
}
OL {
	MARGIN: 1em
}
DL {
	MARGIN: 1em
}
OL {
	MARGIN-LEFT: 2em
}
UL {
	MARGIN-LEFT: 2em
}
DL {
	MARGIN-LEFT: 2em
}
OL LI {
	LIST-STYLE-POSITION: outside; LIST-STYLE-TYPE: decimal
}
UL LI {
	LIST-STYLE-POSITION: outside; LIST-STYLE-TYPE: disc
}
DL DD {
	MARGIN-LEFT: 1em
}
TH {
	BORDER-BOTTOM: #000 1px solid; BORDER-LEFT: #000 1px solid; =
PADDING-BOTTOM: 0.5em; PADDING-LEFT: 0.5em; PADDING-RIGHT: 0.5em; =
BORDER-TOP: #000 1px solid; BORDER-RIGHT: #000 1px solid; PADDING-TOP: =
0.5em
}
TD {
	BORDER-BOTTOM: #000 1px solid; BORDER-LEFT: #000 1px solid; =
PADDING-BOTTOM: 0.5em; PADDING-LEFT: 0.5em; PADDING-RIGHT: 0.5em; =
BORDER-TOP: #000 1px solid; BORDER-RIGHT: #000 1px solid; PADDING-TOP: =
0.5em
}
TH {
	TEXT-ALIGN: center; FONT-WEIGHT: bold
}
CAPTION {
	TEXT-ALIGN: center; MARGIN-BOTTOM: 0.5em
}
P {
	MARGIN-BOTTOM: 1em
}
FIELDSET {
	MARGIN-BOTTOM: 1em
}
TABLE {
	MARGIN-BOTTOM: 1em
}
PRE {
	MARGIN-BOTTOM: 1em
}
INPUT[type=3Dtext] {
	WIDTH: 11.9em
}
INPUT[type=3Dpassword] {
	WIDTH: 11.9em
}
TEXTAREA {
	WIDTH: 11.9em
}

------=_NextPart_000_001E_01CD0672.0CDB27E0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/program%20files/Package/assessment_2008_02_12/css/assess.css

BODY {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; WIDTH: 100%; =
PADDING-RIGHT: 0px; FONT-FAMILY: helvetica,sans-serif; BACKGROUND: =
url(../images/bg_gradient.jpg) repeat-x; HEIGHT: 100%; FONT-SIZE: 90%; =
PADDING-TOP: 0px
}
TABLE {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: =
0px
}
TR {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: =
0px
}
TD {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: =
0px
}
IMG {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; VERTICAL-ALIGN: top; BORDER-TOP: =
0px; BORDER-RIGHT: 0px
}
#mainContent {
=09
}
#top {
	MARGIN: 0px 0px 0px 4px; WIDTH: 790px
}
#bottom {
	MARGIN: 0px 0px 0px 4px; WIDTH: 790px
}
#top {
	MARGIN-TOP: 5px; MIN-HEIGHT: 314px; BACKGROUND: =
url(../images/bg_main.jpg) no-repeat; HEIGHT: 320px
}
#bottom {
	PADDING-BOTTOM: 0px; MIN-HEIGHT: 51px; PADDING-LEFT: 0px; =
PADDING-RIGHT: 0px; BACKGROUND: url(../images/bg_bot.jpg) no-repeat; =
HEIGHT: 55px; PADDING-TOP: 5px
}
#question {
	MARGIN: 0px 14px; VERTICAL-ALIGN: middle
}
#interaction {
	MARGIN: 0px 14px; VERTICAL-ALIGN: middle
}
#buttons {
	MARGIN: 0px 14px; VERTICAL-ALIGN: middle
}
#feedback {
	MARGIN: 0px 14px; VERTICAL-ALIGN: middle
}
#question {
	PADDING-LEFT: 10px
}
#interaction {
	PADDING-LEFT: 10px
}
#feedback {
	PADDING-LEFT: 10px
}
#questionOuter {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; WIDTH: 790px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; =
BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
#interactionOuter {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; WIDTH: 790px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; =
BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
#buttonsOuter {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; WIDTH: 790px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; =
BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
#feedbackOuter {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; WIDTH: 790px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; =
BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
#banner {
	WIDTH: 100%; BACKGROUND: url(../images/banner.jpg) no-repeat; HEIGHT: =
97px
}
#progress H3 {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
17px; FLOAT: right; COLOR: #818ba6; FONT-SIZE: 70%; PADDING-TOP: 10px
}
#question {
	MIN-HEIGHT: 44px; PADDING-RIGHT: 80px; HEIGHT: 50px; CLEAR: both; =
FONT-SIZE: 120%
}
#interaction {
=09
}
#feedback {
	MIN-HEIGHT: 20px; HEIGHT: 20px; FONT-WEIGHT: bold; PADDING-TOP: 10px
}
#feedback H3 {
	PADDING-BOTTOM: 0px; MARGIN: 5px 0px 15px; PADDING-LEFT: 0px; =
PADDING-RIGHT: 0px; COLOR: #67708d; PADDING-TOP: 0px
}
#feedback .total {
	PADDING-BOTTOM: 0px; MARGIN: 10px 0px 0px; PADDING-LEFT: 25px; =
PADDING-RIGHT: 0px; COLOR: #67708d; FONT-WEIGHT: normal; PADDING-TOP: =
0px
}
#buttons {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; CLEAR: =
left; PADDING-TOP: 0px
}
.container {
	PADDING-BOTTOM: 5px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; =
PADDING-TOP: 5px
}
#feedback TABLE {
	PADDING-BOTTOM: 0px; MARGIN: 0px 0px 0px 25px; PADDING-LEFT: 0px; =
WIDTH: 300px; PADDING-RIGHT: 0px; PADDING-TOP: 0px
}
#feedback TR {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; VERTICAL-ALIGN: middle; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
#feedback TD {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 2px; MARGIN: 0px; =
PADDING-LEFT: 2px; PADDING-RIGHT: 2px; BORDER-TOP: 0px; BORDER-RIGHT: =
0px; PADDING-TOP: 2px
}
.leftCol {
	FLOAT: left
}
.rightCol {
	FLOAT: left
}
.leftCol {
	WIDTH: 24px
}
.radioA {
	BORDER-BOTTOM: gray 1px solid; BORDER-LEFT: gray 1px solid; WIDTH: =
680px; DISPLAY: block; FLOAT: left; BORDER-TOP: gray 1px solid; CURSOR: =
pointer; BORDER-RIGHT: gray 1px solid; TEXT-DECORATION: none
}
.radioDiv {
	PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; =
PADDING-TOP: 5px
}
.on {
	BACKGROUND: #3b468f; COLOR: white
}
.container A:link {
	BACKGROUND: white; COLOR: black
}
.container A:visited {
	BACKGROUND: white; COLOR: black
}
.container A:hover {
	BACKGROUND: #5494cc; COLOR: white
}
.container A:active {
=09
}
.standardAssessment {
	LINE-HEIGHT: 27px; MARGIN-LEFT: 30px
}
.clear {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; CLEAR: both; PADDING-TOP: 0px
}
INPUT.blank {
	BORDER-BOTTOM: gray 1px solid; BORDER-LEFT: gray 1px solid; =
PADDING-LEFT: 1px; FONT-SIZE: 90%; BORDER-TOP: gray 1px solid; =
BORDER-RIGHT: gray 1px solid
}
INPUT.disabled {
	BACKGROUND: white; COLOR: #808080
}
.disabled A {
	CURSOR: default
}
.disabled A:hover {
	BACKGROUND: white; COLOR: black
}
#buttons {
	HEIGHT: 61px
}
#buttons .butLeft {
	FLOAT: left
}
#buttons .butRight {
	FLOAT: right
}
#buttons A {
	TEXT-ALIGN: center; LINE-HEIGHT: 33px; MARGIN-TOP: 7px; WIDTH: 101px; =
DISPLAY: block; FONT-FAMILY: arial,sans-serif; BACKGROUND: =
url(../images/but_whole.gif) no-repeat; FLOAT: left; HEIGHT: 32px; =
FONT-SIZE: 17px; VERTICAL-ALIGN: middle; CURSOR: pointer; FONT-WEIGHT: =
bold; TEXT-DECORATION: none
}
#buttons A.large {
=09
}
#buttons A:link {
	COLOR: white
}
#buttons A:visited {
	COLOR: white
}
#buttons A:hover {
	BACKGROUND: url(../images/but_whole_over.gif) no-repeat; COLOR: #f0f896
}
#buttons A:active {
=09
}
#feedback .correct {
	COLOR: #1f912d; TEXT-DECORATION: none
}
.correct A {
	COLOR: #1f912d; TEXT-DECORATION: none
}
#feedback .incorrect {
	COLOR: #ce4b61; TEXT-DECORATION: none
}
.incorrect A {
	COLOR: #ce4b61; TEXT-DECORATION: none
}
.hidden {
	DISPLAY: none
}
.shown {
=09
}

------=_NextPart_000_001E_01CD0672.0CDB27E0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/program%20files/Package/assessment_2008_02_12/js/common.js

/////
// common js

function $() {
	var elements =3D new Array();
	for (var i =3D 0; i < arguments.length; i++) {
		var element =3D arguments[i];
		if (typeof element =3D=3D 'string')
			element =3D document.getElementById(element);
		if (arguments.length =3D=3D 1)
			return element;
		elements.push(element);
	}
	return elements;
}

function getParameter(paramName){
    paramName =3D =
paramName.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regExpStr =3D "[\\?&]"+paramName+"=3D([^&#]*)";
    var paramRegExp =3D new RegExp(regExpStr);
    var results =3D paramRegExp.exec(window.location.href);
    if (results =3D=3D null){return("");}
    else{return(results[1]);}
}

function getWindowSize() {
  var w=3D0, h=3D0;
  if (typeof(window.innerWidth) =3D=3D 'number'){//Non-IE
    w =3D window.innerWidth;
    h =3D window.innerHeight;
  }
  else if ( document.documentElement && =
(document.documentElement.clientWidth || =
document.documentElement.clientHeight) ){//IE 6+ in 'standards compliant =
mode'
    w =3D document.documentElement.clientWidth;
    h =3D document.documentElement.clientHeight;
  }
  else if ( document.body && (document.body.clientWidth || =
document.body.clientHeight) ){//IE 4 compatible
    w =3D document.body.clientWidth;
    h =3D document.body.clientHeight;
  }
  return({"width":w,"height":h});
}

function getElementsByClass(searchClass,node,tag) {
	var classElements =3D new Array();
	if ( node =3D=3D null )
		node =3D document;
	if ( tag =3D=3D null )
		tag =3D '*';
	var els =3D node.getElementsByTagName(tag);
	var elsLen =3D els.length;
	var pattern =3D new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for (i =3D 0, j =3D 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] =3D els[i];
			j++;
		}
	}
	return classElements;
}

function startScriptTimer(timerid){
if (!timerid){timerid=3D"default";}
window["TimerStarted"+timerid]=3Dnew Date();
}

function queryScriptTimer(timerid,minsAndSecs){
if (!timerid){timerid=3D"default";}
if (typeof(window["TimerStarted"+timerid])=3D=3D"undefined"){return(-1)}
window["TimerEnded"+timerid]=3Dnew Date();
var timetaken =3D =
((window["TimerStarted"+timerid]-window["TimerEnded"+timerid])/1000)
	if (minsAndSecs){
	var timeTaken=3DMath.floor(0-timetaken);
	var mins=3DMath.floor(timeTaken/60);
	var secs=3DtimeTaken-(mins*60);
	if (secs<10){secs=3D"0"+secs;}
	return([mins,secs])
	}
	else {
		return(0-timetaken)//seconds
	}
}

function toggle(id){
if ($(id).style.display!=3D"none"){$(id).style.display=3D"none"}
else ($(id).style.display=3D"")
}

function show(args){
	for (i=3D0,j=3Darguments.length;i<j;i++){
	$(arguments[i]).style.display=3D"inline";
	}
}

function hide(args){
	for (i=3D0,j=3Darguments.length;i<j;i++){
	$(arguments[i]).style.display=3D"none";
	}
}

function getRandom(possibleValuesArr){
var random=3DMath.random();
var outNum=3DMath.round(random * possibleValuesArr.length) % =
possibleValuesArr.length;
return(possibleValuesArr[outNum])
}

function radioButtonChecker(formName,radioName){
var radioChoice =3D false;
var myRadio =3D document.forms[formName][radioName];
for (var counter =3D 0; counter < myRadio.length; counter++){
if (myRadio[counter].checked)
radioChoice =3D counter;
}

return (radioChoice);
}

var allPopups=3D0;
function popup(popName,popIntro,body,newPop,width,height){

if (!width){width=3D400;}
if (!height){height=3D400;}

	if (newPop || (!window["testwin"+popName+allPopups])){
	=
window["testwin"+popName+allPopups]=3Dwindow.open("","testwin"+popName+al=
lPopups,"height=3D"+height+",width=3D"+width+",status=3Dno,toolbar=3Dyes,=
menubar=3Dno,location=3Dno	,resizable=3Dyes,scrollbars=3Dyes")
	=
window["testwin"+popName+allPopups].document.write("<head><title>"+popNam=
e+"</title></head><body><h2>"+popName+" <a =
href=3D'javascript:window.close()' =
style=3D'text-decoration:none;'>(x)</a></h2><p><em>"+popIntro+"</em></p>"=
)
	}

	window["testwin"+popName+allPopups].document.write("<p>"+body+"</p>")

}=09

var quietMode;
function shout(a){
var shoutVarsText;

if (typeof(shoutVars)=3D=3D"undefined"){shoutVarsText=3D"";}

else {
shoutVarsText=3D"\n";

	for (var i=3D0,j=3DshoutVars.length;i<j;i++){
		shoutVarsText+=3D"\n"+shoutVars[i]+": "+window[shoutVars[i]];
	}
}

if (quietMode!=3Dtrue){alert(a+shoutVarsText)}

return(shout);
}

function StringBuffer() {
var argc =3D arguments.length;
var argv =3D arguments;
this.str =3D "";
if (argc =3D=3D 1) this.str =3D argv[0];
}
function _stringbuffer_append(str) {
this.str +=3D str;
}
function _stringbuffer_toString() { return this.str; }
StringBuffer.prototype =3D new String();
StringBuffer.prototype.append =3D _stringbuffer_append;
StringBuffer.prototype.toString =3D _stringbuffer_toString;



//if (!confirm(THIS_FUNCTION)){return}


------=_NextPart_000_001E_01CD0672.0CDB27E0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/program%20files/Package/assessment_2008_02_12/js/unobtr_onload.js

/* UNOBTRUSIVE ONLOAD FUNCTIONS */

// Dean Edwards/Matthias Miller/John Resig

function onload_init() {
  // quit if this function has already been called
  if (arguments.callee.done) return;

  // flag this function so we don't do the same thing twice
  arguments.callee.done =3D true;

  // kill the timer
  if (_timer) clearInterval(_timer);

  loader();

};

/* for Mozilla/Opera9 */
if (document.addEventListener) {
  document.addEventListener("DOMContentLoaded", onload_init, false);
}

/* for Internet Explorer */
/*@cc_on @*/
/*@if (@_win32)
  document.write("<script id=3D__ie_onload defer =
src=3Djavascript:void(0)><\/script>");
  var script =3D document.getElementById("__ie_onload");
  script.onreadystatechange =3D function() {
    if (this.readyState =3D=3D "complete") {
      onload_init(); // call the onload handler
    }
  };
/*@end @*/

/* for Safari */
if (/WebKit/i.test(navigator.userAgent)) { // sniff
  var _timer =3D setInterval(function() {
    if (/loaded|complete/.test(document.readyState)) {
      onload_init(); // call the onload handler
    }
  }, 10);
}


/* for other browsers */
window.onload =3D onload_init;

/* End of Context Image loading script */
------=_NextPart_000_001E_01CD0672.0CDB27E0
Content-Type: application/octet-stream
Content-Transfer-Encoding: 7bit
Content-Location: file:///D:/program%20files/Package/assessment_2008_02_12/questions/questionList.js


var questionList;

if (chapter == 1){

    questionList = [

    "C1_Q01",
    "C1_Q02",
    "C1_Q03",
    "C1_Q04",
    "C1_Q05",
    "C1_Q06",
    "C1_Q07",
    "C1_Q08",
    "C1_Q09",
    "C1_Q10"

    ];

}

else if (chapter == 2){

    questionList = [

    "C2_Q01",
    "C2_Q02",
    "C2_Q03",
    "C2_Q04",
    "C2_Q05",
    "C2_Q06",
    "C2_Q07",
    "C2_Q08",
    "C2_Q09",
    "C2_Q10"

    ];

}

else if (chapter == 3){

    questionList = [

    "C3_Q01",
    "C3_Q02",
    "C3_Q03",
    "C3_Q04",
    "C3_Q05",
    "C3_Q06",
    "C3_Q07",
    "C3_Q08",
    "C3_Q09",
    "C3_Q10"

    ];

}

else if (chapter == 4){

    questionList = [

    "C4_Q01",
    "C4_Q02",
    "C4_Q03",
    "C4_Q04",
    "C4_Q05",
    "C4_Q06",
    "C4_Q07",
    "C4_Q08",
    "C4_Q09",
    "C4_Q10"

    ];

}

else if (chapter == 5){

    questionList = [

    "C5_Q01",
    "C5_Q02",
    "C5_Q03",
    "C5_Q04",
    "C5_Q05",
    "C5_Q06",
    "C5_Q07",
    "C5_Q08",
    "C5_Q09",
    "C5_Q10"

    ];

}

else if (chapter == 6){

    questionList = [

    "C6_Q01",
    "C6_Q02",
    "C6_Q03",
    "C6_Q04",
    "C6_Q05",
    "C6_Q06",
    "C6_Q07",
    "C6_Q08",
    "C6_Q09",
    "C6_Q10"

    ];

}

------=_NextPart_000_001E_01CD0672.0CDB27E0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/program%20files/Package/assessment_2008_02_12/js/assess.js


//global
var currentQuestion=3D0;
var testComplete=3Dfalse;

var assessmentArr=3D[]; // question store
var questionFolder =3D (globalOptions.questionFolder || "questions");
var imageFolder =3D (globalOptions.imageFolder || "images/");
var choiceABC123 =3D (globalOptions.choiceABC123 || "ABC");
var defaultFeedback =3D (globalOptions.defaultFeedback || {0:"Sorry, =
wrong answer.",1:"Correct, well done."});


//q specific
var qData;//current question data
var qInstance=3D{};//question instance data that remain on reset, =
question type specific
qInstance.qVars=3D{};//question variables
var qInteract=3D{};// interactivity functions
//INFO - qInfo.disable() - turn off all interactivity functions
var qInfo=3D{};//object containing type specific response information
//INFO - qInfo.getResponse() - array containing response to =
currentQuestion;
//INFO - qInfo.getResult() - array containing response to =
currentQuestion;


var testMem=3D{};//object containing test results etc
testMem.variables=3D[];//what cloned variables
testMem.sortOrder=3D[];//what order things are in etc
testMem.responses=3D[];//question responses by question number
testMem.results=3D[];//question results by question number
testMem.detailedResults=3D[];//detailed results by question number e.g. =
individual blank results
//testMem.feedback=3D[];//question feedback by question number

//functions
function getLetter(n){return("ABCDEFGHIJKLMNOPQRSTUVWXYZ").charAt(n);}

var log =3D [];// log of system messages

function trace(msg){
	if (!msg) {
		return (log);
	}
	else {
		log.push(msg);
		return(log.length)
	}
}
function loadQuestions(){
=09
	var scriptHTML =3D new StringBuffer;
	=09
		for (var i =3D 0, j =3D questionList.length, qId; i < j; i++) {
			qId =3D questionList[i];
			scriptHTML.append('<script src=3D"'+questionFolder+'/');
			scriptHTML.append(qId);
			scriptHTML.append('.js"></scr');
			scriptHTML.append('ipt>');
		}
=09
	//load scripts
	document.write(scriptHTML.toString());

}=09

loadQuestions();

function loader(){=09

    runChecks();
	buildQuestion(currentQuestion);
   =20
}

function setVisibilities(){

    $("feedback").innerHTML=3D"";

}

function buildQuestion(qNum,keepValues,mode){

if (!mode){mode=3D0;}

    setVisibilities();
   =20
    // end if no questions remain
    if (!assessmentArr[qNum]){conclude();return;}
   =20
	qData=3DassessmentArr[qNum];
=09

	if (!qData) return false;

	//info
	var q_id=3DqData.information.id;
	var q_type=3DqData.options.type;
   =20
   =20
    if (!keepValues){
   =20
        setVariables(qNum,mode);
       =20
        if (mode =3D=3D 1){
			//set up buttons
			$("buttons").innerHTML=3DgetButtonHTML({right:"results"});//add =
submit only after interaction
			//set up progress
			$("progress").innerHTML=3D'<h3>Reviewing question '+(qNum+1)+' of =
'+assessmentArr.length+'</h3>';
		}
		else {
=09
			//set up interactions
			qInfo.totalInteractions =3D 0;
			//set up buttons
			$("buttons").innerHTML=3DgetButtonHTML({left:"reset"});//add submit =
only after interaction
			//set up progress
			$("progress").innerHTML=3D'<h3>Question '+(currentQuestion+1)+' of =
'+assessmentArr.length+'</h3>';
		=09
    	}
    =09
    }
   =20
    //set up question
    $("question").innerHTML=3DinsertVariables(qData.question.html);
    $("question").className=3D"shown";
   =20
    //question specific settings

/////////////////////////////////////////////////////////////////////////=
//////////

    if (q_type=3D=3D'multiple_choice'){
   =20
        if (!keepValues){   =20
       =20
            qInstance.choiceArr=3D[];

            for (var =
i=3D0,j=3DqData.response.CHOICE.length,thisHTML;i<j;i++){
            =
qInstance.choiceArr.push({id:qData.response.CHOICE[i].id,html:qData.respo=
nse.CHOICE[i].html});
            }

            if (!qData.options.noShuffle){

				if (mode=3D=3D1){
				//fill with data from last time
				qInstance.choiceArr =3D reRandomizeArr(qNum,qInstance.choiceArr)
			=09
				}
				else {
			=09
				//randomize the array in place
				randomizeArr(qInstance.choiceArr);
				var sortOrder=3D[];

				// we don't need to remember the question data, just the IDs
					for (var i=3D0,j=3DqInstance.choiceArr.length;i<j;i++){
					sortOrder.push(qInstance.choiceArr[i].id);
					}			=09
			=09
				}
		   =20
            	testMem.sortOrder[currentQuestion]=3DsortOrder;
           =20
            }

     =20
        }

            if (!qData.response.CHOICE){trace("Error: response type =
CHOICE expected.");return false;}

      =20
            qInteract.showInteraction =3D function(){
			$("interaction").className=3D"shown";
   =20
        	var responseArr=3D[];
	        var responseHTML=3Dnew StringBuffer;
	       =20
				for (var =
i=3D0,j=3DqInstance.choiceArr.length,thisHTML,choiceID;i<j;i++){
			=09
				choiceID=3DqInstance.choiceArr[i].id;
			=09
					thisHTML=3Dnew StringBuffer;
					thisHTML.append('<div class=3D"container">');
						thisHTML.append('<div class=3D"leftCol">');
					=09
                        //MODE 1
						if (mode=3D=3D1){
						var isCorrect=3Dfalse;
						var conditions=3DqData.conditions;
					=09
				=09
						// check through each condition
						conditionCheck:for (var xi=3D0,xj=3Dconditions.length;xi<xj;xi++){
							//for the (first) one with the correct result
							if (conditions[xi].result=3D=3D=3D1){
								// now check if this choice had to be selected for a correct =
answer
								conditionCheckInner:for (var =
xxi=3D0,xxj=3Dconditions[xi].answer.length;xxi<xxj;xxi++){
									if(conditions[xi].answer[xxi]=3D=3DchoiceID){
									// this choice is required
										isCorrect=3Dtrue;
									}
								}
							break conditionCheck;
							}
						}
					=09
						thisHTML.append(getIconHTML(isCorrect));
						}

                        //MODE 0
						else {
						//List format "ABC" or "123"
                        =
thisHTML.append(choiceABC123=3D=3D"ABC"?getLetter(i):(i+1));
						}
					=09
						thisHTML.append('</div>');       =20
						thisHTML.append('<a =
href=3D"javascript:qInteract.chooseItem(\'choice_'+choiceID+'\');" =
class=3D"radioA"><div id=3D"choice_'+qInstance.choiceArr[i].id+'" =
class=3D"radioDiv off">');
						thisHTML.append(insertVariables(qInstance.choiceArr[i].html));
						thisHTML.append('</div></a>');                    =20
						thisHTML.append('<div class=3D"clear"></div>');
					thisHTML.append('</div>');
					responseArr.push(thisHTML.toString());
				}
		=09

				//prepare html
				for (var i =3D 0, j =3D responseArr.length; i < j; i++) {
				responseHTML.append(responseArr[i]);
				}=09

				//set up interaction
				$("interaction").innerHTML=3DresponseHTML.toString();

			}
		=09
			// show question in normal mode
			qInteract.showInteraction();
		=09
		=09
            qInteract.chooseItem =3D function(id){

            qInfo.totalInteractions +=3D 1;
           =20
            //show submit when interactions have occurred
            if =
(qInfo.totalInteractions=3D=3D1){$("buttons").innerHTML=3DgetButtonHTML({=
left:"reset",right:"submit"});}

                var myClass=3D$(id).className;
                var onElems=3DgetElementsByClass("radioDiv on");

                if ( qData.options.maxChoices=3D=3D1 && onElems.length > =
0 ){
                // allow only one item selected - turn off any =
previously selected
                    for (var a in onElems){
                        =
onElems[a].className=3DonElems[a].className.replace(/on/,"off");
                    }
                }

                if =
(myClass.indexOf("off")>=3D0){$(id).className=3DmyClass.replace(/off/,"on=
");}
                else if =
(myClass.indexOf("on")>=3D0){$(id).className=3DmyClass.replace(/on/,"off"=
);}

            }
           =20
            qInteract.disable =3D function(){
               =20
                // switch off all interactive functions
                qInteract.chooseItem =3D function(id){
                trace("chooseItem disabled");
                }

                //switch off buttons               =20
                var onElems=3DgetElementsByClass("container");

                for (var a in onElems){
                    onElems[a].className=3D"container disabled";
                }
               =20
            }
           =20
            if (mode=3D=3D1){qInteract.disable();}
           =20
            //set up getResponse
            qInfo.getResponse =3D function() {
           =20
            var responseArr =3D [];
           =20
                var onElems=3DgetElementsByClass("radioDiv on");

                for (var a in onElems){
                    responseArr.push(onElems[a].id.split("choice_")[1]);
                }
           =20
            return(responseArr);
            }
		=09
			//set up showresponse for mode 1
            qInfo.showResponse =3D function() {
           =20
                var onElems=3DgetElementsByClass("radioDiv");

                for (var =
i=3D0,j=3DtestMem.responses[qNum].length;i<j;i++){
				//set each response in the array
			=09
					for (var a in onElems){
				=09
						if =
(testMem.responses[qNum][i]=3D=3DonElems[a].id.split("choice_")[1]) {
							onElems[a].className=3D"radioDiv on";
						}
                	}

                }

            }
            if (mode=3D=3D1){qInfo.showResponse();}
           =20
            //set up getResult calculation

            qInfo.getResult =3D function(responseArr) {
           =20
            var result,feedback;
            var conditions=3DqData.conditions;
            var respStr =3D answerArrToString(responseArr);
           =20
            for (var i=3D0,j=3Dconditions.length,condition;i<j;i++){
           =20
            condition=3DanswerArrToString(conditions[i].answer);
           =20
                if (respStr =3D=3D condition){
                    result=3Dconditions[i].result;
                    =
feedback=3D(conditions[i].html?insertVariables(conditions[i].html):defaul=
tFeedback[result]);
                    trace(respStr + " =3D=3D " + condition);

                    break;//first condition found always accepted
                }

            }
           =20
            // if no result found
            if (!feedback) {
            // use custom or default incorrect response
            var customIncorrect=3DqData.incorrect;
                result=3D0;
                feedback=3D(customIncorrect && =
customIncorrect.html?insertVariables(customIncorrect.html):defaultFeedbac=
k[0]);
            }
               =20
            return([result,feedback]);
            }
=20

   =20
	}

/////////////////////////////////////////////////////////////////////////=
//////////

    else if (q_type=3D=3D'fill_blanks'){


            qInteract.showInteraction =3D function(){
			$("interaction").className=3D"shown";
		=09
				var blanksHTML =3D new StringBuffer;
				var inputSize;

				//prepare html           =20
				blanksHTML.append('<div class=3D"standardAssessment">');
                =
blanksHTML.append(insertBlanks(qData.assessment.html,qNum,mode))
				blanksHTML.append('</div>');

				//set up interaction
				$("interaction").innerHTML=3DblanksHTML.toString();

			}

			// show question in normal mode
			qInteract.showInteraction();

            qInteract.chooseItem =3D function(id){

            qInfo.totalInteractions +=3D 1;
            //show submit when interactions have occurred
            if =
(qInfo.totalInteractions=3D=3D1){$("buttons").innerHTML=3DgetButtonHTML({=
left:"reset",right:"submit"});}

                var myClass=3D$(id).className;
                var onElems=3DgetElementsByClass("blank on");

                if ( qData.options.maxChoices=3D=3D1 && onElems.length > =
0 ){
                // allow only one item selected - turn off any =
previously selected
                    for (var a in onElems){
                        =
onElems[a].className=3DonElems[a].className.replace(/on/,"off");
                    }
                }

                $(id).className=3DmyClass.replace(/on/,"off");

            }
           =20
            qInteract.disable =3D function(){
               =20
                // switch off all interactive functions
                qInteract.chooseItem =3D function(id){
                trace("chooseItem disabled");
                }

                //switch off buttons               =20
                var onElems=3DgetElementsByClass("blank");

                for (var a in onElems){
                    onElems[a].className=3D"blank off disabled";
                    onElems[a].disabled=3Dtrue;
                }
               =20
            }
           =20
           =20
            //set up getResponse
            qInfo.getResponse =3D function() {
           =20
            var responseArr =3D {};
           =20
                var onElems=3DgetElementsByClass("blank");
                var blankId;
                var thisAnswer;
                for (var a in onElems){
                    //id,value
                    blankId=3DonElems[a].id.split("blank_")[1];
                    thisAnswer=3DonElems[a].value;
                    //any whitespace in answer becomes " ", any trailing =
space is removed
                    thisAnswer=3DthisAnswer.replace(/\s+/g," ");
                    thisAnswer=3DthisAnswer.replace(/^\s+(.*)/g,"$1");
                    thisAnswer=3DthisAnswer.replace(/(.*)\s+$/g,"$1");
                    responseArr[blankId] =3D thisAnswer;
                }
           =20
            return(responseArr);
            }
           =20
            //set up getResult calculation

            qInfo.getResult =3D function(responseArr) {
           =20
            var result=3D0;
            var feedback;
            var conditions=3DqData.conditions;
           =20
            testMem.detailedResults[qNum]=3D{};
           =20
            //check each condition
            conditionLoop: for (var =
i=3D0,j=3Dconditions.length,condition;i<j;i++){
               =20

                var totalAnswers=3D0;
                var answersMatched=3D0;
                var counter=3D0;
               =20
                // count answer parts
                for (var answerId in =
conditions[i].answer){totalAnswers+=3D1;}
               =20
                var =
scorePerAnswer=3D(conditions[i].result/totalAnswers);

               =20
                //check each component of an answer
                componentLoop: for (var answerId in =
conditions[i].answer){
                   =20
                    counter+=3D1;
                   =20
                    trace("totalAnswers=3D"+totalAnswers+" =
answersMatched=3D"+answersMatched+" counter=3D"+counter)
                   =20
                    itemLoop: for (var =
xi=3D0,xj=3Dconditions[i].answer[answerId].length,condition,compareThis,w=
ithThat;xi<xj;xi++){
                   =20
                        compareThis =3D =
conditions[i].answer[answerId][xi];
                        withThat =3D responseArr[answerId];

                        //case insensitive unless specified
                        if (!qData.options.caseSensitive){
                        compareThis=3DcompareThis.toLowerCase();
                        withThat=3DwithThat.toLowerCase();
                        }
                   =20
                        //process simple wildcards
                        if (compareThis.indexOf("*")>=3D0){
                           =20
                            // replace wildcard characters with real =
regexp
                            var compareThisWild;
                            // escape everything except wildcard sign =
(*) by making it a literal match character e.g. name becomes =
[n][a][m][e]
                            compareThisWild =3D =
compareThis.replace(/([^*])/g,"[$1]");
                            compareThisWild =3D "^" + =
compareThisWild.replace(/\*/g,".*") + "$";
                           =20
                            var wildReg =3D new RegExp =
(compareThisWild,"g");
                           =20
                            if (withThat.match(wildReg)){
                            trace(compareThis + " matches " + withThat);
                            answersMatched+=3D1;
                            result +=3D scorePerAnswer;
                            // only save detailed results relating the =
correct answer
                            if =
(conditions[i].result=3D=3D=3D1){testMem.detailedResults[qNum][answerId]=3D=
true;}
                                if (counter =3D=3D=3D totalAnswers){
                                    if =
(answersMatched=3D=3DtotalAnswers){
                                    feedback =3D =
insertVariables(conditions[i].html);
                                    break conditionLoop;
                                    }
                                }=20
                      =20
                            }
                            else {
                            trace(withThat + " doesn't match '" + =
compareThisWild + "'")
                            }
                           =20
                        break itemLoop;
                       =20
                        }
                       =20
                        else if (compareThis =3D=3D=3D withThat){

                            trace(compareThis + " =3D=3D=3D " + =
withThat);
                           =20
                            answersMatched+=3D1;
                            result +=3D scorePerAnswer;
                            // only save detailed results relating the =
correct answer
                            if =
(conditions[i].result=3D=3D=3D1){testMem.detailedResults[qNum][answerId]=3D=
true;}
                           =20
                                if (counter =3D=3D=3D totalAnswers){
                                    if =
(answersMatched=3D=3DtotalAnswers){
                                    feedback =3D =
insertVariables(conditions[i].html);
                                    break conditionLoop;
                                    }                               =20
                                }=20
                       =20
                        break itemLoop;
                       =20
                        }

                        else {

                            trace(conditions[i].answer[answerId][xi] + " =
!=3D " + responseArr[answerId]);
                            // only save detailed results relating the =
correct answer
                            if =
(conditions[i].result=3D=3D=3D1){testMem.detailedResults[qNum][answerId]=3D=
false;}

                        }
                   =20
                   =20
                    }

                if (answersMatched=3D=3DtotalAnswers){;}
               =20
                }

            }

            //make sure that rounding errors don't stop correct answers =
equalling 1
            if (result!=3D=3D0 && result<1 && result>0.99){result=3D1;};
           =20
            // if no result found
            if (!feedback) {
            // use custom or default incorrect response
            var customIncorrect=3DqData.incorrect;
                result=3D0;
                feedback=3D(customIncorrect && =
customIncorrect.html?insertVariables(customIncorrect.html):defaultFeedbac=
k[0]);
            }
               =20
            return([result,feedback]);
            }
=20

   =20
    }

/////////////////////////////////////////////////////////////////////////=
//////////

	else {=20
    alert("Error - unknown question type: "+qData.response.type);
	}
=09

}

function randomizeArr (myArray) {
//randomize array in place using Perl-style Fisher-Yates algorithm
    var i =3D myArray.length;
    if ( i =3D=3D 0 ) return false;
    while ( --i ) {
        var j =3D Math.floor( Math.random() * ( i + 1 ) );
        var tempi =3D myArray[i];
        var tempj =3D myArray[j];
        myArray[i] =3D tempj;
        myArray[j] =3D tempi;
    }
}

function reRandomizeArr (qNum,myArray){

var tmpArray=3D[];

	outer: for (var i=3D0,j=3DtestMem.sortOrder[qNum].length;i<j;i++){
=09
		inner: for (var xi=3D0,xj=3DmyArray.length;xi<xj;xi++){=09
		if =
(myArray[xi].id=3D=3DtestMem.sortOrder[qNum][i]){tmpArray.push(myArray[xi=
]);continue outer;}
		}
=09
	}
	=09
return (tmpArray);=09

}

function setVariables(qNum,mode){

if (!qData.variables){return false;}

    var random, varSet, randomNum;
   =20
    //create variables, if this is not mode 1
    if (mode!=3D1) testMem.variables[qNum]=3D{};
   =20
    for (var varName in qData.variables){
    =09
    	// mode 1 just grabs memory version of the variable for this =
question
    	if =
(mode=3D=3D1){qInstance.qVars[varName]=3DtestMem.variables[qNum][varName]=
;continue;}
    =09
        varSet =3D qData.variables[varName];

        random =3D Math.random();
        randomNum =3D Math.round(random * varSet.length) % varSet.length =
+ 1;
        qInstance.qVars[varName] =3D varSet[randomNum-1];
        testMem.variables[qNum][varName] =3D =
qInstance.qVars[varName];//save for later=20

    trace(varName+" set to '"+qInstance.qVars[varName]+"'");

    }
   =20
}

function insertBlanks(html,qNum,mode){

var anyBlankReg =3D new RegExp (".*(\\[\\[([^\\]]+)\\]\\]).*","g");
// e.g. [[=3Dsomething]] or [[=3Dsomething|something else]]
var eachBlankReg =3D new RegExp ("(\\[\\[)[=3D]([^\\]\\|]+)([ ]?\\|[ =
]?[^\\]\\|]+)?(\\]\\])","g");// for simple syntax version

var outputHTML=3Dhtml;
var thisVar;
var varReg;

    //check if any blanks at all
    if (outputHTML.match(anyBlankReg)){       =20

        var blankHTML,inputSize,myAnswer,correctAnswer,isCorrect;

		// standard method
		if (qData.blanks){
 	        // look for each blank reference in var list and replace with =
instance variable
			for (var thisBlank in qData.blanks){

				isCorrect=3Dfalse;

				if (mode=3D=3D=3D1){
				myAnswer=3DtestMem.responses[qNum][thisBlank];

				var conditions=3DqData.conditions;
					// check through each condition
					conditionCheck:for (var xi=3D0,xj=3Dconditions.length;xi<xj;xi++){
						//for the (first) one with the correct result
						if (conditions[xi].result=3D=3D=3D1){
							// now grab the blank's first (default) correct value
							correctAnswer =3D conditions[xi].answer[thisBlank][0];

									if(testMem.detailedResults[qNum][thisBlank]=3D=3D=3Dtrue){
									// this choice is required
										isCorrect=3Dtrue;
									}

						break conditionCheck;
						}
					}
				}

				if =
(qData.blanks[thisBlank].size){inputSize=3DqData.blanks[thisBlank].size;}=
 else {inputSize=3D"80px";}
				blankHTML=3D'<span class=3D"blankSpan"'+(mode=3D=3D=3D1?' =
title=3D"CORRECT ANSWER: '+correctAnswer+'"':'')+'><input =
'+(mode=3D=3D=3D1?' disabled=3D"true"':'')+' class=3D"blank off =
'+(mode=3D=3D=3D1?'disabled':'')+'" =
onclick=3D"qInteract.chooseItem(this.id)" id=3D"blank_'+thisBlank+'" =
type=3D"text" style=3D"width:'+inputSize+';" =
value=3D"'+(mode=3D=3D=3D1?myAnswer:'')+'"></input>'+(mode=3D=3D=3D1?'&nb=
sp;'+getIconHTML(isCorrect):'')+'</span>';

				varReg =3D new RegExp ("\\[\\["+thisBlank+"\\]\\]","g");
				outputHTML=3DoutputHTML.replace(varReg,blankHTML);

			}
        }
       =20
        // simple version assumes blank contents is [[=3DThis Here]]
       =20
        else {

        var blankSource =3D qData.assessment.html
        var matches =3D blankSource.match(eachBlankReg)
       =20
			if (matches){
		=09
				// create dynamic blanks hash
				qData.blanks=3D{};
				// create dynamic answers hash
				if (qData.conditions){trace("Overwriting incorrectly placed =
qData.conditions with dynamic answers");}
				qData.conditions=3D[];
				// build condition
				qData.conditions[0]=3D{};
				qData.conditions[0].answer=3D{};			=09
				// set result for getting all correct to 1
				qData.conditions[0].result=3D1;
				qData.conditions[0].html=3DdefaultFeedback[1];
			=09
				for (var i=3D0,j=3Dmatches.length,thisAnswer,thisSize;i<j;i++){

					thisAnswer=3Dmatches[i].split("]]")[0].split("[[=3D")[1];
					//allow an array of [[=3Dsomething,=3Dsomethingelse]] for =
alternative answers
					if =
(thisAnswer.indexOf("|")>=3D0){thisAnswer=3DthisAnswer.split("|")}
					else {thisAnswer=3D[thisAnswer];}
				=09
					thisSize=3DthisAnswer[0].length*13;
					qData.blanks[thisAnswer[0]]=3D{size:thisSize+"px"};
					qData.conditions[0].answer[thisAnswer[0]]=3DthisAnswer;
				=09

				}
		=09
			//now overwrite the assessment html without the [[=3D format
			=
qData.assessment.html=3DqData.assessment.html.replace(eachBlankReg,"$1$2$=
4");
			//re-run this function without them
			return (insertBlanks(qData.assessment.html,qNum,mode));
		=09
			}
	=09
        }
       =20
    }

    //skip if no blanks   =20
    else {
    return(html);
    }

return (outputHTML);

}

function insertVariables(html){

if(!html){return("");};

var anyVarReg =3D new RegExp (".*(\\[\\[([^\\]]+)\\]\\]).*","g"); =
//thisVar=3Dhtml.replace(varReg,"$1");

var outputHTML=3Dhtml;
var thisVar;
var varReg;

    //check if any vars at all
    if (outputHTML.match(anyVarReg)){       =20

    // look for each variable reference in var list and replace with =
instance variable

        for (var thisVar in qInstance.qVars){

            varReg =3D new RegExp ("\\[\\["+thisVar+"\\]\\]","g");
            =
outputHTML=3DoutputHTML.replace(varReg,qInstance.qVars[thisVar]);

        }
    }

    //skip if no variables   =20
    else {
    return(html);
    }

return (outputHTML);

}

function getIconHTML(isCorrect,blackAndWhite){

var yesIcon=3DimageFolder+"correct.gif";
var noIcon=3DimageFolder+"wrong.gif";

    if (blackAndWhite){
    yesIcon=3DimageFolder+"correct_bw.gif";
    noIcon=3DimageFolder+"wrong_bw.gif";
    }

    return('<img src=3D"'+(isCorrect?yesIcon:noIcon)+'" =
alt=3D"'+(isCorrect?"Correct":"Incorrect")+'" width=3D"15" =
height=3D"15">')

}

function getButtonHTML(buttonArr){

var buttonHTML =3D new StringBuffer;

    switch (buttonArr.left){
            case "reset": buttonHTML.append('<div class=3D"butLeft"><a =
href=3D"javascript:b_reset()">Reset</a></div>');break;
            case "new": buttonHTML.append('<div class=3D"butLeft"><a =
href=3D"javascript:b_new()">Restart</a></div>');break;=20
            default: buttonHTML.append('<div class=3D"butLeft"></div>');
    }

    switch (buttonArr.right){
            case "submit": buttonHTML.append('<div class=3D"butRight"><a =
href=3D"javascript:b_submit()">Submit</a></div>');break;
            case "next": buttonHTML.append('<div class=3D"butRight"><a =
href=3D"javascript:b_next()">Next</a></div>');break;
            case "finish": buttonHTML.append('<div class=3D"butRight"><a =
href=3D"javascript:b_next()">Finish</a></div>');break;
            case "print": buttonHTML.append('<div class=3D"butRight"><a =
href=3D"javascript:b_print()">Print</a></div>');break;           =20
            case "results": buttonHTML.append('<div =
class=3D"butRight"><a =
href=3D"javascript:b_results()">Results</a></div>');break;=20
            default: buttonHTML.append('<div =
class=3D"butRight"></div>');           =20
    }          =20

buttonHTML.append('<div class=3D"clear"></div>');

return buttonHTML.toString();
}

function getLineHTML(col1Arr,col2Arr){

    var lineHTML=3Dnew StringBuffer;

    // style splitLine according to its container
    lineHTML.append('<div class=3D"splitLine">');

  =20
        lineHTML.append('<div class=3D"leftCol ');
        lineHTML.append(col1Arr && =
col1Arr.className?col1Arr.className:'');
        lineHTML.append('">');
        lineHTML.append(col1Arr && col1Arr.html?col1Arr.html:'&nbsp;');
        lineHTML.append('</div>');

        lineHTML.append('<div class=3D"rightCol ');
        lineHTML.append(col2Arr && =
col2Arr.className?col2Arr.className:'');
        lineHTML.append('">');
        lineHTML.append(col2Arr && col2Arr.html?col2Arr.html:'');
        lineHTML.append('</div>');

        lineHTML.append('<div class=3D"clear"></div>');

    lineHTML.append('</div>');
   =20
    return(lineHTML.toString());
   =20
}

function getResultsHTML(printVersion){
var now =3D new Date();
var dateStr =3D now.getDate() + "/" + (now.getMonth()+1) + "/" + =
now.getFullYear();

$("progress").innerHTML=3D'<h3>'+dateStr+'</h3>';
$("progress").className=3D"shown";
   =20
var heading =3D "Results: Chapter "+chapter;

var endTestHTML=3Dnew StringBuffer;

    if (printVersion){
    endTestHTML.append('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 =
Transitional//EN">');
    endTestHTML.append('<html>');
    endTestHTML.append('<head><title>'+heading+'</title>');
    endTestHTML.append('<link rel=3D"stylesheet" type=3D"text/css" =
href=3D"css/print.css" />');
    endTestHTML.append('</head>');
    endTestHTML.append('<body =
onload=3D"window.print();window.close();">');
   =20
    endTestHTML.append('<div class=3D"banner"><img =
src=3D"'+imageFolder+'banner_bw.jpg" alt=3D"" /></div>');
    endTestHTML.append('<div class=3D"date">'+dateStr+'</div>');
    }
   =20

    endTestHTML.append('<h3>'+heading+'</h3>');

   =20
    var totalQs=3DtestMem.results.length;
   =20
    if (!printVersion){endTestHTML.append('<table cellpadding=3D"0" =
cellspacing=3D"0">');}
   =20
    for (var =
i=3D0,j=3DtotalQs,qNum,isCorrect,totalCorrect=3D0,totalIncorrect=3D0;i<j;=
i++){
    qNum=3D(i+1);//zero indexed
   =20
        isCorrect=3D(testMem.results[i]=3D=3D=3D1?true:false);
       =20
        if (isCorrect){totalCorrect+=3D1;}
        else {totalIncorrect+=3D1;}
       =20
        if (printVersion){
            endTestHTML.append('<div =
class=3D"result">'+getIconHTML(isCorrect,true)+'&nbsp;Question =
'+qNum+'</div>');
        }
       =20
        else {
           =20
            endTestHTML.append('<tr>');
           =20
                endTestHTML.append('<td width=3D"20">');
                endTestHTML.append(getIconHTML(isCorrect));
                endTestHTML.append('</td>');

                endTestHTML.append('<td =
class=3D"'+(isCorrect?'correct':'incorrect')+'">');
                endTestHTML.append('<a =
href=3D"javascript:b_myanswer('+i+')">Question '+qNum+'</a>');
                endTestHTML.append('</td>');
               =20
            endTestHTML.append('</tr>');

           =20
        }
    }

    if (!printVersion){endTestHTML.append('</table>');}

    var totalHTML=3D'<div class=3D"total"><strong>Total:</strong> =
'+totalCorrect+' out of '+totalQs+'</div>';

    if (printVersion){
        endTestHTML.append(totalHTML);
        endTestHTML.append('</body></html>');
    }
    else {
        endTestHTML.append(totalHTML);  =20
    }
   =20
return (endTestHTML.toString())

}

function answerArrToString(arr){
//answers come as an array, and need to be compared as a string, sorted =
as order is irrelevant
if(!arr){return("");}
else if(typeof(arr)!=3D"object" || =
typeof(arr.length)=3D=3D"undefined"){return(arr);}
else {return(arr.sort().join("|"));}
}

function conclude(){

testComplete=3Dtrue;

    $("progress").innerHTML=3D"";//"<h3>Test complete</h3>"
    $("question").className=3D"hidden";
    $("question").innerHTML=3D"";
    $("interaction").className=3D"hidden";
    $("interaction").innerHTML=3D"";
    $("buttons").innerHTML=3DgetButtonHTML({left:"new",right:"print"});
    $("feedback").innerHTML=3DgetResultsHTML();
   =20
   =20
}

function runChecks(){
    //check if all assessment items declared in questionList have been =
loaded
    // this will fire on IE but not Firefox if an incorrect trailing =
comma is left in questionList
    if (questionList.length > assessmentArr.length){
        alert("One or more questions is missing from this test - check =
question list.")

    }

}

//////////////////
//button functions
//////////////////

function b_reset(){
   =20
    buildQuestion(currentQuestion,true);

}

function b_print(){
   =20
    printWin =3D =
window.open("","printWin","location=3D1,status=3D1,scrollbars=3D1,width=3D=
500,height=3D500");
    printWin.document.write(getResultsHTML(true));
    printWin.document.close();
   =20
}

function b_submit(){

var =
nextButton=3D(currentQuestion=3D=3DassessmentArr.length-1?"finish":"next"=
);

    $("buttons").innerHTML=3DgetButtonHTML({right:nextButton});
    qInteract.disable();
   =20
    var responseArr=3DqInfo.getResponse();
    testMem.responses[currentQuestion]=3DresponseArr;
   =20
    var resultAndFeedback=3DqInfo.getResult(responseArr);
   =20
    testMem.results[currentQuestion]=3DresultAndFeedback[0];
    //testMem.feedback[currentQuestion]=3DresultAndFeedback[1];
   =20
    var isCorrect=3D(resultAndFeedback[0]=3D=3D=3D1?true:false);
   =20
    //$("feedback").innerHTML=3D'<div class=3D"leftCol"><img =
src=3D"'+(isCorrect?yesIcon:noIcon)+'" =
alt=3D"'+(isCorrect?"Correct":"Incorrect")+'"></div><div =
class=3D"rightCol =
'+(isCorrect?'correct':'incorrect')+'">'+testMem.feedback[currentQuestion=
]+'</div><div class=3D"clear"></div>';
    $("feedback").innerHTML=3DgetLineHTML(
                                {html:getIconHTML(isCorrect)},//icon: =
html/class
                                =
{html:resultAndFeedback[1],className:(isCorrect?'correct':'incorrect')}//=
feedback: html/class
                                );
    $("feedback").className=3D"shown";

}

function b_next(){

currentQuestion+=3D1;

    buildQuestion(currentQuestion);

}

function b_new(){

window.location.reload();

}

function b_myanswer(qNum){

// show this question with mode 1
buildQuestion(qNum,false,1);

}

function b_results(){

conclude();

}


------=_NextPart_000_001E_01CD0672.0CDB27E0--
