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

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 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_MAP);
	map.addMapType(G_SATELLITE_3D_MAP);
	map.setCenter(new GLatLng(37.546, -99.18), 6);

	var request = GXmlHttp.create();
	//request.open('GET','XML/date/latest.xml', true);
	
	GDownloadUrl("XML/date/latest.xml", function(data) {
	
		var xml = GXml.parse(data);
		var location = xml.documentElement.getElementsByTagName("location");
		var numTornadoes	=	location[0].getAttribute('count');
			
		//var numTornadoes	=	location.length;
		//alert(numTornadoes);
					
		document.getElementById('sidebar-GE').innerHTML="<a href='kmz/date/latest.kmz' target='_blank'><img border='0' align='absmiddle' src='images/kml_feed_small.png'/></a>&nbsp;<a href='kmz/date/latest.kmz' target='_blank'>View in Google Earth</a>";
		//alert("NumTornadoes = " + numTornadoes);
		if (numTornadoes == 0) {
			document.getElementById('sidebar-top').innerHTML="No Tornadoes Reported Over Past 24 Hours";
		} else {
			var tornadoes = xml.documentElement.getElementsByTagName("tornado");
			if (numTornadoes == 1) {
				document.getElementById('sidebar-top').innerHTML=numTornadoes + " Tornado Reported Over Past 24 Hours";
			} else {
				document.getElementById('sidebar-top').innerHTML=numTornadoes + " Tornadoes Reported Over Past 24 Hours";
			}
			for (var i = 0; i < numTornadoes; i++) {
				//alert("i = "+i+" of "+numTornadoes);
				initializePoint(tornadoes[i],"NOW");
			}
			recenterandzoom(points);
			//map.setZoom(map.getBoundsZoomLevel(bounds));
			//map.setCenter(bounds.getCenter());
			handleResize();
		}
		changeBodyClass('loading', 'standby'); 		
	});
	

}

function initializePoint(tornado, datatype) {

	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;datatype=NOW'></iframe></div>");   
		//map.panTo(point);
		return false;
	}

	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"));
	}
	//alert("LAT = "+T_StartLat);
	//alert("LON = "+T_StartLon);
	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("FS = " + FS)
	if (FS == "UNK") {
		var FSIcon	=	'1';
		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);
	}
  
	
	GEvent.addListener(marker, 'click', focusPoint);	
	listItemLink.onclick = focusPoint;
  

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

	map.addOverlay(marker);
    //alert("step = 92");
  

	// ==== Each time a point is found, extent the bounds ato include it =====
    bounds.extend(marker.getPoint());
    //alert("step = 97");
  

}

function addmarker(x,y,title,state,county,time,date) {
    var point = new GPoint(parseFloat(x),parseFloat(y));
    points.push(point);
    var marker = new GMarker(point);
    map.addOverlay(marker);
	var listItem = document.createElement('li');
	var listItemLink = listItem.appendChild(document.createElement('a'));
	listItemLink.href = "#";
	listItemLink.innerHTML = "<strong>" + pointData.T_State + ": " + pointData.T_County + " County</strong><span>" + pointData.T_Time + " CST, on " + pointData.T_Date + "</span>";
    index++;
} 

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 recenterandzoom(points) {
    var latpoints = [];
    var lngpoints = [];
	//alert("numpoints = "+points.length);
    var idealzoom = 7; 

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

		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));
		
		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();		//V2
				 //alert("Width = "+currentsize.width+" IdealWidth = "+idealspan.width);
				 if ((currentsize.width < 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;
