docs: function VerticalLStrategy(connector)
  {
  	this.connector = connector;
  	
  	this.startSegment;
  	this.endSegment;
  	
  	this.strategyName = "vertical_L";
  	
  	this.isApplicable = function()
  	{
  		var sourceMiddle = Math.floor(this.connector.source.left() + this.connector.source.width() / 2);
  		var dl = this.connector.destination.left();
  		var dw = this.connector.destination.width();
  		var st = this.connector.source.top();
  		var sh = this.connector.source.height();
  		var destMiddle = Math.floor(this.connector.destination.top() + this.connector.destination.height() / 2);
  
  		if(sourceMiddle > dl && sourceMiddle < dl + dw)
  			return false;
  		if(destMiddle > st && destMiddle < st + sh)
  			return false;
  		return true;
  	}
  	/**
  	 * Chooses the longest segment as the "middle" segment.
  	 */
  	this.getMiddleSegment = function() {
  		if(this.startSegment.length > this.endSegment.length)
  			return this.startSegment;
  		return this.endSegment;
  	}
  	this.paint = function() {
  		this.startSegment = this.connector.createSegment();
  		this.endSegment = this.connector.createSegment();
  		var destMiddleY = Math.floor(this.connector.destination.top() + this.connector.destination.height() / 2);
  		var dl = this.connector.destination.left();
  		var dw = this.connector.destination.width();
  		var st = this.connector.source.top();
  		var sh = this.connector.source.height();
  		this.startSegment.startX = Math.floor(this.connector.source.left() + this.connector.source.width() / 2);
  		// decide which side of the source block to connect to
  		if(Math.abs(destMiddleY - st) < Math.abs(destMiddleY - (st + sh))) {
  			// use the upper face
  			this.startSegment.orientation = (destMiddleY < st) ? UP : DOWN;
  			this.startSegment.startY = st;
  		} else {
  			// use the lower face
  			this.startSegment.orientation = (destMiddleY > (st + sh)) ? DOWN : UP;
  			this.startSegment.startY = st + sh;
  		}
  		
  		this.startSegment.length = Math.abs(destMiddleY - this.startSegment.startY);
  		
  		// decide which side of the destination block to connect to
  		if(Math.abs(this.startSegment.startX - dl) < Math.abs(this.startSegment.startX - (dl + dw)))
  		{
  			// use the left face
  			this.endSegment.orientation = (this.startSegment.startX < dl) ? RIGHT : LEFT;
  			this.endSegment.length = Math.abs(this.startSegment.startX - dl);
  		}
  		else
  		{
  			// use the right face
  			this.endSegment.orientation = (this.startSegment.startX > dl + dw) ? LEFT : RIGHT;
  			this.endSegment.length = Math.abs(this.startSegment.startX - (dl + dw));
  		}
  	}
  }