/* GLOBAL QUESTION CONSTANTS */
var LMS_ITEM_MAX_LENGTH = 700;
var FEED_IMG_TICK = "<img alt='Correct answer' width='22' height='17' src='../common/images/tick.gif'/>";
var FEED_IMG_CROSS = "<img alt='Wrong answer' width='18' height='17' src='../common/images/cross.gif'/>";
var FEED_IMG_MISS = "<img alt='Missed correct option' width='22' height='17' src='../common/images/miss.gif'/>";
var FEED_IMG_BLANK = "<img alt='' width='18' height='17' src='../common/images/mark_blank.gif'/>";


// show/hide box
function box_toggle(id,bool) {
	var thisbox = document.getElementById(id);
	//
	// show/hide box
	if(thisbox) {
		var thisclass = thisbox.className;
		//		
		if(bool) thisbox.className = "box_question";
		else thisbox.className = "box_question_collapse";
		//
	}
}

/* GENERAL PAGE FUNCTIONS */

/* Show and hide DIVs */
function showDiv(id,bool) {
	var thisDiv = document.getElementById(id);
	if(thisDiv && bool) { 
		thisDiv.style.visibility = "visible";
		thisDiv.style.display = "block";
	} else if (thisDiv) {
		thisDiv.style.visibility = "hidden";
		thisDiv.style.display = "none";
	}
}


/* QUESTION FUNCTIONS */

/* Record Answer to LMS */
function recordAnswer() {
	if(isSession) {
		var thisRecDiv = document.getElementById("infoRecord");
		if(thisRecDiv) thisRecDiv.innerHTML = "Saving answer...";
		//
		var success = loadSuspendData();
		if(success) success = doRecord(pageID,answer);
		//
		if(thisRecDiv) {
			if(success)	thisRecDiv.innerHTML = "Answer saved.";
			else thisRecDiv.innerHTML = "Sorry - answer couldn't be saved.";
		}
	}
	writeResponses(); // auto-update any reflection DIV on page
}

/* Get Answer from LMS */
function getAnswer(id) {
	var success = loadSuspendData();
	if(success) return unescape(getSuspendItem(id));
	else return false;
}

/* Get all Answers from LMS */
function getAllAnswers() {
	var success = loadSuspendData();
	if(success) return getAllSuspendItems();
	else return false;
}

/* Get recorded question page and title */
function getQuestionTitle(id) {
	if(isSession) {
		for(var i=0; i<Pages.length; i++) {
			if(Pages[i][0]==id) return "Page "+(i+1)+" - "+unescape(Pages[i][2]);	
		}			
	}
	return "Untitled Question";
}

/* If reflection DIV found on page, write stored responses to it */
function writeResponses() {
	var c = '';
	var reflectDiv = document.getElementById('reflection');
	//
	if(isSession && reflectDiv) {
		var items = getAllAnswers();
		//
		if(items!=false && items!='') {
			c += '<p class="info">Your stored responses:</p>';
			//
			for(id in items) {
				if(items[id]!='' && items[id]!=undefined) {
					c += '<div></div><div id="'+id+'" class="box_question">';
					c += '<h4 class="box_title"><a class="box_hide" href="javascript:box_toggle(\''+id+'\',false);">-</a><a class="box_show" href="javascript:box_toggle(\''+id+'\',true);">+</a>'+getQuestionTitle(id)+'</h4>';
					c += '<div class="box_content" id="'+id+'_content"><p class="quote"><img src="../common/images/quote_start.gif" alt="Start quote marks" height="15" width="24">';
					c += unescape(items[id]);
					c += '</p></div></div>';
				}
			}					
		} else {
			c += '<p class="info">No stored answers found.</p>';
		}
		reflectDiv.innerHTML = c;
	}
}


