// JavaScript Document

var correctNum = 0;
var incorrectNum = 0;
var numCorrectQs = 0;
var numQs = 0;
var numAnswered = 0;
var qResultStatus = false;
var pageFeedBack = false;
var partialPageFeedBack = false;
var questionFeedBack = false;
var partialQuestionFeedBack = false;
var showOleFeedback = false;
var oleResultFunction;
var currentQuestion;
var formEl;
var blankFBNum = 0;
var whereToInsertFB;
var usefullPageFeedback;
var multiQArray = new Array();
var mpqCount = 1;
var jsDebug = false;
var formCount = 0;
var toggleFullPage = false;
var toggled = false;
var replaceQuestion = false;
var running = false;

function initOleScoring(formID,returnFunct){
	if(!running){
		var urlString = window.location.toString();
		if(urlString.indexOf("jsDebug") != -1){
			jsDebug = true;
		}
		getForms(formID);
		if(toggleFullPage && !toggled){
			var value = document.getElementById('fullPageFeed'+formID).value;
			if(value == 1){
				document.getElementById('fullPageFeed'+formID).value = 0;
				toggled = true;
			}else{
				document.getElementById('fullPageFeed'+formID).value = 1;
				toggled = true;
			}
		}
		startMeUp(formID,returnFunct);
	}
	running = true;
}

function getForms(formID){
	var parent = document.getElementById("content");
	var allForms = parent.getElementsByTagName("form");
	for(var i=0; i<allForms.length;i++){
		var inputs = allForms[i].getElementsByTagName("input");
		for(var j=0; j<inputs.length;j++){
			if(inputs[j].className == "showOleFeedback"){
				inputs[j].id = "showOleFeedback"+formID;
				inputs[j].name = "showOleFeedback"+formID;
			}
			if(inputs[j].className == "fullPageFeed"){
				inputs[j].id = "fullPageFeed"+formID;
				inputs[j].name = "fullPageFeed"+formID;
			}
		}
	}
}

function startMeUp(formID,returnFunct){
	whereToInsertFB = document.getElementById("showOleFeedback"+formID);
	if(document.getElementById("fullPageFeed"+formID)){
		usefullPageFeedback = document.getElementById("fullPageFeed"+formID).value;
	}else{
		usefullPageFeedback = 0;
	}
	numQs = 0;
	numCorrectQs = 0;
	correctNum = 0;
	incorrectNum = 0;
	numAnswered = 0;
	if(returnFunct != ''){
		oleResultFunction = returnFunct;
	}
	formEl = document.getElementById(formID);
	showOleFeedback = document.getElementById("showOleFeedback"+formID).value;	
	clearFeedback();
	findBlankFB();
	if(document.getElementById("pagePositive") || document.getElementById("pageNegative")){
		pageFeedBack = true;
	}
	if(document.getElementById("pagePartial")){
		partialPageFeedBack = true;	
	}
	setTimeout("findChoices()", 500);
}

function clearFeedback(){
	var feedbackEls = formEl.getElementsByTagName("div");
	for(var i=0; i<feedbackEls.length;i++){
		if(jscss("check",feedbackEls[i],"feedback")){
			feedbackEls[i].className ="off";
		}
		if(feedbackEls[i].className == "off" && feedbackEls[i].style.display=="block"){
			feedbackEls[i].style.display="";
		}
	}
	if(document.getElementById("feedbackHolder")){
		var feedBackDiv = document.getElementById("feedbackHolder");
		var feedbackEls = feedBackDiv.getElementsByTagName("div");
		for(var i=0; i<feedbackEls.length;i++){
			if(feedbackEls[i].id == "pagePositive" || feedbackEls[i].id == "pageNegative" || feedbackEls[i].id == "pagePartial" || feedbackEls[i].id.indexOf("qp") != -1 || feedbackEls[i].id.indexOf("qn") != -1 || feedbackEls[i].id.indexOf("qpart") != -1){
				feedbackEls[i].className ="off";
			}
		}
		feedBackDiv.className ="off";
	}
}

