+ var login_and_retry = function($form) {
+ var $window = $("#ajaxable-window").clone();
+ $window.attr("id", "context-login-window");
+ $('body').append($window);
+
+ $window.jqm({
+ ajax: '/uzytkownicy/zaloguj-utworz/?next=' + escape(window.location),
+ ajaxText: '<p><img src="' + STATIC_URL + 'img/indicator.gif" alt="*"/> ' + gettext("Loading") + '</p>',
+ target: $('.target', $window)[0],
+ overlay: 60,
+ onShow: function(hash) {
+ var offset = $form.offset();
+ hash.w.css({position: 'absolute', left: offset.left - hash.w.width() + $form.width(), top: offset.top});
+ var width = $form.width();
+ width = width > 50 ? width : 50;
+ $('.header', hash.w).css({width: width});
+ hash.w.show();
+ },
+ onLoad: function(hash) {
+ $('form', hash.w).ajaxForm({
+ dataType: 'json',
+ target: $('.target', $window),
+ success: function(response) {
+ if (response.success) {
+ $('.target', $window).text(response.message);
+ setTimeout(function() { $window.jqmHide() }, 1000);
+ $form.submit();
+ location.reload();
+ }
+ else {
+ $('.error', $window).remove();
+ $.each(response.errors, function(id, errors) {
+ $('#id_' + id, $window).before('<span class="error">' + errors[0] + '</span>');
+ });
+ $('input[type=submit]', $window).removeAttr('disabled');
+ return false;
+ }
+ }
+ });
+ }
+ }).jqmShow();
+
+ };
+
+
+ $('.ajax-form').each(function() {
+ var $form = $(this);
+ $form.ajaxForm({
+ dataType: 'json',
+ beforeSubmit: function() {
+ $('input[type=submit]', $form)
+ .attr('disabled', 'disabled')
+ .after('<img src="/static/img/indicator.gif" style="margin-left: 0.5em"/>');
+ },
+ error: function(response) {
+ if (response.status == 403)
+ login_and_retry($form);
+ },
+ success: function(response) {
+ if (response.success) {
+ callback = ajax_form_callbacks[$form.attr('data-callback')];
+ callback && callback($form, response);
+
+ } else {
+ $('span.error', $form).remove();
+ $.each(response.errors, function(id, errors) {
+ $('#id_' + id, $form).before('<span class="error">' + errors[0] + '</span>');
+ });
+ $('input[type=submit]', $form).removeAttr('disabled');
+ $('img', $form).remove();
+ }
+ }
+ });
+ });
+
+
+ var update_star = function($elem, response) {
+ /* updates the star after successful ajax */
+ var $star = $elem.closest('.star');
+ if (response.like) {
+ $star.addClass('like');
+ $star.removeClass('unlike');
+ }
+ else {
+ $star.addClass('unlike');
+ $star.removeClass('like');
+ }
+ };
+
+ var ajax_form_callbacks = {
+ 'social-like-book': update_star
+ };
+
+ var ajaxable_callbacks = {
+ 'social-book-sets': location.reload
+ };
+
+
+
+ // check placeholder browser support
+ if (!Modernizr.input.placeholder)
+ {
+ // set placeholder values
+ $(this).find('[placeholder]').each(function()
+ {
+ $(this).val( $(this).attr('placeholder') ).addClass('placeholder');
+ });
+
+ // focus and blur of placeholders
+ $('[placeholder]').focus(function()
+ {
+ if ($(this).val() == $(this).attr('placeholder'))
+ {
+ $(this).val('');
+ $(this).removeClass('placeholder');
+ }
+ }).blur(function()
+ {
+ if ($(this).val() == '' || $(this).val() == $(this).attr('placeholder'))
+ {
+ $(this).val($(this).attr('placeholder'));
+ $(this).addClass('placeholder');
+ }
+ });
+
+ // remove placeholders on submit
+ $('[placeholder]').closest('form').submit(function()
+ {
+ $(this).find('[placeholder]').each(function()
+ {
+ if ($(this).val() == $(this).attr('placeholder'))
+ {
+ $(this).val('');
+ }
+ })
+ });
+ }
+
+
+