/**
 * AJAX Nette Framwork plugin for jQuery
 *
 * @copyright  Copyright (c) 2009 Jan Marek
 * @copyright  Copyright (c) 2009 David Grudl
 * @license    MIT
 * @link       http://nettephp.com/cs/extras/jquery-ajax
 */

/*
if (typeof jQuery != 'function') {
	alert('jQuery was not loaded');
}
*/

(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,
		
		
		
formAction: function(form, event)
{
        if (this.processing > 0) return true;

        this.result = {};

        // create new AJAX request
        this.initAjax();
        if (!this.ajax) return false;

        var sender = document.activeElement || event.explicitOriginalTarget;
        var action = form.action;

        action += (action.indexOf('?') == -1) ? '?' : '&';
        if (typeof(this.state) === 'object') {
                action += this.buildQuery(this.state, '', '');
        }

        // create process indicator
        try {
                var img = document.getElementById(this.spinnerId);
                if (sender && img) {
                        this.spinner = img.cloneNode(true);
                        this.spinner.style.display = 'inline';
                        sender.parentNode.insertBefore(this.spinner, sender.nextSibling);
                }
        } catch (e) {
        }

        try {
                var url = action + '-r=' + Math.random();
                var query = this.buildFormQuery(form, sender);

                this.ajax.open("POST", url, true);
                this.ajax.setRequestHeader("X-Requested-With", "XMLHttpRequest");
                this.ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
                this.ajax.onreadystatechange = function() { nette.ajaxHandler(); }
                this.ajax.send(query);
                this.processing = 1;
                return true;

        } catch (e) {
                return false;
        }
},

buildFormQuery: function(form, sender)
{
        var s = '';
        var amp = '';

        for (var i in form.elements) {
                switch (form.elements[i].tagName) {
                        case 'INPUT':
                                switch (form.elements[i].type) {
                                        case 'text':
                                        case 'password':
                                        case 'hidden':
                                                s += amp + encodeURIComponent(form.elements[i].name) +
                                                        "=" + encodeURIComponent(form.elements[i].value);
                                                break;

                                        case 'checkbox':
                                        case 'radio':
                                                if (form.elements[i].checked)
                                                        s += amp + encodeURIComponent(form.elements[i].name) +
                                                                "=" + encodeURIComponent(form.elements[i].value);
                                                break;
                                }
                                break;

                        case 'TEXTAREA':
                                s += amp + encodeURIComponent(form.elements[i].name) +
                                        "=" + encodeURIComponent(form.elements[i].value);
                                break;

                        case 'SELECT':
                                s += amp + encodeURIComponent(form.elements[i].name) +
                                        "=" + encodeURIComponent(form.elements[i].options[form.elements[i].selectedIndex].value);
                                break;
                }
                amp = '&';
        }

        if (sender != null) {
                s += '&' + encodeURIComponent(sender.name) + '=' + encodeURIComponent(sender.value);
        }

        return s.replace(/%20/g, '+');
}
		
		
		
		
		
	};


})(jQuery);



jQuery(function($) {

	$.ajaxSetup({
		success: $.nette.success,
		dataType: 'json'
	});

	$.nette.createSpinner();

	// apply AJAX unobtrusive way
	$('a.ajax').live('click', function(event) {
		event.preventDefault();
		if ($.active) return;

		$.post(this.href, $.nette.success);

		$.nette.spinner.css({
			position: 'absolute',
			left: event.pageX,
			top: event.pageY
		});
	});

});


