function randomInt(lower, upper) {
	return Math.floor(Math.random() * upper + lower);
}

function Checker(questionFieldName, answerFieldName, otherFields) {
	var m = 0;
	var n = 0;
	
	var answerField = $("input[name='" + answerFieldName + "']");
	var answer_error = $("#" + answerFieldName + "-error");
	var fields = otherFields.map(function (e) {
		return { field: $("input[name='" + e + "']"), field_error: $("#" + e + "-error") };
	});
	
	this.checkInput = function() {
		var clean = true;
		
		jQuery.each($(".error"), function () {
			$(this).text("");
		});
		
		fields.forEach(function (e) {
			if (e.field.val() == '')
				{
					e.field_error.text("Campul este gol");
					clean = false;
				}
		});
		
		if (!answerField.val().match(/^\d+$/))
		{
			answer_error.text("Raspuns gresit");
			return false;
		}
		
		return clean;
	}
	
	this.generateQuestion = function() {
		m = randomInt(1, 13);
		n = randomInt(1, 17);
		$("input[name='m']").val(m);
		$("input[name='n']").val(n);
		
		$("#" + questionFieldName).text("cat face " + m + " + " + n + "? ");
	}
}

$(document).ready(function() {
	installArrayExtensions();
	
	var checker = new Checker('question', 'answer', [ 'id' ]);
	
	checker.generateQuestion();
	
	$("#submit").click(function() {
		if (!checker.checkInput())
			return;
		
		$.post("counter.php", 
			   { "id": $("input[name='id']").val(), "mail": $("input[name='mail']").val(),
				 "n": $("input[name='n']").val(), "m": $("input[name='m']").val(),
				 "answer": $("input[name='answer']").val() },
			   function (answer) {
					checker.generateQuestion();
					if (answer.type == "system_error" || answer.type == "notification")
						$("#message").text(answer.message).fadeIn(500).fadeOut(2500);
					else if (answer.type == "simple_error")
						$("#" + answer.irritant + "-error").text(answer.message);
			   }, "json");
	});
});