$(function () { if ($().mxgoogleMaps) { } else { $.fn.mxgoogleMaps = function (options) { var opts = $.extend( { }, $.mxgoogleMaps.defaults, options); return this.each(function () { id_random = Math.floor(Math.random() * 1000 + 1); opts.field_id = typeof(opts.field_id) != 'undefined' ? opts.field_id : id_random; $.mxgoogleMaps.gMap[opts.field_id] = new google.maps.Map(this, opts); google.maps.event.trigger($.mxgoogleMaps.gMap[opts.field_id], 'resize'); $.mxgoogleMaps.geocoder = new google.maps.Geocoder(); $.mxgoogleMaps.mapsConfiguration(opts); if (opts.cp) { $.mxgoogleMaps.cp_ini(opts) } }) } } }); $.mxgoogleMaps = { cp_ini: function (opts) { google.maps.event.addListener($.mxgoogleMaps.gMap[opts.field_id], "dragend", function () { $.mxgoogleMaps.set_field_data(opts.field_id) }); google.maps.event.addListener($.mxgoogleMaps.gMap[opts.field_id], 'zoom_changed', function () { $.mxgoogleMaps.set_field_data(opts.field_id) }); $("." + opts.field_id + "_btn_geocode").click(function () { $.mxgoogleMaps.geocode_address(opts.field_id) }); $("." + opts.field_id + "_btn_addmarker").click(function () { $.mxgoogleMaps.addmarker($.mxgoogleMaps.gMap[opts.field_id].getCenter(), opts.field_id, opts.max_points, true, false, opts.custom_fields) }); $("." + opts.field_id + "_btn_cmarker").click(function () { $.mxgoogleMaps.marker[opts.field_id].setPosition($.mxgoogleMaps.gMap[opts.field_id].getCenter()) }); $("#hold_" + (opts.field_id).replace("_id_", "_") + " .hide_field span, .ui-droppable").click(function () { google.maps.event.trigger($.mxgoogleMaps.gMap[opts.field_id], 'resize') }); $("." + opts.field_id + "_btn_apply").click(function () { var _field_id = $(this).attr('rel'); var _marker = $.mxgoogleMaps.marker[$.mxgoogleMaps.activePoint[_field_id]]; var _icon_name = $("#gmap-icon_" + _field_id).val(); _marker.icon_name = _icon_name; _marker.setIcon(marker_icons_path + _icon_name); for (var g_id in opts.custom_fields) { $('input[name="' + _field_id + '\[' + _marker.id + '\]\[' + opts.custom_fields[g_id].f_name + '\]"]').val($('#' + opts.custom_fields[g_id].f_name + '_' + _field_id).val()) }; $('input[name="' + _field_id + '\[' + _marker.id + '\]\[icon\]"]').val($('#gmap-icon_' + _field_id).val()) }); $("." + opts.field_id + "_btn_move").click(function () { $.mxgoogleMaps.marker[$.mxgoogleMaps.activePoint[$(this).attr('rel')]].setPosition($.mxgoogleMaps.gMap[opts.field_id].getCenter()) }); $("." + opts.field_id + "_btn_delete").click(function () { $.mxgoogleMaps.max_points[$(this).attr('rel')] = $.mxgoogleMaps.max_points[$(this).attr('rel')] - 1; $.mxgoogleMaps.marker[$.mxgoogleMaps.activePoint[$(this).attr('rel')]].setMap(null); $("#m" + $.mxgoogleMaps.activePoint[$(this).attr('rel')]).remove() }) }, mapsConfiguration: function (opts) { var center = $.mxgoogleMaps.mapLatLong(opts.latitude, opts.longitude); $.mxgoogleMaps.gMap[opts.field_id].setCenter(center, opts.zoom); if (opts.markers) { $.mxgoogleMaps.max_points[opts.field_id] = 0; $.mxgoogleMaps.icon[opts.field_id] = opts.icon; $.mxgoogleMaps.mapMarkers(center, opts.markers, opts.field_id, opts.max_points, opts.cp, opts.custom_fields); } if (opts.overlays) { $.mxgoogleMaps.addOverlay(center, opts.overlays, center, markers, opts.cp) } if (opts.custom_fields) { field_list = ""; for (var g_id in opts.custom_fields) { field_list = field_list + ''; field_list = field_list + '' }; $('#panel_main_el_' + opts.field_id + ' .custom_fields').html(field_list) } }, directions: { }, latitude: '', longitude: '', latlong: { }, maps: { }, marker: { }, markers: { }, max_points: { }, infowindow: { }, imageBounds: { }, overlays: { }, overlay: { }, gMap: { }, activePoint: { }, geocoder: { }, cp: false, field_id: '', icon: { }, mapLatLong: function (latitude, longitude) { return new google.maps.LatLng(latitude, longitude) }, mapMarkers: function (center, markers, field_id, max_points, cp, custom_fields) { if (typeof(markers.length) == 'undefined') markers = [markers]; i = 0; j = 0; for (var g_id in markers) { $.mxgoogleMaps.addmarker(center, field_id, max_points, cp, markers[g_id], custom_fields) } }, updateMarkerPosition: function (latLng, field_id, zoom) { }, addOverlay: function (center, field_id, max_points, cp, opts) { }, addmarker: function (center, field_id, max_points, cp, opts, custom_fields) { if ($.mxgoogleMaps.max_points[field_id] < max_points || !cp) { if (opts) { id = opts.marker_id; $.mxgoogleMaps.marker[id] = new google.maps.Marker( { position: new google.maps.LatLng(opts.latitude, opts.longitude), map: $.mxgoogleMaps.gMap[field_id], id: id, icon_name: opts.icon, opts: opts }); if (typeof(opts.infow) != 'undefined') { $.mxgoogleMaps.infowindow[id] = new google.maps.InfoWindow( { content: opts.infow }); google.maps.event.addListener($.mxgoogleMaps.marker[id], 'click', function () { if ($.mxgoogleMaps.lastClickedWindow != null) $.mxgoogleMaps.infowindow[$.mxgoogleMaps.lastClickedWindow].close(); $.mxgoogleMaps.lastClickedWindow = this.id; $.mxgoogleMaps.infowindow[this.id].open(this.map, this); }); }; if (cp) { $.mxgoogleMaps.add_hidden_fields(center, field_id, id, custom_fields); for (var g_id in custom_fields) { $('input[name="' + field_id + '\[' + id + '\]\[' + custom_fields[g_id].f_name + '\]"]').val(opts[custom_fields[g_id].f_name]) }; $('input[name="' + field_id + '\[' + id + '\]\[icon\]"]').val(opts.icon); $('input[name="' + field_id + '\[' + id + '\]\[lat\]"]').val(opts.latitude); $('input[name="' + field_id + '\[' + id + '\]\[long\]"]').val(opts.longitude); } if (opts.icon != 'default' && opts.icon != '') { $.mxgoogleMaps.marker[id].setIcon(marker_icons_path + opts.icon) } } else { id = Math.floor(Math.random() * 1000 + 1); $.mxgoogleMaps.marker[id] = new google.maps.Marker( { position: center, map: $.mxgoogleMaps.gMap[field_id], id: id, icon_name: $.mxgoogleMaps.icon[field_id] }); if (cp) { $.mxgoogleMaps.add_hidden_fields(center, field_id, id, custom_fields); $.mxgoogleMaps.set_active_marker($.mxgoogleMaps.marker[id], field_id, custom_fields); if ($.mxgoogleMaps.icon[field_id] != 'default' && $.mxgoogleMaps.icon[field_id] != '') { $.mxgoogleMaps.marker[id].setIcon(marker_icons_path + $.mxgoogleMaps.icon[field_id]) } } } if (cp) { $.mxgoogleMaps.marker[id].draggable = true; google.maps.event.addListener($.mxgoogleMaps.marker[id], "dragend", function () { $.mxgoogleMaps.set_active_marker(this, field_id, custom_fields); $.mxgoogleMaps.set_input(this, field_id, custom_fields) }); google.maps.event.addListener($.mxgoogleMaps.marker[id], 'click', function () { $.mxgoogleMaps.set_active_marker(this, field_id, custom_fields); $.mxgoogleMaps.gMap[this.map.field_id].setCenter(this.getPosition()); $.mxgoogleMaps.set_field_data(field_id); }) } $.mxgoogleMaps.max_points[field_id] += 1 } }, lastClickedWindow: null, set_active_marker: function (marker, field_id, custom_fields) { $.mxgoogleMaps.updateMarkerPosition(marker.getPosition(), field_id, $.mxgoogleMaps.gMap[field_id].getZoom()); $.mxgoogleMaps.geocodePosition(marker.getPosition(), field_id, custom_fields); $.mxgoogleMaps.activePoint[marker.map.field_id] = marker.id; $.mxgoogleMaps.set_input(marker, field_id, custom_fields); }, add_hidden_fields: function (center, field_id, point_id, custom_fields) { fields = ""; for (var g_id in custom_fields) { fields = fields + ''; }; fields = '