var pic_directory = 'trailpics/';
var map;
var xml;

var initial_zoom = 10;

var returning_via_backbutton = false;
var url;
var returning_lat;
var returning_lng;
var returning_zoom;
var returning_id;
var returning_point;

var entries = [];
var customIcons = [];
var prev_center;


function check_for_returning_via_backbutton() {
	if ( get_cookie("last_referrer") && get_cookie("last_referrer") == document.referrer && get_cookie("returning_lat") && get_cookie("returning_lng") && get_cookie("returning_zoom") && get_cookie("returning_displayed_entry_id") ) {
		
		returning_via_backbutton = true
		returning_lat = get_cookie ( "returning_lat" );
		returning_lng = get_cookie ( "returning_lng" );
		returning_zoom = get_cookie ( "returning_zoom" );
		returning_id = get_cookie ( "returning_displayed_entry_id" );
		//alert("last_lat: " + returning_lat + " last_lng: " + returning_lng + "last_zoom: " + returning_zoom + " last_point: " + returning_id );
		returning_point = new GLatLng(parseFloat(returning_lat), parseFloat(returning_lng));
		url = "scripts/php/gen_xml.php?" + "zoom=" + returning_zoom + "&jour=1&photo=1&trail=0&spec=" + returning_id;
		return;
	}
	//alert("must not have hit the back button" + document.referrer + "   " + get_cookie("last_referrer"));
	return;		
}

function set_new_center_to_cookie(id) {
	var temp_center = map.getCenter();
	var temp_zoom = map.getZoom();
	set_cookie("returning_lat", temp_center.lat());
	set_cookie("returning_lng", temp_center.lng());
	set_cookie("returning_zoom", temp_zoom);
	if(id != -1) {
	set_cookie("returning_displayed_entry_id",id);
	}
}

function gotoLastEntry() {
	clearcookie();
	url = "scripts/php/gen_xml.php?" + "zoom=15&jour=1&photo=1&trail=0&spec=last";
	GDownloadUrl(url, function(data) {
		var xml = GXml.parse(data);
		var entries_xml = xml.documentElement.getElementsByTagName("entry");
		if(entries_xml.length != 1) {
			alert("More than one or no result in specific query")
		}
		var last_entry = new Entry(entries_xml[0]);
		var initial_point = last_entry.point;
				
		map.panTo(initial_point);
		//map.setZoom(initial_zoom);
		set_new_center_to_cookie(last_entry.id);
		document.getElementById("trackus_info").innerHTML=last_entry.info_html;
				document.getElementById("trackus_thumbnail_excerpt").innerHTML=last_entry.html;
	});		
}	

function loadIcons() {
	var icon_directory = 'images/icons/';
	url = "scripts/php/gen_icons.php";
	
	GDownloadUrl(url, function(data) {
	 	var xml = GXml.parse(data);
		var icons_xml = xml.documentElement.getElementsByTagName("icon");
		for (i = 0; i<icons_xml.length; i++) {
			var gicon = new GIcon(); 
			gicon.image = icon_directory + icons_xml[i].getAttribute("image");
			gicon.shadow = icon_directory + icons_xml[i].getAttribute("shadow");
			gicon.iconSize = new GSize(parseInt(icons_xml[i].getAttribute("iconSize_x")), parseInt(icons_xml[i].getAttribute("iconSize_y")));
			gicon.shadowSize = new GSize(parseInt(icons_xml[i].getAttribute("shadowSize_x")), parseInt(icons_xml[i].getAttribute("shadowSize_y")));
			gicon.iconAnchor = new GPoint(parseInt(icons_xml[i].getAttribute("iconAnchor_x")), parseInt(icons_xml[i].getAttribute("iconAnchor_y")));
			gicon.infoWindowAnchor = new GPoint(parseInt(icons_xml[i].getAttribute("infoWindowAnchor_x")), parseInt(icons_xml[i].getAttribute("infoWindowAnchor_y")));
			customIcons[icons_xml[i].getAttribute("id")] = gicon;
		}
	});
}


function createMarker(entry){
    var marker = new GMarker(entry.point,customIcons[entry.marker_icon_id]);
    GEvent.addListener(marker, "click", function() {
		
		map.panTo(entry.point);
        document.getElementById("trackus_info").innerHTML=entry.info_html;
        document.getElementById("trackus_thumbnail_excerpt").innerHTML=entry.html;
		set_new_center_to_cookie(entry.id);
        });
    return marker;
}

