(function($, undefined) { var form_ext; $.form_ext = form_ext = { ajax: function(options) { return $.ajax(options); }, handleRemote: function(element) { var method = element.attr('method'); var url = element.attr('action'); var data = element.serializeArray(); var options = { type: method || 'GET', data: data, dataType: 'text json', success: function(data, status, xhr) { element.trigger('ajax:success', [data, status, xhr]); }, complete: function(xhr, status) { element.trigger('ajax:complete', [xhr, status]); }, error: function(xhr, status, error) { element.trigger('ajax:error', [xhr, status, error]); } }; if (url) { options.url = url; } return form_ext.ajax(options); }, CSRFProtection: function(xhr) { var token = $.cookie('csrftoken'); if (token) xhr.setRequestHeader('X-CSRFToken', token); } }; $.ajaxPrefilter(function(options, originalOptions, xhr) { if (!options.crossDomain) { form_ext.CSRFProtection(xhr); } }); $(document).delegate('form', 'submit', function(e) { var $form = $(this), remote = $form.data('remote') !== undefined; if (remote) { form_ext.handleRemote($form); return false; } }); }(jQuery));