/*

	Copyright Boy van Amstel
	http://www.boyvanamstel.nl

*/

jQuery.fn.formHandler = function(url, email) {

	var _this = this;
	
	// Emailadresveld
	if(email != undefined) var emailfield = $(_this).find("[name=" + email + "]")
	else var emailfield = "";
	
	// Formulier niet via HTTP versturen
	$(_this).find(":submit").click(function() {
		return false;
	});

	// Resetknop afhandelen
	$(_this).find(":reset").click(function() {
		if(!confirm("Formulier leegmaken?")) return false;										
	});

	// Formulier afhandelen
	$(_this).find(":submit").click(function() {
	
		// Emailadres instellen
		if(email != undefined) var emailaddress = $(_this).find("[name=" + email + "]").val();
		else var emailaddress = "";
		
		// Form elementen
		var elements = $(_this).serialize();
		
		// Berichtenvakje
		var messagebox = $(_this).find(".form_message");
		messagebox.removeClass("message_success");
		messagebox.removeClass("message_error");
		messagebox.html("");
		
		// Verplichte velden bepalen
		var mandatory = new Array();
		$(_this).find(".mandatory").each(function(i) {
			$(this).removeClass("form_error");
			mandatory[i] = this.name;
		});
		
		// Formulier inactief maken
		$(_this).find(":enabled").attr("disabled","disabled");

		// Data versturen
		$.post(url, { "email": emailaddress, "mandatory":mandatory.join(","), "fields":elements }, function(data) {
			
			// Formulier weer actief maken
			$(_this).find(":disabled").removeAttr("disabled");
			
			// Actie ondernemen op basis van de returncode
			switch(data.email.code) {
				// Gelukt
				case 0:
					messagebox.addClass("message_success");
					clearForm();
				break;
				// Velden zijn niet allemaal ingevuld
				case 1:
					for(var i = 0; i < data.email.missing.length; i++) {
						var veld = data.email.missing[i];
						$(_this).find("[name=" + veld + "]").addClass("form_error");
					}
					/*
					data.email.missing.each(function(veld) {
													 //alert(veld);
					});
					*/
					messagebox.addClass("message_error");
				break;
				// Ongeldig emailadres
				case 2:
					emailfield.addClass("form_error");
					messagebox.addClass("message_error");
				break;
				// Anders
				default:
					messagebox.addClass("message_error");
				break;
			}
			messagebox.html(data.email.message);
			
		}, "json");
		
	});
	
	function clearForm() {
		
		$(_this).find(":text, :password").val("");
		$(_this).find(":checkbox").removeAttr("checked");
		$(_this).find("textarea").val("");
		
	}
	
};
