/* Initialize the form on load or reload */
function InitForm() {

       // Set report form to zeroes, first the groups
	for (i=0; i < noCategories; ++i) {
	       var group = categories[i];
	       var setCatTotal = 'document.myform.' + group + 'total.value = "0"';
	       eval (setCatTotal);
	       var setCatPC = 'document.myform.' + group + 'pc.value = "0"';
	       eval (setCatPC);
	}
	// Set report form to zeroes, and now the overall
	document.myform.ototal.value='';
	document.myform.opc.value='';
	               
	//Set all radio buttons to unchecked:
	for (i=0; i < document.myform.elements.length; i++) {
	       if (document.myform.elements[i].type == 'radio') {
	               document.myform.elements[i].checked = false;
	       }
	}	
}

/* Insert a survey on the page */
function StartSurvey (title) {

	/* Declare globals */
	noItems = 0;				// Total number of questions
	noCategories = 0;			// Number of categories, must have at least one
	categories = new Array ();		// Normally a single character category ID
	groupTitles = new Array();		// Title for each category
	noResponses = 0;			// Number of verbal responses
	floorScores = new Array();		// Minimum score which triggers verbal response
	responses = new Array();		// Text of corresponding verbal resposnes
	var result = '<div id="Survey">\n' + 
	'<form name="myform" action="javascript: UpdateForm()">\n' + 
	'<input type="hidden" name="ototal" id="ototal" value="0" />\n' + 
	'<input type="hidden" name="opc" id="opc" value="0" />\n';
	return (result);
}

function EndSurvey () {
	var result = '<\/form>\n';
	result += '<\/div>';
	return (result);
}

/* Insert a heading for a group of items on the survey */
function InsertGroup (groupCode, groupText) {
	categories[noCategories] = groupCode;
	groupTitles[groupCode] = groupText;
	++noCategories;

	var result = '<p class="GroupHead">' + groupText + '<\/p>';
	return (result);
}

/* Insert a single item on the survey */
function InsertItem (itemCode, itemText) { 
	++noItems;
	var noDisplay = eval (noItems);
	var result = '';
	
	/* Likert style items */
	if (itemType == 'Likert') {
		result = '<table width="90%" border="0" align="center">' + 
		'<tr><td width="2">&nbsp;<\/td><td class="ItemText">'+ noDisplay + '. <\/td><td class="ItemText">' + itemText + '<\/td><\/tr>' +
		'<tr><td width="2">&nbsp;<\/td><td class="RatingText">' +
		'<input name="' + itemCode + '" type="radio" value="1" onclick="UpdateForm();">Almost Never ' +
		'<input name="' + itemCode + '" type="radio" value="2" onclick="UpdateForm();">Seldom ' +
		'<input name="' + itemCode + '" type="radio" value="3" onclick="UpdateForm();">Sometimes ' +
		'<input name="' + itemCode + '" type="radio" value="4" onclick="UpdateForm();">Often ' +
		'<input name="' + itemCode + '" type="radio" value="5" onclick="UpdateForm();">Almost Always' +
		'<\/td><\/tr><\/table><br>';
	};
	
	/* T/F style items */
	if (itemType == 'T/F') {
		result = '<table width="90%" border="0" align="center">\n' + 
		'<tr><td width="2">&nbsp;<\/td><td width="4" class="ItemText" valign="top" align="right">'+ noDisplay + '.<\/td>' + 
		'<td class="ItemText">' + itemText + '<\/td><\/tr>\n' + 
		'<tr><td width="2">&nbsp;<\/td><td colspan="2" class="RatingText" valign="top">\n' +
		'<input name="' + itemCode + '" type="radio" value="1" onclick="UpdateForm();">True \n' +
		'<input name="' + itemCode + '" type="radio" value="0" onclick="UpdateForm();">False \n'  +
		'<\/td><\/tr>' +
		'<\/table>\n';
	};
	return (result);
}

/* Insert a button to score the test */
function InsertButton (label) {
	var result = '<table width="90%" border="0" align="center">\n <tr><td width="2">&nbsp;<\/td><td colspan="2"  class="ItemText">';
	result += '<input type="submit" name="Score" value="' + label + '" onClick="ShowResponse (); return (false);" \/>';
	result += '<\/td><\/tr><\/table>';
	return (result);
}

