(function($) {
	$.fn.gMap = function(options) {
		if (!window.GBrowserIsCompatible || !GBrowserIsCompatible()) return this;
		var opts = $.extend({}, $.fn.gMap.defaults, options);
		return this.each(function() {
			$gmap = new GMap2(this, {backgroundColor: opts.colour});			
			$gmap.setCenter(new GLatLng(opts.latitude, opts.longitude), opts.zoom);
			if (opts.controls) $gmap.addControl(new GSmallZoomControl3D());
			$gmap.checkResize();
			$gmap.disableDoubleClickZoom();
			var tilelayer = new GTileLayer(new GCopyrightCollection(), 0, 17);
			tilelayer.getTileUrl = function(tile, zoom) { return opts.overlay };
			tilelayer.isPng = function() { return opts.png; };
			tilelayer.getOpacity = function() { return opts.opacity; }
			$gmap.addOverlay(new GTileLayerOverlay(tilelayer));
			for (var j = 0; j < opts.markers.length; j++) {
				marker = opts.markers[j];
				gicon = new GIcon();
				gicon.image = opts.icon.image;
				gicon.shadow = opts.icon.shadow;
				gicon.iconSize = ($.isArray(opts.icon.iconsize)) ? new GSize(opts.icon.iconsize[0], opts.icon.iconsize[1]) : opts.icon.iconsize;
				gicon.shadowSize = ($.isArray(opts.icon.shadowsize)) ? new GSize(opts.icon.shadowsize[0], opts.icon.shadowsize[1]) : opts.icon.shadowsize;
				gicon.iconAnchor = ($.isArray(opts.icon.iconanchor)) ? new GPoint(opts.icon.iconanchor[0], opts.icon.iconanchor[1]) : opts.icon.iconanchor;
				gicon.infoWindowAnchor = ($.isArray(opts.icon.infowindowanchor)) ? new GPoint(opts.icon.infowindowanchor[0], opts.icon.infowindowanchor[1]) : opts.icon.infowindowanchor;
				if (marker.icon) {
					gicon.image = marker.icon.image;
					gicon.shadow = marker.icon.shadow;
					gicon.iconSize = ($.isArray(marker.icon.iconsize)) ? new GSize(marker.icon.iconsize[0], marker.icon.iconsize[1]) : marker.icon.iconsize;
					gicon.shadowSize = ($.isArray(marker.icon.shadowsize)) ? new GSize(marker.icon.shadowsize[0], marker.icon.shadowsize[1]) : marker.icon.shadowsize;
					gicon.iconAnchor = ($.isArray(marker.icon.iconanchor)) ? new GPoint(marker.icon.iconanchor[0], marker.icon.iconanchor[1]) : marker.icon.iconanchor;
					gicon.infoWindowAnchor = ($.isArray(marker.icon.infowindowanchor)) ? new GPoint(marker.icon.infowindowanchor[0], marker.icon.infowindowanchor[1]) : marker.icon.infowindowanchor;
				}
				gmarker = new GMarker(new GPoint(marker.longitude, marker.latitude), gicon);
				if (marker.html) {
					if (gmarker) { $gmap.addOverlay(gmarker); }
					GEvent.addListener(gmarker, 'click', function() { top.window.location=marker.html; });
				}
				else {
					if (gmarker) { $gmap.addOverlay(gmarker); }
				}
			}
			
		});
	}
	$.fn.gMap.defaults = {
		latitude:				0,
		longitude:				0,
		zoom:					8,
		controls:				true,
		colour:					'#F2F2F2',
		overlay:				'/overlay.gif',
		opacity:				0.4,
		png:					false,
		markers:				[],
		icon: {
			image:				"/forsale.png",
			shadow:				"/forsale.shadow.png",
			iconsize:			[32.0, 32.0],
			shadowsize:			[49.0, 32.0],
			iconanchor:			[16.0, 16.0],
			infowindowanchor:	[16.0, 16.0]
		}
	}
})(jQuery);