function YPMapOverlay (map, icon)
{	
	var base = this;
	
	this.map = map;
	this.icon = icon;
	this.addresses = new Array();
	this.visible = false;
	
	this.registerAddress = function(name, url, img, state, lat, long, summary)
	{
		base.addresses[base.addresses.length] = { 
			"name": name,
			"url" : url,
			"image" : img,
			"state" : state,
			"point" : new GLatLng(lat, long),
			"marker" : null,
			"summary" : summary
		}
	}
	
	this.toggle = function()
	{
		base.visible ? base.hidePoints() : base.showPoints();
	}
	
	this.showPoints = function()
	{
		for (var i = 0; i < base.addresses.length; i++)
		{
			var addr = base.addresses[i];
			
			if (addr.marker == null)
			{			
				var marker = new GMarker(addr.point, base.icon);
				marker.index = i;
				base.addresses[i].marker = marker;
					
				GEvent.addListener(marker, "click", function(o)
					{				
						this.openInfoWindowHtml('<div class="mapMarker"><a href="/destinations/' + base.addresses[this.index].url + '/"><img src="' + base.addresses[this.index].image + '" /></a><div class="mapMarkerContent"><h1>' + base.addresses[this.index].name + ', ' + base.addresses[this.index].state + '</h1>' + base.addresses[this.index].summary + '<a href="/destinations/' + base.addresses[this.index].url + '/">View destination</a></div></div>');
					}
				);
				base.map.addOverlay(marker);
			}
			else
			{
				addr.marker.show();
			}
		}
		
		base.visible = true;
	}
	
	this.hidePoints = function()
	{
		for (var i = 0; i < base.addresses.length; i++)
		{
			if (base.addresses[i].marker != null)
			{
				base.addresses[i].marker.closeInfoWindow();
				base.addresses[i].marker.hide();
			}
		}
		
		base.visible = false;
	}
}

