function getEditorPlainText(editorName) {
	var fckversion = 23;
	if (fckversion < 23) {
		editor_frame = document.getElementById(editorName + '___Frame');  
		editor_source = editor_frame.contentWindow.document.getElementById('eEditorArea'); 
		return getInnerText(editor_source.contentWindow.document.body);
	} 
	else {
		oEditor = FCKeditorAPI.GetInstance( editorName ) ;
		return getInnerText(oEditor.EditorDocument.body);
	}
}

function moveOptionToTop(obj) {
	if(!hasOptions(obj)){return;}
	for(i=0;i<obj.options.length;i++){
		if(obj.options[i].selected){
			if(i != 0){
				for (j=0;j<i;j++) {
					swapOptions(obj,i-j,i-j-1);
				}
				obj.options[0].selected = true;
			}
			break;
		}
	}
}

function moveOptionToBottom(obj) {
	if(!hasOptions(obj)){return;}
	var lastIdx = obj.options.length-1;
	for(i=obj.options.length-1;i>=0;i--){
		if(obj.options[i].selected){
			if(i!=lastIdx){
				for (j=i;j<lastIdx;j++) {
					swapOptions(obj,j,j+1);
				}
				obj.options[lastIdx].selected = true;
			}
			break;
		}
	}
}

function showHomeworkResult(nWorked, nCorrect, pct, time) {
	var msg = 'Homework Result\n';
	msg += 'Number of Questions Answered: ' + nWorked + '\n';
	msg += 'Number Answered Correctly: ' + nCorrect + '\n';
	msg += 'Percent Answered Correctly: ' + pct + '\n';
	msg += 'Time Spent in this Session: ' + secondsToTimeString(time) + '\n';
	alert(msg);
}

function setInnerHTML(element, text) {
	element.innerHTML = text;
}

function setInnerText(element, text) {
	if (typeof element.innerText != "undefined") {
		element.innerText = text;
	}
	else {
		element.textContent = text;
	}
}

function getInnerText(element) {
	if (typeof element.innerText != "undefined") {
		return element.innerText;
	}
	else {
		return element.textContent;
	}	
}

function increaseTimer(formatDivId, fobId) {
	nSecondsFob = document.getElementById(fobId);
	sec = parseInt(nSecondsFob.value);
	nSecondsFob.value = sec + 1;
	theElement = document.getElementById(formatDivId);
	setInnerText(theElement, secondsToTimeString(sec));
	fnctn = "increaseTimer('" + formatDivId + "','" + fobId + "')";
	setTimeout(fnctn,1000);
}

function secondsToTimeString(secs) {
	sec = parseInt(secs);
	hrs = 0;
	min = Math.floor(sec / 60);
	sec = sec % 60;
	if (min >= 60) {
		hrs = Math.floor(min / 60);
		min = min % 60;
	}
	if (hrs.toString().length==1) {
		hrs = "0" + hrs;
	}
	if (min.toString().length==1) {
		min = "0" + min;
	}
	if (sec.toString().length==1) {
		sec = "0" + sec;
	}	
	return hrs + ':' + min + ':' + sec;
}

function validateDates(startFob, endFob, msg) {
	if (startFob.value != null && trim(startFob.value) != '' && endFob.value != null && trim(endFob.value) != '') {
		startDt = new Date(startFob.value);
		endDt = new Date(endFob.value);
		if (startDt.getTime() >= endDt.getTime()) {
			alert(msg);
			return false;
		}
		return true;
	}
}

function changeImages() {
	if (document.images) {
		for (var i=0; i<changeImages.arguments.length; i+=2) {
			document[changeImages.arguments[i]].src = changeImages.arguments[i+1];
		}
	}
}

function changeImagesById() {
	if (document.images) {
		for (var i=0; i<changeImagesById.arguments.length; i+=2) {
			document.getElementById(changeImagesById.arguments[i]).src = changeImagesById.arguments[i+1];
		}
	}
}

function openLinkWindow(url) {
	window.open(url, '_blank', "width=700,height=500,scrollbars=yes,resizable=yes");
}

function openSimpleWindow(url, windowName, width, height) {
	window.open(url, windowName, "width=" + width + ",height=" + height + ",location=no,menubar=no,status=no,toolbar=no,scrollbars=no,resizable=no");
}

function openPopupWindow(url, windowName, width, height) {
	window.open(url, windowName, "width=" + width + ",height=" + height + ",location=no,menubar=no,status=no,toolbar=no,scrollbars=yes,resizable=yes");
}

