// Mapping functions

function loadGMap(where,lat,lon, zoom, markLat, markLon) {
	
	if (!where) { return }
	
	if (lat + lon == 0) { return }
	
	zoom	= zoom > 0 ? zoom : 15;
	markLat	= markLat ? markLat : lat;
	markLon	= markLon ? markLon : lon;

	if (GBrowserIsCompatible()) {
		var map			= new GMap2(document.getElementById(where));
		var point		= new GLatLng(lat, lon);
		map.setCenter(point, zoom);
		 
		var markPoint	= new GLatLng(markLat, markLon);
		var thisMarker	= new GMarker(markPoint, {draggable: false});
		map.addOverlay(thisMarker);
		
		map.setMapType(G_HYBRID_MAP);
		
		map.addMapType(G_PHYSICAL_MAP);
		
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		map.addControl(new GScaleControl());
		
		return 1;
	}
	else { return }
};

function loadPublicStationsGMap(map,markers) {

	if (GBrowserIsCompatible()) { 
		var stationsMap	= new GMap2(document.getElementById(map));
		
		stationsMap.addMapType(G_PHYSICAL_MAP);
		stationsMap.addControl(new GLargeMapControl());
		stationsMap.addControl(new GMapTypeControl());
		stationsMap.setCenter(new GLatLng(0,0),0); 
		
		var mgr = new MarkerManager(stationsMap);
		var markerList		= [];	
		var bounds 			= new GLatLngBounds();

		for (var m in markers) {
			var thisM		= markers[m];
			if (!thisM['posn'][0]) continue;
			var thisLat		= parseFloat(thisM['posn'][0]);
			var thisLon		= parseFloat(thisM['posn'][1]);				
			if (isNaN(thisLat) || isNaN(thisLon)) {
				continue;
			}
			
			var thisInfo	= compose_infowindow_msg(thisM['id'], thisM['name'], thisM['publish_url']);
			
			var thisP		= new GLatLng(thisLat,thisLon);
			if (thisP == null) {
				continue;
			}
			bounds.extend(thisP);
			var thisMark	= createMarker(thisP,thisInfo);
			markerList.push(thisMark);
	
		}
		stationsMap.setZoom(stationsMap.getBoundsZoomLevel(bounds));
		stationsMap.setCenter(bounds.getCenter());
		
		stationsMap.setMapType(G_PHYSICAL_MAP);
			
		mgr.addMarkers(markerList,6);
		mgr.refresh();
	}
};
	
function compose_infowindow_msg(stationID,stationName,publishURL) {	
	var info		= [];		
	info['heading']	= '<h4 align=\"center\">' + stationName + '</h4>';
	info['link']	= '<p align=\"center\">';
	info['link']	+= '<span class=\"click_span\" >';
	info['link']	+= '<a href=\'' + publishURL + '\'>';
	info['link']	+= 'View Station Details and Map';
	info['link']	+= '</a></span></p>'; 		
	info['note']	= '<p align=\"center\">(Station ID ' + stationID + ')</p>'; 		
	return info['heading'] + info['link'] + info['note'];	
};
	
function loadStationsGMap(map,markers) {

	if (GBrowserIsCompatible()) { 
		var stationsMap	= new GMap2(document.getElementById(map));
		
		stationsMap.addMapType(G_PHYSICAL_MAP);
		stationsMap.addControl(new GLargeMapControl());
		stationsMap.addControl(new GMapTypeControl());
		stationsMap.setCenter(new GLatLng(0,0),0); 
		
		var mgr = new MarkerManager(stationsMap);
		var markerList		= [];	
		var bounds 			= new GLatLngBounds();

		for (var m in markers) {
			var thisM		= markers[m];
			if (!thisM['posn'][0]) continue;
			var thisLat		= parseFloat(thisM['posn'][0]);
			var thisLon		= parseFloat(thisM['posn'][1]);				
			if (isNaN(thisLat) || isNaN(thisLon)) {
				continue;
			}
			
			var thisInfo	= compose_infowindowEdit_msg(thisM['id'], thisM['name']);
			
			var thisP		= new GLatLng(thisLat,thisLon);
			if (thisP == null) {
				continue;
			}
			bounds.extend(thisP);
			var thisMark	= createMarker(thisP,thisInfo);
			markerList.push(thisMark);
	
		}
		stationsMap.setZoom(stationsMap.getBoundsZoomLevel(bounds));
		stationsMap.setCenter(bounds.getCenter());
		
		stationsMap.setMapType(G_PHYSICAL_MAP);
			
		mgr.addMarkers(markerList,6);
		mgr.refresh();
	}
};

function compose_infowindowEdit_msg(stationID,stationName) {	
	var info		= [];
	info['heading']	= '<h4 align=\"center\">' + stationName + '</h4>';
	info['link']	= '<p align=\"center\">';
	info['link']	+= '<span class=\"click_span\" onMouseOver=\"this.style.cursor=\'pointer\'\" ';
	info['link']	+= 'onclick=\"xhrGet(\'station_xhr\',\'STA:show_id=' + stationID + '\',[{fcn:\'updateItem\',tgt:\'display_div\'},{fcn:\'setItemStyle\',tgt:\'display_div\',sel:\'height\',val:\'auto\'}],0,[],[])\">';
	info['link']	+= 'Edit Station Details and Map';		
 	info['link']	+= '</span></p>'; 		
	info['note']	= '<p align=\"center\">(Station ID ' + stationID + ')</p>'; 		
	return info['heading'] + info['link'] + info['note'];	
};

function createMarker(markPoint,markName) {
	var newMarker	= new GMarker(markPoint);
	GEvent.addListener(newMarker, 'click', function() {
		newMarker.openInfoWindowHtml(markName);
	});
	return newMarker;
};

// converter - Object constructor for coordinate converter
// call with "new converter()".
// See prototypes below for methods.

function converter () {
   this.latsign = 1;
   this.lonsign = 1;
   this.absdlat = 0;
   this.absdlon = 0;
   this.absmlat = 0;
   this.absmlon = 0;
   this.absslat = 0;
   this.absslon = 0;

   //Math.round is used to eliminate the small error caused by rounding in the computer:
   //e.g. 0.2 is not the same as 0.20000000000284
   this.round_factor =    10000000000;
   this.comp_factor     = 59.99999999

};

converter.prototype.reset = function () {
   this.latsign = 1;
   this.lonsign = 1;
   this.absdlat = 0;
   this.absdlon = 0;
   this.absmlat = 0;
   this.absmlon = 0;
   this.absslat = 0;
   this.absslon = 0;
	
}


// End Mapping Functions


