/**
 * AJAX Nette Framwork plugin for jQuery
 *
 * @copyright  Copyright (c) 2009, 2010 Jan Marek
 * @copyright  Copyright (c) 2009, 2010 David Grudl
 * @license    MIT
 * @link       http://nettephp.com/cs/extras/jquery-ajax
 */

(function($) {
    $.nette = {
        success: function(payload)
        {
            // redirect
            if (payload.redirect) {
                window.location.href = payload.redirect;
                return;
            }
            // state
            if (payload.state) {
                $.nette.state = payload.state;
            }
            // snippets
            if (payload.snippets) {
                for (var i in payload.snippets) {
                    $.nette.updateSnippet(i, payload.snippets[i]);
                }
            }
        },
        updateSnippet: function(id, html)
        {
            $('#' + id).html(html);
        },
        // create animated spinner
        createSpinner: function(id)
        {
            return this.spinner = $('<div></div>').attr('id', id ? id : 'ajax-spinner').ajaxStart(function() {
                $(this).show();
            }).ajaxStop(function() {
                $(this).hide().css({
                    position: 'fixed',
                    left: '50%',
                    top: '50%'
                });

            }).appendTo('body').hide();
        },
        // current page state
        state: null,
        // spinner element
        spinner: null
    };

})(jQuery);

jQuery(function($) {
    $.ajaxSetup({
        success: $.nette.success,
        error: function(a, b, c) {alert(b)},
        dataType: 'json'
    });
    $.nette.createSpinner();
    // apply AJAX unobtrusive way
    $('a.ajax').live('click', function(event) {
        event.preventDefault();
        //if ($.active) return;

        $.nette.link = true;

        $.get(this.href, $.nette.success);

        $.nette.link = false;

        $.nette.spinner.css({
            position: 'absolute',
            left: event.pageX,
            top: event.pageY
        });
    });
});