function linkHighlight(eventId,isOn) {
   var d;
   if (document.all) {
     d = document.all[eventId];
   }
   else {
     d = document.getElementsByName(eventId);
   }
  if (d.length) {
     for(var i=0; i<d.length; i++){
        d[i].className = (isOn ? 'eventOn' : 'event');
     }
  }
  else {
  	d.className = (isOn ? 'eventOn' : 'event');
  }
}

<!-- Zero based index value -->
function checkOption(formfield, index) {
	if (formfield.length) {
		formfield[index].checked = true;
	}
	else {
		formfield.checked = true;
	}
}

function jumpToUrl(url) {
	location.href=url;
}

function jumpToSelectUrl(selectfield) {
	jumpToUrl(selectfield.options[selectfield.selectedIndex].value);
}

function changeMarked(formfield, img, aqid, ifObj) {
	var thisLoc = 'mark.htm?aqid=' + aqid;
	if (formfield.value=='0') {
		img.src='images/homework/unmark.gif';
		formfield.value='1';
		thisLoc = thisLoc + '&marked=1';
	}
	else {
		img.src='images/homework/mark.gif';
		formfield.value='0';
		thisLoc = thisLoc + '&marked=0';
	}
	ifObj.src = thisLoc;
}

// ifObj is the hidden iframe object
function answerHwQuestion(aqid, ifObj, answerfield, tdId) {
	answer = getRadioListValue(answerfield);
	if (document.homeworkform.bAnswered.value=='0') {
		document.homeworkform.bAnswered.value='1';
		var thisLoc = 'answer.htm?aqid=' + aqid + '&answer=' + escape(answer) + '&tdId=' + escape(tdId);
		ifObj.src = thisLoc;
		document.getElementById('showAnswerImg').src='images/homework/answer.gif';
	}
	else {
		// do not go to db after first response
		returnHwResult(answer, document.homeworkform.correctAnswer.value, tdId);
	}
}

// ifObj is the hidden iframe object
function answerTwoHwQuestion(aqid, ifObj, answerfield1, answerfield2, tdId) {
	idx1 = getRadioListIndex(answerfield1);
	idx2 = getRadioListIndex(answerfield2);
	if (idx1 != -2 && idx2 != -2) {
		if (idx1 == -1) {
			answer1 = answerfield1.value;
		}
		else {
			answer1 = answerfield1[idx1].value;
		}
		if (idx2 == -1) {
			answer2 = answerfield2.value;
		}
		else {
			answer2 = answerfield2[idx2].value;
		}		
		answer = answer1 + '/' + answer2;
		tdId1 = '1_' + answer1;
		tdId2 = '2_' + answer2;
		if (document.homeworkform.bAnswered.value=='0') {
			document.homeworkform.bAnswered.value='1';
			var thisLoc = 'answer.htm?aqid=' + aqid + '&answer=' + escape(answer) + '&tdId=' + escape(tdId1) + '&tdId2=' + escape(tdId2);
			ifObj.src = thisLoc;
			document.getElementById('showAnswerImg').src='images/homework/answer.gif';
		}
		else {
			// do not go to db after first response
			returnTwoHwResult(answer, document.homeworkform.correctAnswer.value, tdId1, tdId2);	
		}
	}
}

// until db write, temporarily fix session statistics
function fixSessionStats(studentAnswer, correctAnswer) {
	qwSpan = document.getElementById('ssqw');
	qw = parseInt(getInnerText(qwSpan));
	if (!isNaN(qw)) {
		qw = qw + 1;
	}
	else {
		qw = 1;
	}
	setInnerText(qwSpan, qw);
	ncSpan = document.getElementById('ssnc');
	nc = parseInt(getInnerText(ncSpan));
	if (!isNaN(nc)) {
		if (studentAnswer == correctAnswer) {
			nc = nc + 1;
		}
	}
	else {
		if (studentAnswer == correctAnswer) {
			nc = 1;
		}
		else {
			nc = 0;
		}
	}
	setInnerText(ncSpan, nc);
	pcSpan = document.getElementById('sspc');
	pc = parseInt(getInnerText(pcSpan));
	if (!isNaN(pc)) {
		pc = Math.floor(nc * 100 / qw);
	}
	else {
		if (studentAnswer == correctAnswer) {
			pc = 100;
		}
		else {
			pc = 0;
		}
	}
	setInnerText(pcSpan, pc);
}

