

  var fanMap = {};

  fanMap.run = function() {
  
   var oGeocoder = new google.maps.Geocoder();
  
   var oMap;
   var oUserMarker;
  
   var oLatLng = new google.maps.LatLng(53.438685, -2.966523);
   var oGoodison = oLatLng;
   var oPanTo = oLatLng;
  
   var navCS = { style: google.maps.NavigationControlStyle.ZOOM_PAN };
   var mapCS = { style: google.maps.MapTypeControlStyle.DROPDOWN_MENU };  
  
   var methods = {
  
		   	initMap : function() {
  
			   var aSetup = { zoom: 4,
						      center: oLatLng,
						      mapTypeControlOptions: mapCS,
						      mapTypeId: google.maps.MapTypeId.TERRAIN,
						      navigationControlOptions: navCS 
			     			};
     
			   oMap = new google.maps.Map(document.getElementById("map_canvas"), aSetup);
  
			   fanMap.run.setCluster();
   			},
  
   			initMarker : function(LatLng, draggable) {
  
   			},
  
   			setDraggable : function () {
  
   				oUserMarker.setDraggable = true;
  
   			},
  
   			setLatLng : function (lat, lng) {
  
   				oLatLng = new google.maps.LatLng(lat, lng);
  
   			},
  
   			setPanLatLng : function (lat, lng) {
  
   				oPanTo = new google.maps.LatLng(lat, lng);
  
   			},
  
  
   			addMarker : function () {
   				
   				var _markerLatLng = new google.maps.LatLng(oLatLng.lat(), oLatLng.lng());
   				
				// Adding marker, allow draggable
				oUserMarker = new google.maps.Marker({ position: _markerLatLng, map: oMap, title: 'Hello', draggable: true});
				
				google.maps.event.addListener(oUserMarker, 'dragend', function() {
				    
					// Save the pin location
					fanMap.run.saveUserLocation(oLatLng.lat(), oLatLng.lng());
				});
				
   			},
   			
   			
   			// Set up the default user marker
   			setMarker : function (canDrag) {
  
   				if (oUserMarker)
   				{
   					alert('here');
   					// Avoid duplicate pins on screen
   					oUserMarker.setVisible(false);
   				}
  
   				// Get response from script whether user is logged in
   				var bLoggedIn = true;
  
   				// If logged in, check for pointer already created
   				if (bLoggedIn == true)
   				{
   					$.post("/scripts/ajax/fanmap/getUserMarker.scr.php", { user: getUser() }, function(data) {
  
	   					var bMarkerExists = data.markerSet;
	  
	   					if (bMarkerExists == true)
	   					{
	   						var markerLat = data.lat;
	   						var markerLng = data.lng;

	   						var _markerLatLng = new google.maps.LatLng(markerLat, markerLng);
						  
	   						oUserMarker = new google.maps.Marker({ position: _markerLatLng, map: oMap, title: 'Hello', draggable: canDrag});
	 
	   						if (canDrag == true)
	   						{
	   							google.maps.event.addListener(oUserMarker, 'dragend', function() {
	    
	   								var newLatLng = oUserMarker.getPosition();
	   								
	   								fanMap.run.saveUserLocation(newLatLng.lat(), newLatLng.lng());
	    
	   							});
	   						}
	 
	   						// Pan to the marker
	   						fanMap.run.panMap(_markerLatLng);
	   					}
	   					else
	   					{
	   						fanMap.run.panMap(fanMap.oGoodison);
	   					}
  
   					}, "json");
  
   					return oUserMarker;
   				}
   				else
   				{
   					// Pan to Goodison
   					this.panMap(oGoodison);
   				}
  
   			},
  
   			// Pan the map to location LatLng
   			panMap : function (oCoOrds) {
  
   				oMap.panTo(oCoOrds);
  
   			},
  
   			displayPinLocation : function () {
  
   				oGeocoder.geocode({ latLng: oUserMarker.getPosition() }, function(response, status) {
   					
   					if (status == google.maps.GeocoderStatus.OK)
   					{
   						oMap.panTo(response[0].geometry.location);
   						alert(response[0].geometry.location);
   					}
   					else
   					{
   						alert('No address');
   					}
   				});
  
   			},
  
   			setCluster : function () {
   			  
	   			   // Initialize Fluster and give it a existing map
	   			var fluster = new Fluster2(oMap);
	   			
	   			$.getJSON("/scripts/ajax/fanmap/getMarkers.scr.php", function(data) {
	   			  
	   				var iPointers = data.length;
	   				
	   				if (iPointers > 0)
	   				{
	   					for (var i = 0; i < iPointers; i++)
	   					{
	   						// Create a new marker. Don't add it to the map!
	   			   			var marker = new google.maps.Marker({
	   			   				position: new google.maps.LatLng(data[i].lat, data[i].lng),
	   			   				icon: '/assets/images/fanmap/blue-drop.png',
	   			   				title: 'Marker ' + i
	   			   			});
	   			   			
	   			   			fluster.addMarker(marker);
	   					}
	   				}

				});
	   			
	   			// Set styles
	   			// These are the same styles as default, assignment is only for demonstration ...
	   			fluster.styles = {
	   			// This style will be used for clusters with more than 0 markers
		   			0: {
			   			image: '/assets/images/fanmap/blue-drop.png',
			   			textColor: '#FFFFFF',
			   			width: 15,
			   			height: 25
		   			},
		   			// This style will be used for clusters with more than 10 markers
		   			1: {
			   			image: '/assets/images/fanmap/grey-drop.png',
			   			textColor: '#FFFFFF',
			   			width: 15,
			   			height: 25
		   			}
	   			};
	   			// Initialize Fluster
	   			// This will set event handlers on the map and calculate clusters the first time.
	   			fluster.initialize();
   			  
   			   },
   			
   			saveUserLocation : function (lat, lng) {
  
   				// Post data to script
   				if (userLoggedIn())
   				{
   					$.post("/scripts/ajax/fanmap/savePin.scr.php", { user: getUser(), lat: lat, lng: lng }, function(data) {
   					   	
   					});   					
   				}
  
   			}
  
    
   		};
  
   return methods;
  
  }();


