docs: function(name, url, options) { 
          OpenLayers.Layer.XYZ.prototype.initialize.apply(this, arguments);
  
          if (this.resolutions) {        
              this.serverResolutions = this.resolutions;
              this.maxExtent = this.getMaxExtentForResolution(this.resolutions[0]);
          }
  
          // this block steps through translating the values from the server layer JSON 
          // capabilities object into values that we can use.  This is also a helpful
          // reference when configuring this layer directly.
          if (this.layerInfo) {
              // alias the object
              var info = this.layerInfo;
              
              // build our extents
              var startingTileExtent = new OpenLayers.Bounds(
                  info.fullExtent.xmin, 
                  info.fullExtent.ymin, 
                  info.fullExtent.xmax, 
                  info.fullExtent.ymax  
              );
  
              // set our projection based on the given spatial reference.
              // esri uses slightly different IDs, so this may not be comprehensive
              this.projection = 'EPSG:' + info.spatialReference.wkid;
              this.sphericalMercator = (info.spatialReference.wkid == 102100);
              
              // convert esri units into openlayers units (basic feet or meters only)
              this.units = (info.units == "esriFeet") ? 'ft' : 'm';
  
              // optional extended section based on whether or not the server returned
              // specific tile information
              if (!!info.tileInfo) {            
                  // either set the tiles based on rows/columns, or specific width/height
                  this.tileSize = new OpenLayers.Size(
                      info.tileInfo.width || info.tileInfo.cols, 
                      info.tileInfo.height || info.tileInfo.rows
                  );
                  
                  // this must be set when manually configuring this layer
                  this.tileOrigin = new OpenLayers.LonLat(
                      info.tileInfo.origin.x, 
                      info.tileInfo.origin.y
                  );
  
                  var upperLeft = new OpenLayers.Geometry.Point(
                      startingTileExtent.left, 
                      startingTileExtent.top
                  );
                  
                  var bottomRight = new OpenLayers.Geometry.Point(
                      startingTileExtent.right, 
                      startingTileExtent.bottom
                  );            
                  
                  if (this.useScales) {
                      this.scales = [];
                  } else {
                      this.resolutions = [];
                  }
                  
                  this.lods = [];
                  for(var key in info.tileInfo.lods) {
                      if (info.tileInfo.lods.hasOwnProperty(key)) {
                          var lod = info.tileInfo.lods[key];
                          if (this.useScales) {
                              this.scales.push(lod.scale);
                          } else {
                              this.resolutions.push(lod.resolution);
                          }
                      
                          var start = this.getContainingTileCoords(upperLeft, lod.resolution);
                          lod.startTileCol = start.x;
                          lod.startTileRow = start.y;
                      
                          var end = this.getContainingTileCoords(bottomRight, lod.resolution);
                          lod.endTileCol = end.x;
                          lod.endTileRow = end.y;    
                          this.lods.push(lod);
                      }
                  }
  
                  this.maxExtent = this.calculateMaxExtentWithLOD(this.lods[0]);
                  this.serverResolutions = this.resolutions;
                  if (this.overrideDPI && info.tileInfo.dpi) {
                      // see comment above for 'overrideDPI'
                      OpenLayers.DOTS_PER_INCH = info.tileInfo.dpi;
                  }
              } 
         }
      }