function returnHwResult(studentAnswer, correctAnswer, tdId) {
	// alert('returnHwResult: studentAnswer=' + studentAnswer + ',correctAnswer=' + correctAnswer + ',tdId='+tdId);
	resetRows();
	document.homeworkform.correctAnswer.value = correctAnswer;
	if (studentAnswer == correctAnswer) {
		document.getElementById(tdId).className = 'correct';
	}
	else {
		document.getElementById(tdId).className = 'incorrect';
	}
}

function returnTwoHwResult(studentAnswer, correctAnswer, tdId, tdId2) {
	document.homeworkform.correctAnswer.value = correctAnswer;
	if (studentAnswer == correctAnswer) {
		document.getElementById(tdId).className = 'correct';
		document.getElementById(tdId2).className = 'correct';
	}
	else {
		document.getElementById(tdId).className = 'incorrect';
		document.getElementById(tdId2).className = 'incorrect';
	}
}

function prefill(studentAnswer, correctAnswer) {
	slashPos = studentAnswer.indexOf('/');
	if (slashPos == -1) {
		returnHwResult(studentAnswer, correctAnswer, '1_' + studentAnswer);
	}
	else {
		answerPart1 = studentAnswer.substring(0, slashPos);
		answerPart2 = studentAnswer.substring(slashPos+1, 99);
		returnTwoHwResult(studentAnswer, correctAnswer, '1_' + answerPart1, '2_' + answerPart2);
	}
}

// expects 1 or 2 rbId params after initial param
function prefillQuiz(studentAnswer) {
	rbId1 = prefillQuiz.arguments[1];
	slashPos = studentAnswer.indexOf('/');
	if (slashPos == -1) {
		checkOneButton(rbId1, studentAnswer);
		// disableRadioButtons(rbId1, studentAnswer);
	}
	else {
		rbId2 = prefillQuiz.arguments[2];
		answerPart1 = studentAnswer.substring(0, slashPos);
		answerPart2 = studentAnswer.substring(slashPos+1, 99);
		checkOneButton(rbId1, answerPart1);
		checkOneButton(rbId2, answerPart2);
		// disableRadioButtons(rbId1, answerPart1);
		// disableRadioButtons(rbId2, answerPart2);		
	}	
}

// expects 1 or 2 rbId params after initial param
function prefillTest(studentAnswer) {
	rbId1 = prefillTest.arguments[1];
	slashPos = studentAnswer.indexOf('/');
	if (slashPos == -1) {
		checkOneButton(rbId1, studentAnswer);
	}
	else {
		rbId2 = prefillTest.arguments[2];
		answerPart1 = studentAnswer.substring(0, slashPos);
		answerPart2 = studentAnswer.substring(slashPos+1, 99);
		checkOneButton(rbId1, answerPart1);
		checkOneButton(rbId2, answerPart2);
	}	
}

// ifObj is the hidden iframe object
function answerQuizQuestion(aqid, ifObj, answerfield1) {
	idx1 = getRadioListIndex(answerfield1);
	if (idx1 != -2) {
		if (idx1 == -1) {
			answer1 = answerfield1.value;
		}
		else {
			answer1 = answerfield1[idx1].value;
		}	
		// do not go to db after first response
		//if (document.homeworkform.bAnswered.value=='0') {
			document.homeworkform.bAnswered.value='1';
			var thisLoc = 'quizanswer.htm?aqid=' + aqid + '&answer=' + escape(answer1);
			ifObj.src = thisLoc;
			//document.getElementById('nextButtonImg').src='images/homework/next.gif';
			//disableRadioButtons(answerfield1);
		//}
	}
}

// ifObj is the hidden iframe object
function answerTwoQuizQuestion(aqid, ifObj, answerfield1, answerfield2) {
	idx1 = getRadioListIndex(answerfield1);
	idx2 = getRadioListIndex(answerfield2);
	if (idx1 != -2 && idx2 != -2) {
		if (idx1 == -1) {
			answer1 = answerfield1.value;
		}
		else {
			answer1 = answerfield1[idx1].value;
		}
		if (idx2 == -1) {
			answer2 = answerfield2.value;
		}
		else {
			answer2 = answerfield2[idx2].value;
		}		
		answer = answer1 + '/' + answer2;
		tdId1 = '1_' + answer1;
		tdId2 = '2_' + answer2;
		// do not go to db after first response
		//if (document.homeworkform.bAnswered.value=='0') {
			document.homeworkform.bAnswered.value='1';
			var thisLoc = 'quizanswer.htm?aqid=' + aqid + '&answer=' + escape(answer);
			ifObj.src = thisLoc;
			//document.getElementById('nextButtonImg').src='images/homework/next.gif';
			//disableRadioButtons(answerfield1);
			//disableRadioButtons(answerfield2);
		//}
	}
}

