var RiskProfiler = {
	answerIds: [
		{ prefix: 'rpAnswer0_', length: 3 },
		{ prefix: 'rpAnswer1_', length: 3 },
		{ prefix: 'rpAnswer2_', length: 3 },
		{ prefix: 'rpAnswer3_', length: 3 },
		{ prefix: 'rpAnswer4_', length: 3 },
		{ prefix: 'rpAnswer5_', length: 3 },
		{ prefix: 'rpAnswer6_', length: 3 },
		{ prefix: 'rpAnswer7_', length: 5 }
	],

	errorMessageIds: { prefix: 'rpErrorMessage', length: 8 },

	answers: null,
	errorMessages: null,

	getEls: function (info) {
		var prefix = info.prefix;
		var els = [];
		var i;
		for (i = info.length - 1; i >= 0; i--) {
			els[i] = document.getElementById(prefix + i);
		}
		return els;
	},

	findAnswers: function () {
		var ids, radios, i;
		if (this.answers) {
			return;
		}
		ids = this.answerIds;
		radios = [];
		for (i = ids.length - 1; i >= 0; i--) {
			radios[i] = this.getEls(ids[i]);
		}
		this.answers = radios;
	},

	findErrorMessages: function () {
		if (this.errorMessages) {
			return;
		}
		this.errorMessages = this.getEls(this.errorMessageIds);
	},

	reset: function (btn) {
		var answers, errors, radios, i, j;

		this.findAnswers();
		this.findErrorMessages();

		answers = this.answers;
		errors = this.errorMessages;

		for (i = answers.length - 1; i >= 0; i--) {
			radios = answers[i];
			for (j = radios.length - 1; j >= 0; j--) {
				radios[j].checked = false;
			}
		}

		for (i = errors.length - 1; i >= 0; i--) {
			errors[i].style.display = 'none';
		}

		if (btn.blur) {
			btn.blur();
		}
		return false;
	},

	submit: function (btn) {
		var answers, errors, radios, isChecked, isComplete, totalScore, actualScore, ageScore, prefix, i, j;

		this.findAnswers();
		this.findErrorMessages();

		answers = this.answers;
		errors = this.errorMessages;
		isComplete = true;
		totalScore = 0;

		for (i = answers.length - 1; i >= 0; i--) {
			radios = answers[i];
			isChecked = false;
			for (j = radios.length - 1; j >= 0; j--) {
				if (radios[j].checked) {
					totalScore += parseInt(radios[j].value, 10);
					isChecked = true;
					break;
				}
			}
			if (isChecked) {
				errors[i].style.display = 'none';
			} else {
				errors[i].style.display = 'inline';
				isComplete = false;
			}
		}

		if (btn.blur) {
			btn.blur();
		}

		if (!isComplete) {
			window.scrollTo(0, 0);
			return false;
		}

		actualScore = totalScore % 100;
		ageScore = Math.floor(totalScore / 100);

		if (actualScore <= 8) {
			prefix = '2';
		} else if (actualScore <= 11) {
			prefix = '3';
		} else if (actualScore <= 16) {
			prefix = '4';
		} else if (actualScore <= 19) {
			prefix = '5';
		} else {
			prefix = '6';
		}

		btn.href = prefix + ageScore + '?score=' + actualScore;
		return true;
	}
};
