add_DOM_onLoad(
	function()
	{
		radios = $$(".survey-multiple-choice-radio");
		if(!radios) return;

		for(var i = 0; i < radios.length; i++)
		{
			radios[i].checked = false;
			radios[i].defaultChecked = false;
			radios[i].setAttribute("checked",false);
		}
	}
);

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");
	*/

	true_false = $$('input.survey-true-false');
	short_answers = $$('input.survey-short-answer');
	essays = $$('textarea.survey-essay');
	radios = $$('input.survey-multiple-choice-radio');
	checks = $$('input.survey-multiple-choice-check');
	grids = $$('input.survey-grid');
	percents = $$('input.percentages');
	
	/************************ DO REQUIRED FIELD VALIDATION ******************************/

	var _required = new Array();
	_required_items = $$("._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 boxes */

	hold = "";
	hold_ok = false;
	i = 0;

	for(i = 0; i < radios.length; i++)
	{
		radios_arr = radios[i].id.split("-");
		question_id = radios_arr[0];

		if(!in_array(question_id, _required))
		{
			hold = "";
			continue;
		}

		if(hold == question_id)
		{
			hold_ok = hold_ok ? true : (radios[i].checked ? true : false);
			continue;
		}
		else
		{
			if(hold != "" && !hold_ok)
			{
				fieldset = HTMLElement_firstParentOf(radios[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 = radios[i].checked ? true : false;
	}

	if(hold != "" && !hold_ok)
	{
		fieldset = HTMLElement_firstParentOf(radios[i - 1], "FIELDSET");
		div1 = fieldset.parentNode;
		div2 = div1.parentNode;
		label = get_label(div2);

		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 = $("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;

			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 *************************/

	// NOTE:  ma/ph temp edit... must be fixed
	var p_truefalse = false;
	var p_shortanswers = false;
	var p_essays = false;
	var p_radios = false;
	var p_checks = false;
	var p_grids = false;
	var p_percents = false;

	var rpc = new RPC();
	for(var i = 0; i < true_false.length; i++)
	{		
		if(true_false[i].checked)
		{
			p_truefalse = true;
			rpc.addField(true_false[i].id, true_false[i].value);
		}
	}
	//if(rpc.numFields()) NOTE: ma replaced with p_
	if(p_truefalse)
	{
		rpc.post("/rpc/survey-true-false.rpc/");
	}

	var rpc = new RPC();
	for(var i = 0; i < short_answers.length; i++)
	{
		p_shortanswers = true;
		rpc.addField(short_answers[i].id, short_answers[i].value);	
	}
	if(p_shortanswers)
	{
		rpc.post("/rpc/survey-short-answer.rpc/");
	}

	var rpc = new RPC();
	for(var i = 0; i < essays.length; i++)
	{
		p_essays = true;
		rpc.addField(essays[i].id, essays[i].value);
	}
	if(p_essays)
	{
		rpc.post("/rpc/survey-essay.rpc/");
	}

	var rpc = new RPC();
	for(var i = 0; i < radios.length; i++)
	{
		if(radios[i].checked)
		{
			p_radios = true;
			rpc.addField(radios[i].id, radios[i].value);
		}
	}
	if(p_radios)
	{
		rpc.post("/rpc/survey-multiple-choice-radio.rpc/");
	}

	var rpc = new RPC();
	for(var i = 0; i < checks.length; i++)
	{
		if(checks[i].checked)
		{
			p_checks = true;
			rpc.addField(checks[i].id, checks[i].value);
		}
	}
	if(p_checks)
	{
		rpc.post("/rpc/survey-multiple-choice-check.rpc/");
	}

	var rpc = new RPC();
	for(var i = 0; i < grids.length; i++)
	{
		if(grids[i].checked)
		{
			p_grids = true;
			rpc.addField(grids[i].id, grids[i].value);
		}
	}
	if(p_grids)
	{
		rpc.post("/rpc/survey-grid.rpc/");
	}

	var rpc = new RPC();
	for(var i = 0; i < percents.length; i++)
	{
		var p_percents = true;
		rpc.addField(percents[i].id, percents[i].value);
	}
	if(p_percents)
	{
		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 = $("submission-text");
	$("survey").innerHTML = sub_text ? sub_text.innerHTML : "Thank you for submitting your answers.";

	var rpc = new RPC();
	rpc.addField('survey_id', $("survey-id").innerHTML);
	rpc.post("/rpc/survey-answered.rpc");
}

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;
}
