EstudioJuridicoAlmagro_Web/www/wpv_common/assets/js/jquery.gmap-1.1.0-min.js
2013-03-01 18:06:10 +00:00

216 lines
8.5 KiB
JavaScript

/**
* jQuery gMap
*
* @url http://gmap.nurtext.de/
* @author Cedric Kastner <cedric@nur-text.de>
* @version 1.1.0
2011-04-25
is changed by Arsen Kirillov
$gmap -> moves to var gmap; in all text ...
*/
(function($)
{
// Main plugin function
$.fn.gMap = function(options)
{
var gmap;
// Check if the browser is compatible
if (!window.GBrowserIsCompatible || !GBrowserIsCompatible()) return this;
// Build main options before element iteration
var opts = $.extend({}, $.fn.gMap.defaults, options);
// Iterate through each element
return this.each(function()
{
// Create map and set initial options
gmap = new GMap2(this);
// Create new object to geocode addresses
$geocoder = new GClientGeocoder();
// Check for address to center on
if (opts.address)
{
// Get coordinates for given address and center the map
$geocoder.getLatLng(opts.address, function(gpoint){ gmap.setCenter(gpoint, opts.zoom); });
}
else
{
// Check for coordinates to center on
if (opts.latitude && opts.longitude)
{
// Center map to coordinates given by option
gmap.setCenter(new GLatLng(opts.latitude, opts.longitude), opts.zoom);
}
else
{
// Check for a marker to center on (if no coordinates given)
if ($.isArray(opts.markers) && opts.markers.length > 0)
{
// Check if the marker has an address
if (opts.markers[0].address)
{
// Get the coordinates for given marker address and center
$geocoder.getLatLng(opts.markers[0].address, function(gpoint){ gmap.setCenter(gpoint, opts.zoom); });
}
else
{
// Center the map to coordinates given by marker
gmap.setCenter(new GLatLng(opts.markers[0].latitude, opts.markers[0].longitude), opts.zoom);
}
}
else
{
// Revert back to world view
gmap.setCenter(new GLatLng(34.885931, 9.84375), opts.zoom);
}
}
}
// Set the preferred map type
gmap.setMapType(opts.maptype);
// Check for 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
eval('gmap.addControl(new ' + opts.controls[i] + '());');
}
}
// Check if scrollwheel should be enabled
if (opts.scrollwheel == true && opts.controls.length != 0) { gmap.enableScrollWheelZoom(); }
// Loop through marker array
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
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;
}
// Check if address is available
if (marker.address)
{
// Check for reference to the marker's address
if (marker.html == '_address') { marker.html = marker.address; }
// Get the point for given address
$geocoder.getLatLng(marker.address, function(gicon, marker)
{
// Since we're in a loop, we need a closure when dealing with event handlers, return functions, etc.
// See <http://www.mennovanslooten.nl/blog/post/62> for more information about closures
return function(gpoint)
{
// Create marker
gmarker = new GMarker(gpoint, gicon);
// Set HTML and check if info window should be opened
if (marker.html) { gmarker.bindInfoWindowHtml(opts.html_prepend + marker.html + opts.html_append); }
if (marker.html && marker.popup) { gmarker.openInfoWindowHtml(opts.html_prepend + marker.html + opts.html_append); }
// Add marker to map
if (gmarker) { gmap.addOverlay(gmarker); }
}
}(gicon, marker));
}
else
{
// Check for reference to the marker's latitude/longitude
if (marker.html == '_latlng') { marker.html = marker.latitude + ', ' + marker.longitude; }
// Create marker
gmarker = new GMarker(new GPoint(marker.longitude, marker.latitude), gicon);
// Set HTML and check if info window should be opened
if (marker.html) { gmarker.bindInfoWindowHtml(opts.html_prepend + marker.html + opts.html_append); }
if (marker.html && marker.popup) { gmarker.openInfoWindowHtml(opts.html_prepend + marker.html + opts.html_append); }
// Add marker to map
if (gmarker) { gmap.addOverlay(gmarker); }
}
}
});
}
// Default settings
$.fn.gMap.defaults =
{
address: '',
latitude: 0,
longitude: 0,
zoom: 1,
markers: [],
controls: [],
scrollwheel: true,
maptype: G_NORMAL_MAP,
html_prepend: '<div class="gmap_marker">',
html_append: '</div>',
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);