docs: function HorizontalLStrategy(connector)
  {
  	this.connector = connector;
  	
  	this.destination;
  	
  	this.startSegment;
  	this.endSegment;
  	
  	this.strategyName = "horizontal_L";
  	
  	this.isApplicable = function()
  	{
  		var destMiddle = Math.floor(this.connector.destination.left() + this.connector.destination.width() / 2);
  		var sl = this.connector.source.left();
  		var sw = this.connector.source.width();
  		var dt = this.connector.destination.top();
  		var dh = this.connector.destination.height();
  		var sourceMiddle = Math.floor(this.connector.source.top() + this.connector.source.height() / 2);
  
  		if(destMiddle > sl && destMiddle < sl + sw)
  			return false;
  		if(sourceMiddle > dt && sourceMiddle < dt + dh)
  			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;
  		else
  			return this.endSegment;
  	}
  	
  	this.paint = function()
  	{
  		this.startSegment = this.connector.createSegment();
  		this.endSegment = this.connector.createSegment();
  		
  		var destMiddleX = Math.floor(this.connector.destination.left() + this.connector.destination.width() / 2);
  		var sl = this.connector.source.left();
  		var sw = this.connector.source.width();
  		var dt = this.connector.destination.top();
  		var dh = this.connector.destination.height();
  		
  		this.startSegment.startY = Math.floor(this.connector.source.top() + this.connector.source.height() / 2);
  		
  		// decide which side of the source block to connect to
  		if(Math.abs(destMiddleX - sl) < Math.abs(destMiddleX - (sl + sw)))
  		{
  			// use the left face
  			this.startSegment.orientation = (destMiddleX < sl) ? LEFT : RIGHT;				
  			this.startSegment.startX = sl;
  		}
  		else
  		{
  			// use the right face
  			this.startSegment.orientation = (destMiddleX > (sl + sw)) ? RIGHT : LEFT;
  			this.startSegment.startX = sl + sw;
  		}
  		
  		this.startSegment.length = Math.abs(destMiddleX - this.startSegment.startX);
  		
  		// decide which side of the destination block to connect to
  		if(Math.abs(this.startSegment.startY - dt) < Math.abs(this.startSegment.startY - (dt + dh)))
  		{
  			// use the upper face
  			this.endSegment.orientation = (this.startSegment.startY < dt) ? DOWN : UP;
  			this.endSegment.length = Math.abs(this.startSegment.startY - dt);
  		}
  		else
  		{
  			// use the lower face
  			this.endSegment.orientation = (this.startSegment.startY > (dt + dh)) ? UP : DOWN;
  			this.endSegment.length = Math.abs(this.startSegment.startY - (dt + dh));
  		}
  	}
  }