/**
 * AJAX Nette Framework plugin for jQuery
 *
 * @copyright   Copyright (c) 2009 Jan Marek
 * @license     MIT
 * @link        http://addons.nette.org/cs/jquery-ajax
 * @version     0.2
 * with: https://gist.github.com/e57f053e9d1cc72dc717
 */


jQuery.extend({
	nette: {
		updateSnippet: function (id, html) {
			$("#" + id).html(html);
			$("#" + id + " form").each(function() {
				if (Nette){
					Nette.initForm(this);
				}
			});
		},

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

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

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

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

jQuery.fn.extend({
	ajaxSubmit: function (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;
		}

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

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

		if (callback) {
			ajaxOptions.success = callback;
		}

		return jQuery.ajax(ajaxOptions);
	},

	__submit: function(e) {
		$(this).ajaxSubmit(null,e);
	},

	enableAjaxSubmit: function() {
		$(this).bind("submit",this.__submit);
		$(":submit",this).bind("click",this.__submit);
	},
	disableAjaxSubmit: function() {
		$(this).unbind("submit",this.__submit);
		$(":submit",this).unbind("click",this.__submit);
	}
});

// po načtení stránky
$(function () {
	// odeslání na formulářích
	$("form.ajax").livequery("submit",function (e) {
		$(this).ajaxSubmit(null,e);
		return false;
	});

	$("form.ajax :submit").livequery("click",function (e) {
		$(this).ajaxSubmit(null,e);
		return false;
	});


	$("a[href].ajax").livequery("click",function(e){
		e.preventDefault();
		$.get($(this).attr("href"));
	})
});

