Line.Inherits(Shape);
function Line(name){
	if(typeof(name) == "undefined"){
		name = "Line";
	}
	
	this.xArray = new Array();
	this.yArray = new Array();
	
	this.point = new Array();
	
	this.Inherits(Shape, name);
}

Line.prototype.constructor = function(point1, point2){
	if(point1.length == 0 || point2.length == 0) return;
	
	var x1 = parseInt(point1.x);
	var x2 = parseInt(point2.x);
	var y1 = parseInt(point1.y);
	var y2 = parseInt(point2.y);
	
	var steep = Math.abs(y2-y1) > Math.abs(x2-x1);
	if(steep == true){
		var xTemp = x1;
		x1 = y1;
		y1 = xTemp;
		
		xTemp = x2;
		x2 = y2;
		y2 = xTemp;
	}
	
	if(x1 > x2){
		xTemp = x1;
		x1 = x2;
		x2 = xTemp;
		
		xTemp = y1;
		y1 = y2;
		y2 = xTemp;
	}
	
	var dx = x2 - x1;
	var dy = Math.abs(y2-y1);
	var error = -dx / 2;
	
	var yStep;
	var y = y1;
	if(y1 < y2){
		yStep = 1;
	}else{
		yStep = -1;
	}
	
	for(var i=x1; i<=x2; i++){
		if(steep == true){
			var point = new Point();
			point.constructor(y, i);
			this.point.push(point);
		}else{
			var point = new Point();
			point.constructor(i, y);
			this.point.push(point);
		}
		error = error + dy;
		if(error > 0){
			y = y + yStep;
			error = error - dx;
		}
	}
}

Line.prototype.define = function(x1, y1, x2, y2){
	x1 = parseInt(x1);
	x2 = parseInt(x2);
	y1 = parseInt(y1);
	y2 = parseInt(y2);
	
	var steep = Math.abs(y2-y1) > Math.abs(x2-x1);
	if(steep == true){
		var xTemp = x1;
		x1 = y1;
		y1 = xTemp;
		
		xTemp = x2;
		x2 = y2;
		y2 = xTemp;
	}
	
	if(x1 > x2){
		xTemp = x1;
		x1 = x2;
		x2 = xTemp;
		
		xTemp = y1;
		y1 = y2;
		y2 = xTemp;
	}
	
	var dx = x2 - x1;
	var dy = Math.abs(y2-y1);
	var error = -dx / 2;
	
	var yStep;
	var y = y1;
	if(y1 < y2){
		yStep = 1;
	}else{
		yStep = -1;
	}
	
	for(var i=x1; i<=x2; i++){
		if(steep == true){
			var point = new Point();
			point.constructor(y, i);
			this.point.push(point);
		}else{
			var point = new Point();
			point.constructor(i, y);
			this.point.push(point);
		}
		error = error + dy;
		if(error > 0){
			y = y + yStep;
			error = error - dx;
		}
	}
}

Line.prototype.draw = function(size, color){
	size = (typeof(size) == "undefined") ? this.size : parseInt(size);
	color = (typeof(color) == "undefined") ? this.color : color;
	
	if(this.point.length == 0) return;
	
	var lineDiv = document.createElement("div");
	
	var len = this.point.length;
	for(var i=0; i<len; i++){
		lineDiv.appendChild(this.point[i].draw(size, color));
	}
	return lineDiv;
}

Line.prototype.draw1 = function(x1, y1, x2, y2, size, color){
	x1 = parseInt(x1);
	x2 = parseInt(x2);
	y1 = parseInt(y1);
	y2 = parseInt(y2);
	
	var steep = Math.abs(y2-y1) > Math.abs(x2-x1);
	if(steep == true){
		var xTemp = x1;
		x1 = y1;
		y1 = xTemp;
		
		xTemp = x2;
		x2 = y2;
		y2 = xTemp;
	}
	
	if(x1 > x2){
		xTemp = x1;
		x1 = x2;
		x2 = xTemp;
		
		xTemp = y1;
		y1 = y2;
		y2 = xTemp;
	}
	
	var dx = x2 - x1;
	var dy = Math.abs(y2-y1);
	var error = -dx / 2;
	
	var yStep;
	var y = y1;
	if(y1 < y2){
		yStep = 1;
	}else{
		yStep = -1;
	}
	
	var lineDiv = document.createElement("div");
	for(var i=x1; i<=x2; i++){
		if(steep == true){
			lineDiv.appendChild(this.drawPixel(y, i, size, color));
		}else{
			lineDiv.appendChild(this.drawPixel(i, y, size, color));
		}
		error = error + dy;
		if(error > 0){
			y = y + yStep;
			error = error - dx;
		}
	}
	
	return lineDiv;
	
}