function findBlankFB(){
	var allDivs = formEl.getElementsByTagName("div");
	for(var ad=0; ad<allDivs.length; ad++){
		var divID = allDivs[ad].id;
		if(divID.indexOf("fbItemBlank") > -1){		
			blankFBNum++;	
		}
	}
}

function findChoices(){
	var formEls = formEl.getElementsByTagName("div");
	//var numQs = 0;
	for(var i=0;i<formEls.length;i++){
		if(formEls[i].className == "choices"){
			formEls[i].setAttribute("id", "choiceSet"+numQs);
			numQs++;		
		}	
	}
	findQuestions();
}

function findQuestions(){
	for(var cq=0;cq<numQs;cq++){
		var cQuestion = document.getElementById("choiceSet"+cq);
		checkIfAnswered(cQuestion);
	}
	if(numAnswered < numQs){
		if(numQs == 1){
			alert("Please answer this question.");
		}else{
			alert("Please answer all questions on this page.");
		}
		running = false;
	}else{
		for(var q=0;q<numQs;q++){
			var question = document.getElementById("choiceSet"+q);
			currentQuestion = q;
			getCorrect(question);
			correctNum = 0;	
			incorrectNum = 0;	
		}
		//if(pageFeedBack){
			checkAllQuestions();
		//}
	}
}

function checkIfAnswered(question) {
	var qEls = question.getElementsByTagName("input");
	for (var i = 0; i < qEls.length; i++) {  
		var curInput = qEls[i];
		if(curInput.type == "text"){
			if(curInput.value != ""){
				numAnswered++;	
			}
		}else{
			if(curInput.checked){
				numAnswered++;		
			}
		}
	}; // end for
	
	var qElsSel = question.getElementsByTagName("select");
	for (var s = 0; s < qElsSel.length; s++) { 
		if(qElsSel[s].value != ""){
			numAnswered++;
		}
	}
	
	var qTAs = question.getElementsByTagName("textarea");
	for (var qta = 0; qta < qTAs.length; qta++) { 
		if(qTAs[qta].value != ""){
			numAnswered++;
		}
	}
} // end checkIfAnswered

function getCorrect(elToScore){
	var scoreEls = elToScore.childNodes;
	for(var i=0;i<scoreEls.length;i++){
		if(scoreEls[i].nodeType == 1){
			var curNodeI = scoreEls[i].getElementsByTagName("input");
			var curNodeS = scoreEls[i].getElementsByTagName("select");
			var curNodeTA = scoreEls[i].getElementsByTagName("textarea");
			for(var j=0;j<curNodeI.length;j++){
				var curEl = curNodeI[j];
				switch (curEl.type){
					case "radio":
						if(curEl.checked ){
							scoreMCTF(curEl);
						}
					break;
					case "text":
						if(curEl.value != ""){
							scoreNM(curEl);
						}
					break;
					case "checkbox":
						if(curEl.checked ){
							scoreMR(curEl);
						}
					break;			
					default:
					break;		
				}
			}
			
			for(var s=0;s<curNodeS.length;s++){
				scoreSelect(curNodeS[s]);	
			}
			for(var ta=0;ta<curNodeTA.length;ta++){
				scoreTA(curNodeTA[ta]);	
			}
		}
	}
}

function scoreMCTF(elToScore){
	var objEl = findNums(elToScore);
	var correctAnswer = document.getElementById("a"+objEl.nameNum).value;
	if(objEl.idNum == correctAnswer){
		if(pageFeedBack){
			markCorrect(elToScore,"page");
		}
		if(document.getElementById("qp"+currentQuestion)){
			markCorrect(elToScore,"qp");
		}else if(document.getElementById("fbItem"+objEl.idNum)){
			var feedBack = document.getElementById("fbItem"+objEl.idNum);
			markCorrect(elToScore,feedBack);
		}
		numCorrectQs++;
	}else{
		if(pageFeedBack){
			markWrong(elToScore,"page");
		}
		if(document.getElementById("qn"+currentQuestion)){
			markWrong(elToScore,"qn");
		}else if(document.getElementById("fbItem"+objEl.idNum)){
			var feedBack = document.getElementById("fbItem"+objEl.idNum);
			markWrong(elToScore,feedBack);
		}
	}
}

