docs: function(target, options) {
          var results = null;
          var mutual = options && options.mutual;
          var sourceSplit, targetSplit, sourceParts, targetParts;
          if(target instanceof OpenLayers.Geometry.LineString) {
              var verts = this.getVertices();
              var vert1, vert2, seg, splits, lines, point;
              var points = [];
              sourceParts = [];
              for(var i=0, stop=verts.length-2; i<=stop; ++i) {
                  vert1 = verts[i];
                  vert2 = verts[i+1];
                  seg = {
                      x1: vert1.x, y1: vert1.y,
                      x2: vert2.x, y2: vert2.y
                  };
                  targetParts = targetParts || [target];
                  if(mutual) {
                      points.push(vert1.clone());
                  }
                  for(var j=0; j<targetParts.length; ++j) {
                      splits = targetParts[j].splitWithSegment(seg, options);
                      if(splits) {
                          // splice in new features
                          lines = splits.lines;
                          if(lines.length > 0) {
                              lines.unshift(j, 1);
                              Array.prototype.splice.apply(targetParts, lines);
                              j += lines.length - 2;
                          }
                          if(mutual) {
                              for(var k=0, len=splits.points.length; k<len; ++k) {
                                  point = splits.points[k];
                                  if(!point.equals(vert1)) {
                                      points.push(point);
                                      sourceParts.push(new OpenLayers.Geometry.LineString(points));
                                      if(point.equals(vert2)) {
                                          points = [];
                                      } else {
                                          points = [point.clone()];
                                      }
                                  }
                              }
                          }
                      }
                  }
              }
              if(mutual && sourceParts.length > 0 && points.length > 0) {
                  points.push(vert2.clone());
                  sourceParts.push(new OpenLayers.Geometry.LineString(points));
              }
          } else {
              results = target.splitWith(this, options);
          }
          if(targetParts && targetParts.length > 1) {
              targetSplit = true;
          } else {
              targetParts = [];
          }
          if(sourceParts && sourceParts.length > 1) {
              sourceSplit = true;
          } else {
              sourceParts = [];
          }
          if(targetSplit || sourceSplit) {
              if(mutual) {
                  results = [sourceParts, targetParts];
              } else {
                  results = targetParts;
              }
          }
          return results;
      }