
var diagram = [];

function draw() {
	var canvas = document.getElementById("canvas");
	var ctx = canvas.getContext("2d");
	for (i=0; i<diagram.length; i++) {
		drawShape(diagram[i], ctx);
	}
	for (i=0; i<diagram.length; i++) {
		if (isSelected(diagram[i])) {
			drawSelected(diagram[i], ctx);
		}
	}
}

function redraw() {
	var canvas = document.getElementById("canvas");
	if (canvas) {
		var ctx = canvas.getContext("2d");
		ctx.clearRect(0, 0, 500, 500);
		draw();
	}
}

function getMagnetAtPoint(point) {
	for (i=diagram.length-1; i>=0; i--) {
		if (diagram[i].selected) {
			if (diagram[i].magnets) {
				for (j=0; j<diagram[i].magnets.length; j++) {
					var magnet = diagram[i].magnets[j];
					if (magnetContainsPoint(magnet, point)) {
						return magnet;
					}
				}
			}
		}
	}
	return null;
}

function moveMagnet(oldMagnet, newMagnet) {
	for (i=0; i<diagram.length; i++) {
		moveShapeMagnet(diagram[i], oldMagnet, newMagnet);
	}
}

function diagramToSource() {
	createMagnetIndex(diagram);
	var s = "diagram = [\n";
	for (i=0; i<diagram.length; i++) {
		s += shapeToSource(diagram[i]);
		if (i != diagram.length-1) {
			s += ",\n";
		} else {
			s += "\n";
		}
	}
	s += "];";
	return "magnetIndex = "+magnetIndexToSource()+";\n\n"+s;
}

function deleteSelected() {
	for (var i=diagram.length-1; i>=0; i--) {
		if (diagram[i].selected) {
			for (var j=i; j<diagram.length-1; j++) {
				diagram[j] = diagram[j+1];
			}
			diagram.pop();
		}
	}
	redraw();
}

function groupSelected() {
	var group = [];
	var z = 0;
	for (var i=0; i<diagram.length; i++) {
		if (diagram[i].selected) {
			z = i;
			group[group.length] = diagram[i];
			diagram[i] = null;
		}
	}
	if (!group.length) {
		return;
	}
	diagram[z] = makeGroup(group);
	diagram[z].selected = true;
	for (var i=0; i<diagram.length; i++) {
		if (!diagram[i]) {
			for (j=i; j<diagram.length-1; j++) {
				if (diagram[j] == null) {
					diagram[j] = diagram[j+1];
					diagram[j+1] = null;
				}
			}
			diagram.pop();
			i--;
		}
	}
	redraw();
}

function ungroupSelected() {
	for (var i=0; i<diagram.length; i++) {
		if (diagram[i].selected && diagram[i].type == "group") {
			var parts = diagram[i].children;
			diagram[i] = parts[0];
			diagram[i].selected = true;
			i++;
			for (var j=1; j<parts.length; j++) {
				for (var k=diagram.length-1; k>=i; k--) {
					diagram[k+1] = diagram[k];
				}
				diagram[i] = parts[j];
				diagram[i].selected = true;
				i++;
			}
		}
	}
	redraw();
}

function moveForward() {
	for (var i=diagram.length-2; i>=0; i--) {
		if (diagram[i].selected && !diagram[i+1].selected) {
			var temp = diagram[i];
			diagram[i] = diagram[i+1];
			diagram[i+1] = temp;
		}
	}
	redraw();
}

function moveBackward() {
	for (var i=1; i<diagram.length; i++) {
		if (diagram[i].selected && !diagram[i-1].selected) {
			var temp = diagram[i];
			diagram[i] = diagram[i-1];
			diagram[i-1] = temp;
		}
	}
	redraw();
}

function moveToFront() {
	for (var i=diagram.length-2; i>=0; i--) {
		if (diagram[i].selected) {
			for (var j=i; j<diagram.length-1; j++) {
				if (!diagram[j+1].selected) {
					var temp = diagram[j];
					diagram[j] = diagram[j+1];
					diagram[j+1] = temp;
				}
			}
		}
	}
	redraw();
}

function moveToBack() {
	for (var i=1; i<diagram.length; i++) {
		if (diagram[i].selected) {
			for (var j=i; j>0; j--) {
				if (!diagram[j-1].selected) {
					var temp = diagram[j];
					diagram[j] = diagram[j-1];
					diagram[j-1] = temp;
				}
			}
		}
	}
	redraw();
}

