
group = {
	"draw" : function(group, context) {
		for (var i=0; i<group.children.length; i++) {
			var child = group.children[i];
			drawShape(child, context);
		}
	},

	"containsPoint" : function(group, point) {
		for (var i=0; i<group.children.length; i++) {
			var child = group.children[i];
			if (containsPoint(child, point)) {
				return true;
			}
		}
		return false;
	},

	"moveMagnet" : function(group, oldMagnet, newMagnet) {
		p0 = group.magnets[0];
		p1 = group.magnets[1];
		p2 = group.magnets[2];
		p3 = group.magnets[3];
		p4 = group.magnets[4];
		if (oldMagnet == p0) {
			var dx = newMagnet.x - oldMagnet.x;
			var dy = newMagnet.y - oldMagnet.y;
			for (var i=0; i<group.children.length; i++) {
				var child = group.children[i];
				moveShapeMagnet(child, child.magnets[0],
					addMagnets(child.magnets[0], makeMagnet(dx,dy)));
			}
			for (var i=0; i<group.magnets.length; i++) {
				group.magnets[i].x += dx;
				group.magnets[i].y += dy;
			}
		}
	},

	"drawSelected" : rectangle.drawSelected,

	"toSource" : function(group) {
		var s = "  {\n";
		s += "    type: \"group\",\n";
		s += "    magnets: "+magnetListToSource(group.magnets)+",\n";
		s += "    children: [\n";
		for (var i=0; i<group.children.length; i++) {
			s += shapeToSource(group.children[i]);
			if (i == group.children.length-1) {
				s += "\n";
			} else {
				s += ",\n";
			}
		}
		s += "    ]\n";
		s += "  }";
		return s;
	}
}

function makeGroup(shapes) {
	var minx = 0;
	var maxx = 0;
	var miny = 0;
	var maxy = 0;
	var found = false;
	for (var i=0; i<shapes.length; i++) {
		if (shapes[i].magnets) {
			for (var j=0; j<shapes[i].magnets.length; j++) {
				magnet = shapes[i].magnets[j];
				if (found) {
					if (magnet.x < minx) { minx = magnet.x; }
					if (magnet.y < miny) { miny = magnet.y; }
					if (magnet.x > maxx) { maxx = magnet.x; }
					if (magnet.y > maxy) { maxy = magnet.y; }
				} else {
					minx = maxx = magnet.x;
					miny = maxy = magnet.y;
					found = true;
				}
			}
		}
	}
	var p0 = makeMagnet((minx+maxx)/2, (miny+maxy)/2);
	var p1 = makeMagnet(minx, miny);
	var p2 = makeMagnet(maxx, miny);
	var p3 = makeMagnet(minx, maxy);
	var p4 = makeMagnet(maxx, maxy);
	return {
		"type" : "group",
		"children" : shapes,
		"magnets" : [p0, p1, p2, p3, p4]
	};
}