function scoreSelect(elToScore){
	var objEl = findNums(elToScore);
	var chosenAnswer = elToScore.value;
	var correctAnswer = document.getElementById("a"+objEl.nameNum).value;
	var feedBack = document.getElementById("fbItem"+chosenAnswer);
	if(chosenAnswer == correctAnswer){
		if(pageFeedBack){
			markCorrect(elToScore,"page");
		}
		if(document.getElementById("qp"+currentQuestion)){
			markCorrect(elToScore,"qp");
		}
		if(feedBack){
			markCorrect(elToScore,feedBack);
		}
		numCorrectQs++;
	}else{
		if(pageFeedBack){
			markWrong(elToScore,"page");
		}
		if(document.getElementById("qn"+currentQuestion)){
			markWrong(elToScore,"qn");
		}
		if(feedBack){
			markWrong(elToScore,feedBack);
		}
	}
}

function scoreNM(elToScore){
	var objEl = findNums(elToScore);
	var userAnswer = elToScore.value;
	var correctAnswer = document.getElementById("a"+objEl.nameNum).value;
	if(userAnswer == correctAnswer){
		markCorrect(elToScore,"simple");
		numCorrectQs++;
		MRcorrect(true,objEl.nameNum);
	}else{
		markWrong(elToScore,"simple");
		MRcorrect(false,objEl.nameNum);
	}
}

function scoreMR(elToScore){
	var objEl = findNums(elToScore);
	var correctAnswerFull = document.getElementById("a"+objEl.nameNum).value;
	var correctAnswer = new Array();
	var correctAnswer = correctAnswerFull.split("|");
	var correct = testMRArray(correctAnswer,objEl.idNum);
	var tInputs = formEl.getElementsByTagName("input");
	var totalChecked = 0;
	for(var i=0;i<tInputs.length;i++){
		if(tInputs[i].name == "c"+objEl.nameNum && tInputs[i].checked){
			totalChecked++;		
		}	
	}
	if(correct){
		correctNum++;
		if(correctNum == correctAnswer.length && incorrectNum == 0 && totalChecked == correctAnswer.length){			
			if(document.getElementById("qp"+currentQuestion)){
				markCorrect(elToScore,"qp");
				if(document.getElementById("qpart"+currentQuestion)){
					var feedBackDiv = document.getElementById("qpart"+currentQuestion);
					feedBackDiv.className = "off";
				}	
			}else if(document.getElementById("fb"+objEl.nameNum)){
				MRcorrect(true,objEl.nameNum);
			}
			if(pageFeedBack){
				markCorrect(elToScore,"page");
			}
			numCorrectQs++;
		}else{
			if(document.getElementById("qpart"+currentQuestion)){
				markCorrect(elToScore,"qpart");
				if(document.getElementById("qn"+currentQuestion)){
					var feedBackDiv = document.getElementById("qn"+currentQuestion);
					feedBackDiv.className = "off";
				}
			}else if(document.getElementById("fb"+objEl.nameNum)){
				MRcorrect(false,objEl.nameNum);
			}
			if(pageFeedBack){
				markWrong(elToScore,"page");
			}
		}
		elToScore.parentNode.parentNode.className = "RespRight";
	}else{
		incorrectNum++;
		if(correctNum > 0 && incorrectNum > 0){
			if(document.getElementById("qpart"+currentQuestion)){
				markCorrect(elToScore,"qpart");
			}
			if(document.getElementById("qn"+currentQuestion)){
				var feedBackDiv = document.getElementById("qn"+currentQuestion);
				feedBackDiv.className = "off";
			}
			if(document.getElementById("qp"+currentQuestion)){
				var feedBackDiv = document.getElementById("qp"+currentQuestion);
				feedBackDiv.className = "off";
			}
		}else{
			if(document.getElementById("qn"+currentQuestion)){
				markWrong(elToScore,"qn");
				if(document.getElementById("qpart"+currentQuestion)){
					var feedBackDiv = document.getElementById("qpart"+currentQuestion);
					feedBackDiv.className = "off";
				}
				if(document.getElementById("qp"+currentQuestion)){
						var feedBackDiv = document.getElementById("qp"+currentQuestion);
						feedBackDiv.className = "off";
				}
			}
		}
		if(pageFeedBack){
			markWrong(elToScore,"page");
		}
		elToScore.parentNode.parentNode.className = "RespWrong";
	}
}

