var rpc_init = 0;
var rpc_responded = 0;

function submitSurvey()
{
	true_false = document.getElementsByClassName("INPUT", "survey-true-false");
	short_answers = document.getElementsByClassName("INPUT", "survey-short-answer");
	essays = document.getElementsByClassName("TEXTAREA", "survey-essay");
	radios = document.getElementsByClassName("INPUT", "survey-multiple-choice-radio");
	checks = document.getElementsByClassName("INPUT", "survey-multiple-choice-check");
	grids = document.getElementsByClassName("INPUT", "survey-grid");
	percents = document.getElementsByClassName("INPUT", "percentages");
	selects = $$("select.survey-multiple-choice-list");
	/************************ DO REQUIRED FIELD VALIDATION ******************************/

	var _required = new Array();
	_required_items = document.getElementsByName("_required");
	if(_required_items.length)
	{
		_required = _required_items[0].value.split(",");
	}

	var blank = new Array();

	/* short answers */

	for(var i = 0; i < short_answers.length; i++)
	{
		if(in_array(short_answers[i].id, _required) && !short_answers[i].value)
		{
			div1 = short_answers[i].parentNode;
			div2 = div1.parentNode;
			label = get_label(div2);
			if(label && !in_array(label, blank)) blank[blank.length] = label;
		}
	}

	/* essays */

	for(var i = 0; i < essays.length; i++)
	{
		if(in_array(essays[i].id, _required) && !essays[i].value)
		{
			div1 = essays[i].parentNode;
			div2 = div1.parentNode;
			label = get_label(div2);
			if(label && !in_array(label, blank)) blank[blank.length] = label;
		}
	}

	/* radios */
	radio_groups = document.getElementsByClassName("FIELDSET", "multiple-choice-fieldset");
	for( var i = 0; i < radio_groups.length; i++ )
	{
		this_group_radio_objects = radio_groups[i].getElementsByTagName( "INPUT" );
		if( this_group_radio_objects.length <= 0 )
			continue;

		var group_ok = false;
		var considered = 0;
		for( var j = 0; j < this_group_radio_objects.length; j++ )
		{
			if( this_group_radio_objects[j].getAttribute( "type" ) != "radio" )
				continue;
			if( !in_array( this_group_radio_objects[j].getAttribute( "name" ), _required) )
				continue;

			considered++;
			if( this_group_radio_objects[j].checked )
			{
				group_ok = true;
				break;
			}
		}
		if( considered > 0 && !group_ok )
		{
			label = get_label( radio_groups[i].parentNode.parentNode );
			if( label && !in_array(label,blank) )
				blank[blank.length] = label;
		}

	}

	/* check boxes */

	hold = "";
	hold_ok = false;
	i = 0;

	for(i = 0; i < checks.length; i++)
	{
		checks_arr = checks[i].id.split("-");
		question_id = checks_arr[0];

		if(!in_array(question_id, _required))
		{
			hold = "";
			continue;
		}

		if(hold == question_id)
		{
			hold_ok = hold_ok ? true : (checks[i].checked ? true : false);
			continue;
		}
		else
		{
			if(hold != "" && !hold_ok)
			{
				fieldset = HTMLElement_firstParentOf(checks[i - 1], "FIELDSET");
				div1 = fieldset.parentNode;
				div2 = div1.parentNode;
				label = get_label(div2);
				if(label && !in_array(label, blank)) blank[blank.length] = label;
			}
		}

		hold = question_id;
		hold_ok = checks[i].checked ? true : false;
	}

	if(hold != "" && !hold_ok)
	{
		fieldset = HTMLElement_firstParentOf(checks[i - 1], "FIELDSET");
		div1 = fieldset.parentNode;
		div2 = div1.parentNode;
		label = get_label(div2);

		if(label && !in_array(label, blank)) blank[blank.length] = label;
	}

	/* percentages */

	hold = "";
	for(var i = 0; i < percents.length; i++)
	{
		percents_arr = percents[i].id.split("-");
		question_id = percents_arr[0];

		if(hold == question_id) continue;

		if(!in_array(question_id, _required)) continue;

		hold = question_id;
		total = document.getElementById("percentage_total_" + question_id).innerHTML;

		//alert("total: " + total);

		if(total != "100")
		{
			td1 = percents[i].parentNode;
			tr1 = td1.parentNode;
			tbody = tr1.parentNode;
			table1 = tbody.parentNode;
			div1 = table1.parentNode;
			div2 = div1.parentNode;
			label = get_label(div2);
			if(label && !in_array(label, blank)) blank[blank.length] = label;
		}
	}

	/* grid */

	hold = ""; // question_id
	sub_hold = ""; // sub_question_id
	hold_ok = false;
	i = 0;
	skip_question_id = ""; // if one of the sub questions is false, then we can skip all the rest safely

	for(i = 0; i < grids.length; i++)
	{
		grid_arr = grids[i].id.split("-");
		question_id = grid_arr[0];
		sub_question_id = grid_arr[1];

		if(!in_array(question_id, _required))
		{
			hold = "";
			continue;
		}

		if(hold == question_id)
		{
			if(question_id == skip_question_id) continue;

			if(sub_hold == sub_question_id)
			{
				hold_ok = hold_ok ? true : (grids[i].checked ? true : false);
				continue;
			}
			else
			{
				if(!hold_ok)
				{
					td1 = grids[i - 1].parentNode;
					tr1 = td1.parentNode;
					table1 = tr1.parentNode;
					div1 = table1.parentNode;
					div2 = div1.parentNode;
					div3 = div2.parentNode;

					label = get_label(div3);

					if(label && !in_array(label, blank)) blank[blank.length] = label;
					skip_question_id = question_id;
					continue;
				}
			}
		}
		else
		{
			skip_question_id = ""; // new question

			if(hold != "" && !hold_ok)
			{
				td1 = grids[i - 1].parentNode;
				tr1 = td1.parentNode;
				table1 = tr1.parentNode;
				div1 = table1.parentNode;
				div2 = div1.parentNode;
				div3 = div2.parentNode;

				label = get_label(div3);

				if(label && !in_array(label, blank)) blank[blank.length] = label;
			}
		}

		hold = question_id;
		sub_hold = sub_question_id;
		hold_ok = grids[i].checked ? true : false;
	}

	if(hold != "" && !hold_ok)
	{
		td1 = grids[i - 1].parentNode;
		tr1 = td1.parentNode;
		table1 = tr1.parentNode;
		div1 = table1.parentNode;
		div2 = div1.parentNode;
		div3 = div2.parentNode;

		label = get_label(div3);

		if(label && !in_array(label, blank)) blank[blank.length] = label;
	}

	/* build the blank array... if empty, then ok. */

	if(blank.length)
	{
		var blank_string = "";
		for(var i = 0; i < blank.length; i++)
			blank_string += "\n* " + blank[i];

		alert("Please fill in the following fields: " + blank_string);

		return;
	}

	/*********************** DO DHTML *************************/

	if($("pre-test-post-test-"+$('survey-id').innerHTML).innerHTML!=0){
		$("pre-test-post-test-results-"+$('survey-id').innerHTML).innerHTML = '<img src="/images/spinner.gif"> Loading Test Results...';
	}

	var rpc = new RPC();
	for(var i = 0; i < true_false.length; i++)
	{
		if(true_false[i].checked)
		{
			rpc.addField(true_false[i].id, true_false[i].value);
		}
	}
	if(rpc.numFields())
	{
		rpc_init++;
		rpc.onLoad = function() { rpc_responded++; }
		rpc.post("/rpc/survey-true-false.rpc/");
	}


	var rpc = new RPC();
	for(var i = 0; i < short_answers.length; i++)
	{
		rpc.addField(short_answers[i].id, short_answers[i].value);
	}
	if(rpc.numFields())
	{
		rpc_init++;
		rpc.onLoad = function() { rpc_responded++; }
		rpc.post("/rpc/survey-short-answer.rpc/");
	}

	var rpc = new RPC();
	for(var i = 0; i < essays.length; i++)
	{
		rpc.addField(essays[i].id, essays[i].value);
	}
	if(rpc.numFields())
	{
		rpc_init++;
		rpc.onLoad = function() { rpc_responded++; }
		rpc.post("/rpc/survey-essay.rpc/");
	}

	var rpc = new RPC();
	for(var i = 0; i < radios.length; i++)
	{
		if(radios[i].checked)
		{
			rpc.addField(radios[i].id, radios[i].value);
		}
	}
	if(rpc.numFields())
	{
		rpc_init++;
		rpc.onLoad = function() { rpc_responded++; }
		rpc.post("/rpc/survey-multiple-choice-radio.rpc/");
	}

	var rpc = new RPC();
	for(var i = 0; i < selects.length; i++)
	{
		rpc.addField(selects[i].id, "" + $F(selects[i].id) + "");
	}
	if(rpc.numFields())
	{
		rpc_init++;
		rpc.onLoad = function() { rpc_responded++; }
		rpc.post("/rpc/survey-multiple-choice-list.rpc/");
	}

	var rpc = new RPC();
	for(var i = 0; i < checks.length; i++)
	{
		if(checks[i].checked)
			rpc.addField(checks[i].id, checks[i].value);
	}
	if(rpc.numFields())
	{
		rpc_init++;
		rpc.onLoad = function() { rpc_responded++; }
		rpc.post("/rpc/survey-multiple-choice-check.rpc/");
	}

	var rpc = new RPC();
	for(var i = 0; i < grids.length; i++)
	{
		if(grids[i].checked)
			rpc.addField(grids[i].id, grids[i].value);
	}
	if(rpc.numFields())
	{
		rpc_init++;
		rpc.onLoad = function() { rpc_responded++; }
		rpc.post("/rpc/survey-grid.rpc/");
	}

	var rpc = new RPC();
	for(var i = 0; i < percents.length; i++)
	{
		rpc.addField(percents[i].id, percents[i].value);
	}
	if(rpc.numFields())
	{
		rpc_init++;
		rpc.onLoad = function() { rpc_responded++; }
		rpc.post("/rpc/survey-percentages.rpc/");
	}


	/* we can allow any custom survey treatment (like email a professor, etc) by providing this extension */

	if(window.submitSurveyExtended)
	{
		submitSurveyExtended();
	}

	sub_text = document.getElementById("submission-text");
	document.getElementById("survey").innerHTML = sub_text ? sub_text.innerHTML : "Thank you for submitting your answers.";

	if($("pre-test-post-test-"+$('survey-id').innerHTML) !=0) {
		//setTimeout("pre_test_post_test('"+$('survey-id').innerHTML+"')", 3000);
		//pre_test_post_test(survey_id);
		setTimeout( 'pre_test_post_test(' + $('survey-id').innerHTML + ')', 10000 );
	}
}

function in_array(needle, haystack)
{
	for(var i = 0; i < haystack.length; i++)
		if(needle == haystack[i]) return true;

	return false;
}

function get_label(div)
{
	var labels = div.getElementsByTagName("DIV")[0].getElementsByTagName("LABEL");
	return labels[0].firstChild.nodeValue;

	return false;
}

function pre_test_post_test(survey_id){
	var rpc = new RPC();
	rpc.onLoad = function(status, html)
	{
		$("pre-test-post-test-results-"+survey_id).innerHTML = html;

	}
	rpc.addField('config_id', $("pre-test-post-test-"+survey_id).innerHTML);
	rpc.addField('survey_id', survey_id);
	rpc.post("/rpc/get-pre-test-post-test-results.rpc");
}