/* --------------------------------------------------------
* MMG-CMS - developed for Fullhouse
* Copyright (C) 2004-2009 MMG interactive
*
* MMG interactive versioning:
* ---------------
* $Revision: 987 $
* $Author: Mark $
* $Date: 2010-03-22 10:42:43 +1100 (Mon, 22 Mar 2010) $
*
* --------------------------------------------------------
*/	
	
	var map;
	var markersArray = [];
	
	function GLoad(action, idQuery) {
	
		var fLatitude = -26.431228064506424;
		var fLongitude = 134.560546875;	
		if(idQuery == 0) {
			var nZoomLevel = 5;	
		} else {
			var nZoomLevel = 9;			
		}
	
		if (GBrowserIsCompatible()) {
		
			map = new GMap2(document.getElementById("MapHolder"));
			map.addControl(new GLargeMapControl());
			map.addControl(new GOverviewMapControl());
			map.addControl(new GMapTypeControl());			
			map.setCenter(new GLatLng(fLatitude, fLongitude), nZoomLevel);
		
			var mgr = new GMarkerManager(map);
			var d = new Date();
			var time = d.getTime();
			var markerindex;
			if(idQuery == 0) {
				var dataStr = 'MapData.asp?Action=' + action + '&' + time;
			}else {
				var dataStr = 'MapData.asp?Action=' + action + '&ID=' + idQuery + '&t=' + time;
			}
		
			GDownloadUrl(dataStr, function(data, responseCode) {
				var xml = GXml.parse(data);
				var markers = xml.documentElement.getElementsByTagName("marker");
				for (var i = 0; i < markers.length; i++) {
					var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
					var marker = createMarker(point, markers[i].getAttribute("id"), markers[i].getAttribute("desc"), markers[i].getAttribute("name"), action, idQuery);	
					
					if(action != 'EventDetail') {
						if(parseInt(markers[i].getAttribute("id")) == parseInt(idQuery)) {
							fLatitude = parseFloat(markers[i].getAttribute("lat"));
							fLongitude = parseFloat(markers[i].getAttribute("lng"));	
							markerindex = marker;
						}		
					} else {
						if(parseInt(markers[i].getAttribute("eventid")) == parseInt(idQuery)) {
							fLatitude = parseFloat(markers[i].getAttribute("lat"));
							fLongitude = parseFloat(markers[i].getAttribute("lng"));	
							markerindex = marker;
						}							
					}	
					markersArray.push(marker);																
				}
				mgr.addMarkers(markersArray, 0); // Add all markers at once
				mgr.refresh();		
				
				if(action == 'EventDetail' || action =='VenueDetail') {		
					map.setCenter(new GLatLng(fLatitude, fLongitude), nZoomLevel);							
					GEvent.trigger(markerindex, 'mouseover');												
				}
      		})
    	}
	}
	

	function GLoadSearch(action, suburb, postcode, state) {
	
		var idQuery = '';
		
		if(state == 'Victoria') {
			var fLatitude = -36.5587997;
			var fLongitude = 145.4689942;	
			var nZoomLevel = 6;					
		}
		if(state == 'South Australia') {
			var fLatitude = -32.0289002;
			var fLongitude = 135.0019989;	
			var nZoomLevel = 6;		
		}			
		if(state == 'Tasmania') {
			var fLatitude = -41.7071991;
			var fLongitude = 146.1490021;	
			var nZoomLevel = 7;		
		}	
		if(state == 'Queensland') {
			var fLatitude = -25.9808285;
			var fLongitude = 154.8852539;	
			var nZoomLevel = 6;		
		}		
		if(state == 'New South Wales') {
			var fLatitude = -33.5413946;
			var fLongitude = 151.5783691;	
			var nZoomLevel = 7;		
		}		
		
		if(idQuery != 0) {
			var nZoomLevel = 3;			
		}
	
		if (GBrowserIsCompatible()) {
		
			map = new GMap2(document.getElementById("MapHolder"));
			map.addControl(new GLargeMapControl());
			map.addControl(new GOverviewMapControl());
			map.addControl(new GMapTypeControl());			
			map.setCenter(new GLatLng(fLatitude, fLongitude), nZoomLevel);
		
			var mgr = new GMarkerManager(map);
			var d = new Date();
			var time = d.getTime();

			if(idQuery == 0) {
				var dataStr = 'MapData.asp?Action=' + action + '&State=' + state + '&t=' + time;
			}else {
				var dataStr = 'MapData.asp?Action=' + action + '&ID=' + idQuery + '&State=' + state + '&t=' + time;
			}
		
			GDownloadUrl(dataStr, function(data, responseCode) {
				var xml = GXml.parse(data);
				var markers = xml.documentElement.getElementsByTagName("marker");
				for (var i = 0; i < markers.length; i++) {
					var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
					var marker = createMarker(point, markers[i].getAttribute("id"), markers[i].getAttribute("desc"), markers[i].getAttribute("name"), action, idQuery);	
					markersArray.push(marker);																
				}
				mgr.addMarkers(markersArray, 0); // Add all markers at once
				mgr.refresh();		
      		});
    	}
		doAddressSearch(suburb, state, postcode, nZoomLevel);
	}	
	
	function createMarker(point, id, desc, name, action, idQuery) {
		var icon = new GIcon();
		icon.image = "images/888PL_MapIcon.png";
		icon.iconSize = new GSize(32, 32);
		icon.iconAnchor = new GPoint(32, 32);
		icon.infoWindowAnchor = new GPoint(14, 1);
	
		var marker = new GMarker(point, icon);
		GEvent.addListener(marker, "mouseover", function() {
			marker.openInfoWindowHtml(createVenueHtml(point, id, desc, name, action, marker));		
		});									
		return marker;
	}
	
	function createVenueHtml(p, id, desc, name, action, marker) {
	
		if(map.getZoom() <= 9){
			return '<span style="font-family: arial; font-size: 11px;">' + desc + '<br/><a href="javascript: map.setCenter(new GLatLng(' + p.lat() + ', ' + p.lng() + '), 16);">Zoom In</a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="VenueDetails.asp?Action=Detail&ID=' + id + '">Venue Details</a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="VenueDetails.asp?Action=Detail&ID=' + id + '">Venue Events</a></span>';	
		}else {
			return '<span style="font-family: arial; font-size: 11px;">' + desc + '<br/><a href="javascript: map.setCenter(new GLatLng(' + p.lat() + ', ' + p.lng() + '), 9);">Zoom Out</a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="VenueDetails.asp?Action=Detail&ID=' + id + '">Venue Details</a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="VenueDetails.asp?Action=Detail&ID=' + id + '">Venue Events</a></span>';	
		}
		
	}
	
	function getCount() {
	
		var bounds = map.getBounds();
		var maxX = bounds.getNorthEast().lng();
		var minX = bounds.getSouthWest().lng();
		var maxY = bounds.getNorthEast().lat();
		var minY = bounds.getSouthWest().lat();
		var count = 0;
		
		for (var x = 0; x < markersArray.length; x++) {
		
			if (markersArray[x].getPoint().lng() <= maxX && markersArray[x].getPoint().lng() >= minX) {
				if (markersArray[x].getPoint().lat() <= maxY && markersArray[x].getPoint().lat() >= minY && markersArray[x].getPoint().lat() > -20) {
					count++;
				}
			}
		}
		
		return count;
	}

	
	function doAddressSearch(sSuburb, sState, sPostcode, zoomLevelIN) {
		var geocoder = new GClientGeocoder();
		var address = sSuburb + ' ' + sState + ' ' + sPostcode + ', Australia';	
		
		if(sSuburb == '' && sPostcode == '') {
			if(sState != 'Queensland' && sState != 'New South Wales'){
				nMarkerCount = 100
			}else{
				nMarkerCount = 5
				zoomLevelIN = 5
			}
		} else {
			nMarkerCount = 5
		}
		
		geocoder.getLatLng(
			address,
			function(point) {
				if (!point) {
					document.getElementById('SearchResult').innerHTML = 'The location was not found, please try again';
				} else {
					document.getElementById('SearchResult').innerHTML = 'Enter a Suburb, Postcode and select a State to locate a 888PL Venue near you!';
					map.setCenter(point, 15);
					var zoomLevel = map.getZoom();
					
					for(zoomLevel; zoomLevel >= 0; zoomLevel--)
	                {
						map.setZoom(zoomLevel);
						
	                    if(getCount() >= nMarkerCount || zoomLevel == zoomLevelIN)
	                    {
	                        break;
	                    }
	                }
				}
			}
		);		
		
	}	
