Index: includes/ajax.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/ctools/includes/ajax.inc,v
retrieving revision 1.11
diff -u -p -r1.11 ajax.inc
--- includes/ajax.inc	17 Aug 2009 18:31:13 -0000	1.11
+++ includes/ajax.inc	4 Sep 2009 17:41:51 -0000
@@ -362,6 +362,20 @@ function ctools_ajax_command_restripe($s
 }
 
 /**
+ * Force a client-side redirect.
+ *
+ * @param $url
+ *   The url to be redirected to. This can be an absolute URL or a
+ *   Drupal path.
+ */
+function ctools_ajax_command_redirect($url) {
+  return array(
+    'command' => 'redirect',
+    'url' => url($url),
+  );
+}
+
+/**
  * Render a commands array into JSON and immediately hand this back
  * to the AJAX requester.
  */
Index: js/ajax-responder.js
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/ctools/js/ajax-responder.js,v
retrieving revision 1.14
diff -u -p -r1.14 ajax-responder.js
--- js/ajax-responder.js	17 Aug 2009 18:31:13 -0000	1.14
+++ js/ajax-responder.js	4 Sep 2009 17:41:51 -0000
@@ -277,6 +277,10 @@ Drupal.CTools.AJAX.commands = {
       .end()
       .filter(':odd')
         .addClass('even');
+  },
+
+  redirect: function(data) {
+    location.href = data.url;
   }
 };
 
