var map;
var points = [];
var overYears	=	"(1950 to Current)";

var FScaleColors = new Array();

FScaleColors[0] = "#FFFFFF";
FScaleColors[1] = "#dddddd";
FScaleColors[2] = "#ffce64";
FScaleColors[3] = "#ffb108";
FScaleColors[4] = "#b85600";
FScaleColors[5] = "#990000";
FScaleColors[9] = "#53ca75";

var deselectCurrent = function() {};
 
var baseIcon = new GIcon();
	baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
	baseIcon.iconSize = new GSize(20, 34);
	baseIcon.iconAnchor = new GPoint(10, 34);
	baseIcon.infoWindowAnchor = new GPoint(9, 2);
	baseIcon.infoShadowAnchor = new GPoint(18, 25);
				
function createMarker(point, infoTabs, icon) {
	  var marker = new GMarker(point, icon);
	
	  // Show this marker's index in the info window when it is clicked.
	  GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowTabsHtml(infoTabs);
	  });
	
	  return marker;
}

function initializePoint(tornado, datatype) {
	var T_StartLat	=	parseFloat(tornado.getAttribute("T_StartLat"));
	var T_StartLon	=	parseFloat(tornado.getAttribute("T_StartLon"));
	if (datatype == "HST") {
		var T_EndLat	=	parseFloat(tornado.getAttribute("T_EndLat"));
		var T_EndLon	=	parseFloat(tornado.getAttribute("T_EndLon"));
	}
	var point = new GLatLng(T_StartLat,T_StartLon);
	points.push(point);
	
	var icon = new GIcon(baseIcon);
	var FS	=	tornado.getAttribute("FScale");
	
	var listItem = document.createElement('li');
	//alert (T_StartLat+", "+T_StartLon+", "+ FS);
	if (FS == -1) {
		var FSIcon	=	'9';
		listItem.id = "BoxF" + FSIcon;
		var listItemLink = listItem.appendChild(document.createElement('a'));
		listItemLink.innerHTML = "<strong>" + tornado.getAttribute("T_State") + ":</strong> " + unescape(tornado.getAttribute('title'));
		
	} else {
		var FSIcon	= 	FS;
		listItem.id = "BoxF" + FSIcon;
		var listItemLink = listItem.appendChild(document.createElement('a'));
		/* listItemLink.innerHTML = "<strong>F" + FS + ":</strong> " + unescape(tornado.getAttribute('title')); */
		listItemLink.innerHTML = "<strong>" + tornado.getAttribute("T_State") + ":</strong> " + unescape(tornado.getAttribute('title'));
	}
	listItemLink.href = "#";
	
	//icon.image = "../images/tornadoicon-web-F" + FSIcon + ".png";
  	icon.image = "../images/marker-F" + FSIcon + ".png";
	//Add marker
	var marker = new GMarker(point, icon);
	
	//Add Path
	if (datatype == "HST") {
		var polyline = new GPolyline([
			new GLatLng(T_StartLat,T_StartLon),
			new GLatLng(T_EndLat,T_EndLon)
		], FScaleColors[FS], FS*3);
		map.addOverlay(polyline);
	}
	
	if (datatype == "HST") {
		var focusPoint = function() {
			deselectCurrent();
			listItem.className = 'current';
			deselectCurrent = function() { listItem.className = ''; }
			marker.openInfoWindowHtml("<div id='zoom'><iframe frameborder='0' width='320' height='360' src='../infowindows/zoom/?Slat=" + T_StartLat + "&amp;Slon=" + T_StartLon + "&amp;Elat=" + T_EndLat + "&amp;Elon=" + T_EndLon + "&amp;comment=" + tornado.getAttribute('description') + "&amp;title=" + tornado.getAttribute('title') + "&amp;FSIcon=" + FSIcon + "&amp;datatype=HST'></iframe></div>");  
			map.panTo(point);
			return false;
		}
	} else {
		var focusPoint = function() {
			deselectCurrent();
			listItem.className = 'current';
			deselectCurrent = function() { listItem.className = ''; }
			marker.openInfoWindowHtml("<div id='zoom'><iframe frameborder='0' width='320' height='360' src='../infowindows/zoom/?Slat=" + T_StartLat + "&amp;Slon=" + T_StartLon + "&amp;comment=" + tornado.getAttribute('T_Comment') + "&amp;title=" + tornado.getAttribute('title') + "&amp;FSIcon=" + FSIcon + "&amp;FSIcon=" + FSIcon + "&amp;datatype=NOW'></iframe></div>");  
			map.panTo(point);
			return false;
		}
	}

	GEvent.addListener(marker, 'click', focusPoint);	
	listItemLink.onclick = focusPoint;
  

	document.getElementById('sidebar-list').appendChild(listItem);
  

	map.addOverlay(marker);
}