function testMRArray(correctAnswerArray,idNum){
	for(var x=0;x<correctAnswerArray.length; x++){
		if(idNum == correctAnswerArray[x]){
			var choiceCorrect = true;
			return 	choiceCorrect;
		}
	}
}

function MRcorrect(correct,MRfeed){
	var feedBack = document.getElementById("fb"+MRfeed);
	feedBack.style.display = "block";
	var fbs = feedBack.getElementsByTagName("p");
	if(correct){
		for(var z=0;z<fbs.length;z++){
			fbs[z].style.display = "none";
			if(fbs[z].className == "fbC"){
				fbs[z].style.display = "block";
			}
		}
	}else{
		for(var z=0;z<fbs.length;z++){
			fbs[z].style.display = "none";
			if(fbs[z].className == "fb"){
				fbs[z].style.display = "block";
			}
		}
	}	
}

function findNums(elToFind){
	var scoreELObj = new Object();
	scoreELObj.elName = elToFind.name
	scoreELObj.nameNum = scoreELObj.elName.substr(1);
	scoreELObj.elID = elToFind.id;
	scoreELObj.idNum = scoreELObj.elID.substr(1);
	return scoreELObj;
}

function checkAllQuestions(){
	//if(jsDebug){alert(numCorrectQs+" : "+numQs);}
	if(numCorrectQs == numQs){
		if(document.getElementById("pagePositive")){
			var divToShow = document.getElementById("pagePositive");
			divToShow.className = "FBCorrect";
			divToShow.parentNode.className = "feedback";
		}
		if(window.oleResultFunction){
			oleResultFunction(true);
		}
		finishScoring(true,divToShow);
	}else{
		if(partialPageFeedBack)	{
			var divToShow = document.getElementById("pagePartial");
				divToShow.className = "FBIncorrect";
				divToShow.parentNode.className = "feedback";
		}else{
			if(document.getElementById("pageNegative")){
				var divToShow = document.getElementById("pageNegative");
				divToShow.className = "FBIncorrect";
				divToShow.parentNode.className = "feedback";
			}
		}
		if(window.oleResultFunction){
			oleResultFunction(false);
		}
		finishScoring(false,divToShow);
	}
}

