var tracks = {}, customTracks = {};

var trackTimestamps = {};
var trackPrecision = 25;

function calcTrack(id) {
	var line = [];
	var dt = new Date();
	trackTimestamps[id] = dt.getTime();
	for (var secs = -7200; secs < 7200; secs += trackPrecision) {
		var satInfo = PLib.CustomFind(id, dt.getTime() + secs*1000);
		line.push(new GLatLng(satInfo.latitude, satInfo.longitude));
	}
	return line;
}

function recalcTrack(id) {
	var dt = new Date();
	if (dt.getTime() > trackTimestamps[id] + trackPrecision*1000) {
		var satInfo = PLib.CustomFind(id, dt.getTime() + 7200*1000);
		tracks[id].insertVertex(tracks[id].getVertexCount(), new GLatLng(satInfo.latitude, satInfo.longitude));
		tracks[id].deleteVertex(0);
		trackTimestamps[id] = dt.getTime();
	}
}

function createTrack(id, flash) {
	if (flash) {
		tracks[id] = new GPolyline(calcTrack(id), "#e03030", 1, 1.0);
		map.addOverlay(tracks[id]);
		setTimeout("dimTrack('"+ id + "')", 3000);
	}
	else {
		tracks[id] = new GPolyline(calcTrack(id), "#00dd40", 1, 0.4);
		map.addOverlay(tracks[id]);
	}
}

function destroyTrack(id) {
	map.removeOverlay(tracks[id]);
	delete tracks[id];
}

function highlightTrack(id) {
	if (!tracks[id]) {
		return;
	}
	if (customTracks[id]) {
		tracks[id].setStrokeStyle({ color: customTracks[id], opacity: 1.0 });
	}
	else {
		tracks[id].setStrokeStyle({ color: "#e03030", opacity: 1.0 });
	}
}

function dimTrack(id) {
	if (!tracks[id]) {
		return;
	}
	if (customTracks[id]) {
		tracks[id].setStrokeStyle({ color: customTracks[id], opacity: 0.4 });
	}
	else {
		tracks[id].setStrokeStyle({ color: "#00dd40", opacity: 0.4 });
	}
}

function setTrackPrecision() {
	if (!isNumeric($("input#set_trackprecision")[0].value)) {
		$("input#set_trackprecision")[0].value = "25";
	};
	trackPrecision = parseInt($("input#set_trackprecision")[0].value);
	if (typeof map.addOverlay != "function") {
		return;
	}
	for (var id in tracks) {
		destroyTrack(id);
		createTrack(id);
	}
}

function toggleTracks() {
	if (typeof map.addOverlay != "function") {
		return;
	}
	if ($("input#set_showtracks")[0].checked) {
		for (var id in markers) {
			createTrack(id);
		}
	}
	else {
		for (var id in tracks) {
			destroyTrack(id);
		}
	}
}