function init() {

	
	document.getElementById('button-sidebar-hide').onclick = function() { return changeBodyClass('sidebar-right', 'nosidebar'); };
	document.getElementById('button-sidebar-show').onclick = function() { return changeBodyClass('nosidebar', 'sidebar-right'); };
	handleResize();
	
	map = new GMap2(document.getElementById("map"));
	//map.addControl(new GLargeMapControl());
	//map.addControl(new GMapTypeControl());
	//map.setMapType(G_HYBRID_TYPE);
	//map.centerAndZoom(new GPoint(0,0), 16);
	//map.setCenter(new GLatLng(37.546, -99.18), 6);
	map.addControl(new GLargeMapControl());
	map.addControl(new GMapTypeControl());
	//map.addMapType(G_PHYSICAL_MAP);
	//map.setMapType(G_PHYSICAL_MAP);
	map.setMapType(G_HYBRID_MAP);
	map.setCenter(new GLatLng(37.546, -99.18), 6);
	
	var datatypeNOW		=	"NOW";
	var zipfile = "../XML/date/" + datatypeNOW + "_" + dayofyear + ".xml";
	//document.write(zipfile);
	var request = GXmlHttp.create();
	//request.open('GET',zipfile, true);
	
	document.getElementById('sidebar-zipcode').innerHTML="<table align=\"center\"><tr><td valign=\"middle\">&nbsp;</td></tr></table>";
	
	document.getElementById('sidebar-top').innerHTML="<strong>Tornadoes Reported " + overYears + "</strong><br />[Listed by date, latest first]";

	GDownloadUrl(zipfile, function(data) {
	 
		var xml = GXml.parse(data);
		var location = xml.documentElement.getElementsByTagName("location");
		var tornadoes = xml.documentElement.getElementsByTagName("tornado");
			
		document.getElementById('toolbar-header').innerHTML="Tornadoes in the United States: This Date in History: "  + searchdate + " " + overYears;
		var numTornadoes_NOW	=	location[0].getAttribute('count');
		//alert(numTornadoes_NOW);
		if (numTornadoes_NOW > 0) {
			for (var i = 0; i < numTornadoes_NOW; i++) {
					
				initializePoint(tornadoes[i],datatypeNOW);
		
			}
		}
		//alert ("145");
		//recenterandzoom(points);
		//handleResize();
	});
		//alert ("149");
	var datatypeHST	=	"HST";
	//alert("../XML/zipcode/HST_" + dayofyear + ".xml");
	var zipfileHST = "../XML/date/" + datatypeHST + "_" + dayofyear + ".xml";
	//alert("zipfileHST = "+ zipfileHST);
	var request = GXmlHttp.create();
	//request.open('GET',zipfileHST, true);
	//document.write(zipfile);
	//document.getElementById('sidebar-zipcode').innerHTML="<table align=\"center\"><tr><td valign=\"middle\">Enter ZipCode&nbsp;</td><td valign=\"middle\"><form action=\"./\" method=\"post\"  name=\"zipform\"><input name=\"zipcode\" type=\"text\" size=\"7\" maxlength=\"5\" value=\"" + zipcode + "\" />&nbsp;<input name=\"submit\" type=\"submit\" value=\"Go\" /></form></td></tr></table>";

	GDownloadUrl(zipfileHST, function(data) {
	 
	 	var xml = GXml.parse(data);
		var location = xml.documentElement.getElementsByTagName("location");
		var tornadoes = xml.documentElement.getElementsByTagName("tornado");
		
		//document.getElementById('toolbar-header').innerHTML="Tornadoes Reported on "  + location[0].getAttribute('zipCodePlace') + ", " + location[0].getAttribute('zipCodeState') + " " + overYears;
		
		var numTornadoes_HST	=	location[0].getAttribute('count');
		//alert(numTornadoes_HST);
		if (numTornadoes_HST	 > 0) {
			for (var i = 1; i < numTornadoes_HST; i++) {
				
				initializePoint(tornadoes[i],datatypeHST);
			}
		}
		recenterandzoom2(points);
		handleResize();
		changeBodyClass('loading', 'standby'); 	
	});
	
	

	
	//request.send(null);

}

