(function (b) { var c = []; var a; b.fn.gMap = function (d, f) { switch (d) { case "addMarker": return b(this).trigger("gMap.addMarker", [f.latitude, f.longitude, f.content, f.icon, f.popup, f.category]); case "centerAt": return b(this).trigger("gMap.centerAt", [f.latitude, f.longitude, f.zoom]); case "toggleMarker": return e(f.element) } opts = b.extend({}, b.fn.gMap.defaults, d); return this.each(function () { var h = new google.maps.Map(this); $geocoder = new google.maps.Geocoder(); if (opts.address) { $geocoder.geocode({ address: opts.address }, function (m, j) { if (m.length > 0) { h.setCenter(m[0].geometry.location) } }) } else { if (opts.latitude && opts.longitude) { h.setCenter(new google.maps.LatLng(opts.latitude, opts.longitude)) } else { if (b.isArray(opts.markers) && opts.markers.length > 0) { if (opts.markers[0].address) { $geocoder.geocode({ address: opts.markers[0].address }, function (m, j) { if (m.length > 0) { h.setCenter(m[0].geometry.location) } }) } else { h.setCenter(new google.maps.LatLng(opts.markers[0].latitude, opts.markers[0].longitude)) } } else { h.setCenter(new google.maps.LatLng(34.885931, 9.84375)) } } } h.setZoom(opts.zoom); h.setMapTypeId(google.maps.MapTypeId[opts.maptype]); map_options = { scrollwheel: opts.scrollwheel }; if (opts.controls === false) { b.extend(map_options, { disableDefaultUI: true }) } else { if (opts.controls.length != 0) { b.extend(map_options, opts.controls, { disableDefaultUI: true }) } } h.setOptions(map_options); var k = new google.maps.Marker(); marker_icon = new google.maps.MarkerImage(opts.icon.image); marker_icon.size = new google.maps.Size(opts.icon.iconsize[0], opts.icon.iconsize[1]); marker_icon.anchor = new google.maps.Point(opts.icon.iconanchor[0], opts.icon.iconanchor[1]); k.setIcon(marker_icon); if (opts.icon.shadow) { marker_shadow = new google.maps.MarkerImage(opts.icon.shadow); marker_shadow.size = new google.maps.Size(opts.icon.shadowsize[0], opts.icon.shadowsize[1]); marker_shadow.anchor = new google.maps.Point(opts.icon.shadowanchor[0], opts.icon.shadowanchor[1]); k.setShadow(marker_shadow) } b(this).bind("gMap.centerAt", function (n, o, m, j) { if (j) { h.setZoom(j) } h.panTo(new google.maps.LatLng(parseFloat(o), parseFloat(m))) }); b(this).bind("gMap.addMarker", function (q, s, j, r, t, m) { var n = new google.maps.LatLng(parseFloat(s), parseFloat(j)); var p = new google.maps.Marker({ position: n, category: marker.category }); if (t) { marker_icon = new google.maps.MarkerImage(t.image); marker_icon.size = new google.maps.Size(t.iconsize[0], t.iconsize[1]); marker_icon.anchor = new google.maps.Point(t.iconanchor[0], t.iconanchor[1]); p.setIcon(marker_icon); if (t.shadow) { marker_shadow = new google.maps.MarkerImage(t.shadow); marker_shadow.size = new google.maps.Size(t.shadowsize[0], t.shadowsize[1]); marker_shadow.anchor = new google.maps.Point(t.shadowanchor[0], t.shadowanchor[1]); k.setShadow(marker_shadow) } } else { p.setIcon(k.getIcon()); p.setShadow(k.getShadow()) } if (r) { if (r == "_latlng") { r = s + ", " + j } var o = new google.maps.InfoWindow({ content: opts.html_prepend + r + opts.html_append }); google.maps.event.addListener(p, "click", function () { a && a.close(); o.open(h, p); a = o }); m && o.open(h, p) } p.setMap(h); c.push(p); iw = a }); for (var g = 0; g < opts.markers.length; g++) { marker = opts.markers[g]; if (marker.address) { if (marker.html == "_address") { marker.html = marker.address } var l = this; $geocoder.geocode({ address: marker.address }, (function (j, m) { return function (o, n) { if (o.length > 0) { b(m).trigger("gMap.addMarker", [o[0].geometry.location.lat(), o[0].geometry.location.lng(), j.html, j.icon]) } } })(marker, l)) } else { b(this).trigger("gMap.addMarker", [marker.latitude, marker.longitude, marker.html, marker.icon]) } } }); function e(h) { var g = h.val(); if (c) { if (a) { a.close() } for (i in c) { if (c[i].category == g) { c[i].setVisible(h.is(":checked")) } } } } }; b.fn.gMap.defaults = { address: "", latitude: 0, longitude: 0, zoom: 1, markers: [], controls: [], scrollwheel: false, maptype: "ROADMAP", 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], shadowanchor: [6, 34]}} })(jQuery);
