/**
 * 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
 */

/*
if (typeof jQuery != 'function') {
	alert('jQuery was not loaded');
}
*/

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]);
				}
			}

			if (payload.events) {
				for (var id in payload.events) {
					jQuery.handleEvent(payload.events[id]);
				}
			}

			if (payload.prompt) {
				var args = payload.prompt[1];

				if (typeof args['callback'] != 'undefined') {
					args['callback'] = eval(args['callback']);
				}

				$.prompt(payload.prompt[0], args);
			}

		},

		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();
		},

		linkParams : function(link, params) {
			return link.replace(/%23%23%23/, params);
		},

		// current page state
		state: null,

		// spinner element
		spinner: null
	};


})(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
		});
	});
	$("form.ajax").live('submit', function (event) {
		event.preventDefault();
		if ($.active) return;

		var form;
		var sendValues = {};

		// odesláno na tlačítku
		if ($(this).is(":submit")) {
			form = $(this).parents("form");
			sendValues[$(this).attr("name")] = $(this).val() || "";

		// odesláno na formuláři
		} else if ($(this).is("form")) {
				form = $(this);

		// neplatný element, nic nedělat
		} else {
				return null;
		}

		// validace
		//if (form.get(0).onsubmit && !form.get(0).onsubmit()) return;

		var href = form.attr("action");
		var values = form.serializeArray();

		for (var i = 0; i < values.length; i++) {
			//var newValue = {};
			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 {
				href = href + "&" + name + "=" + values[i].value;
//					sendValues[name] = values[i].value;
			}
		}

		// odeslat ajaxový požadavek
		$.post(href, $.nette.success);

		$.nette.spinner.css({
			position: 'absolute',
			left: event.pageX,
			top: event.pageY
		});
	});

});



/*

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

				handleEvent: function(args)
				{
					var event = args.shift();
					eval(event + '.apply(this, args);');
				},

		ajaxCallback: function (data, callback) {
						// callback
						if (callback) {
								callback(data);
																return;
						}

						// redirect
						if (data.redirect) {
								window.location.href = data.redirect;
						}

						// snipeti
						if (data.snippets) {
								for (var i in data.snippets) {
										jQuery.updateSnippet(i, data.snippets[i]);
								}
						}

												if (data.events) {
													for (var id in data.events) {
														jQuery.handleEvent(data.events[id]);
													}
												}

												if (data.prompt) {
													var args = data.prompt[1];

													if (typeof args['callback'] != 'undefined') {
														args['callback'] = eval(args['callback']);
													}

													$.prompt(data.prompt[0], args);
												}

		},

		netteAjax: function () {
				var args = jQuery.makeArray(arguments);

				var url = args.shift();
				var type = "get";
				var params = null;
				var callback = null;
								var spinner = null;

				for (var i = 0; i < args.length; i++) {
						if (jQuery.isFunction(args[i])) {
								callback = args[i];
								continue;
						}
						if (typeof args[i] == "string") {
								if (args[i].toLowerCase() == "post") {
										type = "post";
								}
								continue;
						}
						if (args[i] instanceof Object) {
								params = args[i];
						}
				}

								if (params && params.spinner) {
									spinner = params.spinner;
									spinner.show();
									delete params.spinner;
								}

				return jQuery.ajax({
						type: type,
						url: url,
						data: params,
						success: function(data) {
													if (spinner) {
														spinner.hide();
													}
													jQuery.ajaxCallback(data, callback);
												},
												error: function() {
													if (spinner) {
														spinner.hide();
													}
													alert("Při zpracování požadavku se vyskytla kritická chyba.\nPokud chyba přetrvá, obraťte se prosím na technickou podporu.");
												},
						dataType: "json",
						cache: false
				});
		},

				netteLinkParams : function(link, params) {
					return link.replace(/%23%23%23/, params);
				}
});


$(document).ready(function() {
		$("a.ajax").livequery('click', function () {
				$.netteAjax(this.href);
				return false;
		});

		$("form.ajax").livequery('submit', function () {
				$(this).netteAjaxSubmit();
				return false;
		});

});

		*/
