function add_question ()
{
	questions++;

	// ##### CREATE QUESTION ROW #####
	var question_row = document.createElement ("tr");
	question_row.setAttribute ("id", "question_tr_" + questions);
	question_row.ondblclick = function ()
	{
		remove_question ("question_tr_" + questions);
	}

	// ##### CREATE QUESTION LABEL #####
	var question_label_td = document.createElement ("td");
	var question_label = document.createElement ("label");
	question_label.setAttribute ("for", "question_" + questions);
	question_label.innerHTML = questions + ".";
	question_label_td.appendChild(question_label);

	// ##### CREATE QUESTION INPUT #####
	var question_input_td = document.createElement ("td");
	var question_input = document.createElement ("input");
	question_input.setAttribute ("type", "text");
	question_input.setAttribute ("name", "question[" + questions + "]");
	question_input.setAttribute ("id", "question_" + questions);
	question_input.setAttribute ("class", "heading");
	question_input_td.appendChild(question_input);

	// ##### ADD COLUMNS TO QUESTION ROW #####
	question_row.appendChild (question_label_td);
	question_row.appendChild (question_input_td);

	// ##### ADD QUESTION ROW TO TABLE #####
	get_object ('questions').appendChild (question_row);

	// ##### ADD OPTIONS #####
	var options_row = document.createElement ("tr");
	options_row.setAttribute ("id", "options_tr_" + questions);

	// ##### CREATE OPTIONS TD #####
	var options_td = document.createElement ("td");
	options_td.setAttribute ("colspan", "2");
	var options_table = document.createElement ("table");

	// ##### ADD OPTIONS #####
	add_option (options_table, 'a');
	add_option (options_table, 'b');
	add_option (options_table, 'c');
	add_option (options_table, 'd');
	add_option (options_table, 'e');
	add_option (options_table, 'f');

	// ##### ADD OPTIONS TO TD AND TABLE #####
	options_td.appendChild (options_table);
	options_row.appendChild (options_td);

	// ##### ADD OPTIONS TO TABLE #####
	get_object ('questions').appendChild (options_row);

	return true;
}

function add_option (add_to, option)
{
	// ##### CREATE OPTION ROW #####
	var option_row = document.createElement ("tr");

	// ##### CREATE OPTION LABEL TD  #####
	var option_label_td = document.createElement ("td");
	option_label_td.setAttribute ("align", "right");

	// ##### CREATE QUESTION LABEL #####
	var option_label = document.createElement ("label");
	option_label.setAttribute ("for", "option_" + questions + '_' + option);
	option_label.innerHTML = option + '.';
	option_label_td.appendChild(option_label);

	// ##### CREATE OPTION INPUT TD #####
	var option_input_td = document.createElement ("td");
	
	// ##### CREATE OPTION INPUT #####
	var option_input = document.createElement ("input");
	option_input.setAttribute ("type", "text");
	option_input.setAttribute ("style", "width: 70%");
	option_input.setAttribute ("name", "options[" + questions + "][" + option + "]");
	option_input.setAttribute ("id", "option_" + questions + "_" + option);
	option_input.setAttribute ("onkeyup", "enable_answer('" + questions + "', '" + option + "');");

	// ##### CREATE OPTION RADIO #####
	var option_radio = document.createElement ("input");
	option_radio.setAttribute ("type", "radio");
	option_radio.setAttribute ("name", "answers[" + questions + "]");
	option_radio.setAttribute ("value", option);
	option_radio.setAttribute ("id", "answer_" + questions + "_" + option);
	option_radio.setAttribute ("disabled", "true");

	// ##### ADD TO TD #####
	option_input_td.appendChild (option_input);
	var space = document.createTextNode (" ");
	option_input_td.appendChild (space);
	option_input_td.appendChild (option_radio);

	// ##### ADD TO ROW #####
	option_row.appendChild (option_label_td);
	option_row.appendChild (option_input_td);

	// ##### ADD TO TABLE #####
	add_to.appendChild (option_row);
}

function remove_question (row_id)
{
	input_row = get_object (row_id);
	options_row_split = row_id.split ("_");
	options_row = get_object ("options_tr_" + options_row_split[2]);
	remove_node (input_row);
	remove_node (options_row);
	questions--;
}

function remove_node (node)
{
	node.parentNode.removeChild(node);
}

function check_test ()
{
	var description = get_object ('description');
	if (description.value == '')
	{
		description.style.background = "#aa0000";
		alert ('You must enter a description.');
		return false;
	}
	else
	{
		description.style.background = "#545";
	}

	if (check_questions () == false)
	{
		alert ('You must complete each question.');
		return false;
	}

	if (check_options () == false)
	{
		alert ('You must complete at least two options for each question.');
		return false;
	}

	if (check_answers () == false)
	{
		alert ('You must select an answer for each question.');
		return false;
	}
}

function check_questions ()
{
	// ##### CHECK QUESTIONS FOR EMPTY VALUES #####
	var completed = true;
	for (var counter = 1; counter <= questions; ++counter)
	{
		var question = get_object ('question_' + counter);
		if (question.value == '')
		{
			question.style.background = "#aa0000";
			completed = false;
		}
		else
		{
			question.style.background = '#323';
		}
	}
	return completed;
}

function check_options ()
{
	// ##### CHECK OPTIONS FOR EMPTY VALUES #####
	var completed_all = true;
	for (var counter = 1; counter <= questions; ++counter)
	{
		var completed = false;
		var option_count = 0;
		for (var letters = 65; letters <= 70; ++letters)
		{
			var letter = String.toLowerCase(String.fromCharCode(letters));
			option = get_object ('option_' + counter + '_' + letter);
			if (option.value != '')
			{
				completed = true;
				option_count++;
			}
		}
		if (option_count < 2)
		{
			completed = false;
		}
		if (completed == false)
		{
			completed_all = false;
			get_object ('option_' + counter + '_a').style.background = "#aa0000";
		}
		else
		{
			get_object ('option_' + counter + '_a').style.background = '#545';
		}
	}
	return completed_all;
}

function check_answers ()
{
	// ##### CHECK OPTIONS FOR EMPTY VALUES #####
	var completed_all = true;
	for (var counter = 1; counter <= questions; ++counter)
	{
		var completed = false;
		for (var letters = 65; letters <= 70; ++letters)
		{
			var letter = String.toLowerCase(String.fromCharCode(letters));
			answer = get_object ('answer_' + counter + '_' + letter);
			if (answer.checked)
			{
				completed = true;
			}
		}
		if (completed == false)
		{
			completed_all = false;
			get_object ('option_' + counter + '_a').style.background = "#aa0000;";
		}
		else
		{
			get_object ('option_' + counter + '_a').style.background = '#545';
		}
	}
	return completed_all;
}

function enable_answer (question, letter)
{
	if (get_object ('option_' + question + '_' + letter).value == '')
	{
		answer = get_object ('answer_' + question + '_' + letter);
		answer.disabled = true;
		answer.checked = false;
	}
	else
	{
		get_object ('answer_' + question + '_' + letter).disabled = false;
	}
}

window.onload = function()
{
	get_object('plusquestion').onclick = function()
	{
		add_question();
	}
}
