? .DS_Store
Index: js/ajax-responder.js
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/ctools/js/ajax-responder.js,v
retrieving revision 1.18.2.6
diff -u -p -r1.18.2.6 ajax-responder.js
--- js/ajax-responder.js	22 Jan 2010 06:48:08 -0000	1.18.2.6
+++ js/ajax-responder.js	13 Feb 2010 21:16:48 -0000
@@ -202,6 +202,54 @@
     }
     return false;
   };
+  
+  /**
+   * Generic replacement for change handler to execute ajax method.
+   */
+  Drupal.CTools.AJAX.blurAJAX = function () {
+    if ($(this).hasClass('ctools-ajaxing')) {
+      return false;
+    }
+
+    var url = Drupal.CTools.AJAX.findURL(this);
+    $(this).addClass('ctools-ajaxing');
+    var object = $(this);
+    var form_id = $(object).parents('form').get(0).id;
+    try {
+      if (url) {
+        url = url.replace('/nojs/', '/ajax/');
+        $.ajax({
+          type: "POST",
+          url: url,
+          data: {'ctools_blur': $(this).val(), 'js': 1, 'ctools_ajax': 1 },
+          global: true,
+          success: Drupal.CTools.AJAX.respond,
+          error: function(xhr) {
+            Drupal.CTools.AJAX.handleErrors(xhr, url);
+          },
+          complete: function() {
+            object.removeClass('ctools-ajaxing');
+            if ($(object).hasClass('ctools-ajax-submit-blur')) {
+              $('form#' + form_id).submit();
+            }
+          },
+          dataType: 'json'
+        });
+      }
+      else {
+        if ($(object).hasClass('ctools-ajax-submit-blur')) {
+          $('form#' + form_id).submit();
+        }
+        return false;
+      }
+    }
+    catch (err) {
+      alert("An error occurred while attempting to process " + url);
+      $(this).removeClass('ctools-ajaxing');
+      return false;
+    }
+    return false;
+  };
 
   /**
    * Find a URL for an AJAX button.
@@ -338,10 +386,16 @@
       .addClass('ctools-use-ajax-processed')
       .click(Drupal.CTools.AJAX.clickAJAXButton);
 
-    // Bind select
+    // Bind change
     $('select, input:text, input:radio, input:checkbox', context)
        .filter('.ctools-use-ajax-onchange:not(.ctools-use-ajax-processed)')
        .addClass('ctools-use-ajax-processed')
        .change(Drupal.CTools.AJAX.changeAJAX);
+    
+    // Bind blur
+    $('select, input:text, input:radio, input:checkbox', context)
+       .filter('.ctools-use-ajax-blur:not(.ctools-use-ajax-processed)')
+       .addClass('ctools-use-ajax-processed')
+       .blur(Drupal.CTools.AJAX.blurAJAX);
   };
 })(jQuery);
