docs: function(geometry, options) {
          var results = null;
          var mutual = options && options.mutual;
          var splits, sourceLine, sourceLines, sourceSplit, targetSplit;
          var sourceParts = [];
          var targetParts = [geometry];
          for(var i=0, len=this.components.length; i<len; ++i) {
              sourceLine = this.components[i];
              sourceSplit = false;
              for(var j=0; j < targetParts.length; ++j) { 
                  splits = sourceLine.split(targetParts[j], options);
                  if(splits) {
                      if(mutual) {
                          sourceLines = splits[0];
                          for(var k=0, klen=sourceLines.length; k<klen; ++k) {
                              if(k===0 && sourceParts.length) {
                                  sourceParts[sourceParts.length-1].addComponent(
                                      sourceLines[k]
                                  );
                              } else {
                                  sourceParts.push(
                                      new OpenLayers.Geometry.MultiLineString([
                                          sourceLines[k]
                                      ])
                                  );
                              }
                          }
                          sourceSplit = true;
                          splits = splits[1];
                      }
                      if(splits.length) {
                          // splice in new target parts
                          splits.unshift(j, 1);
                          Array.prototype.splice.apply(targetParts, splits);
                          break;
                      }
                  }
              }
              if(!sourceSplit) {
                  // source line was not hit
                  if(sourceParts.length) {
                      // add line to existing multi
                      sourceParts[sourceParts.length-1].addComponent(
                          sourceLine.clone()
                      );
                  } else {
                      // create a fresh multi
                      sourceParts = [
                          new OpenLayers.Geometry.MultiLineString(
                              sourceLine.clone()
                          )
                      ];
                  }
              }
          }
          if(sourceParts && sourceParts.length > 1) {
              sourceSplit = true;
          } else {
              sourceParts = [];
          }
          if(targetParts && targetParts.length > 1) {
              targetSplit = true;
          } else {
              targetParts = [];
          }
          if(sourceSplit || targetSplit) {
              if(mutual) {
                  results = [sourceParts, targetParts];
              } else {
                  results = targetParts;
              }
          }
          return results;
      }