
	// defaults
	var PWSPROXY = 'pwsproxy.php'
	var PWS_ROOT_URL = 'http://www.pwsweather.com';

	var mapCenterLat = 37;
	var mapCenterLon = -95;
	var mapZoom = 3;




	function plotStationMarker (data) {
		var stnicon = new GIcon();
		var imageURL = PWS_ROOT_URL + '/images/maps/markers/20x20/' + Math.round(data.obs.TempF) + '.png'
		stnicon.image = imageURL;

		data.windDir;
		stnicon.shadow = null;
		stnicon.iconSize = new GSize(20, 20);
		stnicon.shadowSize = null;
		stnicon.iconAnchor = new GPoint(10, 10);
		stnicon.infoWindowAnchor = new GPoint(5, 5);


		return stnicon;
	}



	var map = null;
	var stations = new Array();
	var pe = null;
	function initMap() {


		if (GBrowserIsCompatible()) {
			map = new GMap2(document.getElementById("full-googlemap"));

			map.addControl(new GScaleControl(),new GControlPosition(G_ANCHOR_BOTTOM_RIGHT,new GSize(8,20)));
			map.addControl(new GSmallMapControl ());
			map.addControl(new GMapTypeControl())
			var otherOpts = {
				buttonStartingStyle: {background: '#fff', border:'1px solid black'},
				buttonHTML: "<img title='Drag Zoom In' src='" + PWS_ROOT_URL + "/images/maps/controls/zoomin.gif'>",
				buttonStyle: {width:'20px', height:'20px'},
				buttonZoomingHTML: "<img title='Drag Zoom In' src='" + PWS_ROOT_URL +  "/images/maps/controls/zoominyellow.gif'>",
				buttonZoomingStyle: {background:'yellow',width:'20px', height:'20px'},
				backButtonHTML: "<img title='Zoom Back Out' src='" + PWS_ROOT_URL +  "/images/maps/controls/zoomout.gif'>",
				backButtonStyle: {display:'none',marginTop:'5px',width:'20px', height:'20px'},
				backButtonEnabled: true,
				overlayRemoveTime: 1500
			}
			map.addControl(new DragZoomControl({}, otherOpts, {}), new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(15,105)));
			//=======Restricting the range of zoom levels

			point = new GLatLng(mapCenterLat, mapCenterLon);
			map.setCenter(point, mapZoom);

			var givenmaptypes = map.getMapTypes();
			map.setMapType(givenmaptypes[2]);

			//Add a move listener to restrict the bounds range
			GEvent.addListener(map, "moveend", function() {
				updateStations();
			});
			updateStations();
		}
		 // display a warning if the browser was not compatible
	    else {
	      alert("Sorry, the Google Maps API is not compatible with this browser");
	    }
	}

	function stationObHTML(json) {

		var sTitle = '';

		if (json.station.profile.stationCity) {
			sTitle = json.station.profile.stationCity;
			if (json.station.profile.stationState) sTitle += ', ' + json.station.profile.stationState;
			if (json.station.profile.stationCountry) sTitle += ' ' + json.station.profile.stationCountry;
		}
		else {
			sTitle = 'Station ' + json.station.stationID;
		}


		var shtml = "<div id=\"gmap-infowin\">";

		shtml += "	<h1><a href=\"" + PWS_ROOT_URL + "/obs/" + json.station.stationID + ".html\" title=\"View complete details for " + json.station.stationID + "\">" + sTitle + "</a></h1>";
		shtml += "	<h2>Latest Conditions <span class=\"detail\">at " + json.station.obs.DateUpdated + "</span></h2>";
		shtml += "	<div>Temp:<span class=\"value\">" + json.station.obs.TempF + "</span></div>";
		shtml += "	<div class=\"rt\">Dew Point:<span class=\"value\">" + json.station.obs.DewptF + "</span></div>";

		shtml += "	<div class=\"even\">Winds:<span class=\"value\">";
		shtml += (json.station.obs.WindSpeedMPH > 0) ? json.station.obs.WindSpeedMPH + " " + json.station.obs.WindDirEng : "Calm";
		shtml += "</span></div>";

		shtml += "	<div class=\"rt even\">Wind Gusts:<span class=\"value\">" + json.station.obs.WindGustsMPH + " </span></div>";
		shtml += "	<div>Humidity:<span class=\"value\">" + json.station.obs.Humid + "</span></div>";
		shtml += "	<div class=\"rt\">Pressure:<span class=\"value\">" + json.station.obs.PressureIN + "</span></div>";
		shtml += "	<div class=\"even\">Precip:<span class=\"value\">" + json.station.obs.PrecipIN + "</span></div>";

		shtml += "	<div class=\"rt even\">Precip Today:<span class=\"value\">-</span></div>";
		shtml += "	<div class=\"full\">";
		shtml += "		Station " + json.station.stationID  + ":<p><a href=\"" + PWS_ROOT_URL + "/obs/" + json.station.stationID  + ".html\">Detailed observations</a> | <a href=\"" + PWS_ROOT_URL + "/obs/archive/yest/" + json.station.stationID  + ".html\">Archives</a></p>";
		var urlName = (json.station.profile.stationName) ? json.station.profile.stationName : json.station.profile.stationUrl;
		if (json.station.profile.stationUrl) shtml += "		<p class=\"stnurl\"><a href=\"" + json.station.profile.stationUrl + "\" target=\"_blank\">" + urlName + "</a></p>";
		shtml += "	</div>";

		shtml += "</div>";

		return shtml;
	}


	var infoMarker = null;
	var pwsAjax = null;
	var allowResizeUpdate = true;
	function pwsInitOpenInfoWindow(marker) {
		infoMarker = marker;

		var url = PWSPROXY + '?do=obs&id=' + marker.stnid ;
		new Ajax.Request(url, {
			onSuccess: function(transport) {
							pwsOpenInfoWindow(transport.responseText );
						},
			onFailure: function (response) {
							allowResizeUpdate = true;
						}
			}
		);

	}
	function pwsOpenInfoWindow(data) {

		if (data) {
			var jsonData =  data.evalJSON();
			allowResizeUpdate = false;
			infoMarker.openInfoWindow(stationObHTML(jsonData));
		}
		else {
			alert('Failed');
		}
	}




	function createMarker(data) {
			var stnpos = new GLatLng(data.lat,data.lon);
			stnicon = plotStationMarker(data);
			var marker = new GMarker(stnpos, {title: 'Station: ' + data.id, icon: stnicon});

			marker.stnid = data.id;
			marker.stndata = data;

 			GEvent.addListener(marker, "click", function() {
            	allowResizeUpdate = false;
            	pwsInitOpenInfoWindow(this);
          	});
 			GEvent.addListener(marker, "infowindowclose", function() {
            	allowResizeUpdate = true;
          	});



			return marker;
	}


	function updateStations() {
		if (!allowResizeUpdate) return;

		if (pe) pe.stop();

		var bounds = map.getBounds();
		var lonSW = bounds.getSouthWest().lng();
		var latSW = bounds.getSouthWest().lat();
		var lonNE = bounds.getNorthEast().lng();
		var latNE = bounds.getNorthEast().lat();

		GDownloadUrl(PWSPROXY + "?lat1=" + latNE + "&lon1=" + lonSW + "&lat2=" + latSW + "&lon2=" + lonNE + "&z=" + map.getZoom(),
			function(data, responseCode) {
				if(data=="" || !(responseCode==200||responseCode==304) ) {
					return;
				}
				map.clearOverlays();

				var jsonData = data.evalJSON();

				for (var i = 0; i < jsonData.stations.length; i++) {
					var station = jsonData.stations[i];
					if (station.id) {
						var marker=createMarker(station);
						map.addOverlay(marker);
					}
				}

				map.savePosition();
				return;
			}
		);

		pe = new PeriodicalExecuter(updateStations, 600);


	}
	window.onload=initMap;
	window.onunload=GUnload;

