
var line = {
	"draw" : function(line, context) {
		p0 = line.magnets[0];
		p1 = line.magnets[1];
		p2 = line.magnets[2];
		context.lineWidth=line.width;
		context.strokeStyle=line.color;
		context.lineCap='round';
		context.beginPath();
		context.moveTo(p1.x, p1.y);
		context.lineTo(p2.x, p2.y);
		context.closePath();
		context.stroke();
	},

	"drawSelected" : function(line, context) {
		for (var i in line.magnets) {
			drawMagnet(line.magnets[i], context);
		}
	},

	"containsPoint" : function(line, point) {
		p0 = line.magnets[0];
		p1 = line.magnets[1];
		p2 = line.magnets[2];
		minx = p1.x<p2.x ? p1.x : p2.x;
		miny = p1.y<p2.y ? p1.y : p2.y;
		maxx = p1.x>p2.x ? p1.x : p2.x;
		maxy = p1.y>p2.y ? p1.y : p2.y;
		if (point.x >= minx && point.x <= maxx) {
			if (point.y >= miny && point.y <= maxy) {
				if (p2.x == p1.x) {
					if (point.x == p2.x) {
						return true;
					}
				} else {
					slope = (p2.y-p1.y)/(p2.x-p1.x);
					intercept = p2.y-slope*p2.x;
					target_y = slope*point.x+intercept;
					if (Math.abs(point.y-target_y) < 5) {
						return true;
					}
				}
			}
		}
		return false;
	},

	"moveMagnet" : function(line, oldMagnet, newMagnet) {
		p0 = line.magnets[0];
		p1 = line.magnets[1];
		p2 = line.magnets[2];
		if (oldMagnet == p0) {
			var dx = p2.x - p1.x;
			var dy = p2.y - p1.y;
			p0.x = newMagnet.x;
			p0.y = newMagnet.y;
			p1.x = newMagnet.x-(dx/2);
			p1.y = newMagnet.y-(dy/2);
			p2.x = newMagnet.x+(dx/2);
			p2.y = newMagnet.y+(dy/2);
		} else if (oldMagnet == p1) {
			p1.x = newMagnet.x;
			p1.y = newMagnet.y;
			p0.x = (p1.x+p2.x)/2;
			p0.y = (p1.y+p2.y)/2;
		} else if (oldMagnet == p2) {
			p2.x = newMagnet.x;
			p2.y = newMagnet.y;
			p0.x = (p1.x+p2.x)/2;
			p0.y = (p1.y+p2.y)/2;
		}
	},

	"showEditorPanel" : function(line, panel) {
		var update = function() {
			line.color = colorInput.value;
			line.width = widthInput.value;
			redraw();
		};

		var colorLabel = document.createElement("span");
		colorLabel.appendChild(document.createTextNode("color: "));
		var colorInput = document.createElement("input");
		colorInput.value = line.color;
		colorInput.onchange = update;
		panel.appendChild(colorLabel);
		panel.appendChild(colorInput);
		panel.appendChild(document.createElement("p"));

		var widthLabel = document.createElement("span");
		widthLabel.appendChild(document.createTextNode("width: "));
		var widthInput = document.createElement("input");
		widthInput.value = line.width;
		widthInput.onchange = update;
		panel.appendChild(widthLabel);
		panel.appendChild(widthInput);
	},

	"toSource" : function(line) {
		var s = "  {\n    type:\"line\",\n    color:\"";
		s += line.color + "\",\n    width:\"";
		s += line.width;
		s += "\",\n    magnets:"+magnetListToSource(line.magnets)+"\n  }";
		return s;
	}
}

