/**
 * 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
 */
jQuery.extend({

	nette: {

		msg: function (message) {
			alert(message);
		},

		updateSnippet: function (id, html) {
			
			$("#" + id).html(html);
			
		},
		
		success: function (payload) {

			// redirect
			if (payload && payload.redirect) {
				window.location.href = payload.redirect;
				return;
			}

			// snippets
			if (payload && payload.snippets) {
				for (var i in payload.snippets) {
					jQuery.nette.updateSnippet(i, payload.snippets[i]);
				}
			}

			// messages
			if (payload && payload.messages) {
				for (var j in payload.messages) {
					$.gritter.add({
						image: '/themes/default/images/messages/' + payload.messages[j].type + '.png',
						title: payload.messages[j].title,
						text: '<p>' + payload.messages[j].message + '</p>',
						sticky: payload.messages[j].sticky,
						time: payload.messages[j].timeout,
						class_name: payload.messages[j].type
					});
				}
			}
			
		}
	}
});

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;
			    if (this.is(":submit")) {
				    if (this.get(0).onclick && !this.get(0).onclick()) 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);
		    }
});


