(function($)
{
	$.fn.ajaxForm = function(opts)
	{
		// default settings
		var settings = {
			success: ""
		};

		return this.submit(function(event)
		{
			// prevent default submit
			event.preventDefault();

			// get options (if any)
			if(opts)
			{
				$.extend(settings, opts);
			}

			var $this = $(this);
			var options = { submit: 1 };

			// disable the submit button
			var button = $this.find(".button");
			button.attr("disabled", true);

			// fields
			var elements = $this.find("input[type=text], textarea, select");
			for(var i = 0; i < elements.size(); i++)
			{
				var element = $(elements.get(i));
				options[element.attr("name")] = element.val();
			}

			// checkboxes
			var checkboxes = $(this).find("input[type=checkbox]");
			for(var i = 0; i < checkboxes.size(); i++)
			{
				var element = $(checkboxes.get(i));

				// ignore unchecked
				if(!element.attr("checked"))
				{
					continue;
				}

				var name = element.attr("name");
				var pos = name.indexOf("[");

				// check if it belongs to a group
				if(pos != -1)
				{
					name = name.substr(0, pos);

					// first in group
					if(options[name] == undefined)
					{
						options[name] = [ ];
					}

					options[name].push(element.val());
				}
				else
				{
					options[name] = element.val();
				}
			}

			// post data
			$.post($this.attr("action"), options, function()
			{
				// hide form
				$this.fadeOut(300, function()
				{
					// show success
					if(settings.success != "")
					{
						$(settings.success).fadeIn(300);
					}

					// enable the submit button
					button.attr("disabled", false);
				});
			});
		});
	};
})(jQuery);