function setupMap(requested_initial_entry_id_string) {
    if (GBrowserIsCompatible()) { 
		loadIcons();
		map = new GMap2(document.getElementById("trackus_map"));
		map.addControl(new GLargeMapControl());
		map.enableDoubleClickZoom();
		
		
		if(requested_initial_entry_id_string != null) {
			url = "scripts/php/gen_xml.php?" + "zoom=15&jour=1&photo=1&trail=0&spec=" + requested_initial_entry_id_string;
		}
		else {
			url = "scripts/php/gen_xml.php?" + "zoom=15&jour=1&photo=1&trail=0&spec=last";
		}

		check_for_returning_via_backbutton();

		
		GDownloadUrl(url, function(data) {
 				var xml = GXml.parse(data);
				var entries_xml = xml.documentElement.getElementsByTagName("entry");
				if(entries_xml.length != 1) {
					//alert("More than one or no result in specific query")
					document.getElementById("trackus_thumbnail_excerpt").innerHTML="<h3><br><br><br><br><br><br><br><br>No entries have been made yet.  Come back soon and this page will allow you to see our progress on the map as well as interactively view our journal and photo entries";
				}
				var last_entry = new Entry(entries_xml[0]);
				var initial_point = last_entry.point;
				
				if(returning_via_backbutton) {
					initial_point = returning_point;
					initial_zoom = returning_zoom;
					//alert("returning zoom: " + initial_zoom + "   " + returning_zoom);
				}
					
				map.setCenter(initial_point, parseInt(initial_zoom), G_PHYSICAL_MAP);
				set_new_center_to_cookie(last_entry.id);
				
					
				document.getElementById("trackus_info").innerHTML=last_entry.info_html;
				document.getElementById("trackus_thumbnail_excerpt").innerHTML=last_entry.html;
			
		
		//map.setCenter(new GLatLng(38.0,-78.0), 4, G_PHYSICAL_MAP);
		var mgr;
		mgr = new GMarkerManager(map);
		var loaded_marker_ids = new Array(0);
		
		
		// When map is panned or zoom is changed, clear the polyline, create new polyline for current viewbox and add as overlay
		GEvent.addListener(map, "moveend", function()  {
			if(prev_center != map.getCenter()) {
				set_new_center_to_cookie(-1);
				var polylineEncoder = new PolylineEncoder();
				var request = GXmlHttp.create();
				var bounds = map.getBounds();
				var swcorner = bounds.getSouthWest();
				var necorner = bounds.getNorthEast();
				var height = necorner.lat()-swcorner.lat();
				var width = swcorner.lng() -necorner.lng();
				var zoomlevel = map.getZoom();
				
				var expansion_fraction = 0.3;
				var expanded_swcorner_lat = swcorner.lat() - (expansion_fraction*height);
				var expanded_necorner_lat = necorner.lat()  + (expansion_fraction*height);
				var expanded_swcorner_lng = swcorner.lng()  + (expansion_fraction*width);
				var expanded_necorner_lng = necorner.lng()  - (expansion_fraction*width);
				
				
				var url = "scripts/php/gen_xml.php?" + "slat=" + expanded_swcorner_lat + "&nlat=" + expanded_necorner_lat + "&wlng=" + expanded_swcorner_lng + "&elng=" + expanded_necorner_lng + "&zoom=" + zoomlevel + "&jour=1&photo=1&trail=1";
				
				request.open("GET", url, true);
				request.onreadystatechange = function() {
				
					if(request.readyState == 4) {
						var trail_array = new Array();
						var xmlDoc = request.responseXML;
						var trail_xml = xmlDoc.documentElement.getElementsByTagName("trail");
						if(trail_xml.length != 0) {
							for(var a = 0; a < trail_xml.length; a++) {
								var color = trail_xml[a].getAttribute("color");
								var weight = trail_xml[a].getAttribute("weight");
								var opacity = trail_xml[a].getAttribute("opacity");
								var trail_points_xml = trail_xml[a].getElementsByTagName("trail_point");
						
						//var trail_points_xml = xmlDoc.documentElement.getElementsByTagName("trail_point");
						if(trail_points_xml.length > 1) {
							var trail_points = new Array(0);
							for (var i = 0; i<trail_points_xml.length; i++) {
								trail_points[i] = new GLatLng(parseFloat(trail_points_xml[i].getAttribute("lat")),parseFloat(trail_points_xml[i].getAttribute("lng")));
							}
							var polyline;
							polyline = polylineEncoder.dpEncodeToGPolyline(trail_points, color, weight, opacity);
							trail_array.push(polyline);
						}
					}
				}
							
						var entries_xml = xmlDoc.documentElement.getElementsByTagName("entry");
						var entries = new Array(0);
						if(entries_xml.length != 0) {
							for (var i = 0; i<entries_xml.length; i++) {
								entries[i] = new Entry(entries_xml[i]);
								var loaded = false;
								for(var j = 0; j<loaded_marker_ids.length; j++) {
									if(entries[i].id == loaded_marker_ids[j]) {
										loaded = true;
									}
									if(entries[i].id > loaded_marker_ids[j]) {
										break;
									}
								}
								if(!loaded) {
									mgr.addMarker(createMarker(entries[i]),entries[i].zoom);
									loaded_marker_ids.push(entries[i].id);
									loaded_marker_ids.sort();
								}
							}
						}
						map.clearOverlays();
						if(entries_xml.length != 0) {
							mgr.refresh();
						}
						if(trail_array.length != 0) {
							for(var i = 0; i < trail_array.length; i++) {
							map.addOverlay(trail_array[i]);
							}
						}
					}
				}
				request.send(null);
				prevCenter = map.getCenter();
				
			}
	});
	
	GEvent.trigger(map, "moveend");
	});
	
    }
		if ( get_cookie("last_referrer") && get_cookie("last_referrer") != document.referrer) {
	expandLegend()
	setTimeout("collapseLegend()",3000);
	}
	set_cookie ( "last_referrer", document.referrer);

}





