
ElasticLine = function(oParams)
{
	this.init(oParams);
	ElasticLine.instances.push(this);
}

ElasticLine.instances = [];

ElasticLine.draw = function()
{
	for (var i = 0; i < ElasticLine.instances.length; i++)
	{
		ElasticLine.instances[i].draw();
	}
}

ElasticLine.redraw = ElasticLine.draw;

ElasticLine.prototype.init = function(oParams)
{
	this.canvasId = oParams.canvasId;
	// this.canvas = document.getElementById(this.canvasId);
	this.strokeStyle = oParams.strokeStyle;
	this.lineType = oParams.lineType;
	this.linePoints = oParams.linePoints;

	if (this.lineType == 'bezier')
	{
		this.controlPoints = oParams.controlPoints;
	}

	// this.ctx = null;
	// if (!this.ctx && this.canvas.getContext) this.ctx = this.canvas.getContext('2d');
}

ElasticLine.prototype.calculatePoints = function (aPoints)
{
	var canvas = document.getElementById(this.canvasId);
	var tmpPoints = new Array();
	var _x = 0;
	var _y = 0;

	for (var i = 0; i < aPoints.length ; i++)
	{
		if (aPoints[i].xFixed) {
			_x = aPoints[i].x;
		}
		if (aPoints[i].xRatio) {
			_x = canvas.offsetWidth * aPoints[i].xRatio;
		}
		if (aPoints[i].xFunc) {
			_x = aPoints[i].xFunc(canvas.offsetWidth, canvas.offsetHeight);
		}
		if (aPoints[i].yFixed) {
			_y = aPoints[i].y;
		}
		if (aPoints[i].yRatio) {
			_y = canvas.offsetHeight * aPoints[i].yRatio;
		}
		if (aPoints[i].yFunc) {
			_y = aPoints[i].yFunc(canvas.offsetWidth, canvas.offsetHeight);
		}

		// alert(_x + ',' + _y);
		tmpPoints.push({x : _x, y : _y});
	}

	return tmpPoints;
}

ElasticLine.prototype.drawStraightLine = function()
{
	var linePoints = this.calculatePoints(this.linePoints);

	var canvas = document.getElementById(this.canvasId);
	if (canvas.getContext)
	{
		var ctx = canvas.getContext('2d');
		ctx.strokeStyle = this.strokeStyle;
		ctx.beginPath();
		ctx.moveTo(linePoints[0].x, linePoints[0].y);
		for (var i = 1; i < linePoints.length; i++)
		{
			ctx.lineTo(linePoints[i].x, linePoints[i].y);
		}
		ctx.stroke();
	}
}

ElasticLine.prototype.drawBezierLine = function()
{
	var linePoints = this.calculatePoints(this.linePoints);
	var controlPoints = this.calculatePoints(this.controlPoints);

	var canvas = document.getElementById(this.canvasId);
	if (canvas.getContext)
	{
		var ctx = canvas.getContext('2d');
		ctx.strokeStyle = this.strokeStyle;
		this.ctx.beginPath();
		this.ctx.moveTo(linePoints[0].x, linePoints[0].y);
		this.ctx.bezierCurveTo
		(
			controlPoints[0].x,
			controlPoints[0].y,
			controlPoints[1].x,
			controlPoints[1].y,
			linePoints[1].x,
			linePoints[1].y
		);
		this.ctx.stroke();
	}
}

ElasticLine.prototype.draw = function()
{
	switch (this.lineType)
	{
		case "bezier"   : this.drawBezierLine();   break;
		case "straight" : this.drawStraightLine(); break;
	}
}
