var add_button = function (divid, expected, feedArray) {
var bdiv = divid + "_bt";
var element = document.createElement("input");
element.setAttribute("type", "button");
element.setAttribute("value", "Check Me!");
element.setAttribute("name", "do check");
element.onclick = function () {
checkMCMFRandom(divid, expected, feedArray);
};
$("#" + bdiv).html(element);
};
var feedbackMCMFRandom = function (divid, correct, feedbackText) {
if (correct) {
$(divid).html('Correct!! ' + feedbackText);
//$(divid).css('background-color', '#C8F4AD');
$(divid).attr('class','alert alert-success');
} else {
if (feedbackText == null) {
feedbackText = '';
}
$(divid).html("Incorrect. " + feedbackText);
//$(divid).css('background-color', '#F4F4AD');
$(divid).attr('class','alert alert-danger')
}
};
var checkFIBStorage = function (divid, blankid, expected, feedback, casi) {
var given = document.getElementById(blankid).value;
// update number of trials??
// log this to the db
modifiers = '';
if (casi) {
modifiers = 'i'
}
var patt = RegExp(expected, modifiers);
var isCorrect = patt.test(given);
if (!isCorrect) {
fbl = feedback;
for (var i = 0; i < fbl.length; i++) {
patt = RegExp(fbl[i][0]);
if (patt.test(given)) {
feedback = fbl[i][1];
break;
}
}
}
// store the answer in local storage
var storage_arr = new Array();
storage_arr.push(given);
storage_arr.push(expected);
localStorage.setItem(divid, storage_arr.join(";"));
feedBack('#' + divid + '_feedback', isCorrect, feedback);
var answerInfo = 'answer:' + given + ":" + (isCorrect ? 'correct' : 'no');
logBookEvent({'event': 'fillb', 'act': answerInfo, 'div_id': divid});
document.getElementById(divid + '_bcomp').disabled = false;
};
var feedBack = function (divid, correct, feedbackText) {
if (correct) {
$(divid).html('You are Correct!');
//$(divid).css('background-color', '#C8F4AD');
$(divid).attr('class','alert alert-success');
} else {
if (feedbackText == null) {
feedbackText = '';
}
$(divid).html("Incorrect. " + feedbackText);
//$(divid).css('background-color', '#F4F4AD');
$(divid).attr('class','alert alert-danger');
}
};
/*
Multiple Choice with Feedback for each answer
*/
var feedBackMCMF = function (divid, correct, feedbackText) {
if (correct) {
$(divid).html('Correct!! ' + feedbackText);
//$(divid).css('background-color', '#C8F4AD');
$(divid).attr('class','alert alert-success');
} else {
if (feedbackText == null) {
feedbackText = '';
}
$(divid).html("Incorrect. " + feedbackText);
//$(divid).css('background-color', '#F4F4AD');
$(divid).attr('class','alert alert-danger');
}
};
/*
Multiple Choice with Multiple Answers
*/
var feedBackMCMA = function (divid, numCorrect, numNeeded, numGiven, feedbackText) {
var answerStr = "answers";
if (numGiven == 1) answerStr = "answer";
if (numCorrect == numNeeded && numNeeded == numGiven) {
$(divid).html('Correct! ' + feedbackText);
//$(divid).css('background-color', '#C8F4AD');
$(divid).attr('class', 'alert alert-success');
} else {
$(divid).html("Incorrect. " + "You gave " + numGiven +
" " + answerStr + " and got " + numCorrect + " correct of " +
numNeeded + " needed. " + feedbackText);
//$(divid).css('background-color', '#F4F4AD');
$(divid).attr('class', 'alert alert-danger');
}
};
/* Randomize options */
var createHTML_MCMFRandom = function (divid, answerString, feedString, corrAnswer) {
var i, j, k, l, len;
var arr = new Array();
var fr = new Array();
var alpha = ['a', 'b', 'c', 'd', 'e'];
var ansArray = new Array();
var feedArray = new Array();
var hash = new Array();
arr = answerString.split("*separator*");
fr = feedString.split("*separator*");
for (j = 0; j < arr.length - 1; j++) {
ansArray[j] = arr[j];
hash[ansArray[j]] = fr[j];
}
i = ansArray.length;
len = i;
if (i == 0) return false;
while (--i) {
var j = Math.floor(Math.random() * ( i + 1 ));
var tempi = ansArray[i];
var tempj = ansArray[j];
ansArray[i] = tempj;
ansArray[j] = tempi;
}
for (i = 0; i < ansArray.length; i++) {
k = ansArray[i];
feedArray[i] = hash[k];
}
for (l = 0; l < len; l++) {
var rad = "" + " ";
var opdiv = divid + "_op" + (l + 1);
$("#" + opdiv).html(rad);
}
var index = ansArray.indexOf(corrAnswer);
add_button(divid, index, feedArray);
return true;
};
var checkMCMFRandom = function (divid, expected, feed) {
var given;
var feedback = null;
var buttonObjs = document.forms[divid + "_form"].elements.group1;
for (var i = buttonObjs.length - 1; i >= 0; i--) {
if (buttonObjs[i].checked) {
given = buttonObjs[i].value;
feedback = feed[i];
}
}
// log the answer
var answerInfo = 'answer:' + given + ":" + (given == expected ? 'correct' : 'no');
logBookEvent({'event': 'mChoice', 'act': answerInfo, 'div_id': divid});
// give the user feedback
feedbackMCMFRandom('#' + divid + '_feedback', given == expected, feedback);
};
/* Local Storage */
var resetPage = function (divid) {
var i;
var id = new Array();
var keyArr = new Array();
id = divid.split("_");
var pageNum = id[1];
location.reload();
//erasing data from local storage
var len = localStorage.length;
if (len > 0) {
for (i = 0; i < len; i++) {
var key = localStorage.key(i);
var str = key.substring(0, 1);
if (str === pageNum) {
keyArr.push(key);
}
}
}
for (i = 0; i < keyArr.length; i++)
localStorage.removeItem(keyArr[i]);
};
var checkRadio = function (divid) {
// This function repopulates MCMF questions with a user's previous answers,
// which were previously stored into local storage
var qnum = divid;
var len = localStorage.length;
//retrieving data from local storage
if (len > 0) {
for (var i = 0; i < len; i++) {
var key = localStorage.key(i);
if (key === qnum) {
var ex = localStorage.getItem(key);
var arr = ex.split(";");
var str = key + "_opt_" + arr[0];
$("#" + str).attr("checked", "true");
document.getElementById(divid + '_bcomp').disabled = false;
}
}
}
};
var checkMultipleSelect = function (divid) {
// This function repopulates MCMA questions with a user's previous answers,
// which were stored into local storage.
var qnum = divid;
var len = localStorage.length;
if (len > 0) {
for (var i = 0; i < len; i++) {
var key = localStorage.key(i);
if (key === qnum) {
var ex = localStorage.getItem(key);
var arr = ex.split(";");
var answers = arr[0].split(",");
for (var a = 0; a < answers.length; a++) {
var str = key + "_opt_" + answers[a];
$("#" + str).attr("checked", "true");
document.getElementById(divid + '_bcomp').disabled = false;
}
}
}
}
};
var checkPreviousFIB = function (divid) {
// This function repoplulates FIB questions with a user's previous answers,
// which were stored into local storage
var qnum = divid;
var len = localStorage.length;
if (len > 0) {
for (var i = 0; i < len; i++) {
var key = localStorage.key(i);
if (key === qnum) {
var ex = localStorage.getItem(key);
var arr = ex.split(";");
var str = key + "_ans1";
$("#" + str).attr("value", arr[0]);
document.getElementById(divid + '_bcomp').disabled = false;
}
}
}
};
var checkMCMAStorage = function (divid, expected, feedbackArray) {
var given;
var feedback = "";
var correctArray = expected.split(",");
correctArray.sort();
var givenArray = [];
var correctCount = 0;
var correctIndex = 0;
var givenIndex = 0;
var givenlog = '';
var buttonObjs = document.forms[divid + "_form"].elements.group1;
// loop through the checkboxes
for (var i = 0; i < buttonObjs.length; i++) {
if (buttonObjs[i].checked) { // if checked box
given = buttonObjs[i].value; // get value of this button
givenArray.push(given) // add it to the givenArray
feedback += given + ": " + feedbackArray[i] + " "; // add the feedback
givenlog += given + ",";
}
}
// sort the given array
givenArray.sort();
while (correctIndex < correctArray.length &&
givenIndex < givenArray.length) {
if (givenArray[givenIndex] < correctArray[correctIndex]) {
givenIndex++;
}
else if (givenArray[givenIndex] == correctArray[correctIndex]) {
correctCount++;
givenIndex++;
correctIndex++;
}
else {
correctIndex++;
}
} // end while
// save the data into local storage
var storage_arr = new Array();
storage_arr.push(givenArray);
storage_arr.push(expected);
localStorage.setItem(divid, storage_arr.join(";"));
// log the answer
var answerInfo = 'answer:' + givenlog.substring(0, givenlog.length - 1) + ':' +
(correctCount == correctArray.length ? 'correct' : 'no');
logBookEvent({'event': 'mChoice', 'act': answerInfo, 'div_id': divid});
// give the user feedback
feedBackMCMA('#' + divid + '_feedback', correctCount,
correctArray.length, givenArray.length, feedback);
document.getElementById(divid + '_bcomp').disabled = false;
};
var checkMCMFStorage = function (divid, expected, feedbackArray) {
var given;
var feedback = null;
var buttonObjs = document.forms[divid + "_form"].elements.group1;
for (var i = buttonObjs.length - 1; i >= 0; i--) {
if (buttonObjs[i].checked) {
given = buttonObjs[i].value;
feedback = feedbackArray[i];
}
}
//Saving data in local storage
var storage_arr = new Array();
storage_arr.push(given);
storage_arr.push(expected);
localStorage.setItem(divid, storage_arr.join(";"));
// log the answer
var answerInfo = 'answer:' + given + ":" + (given == expected ? 'correct' : 'no');
logBookEvent({'event': 'mChoice', 'act': answerInfo, 'div_id': divid});
// give the user feedback
feedBackMCMF('#' + divid + '_feedback', given == expected, feedback);
document.getElementById(divid + '_bcomp').disabled = false;
};
// for each form in the div
// get the id of the form
// call checkMe on the form... -- need metadata what kind of question what parms etc
// hidden fields for meta data??? each form defines a checkme function with no parameters
// that calls the actual function that checks the answer properly??
// summarize