/**********************************************
MARKING FUNCTIONS
***********************************************/
// divert to correct function based on type to mark and disable question
function markQuestion(id,type) {
	var this_type = type.split("_");
	switch(this_type[1]) {
		case "Radio": markRadio(id); break;	
		case "Check": markCheck(id); break;
		case "TF": markTF(id); break;		
	}
}
//
/* Radio Buttons */
function markRadio(id) {
	// Radio buttons
	var this_form = eval('document.radioForm_'+id);
	var all_inputs = this_form.getElementsByTagName('input');
	var ANSWER = eval('ANSWER_'+id);
	var is_correct = false;
	//
	for (var i=0; i< all_inputs.length; i++) {
		// disable input
		all_inputs[i].disabled = true;
		// marking		
		if(SHOW_ANSWERS) {
			if (all_inputs[i].checked) {
				if((i+1)==ANSWER) {
					document.getElementById("optionFeed_"+id+"_"+(i+1)).innerHTML = FEED_IMG_TICK;
					is_correct = true;
				} else {
					document.getElementById("optionFeed_"+id+"_"+(i+1)).innerHTML = FEED_IMG_CROSS;
				}
			} else {
				if((i+1)==ANSWER) document.getElementById("optionFeed_"+id+"_"+(i+1)).innerHTML = FEED_IMG_MISS;
			}	
		}
	}
	// add auto-feedback
	var feedOK_div = document.getElementById("feedOK_"+id+"_content");
	if(feedOK_div && is_correct) feedOK_div.innerHTML = "<p><strong>Correct.</strong></p>"+feedOK_div.innerHTML;
	else if(feedOK_div) feedOK_div.innerHTML = "<p><strong>Incorrect.</strong></p>"+feedOK_div.innerHTML;
}

/* Checkboxes */
function markCheck(id) {
	var this_form = eval('document.checkForm_'+id);
	var all_inputs = this_form.getElementsByTagName('input');
	var ANSWERS = eval('ANSWERS_'+id);
	var is_correct = true;
	var none_selected = true;
	//
	for (var i=0; i < all_inputs.length; i++) {
		// disable input
		all_inputs[i].disabled = true;	
		// marking
		if(SHOW_ANSWERS) {
			if(all_inputs[i].checked) {
				if(ANSWERS[i]) {
					document.getElementById("optionFeed_"+id+"_"+(i+1)).innerHTML = FEED_IMG_TICK;
				} else { 
					document.getElementById("optionFeed_"+id+"_"+(i+1)).innerHTML = FEED_IMG_CROSS;
					is_correct = false;
				}
			} else {
				if(ANSWERS[i]) {
					document.getElementById("optionFeed_"+id+"_"+(i+1)).innerHTML = FEED_IMG_MISS;
					is_correct = false;
				}
			}	
		}
	}
	// add auto-feedback
	var feedOK_div = document.getElementById("feedOK_"+id+"_content");
	if(feedOK_div && is_correct) feedOK_div.innerHTML = "<p><strong>Correct.</strong></p>"+feedOK_div.innerHTML;
	else if(feedOK_div) feedOK_div.innerHTML = "<p><strong>Incorrect.</strong></p>"+feedOK_div.innerHTML;
}

/* True/False */
function markTF(id) {
	var this_form = eval('document.tfForm_'+id);
	var all_inputs = this_form.getElementsByTagName('input');
	var CORRECT = eval('CORRECT_'+id);
	var STATEMENTS = all_inputs.length / 2;
	var marks = STATEMENTS;
	//
	for (var i=1; i<=STATEMENTS; i++) {
		// disable inputs
		eval('this_form.option'+i+'[0].disabled=true');
		eval('this_form.option'+i+'[1].disabled=true');
		//
		// mark
		if(SHOW_ANSWERS) {
			var is_true_checked = eval('this_form.option'+i+'[0].checked');
			var is_false_checked = eval('this_form.option'+i+'[1].checked');
			//
			if(!is_true_checked && !is_false_checked) marks--;	// nothing selected
			//
			var this_true_feed = document.getElementById("optionFeed_"+id+"_"+i+"_T");
			if(this_true_feed && is_true_checked) {
				if(CORRECT[i-1]) this_true_feed.innerHTML = FEED_IMG_TICK;
				else {
					this_true_feed.innerHTML = FEED_IMG_CROSS;
					marks--;
				}
			} else {
				if(CORRECT[i-1] && !is_false_checked) this_true_feed.innerHTML = FEED_IMG_MISS;
				else this_true_feed.innerHTML = FEED_IMG_BLANK;
			}
			//
			var this_false_feed = document.getElementById("optionFeed_"+id+"_"+i+"_F");
			if(this_false_feed && is_false_checked) {
				if(!CORRECT[i-1]) this_false_feed.innerHTML = FEED_IMG_TICK;
				else {
					this_false_feed.innerHTML = FEED_IMG_CROSS;
					marks--;
				}
			} else {
				if(!CORRECT[i-1] && !is_true_checked) this_false_feed.innerHTML = FEED_IMG_MISS;
				else this_false_feed.innerHTML = FEED_IMG_BLANK;
			} 
		}
	}
	// add auto-feedback
	var feedOK_div = document.getElementById("feedOK_"+id+"_content");
	if(feedOK_div) {
		if(marks == STATEMENTS) { // all correct
			feedOK_div.innerHTML = "<p><strong>Correct.</strong></p>"+feedOK_div.innerHTML;
		} else {
			feedOK_div.innerHTML = "<p><strong>"+marks+"</strong> out of <strong>"+STATEMENTS+"</strong> correct.</p>"+feedOK_div.innerHTML;
		}
	}
}


