(function($) { // Main plugin function $.fn.gMap = function(options) { // Check if the browser is compatible with Google Maps if (!window.GBrowserIsCompatible || !GBrowserIsCompatible()) return this; // Build main options before element iteration var opts = $.extend({}, $.fn.gMap.defaults, options); // Iterate each matched element return this.each(function() { // Create new map and set initial options $gmap = new GMap2(this); // Try to center to the first marker if (!opts.latitude && !opts.longitude) { // Check for at least one marker if ($.isArray(opts.markers) && opts.markers.length >= 1) { // Center to the first marker opts.latitude = opts.markers[0].latitude; opts.longitude = opts.markers[0].longitude; } else { // Center Earth and lower zoom opts.latitude = 34.885931; opts.longitude = 9.84375; opts.zoom = 2; } } // Center the map and set the maptype $gmap.setCenter(new GLatLng(opts.latitude, opts.longitude), opts.zoom); $gmap.setMapType(opts.maptype); // Check for custom map controls if (opts.controls.length == 0) { // Default map controls $gmap.setUIToDefault(); } else { // Add custom map controls for (var i = 0; i < opts.controls.length; i++) { // Eval is evil - I know. ;) eval('$gmap.addControl(new ' + opts.controls[i] + '());'); } } // Check if scrollwheel should be enabled when using custom controls if (opts.scrollwheel == true && opts.controls.length != 0) { $gmap.enableScrollWheelZoom(); } // Add all map markers for (var j = 0; j < opts.markers.length; j++) { // Get the options from current marker marker = opts.markers[j]; // Create new icon gicon = new GIcon(); // Set icon properties from global options 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) { // Overwrite global options with ther marker one's 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; } // Create a new marker on the map gmarker = new GMarker(new GPoint(marker.longitude, marker.latitude), gicon); // Only display info window if the marker contains a description if (marker.html) { // Bind the info window to marker gmarker.bindInfoWindowHtml(opts.html_prepend + marker.html + opts.html_append); // Add overlay if marker was created and check if popup should be shown when map is loaded if (gmarker) { $gmap.addOverlay(gmarker); } if (marker.popup == true) { gmarker.openInfoWindowHtml(opts.html_prepend + marker.html + opts.html_append); } } else { // Add overlay marker if (gmarker) { $gmap.addOverlay(gmarker); } } } }); } // Set default settings $.fn.gMap.defaults = { latitude: 0, longitude: 0, zoom: 6, markers: [], controls: [], scrollwheel: true, maptype: G_NORMAL_MAP, html_prepend: '
', html_append: '
', icon: { image: "http://www.google.com/mapfiles/marker.png", shadow: "http://www.google.com/mapfiles/shadow50.png", iconsize: [20, 34], shadowsize: [37, 34], iconanchor: [9, 34], infowindowanchor: [9, 2] } } })(jQuery);