// ifObj is the hidden iframe object
function answerTestQuestion(aqid, ifObj, answerfield1) {
	idx1 = getRadioListIndex(answerfield1);
	if (idx1 != -2) {
		if (idx1 == -1) {
			answer1 = answerfield1.value;
		}
		else {
			answer1 = answerfield1[idx1].value;
		}	
		var thisLoc = 'testanswer.htm?aqid=' + aqid + '&answer=' + escape(answer1);
		ifObj.src = thisLoc;
	}
}

// ifObj is the hidden iframe object
function answerTwoTestQuestion(aqid, ifObj, answerfield1, answerfield2) {
	idx1 = getRadioListIndex(answerfield1);
	idx2 = getRadioListIndex(answerfield2);
	if (idx1 != -2 && idx2 != -2) {
		if (idx1 == -1) {
			answer1 = answerfield1.value;
		}
		else {
			answer1 = answerfield1[idx1].value;
		}
		if (idx2 == -1) {
			answer2 = answerfield2.value;
		}
		else {
			answer2 = answerfield2[idx2].value;
		}		
		answer = answer1 + '/' + answer2;
		tdId1 = '1_' + answer1;
		tdId2 = '2_' + answer2;
		var thisLoc = 'testanswer.htm?aqid=' + aqid + '&answer=' + escape(answer);
		ifObj.src = thisLoc;
	}
}

// ifObj is the hidden iframe object
function answerExamQuestion(aqid, ifObj, answerfield1) {
	idx1 = getRadioListIndex(answerfield1);
	if (idx1 != -2) {
		if (idx1 == -1) {
			answer1 = answerfield1.value;
		}
		else {
			answer1 = answerfield1[idx1].value;
		}	
		var thisLoc = 'examanswer.htm?aqid=' + aqid + '&answer=' + escape(answer1);
		ifObj.src = thisLoc;
	}
}

// ifObj is the hidden iframe object
function answerTwoExamQuestion(aqid, ifObj, answerfield1, answerfield2) {
	idx1 = getRadioListIndex(answerfield1);
	idx2 = getRadioListIndex(answerfield2);
	if (idx1 != -2 && idx2 != -2) {
		if (idx1 == -1) {
			answer1 = answerfield1.value;
		}
		else {
			answer1 = answerfield1[idx1].value;
		}
		if (idx2 == -1) {
			answer2 = answerfield2.value;
		}
		else {
			answer2 = answerfield2[idx2].value;
		}		
		answer = answer1 + '/' + answer2;
		tdId1 = '1_' + answer1;
		tdId2 = '2_' + answer2;
		var thisLoc = 'examanswer.htm?aqid=' + aqid + '&answer=' + escape(answer);
		ifObj.src = thisLoc;
	}
}

function getRadioListValue(formfield) {
	return formfield[getRadioListIndex(formfield)].value;
}

function getRadioListIndex(formfield) {
	checkedId = -2;
	j = 0;
	if (formfield.length) {
		while(formfield[j]) {
			if (formfield[j].checked) {
				checkedId = j;
				break;
			}
			j++;
		}
	}
	else {
		if (formfield.checked) {
			checkedId = -1;
		}
	}
	return checkedId;
}

function checkOneButton(formfield, buttonText) {
	checkOneVal = buttonText;
	j = 0;
	if (formfield.length) {
		while(formfield[j]) {
			if (formfield[j].value==checkOneVal) {
				formfield[j].checked = true;
			}
			j++;
		}
	}
	else {
		if (formfield.value==checkOneVal) {
			formfield.checked = true;
		}
	}
}

// optional second param for selecting one item before disabling
function disableRadioButtons(formfield) {
	checkOne = false;
	if (disableRadioButtons.arguments.length > 1) {
		checkOne = true;
		checkOneVal = disableRadioButtons.arguments[1];
	}
	j = 0;
	if (formfield.length) {
		while(formfield[j]) {
			if (checkOne && formfield[j].value==checkOneVal) {
				formfield[j].checked = true;
			}
			formfield[j].disabled = true;
			j++;
		}
	}
	else {
		if (checkOne && formfield.value==checkOneVal) {
			formfield.checked = true;
		}
		formfield.disabled = true;
	}
}

