<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,4 +1,4 @@
-/*  Prototype JavaScript framework, version 1.3.0
+/*  Prototype JavaScript framework, version 1.3.1
  *  (c) 2005 Sam Stephenson &lt;sam@conio.net&gt;
  *
  *  THIS FILE IS AUTOMATICALLY GENERATED. When sending patches, please diff
@@ -11,7 +11,7 @@
 /*--------------------------------------------------------------------------*/
 
 var Prototype = {
-  Version: '1.3.0',
+  Version: '1.3.1',
   emptyFunction: function() {}
 }
 
@@ -266,12 +266,16 @@ Ajax.Request.prototype = (new Ajax.Base()).extend({
   respondToReadyState: function(readyState) {
     var event = Ajax.Request.Events[readyState];
 
-    if (event == 'Complete' &amp;&amp; this.responseIsFailure())
+    if (event == 'Complete')
       (this.options['on' + this.transport.status]
-       || this.options.onFailure
+       || this.options['on' + this.responseIsSuccess() ? 'Success' : 'Failure']
        || Prototype.emptyFunction)(this.transport);
 
-    (this.options['on' + event] || Prototype.emptyFunction)(this.transport);    
+    (this.options['on' + event] || Prototype.emptyFunction)(this.transport);
+
+    /* Avoid memory leak in MSIE: clean up the oncomplete event handler */
+    if (event == 'Complete')
+      this.transport.onreadystatechange = Prototype.emptyFunction;
   }
 });
 
@@ -292,7 +296,7 @@ Ajax.Updater.prototype.extend(Ajax.Request.prototype).extend({
     var onComplete = this.options.onComplete || Prototype.emptyFunction;
     this.options.onComplete = (function() {
       this.updateContent();
-      onComplete(this.transport);      
+      onComplete(this.transport);
     }).bind(this);
 
     this.request(url);
@@ -889,53 +893,60 @@ Object.extend(Event, {
     return element;
   },
 
+  observers: false,
+  
+  _observeAndCache: function(element, name, observer, useCapture) {
+    if (!this.observers) this.observers = [];
+    if (element.addEventListener) {
+      this.observers.push([element, name, observer, useCapture]);
+      element.addEventListener(name, observer, useCapture);
+    } else if (element.attachEvent) {
+      this.observers.push([element, name, observer, useCapture]);
+      element.attachEvent('on' + name, observer);
+    }
+  },
+  
+  unloadCache: function() {
+    if (!Event.observers) return;
+    for (var i = 0; i &lt; Event.observers.length; i++) {
+      Event.stopObserving.apply(this, Event.observers[i]);
+      Event.observers[i][0] = null;
+    }
+    Event.observers = false;
+  },
+
   observe: function(element, name, observer, useCapture) {
     var element = $(element);
     useCapture = useCapture || false;
     
-    if (name == 'keypress') {
-      if (navigator.appVersion.indexOf('AppleWebKit') &gt; 0) {
-        element.addEventListener('keydown', observer, useCapture);
-        return;
-      }
-      if (element.addEventListener) {
-        element.addEventListener('keypress', observer, useCapture);
-      } else if (element.attachEvent) {
-        element.attachEvent('onkeydown', observer);
-      }
-    } else {
-      if (element.addEventListener) {
-        element.addEventListener(name, observer, useCapture);
-      } else if (element.attachEvent) {
-        element.attachEvent('on' + name, observer);
-      }
-    }
+    if (name == 'keypress' &amp;&amp;
+        ((navigator.appVersion.indexOf('AppleWebKit') &gt; 0) 
+        || element.attachEvent))
+      name = 'keydown';
+    
+    this._observeAndCache(element, name, observer, useCapture);
   },
 
   stopObserving: function(element, name, observer, useCapture) {
     var element = $(element);
     useCapture = useCapture || false;
     
-    if (name == 'keypress') {
-      if (navigator.appVersion.indexOf('AppleWebKit') &gt; 0) {
-        element.removeEventListener('keydown', observer, useCapture);
-        return;
-      }
-      if (element.removeEventListener) {
-        element.removeEventListener('keypress', observer, useCapture);
-      } else if (element.detachEvent) {
-        element.detachEvent('onkeydown', observer);
-      }
-    } else {
-      if (element.removeEventListener) {
-        element.removeEventListener(name, observer, useCapture);
-      } else if (element.detachEvent) {
-        element.detachEvent('on' + name, observer);
-      }
+    if (name == 'keypress' &amp;&amp;
+        ((navigator.appVersion.indexOf('AppleWebKit') &gt; 0) 
+        || element.detachEvent))
+      name = 'keydown';
+    
+    if (element.removeEventListener) {
+      element.removeEventListener(name, observer, useCapture);
+    } else if (element.detachEvent) {
+      element.detachEvent('on' + name, observer);
     }
   }
 });
 
+/* prevent memory leaks in IE */
+Event.observe(window, 'unload', Event.unloadCache, false);
+
 var Position = {
 
   // set to true if needed, warning: firefox performance problems</diff>
      <filename>actionpack/lib/action_view/helpers/javascripts/prototype.js</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>1c5d1ededb3ccaed4810b45b672f0a9e3ca52884</id>
    </parent>
  </parents>
  <author>
    <name>Sam Stephenson</name>
    <email>sam@37signals.com</email>
  </author>
  <url>http://github.com/chriseppstein/rails/commit/325c5efdb3f7492068e9c9deed31b0ebdc04945c</url>
  <id>325c5efdb3f7492068e9c9deed31b0ebdc04945c</id>
  <committed-date>2005-07-10T19:57:59-07:00</committed-date>
  <authored-date>2005-07-10T19:57:59-07:00</authored-date>
  <message>Update to Prototype 1.3.1

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1804 5ecf4fe2-1ee6-0310-87b1-e25e094e27de</message>
  <tree>d1d1c32ad16d7535c0e6d1d3bf132f20499f0b40</tree>
  <committer>
    <name>Sam Stephenson</name>
    <email>sam@37signals.com</email>
  </committer>
</commit>
