/**
 * AJAX Nette Framwork plugin for jQuery
 *
 * @copyright   Copyright (c) 2009 Jan Marek
 * @license     MIT
 * @link        http://nettephp.com/cs/extras/jquery-ajax
 * @version     0.2
 */

$.extend({
	nette: {
		updateSnippet: function (id, html) {
			$("#" + id).html(html);
		},

		success: function (payload) {
			// redirect
			if (payload.redirect) {
				window.location.href = payload.redirect;
				return;
			}

			// snippets
			if (payload.snippets) {
				for (var i in payload.snippets) {
					$.nette.updateSnippet(i, payload.snippets[i]);
				}
			}
		}
	}
});


/**
 * AJAX form plugin for jQuery
 *
 * @copyright  Copyright (c) 2009 Jan Kuchar, Copyright (c) 2009 Jan Marek
 * @license    MIT
 * @link       http://addons.nette.org/cs/ajax-form-s-eventy
 * @version    0.1
 */

jQuery.fn.extend({
    ajaxSubmit: function (e,callback) {
    	var form;
        var sendValues = {};

        // submit button
        if (this.is(":submit")) {
            form = this.parents("form");
            sendValues[this.attr("name")] = this.val() || "";

        // form
        } else if (this.is("form")) {
            form = this;

        // invalid element, do nothing
        } else {
            return null;
        }

        if (e) e.preventDefault();

        // validation
        if (form.get(0).onsubmit && !form.get(0).onsubmit()) {
            if (e) e.stopImmediatePropagation();
            return null;
        }

        if(form.data("ajaxSubmitCalled")==true)
            return null;

        form.data("ajaxSubmitCalled",true);

        form.one("submit",function(){
            // get values
            var values = form.serializeArray();

            for (var i = 0; i < values.length; i++) {
                var name = values[i].name;

                // multi
                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;
                }
            }

            // send ajax request
            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);
        })

        if (e) e.stopImmediatePropagation();
        form.submit();
        return null;
    }
});

$(function () {
    $("form.ajax").live("submit",function (e) {
        if ($(this).hasClass ('dialog')) $(this).dialog('close');
        $("#ajax-spinner").show().fadeTo ("slow", 0.7);
        $(this).ajaxSubmit(e);
    });

    $("form.ajax :submit").live("click",function (e) {
    	if ($(this).hasClass ('dialog')) $(this).dialog('close');
        $("#ajax-spinner").show().fadeTo ("slow", 0.7);
        $(this).ajaxSubmit(e);
    });
});

$.ajaxSetup({
	success: $.nette.success,
	dataType: "json"
});

$('a.confirm').live ('click', function (e) {
    e.preventDefault();

    if ( confirm (this.title) )
	{
		return true;
	}

	e.stopPropagation();
	return false;
});

$("a.ajax").live("click", function (event) {
	if ( event.isPropagationStopped() ) return;
    event.preventDefault();

    $.get(this.href);

    $("#ajax-spinner").show().fadeTo ("slow", 0.7);
});

$.nette.updateSnippet = function (id, html) {
	if ( id == 'snippet--flashMessages' )
	{
		$("#snippet--flashMessages").slideUp('fast', function () {
	        $(this).html(html).slideDown('slow');
	        window.setTimeout (function () { $("#snippet--flashMessages").slideUp('fast'); }, 5000);
	    });
	}
	else
	{
	    $("#" + id).fadeTo("fast", 0.01, function () {
	        $(this).html(html).fadeTo("fast", 1);
	        $('.dialog').each ( make_dialog );
	    });
	};
};

$(function () {
    $('<div id="ajax-spinner"><div id="ajax-spinner-content"></div></div>').appendTo("body").ajaxStop(function () {
        $(this).fadeTo ("slow", 0, function () {$(this).hide(); });
    }).fadeTo ("slow", 0).hide ();
});