/* Create a response to Survey Input */
function InsertResponse () {

	/* Report for several categories */
	var result = '';
	if (noCategories > 1) {
		result += '<table border="1" cellpadding="4" cellspacing="0" bordercolor="#99BBDB">';
		result += '<tr><td class="GroupHead" align="right">Category<\/td><td class="GroupHead">Points<\/td>';
		result += '<td class="GroupHead">Percent<\/td><\/tr>';
		for (i=0; i < noCategories; ++i) {
			   var group = categories[i];
			   var title = groupTitles[group];
			   result += InsertGroupResult (group, title);
		}
		if (noCategories > 1) { result += InsertGroupResult ("o", "Overall") };
		result += '<\/table>'
	
	/* Response for when categories are not in use */
	} else {
		var groupCode = categories[0];
		result +=  '<input type="hidden" id="' + groupCode + 'total" name="' + groupCode + 'total">\n';
		result +=  '<td><input type="hidden" id="' + groupCode + 'pc" name="' + groupCode + 'pc">\n';
	}
	return (result)
}

/* Create a group of items row in the report form */
function InsertGroupResult (groupCode, groupText) {
	var result = '<tr><td align="right" class="ItemText">' + groupText + ':<\/td>\n';
	result +=  '<td><input type="text"  class="ItemText" id="' + groupCode + 'total" name="' + groupCode + 'total" size="4" readonly="readonly" onfocus="this.blur();"><\/td>\n';
	result +=  '<td><input type="text"  class="ItemText" id="' + groupCode + 'pc" name="' + groupCode + 'pc" size="4" readonly="readonly" onfocus="this.blur();"><\/td><\/tr>\n';
	return (result); 
}


/* Enter a potential response to the survey */
function LoadResponse (floor, verbiage) {
	floorScores[noResponses] = parseInt(floor);
	responses[noResponses] = verbiage;
	++noResponses;
	return (true);
}

/* Score responses and update the table of scores on every item selection */
function UpdateForm () {
	var overallItems = 0; 					// count of items 
	var overallSelected = 0;				// number of items Selected (answered)
	var overallTotal = 0.0; 				// aggregate value of items Selected
	var categoryItems = new Array();		// count of items by category
	var categoryTotal = new Array();		// maximum of items by category
	var categorySelected = new Array();		// sum of of Selected items by category
	for (i=0; i < noCategories; ++i) {
	       var group = categories[i];
	       categoryItems[group]=0;
	       categoryTotal[group]=0.0
	       categorySelected[group] = 0;
	}

       /* loop through the form elements selecting active radio buttons to compute new totals */
	var noElements = document.myform.length;
	var prevElement = '';
	for (i=0; i < noElements; ++i) {

		var myElement = document.myform.elements[i];

		// if a radio button
		if (myElement.type == 'radio') {        
			var group = myElement.name.substring(0, 1);
			var item = myElement.name.substring(1,2);
			if (myElement.name != prevElement) {
				++overallItems;
				++categoryItems[group];
				prevElement = myElement.name
			}
	               
	               if (myElement.checked) {
	                       ++overallSelected;
	                       ++categorySelected[group];
	                       var choice = myElement.value;
	                       var choiceVal = eval(choice);
	                       categoryTotal[group] = categoryTotal[group] + choiceVal;
	                       overallTotal = overallTotal + choiceVal
	               }
	       }
	}
	
	/* Compute category total and percent scores  */
	var totalPossible = 0.0;
	for (i=0; i < noCategories; ++i) {
	       group = categories[i];
	       if (categoryItems[group] == categorySelected[group]) {
			catTot = eval (categoryTotal[group]);
			noCat = categoryItems[group];
			if (itemType == 'Likert') {possible = noCat * 5.0}
			else {possible = noCat};
			totalPossible = totalPossible + possible;
			catPC = catTot * 100 / possible;
			setCategoryTotal = 'document.myform.' + group + 'total.value = catTot';
			setCategoryPC = 'document.myform.' + group + 'pc.value = catPC';
			eval (setCategoryTotal);
			eval (setCategoryPC);
	       } else {
			setCategoryTotal = 'document.myform.' + group + 'total.value = " "';
			setCategoryPC = 'document.myform.' + group + 'pc.value = " "';
			eval (setCategoryTotal);
			eval (setCategoryPC);
		}
	}

	/* Display overall score and percent score only if all items have been selected */
	var opc = overallTotal * 100 / totalPossible;
	if (overallItems == overallSelected) {
		document.myform.ototal.value = eval(overallTotal);
		document.myform.opc.value = eval (opc);
	} else {
		document.myform.ototal.value = "";
		document.myform.opc.value = "";
	}      
}

/* Respond to button Score button with a response */
function ShowResponse () {
	var scoreField = document.myform.ototal.value;
	if (scoreField != '') {
		var score = parseInt (scoreField);
		var inRange = 0;
		for (i=0; i < noResponses; ++i) {if (score >= floorScores[i]) inRange = i };
		$('ResponseText').set ('text', responses[inRange]);
		$('ResponsePS').setStyle ('visibility', 'visible');
		return;
	}
	$('ResponseText').set ('text', 'Oops, you have not answered all the questions. Please scroll up, complete all the questions and try again.');
	return;
}


window.addEvent ('domready',function() {
	InitForm ();
	});



