code: function(features) {
          if(!features) {
              features = this.layer.features;
          }
          this.events.triggerEvent("start", {features:features});
          var remote = this.layer.projection;
          var local = this.layer.map.getProjectionObject();
          if(!local.equals(remote)) {
              var len = features.length;
              var clones = new Array(len);
              var orig, clone;
              for(var i=0; i<len; ++i) {
                  orig = features[i];
                  clone = orig.clone();
                  clone.fid = orig.fid;
                  clone.state = orig.state;
                  if(orig.url) {
                      clone.url = orig.url;
                  }
                  clone._original = orig;
                  clone.geometry.transform(local, remote);
                  clones[i] = clone;
              }
              features = clones;
          }
          this.layer.protocol.commit(features, {
              callback: this.onCommit,
              scope: this
          });
      }
docs: APIMethod: save
  Tell the layer protocol to commit unsaved features.  If the layer
  projection differs from the map projection, features will be
  transformed into the layer projection before being committed.
  
  Parameters:
  features - {Array} Features to be saved.  If null, then default is all
  features in the layer.  Features are assumed to be in the map
  projection.