var map;
var ovcontrol;
var ovmap;
var maxzoom = 14;
var zoomall_html;
var gmarkers;
var htmls;
var zooms;
var marker_i;
var cw_icon;

var centerLatitude  = 39.5;
var centerLongitude = -99.7; 
var startZoom       = 2;
var markerHash      = {};
var currentFocus    = false;

var cw_icon              = new GIcon();
cw_icon.image            = "/images/cw-marker2.gif";
cw_icon.shadow           = "/images/shadow50.png";
cw_icon.iconSize         = new GSize(20.0, 34.0);
cw_icon.shadowSize       = new GSize(37.0, 34.0);
cw_icon.iconAnchor       = new GPoint(9.0, 32.0);
cw_icon.infoWindowAnchor = new GPoint(10.0, 34.0);

function init(){
	if (GBrowserIsCompatible()) {
		setupMap();
		refreshData(tag);
	}
}

function setupMap(){
	tileTopo            = new GTileLayer(new GCopyrightCollection(""), 5, 16);
	tileTopo.myBaseURL  = 'http://terraservice.net/ogcmap.ashx?';
	tileTopo.myLayers   = 'DRG';
	tileTopo.myFormat   = 'image/jpeg';
	tileTopo.getTileUrl = CustomGetTileUrl; 
	layer               = [tileTopo];
	topomap             = new GMapType(layer, G_NORMAL_MAP.getProjection(), "Topo");

	map = new GMap2($("map"));		
	map.addControl(new GLargeMapControl());
	map.addControl(new GHierarchicalMapTypeControl());
	map.addMapType(G_PHYSICAL_MAP)
	map.addMapType(topomap);
	map.setCenter(new GLatLng(centerLatitude, centerLongitude), startZoom, G_PHYSICAL_MAP);
}

function refreshData(tag){
	GDownloadUrl("/listings/placemarks/" + tag + ".html", function(doc) { document.getElementById("sidebar-list").innerHTML = doc; } );

	mapname = tag.gsub('-', ' ');
	if(mapname == 'new')
		mapname = "What's New";
	$('map_name').update(mapname + " Job Map");
	$('net_link').writeAttribute("href", "/network-link/" + tag + ".kml")
	$('web_link').writeAttribute("href", "/job-map/" + tag + ".html")
	
	map.clearOverlays();
	currentFocus=false;
	
	gmarkers = [];
	htmls    = [];
	zooms    = [];
	marker_i = 0;

	GDownloadUrl("/listings/placemarks/" + tag + ".xml", function(doc) {
		var newcenter = new GLatLng(centerLatitude, centerLongitude);
		var newzoom   = startZoom;
		var xml       = GXml.parse(doc);
		var places    = xml.documentElement.getElementsByTagName("place");

		for (var i = 0; i < places.length; i++) {
			var current = places[i];

			place_id		= parseFloat(current.getAttribute("id"));
			place_name      = current.getAttribute("name");
			place_lat       = parseFloat(current.getAttribute("lat"));
			place_lng       = parseFloat(current.getAttribute("lng"));
			place_zoom  	= parseFloat(current.getAttribute("zoom"));
			place_info_html = GXml.value(current.getElementsByTagName("infowindow")[0]);
			profile_name 	= current.getAttribute("profile");

		    marker = addMarker(place_lat, place_lng, place_id);
		    markerHash[place_id]={marker:marker,info:place_info_html,visible:true,zoom:place_zoom};
		}
		var markerscenter	= xml.documentElement.getElementsByTagName("markers");
		if (markerscenter.length > 0){
			var mapsize    = new GSize(550, 550);
			newcenter      = new GLatLng(markerscenter[0].getAttribute("centerlat"), markerscenter[0].getAttribute("centerlon"));

			var sw         = new GLatLng(markerscenter[0].getAttribute("swlat"), markerscenter[0].getAttribute("swlon"));
			var ne         = new GLatLng(markerscenter[0].getAttribute("nelat"), markerscenter[0].getAttribute("nelon"));
			var zoombounds = new GLatLngBounds(sw, ne);
			newzoom        = map.getBoundsZoomLevel(zoombounds, mapsize) - 1;

			if (newzoom > 15){newzoom = maxzoom;}
		}
		map.setCenter(newcenter,newzoom);
		map.savePosition();
	});	
}

function addMarker(latitude, longitude, id) {
    var marker = new GMarker(new GLatLng(latitude, longitude), {title:place_name, icon:cw_icon});
    GEvent.addListener(marker, 'click',
        function() {
           focusPoint(id);
        }
    );
	GEvent.addListener(marker, "dblclick", function() {
			movemap(point.lat(),point.lng(),map.getZoom() + 3)
		});

    map.addOverlay(marker);
    return marker;
}

function focusPoint(id){
	if (currentFocus) {
	  $("sidebar-item-"+currentFocus).removeClassName("current");
	  // $("sidebar-item-"+currentFocus).parentNode.parentNode.removeClassName("current");
	}
	$("sidebar-item-"+id).addClassName("current");
 	// $("sidebar-item-"+id).parentNode.parentNode.addClassName("current");

	markerHash[id].marker.openInfoWindowHtml(markerHash[id].info);
	map.panTo(markerHash[id].marker.getPoint());
	currentFocus=id;
}

function zoomin(id){
	if (markerHash[id].zoom > map.getZoom())
		map.setZoom(markerHash[id].zoom)
	else
		map.setZoom(map.getZoom() + 3)
	map.panTo(markerHash[id].marker.getPoint());
}

function myresetzoom(){
	map.returnToSavedPosition()
}

Event.observe(window, 'load', init, false);
Event.observe(window, 'unload', GUnload, false);
//Event.observe(window, 'resize', handleResize, false);