code: function(info, callback) {
          var v0 = info.speed;
          var fx = Math.cos(info.theta);
          var fy = -Math.sin(info.theta);
  
          var initialTime = new Date().getTime();
  
          var lastX = 0;
          var lastY = 0;
  
          var timerCallback = function() {
              if (this.timerId == null) {
                  return;
              }
  
              var t = new Date().getTime() - initialTime;
  
              var p = (-this.deceleration * Math.pow(t, 2)) / 2.0 + v0 * t;
              var x = p * fx;
              var y = p * fy;
  
              var args = {};
              args.end = false;
              var v = -this.deceleration * t + v0;
  
              if (v <= 0) {
                  OpenLayers.Animation.stop(this.timerId);
                  this.timerId = null;
                  args.end = true;
              }
  
              args.x = x - lastX;
              args.y = y - lastY;
              lastX = x;
              lastY = y;
              callback(args.x, args.y, args.end);
          };
  
          this.timerId = OpenLayers.Animation.start(
              OpenLayers.Function.bind(timerCallback, this)
          );
      }
docs: Method: move
  Launch the kinetic move pan.
  
  Parameters:
  info - {Object} An object with two properties, "speed", and "theta".
  These values are those returned from the "end" call.
  callback - {Function} Function called on every step of the animation,
  receives x, y (values to pan), end (is the last point).