/**********************************************
SUBMIT FUNCTIONS
***********************************************/
/* TRUE/FALSE */
function submitTF(id) {
	var this_form = eval('document.tfForm_'+id);
	var all_inputs = this_form.getElementsByTagName('input');
	var CORRECT = eval('CORRECT_'+id);
	var STATEMENTS = all_inputs.length / 2;
	var marks = STATEMENTS;
	//
	for (var i=1; i<=STATEMENTS; i++) {
		var is_true_checked = eval('this_form.option'+i+'[0].checked');
		var is_false_checked = eval('this_form.option'+i+'[1].checked');
		//
		if(is_true_checked && !CORRECT[i-1]) marks--; 		// false positive
		else if(is_false_checked && CORRECT[i-1]) marks--;	// false negative			
		else if(!is_true_checked && !is_false_checked) marks--;	// nothing selected
	}  
	//
	// complete status	
	var checked = 0;
	for(var i=0; i<all_inputs.length; i++) {
		if(all_inputs[i].checked) checked++;	
	}	
	var complete = (STATEMENTS==checked)? "2": "1";
	Questions[id][3] = complete; 
	//
	// correct status
	Questions[id][4] = (marks==STATEMENTS)? "2": ((marks>=1)? "1": "0");
	//
	// marks
	Questions[id][5] = marks;
	//
	// update menu
	updateMenuQuestion(id,complete);
}

/* RADIO BUTTONS */
function submitRadio(id) {
	var this_form = eval('document.radioForm_'+id);
	var all_inputs = this_form.getElementsByTagName('input');
	var ANSWER = eval('ANSWER_'+id);
	var is_correct = false;
	//
	for (var i=0; i< all_inputs.length; i++) {
		if(all_inputs[i].checked) {
			if((i+1)==ANSWER) is_correct = true; 
		} 	
	}
	//
	// complete status	
	Questions[id][3] = "2"; 
	//
	// correct status
	Questions[id][4] = (is_correct)? "2": "0";
	//
	// marks
	Questions[id][5] = (is_correct)? Questions[id][2]: 0;
	//
	// update menu
	updateMenuQuestion(id,"2");
} 

/* CHECKBOXES */
function submitCheck(id) {
	var this_form = eval('document.checkForm_'+id);
	var all_inputs = this_form.getElementsByTagName('input');
	var ANSWERS = eval('ANSWERS_'+id);
	var is_correct = true;
	var none_selected = true;
	//
	for (var i=0; i< all_inputs.length; i++) {
		var is_checked = all_inputs[i].checked;
		if(is_checked) none_selected = false;
		if(is_checked != ANSWERS[i]) is_correct = false;	
	}
	//
	// complete status	
	Questions[id][3] = (none_selected)? "1": "2"; 
	//
	// correct status
	Questions[id][4] = (is_correct)? "2": "0";
	//
	// marks
	Questions[id][5] = (is_correct)? Questions[id][2]: 0;
	//
	// update menu
	updateMenuQuestion(id,Questions[id][3]);
}