function validateSelectList(formfield, errMsg) {
	if (formfield.length == 0 || formfield.selectedIndex < 0) {
		alert(errMsg);
		return false;
	}
	val = formfield.options[formfield.selectedIndex].value;
	if (val == null || val == '') {
		alert(errMsg);
		return false;
	}
	else {
		return true;
	}
}

function validateTextField(formfield, errMsg) {
	val = formfield.value;
	if (val == null || trim(val) == '') {
		alert(errMsg);
		return false;
	}
	else {
		return true;
	}
}

function validateEmailField(formfield, errMsg){
	var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
	if (re.test(formfield.value)) {
		return true;
	}
	else {
		alert(errMsg);
		return false;
	}
}

function validateAlphaNumeric(formfield, errMsg){
	var re = /^([A-Za-z0-9]+)$/
	if (re.test(formfield.value)) {
		return true;
	}
	else {
		alert(errMsg);
		return false;
	}
}

function validateInteger(formfield, errMsg){
	var re = /^([0-9]+)$/
	if (re.test(formfield.value)) {
		return true;
	}
	else {
		alert(errMsg);
		return false;
	}
}

function trim(s) {
  while (s.substring(0,1) == ' ') {
    s = s.substring(1,s.length);
  }
  while (s.substring(s.length-1,s.length) == ' ') {
    s = s.substring(0,s.length-1);
  }
  return s;
}

function validateCheckList(formfield) {
<!-- 
	var goodToGo = true;
	var errTxt = "";
	var j = 0;
	var oneChecked = false;
	if (formfield.length) {
		while(formfield[j]) {
			if (formfield[j].checked) {
				oneChecked = true;
				break;
			}
			j++;
		}
	}
	else {
		if (formfield.checked) {
			oneChecked = true;
		}
	}

	if (!oneChecked) {
		goodToGo = false;
		if (validateCheckList.arguments.length == 2) {
			errTxt += "\n" + validateCheckList.arguments[1];
		}
		else {
			errTxt += "\nPlease check at least one checkbox.";
		}
	}
	if (goodToGo) {
		return true;
	}
	else {
		alert(errTxt);
		return false;
	}
	//-->
}

function toggleCheckList(formfield) {
<!-- 
	var j = 0;
	var allChecked = true;
	if (formfield.length) {
		while(formfield[j]) {
			if (!formfield[j].checked) {
				allChecked = false;
				break;
			}
			j++;
		}
	}
	else {
		if (!formfield.checked) {
			allChecked = false;
		}
	}

	if (allChecked) {
		// uncheck all
		toggleAllCheckboxes(formfield, false);
	}
	else {
		// check all
		toggleAllCheckboxes(formfield, true);
	}
	//-->
}

function toggleAllCheckboxes(formfield, isOn) {
<!-- 
	var j = 0;
	if (formfield.length) {
		while(formfield[j]) {
			if (isOn) {
				formfield[j].checked = true;
			}
			else {
				formfield[j].checked = false;
			}
			j++;
		}
	}
	else {
		if (isOn) {
			formfield.checked = true;
		}
		else {
			formfield.checked = false;
		}
	}
	//-->
}

function validateRadioList(formfield) {
<!-- 
	showError = true;
	// optional showError param
	for (var i=1; i<validateRadioList.arguments.length; i++) {
		if (validateRadioList.arguments[i] == '0') {
			showError = false;
		}
	}

	var goodToGo = true;
	var errTxt = "";
	var j = 0;
	var oneSelected = false;
	if (formfield.length) {
		while(formfield[j]) {
			if (formfield[j].checked) {
				oneSelected = true;
				break;
			}
			j++;
		}
	}
	else {
		if (formfield.checked) {
			oneSelected = true;
			
		}
	}

	if (!oneSelected) {
		goodToGo = false;
		if (validateRadioList.arguments.length == 2) {
			errTxt += "\n" + validateRadioList.arguments[1];
		}
		else {
			errTxt += "\nPlease select one of the options.";
		}		
	}
	if (goodToGo) {
		return true;
	}
	else {
		if (showError) {
			alert(errTxt);
		}
		return false;
	}
	//-->
}