/**
* ==================================================
* SoftChalk LessonBuilder
* Copyright 2003-2008 SoftChalk LLC
* All Rights Reserved.
*
* http://www.softchalk.com
* ==================================================
* File date: June 4, 2008
*/
/**
* From lesson.js file:
*
* tableToggle_array=new Array();
* feed=new Array();
* f_right=new Array();
* f_wrong=new Array();
* f_show_correct=new Array();
* f_done=new Array();
* f_partial=new Array();
*
* scoreQ[] indicates whether to include question in scoring
* q_done[] indicates whether the question has been attempted to be answered
*
* "q_num" form and question number (which are the same)
* "mc_items" number of multiple choice/matching items - value is 0 for short answer, 2 for true-false
*
* "q_type"
*
* MULTIPLE_CHOICE = 1;
* TRUE_FALSE = 2;
* MULTIPLE_ANSWER = 3;
* SHORT_ANSWER = 4;
* MATCHING = 5;
* ORDERING = 6;
*
* ACTIVITY = 7;
*
*
* **********************************************
*
* In lessons that have no quizpoppers:
* scoreQ[] is defined in header of page.
*
* **********************************************
*
*/
var lessonStartTime = new Date().getTime();
var scorm = false //unless overriden by scorm.js
var attempted_points = 0; //total points possible on questions attempted to be answered so far
var total_points = 0; //total points possible for all questions to be scored for entire lesson
var my_score = 0; //current cumulative number of points scored on all questions answered
var totalQ = 0; //total questions to be scored for this lesson
var attempted_q = 0; //total number of questions attempted to answer
var file_name = location.href.substring((location.href.lastIndexOf('/') + 1),location.href.length);
var CLOSE_THIS_WINDOW = "" +
"" +
"
";
var INLINE_ID_NAMES = new Array("feed","f_done"); //inline div ids
var skip = new Array(); //monitors if question has already been answered correctly
var q_value = new Array(); //gets value of variable q_value from lesson.js and converts to value in this array
var this_q_points = new Array(); //each question's scored points
/**
* Determine which questions are scored
* and add to totalQ and total_points.
*/
for (var i = 1; i <= (scoreQ.length); i++) {
if (scoreQ[i] == "yes") {
totalQ++;
skip[i] = false;
q_value[i] = eval("q_value" + i);
total_points += q_value[i];
this_q_points[i] = 0;
}
else {
q_value[i] = 0;
}
}
/**
* Do same for activities.
*
* Don't need an array to hold point values
* because that data comes from the flash variables
*/
for (var i = 1; i <= (scoreQa.length); i++) {
if (scoreQa[i]) {
totalQ++;
var a_value = eval("a_value" + i);
total_points += a_value;
}
}
/**
* Called when "Check Answer" button is clicked
*/
function check_q(q_num, mc_items, q_type, allow_retry) {
if (!q_done[q_num]) {
attempted_q++;
attempted_points = attempted_points + q_value[q_num];
q_done[q_num] = true;
}
else if (allow_retry) {
if (scoreQ[q_num] == "yes") {
my_score -= this_q_points[q_num];
}
}
else {
myWin(qfLangBeenAnswered, "", q_num, q_type, "");
return;
}
var correct = "no";
var feedback = "";
var student_answer = "";
var fieldno = eval("main.document.f" + q_num + ".q" + q_num); // input name
var imageno = eval("main.document.check" + q_num);
var right_answers = eval("right_answers" + q_num);
if (q_type == 1 || q_type == 2) { // MULTIPLE_CHOICE, TRUE_FALSE
var checkedButton = "";
for (var i = 0; i < mc_items; i++) {
if (fieldno[i].checked) {
checkedButton = fieldno[i].value;
break;
}
}
student_answer = checkedButton;
if (checkedButton.toUpperCase() == right_answers[0].toUpperCase()) {
correct = "yes";
feedback = eval("feedbackRight" + q_num);
my_score += q_value[q_num];
}
else {
feedback = eval("feedbackWrong" + q_num);
if (eval("showCorrect" + q_num) == "yes") {
//feedback += " The correct response: " + right_answers[0] + ".";
feedback += " " + qfLangFBmctf + " " + right_answers[0];
}
}
}
else if (q_type == 3) { // MULTIPLE_ANSWER
var get_answers = new Array();
var correctly_matched = new Array();
for (var i = 0; i < mc_items; i++) {
if (fieldno[i].checked) {
get_answers[get_answers.length] = fieldno[i].value;
}
}
var answers_array = right_answers[0].split(",");
for (var i = 0; i < get_answers.length; i++) {
for (var j = 0; j < answers_array.length; j++) {
if (get_answers[i] == answers_array[j]) {
correctly_matched[correctly_matched.length] = get_answers[i];
}
}
}
if (correctly_matched.length == answers_array.length) {
if (get_answers.length > correctly_matched.length) {
correct = "partial";
//feedback = eval("feedbackPartial" + q_num) + " Only these answers are correct: " + correctly_matched;
feedback = eval("feedbackPartial" + q_num) + " " + qfLangFBmaOnly + " " + correctly_matched;
}
else {
correct = "yes";
feedback = eval("feedbackRight" + q_num);
my_score += q_value[q_num];
}
}
else if (correctly_matched.length > 0) {
correct = "partial";
//feedback = eval("feedbackPartial" + q_num) + " Correctly answered: " + correctly_matched;
feedback = eval("feedbackPartial" + q_num) + " " + qfLangFBmaPartial + " " + correctly_matched;
}
else {
feedback = eval("feedbackWrong" + q_num);
if (eval("showCorrect" + q_num) == "yes") {
//feedback += " The correct response(s): " + right_answers + ".";
feedback += " " + qfLangFBmasaWrong + " " + right_answers;
}
}
student_answer = get_answers;
}
else if (q_type == 4) { // SHORT_ANSWER
student_answer = fieldno.value;
var upper = student_answer.toUpperCase();
for (var i = 0; i < right_answers.length; i++) {
if (upper == right_answers[i].toUpperCase()) {
correct = "yes";
break;
}
}
if (correct == "yes") {
feedback = eval("feedbackRight" + q_num);
my_score += q_value[q_num];
}
else {
feedback = eval("feedbackWrong" + q_num);
if (eval("showCorrect" + q_num) == "yes") {
//feedback += " The correct response(s): " + right_answers + ".";
feedback += " " + qfLangFBmasaWrong + " " + right_answers;
}
}
}
else { // MATCHING, ORDERING
var correctly_matched = new Array();
var correct_answers = new Array();
var student_answers = new Array();
for (var i = 0; i < mc_items; i++) {
var option_num = i + 1;
fieldno = eval("main.document.f" + q_num + ".q" + q_num + "_" + option_num);
var s_index = fieldno.options.selectedIndex;
var ra_index = right_answers[i];
student_answers[i] = fieldno.options[s_index].value;
correct_answers[i] = " " + option_num + " = " + fieldno.options[ra_index].value;
if(s_index == ra_index) {
correctly_matched[correctly_matched.length] = option_num;
}
}
// var term = "matched";
// var term2 = "matchings";
// if (q_type == 6) {
// term = "ordered";
// term2 = "order";
// }
if (correctly_matched.length == right_answers.length){
correct = "yes";
//feedback = eval("feedbackRight" + q_num) + " All items correctly " + term + "!";
feedback = eval("feedbackRight" + q_num) + " " + qfLangFBmatorRight;
my_score += q_value[q_num];
}
else if (correctly_matched.length > 0) {
correct = "partial";
//feedback = eval("feedbackPartial" + q_num) + " Correctly " + term + ": " + correctly_matched;
feedback = eval("feedbackPartial" + q_num) + " " + qfLangFBmatorPartial + " " + correctly_matched;
}
else {
feedback = eval("feedbackWrong" + q_num);
if (eval("showCorrect" + q_num) == "yes") {
//feedback += " The correct " + term2 +": " + correct_answers + ".";
feedback += " " + qfLangFBmatorWrong + " " + correct_answers + "";
}
}
student_answer = student_answers;
}
// set the icon and this_q_points
if (correct == "yes") {
imageno.src = "check.png";
this_q_points[q_num] = q_value[q_num];
}
else {
imageno.src = "wrong.png";
this_q_points[q_num] = 0;
}
myWin(feedback, correct, q_num, q_type, student_answer);
}
function toggletable(which) { // show/hide question
var num = which.substring(10); //remove prefix "quizpopper"
if (tableToggle_array[num]) {
tableToggle_array[num] = false;
setShow(which, false);
}
else {
tableToggle_array[num] = true;
setShow(which, true);
}
}
function togglefeed(q_num, which, hide) { // show/hide feedback
my_item_value = eval(which + "[" + q_num + "]");
if (!hide) {
if (!my_item_value) {
setState(q_num, which, true);
setShow(which + q_num, false);
}
else {
setState(q_num, which, false);
setShow(which + q_num, true);
}
}
else {
for (i = 0; i < INLINE_ID_NAMES.length; i++) {
setState(q_num, INLINE_ID_NAMES[i], false);
}
setShow(which + q_num, false);
}
}
function setState(q_num, which, state) {
if (which == "feed") {feed[q_num] = state;}
else if (which == "f_done") {f_done[q_num] = state;}
}
function setShow(elemId, show) {
var elem = main.document.getElementById(elemId);
if (show) {
elem.style.display = 'block';
}
else {
elem.style.display = 'none';
}
}
function clearMe(q_num) {
for (i = 0; i < INLINE_ID_NAMES.length; i++) {
setShow(INLINE_ID_NAMES[i] + q_num, false);
}
}
function hint(q_num) {
my_hint = eval("hint" + q_num);
if (!eval('inline_feedback' + q_num)) {
winSpecs = 'width=400,height=200,resizable=yes,scrollbars=yes';
win = window.open ("", 'pic', winSpecs);
win.document.open();
win.document.clear();
win.document.write("" + qfLangHint + "");
win.document.write(CLOSE_THIS_WINDOW);
win.document.write(my_hint);
win.document.write("");
win.document.close();
win.focus();
}
else {
clearMe(q_num);
main.document.getElementById("f_done" + q_num).innerHTML = "