docs: function(ajaxRequest) {
          var text = ajaxRequest.responseText;
          
          var options = {};
          
          OpenLayers.Util.extend(options, this.formatOptions);
          
          if (this.map && !this.projection.equals(this.map.getProjectionObject())) {
              options.externalProjection = this.projection;
              options.internalProjection = this.map.getProjectionObject();
          }    
          
          var parser = new OpenLayers.Format.Text(options);
          var features = parser.read(text);
          for (var i=0, len=features.length; i<len; i++) {
              var data = {};
              var feature = features[i];
              var location;
              var iconSize, iconOffset;
              
              location = new OpenLayers.LonLat(feature.geometry.x, 
                                               feature.geometry.y);
              
              if (feature.style.graphicWidth 
                  && feature.style.graphicHeight) {
                  iconSize = new OpenLayers.Size(
                      feature.style.graphicWidth,
                      feature.style.graphicHeight);
              }        
              
              // FIXME: At the moment, we only use this if we have an 
              // externalGraphic, because icon has no setOffset API Method.
              /**
               * FIXME FIRST!!
               * The Text format does all sorts of parseFloating
               * The result of a parseFloat for a bogus string is NaN.  That
               * means the three possible values here are undefined, NaN, or a
               * number.  The previous check was an identity check for null.  This
               * means it was failing for all undefined or NaN.  A slightly better
               * check is for undefined.  An even better check is to see if the
               * value is a number (see #1441).
               */
              if (feature.style.graphicXOffset !== undefined
                  && feature.style.graphicYOffset !== undefined) {
                  iconOffset = new OpenLayers.Pixel(
                      feature.style.graphicXOffset, 
                      feature.style.graphicYOffset);
              }
              
              if (feature.style.externalGraphic != null) {
                  data.icon = new OpenLayers.Icon(feature.style.externalGraphic, 
                                                  iconSize, 
                                                  iconOffset);
              } else {
                  data.icon = OpenLayers.Marker.defaultIcon();
  
                  //allows for the case where the image url is not 
                  // specified but the size is. use a default icon
                  // but change the size
                  if (iconSize != null) {
                      data.icon.setSize(iconSize);
                  }
              }
              
              if ((feature.attributes.title != null) 
                  && (feature.attributes.description != null)) {
                  data['popupContentHTML'] = 
                      '<h2>'+feature.attributes.title+'</h2>' + 
                      '<p>'+feature.attributes.description+'</p>';
              }
              
              data['overflow'] = feature.attributes.overflow || "auto"; 
              
              var markerFeature = new OpenLayers.Feature(this, location, data);
              this.features.push(markerFeature);
              var marker = markerFeature.createMarker();
              if ((feature.attributes.title != null) 
                  && (feature.attributes.description != null)) {
                marker.events.register('click', markerFeature, this.markerClick);
              }
              this.addMarker(marker);
          }
          this.events.triggerEvent("loadend");
      }