(function($) {
	$.fn.jmap = function(markers, settings) {
		var opts = $.extend({}, $.fn.jmap.defaults, settings);
		
		return this.each(function() {
			var $this = $(this);
			
			if (Mapstraction) {
				var map = new Mapstraction($this.attr('id'), opts.api);
				map.setCenter(new LatLonPoint(opts.center[0], opts.center[1]));
				
				switch (opts.showControls) {
					case 'none':
						var controls = {};
						break;
					case 'small':
						var controls = {zoom:'small'};
						break;
					default:
						var controls = {pan:true, zoom:'large', map_type:true};
						break;
				}
				map.addControls(controls);
				
				var has_markers = false;
				for(var i in markers) {
					if (!has_markers) has_markers = true;
					markers[i].marker = new Marker(new LatLonPoint(markers[i].coordinates[0], markers[i].coordinates[1]));
					markers[i].marker.setLabel(markers[i].data[1]);
					markers[i].marker.setInfoBubble(opts.formatBubble(markers[i].data));
					map.addMarker(markers[i].marker);
				}
				
				if (has_markers) {
					map.autoCenterAndZoom();
					if (opts.autoZoom) {				
						map.setZoom(map.getZoom() - 1);
					} else {
						map.setZoom(opts.zoom);
					}
				}
				
				if (!opts.autoCenter) {
					map.setCenter(new LatLonPoint(opts.center[0], opts.center[1]));
				}
			}
		});
	};
	
	$.fn.jmap.defaults = {
		api: 'google',
		center:[0, 0],
		zoom: 12,
		showControls: 'large',
		autoZoom:true,
		autoCenter:true,
		formatBubble: function() {}
	};
	
})(jQuery);