
function Form() {
	var self = this;

	this.id = null;
	this.url = null;
	
	this.valid = false;
	this.message = {}

	this.getFormValues = function() {
		var data = {}
		$("#"+this.id).find("input[type=text][name],input[type=password][name],input[type=hidden][name],input[type=file][name],input[type=radio][name]:checked,input[type=checkbox][name]:checked,select[name],textarea[name]").each(function() {
			data[$(this).attr("name")] = $(this).val();
		});
		
		return data;
	}

	this.displayErrorMessages = function(data) {
		for (var id in this.message) {
			$("#"+id+"_message").html("&nbsp;");
			$('#'+id).removeClass('formfieldline');
		}	
		if (data.form.fields) {
			for (var id in data.form.fields) {
				$('#'+id).addClass('formfieldline');
				$("#"+id+"_message").html(data.form.fields[id].message);
				
				if (data.form.fields[id].message_timeout) {
					clearTimeout(self.message[id]);
					this.message[id] = setTimeout('$("#'+id+'_message").html("&nbsp;")', data.form.fields[id].message_timeout);
					this.message[id] = setTimeout('$("#'+id+'").removeClass("formfieldline");', data.form.fields[id].message_timeout);
				} else {
					this.message[id] = false;
				}
			}
		}
		$("#"+this.id+"_message").html(data.form.message);
		if (data.form.message_timeout) {
			clearTimeout(self.message.form);
			this.message.form = setTimeout('$("#'+self.id+'_message").html("&nbsp;")', data.form.message_timeout);
		}
	}
	
	this.validate = function() {
		$.ajax({
			url: this.url+'/format/json',
			dataType: 'json',
			type: 'post',
			data: $.param(this.getFormValues()),
			success: function(data) {
//				alert ( data.form.valid );
				self.displayErrorMessages(data);
				self.valid = data.form.valid;
				if (self.valid) {
					if (data.form.submit_timeout) {
						$("#"+self.id).find("input[name]").attr("disabled","true");
						clearTimeout(self.message.submit);
						self.message.submit = setTimeout('$("#'+self.id+'").submit()', data.form.submit_timeout);
					} else {
						$("#"+self.id).submit();
					}
				}
			},
			error: function() {
				alert('De verbindingen met de server is mislukt. Probeert u het later nog eens. Onze excuses voor het ongemak.');
			}
		});
	}
	
	this.setFormSubmit = function() {
		$("#"+this.id).submit(function(e) {
			if (!self.valid) {
				self.validate();
				e.preventDefault();
			}
		});
	}
	
	this.init = function(id, url) {
		this.id = id;
		this.url = url;
		this.setFormSubmit();
	}

}