function windowHeight() {
	// Standard browsers (Mozilla, Safari, etc.)
	if (self.innerHeight)
		return self.innerHeight;
	// IE 6
	if (document.documentElement && document.documentElement.clientHeight)
		return document.documentElement.clientHeight;
	// IE 5
	if (document.body)
		return document.body.clientHeight;
	// Just in case.
	return 0;
}

function handleResize() {
	var height = windowHeight() - document.getElementById('toolbar').offsetHeight - 30;
	document.getElementById('map').style.height = height + 'px';
	document.getElementById('sidebar').style.height = height + 'px';
}

function changeBodyClass(from, to) {
     document.body.className = document.body.className.replace(from, to);
     return false;
}

function recenterandzoom2(points) {
	if (points.length == 0) {
		return;
    } else {
		var bounds = new GLatLngBounds();
		for(var i=0;i<points.length;i++) {
			bounds.extend(points[i]);	
		}
		map.setZoom(map.getBoundsZoomLevel(bounds));
		map.setCenter(bounds.getCenter());
	}
}

function recenterandzoom(points) {
    var latpoints = [];
    var lngpoints = [];
	//alert("numpoints = "+points.length);
    var idealzoom = 6; 

    if (points.length == 0) {
		return;
    }

    if (points.length == 1) {
		map.centerAndZoom(points[0],idealzoom);
		GMap2.setCenter(points[0],idealzoom);			//V2
		return;
    }

    for(var i=0;i<points.length;i++) {
    	latpoints.push(points[i].y);
		lngpoints.push(points[i].x);
    }

    latpoints.sort(function(x,y) { return x-y });
    lngpoints.sort(function(x,y) { return x-y });

     var newlat = latpoints[0] + ((latpoints[latpoints.length-1] - latpoints[0])/2);
    var newlng = lngpoints[0] + ((lngpoints[lngpoints.length-1] - lngpoints[0])/2);
	//alert("newlat = "+newlat+", newlng = "+newlng);

    //var newpoint = new GPoint(parseFloat(newlng),parseFloat(newlat));
    var newpoint = new GLatLng(parseFloat(newlat),parseFloat(newlng));
    //alert(lngpoints[lngpoints.length-1]+"-"+lngpoints[0]);
    var idealspan = new GSize(parseFloat((Math.abs(lngpoints[lngpoints.length-1]-lngpoints[0]))*1.25),
			      parseFloat((Math.abs(latpoints[latpoints.length-1]-latpoints[0]))*1.25));

	//alert("idealzoom = "+idealzoom);	
    	//map.zoomTo(idealzoom);
	//GMap2.setZoom(idealzoom);					//V2
    for(var i=1;i<16;i++) {
		//var currentsize = map.getSpanLatLng();  	//V1
		 var currentsize = map.getBounds().minX-map.getBounds().maxX;		//V2
			 alert(i+": "+currentsize+" < " +idealspan.width);
			 if ((currentsize < idealspan.width) ||
			(currentsize.height < idealspan.height)) {
				//map.zoomTo(i);					//V1
				map.setZoom(i);					//V2
				idealzoom = i;
			}		
		else {
			break;
		}
    }
	alert("idealzoom = "+idealzoom);
   // map.centerAndZoom(newpoint,idealzoom);		//V1
	map.setCenter(newpoint,idealzoom);			//V2
}

window.onresize = handleResize;
window.onload = init;