function scoreTA(elToScore){
	if(pageFeedBack){
			markCorrect(elToScore,"page");
	}
	if(document.getElementById("qp"+currentQuestion)){
		markCorrect(elToScore,"qp");
	}
}

	
function markCorrect(elToMark,feedBackToShow){
	elToMark.parentNode.parentNode.className = "RespRight";
	switch(feedBackToShow){
		case "page": 
		break;
		
		case "qp":
			questionFeedBack = true;
			var feedBackDiv = document.getElementById(feedBackToShow+currentQuestion);
			if(blankFBNum > 0 || numQs == 1){
				formEl.insertBefore(feedBackDiv,null);
			}
			feedBackDiv.className = "FBCorrect";
			jscss("add",feedBackDiv,"feedback");
			finishScoring(true,feedBackDiv);
		break;
		
		case "qpart":
			questionFeedBack = true;
			var feedBackDiv = document.getElementById(feedBackToShow+currentQuestion);
			if(blankFBNum > 0 || numQs == 1){
				formEl.insertBefore(feedBackDiv,null);
			}
			feedBackDiv.className = "FBIncorrect";
			jscss("add",feedBackDiv,"feedback");
			finishScoring(false,feedBackDiv);
		break;
		
		case "simple": 
		break;
		
		default: 
			feedBackToShow.className = "FBCorrect";
			if(feedBackToShow.parentNode && feedBackToShow.parentNode.id == "feedbackHolder"){
				feedBackToShow.parentNode.className = "feedback";
				var feedbackToFlicker = feedBackToShow.parentNode;
			}else{
				questionFeedBack = true;
				jscss("add",feedBackToShow,"feedback");
				var feedbackToFlicker = feedBackToShow;
			}
			if(blankFBNum > 0 || numQs == 1){
				questionFeedBack = false;
				if(typeof feedBackToShow == "string"){
					feedBackToShow = document.getElementById(feedBackToShow+currentQuestion);	
				}
				var feedbackToFlicker = feedBackToShow;
				formEl.insertBefore(feedBackToShow,null);
			}
			finishScoring(true,feedbackToFlicker);
		break;
	}
}

function markWrong(elToMark,feedBackToShow){
		elToMark.parentNode.parentNode.className = "RespWrong";	
		switch(feedBackToShow){
		case "page": 
		break;
		
		case "qn":
			questionFeedBack = true;
			var feedBackDiv = document.getElementById(feedBackToShow+currentQuestion);
			if(blankFBNum > 0 || numQs == 1){
				formEl.insertBefore(feedBackDiv,null);
			}
			feedBackDiv.className = "FBIncorrect";
			jscss("add",feedBackDiv,"feedback");
			finishScoring(false,feedBackDiv);
			
		break;
				
		case "simple": correctNum--;
		break;
		
		default: 
			feedBackToShow.className = "FBIncorrect";
			if(feedBackToShow.parentNode && feedBackToShow.parentNode.id == "feedbackHolder"){
				feedBackToShow.parentNode.className = "feedback";
				var feedbackToFlicker = feedBackToShow.parentNode;
			}else{
				questionFeedBack = true;
				var feedbackToFlicker = feedBackToShow;
				jscss("add",feedBackToShow,"feedback");
			}
			/*if(blankFBNum > 0 || numQs == 1){
				questionFeedBack = false;
				formEl.insertBefore(feedBackToShow,whereToInsertFB);
			}*/
			if(blankFBNum > 0 || numQs == 1){
				questionFeedBack = false;
				if(typeof feedBackToShow == "string"){
					feedBackToShow = document.getElementById(feedBackToShow+currentQuestion);	
				}
				var feedbackToFlicker = feedBackToShow;
				formEl.insertBefore(feedBackToShow,null);
			}
			finishScoring(false,feedbackToFlicker);
		break;
	}
}

function checkForFullPageFeedBack(feedBack){
	if(mpqCount < multiQArray.length){
		if(usefullPageFeedback == true){
			replaceQuestion = true;
		}
		var newFunc = function(){executeFullPageFeed(feedBack);};
		multiPartQuestion(true,newFunc);
	}else{
		executeFullPageFeed(feedBack);
	}
}

function executeFullPageFeed(feedBack){
	if(usefullPageFeedback==1 && feedBack){
		var plural = "";
		if(numQs > 1){
			plural = "s"
		}
		if(document.getElementById("questionHold")){
			var multiPartContent = document.getElementById("questionHold").innerHTML;
		}else{
			var multiPartContent = "";	
		}
		var fullFeed = '<div id="fullPageFeedbackDiv">'+feedBack.innerHTML+multiPartContent+'</div> <p><a href="##" id="showQButt" class="ButtonText" onclick="showQuestion(); return false;"><span> Return to Question'+plural+' </span></a></p>';
		rearangePopUps("afterEnd");
		document.getElementById("content").innerHTML = fullFeed;
		rearangePopUps("beforeEnd");
		document.getElementById("fullPageFeedbackDiv").scrollIntoView();	
	}
}

