docs: function(zoom, xy) {
          // non-API arguments:
          // xy - {<OpenLayers.Pixel>} optional zoom origin
          
          var map = this;
          if (map.isValidZoomLevel(zoom)) {
              if (map.baseLayer.wrapDateLine) {
                  zoom = map.adjustZoom(zoom);
              }
              if (map.zoomTween) {
                  var currentRes = map.getResolution(),
                      targetRes = map.getResolutionForZoom(zoom),
                      start = {scale: 1},
                      end = {scale: currentRes / targetRes};
                  if (map.zoomTween.playing && map.zoomTween.duration < 3 * map.zoomDuration) {
                      // update the end scale, and reuse the running zoomTween
                      map.zoomTween.finish = {
                          scale: map.zoomTween.finish.scale * end.scale
                      };
                  } else {
                      if (!xy) {
                          var size = map.getSize();
                          xy = {x: size.w / 2, y: size.h / 2};
                      }
                      map.zoomTween.start(start, end, map.zoomDuration, {
                          minFrameRate: 50, // don't spend much time zooming
                          callbacks: {
                              eachStep: function(data) {
                                  var containerOrigin = map.layerContainerOriginPx,
                                      scale = data.scale,
                                      dx = ((scale - 1) * (containerOrigin.x - xy.x)) | 0,
                                      dy = ((scale - 1) * (containerOrigin.y - xy.y)) | 0;
                                  map.applyTransform(containerOrigin.x + dx, containerOrigin.y + dy, scale);
                              },
                              done: function(data) {
                                  map.applyTransform();
                                  var resolution = map.getResolution() / data.scale,
                                      zoom = map.getZoomForResolution(resolution, true)
                                  map.moveTo(map.getZoomTargetCenter(xy, resolution), zoom, true);
                              }
                          }
                      });
                  }
              } else {
                  var center = xy ?
                      map.getZoomTargetCenter(xy, map.getResolutionForZoom(zoom)) :
                      null;
                  map.setCenter(center, zoom);
              }
          }
      }