docs: function(vertex, opt) {
          var viz = this.viz;
          var options = $.merge(this.options, viz.controller, opt);
          var v = ($.type(vertex[0]) == 'string')? [vertex] : vertex;
          var i, that, adj;
          switch(options.type) {
              case 'nothing':
                  for(i=0; i<v.length; i++)   viz.graph.removeAdjacence(v[i][0], v[i][1]);
                  break;
              
              case 'replot':
                  this.removeEdge(v, { type: 'nothing' });
                  viz.refresh(true);
                  break;
              
              case 'fade:seq': case 'fade':
                  that = this;
                  //set alpha to 0 for edges to remove.
                  for(i=0; i<v.length; i++) {
                      adj = viz.graph.getAdjacence(v[i][0], v[i][1]);
                      if(adj) {
                          adj.setData('alpha', 0,'end');
                      }
                  }
                  viz.fx.animate($.merge(options, {
                      modes: ['edge-property:alpha'],
                      onComplete: function() {
                          that.removeEdge(v, { type: 'nothing' });
                          viz.reposition();
                          viz.fx.animate($.merge(options, {
                              modes: ['linear']
                          }));
                      }
                  }));
                  break;
              
              case 'fade:con':
                  that = this;
                  //set alpha to 0 for nodes to remove. Tag them for being ignored when computing positions.
                  for(i=0; i<v.length; i++) {
                      adj = viz.graph.getAdjacence(v[i][0], v[i][1]);
                      if(adj) {
                          adj.setData('alpha',0 ,'end');
                          adj.ignore = true;
                      }
                  }
                  viz.reposition();
                  viz.fx.animate($.merge(options, {
                      modes: ['edge-property:alpha', 'linear'],
                      onComplete: function() {
                          that.removeEdge(v, { type: 'nothing' });
                      }
                  }));
                  break;
              
              case 'iter':
                  that = this;
                  viz.fx.sequence({
                      condition: function() { return v.length != 0; },
                      step: function() { that.removeEdge(v.shift(), { type: 'nothing' }); viz.labels.clearLabels(); },
                      onComplete: function() { options.onComplete(); },
                      duration: Math.ceil(options.duration / v.length)
                  });
                  break;
                  
              default: this.doError();
          }
      }