
var mapTools = {
	wsUrlGetLL: "/maps/ws/getll.asp",
	wsUrlGetPOI: "/maps/ws/getpoi.asp",
	newData: {},
	gblMap: {},
	ccLat: 0,
	ccLon: 0,
	ccLevel: 10,
	poiState: 0,
	poiMarkerState: 0,
	poiData: [],
	poiMarkers:[],
	poiiconBase: function(){
		var baseIcon = new GIcon();
		baseIcon.image = "/i/icons/map/ic-std-fr.png";
		baseIcon.shadow = "/i/icons/map/ic-std-sh.png";
		baseIcon.iconSize = new GSize(21, 30);
		baseIcon.shadowSize = new GSize(37,30);
		baseIcon.iconAnchor = new GPoint(10,29);
		baseIcon.infoWindowAnchor = new GPoint(10, 10);
		baseIcon.infoShadowAnchor = new GPoint(19, 25);
		return baseIcon;
	},
	initMaps: function(){
		if(busdata.BusSet.length >= 1){
			if (busdata.BusSet[0].latitude != "" || busdata.BusSet[0].longitude != ""){

				mapTools.ccLat = busdata.BusSet[0].latitude
				mapTools.ccLon = busdata.BusSet[0].longitude
				mapTools.showMap();

				mapTools.plotMarker(busdata.BusSet[0].latitude,busdata.BusSet[0].longitude,"<b>" + busdata.BusSet[0].name + "</b>");
				mapTools.showPOITool();
			} else {
				// attempt to get lat and long, then if good, plot map
				var getLL = new Ajax(mapTools.wsUrlGetLL + "?busid=" + busdata.BusSet[0].busid, { method: 'get', onComplete: mapTools.updateBD});
				getLL.request();
			}
		}
	},
	updateBD: function(request){
		var reqData = eval('var newdata = {' + request + '};');
		if(newdata.BusSet[0].error == false){
			// good JSON request, now update the current busData set with this ID
			mapTools.ccLat = newdata.BusSet[0].latitude
			mapTools.ccLon = newdata.BusSet[0].longitude
			mapTools.showMap();
			mapTools.plotMarker(newdata.BusSet[0].latitude,newdata.BusSet[0].longitude,"<b>" + newdata.BusSet[0].name + "</b>");
			mapTools.showPOITool();
		} else {
			// alert(newdata.BusSet[0].errormsg);
		}
	},
	showMap: function(){
		if (GBrowserIsCompatible()) {
			mapTools.toggleElVis('myMapCont'); // needs to be visible before drawing gMap to screen !!!
			mapTools.gblMap = new GMap2(document.getElementById("map"));
			mapTools.gblMap.addControl(new GSmallMapControl());
			mapTools.gblMap.addControl(new GMapTypeControl());
			mapTools.gblMap.setCenter(new GLatLng(mapTools.ccLat,mapTools.ccLon), mapTools.ccLevel);
		};
	  },
	  plotMarker: function(theLon,theLat,myMsg){
			if (!mapTools.gblMap){
				mapTools.gblMap = new GMap2(document.getElementById("map"));
			}
			
			var point = new GLatLng(theLon,theLat);
			
			var newmarker = mapTools.createMarker(point,myMsg)
			mapTools.gblMap.addOverlay(newmarker);

	},
	createMarker: function(point,html){
		var marker = new GMarker(point);
		GEvent.addListener(marker, "click", function() {
			marker.openInfoWindowHtml(html);
		});
		return marker
	},
	toggleElVis: function(el){
		var Elem = $(el);
		if(Elem){
			if(Elem.hasClass('hideThis')){
				Elem.removeClass('hideThis');
			} else {
				Elem.addClass('hideThis');
			}
		}
	},
	showPOITool: function(){
		
		// setup poi icons here!!!

		var poi = $('myMapPOI');
		if(poi.hasClass('hideThis')){
			// show POI tools on screen!
			mapTools.toggleElVis('myMapPOI');
			mapTools.togglePOI();
		} else {
			//hide poi's tool from map
			mapTools.toggleElVis('myMapPOI');
		}
	},
	togglePOI: function(){
		if(mapTools.poiState <= 0){
			if(mapTools.poiData.length <= 0){
				mapTools.getPOIData();
			} else {
				// mapTools.showPOI
			}
		} else {
			var btShowPOI = $('btShowPOI');
			if(btShowPOI){
				btShowPOI.checked = false;
			}
			mapTools.poiState = 0;
		}
	},
	getPOIData: function(){
		var getPOI = new Ajax(mapTools.wsUrlGetPOI, { method: 'get', onComplete: mapTools.updatePOI});
		getPOI.request();
	},
	updatePOI: function(request){
		var reqData = eval('var poiData = {' + request + '};');
		
		if(poiData.POISet.length >= 1){
			// update POI array??
			for(p=0;p<poiData.POISet.length;p++){
				mapTools.poiData.push(poiData.POISet[p]);
				mapTools.plotPOI(mapTools.poiData[p].longitude,mapTools.poiData[p].latitude,"<b>" + mapTools.poiData[p].name + "</b>",mapTools.poiData[p].icon);
			}
			var btShowPOI = $('btShowPOI');
			if(btShowPOI){
				btShowPOI.checked = true;
			}			
		} else {
			alert('There was an error generating Points of Interest (Melbourne Airport and Docks)');
		}
	},
	plotPOI: function(theLon,theLat,msg,icon){
		if (!mapTools.gblMap){
			mapTools.gblMap = new GMap2(document.getElementById("map"));
		}
		var thisIcon = new GIcon(mapTools.poiiconBase());
			thisIcon.image = "/i/icons/map/ic-" + icon + "-fr.png";
		var point = new GLatLng(theLon,theLat);
		var newmarker = new GMarker(point,thisIcon);
		GEvent.addListener(newmarker, "click", function() {
			newmarker.openInfoWindowHtml(msg);
		});
		mapTools.gblMap.addOverlay(newmarker);
		
		mapTools.poiMarkers.push(newmarker);
		
		mapTools.poiMarkerState = 1;
	},
	togglePOIMark: function(){
		if(mapTools.poiMarkers.length >= 1){
			if (!mapTools.gblMap){
				mapTools.gblMap = new GMap2(document.getElementById("map"));
			}
			for(m=0;m<mapTools.poiMarkers.length;m++){
				if(mapTools.poiMarkerState == 1){
					mapTools.gblMap.removeOverlay(mapTools.poiMarkers[m]);
					newState = 0;
				} else {
					mapTools.gblMap.addOverlay(mapTools.poiMarkers[m]);
					newState = 1;
				}
			}
			mapTools.poiMarkerState = newState;
		} else {
			alert('There are no markers to remove.');
		}
	}
};

handleEvent(window, "load", mapTools.initMaps);
