docs: function(layer, options) {
          options = options || {};
          this.layer = layer;
          this.vertices = [];
          this.virtualVertices = [];
          this.virtualStyle = OpenLayers.Util.extend({},
              this.layer.style ||
              this.layer.styleMap.createSymbolizer(null, options.vertexRenderIntent)
          );
          this.virtualStyle.fillOpacity = 0.3;
          this.virtualStyle.strokeOpacity = 0.3;
          this.deleteCodes = [46, 68];
          this.mode = OpenLayers.Control.ModifyFeature.RESHAPE;
          OpenLayers.Control.prototype.initialize.apply(this, [options]);
          if(!(OpenLayers.Util.isArray(this.deleteCodes))) {
              this.deleteCodes = [this.deleteCodes];
          }
          
          // configure the drag handler
          var dragCallbacks = {
              down: function(pixel) {
                  this.vertex = null;
                  var feature = this.layer.getFeatureFromEvent(
                          this.handlers.drag.evt);
                  if (feature) {
                      this.dragStart(feature);
                  } else if (this.clickout) {
                      this._unselect = this.feature;
                  }
              },
              move: function(pixel) {
                  delete this._unselect;
                  if (this.vertex) {
                      this.dragVertex(this.vertex, pixel);
                  }
              },
              up: function() {
                  this.handlers.drag.stopDown = false;
                  if (this._unselect) {
                      this.unselectFeature(this._unselect);
                      delete this._unselect;
                  }
              },
              done: function(pixel) {
                  if (this.vertex) {
                      this.dragComplete(this.vertex);
                  }
              }
          };
          var dragOptions = {
              documentDrag: this.documentDrag,
              stopDown: false
          };
  
          // configure the keyboard handler
          var keyboardOptions = {
              keydown: this.handleKeypress
          };
          this.handlers = {
              keyboard: new OpenLayers.Handler.Keyboard(this, keyboardOptions),
              drag: new OpenLayers.Handler.Drag(this, dragCallbacks, dragOptions)
          };
      }