
function formAjax(form_name) {

	var form = $('#'+form_name);
	form.submit(function(){
		var data = formData(form_name);
		
		$.ajax({
		      url: form.attr('action'),
		      type: "POST",
		      cache: false,
		      data: data,
		      dataType: "json",
		      success: function(data){
				if (data[0] == 0) {
					// General Error
					alert (data[1]);
				} else if (data[0] == 1) {
					// Field Error
					formError(form_name,data[1],data[2]);	
				} else {
					// Success redirect
					window.location.href = data[1];
				}
		      }
		   }
		);

		return false;	
	});
		
}

function formData(form_name){
	
	var data = {};

	var form = $('#'+form_name);

	form.find('input,textarea,select').each(function() {
		var name;
		if (name = $(this).attr('name')){
			
			var val= "";
			if ($(this).attr('type') == "checkbox" || $(this).attr('type') == "radio") {
				if ($(this).attr('checked')){
					val = $(this).val();
				} else 
					val = 0;

			} else
				val = $(this).val();
			
			// check if array
			
			if (name.substr(name.length - 2) == "[]") {
				
				name = name.substr(0, name.length - 2);
				if (!data.hasOwnProperty(name)) {
					data[name] = [val];
				} else {
					data[name].push(val);
				}
			} else
				data[name] = val;

		}
	});
	
	return data;
}

function formError(form_name, field, error) {
	var form = $('#'+form_name);
	
	// Clear all previous errors_fields and errors
	form.find('.error_field').removeClass('error_field');
	form.find('.error').remove();
	form.find('#field_'+field).addClass('error_field').prepend('<div class="error">'+error+'</div>');
	
}
