
var highlightedMagnet = null;

function highlightMagnet(magnet) {
	highlightedMagnet = magnet;
}

function makeMagnet(x,y) {
	return {"x":x,"y":y};
}

function addMagnets(magnet1, magnet2) {
	return {
		"x":magnet1.x+magnet2.x,
		"y":magnet1.y+magnet2.y
	};
}

function drawMagnet(magnet, context) {
	if (magnet == highlightedMagnet) {
		context.fillStyle="rgb(100,100,0)";
	} else {
		context.fillStyle="rgb(0,0,0)";
	}
	context.fillRect(magnet.x-2, magnet.y-2, 5, 5);
}

function magnetContainsPoint(magnet, point) {
	if (point.x >= magnet.x-2) {
		if (point.x <= magnet.x+2) {
			if (point.y >= magnet.y-2) {
				if (point.y <= magnet.y+2) {
					return true;
				}
			}
		}
	}
	return false;
}

var magnetIndex = [];

function clearMagnetIndex() {
	magnetIndex = [];
}

function createMagnetIndex(diagram) {
	clearMagnetIndex();
	for (var i=0; i<diagram.length; i++) {
		if (diagram[i].magnets) {
			for (var j=0; j<diagram[i].magnets.length; j++) {
				var magnet = diagram[i].magnets[j];
				var found = false;
				for (var k=0; !found && k<magnetIndex.length; k++) {
					if (magnetIndex[k] == magnet) {
						found = true;
					}
				}
				if (!found) {
					magnetIndex[magnetIndex.length] = magnet;
				}
			}
		}
	}
}

function getMagnetId(magnet) {
	for (var k=0; k<magnetIndex.length; k++) {
		if (magnetIndex[k] == magnet) {
			return k;
		}
	}
	magnetIndex[magnetIndex.length] = magnet;
	return magnetIndex.length-1;
}

function magnetListToSource(magnets) {	
	var s = "[";
	for (var i=0; i<magnets.length; i++) {
		if (i) {
			s+=",";
		}
		s+="magnetIndex["+getMagnetId(magnets[i])+"]";
	}
	s += "]";
	return s;
}

function magnetIndexToSource() {
	return magnetIndex.toSource();
}

