$(document).ready(function()
{
	if($("div#memberMap").length > 0)
	{
		$("div#memberMap a").css("display","none");
		
		var url = unescape(window.location).replace(_root,'').replace(/\//gi,'-');
		
		if(url == '')
		{
			url = null;
		}
		
		getData(url);
	}
});

function getData(url)
{
	$.getJSON(_root+"members/map/"+url+"/",function(data)
	{
		if(data == null || data.error == 'true') // Error
		{
			$('div#memberMap').parent().hide();
		}
		else // All good
		{
			//make map
			var map = makeMap(parseFloat(data.initialLat), parseFloat(data.initialLng+0), parseFloat(data.zoom));
			
			if(data.listings != undefined)
			{
				$.each(data.listings, function(i,item)
				{
					var point = new GLatLng(parseFloat(item.lat), parseFloat(item.lng));
					
					map.addOverlay(createMarker(point, item, map));
				});
			}
		}
	});
}

function makeMap(lat, lng, zoom)
{
	if($("div#memberMap").googleMap(lat, lng, zoom))
	{
		var lat = parseFloat(lat);
		var lng = parseFloat(lng);
		
		//additional map configuration;
		var typeControl = new GMapTypeControl();
		var zoomControl = new GLargeMapControl();
		$.googleMap.maps["memberMap"].setMapType(G_NORMAL_MAP);
		
		return $.googleMap.maps["memberMap"];
	}
	else
	{
		$("div#memberMap a").css("display","block");
	}
}

function createMarker(point, item, map)
{
	var icon 				= new GIcon();
	icon.image 				= _root+"media/images/gmap-icon.png";
	icon.shadow 			= _root+"media/images/gmap-icon-shadow.png";
	icon.size 				= new GSize(32, 32);
	icon.shadowSize 		= new GSize(59, 32);
	icon.iconAnchor 		= new GPoint(10, 30);
	icon.infoWindowAnchor 	= new GPoint(14, 0);
	
	var marker 	= new GMarker(point, icon);
	
	var data = '<div class="marker">';
	data	+= '	<h1><a href="'+item.url+'" title="'+item.name+'">'+item.name+'</a></h1>';
	data	+= item.content;
	data	+= '</div>';
	
	GEvent.addListener(marker, "mouseover", function()
	{
		marker.openInfoWindowHtml(data,
		{
			maxHeight	: 120
		});
	});
	
	return marker;
}

$.googleMap = {
	maps: {},
	marker: function(m)
	{
		if(!m)
		{
			return null;
		}
		else if(m.lat == null && m.lng == null)
		{
			return $.googleMap.marker($.googleMap.readFromGeo(m));
		}
		else
		{
			var marker = new GMarker(new GLatLng(m.lat, m.lng));
			if (m.txt)
			{
				GEvent.addListener(marker, "click", function()
				{
    				marker.openInfoWindowHtml(m.txt);
  				});
			}
			return marker;
		}
	},
	readFromGeo: function(elem)
	{
		var latElem = $(".latitude", elem)[0];
		var lngElem = $(".longitude", elem)[0];
		if (latElem && lngElem)
		{
			return { lat:parseFloat($(latElem).attr("title")), lng:parseFloat($(lngElem).attr("title")), txt:$(elem).attr("title") }
		}
		else
		{
			return null;
		}
	},
	mapNum: 1
};

$.fn.googleMap = function(lat, lng, zoom, options)
{
	// If we aren't supported, we're done
	if(!window.GBrowserIsCompatible || !GBrowserIsCompatible()) return this;
	
	// Sanitize options
	if(!options || typeof options != 'object')	options = {};
	options.mapOptions = options.mapOptions || {};
	options.markers = options.markers || [];
	options.controls = options.controls || {};

	// Map all our elements
	return this.each(function()
	{
		// Make sure we have a valid id
		if (!this.id) this.id = "gMap" + $.googleMap.mapNum++;
		// Create a map and a shortcut to it at the same time
		var map = $.googleMap.maps[this.id] = new GMap2(this, options.mapOptions);
		// Center and zoom the map
       	map.setCenter(new GLatLng(lat, lng), zoom);
       	// Add controls to our map
       	for (var i = 0; i < options.controls.length; i++)
		{
	       	var c = options.controls[i];
	       	eval("map.addControl(new " + c + "());");
       	}
       	// If we have markers, put them on the map
       	var marker = null;
       	for (var i = 0; i < options.markers.length; i++)
		{
	       	if (marker = $.googleMap.marker(options.markers[i])) map.addOverlay(marker);
       	}
    });

};
