Index: lib/OpenLayers/Request.js
===================================================================
--- lib/OpenLayers/Request.js	(révision 9619)
+++ lib/OpenLayers/Request.js	(copie de travail)
@@ -141,29 +141,12 @@
             request.setRequestHeader(header, config.headers[header]);
         }
 
-        // bind callbacks to readyState 4 (done)
-        var complete = (config.scope) ?
-            OpenLayers.Function.bind(config.callback, config.scope) :
-            config.callback;
-        
-        // optional success callback
-        var success;
-        if(config.success) {
-            success = (config.scope) ?
-                OpenLayers.Function.bind(config.success, config.scope) :
-                config.success;
-        }
+        var events = this.events;
 
-        // optional failure callback
-        var failure;
-        if(config.failure) {
-            failure = (config.scope) ?
-                OpenLayers.Function.bind(config.failure, config.scope) :
-                config.failure;
-        }
+        // we want to execute runCallbacks with "this" as the
+        // execution scope
+        var self = this;
         
-        var events = this.events;
-         
         request.onreadystatechange = function() {
             if(request.readyState == OpenLayers.Request.XMLHttpRequest.DONE) {
                 var proceed = events.triggerEvent(
@@ -171,25 +154,9 @@
                     {request: request, config: config, requestUrl: url}
                 );
                 if(proceed !== false) {
-                    complete(request);
-                    if (!request.status || (request.status >= 200 && request.status < 300)) {
-                        events.triggerEvent(
-                            "success",
-                            {request: request, config: config, requestUrl: url}
-                        );
-                        if(success) {
-                            success(request);
-                        }
-                    }
-                    if(request.status && (request.status < 200 || request.status >= 300)) {                    
-                        events.triggerEvent(
-                            "failure",
-                            {request: request, config: config, requestUrl: url}
-                        );
-                        if(failure) {
-                            failure(request);
-                        }
-                    }
+                    self.runCallbacks(
+                        {request: request, config: config, requestUrl: url}
+                    );
                 }
             }
         };
@@ -208,6 +175,58 @@
     },
     
     /**
+     * Method: runCallbacks
+     * Calls the complete, success and failure callbacks. Application
+     *    can listen to the "complete" event, have the listener 
+     *    display a confirm window and always return false, and
+     *    execute OpenLayers.Request.runCallbacks if the user
+     *    hits "yes" in the confirm window.
+     *
+     * Parameters:
+     * options - {Object} Hash containing request, config and requestUrl keys
+     */
+    runCallbacks: function(options) {
+        var request = options.request;
+        var config = options.config;
+        
+        // bind callbacks to readyState 4 (done)
+        var complete = (config.scope) ?
+            OpenLayers.Function.bind(config.callback, config.scope) :
+            config.callback;
+        
+        // optional success callback
+        var success;
+        if(config.success) {
+            success = (config.scope) ?
+                OpenLayers.Function.bind(config.success, config.scope) :
+                config.success;
+        }
+
+        // optional failure callback
+        var failure;
+        if(config.failure) {
+            failure = (config.scope) ?
+                OpenLayers.Function.bind(config.failure, config.scope) :
+                config.failure;
+        }
+
+        complete(request);
+
+        if (!request.status || (request.status >= 200 && request.status < 300)) {
+            this.events.triggerEvent("success", options);
+            if(success) {
+                success(request);
+            }
+        }
+        if(request.status && (request.status < 200 || request.status >= 300)) {                    
+            this.events.triggerEvent("failure", options);
+            if(failure) {
+                failure(request);
+            }
+        }
+    },
+    
+    /**
      * APIMethod: GET
      * Send an HTTP GET request.  Additional configuration properties are
      *     documented in the <issue> method, with the method property set
