// Had to make this global to integrate with Youtube Player API. *sigh*
var map;
/**
* Set up the map.
*/
function setupMap() {
map = new GMap2(document.getElementById("map"));
map.addControl(new GSmallMapControl());
// Centers the map around nebraska, zoomed out to fit the entire USA.
// In the future we can add ip geocoding to center it a the user's location.
map.setCenter(new GLatLng(41, -100), 4);
return map;
};
/**
* Creates an icon.
*/
function createIcon() {
var icon = new GIcon();
icon.image = "http://www.google.org/images/carmap/leaf.png";
icon.iconSize = new GSize(28, 11);
icon.iconAnchor = new GPoint(15, 15);
icon.infoWindowAnchor = new GPoint(10, 10);
return icon;
};
function makeInfoTabContent(markerXmlNode) {
var infoHtml = [];
var image = markerXmlNode.getAttribute("image");
if (image) {
infoHtml.push("");
}
var site = markerXmlNode.getAttribute("owner_website");
if (site != null && site != "") {
infoHtml.push("");
}
infoHtml.push(markerXmlNode.getAttribute("owner"));
if (site != null && site != "") {
infoHtml.push("");
}
infoHtml.push("
");
infoHtml.push(markerXmlNode.getAttribute("location"));
infoHtml.push("
");
infoHtml.push(markerXmlNode.getAttribute("date"));
infoHtml.push("");
return infoHtml.join('');
};
function makeConverterTabContent(markerXmlNode) {
var infoHtml = [];
var image = markerXmlNode.getAttribute("image");
if (image) {
infoHtml.push("");
}
var converter = markerXmlNode.getAttribute("converter");
var site = markerXmlNode.getAttribute("converter_website");
if (converter != null && converter != "" &&
converter != "Did it themselves!") {
infoHtml.push("By: ");
}
if (site != null && site != "") {
infoHtml.push("");
}
infoHtml.push(markerXmlNode.getAttribute("converter"));
if (site != null && site != "") {
infoHtml.push("");
}
infoHtml.push("
");
infoHtml.push(markerXmlNode.getAttribute("desc"));
return infoHtml.join('');
};
/**
* Create an tab to display a larger car image.
* (Currently not used because map is too small)
*/
function makeImageTabContent(markerXmlNode) {
var largeImage = markerXmlNode.getAttribute("image_large");
if (largeImage == null)
return null;
var imageHtml = [];
imageHtml.push("");
return imageHtml.join('');
};
function openInfoWindow(marker, infoContent, converterContent, imageContent) {
var infoOptions = { maxWidth: 80 , maxHeight: 60 };
var tabs = [];
tabs.push(new GInfoWindowTab("Owner", infoContent));
tabs.push(new GInfoWindowTab("Car Info", converterContent));
if (imageContent != null) {
tabs.push(new GInfoWindowTab("Image", imageContent));
}
marker.openInfoWindowTabsHtml(tabs, infoOptions);
};
function createMarker(markerXmlNode, icon) {
var point = new GLatLng(parseFloat(markerXmlNode.getAttribute("lat")),
parseFloat(markerXmlNode.getAttribute("lng")));
var marker = new GMarker(point, icon);
var infoContent = makeInfoTabContent(markerXmlNode);
var converterContent = makeConverterTabContent(markerXmlNode);
GEvent.addListener(marker, "click", function() {
openInfoWindow(marker, infoContent, converterContent, null);
});
return marker;
};
function createMarkers(mgr, data, icon) {
var zoom0 = [];
var zoom1 = [];
var zoom2 = [];
var zoomDefault = []; // 3 is the default.
var zoom4 = [];
var zoom5 = [];
var zoom6 = [];
var zoom7 = [];
var xml = GXml.parse(data);
var markers = xml.documentElement.getElementsByTagName("marker");
for (var i = 0; i < markers.length; i++) {
var markerXmlNode = markers[i];
var marker = createMarker(markerXmlNode, icon);
var minZoom = markerXmlNode.getAttribute("minzoom");
if (minZoom == "0") {
zoom0.push(marker);
} else if (minZoom == "1") {
zoom1.push(marker);
} else if (minZoom == "2") {
zoom2.push(marker);
} else if (minZoom == "4") {
zoom4.push(marker);
} else if (minZoom == "5") {
zoom5.push(marker);
} else if (minZoom == "6") {
zoom6.push(marker);
} else if (minZoom == "7") {
zoom7.push(marker);
} else {
// default is 3
zoomDefault.push(marker);
}
}
// Add markers to manager
mgr.addMarkers(zoom0, 0);
mgr.addMarkers(zoom1, 1);
mgr.addMarkers(zoom2, 2);
mgr.addMarkers(zoomDefault, 3);
mgr.addMarkers(zoom4, 4);
mgr.addMarkers(zoom5, 5);
mgr.addMarkers(zoom6, 6);
mgr.addMarkers(zoom7, 7);
mgr.refresh();
};
function loadAndSetupMarkers(map, icon) {
var mgr = new MarkerManager(map);
GDownloadUrl("ecarMapData.xml", function(data, responseCode) {
createMarkers(mgr, data, icon);
map.addControl(new SlideshowControl(), new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(7, 7)));
});
return mgr;
};
function handleJSONLoad(json) {
var bounds = new GLatLngBounds();
if(json.feed.entry[0]["gsx$" + param_rankColumn]) {
usingRank = true;
json.feed.entry.sort(cm_sortRows);
}
for (var i = 0; i < json.feed.entry.length; i++) {
var entry = json.feed.entry[i];
if(entry["gsx$" + param_latColumn]) {
var lat = parseFloat(entry["gsx$" + param_latColumn].$t);
var lng = parseFloat(entry["gsx$" + param_lngColumn].$t);
var point = new GLatLng(lat,lng);
var html = "