<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,5 +1,5 @@
 /*
- * Raphael 0.8.1 - JavaScript Vector Library
+ * Raphael 0.8.2 - JavaScript Vector Library
  *
  * Copyright (c) 2008 - 2009 Dmitry Baranovskiy (http://raphaeljs.com)
  * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
@@ -21,7 +21,7 @@ window.Raphael = (function () {
         availableAttrs = {cx: 0, cy: 0, fill: &quot;#fff&quot;, &quot;fill-opacity&quot;: 1, font: '10px &quot;Arial&quot;', &quot;font-family&quot;: '&quot;Arial&quot;', &quot;font-size&quot;: &quot;10&quot;, &quot;font-style&quot;: &quot;normal&quot;, &quot;font-weight&quot;: 400, gradient: 0, height: 0, href: &quot;http://raphaeljs.com/&quot;, opacity: 1, path: &quot;M0,0&quot;, r: 0, rotation: 0, rx: 0, ry: 0, scale: &quot;1 1&quot;, src: &quot;&quot;, stroke: &quot;#000&quot;, &quot;stroke-dasharray&quot;: &quot;&quot;, &quot;stroke-linecap&quot;: &quot;butt&quot;, &quot;stroke-linejoin&quot;: &quot;butt&quot;, &quot;stroke-miterlimit&quot;: 0, &quot;stroke-opacity&quot;: 1, &quot;stroke-width&quot;: 1, target: &quot;_blank&quot;, &quot;text-anchor&quot;: &quot;middle&quot;, title: &quot;Raphael&quot;, translation: &quot;0 0&quot;, width: 0, x: 0, y: 0},
         availableAnimAttrs = {cx: &quot;number&quot;, cy: &quot;number&quot;, fill: &quot;colour&quot;, &quot;fill-opacity&quot;: &quot;number&quot;, &quot;font-size&quot;: &quot;number&quot;, height: &quot;number&quot;, opacity: &quot;number&quot;, path: &quot;path&quot;, r: &quot;number&quot;, rotation: &quot;csv&quot;, rx: &quot;number&quot;, ry: &quot;number&quot;, scale: &quot;csv&quot;, stroke: &quot;colour&quot;, &quot;stroke-opacity&quot;: &quot;number&quot;, &quot;stroke-width&quot;: &quot;number&quot;, translation: &quot;csv&quot;, width: &quot;number&quot;, x: &quot;number&quot;, y: &quot;number&quot;},
         events = [&quot;click&quot;, &quot;dblclick&quot;, &quot;mousedown&quot;, &quot;mousemove&quot;, &quot;mouseout&quot;, &quot;mouseover&quot;, &quot;mouseup&quot;];
-    R.version = &quot;0.8&quot;;
+    R.version = &quot;0.8.2&quot;;
     R.type = (window.SVGAngle || document.implementation.hasFeature(&quot;http://www.w3.org/TR/SVG11/feature#BasicStructure&quot;, &quot;1.1&quot;) ? &quot;SVG&quot; : &quot;VML&quot;);
     R.svg = !(R.vml = R.type == &quot;VML&quot;);
     R.idGenerator = 0;
@@ -2481,8 +2481,47 @@ window.Raphael = (function () {
         }
         return this;
     };
-    Element.prototype.animate = function (params, ms, callback) {
+
+    R.easing_formulas = {
+        linear: function( time, beg, diff, dur ) {
+          return beg + diff * time;
+        },
+        &quot;&lt;&quot;: function (time, beg, diff, dur) {
+            return diff * (time /= dur) * time + beg;
+        },
+        &quot;&gt;&quot;: function (time, beg, diff, dur) {
+            return -diff * (time /= dur) * (time - 2) + beg;
+        },
+        &quot;&lt;&gt;&quot;: function (time, beg, diff, dur) {
+            if ((time /= dur/2) &lt; 1) {
+                return diff / 2 * time * time + beg;
+            }
+            return -diff / 2 * ((--time) * (time - 2) - 1) + beg;
+        },
+        bounce: function (time, beg, diff, dur) {
+            if ((time /= dur) &lt; (1 / 2.75)) {
+                return diff * (7.5625 * time * time) + beg;
+            } else if (time &lt; (2 / 2.75)) {
+                return diff * (7.5625 * (time -= (1.5 / 2.75)) * time + .75) + beg;
+            } else if (time &lt; (2.5 / 2.75)) {
+                return diff * (7.5625 * (time -= (2.25 / 2.75)) * time + .9375) + beg;
+            } else {
+                return diff * (7.5625 * (time -= (2.625 / 2.75)) * time + .984375) + beg;
+            }
+        }
+    };
+
+    // animation easing formulas
+    R.easing = function(easing, time, beg, diff, dur) {
+        return (R.easing_formulas[easing] || R.easing_formulas.linear)(time, beg, diff, dur);
+    };
+
+    Element.prototype.animate = function (params, ms, easing, callback) {
         clearTimeout(this.animation_in_progress);
+        if (typeof easing == &quot;function&quot; || !easing) {
+            callback = easing || null;
+            easing = &quot;linear&quot;;
+        }
         var from = {},
             to = {},
             diff = {},
@@ -2546,16 +2585,17 @@ window.Raphael = (function () {
                 set = {},
                 now;
             if (time &lt; ms) {
+                pos = R.easing(easing, time, 0, 1, ms);
                 for (var attr in from) {
                     switch (availableAnimAttrs[attr]) {
                         case &quot;number&quot;:
-                            now = +from[attr] + time * diff[attr];
+                            now = +from[attr] + pos * ms * diff[attr];
                             break;
                         case &quot;colour&quot;:
                             now = &quot;rgb(&quot; + [
-                                Math.round(from[attr].r + time * diff[attr].r),
-                                Math.round(from[attr].g + time * diff[attr].g),
-                                Math.round(from[attr].b + time * diff[attr].b)
+                                Math.round(from[attr].r + pos * ms * diff[attr].r),
+                                Math.round(from[attr].g + pos * ms * diff[attr].g),
+                                Math.round(from[attr].b + pos * ms * diff[attr].b)
                             ].join(&quot;,&quot;) + &quot;)&quot;;
                             break;
                         case &quot;path&quot;:
@@ -2563,7 +2603,7 @@ window.Raphael = (function () {
                             for (var i = 0, ii = from[attr].length; i &lt; ii; i++) {
                                 now[i] = [from[attr][i][0]];
                                 for (var j = 1, jj = from[attr][i].length; j &lt; jj; j++) {
-                                    now[i][j] = from[attr][i][j] + time * diff[attr][i][j];
+                                    now[i][j] = from[attr][i][j] + pos * ms * diff[attr][i][j];
                                 }
                                 now[i] = now[i].join(&quot; &quot;);
                             }
@@ -2579,11 +2619,11 @@ window.Raphael = (function () {
                                     now = [x, y].join(&quot; &quot;);
                                 break;
                                 case &quot;rotation&quot;:
-                                    now = +from[attr][0] + time * diff[attr][0];
+                                    now = +from[attr][0] + pos * ms * diff[attr][0];
                                     from[attr][1] &amp;&amp; (now += &quot;,&quot; + from[attr][1] + &quot;,&quot; + from[attr][2]);
                                 break;
                                 case &quot;scale&quot;:
-                                    now = [+from[attr][0] + time * diff[attr][0], +from[attr][1] + time * diff[attr][1], (2 in params[attr] ? params[attr][2] : &quot;&quot;), (3 in params[attr] ? params[attr][3] : &quot;&quot;)].join(&quot; &quot;);
+                                    now = [+from[attr][0] + pos * ms * diff[attr][0], +from[attr][1] + pos * ms * diff[attr][1], (2 in params[attr] ? params[attr][2] : &quot;&quot;), (3 in params[attr] ? params[attr][3] : &quot;&quot;)].join(&quot; &quot;);
                             }
                             break;
                     }</diff>
      <filename>raphael.js</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>bc25e83d9b009c2d3742a9faaf1f2b61b3229d3f</id>
    </parent>
  </parents>
  <author>
    <name>Dmitry Baranovskiy</name>
    <email>dbaranovskiy@Fresh-Air.sydney.atlassian.com</email>
  </author>
  <url>http://github.com/DmitryBaranovskiy/raphael/commit/a274da70ff7f02a3e2b2c4735d2d4561d789ae6f</url>
  <id>a274da70ff7f02a3e2b2c4735d2d4561d789ae6f</id>
  <committed-date>2009-06-29T17:40:56-07:00</committed-date>
  <authored-date>2009-06-29T17:40:56-07:00</authored-date>
  <message>0.8.2 Added easing by Robert Samuel Clay. Big thanks. Check out plugin: http://github.com/conesus/raphael-easing/</message>
  <tree>89c076a17d5cd2ff4b72f2657c0265223202fc54</tree>
  <committer>
    <name>Dmitry Baranovskiy</name>
    <email>dbaranovskiy@Fresh-Air.sydney.atlassian.com</email>
  </committer>
</commit>
