(function ($) {
	$.fn.extend({
		send: function (options) {
			var complete = options.complete,
			success = options.success,
			error = options.error;
			
			return this.each(function (index, formDom) {
				var formJq = $(formDom),
				xhr;
				
				formJq
					.bind("submit", function (event) {
						event.preventDefault();
						formJq.trigger("send");
					})
					.bind("send", function (event) {
						if (xhr) {
							xhr.abort();
						}
	
						xhr = $.ajax($.extend({
							url: formJq.attr("action") || window.location.href,
							type: formJq.attr("method") || "GET"
						}, options, {
							data: formJq.serialize(),
							complete: function (XMLHttpRequest, textStatus) {
								if ($.isFunction(complete)) {
									complete.call(this, XMLHttpRequest, textStatus);
								}
							},
							success: function (data, textStatus) {
								if ($.isFunction(success)) {
									success.call(this, data, textStatus);
								}
							},
							error: function (XMLHttpRequest, textStatus, errorThrown) {
								if ($.isFunction(error)) {
									error.call(this, XMLHttpRequest, textStatus, errorThrown);
								}
							}
						}));
				});
			});
		}
	});
})(jQuery);