/**
 * AJAX form plugin for jQuery
 *
 * @copyright  Copyright (c) 2009 Jan Kuchař, Copyright (c) 2009 Jan Marek
 * @license    MIT
 * @link       http://addons.nettephp.com/cs/ajax-form-s-eventy
 * @version    0.1
 */

jQuery.fn.extend({
    ajaxSubmit : function (e, callback) {
        var form;
        var sendValues = {};

        if (this.is(":submit")) {
            form = this.parents("form");
            sendValues[this.attr("name")] = this.val() || "";

        } else if (this.is("form")) {
            form = this;

        } else {
            return null;
        }

        e.preventDefault();

        if (form.get(0).onsubmit && !form.get(0).onsubmit()) {
            e.stopImmediatePropagation();
            return null;
        }

        if (form.data("ajaxSubmitCalled") == true) {
			return null;
		}

        form.data("ajaxSubmitCalled", true);

        form.one("submit", function () {
            var values = form.serializeArray();

            for (var i = 0; i < values.length; i++) {
                var name = values[i].name;

                if (name in sendValues) {
                    var val = sendValues[name];

                    if (!(val instanceof Array)) {
                        val = [val];
                    }

                    val.push(values[i].value);
                    sendValues[name] = val;
                } else {
                    sendValues[name] = values[i].value;
                }
            }

            var ajaxOptions = {
                url: form.attr("action"),
                data: sendValues,
                type: form.attr("method") || "get"
            };

            ajaxOptions.complete = function () {
                form.data("ajaxSubmitCalled", false);
            }

            if (callback) {
                ajaxOptions.success = callback;
            }
            return jQuery.ajax(ajaxOptions);
        })

        e.stopImmediatePropagation();
        form.submit();

        return null;
    }
});

$("form[rel=ajax]").live("submit", function (e) {
	$(this).ajaxSubmit(e);
	return false;
});

