/**
* jQuery gMap - Google Maps API V3
*
* @license MIT License; http://www.opensource.org/licenses/mit-license.php
* @url http://github.com/marioestrada/jQuery-gMap
* @author Mario Estrada based on original plugin by Cedric Kastner
* @version 2.2
*/
/* global google */
! function(e) {
e.fn.gMap = function(o, a) {
switch (o) {
case "addMarker":
return e(this).trigger("gMap.addMarker", [a.latitude, a.longitude, a.content, a.icon, a.popup]);
case "centerAt":
return e(this).trigger("gMap.centerAt", [a.latitude, a.longitude, a.zoom]);
case "clearMarkers":
return e(this).trigger("gMap.clearMarkers")
}
var n = e.extend({}, e.fn.gMap.defaults, o);
return this.each(function() {
var o = new google.maps.Map(this);
e(this).data("gMap.reference", o);
var a = new google.maps.Geocoder;
n.address ? a.geocode({
address: n.address
}, function(e) {
e && e.length && o.setCenter(e[0].geometry.location)
}) : n.latitude && n.longitude ? o.setCenter(new google.maps.LatLng(n.latitude, n.longitude)) : e.isArray(n.markers) && n.markers.length > 0 ? n.markers[0].address ? a.geocode({
address: n.markers[0].address
}, function(e) {
e && e.length > 0 && o.setCenter(e[0].geometry.location)
}) : o.setCenter(new google.maps.LatLng(n.markers[0].latitude, n.markers[0].longitude)) : o.setCenter(new google.maps.LatLng(34.885931, 9.84375)), o.setZoom(n.zoom), o.setMapTypeId(google.maps.MapTypeId[n.maptype]);
var s = {
scrollwheel: n.scrollwheel,
disableDoubleClickZoom: !n.doubleclickzoom
};
n.controls === !1 ? e.extend(s, {
disableDefaultUI: !0
}) : 0 !== n.controls.length && e.extend(s, n.controls, {
disableDefaultUI: !0
}), o.setOptions(s), o.setOptions({
styles: n.styles
});
var t, r, i = new google.maps.Marker;
t = new google.maps.MarkerImage(n.icon.image), t.size = new google.maps.Size(n.icon.iconsize[0], n.icon.iconsize[1]), t.anchor = new google.maps.Point(n.icon.iconanchor[0], n.icon.iconanchor[1]), i.setIcon(t), n.icon.shadow && (r = new google.maps.MarkerImage(n.icon.shadow), r.size = new google.maps.Size(n.icon.shadowsize[0], n.icon.shadowsize[1]), r.anchor = new google.maps.Point(n.icon.shadowanchor[0], n.icon.shadowanchor[1]), i.setShadow(r)), e(this).bind("gMap.centerAt", function(e, a, n, s) {
s && o.setZoom(s), o.panTo(new google.maps.LatLng(parseFloat(a), parseFloat(n)))
});
var g = [];
e(this).bind("gMap.clearMarkers", function() {
for (; g[0];) g.pop().setMap(null)
});
var l;
e(this).bind("gMap.addMarker", function(e, a, s, t, r, d) {
var c, p, m = new google.maps.LatLng(parseFloat(a), parseFloat(s)),
h = new google.maps.Marker({
position: m
});
if (r ? (c = new google.maps.MarkerImage(r.image), c.size = new google.maps.Size(r.iconsize[0], r.iconsize[1]), c.anchor = new google.maps.Point(r.iconanchor[0], r.iconanchor[1]), h.setIcon(c), r.shadow && (p = new google.maps.MarkerImage(r.shadow), p.size = new google.maps.Size(r.shadowsize[0], r.shadowsize[1]), p.anchor = new google.maps.Point(r.shadowanchor[0], r.shadowanchor[1]), i.setShadow(p))) : (h.setIcon(i.getIcon()), h.setShadow(i.getShadow())), t) {
"_latlng" === t && (t = a + ", " + s);
var w = new google.maps.InfoWindow({
content: n.html_prepend + t + n.html_append
});
google.maps.event.addListener(h, "click", function() {
l && l.close(), w.open(o, h), l = w
}), d && google.maps.event.addListenerOnce(o, "tilesloaded", function() {
w.open(o, h)
})
}
h.setMap(o), g.push(h)
});
for (var d, c = this, p = function(o) {
return function(a) {
a && a.length > 0 && e(c).trigger("gMap.addMarker", [a[0].geometry.location.lat(), a[0].geometry.location.lng(), o.html, o.icon, o.popup])
}
}, m = 0; m < n.markers.length; m++) d = n.markers[m], d.address ? ("_address" === d.html && (d.html = d.address), a.geocode({
address: d.address
}, p(d))) : e(this).trigger("gMap.addMarker", [d.latitude, d.longitude, d.html, d.icon, d.popup])
})
}, e.fn.gMap.defaults = {
address: "",
latitude: 0,
longitude: 0,
zoom: 1,
markers: [],
controls: [],
styles: [],
scrollwheel: !1,
doubleclickzoom: !0,
maptype: "ROADMAP",
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],
shadowanchor: [6, 34]
}
}
}(jQuery);