function rearangePopUps(where){
	var allDivs = document.getElementsByTagName("div");
	for(var divs=0; divs < allDivs.length; divs++){
		if(	allDivs[divs].id.indexOf("popUp_content") != -1){
			document.getElementById("content").insertAdjacentElement(where,allDivs[divs]);
		}
	}
	for(var divs=0; divs < allDivs.length; divs++){
		if(	allDivs[divs].id.indexOf("audio_content") != -1){
			document.getElementById("content").insertAdjacentElement(where,allDivs[divs]);
		}
	}
}

function showQuestion(){
	if(window.gObjInfo.pageID){
		jumpPage()
	}else{
		window.location.reload();
	}
}

function finishScoring(state,flickrDiv){
	qResultStatus = state;
	//var childDivs = flickrDiv.getElementsByTagName
	if(questionFeedBack){
		if(formEl.firstChild.NodeType == 1){
			formEl.scrollIntoView();
		}else{
			formEl.scrollIntoView();	
		}
	}else if(document.getElementById("feedbackHolder")){
		document.getElementById("feedbackHolder").scrollIntoView();
	}else{
		if(flickrDiv){
			flickrDiv.scrollIntoView();
		}
	}
	if(flickrDiv){
		flickrDiv.className = flickrDiv.className;
	}
	if(qResultStatus){
		checkForFullPageFeedBack(flickrDiv);	
	}
	running = false;
}
			
function testResultFunction(){
	alert("function exists");	
}

function validateNM(inputObject){
	var corVal = inputObject.value;
	var checkForNum = isNaN(corVal);
	if(checkForNum == true || corVal==""){
		inputObject.value = corVal.slice(0,corVal.length-1);
	}
}

function validateNMChange(inputObject){
	var corVal = inputObject.value;
	var checkForNum = isNaN(corVal);
	if(checkForNum == true || corVal==""){
		alert("Numbers and decimal points only please");
		inputObject.value = "";
	}
}

function toggleFB(){
	toggleFullPage = true;
}

/*Will display another question on the page if the previous one was answered correctly
Can replace the question or append the question to the page*/
function multiPartQuestion(isCorrect,funcToDo){
	var anotherOne = false;
	var holder;
	if (isCorrect){
		if(replaceQuestion == true){
			//make sure to put the array on the page example: multiQArray = ["1352","1385"];
			//Need to have a div called questionHold that we the load the questions into
			//Need to set replaceQuestion = true on page.
			var activityID = multiQArray[mpqCount];
			if(mpqCount+1 < multiQArray.length){
				anotherOne = true;
			}else{
				anotherOne = false;
			}
			var urlString = "multiPartOLE.cfm?anotherQ="+anotherOne+"&activityID="+activityID;
			//this will replace the old question with the new one using ajax
			ajax("GET", urlString, true, funcToDo, "questionHold");
			mpqCount++;	
		}else{
			//Need to have a div called questionHold1 or questionHold2 etc. surrounding the ole call
			holder = document.getElementById("questionHold"+mpqCount);
			var elsToClear = holder.getElementsByTagName("*");
			/*hide submit button and clear the id for all elements in the previous question 
			so that the next question will display correctly*/
			for(var clearEl = 0; clearEl < elsToClear.length; clearEl++){
				if(elsToClear[clearEl].id.indexOf("submitButton") != -1){
					 jscss('add',elsToClear[clearEl],'off');	
				}
				if(elsToClear[clearEl].tagName.toLowerCase() == "input" || elsToClear[clearEl].tagName.toLowerCase() == "select"){
					elsToClear[clearEl].disabled = true;
				}
				elsToClear[clearEl].id = "";
				}
			mpqCount++;
			jscss('add',document.getElementById("questionHold"+mpqCount),'on');
		}
	}
}