line = function( fromElement, toElement, params ){
	fromElement = $(fromElement);
	toElement = $(toElement);
	if( typeof params == 'undefined' )
		params = {};

	var layer = $('#page');
	if (fromElement.length == 1 && toElement.length == 1 && layer.length == 1) {
		var fromPos = fromElement.offset();
		var toPos = toElement.offset();

		var layerPos = layer.offset();
		
		var jg = new jsGraphics('page');
		if( params.lineColor == null )
			jg.setColor("#294256");
		else
			jg.setColor(params.lineColor);

		var isRight2Left = fromPos.left > toPos.left;
		var isBottom2Top = fromPos.top > toPos.top;

		var xst, yst, xen, yen;
		if( params.startPosition == 'center' ){
			xst = fromElement.width() / 2 + fromPos.left - layerPos.left;
			yst = fromElement.height() / 2 + fromPos.top - layerPos.top;
			xen = (isRight2Left?toElement.width():0) + toPos.left - layerPos.left;
			yen = (isBottom2Top?25:15) + toPos.top - layerPos.top;
		} else {
			xst = (isRight2Left?-3:fromElement.width()+5) + fromPos.left - layerPos.left;
			yst = (isBottom2Top?10:10) + fromPos.top - layerPos.top;
		}
		xen = (isRight2Left?toElement.width()+5:-5) + toPos.left - layerPos.left;
		yen = (isBottom2Top?25:5) + toPos.top - layerPos.top;
		jg.drawLine(
			xst,
			yst, 
			xen, 
			yen);

		if( params.point != null ){
			if( params.pointColor != null )
				jg.setColor(params.pointColor);
			jg.fillEllipse(xst-3, yst-3, 6, 6);
		}
		jg.paint();
	}
}
