code: function(lonlat) {
          if (this.panTween && this.getExtent().scale(this.panRatio).containsLonLat(lonlat)) {
              var center = this.getCachedCenter();
  
              // center will not change, don't do nothing
              if (lonlat.equals(center)) {
                  return;
              }
  
              var from = this.getPixelFromLonLat(center);
              var to = this.getPixelFromLonLat(lonlat);
              var vector = { x: to.x - from.x, y: to.y - from.y };
              var last = { x: 0, y: 0 };
  
              this.panTween.start( { x: 0, y: 0 }, vector, this.panDuration, {
                  callbacks: {
                      eachStep: OpenLayers.Function.bind(function(px) {
                          var x = px.x - last.x,
                              y = px.y - last.y;
                          this.moveByPx(x, y);
                          last.x = Math.round(px.x);
                          last.y = Math.round(px.y);
                      }, this),
                      done: OpenLayers.Function.bind(function(px) {
                          this.moveTo(lonlat);
                          this.dragging = false;
                          this.events.triggerEvent("moveend");
                      }, this)
                  }
              });
          } else {
              this.setCenter(lonlat);
          }
      }
docs: APIMethod: panTo
  Allows user to pan to a new lonlat
  If the new lonlat is in the current extent the map will slide smoothly
  
  Parameters:
  lonlat - {<OpenLayers.LonLat>}