PageSourceSearch

https://www.aizawa-group.co.jp/home/wp-content/plugins/wp-google-map-gold/assets/js/maps.js?ver=4.7.29

js aizawa-group.co.jp collected 2026-10-02 18:32:06 UTC 147,999 bytes, 3,412 lines download raw bytes

1/**
2 * This jQuery plugin displays map and it's components.
3 * @author Flipper Code (hello *at* flippercode *dot* com)
4 * @version 1.0
5 */
6(function($, window, document, undefined) {
7
8
9
10    function Map_Control(options) {
11        this.options = options;
12    }
13    Map_Control.prototype.create_element = function(controlDiv, map, html_element) {
14
15        // Set CSS for the control border
16        var controlUI = document.createElement('div');
17        controlUI.style.backgroundColor = '#fff';
18        controlUI.style.border = '2px solid #fff';
19        controlUI.style.borderRadius = '3px';
20        controlUI.style.boxShadow = '0 2px 6px rgba(0,0,0,.3)';
21        controlUI.style.cursor = 'pointer';
22        controlUI.style.marginBottom = '22px';
23        controlUI.style.textAlign = 'center';
24        controlUI.title = 'Click to recenter the map';
25        controlDiv.appendChild(controlUI);
26
27        // Set CSS for the control interior
28        var controlText = document.createElement('div');
29        controlText.style.color = 'rgb(25,25,25)';
30        controlText.style.fontFamily = 'Roboto,Arial,sans-serif';
31        controlText.style.fontSize = '16px';
32        controlText.style.lineHeight = '38px';
33        controlText.style.paddingLeft = '5px';
34        controlText.style.paddingRight = '5px';
35        controlText.innerHTML = html_element;
36        controlUI.appendChild(controlText);
37        google.maps.event.addDomListener(controlUI, 'click', function() {
38            map.setCenter(new google.maps.LatLng(41.85, -87.65));
39        });
40
41    };
42
43    function overlay_generator(tileSize, options) {
44        this.tileSize = tileSize;
45        this.overlay_options = options;
46    }
47
48    overlay_generator.prototype.getTile = function(coord, zoom, ownerDocument) {
49        var div = ownerDocument.createElement("div");
50        div.innerHTML = coord;
51        div.style.width = "200px";
52        div.style.height = "300px";
53        div.style.fontSize = this.overlay_options.font_size + "px";
54        div.style.borderStyle = this.overlay_options.border_style;
55        div.style.borderWidth = this.overlay_options.border_width + "px";
56        div.style.borderColor = this.overlay_options.border_color;
57        return div;
58    };
59
60    function GoogleMaps(element, map_data) {
61        var options;
62        this.element = element;
63        this.map_data = $.extend({}, {}, map_data);
64        options = this.map_data.map_options;
65        this.settings = $.extend({
66            "zoom": "5",
67            "map_type_id": "ROADMAP",
68            "scroll_wheel": true,
69            "map_visual_refresh": false,
70            "full_screen_control": false,
71            "full_screen_control_position": "BOTTOM_RIGHT",
72            "zoom_control": true,
73            "zoom_control_style": "SMALL",
74            "zoom_control_position": "TOP_LEFT",
75            "map_type_control": true,
76            "map_type_control_style": "HORIZONTAL_BAR",
77            "map_type_control_position": "RIGHT_TOP",
78            "scale_control": true,
79            "street_view_control": true,
80            "street_view_control_position": "TOP_LEFT",
81            "overview_map_control": true,
82            "center_lat": "40.6153983",
83            "center_lng": "-74.2535216",
84            "draggable": true
85        }, {}, options);
86        this.container = $("div[rel='" + $(this.element).attr("id") + "']");
87
88        var suppress_markers = false;
89        if (typeof this.map_data.map_tabs != 'undefined' && typeof this.map_data.map_tabs.direction_tab != 'undefined') {
90            suppress_markers = this.map_data.map_tabs.direction_tab.suppress_markers;
91        }
92        this.directionsService = new google.maps.DirectionsService();
93        this.directionsDisplay = new google.maps.DirectionsRenderer({
94            suppressMarkers: suppress_markers,
95        });
96        this.drawingmanager = {};
97        this.geocoder = new google.maps.Geocoder();
98        this.places = [];
99        this.show_places = [];
100        this.categories = {};
101        this.tabs = [];
102        this.all_shapes = [];
103        this.wpgmp_polylines = [];
104        this.wpgmp_polygons = [];
105        this.wpgmp_circles = [];
106        this.wpgmp_shape_events = [];
107        this.wpgmp_rectangles = [];
108        this.per_page_value = 0;
109        this.current_amenities = [];
110        this.route_directions = [];
111        this.search_area = '';
112        this.markerClusterer = null;
113        this.init();
114    }
115
116    GoogleMaps.prototype = {
117
118        init: function() {
119            var map_obj = this;
120
121            var center = new google.maps.LatLng(map_obj.settings.center_lat, map_obj.settings.center_lng);
122            map_obj.map = new google.maps.Map(map_obj.element, {
123                zoom: parseInt(map_obj.settings.zoom),
124                center: center,
125                disableDoubleClickZoom: (map_obj.settings.scroll_wheel != 'false'),
126                scrollwheel: (map_obj.settings.scroll_wheel != 'false'),
127                zoomControl: (map_obj.settings.zoom_control === true),
128                fullscreenControl: (map_obj.settings.full_screen_control === true),
129                fullscreenControlOptions: {
130                    position: eval("google.maps.ControlPosition." + map_obj.settings.full_screen_control_position)
131                },
132                zoomControlOptions: {
133                    style: eval("google.maps.ZoomControlStyle." + map_obj.settings.zoom_control_style),
134                    position: eval("google.maps.ControlPosition." + map_obj.settings.zoom_control_position)
135                },
136                mapTypeControl: (map_obj.settings.map_type_control == true),
137                mapTypeControlOptions: {
138                    style: eval("google.maps.MapTypeControlStyle." + map_obj.settings.map_type_control_style),
139                    position: eval("google.maps.ControlPosition." + map_obj.settings.map_type_control_position)
140                },
141                scaleControl: (map_obj.settings.scale_control == true),
142                streetViewControl: (map_obj.settings.street_view_control == true),
143                streetViewControlOptions: {
144                    position: eval("google.maps.ControlPosition." + map_obj.settings.street_view_control_position)
145                },
146                overviewMapControl: (map_obj.settings.overview_map_control == true),
147                overviewMapControlOptions: {
148                    opened: map_obj.settings.overview_map_control
149                },
150                draggable: map_obj.settings.draggable,
151                mapTypeId: eval("google.maps.MapTypeId." + map_obj.settings.map_type_id
151),
152                styles: eval(map_obj.map_data.styles)
153            });
154
155            map_obj.map_loaded();
156            map_obj.responsive_map();
157            map_obj.create_markers();
158            map_obj.display_markers();
159
160            if (typeof map_obj.map_data.street_view != 'undefined') {
161                map_obj.set_streetview(center);
162            }
163
164            if (typeof map_obj.map_data.weather_layer != 'undefined') {
165                map_obj.set_weather_layer();
166            }
167
168            if (typeof map_obj.map_data.bicyle_layer != 'undefined') {
169                map_obj.set_bicyle_layer();
170            }
171
172            if (typeof map_obj.map_data.traffic_layer != 'undefined') {
173                map_obj.set_traffic_layer();
174            }
175
176            if (typeof map_obj.map_data.transit_layer != 'undefined') {
177                map_obj.set_transit_layer();
178            }
179
180            if (typeof map_obj.map_data.panoramio_layer != 'undefined') {
181                map_obj.set_panoramic_layer();
182            }
183
184            if (typeof map_obj.map_data.overlay_setting != 'undefined') {
185                map_obj.set_overlay();
186            }
187
188            if (map_obj.settings.display_45_imagery == '45') {
189                map_obj.set_45_imagery();
190            }
191
192            if (typeof map_obj.map_data.map_visual_refresh === true) {
193                map_obj.set_visual_refresh();
194            }
195
196            if (typeof map_obj.map_data.marker_cluster != 'undefined') {
197                map_obj.set_marker_cluster();
198            }
199
200            if (typeof map_obj.map_data.panning_control != 'undefined') {
201                map_obj.set_panning_control();
202            }
203
204            if (typeof map_obj.map_data.kml_layer != 'undefined') {
205                map_obj.set_kml_layer();
206            }
207
208            if (typeof map_obj.map_data.fusion_layer != 'undefined') {
209                map_obj.set_fusion_layer();
210            }
211
212            if (typeof map_obj.map_data.shapes != 'undefined') {
213
214                if (typeof map_obj.map_data.shapes.shape != 'undefined') {
215                    map_obj.opened_info = new google.maps.InfoWindow();
216                    if (typeof map_obj.map_data.shapes.shape.polygons != 'undefined')
217                        map_obj.create_polygon();
218
219                    if (typeof map_obj.map_data.shapes.shape.polylines != 'undefined')
220                        map_obj.create_polyline();
221
222                    if (typeof map_obj.map_data.shapes.shape.circles != 'undefined')
223                        map_obj.create_circle();
224
225                    if (typeof map_obj.map_data.shapes.shape.rectangles != 'undefined')
226                        map_obj.create_rectangle();
227                }
228            }
229
230            if (typeof map_obj.map_data.routes != 'undefined') {
231                map_obj.create_routes();
232            }
233
234            if (typeof map_obj.map_data.listing != 'undefined') {
235                if (typeof map_obj.map_data.listing.default_sorting != 'undefined') {
236                    map_obj.sorting(map_obj.map_data.listing.default_sorting.orderby, map_obj.map_data.listing.default_sorting.inorder);
237                }
238            }
239
240            if (typeof map_obj.map_data.listing != 'undefined') {
241
242                map_obj.display_filters_listing();
243
244                $.each(map_obj.map_data.listing.filters, function(key, filter) {
245
246                    $(map_obj.container).find('select[name="' + filter + '"]').on('change', function() {
247                        map_obj.update_filters();
248                    });
249
250                });
251
252                $(map_obj.container).find('select[name="map_sorting"]').on('change', function() {
253
254                    var order_data = $(this).val().split("_");
255
256                    if (order_data[0] !== '' && order_data[1] !== '') {
257                        map_obj.sorting(order_data[0], order_data[1]);
258                        map_obj.update_places_listing();
259                    }
260
261                });
262
263                $(map_obj.container).find('select[name="map_radius"]').on('change', function() {
264
265                    var search_data = $(map_obj.container).find('input[name="wpgmp_search_input"]').val();
266                    if (search_data.length >= 2 && $(this).val() != '') {
267                        map_obj.geocoder.geocode({
268                            "address": search_data
269                        }, function(results, status) {
270
271                            if (status == google.maps.GeocoderStatus.OK) {
272                                map_obj.search_area = results[0].geometry.location;
273                                map_obj.update_filters();
274                            }
275
276                        });
277                    } else {
278                        map_obj.search_area = '';
279                        map_obj.update_filters();
280                    }
281
282
283                });
284
285                $(map_obj.container).find('select[name="map_perpage_location_sorting"]').on('change', function() {
286
287                    map_obj.per_page_value = $(this).val();
288                    map_obj.update_filters();
289
290                });
291
292                $(map_obj.container).find('input[name="wpgmp_search_input"]').on('keyup', function() {
293
294                    $(map_obj.container).find('select[name="map_radiu
294s"]').val('');
295                    map_obj.search_area = '';
296                    map_obj.update_filters();
297
298                });
299
300                $(map_obj.container).find(".location_pagination" + map_obj.map_data.map_property.map_id).pagination(map_obj.show_places.length, {
301                    callback: map_obj.display_places_listing,
302                    map_data: map_obj,
303                    items_per_page: map_obj.map_data.listing.pagination.listing_per_page,
304                    prev_text: wpgmp_local.prev,
305                    next_text: wpgmp_local.next
306                });
307
308                $(map_obj.container).find('.wpgmp_locations').responsiveEqualHeightGrid();
309            }
310
311            $('.wpgmp-shape-delete').click(function() {
312
313                map_obj.deleteSelectedShape();
314                $('.hiderow').hide();
315            });
316
317            $('select[name="shape_stroke_opacity"]').change(function() {
318                map_obj.set_shapes_options(map_obj.selectedShape);
319            });
320            $('select[name="shape_stroke_weight"]').change(function() {
321                map_obj.set_shapes_options(map_obj.selectedShape);
322            });
323            $('select[name="shape_stroke_color"]').change(function() {
324                map_obj.set_shapes_options(map_obj.selectedShape);
325            });
326            $('select[name="shape_fill_opacity"]').change(function() {
327                map_obj.set_shapes_options(map_obj.selectedShape);
328            });
329            $('select[name="shape_fill_color"]').change(function() {
330                map_obj.set_shapes_options(map_obj.selectedShape);
331            });
332            $('input[name="shape_click_url"]').change(function() {
333                map_obj.set_shapes_options(map_obj.selectedShape);
334            });
335            $('textarea[name="shape_click_message"]').blur(function() {
336                map_obj.set_shapes_options(map_obj.selectedShape);
337            });
338
339            $("textarea[name='shape_path']").blur(function() {
340                var cordinates = $(this).val().split(' ');
341                if (cordinates.length == 1) {
342                    cordinates = $(this).val().split("\n");
343                }
344                var path = [];
345                $.each(cordinates, function(ind, cordinate) {
346                    var latlng = cordinate.split(',');
347                    path.push(new google.maps.LatLng(latlng[0], latlng[1]));
348                });
349                map_obj.selectedShape.setPath(path);
350            });
351
352            $("input[name='shape_radius']").blur(function() {
353                var radius = parseFloat($(this).val());
354                map_obj.selectedShape.setRadius(radius);
355            });
356
357            $("input[name='shape_center']").blur(function() {
358                var latlng = $(this).val().split(',');
359                map_obj.selectedShape.setCenter(new google.maps.LatLng(parseFloat(latlng[0]), parseFloat(latlng[1])));
360            });
361
362            $("input[name='shape_northeast']").blur(function() {
363                var ea = $(this).val().split(',');
364                var sw = $("input[name='shape_southwest']").val().split(',');
365
366                map_obj.selectedShape.setBounds(new google.maps.LatLngBounds(new google.maps.LatLng(parseFloat(sw[0]), parseFloat(sw[1])), new google.maps.LatLng(parseFloat(ea[0]), parseFloat(ea[1]))));
367            });
368
369            $("input[name='shape_southwest']").blur(function() {
370                var sw = $(this).val().split(',');
371                var ea = $("input[name='shape_northeast']").val().split(',');
372
373                map_obj.selectedShape.setBounds(new google.maps.LatLngBounds(new google.maps.LatLng(parseFloat(sw[0]), parseFloat(sw[1])), new google.maps.LatLng(parseFloat(ea[0]), parseFloat(ea[1]))));
374            });
375
376            $("input[name='shape_center']").blur(function() {
377                var latlng = $(this).val().split(',');
378                map_obj.selectedShape.setCenter(new google.maps.LatLng(parseFloat(latlng[0]), parseFloat(latlng[1])));
379            });
380
381            $('input[name="wpgmp_save_drawing"]').click(function() {
382
383                var all_shapes_cordinate = [];
384
385                all_shapes_cordinate.push('polylines=' + map_obj.wpgmp_save_polylines().join('::'));
386                all_shapes_cordinate.push('polygons=' + map_obj.wpgmp_save_polygons().join('::'));
387                all_shapes_cordinate.push('circles=' + map_obj.wpgmp_save_circles().join('::'));
388                all_shapes_cordinate.push('rectangles=' + map_obj.wpgmp_save_rectangles().join('::'));
389
390                map_obj.wpgmp_save_shapes(all_shapes_cordinate);
391
392            });
393            if (typeof map_obj.map_data.shapes != 'undefined') {
394                if (map_obj.map_data.shapes.drawing_editable === true) {
395                    $('.wpgmp-overview .color').wpColorPicker({
396                        change: function(event, ui) {
397                            map_obj.set_shapes_options(map_obj.selectedShape);
398                        }
399                    });
400                }
401            }
402
403
404
405            if (typeof map_obj.map_data.map_tabs != 'undefined') {
406                this.map_widgets();
407
408                $(map_obj.element).find(".wpgmp_toggle_main_container").find("div[id^='wpgmp_tab_']").css("display", "none");
409
410                if (map_obj.settings.infowindow_filter_only === false) {
411
412                    $(map_obj.element).find(".wpgmp_specific_category_item").attr("checked", true);
413
414                    $(map_obj.element).find(".wpgmp_specific_location_item").attr("checked", true);
415
416                }
417
418                if (this.map_data.map_tabs.category_tab.select_all === true) {
419
420                    $(map_obj.element).find('input[name="wpgmp_select_all"]').click(function() {
421                        if ($(this).is(":checked")) {
422                            $(map_obj.element).find(".wpgmp_specific_category_item").attr("checked", true);
423                        } else {
424                            $(map_obj.element).find(".wpgmp_specific_category_item").attr("checked", false);
425                        }
426                        map_obj.update_filters();
427                    });
428                }
429
430                $(map_obj.element).find(".wpgmp_toggle_container").click(function() {
431
432                    $(map_obj.element).find(".wpgmp_toggle_main_container").slideToggle("slow");
433
434                    if ($(this).text() == wpgmp_local.hide) {
435                        $(this).text(wpgmp_local.show);
436                    } else {
437                        $(this).text(wpgmp_local.hide);
438                    }
439
440                });
441
442                if (map_obj.map_data.map_tabs.hide_tabs_default === true) {
443                    $(map_obj.element).find(".wpgmp_toggle_container").trigger('click');
444                }
445
446                $(map_obj.element).find(".wpgmp_specific_route_item").attr("checked", true);
447
448                $(map_obj.element).find(".wpgmp_toggle_main_container").find("div[id^='wpgmp_tab_']").first().css("display", "block");
449
450                $(map_obj.element).on('click', "li[class^='wpgmp-tab-'] a", function() {
451
452                    $(map_obj.element).find("li[class^='wpgmp-tab-'] a").removeClass('active');
453
454                    $(this).addClass('active');
455
456                    $(map_obj.element).find(".wpgmp_toggle_main_container").find("div[id^='wpgmp_tab_']").css("display", "none");
457
458                    $(map_obj.element).find(".wpgmp_toggle_main_container").find("#wpgmp_tab_" + $(this).parent().attr('rel')).css("display", "block");
459
460                });
461                $(map_obj.element).find(".wpgmp_toggle_main_container").on('change', ".wpgmp_specific_category_item", function() {
462                    //uncheck all locations
463                    if ($(this).is(":checked") === false)
464                        $(this).parent().find('.wpgmp_specific_location_item').attr('checked', false);
465                    else
466                        $(this).parent().find('.wpgmp_specific_location_item').attr('checked', true);
467
468                    map_obj.update_filters();
469                });
470
471
472                $(map_obj.element).find(".wpgmp_toggle_main_container").on('change', ".wpgmp_specific_route_item", function() {
473                    //uncheck all locations
474                    var selected_route = map_obj.route_directions[$(this).val()];
475                    if ($(this).is(":checked") === false) {
476                        selected_route.setMap(null);
477                    } else {
478                        selected_route.setMap(map_obj.map);
479                    }
480
481                });
482
483                $(map_obj.element).find(".wpgmp_toggle_main_container").on('change', ".wpgmp_specific_location_item", function() {
484                    map_obj.update_filters();
485                });
486
487                //directions tabs
488                if (this.map_data.map_tabs.direction_tab.dir_tab === true) {
489                    $(this.element).find(".wpgmp_find_direction").click(function() {
490
491                        var start = $(map_obj.element).find('.start_point');
492                        var end = $(map_obj.element).find('.end_point');
493                        var travel_mode = $(map_obj.element).find('select[name="travel_mode"]').val();
494                        var travel_unit = $(map_obj.element).find('select[name="travel_unit"]').val();
495                        var direction_panel = $(map_obj.element).find('.directions-panel');
496                        var current_address = '';
497                        if ($(start).val() === "") {
498                            $(start).focus();
499                            return false;
500                        }
501
502                        if ($(end).val() === "") {
503                            $(end).focus();
504                            return false;
505                        }
506
507                        var options = {
508                            "start": start.val(),
509                            "end": end.val(),
510                            "mode": travel_mode,
511                            "unit": travel_unit,
512                            "direction_panel": direction_panel[0],
513                            "map": map_obj.map
514                        };
515                        console.log(options);
516                        map_obj.find_direction(options);
517
518                    });
519                }
520
521                $(this.element).find(".wpgmp_find_nearby_button").click(function() {
522                        var target = $(this).parent().parent();
523                        var lat = $(target).find(".wpgmp_auto_suggest").data('latitude');
524                        var lon = $(target).find(".wpgmp_auto_suggest").data('longitude');
525                        var radius = $(map_obj.element).find("input[name='wpgmp_radius']").val();
526                        var dim = $(map_obj.element).find("select[name='wpgmp_route_dimension']").val();
527                        var amenities = $(map_obj.element).find('input[name^="wpgmp_place_types"]:checked');
528                        var divide_by = 1.60934;
529                        var service;
530                        if (dim == 'miles') {
531                            divide_by = 1.60934;
532                        } else {
533                            divide_by = 1;
534                        }
535                        var circle_radius_meters = parseInt(radius) * divide_by * 1000;
536                        // Now draw a circle.
537                        if (amenities.length > 0) {
538                            //remove all previous amenities
539                            if (map_obj.current_amenities.length > 0) {
540                                $.each(map_obj.current_amenities, function(am, amenity) {
541                                    amenity.marker.setMap(null);
542                                });
543                            }
544                            map_obj.amenity_infowindow = new google.maps.InfoWindow();
545                            var place_types = [];
546                            $.each(amenities, function(index, amenity) {
547                                place_types.push($(amenity).val());
548                            });
549                            var request = {
550                                location: new google.maps.LatLng(lat, lon),
551                                radius: circle_radius_meters,
552                                types: place_types
553                            };
554                            service = new google.maps.places.PlacesService(map_obj.map);
555                            service.nearbySearch(request, function(results, status) {
556                                if (status == google.maps.places.PlacesServiceStatus.OK) {
557                                    for (var i = 0; i < results.length; i++) {
558                                        map_obj.createMarker(results[i]);
559                                    }
560                                }
561                            });
562                        }
563
564                        map_obj.map.setCenter(new google.maps.LatLng(lat, lon));
565
566                        if (map_obj.map_data.map_tabs.nearby_tab.show_nearby_circle === true) {
567
568                            if (typeof map_obj.set_nearbycenter_circle != 'undefined') {
569                                map_obj.set_nearbycenter_circle.setMap(null);
570                            }
571                            //this.map_data.map_tabs.nearby_tab.near_tab
572                            //
573                            map_obj.set_nearbycenter_circle = new google.maps.Circle({
574                                map: map_obj.map,
575                                fillColor: map_obj.map_data.map_tabs.nearby_tab.nearby_circle_fillcolor,
576                                fillOpacity: map_obj.map_data.map_tabs.nearby_tab.nearby_circle_fillopacity,
577                                strokeColor: map_obj.map_data.map_tabs.nearby_tab.nearby_circle_strokecolor,
578                                strokeOpacity: map_obj.map_data.map_tabs.nearby_tab.nearby_circle_strokeopacity,
579                                strokeWeight: map_obj.map_data.map_tabs.nearby_tab.nearby_circle_strokeweight,
580                                center: new google.maps.LatLng(lat, lon),
581                                radius: circle_radius_meters,
582                            });
583                            map_obj.map.setZoom(parseInt(map_obj.map_data.map_tabs.nearby_tab.nearby_circle_zoom));
584                        }
585                    }),
586
587                    $(this.element).find(".wpgmp_mcurrent_loction").click(function() {
588                        var this_current = this;
589                        map_obj.get_current_location(function(user_location) {
590
591                            $(this_current).parent().find('.wpgmp_auto_suggest').data('latitude', user_location.lat());
592                            $(this_current).parent().find('.wpgmp_auto_suggest').data('longitude', user_location.lng());
593
594                            map_obj.geocoder.geocode({
595                                "latLng": user_location
596                            }, function(results, status) {
597
598                                if (status == google.maps.GeocoderStatus.OK) {
599                                    current_address = results[0]["formatted_address"];
600                                    $(this_current).parent().find('.wpgmp_auto_suggest').val(current_address);
601                                } else
602                                    console.log(status);
603
604                            });
605
606                        }, function() {
607
608                            console.log("" + wpgmp_local.wpgmp_not_working + "");
609
610                        });
611
612                    });
613            } //tabs ended
614
615
616
617            if (typeof map_obj.map_data.geojson != 'undefined') {
618                map_obj.load_json(map_obj.map_data.geojson);
619            }
620
621            $("body").on("click", ".wpgmp_marker_link", function() {
622                map_obj.open_infowindow($(this).data("marker"));
623                $('html, body').animate({
624                    scrollTop: $(map_obj.container).offset().top - 150
625                }, 500);
626            });
627
628            $(map_obj.container).on("click", ".wpgmp_listing_container .place_title", function() {
629                map_obj.open_infowindow($(this).data("marker"));
630                $('html, body').animate({
631                    scrollTop: $(map_obj.container).offset().top - 150
632                }, 500);
633            });
634
635            $(map_obj.container).on("click", ".wpgmp_tab_item .place_title", function() {
636                map_obj.open_infowindow($(this).data("marker"));
637            });
638
639            // REGISTER AUTO SUGGEST
640            map_obj.google_auto_suggest($(".wpgmp_auto_suggest"));
641
642            if (map_obj.settings.show_center_circle === true) {
643                map_obj.show_center_circle();
644            }
645
646            if (map_obj.settings.show_center_marker === true) {
647                map_obj.show_center_marker();
648            }
649
650            if (typeof map_obj.map_data.shapes != 'undefined') {
651
652                if (map_obj.map_data.shapes.drawing_editable === true)
653                    this.enable_drawing();
654
655            }
656
657
658        },
659        load_json: function(url) {
660            this.map.data.loadGeoJson(url);
661        },
662        createMarker: function(place) {
663            var map_obj = this;
664            var map = map_obj.map;
665            var placeLoc = place.geometry.location;
666            var image = {
667                url: place.icon,
668                size: new google.maps.Size(25, 25),
669                scaledSize: new google.maps.Size(25, 25)
670            };
671
672            place.marker = new google.maps.Marker({
673                map: map,
674                position: place.geometry.location,
675                icon: image
676            });
677
678            google.maps.event.addListener(place.marker, 'click', function() {
679                map_obj.amenity_infowindow.setContent(place.name);
680                map_obj.amenity_infowindow.open(map, this);
681            });
682            map_obj.current_amenities.push(place);
683        },
684        wpgmp_image_type_overlays: function() {
685            var map_obj = this;
686            var imageMapType = new google.maps.ImageMapType({
687                getTileUrl: function(coord, zoom) {
688                    return ['http://www.gstatic.com/io2010maps/tiles/5/L2_',
689                        zoom, '_', coord.x, '_', coord.y, '.png'
690                    ].join('');
691                },
692                tileSize: new google.maps.Size(256, 256)
693            });
694
695            map_obj.map.overlayMapTypes.push(imageMapType);
696
697        },
698        wpgmp_within_radius: function(place, search_area) {
699            var map_obj = this;
700            var radius = $(map_obj.container).find('select[name="map_radius"]').val();
701            var dimension = map_obj.map_data.listing.radius_dimension;
702            if (dimension == 'km') {
703                radius = parseInt(radius) * 1000;
704            } else {
705                radius = parseInt(radius) * 1609.34;
706            }
707            if (google.maps.geometry.spherical.computeDistanceBetween(place.marker.getPosition(), search_area) < radius) {
708                return true;
709            } else {
710                return false;
711            }
712        },
713        wpgmp_get_nearby_locations: function(lat1, lon1, radius) {
714            var current_rd = 'miles';
715            var map_obj = this;
716            var radius_km = 6371;
717
718
719            if (current_rd == "miles") {
720                max_radius_km = radius * 1.61;
721            } else if (current_rd == "km") {
722                max_radius_km = radius;
723            }
724
725            var distances = [];
726            var closest = -1;
727            var pi = Math.PI;
728            var marker_info = {};
729
730            $.each(map_obj.places, function(index, place) {
731
732                var lat2 = place.location.lat;
733                var lon2 = place.location.lng;
734
735                var chLat = lat2 - lat1;
736                var chLon = lon2 - lon1;
737
738                var dLat = chLat * (pi / 180);
739                var dLon = chLon * (pi / 180);
740
741
742                var rLat1 = lat1 * (pi / 180);
743                var rLat2 = lat2 * (pi / 180);
744
745                var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
746                    Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(rLat1) * Math.cos(rLat2);
747                var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
748                var d = radius_km * c;
749
750
751                if (max_radius_km !== 0) {
752                    if (d <= max_radius_km) {
753                        distances[d] = place;
754                        distances.sort(function(a, b) {
755                            return a - b;
756                        });
757                        marker_info["marker" + place.id] = d;
758                    }
759                } else {
760                    distances[d] = markers[i];
761                    distances.sort(function(a, b) {
762                        return a - b;
763                    });
764                    marker_info["marker" + place.id] = d;
765                }
766
767            });
768
769            sortest_markers = map_obj.wpgmp_sort_distance(marker_info);
770
771            return sortest_markers;
772        },
773
774        wpgmp_sort_distance: function(obj) {
775            var arr = [];
776            for (var prop in obj) {
777                if (obj.hasOwnProperty(prop)) {
778                    arr.push({
779                        "key": prop,
780                        "value": obj[prop]
781                    });
782                }
783            }
784            arr.sort(function(a, b) {
785                return a.value - b.value;
786            });
787            return arr;
788        },
789
790        get_user_position: function(SuccessCallback, ErrorCallback) {
791
792            var map_obj = this;
793
794            if (!map_obj.user_lat_lng) {
795
796                navigator.geolocation.getCurrentPosition(function(position) {
797
798                    map_obj.user_lat_lng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
799                    if (SuccessCallback)
800                        SuccessCallback(map_obj.user_lat_lng);
801
802                }, function(ErrorPosition) {
803                    if (ErrorCallback)
804                        ErrorCallback(ErrorPosition);
805                }, {
806                    enableHighAccuracy: true,
807                    timeout: 5000,
808                    maximumAge: 0
809                });
810            } else {
811                if (SuccessCallback)
812                    SuccessCallback(map_obj.user_lat_lng);
813            }
814        },
815
816        marker_bind: function(marker) {
817
818            map_obj = this;
819
820            google.maps.event.addListener(marker, 'drag', function() {
821
822                var position = marker.getPosition();
823
824                map_obj.geocoder.geocode({
825                    latLng: position
826                }, function(results, status) {
827
828                    if (status == google.maps.GeocoderStatus.OK) {
829
830                        $("#googlemap_address").val(results[0].formatted_address);
831
832                        $(".google_city").val(map_obj.wpgmp_finddata(results[0], 'administrative_area_level_3') || map_obj.wpgmp_finddata(results[0], 'locality'));
833                        $(".google_state").val(map_obj.wpgmp_finddata(results[0], "administrative_area_level_1"));
834                        $(".google_country").val(map_obj.wpgmp_finddata(results[0], "country"));
835
836                        if (results[0].address_components) {
837                            for (var i = 0; i < results[0].address_components.length; i++) {
838                                for (var j = 0; j < results[0].address_components[i].types.length; j++) {
839                                    if (results[0].address_components[i].types[j] == "postal_code") {
840                                        wpgmp_zip_code = results[0].address_components[i].long_name;
841                                        $(".google_postal_code").val(wpgmp_zip_code);
842                                    }
843                                }
844                            }
845                        }
846                    }
847                });
848
849                $(".google_latitude").val(position.lat());
850                $(".google_longitude").val(position.lng());
851            });
852
853        },
854
855        google_auto_suggest: function(obj) {
856
857            var map_obj = this;
858
859            obj.each(function() {
860                var current_input = this;
861                var autocomplete = new google.maps.places.Autocomplete(this);
862
863                autocomplete.bindTo('bounds', map_obj.map);
864
865                if ($(this).attr("name") == 'location_address') {
866                    var infowindow = new google.maps.InfoWindow();
867                    var marker = new google.maps.Marker({
868                        map: map_obj.map,
869                        draggable: true,
870                        anchorPoint: new google.maps.Point(0, -29)
871                    });
872
873                    map_obj.marker_bind(marker);
874
875                    google.maps.event.addListener(autocomplete, 'place_changed', function() {
876
877                        var place = autocomplete.getPlace();
878                        if (!place.geometry) {
879                            return;
880                        }
881
882                        // If the place has a geometry, then present it on a map.
883                        if (place.geometry.viewport) {
884                            map_obj.map.fitBounds(place.geometry.viewport);
885                        } else {
886                            map_obj.map.setCenter(place.geometry.location);
887                            map_obj.map.setZoom(17);
888                        }
889
890                        $(".google_latitude").val(place.geometry.location.lat());
891                        $(".google_longitude").val(place.geometry.location.lng());
892                        $(".google_city").val(map_obj.wpgmp_finddata(place, 'administrative_area_level_3') || map_obj.wpgmp_finddata(place, 'locality'));
893                        $(".google_state").val(map_obj.wpgmp_finddata(place, "administrative_area_level_1"));
894                        $(".google_country").val(map_obj.wpgmp_finddata(place, "country"));
895                        if (place.address_components) {
896                            for (var i = 0; i < place.address_components.length; i++) {
897                                for (var j = 0; j < place.address_components[i].types.length; j++) {
898                                    if (place.address_components[i].types[j] == "postal_code") {
899                                        wpgmp_zip_code = place.address_components[i].long_name;
900                                        $(".google_postal_code").val(wpgmp_zip_code);
901                                    }
902                                }
903                            }
904                        }
905
906                        marker.setPosition(place.geometry.location);
907                        marker.setVisible(true);
908                    });
909                } else {
910
911                    google.maps.event.addListener(autocomplete, 'place_changed', function() {
912
913                        var place = autocomplete.getPlace();
914                        if (!place.geometry) {
915                            return;
916                        }
917
918                        $().val(place.geometry.location.lat());
919                        $(current_input).data('longitude', place.geometry.location.lng());
920                        $(current_input).data('latitude', place.geometry.location.lat());
921
922                    });
923                }
924            });
925        },
926
927        wpgmp_finddata: function(result, type) {
928            var component_name = "";
929            for (i = 0; i < result.address_components.length; ++i) {
930                var component = result.address_components[i];
931                $.each(component.types, function(index, value) {
932                    if (value == type) {
933                        component_name = component.long_name;
934                    }
935                });
936
937
938            }
939            return component_name;
940        },
941        clearSelection: function() {
942            var map_obj = this;
943            if (map_obj.selectedShape) {
944                map_obj.selectedShape.setEditable(false);
945                map_obj.selectedShape = null;
946            }
947        },
948        setSelection: function(shape) {
949            var map_obj = this;
950            map_obj.clearSelection();
951            map_obj.selectedShape = shape;
952            map_obj.selectedShape.setEditable(true);
953        },
954        deleteSelectedShape: function() {
955            var map_obj = this;
956            var key;
957            if (map_obj.selectedShape) {
958                for (key in map_obj.wpgmp_circles) {
959                    if (map_obj.wpgmp_circles[key] == map_obj.selectedShape) {
960                        map_obj.wpgmp_circles.splice(key, 1);
961                    }
962                }
963                for (key in map_obj.wpgmp_rectangles) {
964                    if (map_obj.wpgmp_rectangles[key] == map_obj.selectedShape) {
965                        map_obj.wpgmp_rectangles.splice(key, 1);
966                    }
967                }
968                for (key in map_obj.wpgmp_polygons) {
969                    if (map_obj.wpgmp_polygons[key] == map_obj.selectedShape) {
970                        map_obj.wpgmp_polygons.splice(key, 1);
971                    }
972                }
973                for (key in map_obj.wpgmp_polylines) {
974                    if (map_obj.wpgmp_polylines[key] == map_obj.selectedShape) {
975                        map_obj.wpgmp_polylines.splice(key, 1);
976                    }
977                }
978                map_obj.selectedShape.setMap(null);
979            }
980        },
981        add_tab: function(title, content) {
982
983            var tab = [];
984
985            tab.title = title;
986            tab.content = content;
987            this.tabs.push(tab);
988        },
989
990        show_tabs: function() {
991
992            if (this.tabs.length === 0)
993                return;
994
995            var content = '<div class="wpgmp_tabs_container cleanslate"><ul class="wpgmp_tabs clearfix">';
996
997            $.each(this.tabs, function(index, tab) {
998                if (tab.title == "categories")
999                    content += '<li class="wpgmp-tab-' + index + '" rel="' + index + '"><a class="active" href="javascript:void(0);">' + tab.title + '</a></li>';
1000                else
1001                    content += '<li class="wpgmp-tab-' + index + '" rel="' + index + '"><a href="javascript:void(0);">' + tab.title + '</a></li>';
1002            });
1003
1004            content += '</ul>';
1005
1006            content += '<div class="wpgmp_toggle_main_container">';
1007
1008            $.each(this.tabs, function(index, tab) {
1009                content += '<div id="wpgmp_tab_' + index + '">';
1010                content += tab.content;
1011                content += '</div>';
1012            });
1013
1014            content += '</div><div class="wpgmp_toggle_container">' + wpgmp_local.hide + '</div></div>';
1015
1016            return content;
1017        },
1018
1019        map_widgets: function() {
1020
1021            var content = '';
1022
1023            if (this.map_data.map_tabs.category_tab.cat_tab === true)
1024                this.widget_category();
1025
1026            if (this.map_data.map_tabs.direction_tab.dir_tab === true)
1027                this.widget_directions();
1028
1029            if (this.map_data.map_tabs.nearby_tab.near_tab === true)
1030                this.widget_nearby();
1031
1032            if (this.map_data.map_tabs.route_tab.display_route_tab === true)
1033                this.widget_route_tab();
1034
1035            if (typeof this.map_data.map_tabs.extension_tabs != 'undefined') {
1036                this.widget_extensions_tab();
1037            }
1038            content += this.show_tabs();
1039
1040            $(this.element).append(content); //todo
1041        },
1042
1043        widget_extensions_tab: function() {
1044            var map_obj = this;
1045            var new_tabs = map_obj.map_data.map_tabs.extension_tabs;
1046            if (typeof new_tabs != 'undefined' && new_tabs.length > 0) {
1047                $.each(new_tabs, function(index, tab) {
1048                    map_obj.add_tab(tab.title, tab.content);
1049                });
1050            }
1051        },
1052        widget_route_tab: function() {
1053
1054            var route_data = this.map_data.map_tabs.route_tab.route_tab_data;
1055
1056            var content = '';
1057
1058            if (this.map_data.map_tabs.route_tab.display_route_tab_data === true) {
1059                content += '<div id="wpgmp_route_tab">';
1060                if (route_data) {
1061                    $.each(route_data, function(index, route) {
1062                        content += '<div class="wpgmp_tab_item">';
1063                        content += '<input type="checkbox" class="wpgmp_
1063specific_route_item" value="' + route.route_id + '">';
1064                        var box = '<span style="display:inline-block;width:10px;height:10px;background-color:' + route.route_stroke_color + ';float:right;margin-right:10px;margin-top:5px;"></span>';
1065                        content += '<a href="javascript:void(0);" class="wpgmp_cat_title accordion accordion-close">' + route.route_title + box + '</a>';
1066
1067                        content += '<div class="directions-panel-route' + route.route_id + ' wpgmp-directions-panel-route-style" style="overflow-y:scroll; height:200px;"></div>';
1068
1069                        content += '</div>';
1070                    });
1071                }
1072
1073                content += '</div>';
1074            }
1075            this.add_tab(this.map_data.map_tabs.route_tab.route_tab_title, content);
1076        },
1077
1078        widget_nearby: function() {
1079            var content = '<div class="wpgmp_nearby_container">';
1080            content += '<p><input  placeholder="' + wpgmp_local.start_point + '" type="text" name="start_point" class="input start_point wpgmp_auto_suggest" autocomplete="off" /><span class="wpgmp_mcurrent_loction" title="' + wpgmp_local.take_current_location + '">&nbsp;</span></p>';
1081            content += '<p><input name="wpgmp_radius" placeholder="' + wpgmp_local.radius + '" type="text" class="input" value="25" size="8">&nbsp;&nbsp;<select name="wpgmp_route_dimension"><option value="miles">' + wpgmp_local.miles + '</option><option value="km">' + wpgmp_local.km + '</option></select></p>';
1082            if (typeof this.map_data.map_tabs.nearby_tab.nearby_amenities != 'undefined') {
1083                var all_amenities = this.map_data.map_tabs.nearby_tab.nearby_amenities;
1084
1085                if (all_amenities) {
1086                    content += '<fieldset class="choose_amenities"><legend>' + wpgmp_local.show_amenities + '</legend>';
1087                    $.each(all_amenities, function(index, amenity) {
1088                        content += "<input type='checkbox' value='" + amenity + "' name='wpgmp_place_types[]' />&nbsp" + amenity;
1089                    });
1090                }
1091
1092            }
1093            content += '</fieldset>';
1094            content += '<p style="clear:both;"><input type="submit" value="' + wpgmp_local.find_location + '" class="wpgmp_find_nearby_button" /></p><div class="location_panel"></div></div>';
1095
1096
1097            this.add_tab(this.map_data.map_tabs.nearby_tab.nearby_tab_title, content);
1098
1099        },
1100
1101        widget_directions: function() {
1102
1103            var content = '';
1104
1105            content = '<div class="wpgmp_direction_container">';
1106
1107            if (this.map_data.map_tabs.route_start_location == "textbox") {
1108                content += '<p><input value="' + this.map_data.map_tabs.direction_tab.default_start_location + '" placeholder="' + wpgmp_local.start_location + '" type="text" name="start_point" class="input start_point wpgmp_auto_suggest" autocomplete="off" /><span class="wpgmp_mcurrent_loction" title="' + wpgmp_local.take_current_location + '">&nbsp;</span></p>';
1109            } else if (this.map_data.map_tabs.route_start_location == "selectbox") {
1110                content += '<p><select name="start_point" class="input start_point" autocomplete="off" >';
1111
1112                content += '<option value="">' + wpgmp_local.start_location + '</option>';
1113
1114                $.each(this.places, function(index, place) {
1115
1116                    content += '<option value="' + place.address + '">' + place.title + '</option>';
1117
1118                });
1119
1120                content += '</select>';
1121            }
1122
1123            if (this.map_data.map_tabs.route_end_location == "textbox") {
1124                content += '<p><input value="' + this.map_data.map_tabs.direction_tab.default_end_location + '" placeholder="' + wpgmp_local.end_location + '" name="end_point" type="text" class="input end_point wpgmp_auto_suggest" autocomplete="off" /></p>';
1125            } else if (this.map_data.map_tabs.route_end_location == "selectbox") {
1126                content += '<p><select name="end_point" class="input end_point" autocomplete="off" >';
1127
1128                content += '<option value="">' + wpgmp_local.end_location + '</option>';
1129
1130                $.each(this.places, function(index, place) {
1131                    content += '<option value="' + place.address + '">' + place.title + '</option>';
1132
1133                });
1134
1135                content += '</select>';
1136            }
1137
1138            content += '<p><select name="travel_mode" id="travaling_mode"> <option value="DRIVING" selected="selected">' + wpgmp_local.driving + '</option> <option value="BICYCLING">' + wpgmp_local.bicycling + '</option> <option value="WALKING">' + wpgmp_local.walking + '</option> <option value="TRANSIT">' + wpgmp_local.transit + '</option> </select></p>';
1139
1140            content += '<p><select name="travel_unit" id="travel_unit"> <option value="metric" selected="selected">' + wpgmp_local.metric + '</option> <option value="imperial">' + wpgmp_local.imperial + '</option></select></p><p><input type="submit" value="' + wpgmp_local.find_direction + '" class="wpgmp_find_direction"></p><div class="directions-panel" style="overflow-y:scroll;display:none;"></div></div>';
1141
1142            this.add_tab(this.map_data.map_tabs.direction_tab.direction_tab_title, content);
1143        },
1144
1145        widget_category: function() {
1146
1147            var map_obj = this;
1148            if (map_obj.map_data.map_tabs.category_tab.select_all === true) {
1149                var content = '<input checked="checked" type="checkbox" value="true" name="wpgmp_select_all">&nbsp&nbsp' + wpgmp_local.select_all + '<br>';
1150            } else {
1151                var content = '';
1152            }
1153            var categories_tab_data = {};
1154            if (typeof map_obj.map_data.places != 'undefined') {
1155                $.each(map_obj.map_data.places, function(index, place) {
1156                    if (typeof place.categories != 'undefined') {
1157                        $.each(place.categories, function(index, categories) {
1158
1159                            if (typeof categories.type != "undefined" && categories.type == 'category' && categories.name) {
1160
1161
1162                                if (typeof categories_tab_data[categories.id] == "undefined") {
1163                                    categories_tab_data[categories.id] = {};
1164                                    categories_tab_data[categories.id]['data'] = [];
1165                                }
1166
1167                                categories_tab_data[categories.id]['cat_id'] = categories.id;
1168                                categories_tab_data[categories.id]['cat_title'] = categories.name;
1169                                categories_tab_data[categories.id]['cat_marker_icon'] 
1169= categories.icon;
1170                                var redirect_permalink = "";
1171                                if (place.location.redirect_permalink)
1172                                    redirect_permalink = place.location.redirect_permalink;
1173
1174                                var redirect_custom_link = "";
1175                                if (place.location.redirect_custom_link)
1176                                    redirect_custom_link = place.location.redirect_custom_link;
1177
1178                                categories_tab_data[categories.id]['data'].push({
1179                                    "cat_location_id": place.id,
1180                                    "cat_location_title": place.title,
1181                                    "cat_location_address": place.address,
1182                                    "cat_location_zoom": place.location.zoom,
1183                                    "onclick_action": place.location.onclick_action,
1184                                    "redirect_permalink": redirect_permalink,
1185                                    "redirect_custom_link": redirect_custom_link,
1186                                });
1187
1188                            }
1189                        });
1190                    }
1191
1192                });
1193            }
1194            var category_orders = [];
1195            if (typeof categories_tab_data != 'undefined') {
1196                $.each(categories_tab_data, function(index, categories) {
1197                    if (map_obj.map_data.map_tabs.category_tab.cat_order_by == 'count') {
1198                        category_orders.push(categories.data.length);
1199                    } else {
1200                        category_orders.push(categories.cat_title);
1201                    }
1202                });
1203            }
1204
1205            category_orders.sort();
1206
1207            var ordered_categories = [];
1208            $.each(category_orders, function(index, cat_title) {
1209                $.each(categories_tab_data, function(index, categories) {
1210                    var compare_with;
1211                    if (map_obj.map_data.map_tabs.category_tab.cat_order_by == 'count') {
1212                        compare_with = categories.data.length;
1213                    } else {
1214                        compare_with = categories.cat_title;
1215                    }
1216
1217                    if (cat_title == compare_with) {
1218                        ordered_categories.push(categories);
1219                    }
1220                });
1221            });
1222
1223            if (typeof ordered_categories != 'undefined') {
1224                $.each(ordered_categories, function(index, categories) {
1225
1226                    var category_image = '';
1227
1228                    if (typeof categories.cat_marker_icon != 'undefined') {
1229                        category_image = '<span class="arrow"><img src="' + categories.cat_marker_icon + '"></span>';
1230                    }
1231
1232                    content += '<div class="wpgmp_tab_item">';
1233
1234                    content += '<input type="checkbox" class="wpgmp_specific_category_item" value="' + categories.cat_id + '">';
1235
1236                    if (map_obj.map_data.map_tabs.category_tab.show_count === true) {
1237                        location_count = " (" + categories.data.length + ")";
1238                    } else {
1239                        location_count = "";
1240                    }
1241
1242
1243                    content += '<a href="javascript:void(0);" class="wpgmp_cat_title accordion accordion-close">' + categories.cat_title + location_count + category_image + '</a>';
1244
1245                    if (map_obj.map_data.map_tabs.category_tab.hide_location !== true) {
1246
1247                        content += '<div class="scroll-pane" style="height: 97px; width:100%;">';
1248
1249                        content += '<ul class="wpgmp_location_container">';
1250
1251                        $.each(categories.data, function(name, location) {
1252
1253                            if (location.onclick_action == "marker") {
1254                                content += '<li><input type="checkbox" class="wpgmp_specific_location_item"  value="' + location.cat_location_id + '" /><a class="place_title" data-marker="' + location.cat_location_id + '" data-zoom="' + location.cat_location_zoom + '" href="javascript:void(0);">' + location.cat_location_title + '</a></li>';
1255                            } else if (location.onclick_action == "post") {
1256                                content += '<li>
1256<input type="checkbox" class="wpgmp_specific_location_item"  value="' + location.cat_location_id + '" /><a href="' + location.redirect_permalink + '" target="_blank">' + location.cat_location_title + '</a></li>';
1257                            } else if (location.onclick_action == "custom_link") {
1258                                content += '<li><input type="checkbox" class="wpgmp_specific_location_item"  value="' + location.cat_location_id + '" /><a href="' + location.redirect_custom_link + '" target="_blank">' + location.cat_location_title + '</a></li>';
1259                            }
1260
1261                        });
1262
1263                        content += '</ul>';
1264
1265                        content += '</div>';
1266                    }
1267
1268                    content += '</div>';
1269
1270                });
1271            }
1272            map_obj.add_tab(map_obj.map_data.map_tabs.category_tab.cat_tab_title, content);
1273
1274        },
1275
1276        sorting: function(order_by, in_order) {
1277
1278            switch (order_by) {
1279
1280                case 'category':
1281                    this.places.sort(this.sortByCategory);
1282                    this.show_places.sort(this.sortByCategory);
1283                    if (in_order == 'desc') {
1284                        this.places.reverse();
1285                        this.show_places.reverse();
1286                    }
1287                    break;
1288
1289                case 'title':
1290                    this.map_data.places.sort(this.sortByTitle);
1291                    this.show_places.sort(this.sortByTitle);
1292                    if (in_order == 'desc') {
1293                        this.places.reverse();
1294                        this.show_places.reverse();
1295                    }
1296                    break;
1297
1298                case 'address':
1299                    this.map_data.places.sort(this.sortByAddress);
1300                    this.show_places.sort(this.sortByAddress);
1301                    if (in_order == 'desc') {
1302                        this.places.reverse();
1303                        this.show_places.reverse();
1304                    }
1305                    break;
1306            }
1307        },
1308
1309        sortByCategory: function(a, b) {
1310            if (b.categories[0] && a.categories[0]) {
1311                if (a.categories[0].name && b.categories[0].name) {
1312                    var a_val = a.categories[0].name.toLowerCase();
1313                    var b_val = b.categories[0].name.toLowerCase();
1314                    return ((a_val < b_val) ? -1 : ((a_val > b_val) ? 1 : 0));
1315                }
1316
1317            }
1318        },
1319
1320        sortByTitle: function(a, b) {
1321            var a_val = a.title.toLowerCase();
1322            var b_val = b.title.toLowerCase();
1323            return ((a_val < b_val) ? -1 : ((a_val > b_val) ? 1 : 0));
1324        },
1325
1326        sortByAddress: function(a, b) {
1327            var a_val = a.address.toLowerCase();
1328            var b_val = b.address.toLowerCase();
1329            return ((a_val < b_val) ? -1 : ((a_val > b_val) ? 1 : 0));
1330        },
1331
1332        update_filters: function() {
1333
1334            var filters;
1335            if (typeof this.map_data.listing != 'undefined') {
1336                filters = $.map(this.map_data.listing.filters, function(filter, i) {
1337
1338                    var val = $('select[name="' + filter + '"]');
1339                    return {
1340                        name: val.attr('name'),
1341                        val: val.val()
1342                    };
1343                });
1344            }
1345            this.apply_filters(filters);
1346
1347        },
1348
1349        apply_filters: function(filters) {
1350
1351            var map_obj = this;
1352
1353            var showAll = true;
1354            var show = true;
1355            map_obj.show_places = [];
1356
1357            if (typeof map_obj.map_data.places != 'undefined') {
1358                $.each(map_obj.map_data.places, function(place_key, place) {
1359
1360                    show = true;
1361                    enable_search_term = false;
1362
1363                    if (typeof map_obj.map_data.listing != 'undefined') {
1364                        if (map_obj.map_data.listing.display_search_form === true) {
1365                            search_term = $(map_obj.map_data.listing.listing_container + ' input[name="wpgmp_search_input"]').val();
1366                            search_term = search_term.toLowerCase();
1367                            if (search_term.length > 0) {
1368                                enable_search_term = true;
1369                            }
1370                        }
1371                    }
1372                    if (typeof filters != 'undefined') {
1373
1374                        $.each(filters, function(filter_key, filter) {
1375
1376                            var in_category = false;
1377
1378                            if (filter.val) {
1379                                if (typeof place.categories != 'undefined') {
1380                                    $.each(place.categories, function(cat_index, category) {
1381
1382                                        if (category.id == filter.val)
1383                                            in_category = true;
1384
1385                                    });
1386                                }
1387
1388                                if (in_category === false)
1389                                    show = false;
1390
1391                            } else {
1392                                filter.val = "";
1393                            }
1394
1395                            if (enable_search_term === true && show === true) {
1396                                in_category = false;
1397                                if (typeof place.categories != 'undefined') {
1398                                    $.each(place.categories, function(cat_index, category) {
1399
1400                                        if (category.name && category.name.indexOf(search_term) >= 0)
1401                                            in_category = true;
1402                                    });
1403                                }
1404                                if (place.title.toLowerCase().indexOf(search_term) >= 0) {
1405                                    show = true;
1406
1407                                } else if (place.content.toLowerCase().indexOf(search_term) >= 0) {
1408                                    show = true;
1409
1410                                } else if (place.location.lat.toLowerCase().indexOf(search_term) >= 0) {
1411                                    show = true;
1412
1413                                } else if (place.location.lng.toLowerCase().indexOf(search_term) >= 0) {
1414                                    show = true;
1415
1416                                } else if (place.address && place.address.toLowerCase().indexOf(search_term) >= 0) {
1417                                    show = true;
1418                                } else if (place.location.state && place.location.state.toLowerCase().indexOf(search_term) >= 0) {
1419                                    show = true;
1420
1421                                } else if (place.location.country && place.location.country.toLowerCase().indexOf(search_term) >= 0) {
1422                                    show = true;
1423
1424                                } else if (place.location.postal_code && place.location.postal_code.toLowerCase().indexOf(search_term) >= 0) {
1425                                    show = true;
1426
1427                                } else if (place.location.city && place.location.city.toLowerCase().indexOf(search_term) >= 0) {
1428                                    show = true;
1429                                } else if (typeof map_obj.search_area != 'undefined' && map_obj.search_area != '' && map_obj.wpgmp_within_radius(place, map_obj.search_area) === true) {
1430                                    show = true;
1431                                } else {
1432                                    show = false;
1433                                }
1434
1435                            }
1436                        });
1437                    }
1438
1439                    // if checked category
1440                    if (typeof map_obj.map_data.map_tabs != 'undefined') {
1441                        if (map_obj.map_data.map_tabs.category_tab.cat_tab === true && show != false) {
1442                            var all_selected_category = $('.wpgmp_specific_category_item:checked');
1443                            var in_checked_category = false;
1444                            if (all_selected_category.length === 0) {
1445                                // means no any category selected so show those location without categories.
1446                                if (typeof place.categories != 'undefined') {
1447                                    $.each(place.categories, function(cat_index, category) {
1448                                        if (category.id === '')
1449                                            in_checked_category = true;
1450                                    });
1451                                }
1452                            }
1453
1454                            $.each(all_selected_category, function(index, selected_category) {
1455                                var all_not_selected_location = $(selected_category).parent().find('.wpgmp_specific_location_item:not(:checked)');
1456                                if (typeof place.categories != 'undefined') {
1457                                    $.each(place.categories, function(cat_index, category) {
1458                                        if (category.id === '')
1459                                            in_checked_category = true;
1460                                        else if (category.id == $(selected_category).val()) {
1461                                            in_checked_category = true;
1462                                            place.marker.setIcon(category.icon);
1463                                        }
1464
1465                                    });
1466                                }
1467
1468                                //Hide unchecked  locations.
1469                                if (all_not_selected_location.length !== 0) {
1470                                    $.each(all_not_selected_location, function(index_loc, not_selected_location) {
1471                                        if (place.id == $(not_selected_location).val()) {
1472                                            in_checked_category = false;
1473                                        }
1474                                    });
1475                                }
1476
1477                            });
1478
1479
1480                            if (in_checked_category === false)
1481                                show = false;
1482                            else
1483                                show = true;
1484                        }
1485
1486                    }
1487
1488                    place.marker.visible = show;
1489                    place.marker.setVisible(show);
1490                    place.infowindow.close();
1491                    place.marker.setAnimation(null);
1492                    if (show === true)
1493                        map_obj.show_places.push(place);
1494                });
1495            }
1496
1497
1498            if (typeof map_obj.map_data.listing != 'undefined')
1499                map_obj.update_places_listing();
1500
1501            if (typeof map_obj.map_data.marker_cluster != 'undefined') {
1502                map_obj.set_marker_cluster();
1503            }
1504
1505        },
1506
1507        create_perpage_option: function() {
1508
1509            var map_obj = this;
1510            var options = '';
1511            var content = '';
1512
1513            content += '<select name="map_perpage_location_sorting" class="choose_salutation">';
1514            content += '<option value="' + map_obj.map_data.listing.pagination.listing_per_page + '">' + wpgmp_local.show_locations + '</option>';
1515            content += '<option value="25">25</option>';
1516            content += '<option value="50">50</option>';
1517            content += '<option value="100">100</option>';
1518            content += '<option value="200">200</option>';
1519            content += '<option value="500">500</option>';
1520            content += '<option value="' + map_obj.show_places.length + '">' + wpgmp_local.all_location + '</option>';
1521            content += '</select>';
1522
1523            return content;
1524
1525        },
1526
1527        create_sorting: function() {
1528
1529            var options = '';
1530
1531            var content = '';
1532
1533            if (this.map_data.listing.display_sorting_filter === true) {
1534                content += '<select name="map_sorting"><option value="">' + wpgmp_local.sort_by + '</option>';
1535                $.each(this.map_data.listing.sorting_options, function(id, name) {
1536                    content += "<option value='" + id + "'>" + name + "</option>";
1537                });
1538                content += '</select>';
1539            }
1540
1541            return content;
1542        },
1543
1544        create_radius: function() {
1545
1546            var options = '';
1547
1548            var content = '';
1549            if (this.map_data.listing.display_radius_filter === true) {
1550
1551                content += '<select name="map_radius"><option value="">' + wpgmp_local.select_radius + '</option>';
1552                var radius_options = this.map_data.listing.radius_options;
1553                var radius_dimension = this.map_data.listing.radius_dimension;
1554                $.each(radius_options.split(','), function(id, name) {
1555                    if (radius_dimension == 'miles') {
1556                        content += "<option value='" + name + "'>" + name + ' ' + wpgmp_local.miles + "</option>";
1557                    } else {
1558                        content += "<option value='" + name + "'>" + name + ' ' + wpgmp_local.km + "</option>";
1559                    }
1560                });
1561                content += '</select>';
1562            }
1563
1564            return content;
1565        },
1566
1567        create_filters: function() {
1568
1569            var options = '';
1570            var filters = {};
1571            var places = this.map_data.places;
1572            var wpgmp_listing_filter = this.map_data.listing;
1573            var wpgmp_alltfilter = wpgmp_listing_filter.display_taxonomies_all_filter;
1574
1575            $.each(places, function(index, place) {
1576                if (typeof place.categories == 'undefined') {
1577                    place.categories = {};
1578                }
1579                $.each(place.categories, function(cat_index, category) {
1580
1581                    if (typeof filters[category.type] == 'undefined') {
1582                        filters[category.type] = {};
1583                    }
1584                    if (category.name) {
1585                        filters[category.type][category.name] = category.id;
1586                    }
1587
1588                });
1589            });
1590            // now create select boxes
1591
1592            var content = '';
1593
1594            $.each(filters, function(index, options) {
1595                if (wpgmp_listing_filter.display_category_filter === true && index == "category") {
1596                    content += '<select name="place_' + index + '">';
1597                    content += '<option value="">' + wpgmp_local.select_category + '</option>';
1598                    $.each(options, function(name, value) {
1599                        content += "<option value='" + value + "'>" + name + "</option>";
1600                    });
1601                    content += '</select>';
1602                } else if (wpgmp_listing_filter.display_taxonomies_filter === true) {
1603                    if (wpgmp_alltfilter === null)
1604                        return false;
1605
1606                    if (wpgmp_alltfilter.indexOf(index) > -1) {
1607                        content += '<select name="place_' + index + '">';
1608                        content += '<option value="">Select ' + index + '</option>';
1609                        $.each(options, function(name, value) {
1610                            content += "<option value='" + value + "'>" + name + "</option>";
1611                        });
1612                        content += '</select>';
1613                    }
1614                }
1615
1616            });
1617
1618            return content;
1619        },
1620
1621        update_places_listing: function() {
1622
1623            var map_obj = this;
1624
1625            if (map_obj.per_page_value > 0)
1626                map_obj.per_page_value = map_obj.per_page_value;
1627            else
1628                map_obj.per_page_value = map_obj.map_data.listing.pagination.listing_per_page;
1629            $(map_obj.container).find(".location_pagination" + map_obj.map_data.map_property.map_id).pagination(map_obj.show_places.length, {
1630                callback: map_obj.display_places_listing,
1631                map_data: map_obj,
1632                items_per_page: map_obj.per_page_value,
1633                prev_text: wpgmp_local.prev,
1634                next_text: wpgmp_local.next
1635            });
1636
1637        },
1638
1639        display_filters_listing: function() {
1640
1641            var wpgmpgl = this.map_data.listing.list_grid;
1642
1643            var content = '<div class="wpgmp_listing_container">';
1644
1645            content += this.display_filters();
1646
1647            content += "<div class='wpgmp_categories wpgmp_print_listing " + wpgmpgl + "'></div>";
1648
1649            content += "</div>";
1650
1651            $(this.map_data.listing.listing_container).html(content);
1652
1653        },
1654
1655        display_filters: function() {
1656
1657            var content = '';
1658            content += '<div class="wpgmp_before_listing">' + this.map_data.listing.listing_header + '</div>';
1659
1660            if (this.map_data.listing.display_search_form === true) {
1661                content += '<div class="wpgmp_listing_header"><div class="wpgmp_search_form"><input type="text" rel="24" name="wpgmp_search_input" class="wpgmp_search_input" placeholder="' + wpgmp_local.search_placeholder + '"></div></div>';
1662            }
1663
1664            content += '<div class="categories_filter">' + this.create_filters() + this.create_sorting() + '';
1665
1666            if (this.map_data.listing.display_location_per_page_filter === true) {
1667                content += ' ' + this.create_perpage_option() + ' ';
1668            }
1669
1670            content += ' ' + this.create_radius() + ' ';
1671
1672            if (this.map_data.listing.display_print_option === true) {
1673                content += ' ' + wpgmp_local.img_print;
1674            }
1675
1676            if (this.map_data.listing.display_grid_option === true) {
1677                content += ' ' + wpgmp_local.img_grid + wpgmp_local.img_list;
1678            }
1679
1680            content += '</div>';
1681
1682            return content;
1683        },
1684
1685        find_direction: function(options) {
1686
1687            var map_obj = this;
1688            var request = {
1689                origin: options.start,
1690                destination: options.end,
1691                optimizeWaypoints: true,
1692                travelMode: eval("google.maps.TravelMode." + options.mode),
1693                unitSystem: eval("google.maps.UnitSystem." + options.unit)
1694            };
1695            console.log(request);
1696            map_obj.directionsService = new google.maps.DirectionsService();
1697            map_obj.directionsService.route(request, function(response, status) {
1698                if (status == google.maps.DirectionsStatus.OK) {
1699
1700                    map_obj.directionsDisplay.setMap(map_obj.map);
1701                    map_obj.directionsDisplay.setDirections(response);
1702                    if (false == map_obj.map_data.map_tabs.direction_tab.suppress_markers) {
1703                        map_obj.directionsDisplay.setPanel(options.direction_panel);
1704                        $(options.direction_panel).css('display', 'block');
1705                    }
1706
1707                }
1708            });
1709        },
1710
1711        display_places_listing: function(page_index, jq) {
1712
1713            var content = '';
1714
1715            var map_obj = this;
1716            var items_per_page = 10;
1717            if (map_obj.items_per_page)
1718                items_per_page = map_obj.items_per_page;
1719            else
1720                items_per_page = map_obj.map_data.map_data.listing.pagination.listing_per_page;
1721
1722            var data_source = map_obj.map_data.show_places;
1723
1724            var listing_container = map_obj.map_data.map_data.listing.listing_container;
1725
1726
1727            var listing_placeholder = map_obj.map_data.map_data.listing.listing_placeholder;
1728
1729            var max_elem = Math.min((page_index + 1) * items_per_page, data_source.length);
1730            var link = '';
1731			
1732			
1733		// ‚±‚±•Ï‚¦‚é
1734		
1735		
1736content += '<div style="margin-bottom:20px;" ><h4 class="h4 text-accent-color" ><span>' + wpgmp_local.prev +'</span></h4></div>';	
1737			
1738            if (max_elem > 0) {
1739                for (var i = page_index * items_per_page; i < max_elem; i++) {
1740                    var place = data_source[i];
1741                    var temp_listing_placeholder = listing_placeholder;
1742                    if (place.marker.visible === true) {
1743                        if (place.id) {
1744                            if (place.location.onclick_action == "marker") {
1745                                link = '<a href="javascript:void(0);" class="place_title" data-zoom="' + place.location.zoom + '"  data-marker="' + place.id + '" >' + place.title.substr(2) + '</a>';
1746                            } else if (place.location.onclick_action == "post") {
1747                                link = '<a href="' + place.location.redirect_permalink + '" target="_blank">' + place.title + '</a>';
1748                            } else if (place.location.onclick_action == "custom_link") {
1749                                link = '<a href="' + place.location.redirect_custom_link + '" target="_blank">' + place.title + '</a>';
1750                            }
1751                        }
1752
1753                        var image = [];
1754                        var category_name = [];
1755                        var wpgmp_arr = {};
1756
1757                        if (place.categories) {
1758                            for (c = 0; c < place.categories.length; c++) {
1759                                if (place.categories[c].icon !== '') {
1760                                    image.push("<img title='" + place.categories[c].name + "' alt='" + place.categories[c].name + "' src='" + place.categories[c].icon + "' />");
1761                                }
1762
1763                                if (place.categories[c].type == 'category' && place.categories[c].name != '') {
1764                                    category_name.push(place.categories[c].name);
1765                                }
1766
1767                                if (place.categories[c].type != 'category') {
1768                                    if (typeof place.categories[c].name == "undefined")
1769                                        continue;
1770
1771                                    if (place.categories[c].name)
1772                                        var sep = ',';
1773
1774                                    if (typeof wpgmp_arr[place.categories[c].type] == "undefined")
1775                                        wpgmp_arr[place.categories[c].type] = '';
1776
1777                                    wpgmp_arr[place.categories[c].type] += place.categories[c].name + sep;
1778                                }
1779                            }
1780                        }
1781
1782                        var replaceData = {
1783                            "{marker_id}": place.id,
1784                            "{marker_title}": link,
1785                            "{marker_address}": place.address,
1786                            "{marker_latitude}": place.location.lat,
1787                            "{marker_longitude}": place.location.lng,
1788                            "{marker_city}": place.location.city,
1789                            "{marker_state}": place.location.state,
1790                            "{marker_country}": place.location.country,
1791                            "{marker_postal_code}": place.location.postal_code,
1792                            "{marker_zoom}": place.location.zoom,
1793                            "{marker_icon}": image,
1794                            "{marker_category}": category_name.join(","),
1795                            "{marker_message}": place.content,
1796                            "{wpgmp_listing_html}": place.listing_hook
1797
1798                        };
1799
1800                        //Add extenstion fields of locations
1801                        if (typeof place.location.extension_fields != 'undefined') {
1802                            for (var extra in place.location.extension_fields) {
1803                                if (!place.location.extension_fields[extra]) {
1804                                    replaceData['{' + extra + '}'] = '';
1805
1806                                } else {
1807                                    replaceData['{' + extra + '}'] = place.location.extension_fields[extra];
1808                                }
1809                            }
1810                        }
1811
1812                        //Add extra fields of locations
1813                        if (typeof place.location.extra_fields != 'undefined') {
1814                            for (var extra in place.location.extra_fields) {
1815                                if (!place.location.extra_fields[extra]) {
1816                                    replaceData['{' + extra + '}'] = '';
1817
1818                                } else {
1819                                    replaceData['{' + extra + '}'] = place.location.extra_fields[extra];
1820                                }
1821                            }
1822                        }
1823
1824                        if (wpgmp_arr) {
1825                            for (var n in wpgmp_arr) {
1826                                replaceData["{" + n + "}"] = wpgmp_remove_last_comma(wpgmp_arr[n]);
1827                            }
1828                        }
1829
1830                        function wpgmp_remove_last_comma(strng) {
1831                            var n = strng.lastIndexOf(",");
1832                            var a = strng.substring(0, n)
1833                            return a;
1834                        }
1835
1836                        temp_listing_placeholder = temp_listing_placeholder.replace(/{[^{}]+}/g, function(match) {
1837                            if (match in replaceData) {
1838                                return (replaceData[match]);
1839                            } else {
1840                                return ("");
1841                            }
1842                        });
1843						
1844						
1845						if (category_name == wpgmp_local.prev ) {
1846
1847                        content += temp_listing_placeholder; }
1848                    }
1849                }
1850            } else {
1851                content = "<div class='wpgmp_no_locations'>" + wpgmp_local.wpgmp_location_no_results + "</div>";
1852            }
1853
1854
1855
1856		// ‚±‚±•Ï‚¦‚é
1857		
1858		
1859content += '<div style="margin-bottom:20px;" ><h4 class="h4 text-accent-color" ><span>'  + wpgmp_local.next +'</span></h4></div>';	
1860			
1861            if (max_elem > 0) {
1862                for (var i = page_index * items_per_page; i < max_elem; i++) {
1863                    var place = data_source[i];
1864                    var temp_listing_placeholder = listing_placeholder;
1865                    if (place.marker.visible === true) {
1866                        if (place.id) {
1867                            if (place.location.onclick_action == "marker") {
1868                                link = '<a href="javascript:void(0);" class="place_title" data-zoom="' + place.location.zoom + '"  data-marker="' + place.id + '" >' + place.title.substr(2) + '</a>';
1869                            } else if (place.location.onclick_action == "post") {
1870                                link = '<a href="' + place.location.redirect_permalink + '" target="_blank">' + place.title + '</a>';
1871                            } else if (place.location.onclick_action == "custom_link") {
1872                                link = '<a href="' + place.location.redirect_custom_link + '" target="_blank">' + place.title + '</a>';
1873                            }
1874                        }
1875
1876                        var image = [];
1877                        var category_name = [];
1878                        var wpgmp_arr = {};
1879
1880                        if (place.categories) {
1881                            for (c = 0; c < place.categories.length; c++) {
1882                                if (place.categories[c].icon !== '') {
1883                                    image.push("<img title='" + place.categories[c].name + "' alt='" + place.categories[c].name + "' src='" + place.categories[c].icon + "' />");
1884                                }
1885
1886                                if (place.categories[c].type == 'category' && place.categories[c].name != '') {
1887                                    category_name.push(place.categories[c].name);
1888                                }
1889
1890                                if (place.categories[c].type != 'category') {
1891                                    if (typeof place.categories[c].name == "undefined")
1892                                        continue;
1893
1894                                    if (place.categories[c].name)
1895                                        var sep = ',';
1896
1897                                    if (typeof wpgmp_arr[place.categories[c].type] == "undefined")
1898                                        wpgmp_arr[place.categories[c].type] = '';
1899
1900                                    wpgmp_arr[place.categories[c].type] += place.categories[c].name + sep;
1901                                }
1902                            }
1903                        }
1904
1905                        var replaceData = {
1906                            "{marker_id}": place.id,
1907                            "{marker_title}": link,
1908                            "{marker_address}": place.address,
1909                            "{marker_latitude}": place.location.lat,
1910                            "{marker_longitude}": place.location.lng,
1911                            "{marker_city}": place.location.city,
1912                            "{marker_state}": place.location.state,
1913                            "{marker_country}": place.location.country,
1914                            "{marker_postal_code}": place.location.postal_code,
1915                            "{marker_zoom}": place.location.zoom,
1916                            "{marker_icon}": image,
1917                            "{marker_category}": category_name.join(","),
1918                            "{marker_message}": place.content,
1919                            "{wpgmp_listing_html}": place.listing_hook
1920
1921                        };
1922
1923                        //Add extenstion fields of locations
1924                        if (typeof place.location.extension_fields != 'undefined') {
1925                            for (var extra in place.location.extension_fields) {
1926                                if (!place.location.extension_fields[extra]) {
1927                                    replaceData['{' + extra + '}'] = '';
1928
1929                                } else {
1930                                    replaceData['{' + extra + '}'] = place.location.extension_fields[extra];
1931                                }
1932                            }
1933                        }
1934
1935                        //Add extra fields of locations
1936                        if (typeof place.location.extra_fields != 'undefined') {
1937                            for (var extra in place.location.extra_fields) {
1938                                if (!place.location.extra_fields[extra]) {
1939                                    replaceData['{' + extra + '}'] = '';
1940
1941                                } else {
1942                                    replaceData['{' + extra + '}'] = place.location.extra_fields[extra];
1943                                }
1944                            }
1945                        }
1946
1947                        if (wpgmp_arr) {
1948                            for (var n in wpgmp_arr) {
1949                                replaceData["{" + n + "}"] = wpgmp_remove_last_comma(wpgmp_arr[n]);
1950                            }
1951                        }
1952
1953                        function wpgmp_remove_last_comma(strng) {
1954                            var n = strng.lastIndexOf(",");
1955                            var a = strng.substring(0, n)
1956                            return a;
1957          
1957              }
1958
1959                        temp_listing_placeholder = temp_listing_placeholder.replace(/{[^{}]+}/g, function(match) {
1960                            if (match in replaceData) {
1961                                return (replaceData[match]);
1962                            } else {
1963                                return ("");
1964                            }
1965                        });
1966						
1967						
1968						if (category_name == wpgmp_local.next ) {
1969
1970                        content += temp_listing_placeholder; }
1971                    }
1972                }
1973            } else {
1974                content = "<div class='wpgmp_no_locations'>" + wpgmp_local.wpgmp_location_no_results + "</div>";
1975            }
1976			
1977			
1978			
1979			
1980			// ‚±‚±•Ï‚¦‚é
1981		
1982		
1983content += '<div style="margin-bottom:20px;" ><h4 class="h4 text-accent-color" ><span>' + wpgmp_local.select_category +'</span></h4></div>';	
1984			
1985            if (max_elem > 0) {
1986                for (var i = page_index * items_per_page; i < max_elem; i++) {
1987                    var place = data_source[i];
1988                    var temp_listing_placeholder = listing_placeholder;
1989                    if (place.marker.visible === true) {
1990                        if (place.id) {
1991                            if (place.location.onclick_action == "marker") {
1992                                link = '<a href="javascript:void(0);" class="place_title" data-zoom="' + place.location.zoom + '"  data-marker="' + place.id + '" >' + place.title.substr(2) + '</a>';
1993                            } else if (place.location.onclick_action == "post") {
1994                                link = '<a href="' + place.location.redirect_permalink + '" target="_blank">' + place.title + '</a>';
1995                            } else if (place.location.onclick_action == "custom_link") {
1996                                link = '<a href="' + place.location.redirect_custom_link + '" target="_blank">' + place.title + '</a>';
1997                            }
1998                        }
1999
2000                        var image = [];
2001                        var category_name = [];
2002                        var wpgmp_arr = {};
2003
2004                        if (place.categories) {
2005                            for (c = 0; c < place.categories.length; c++) {
2006                                if (place.categories[c].icon !== '') {
2007                                    image.push("<img title='" + place.categories[c].name + "' alt='" + place.categories[c].name + "' src='" + place.categories[c].icon + "' />");
2008                                }
2009
2010                                if (place.categories[c].type == 'category' && place.categories[c].name != '') {
2011                                    category_name.push(place.categories[c].name);
2012                                }
2013
2014                                if (place.categories[c].type != 'category') {
2015                                    if (typeof place.categories[c].name == "undefined")
2016                                        continue;
2017
2018                                    if (place.categories[c].name)
2019                                        var sep = ',';
2020
2021                                    if (typeof wpgmp_arr[place.categories[c].type] == "undefined")
2022                                        wpgmp_arr[place.categories[c].type] = '';
2023
2024                                    wpgmp_arr[place.categories[c].type] += place.categories[c].name + sep;
2025                                }
2026                            }
2027                        }
2028
2029                        var replaceData = {
2030                            "{marker_id}": place.id,
2031                            "{marker_title}": link,
2032                            "{marker_address}": place.address,
2033                            "{marker_latitude}": place.location.lat,
2034                            "{marker_longitude}": place.location.lng,
2035                            "{marker_city}": place.location.city,
2036                            "{marker_state}": place.location.state,
2037                            "{marker_country}": place.location.country,
2038                            "{marker_postal_code}": place.location.postal_code,
2039                            "{marker_zoom}": place.location.zoom,
2040                            "{marker_icon}": image,
2041                            "{marker_category}": category_name.join(","),
2042                            "{marker_message}": place.content,
2043                            "{wpgmp_listing_html}": place.listing_hook
2044
2045                        };
2046
2047                        //Add extenstion fields of locations
2048                        if (typeof place.location.extension_fields != 'undefined') {
2049                            for (var extra in place.location.extension_fields) {
2050                                if (!place.location.extension_fields[extra]) {
2051                                    replaceData['{' + extra + '}'] = '';
2052
2053                                } else {
2054                                    replaceData['{' + extra + '}'] = place.location.extension_fields[extra];
2055                                }
2056                            }
2057                        }
2058
2059                        //Add extra fields of locations
2060                        if (typeof place.location.extra_fields != 'undefined') {
2061                            for (var extra in place.location.extra_fields) {
2062                                if (!place.location.extra_fields[extra]) {
2063                                    replaceData['{' + extra + '}'] = '';
2064
2065                                } else {
2066                                    replaceData['{' + extra + '}'] = place.location.extra_fields[extra];
2067                                }
2068                            }
2069                        }
2070
2071                        if (wpgmp_arr) {
2072                            for (var n in wpgmp_arr) {
2073                                replaceData["{" + n + "}"] = wpgmp_remove_last_comma(wpgmp_arr[n]);
2074                            }
2075                        }
2076
2077                        function wpgmp_remove_last_comma(strng) {
2078                            var n = strng.lastIndexOf(",");
2079                            var a = strng.substring(0, n)
2080                            return a;
2081                        }
2082
2083                        temp_listing_placeholder = temp_listing_placeholder.replace(/{[^{}]+}/g, function(match) {
2084                            if (match in replaceData) {
2085                                return (replaceData[match]);
2086                            } else {
2087                                return ("");
2088                            }
2089                        });
2090						
2091						
2092						if (category_name == wpgmp_local.select_category ) {
2093
2094                        content += temp_listing_placeholder; }
2095                    }
2096                }
2097            } else {
2098                content = "<div class='wpgmp_no_locations'>" + wpgmp_local.wpgmp_location_no_results + "</div>";
2099            }
2100			
2101
2102            content += '<div id="wpgmp_pagination"></div>';
2103
2104            $(listing_container).find(".wpgmp_categories").html(content);
2105
2106            $(listing_container).find('.wpgmp_locations').responsiveEqualHeightGrid();
2107
2108
2109            return false;
2110        },
2111
2112        open_infowindow: function(current_place) {
2113            var map_obj = this;
2114            $.each(this.map_data.places, function(key, place) {
2115                if (parseInt(place.id) == parseInt(current_place) && place.marker.visible === true) {
2116                    place.marker.setMap(map_obj.map);
2117                    if (typeof map_obj.map_data.marker_cluster != 'undefined') {
2118                        map_obj.map.setZoom(parseInt(map_obj.map_data.marker_cluster.marker_zoom_level));
2119                    }
2120                    place.infowindow.open(map_obj.map, place.marker);
2121                    if (typeof map_obj.settings.infowindow_click_change_center != 'undefined' && map_obj.settings.infowindow_click_change_center == true) {
2122                        map_obj.map.setCenter(place.marker.getPosition());
2123                    }
2124                    if (typeof map_obj.settings.infowindow_click_change_zoom != 'undefined' && map_obj.settings.infowindow_click_change_zoom > 0) {
2125                        map_obj.map.setZoom(map_obj.settings.infowindow_click_change_zoom);
2126                    }
2127                    var bounce_on_event = map_obj.settings.infowindow_bounce_animation;
2128                    if (bounce_on_event == 'click') {
2129                        map_obj.toggle_bounce(place.marker);
2130                    }
2131                } else {
2132                    place.infowindow.close();
2133                    place.marker.setAnimation(null);
2134                }
2135            });
2136        },
2137
2138        place_info: function(place_id) {
2139
2140            var place_obj;
2141
2142            $.each(this.places, function(index, place) {
2143
2144                if (parseInt(place.id) == parseInt(place_id)) {
2145                    place_obj = place;
2146                }
2147            });
2148
2149            return place_obj;
2150        },
2151
2152        create_routes: function() {
2153            var map_obj = this;
2154            if (this.map_data.routes) {
2155                $.each(this.map_data.routes, function(index, routeobj) {
2156
2157                    var directionsService = new google.maps.DirectionsService();
2158
2159                    var route_polyline = {
2160                        strokeColor: routeobj.route_stroke_color,
2161                        strokeOpacity: routeobj.route_stroke_opacity,
2162                        strokeWeight: routeobj.route_stroke_weight,
2163                        clickable: false
2164                    };
2165
2166                    var renderer_options = {
2167                        draggable: routeobj.route_marker_draggable,
2168                        suppressMarkers: true,
2169                        suppressInfoWindows: true,
2170                        preserveViewport: true,
2171                        polylineOptions: route_polyline,
2172
2173                    };
2174
2175
2176                    var start = routeobj.start_location_data;
2177                    var end = routeobj.end_location_data;
2178                    var waypts = [];
2179                    if (typeof routeobj.way_points != 'undefined') {
2180                        $.each(routeobj.way_points, function(point_index, place) {
2181                            waypts.push({
2182                                location: place,
2183                                stopover: true
2184                            });
2185                        });
2186                    }
2187
2188                    var request = {
2189                        origin: start,
2190                        destination: end,
2191
2192                        waypoints: waypts,
2193                        optimizeWaypoints: routeobj.route_optimize_waypoints,
2194
2195                        travelMode: eval("google.maps.TravelMode." + routeobj.route_travel_mode),
2196                        unitSystem: eval("google.maps.UnitSystem." + routeobj.route_unit_system),
2197                    };
2198
2199                    directionsService.route(request, function(response, status) {
2200
2201                        if (status == google.maps.DirectionsStatus.OK) {
2202                            directionsDisplay = new google.maps.DirectionsRenderer(renderer_options);
2203                            directionsDisplay.setMap(map_obj.map);
2204                            directionsDisplay.setDirections(response);
2205                            directionsDisplay.setPanel($(".directions-panel-route" + routeobj.route_id + "").get(0));
2206
2207                            if (typeof routeobj.route_id != 'undefined') {
2208                                /*
2209                                if (typeof routeobj.route_direction_panel != 'undefined') {
2210                                    if (routeobj.route_direction_panel == true) {
2211                                        var dirpanel = $(".wpgmp_direction_panel_route" + routeobj.route_id + "").get(0);
2212
2213                                        dirpanel.innerHTML = "";
2214
2215                                        $.each(response.routes, function(key, value) {
2216
2217                                            $.each(value.legs, function(key1, dir) {
2218
2219                                                var output = '';
2220
2221                                                output += '<div class="dir_start">' + dir.start_address + '</div>';
2222                                                output += '<div class="dir_summary silver">' + dir.distance.text + ' - about ' + dir.duration.text + '</div>';
2223                                                output += '<table>';
2224                                                for (i = 0;
2224 i < dir.steps.length; i++) {
2225                                                    output += '<tr style="border-bottom: 1px solid silver;">';
2226                                                    output += '<td class="dir_row"><span class="dir_sprite ' + dir.steps[i].maneuver + '"></span></td>';
2227                                                    output += '<td class="dir_row">' + (i + 1) + '.</td>';
2228                                                    output += '<td class="dir_row">' + dir.steps[i].instructions + '</td>';
2229                                                    output += '<td class="dir_row" style="white-space:nowrap;">' + dir.steps[i].distance.text + '</td>';
2230                                                    output += '</tr>';
2231                                                }
2232                                                output += '</table>';
2233                                                output += '<div class="dir_end">' + dir.end_address + '</div>';
2234
2235                                                dirpanel.innerHTML += output;
2236
2237                                            });
2238                                        });
2239                                    }
2240                                }
2241    */
2242                                map_obj.route_directions[routeobj.route_id] = directionsDisplay;
2243                            }
2244                        } else {
2245                            console.log(routeobj);
2246                            console.log("" + wpgmp_local.wpgmp_route_not_avilable + "");
2247                        }
2248                    });
2249                });
2250            }
2251
2252        },
2253
2254        enable_drawing: function() {
2255            var map_obj = this;
2256            map_obj.drawingmanager = new google.maps.drawing.DrawingManager({
2257                drawingMode: null,
2258                drawingControl: true,
2259                drawingControlOptions: {
2260                    position: google.maps.ControlPosition.TOP_CENTER,
2261                    drawingModes: [
2262
2263                        google.maps.drawing.OverlayType.CIRCLE, google.maps.drawing.OverlayType.POLYGON, google.maps.drawing.OverlayType.POLYLINE, google.maps.drawing.OverlayType.RECTANGLE
2264
2265                    ]
2266                },
2267
2268                circleOptions: {
2269                    fillColor: '#003dce',
2270                    strokeColor: '#003dce',
2271                    strokeWeight: '1',
2272                    strokeOpacity: '0.5',
2273                    zindex: 1,
2274                    fillOpacity: '0.5',
2275                    editable: false,
2276                    draggable: false
2277                },
2278                polygonOptions: {
2279                    fillColor: '#003dce',
2280                    strokeColor: '#003dce',
2281                    strokeWeight: '1',
2282                    strokeOpacity: '0.5',
2283                    zindex: 1,
2284                    fillOpacity: '0.5',
2285                    editable: false,
2286                    draggable: false
2287                },
2288                polylineOptions: {
2289                    fillColor: '#003dce',
2290                    strokeColor: '#003dce',
2291                    strokeWeight: '1',
2292                    strokeOpacity: '0.5',
2293                    zindex: 1,
2294                    fillOpacity: '0.5',
2295                    editable: false,
2296                    draggable: false
2297                },
2298                rectangleOptions: {
2299                    fillColor: '#003dce',
2300                    strokeColor: '#003dce',
2301                    strokeWeight: '1',
2302                    strokeOpacity: '0.5',
2303                    zindex: 1,
2304                    fillOpacity: '0.5',
2305                    editable: false,
2306                    draggable: false
2307                }
2308            });
2309            map_obj.drawingmanager.setMap(map_obj.map);
2310            map_obj.event_listener(map_obj.drawingmanager, 'circlecomplete', function(circle) {
2311                map_obj.wpgmp_circles.push(circle);
2312                map_obj.wpgmp_shape_complete(circle, 'circle');
2313            });
2314            map_obj.event_listener(map_obj.drawingmanager, 'polygoncomplete', function(polygon) {
2315                map_obj.wpgmp_polygons.push(polygon);
2316                map_obj.wpgmp_shape_complete(polygon, 'polygon');
2317            });
2318            map_obj.event_listener(map_obj.drawingmanager, 'polylinecomplete', function(polyline) {
2319                map_obj.wpgmp_polylines.push(polyline);
2320                map_obj.wpgmp_shape_complete(polyline, 'polyline');
2321            });
2322            map_obj.event_listener(map_obj.drawingmanager, 'rectanglecomplete', function(rectangle) {
2323                map_obj.wpgmp_rectangles.push(rectangle);
2324                map_obj.wpgmp_shape_complete(rectangle, 'rectangle');
2325            });
2326        },
2327
2328        create_polygon: function() {
2329
2330            var map_obj = this;
2331
2332            $.each(this.map_data.shapes.shape.polygons, function(index, polygon) {
2333                var path = [];
2334                $.each(polygon.cordinates, function(ind, cordinate) {
2335                    var latlng = cordinate.split(',');
2336                    path.push(new google.maps.LatLng(latlng[0], latlng[1]));
2337                });
2338
2339                polygon.reference = new google.maps.Polygon({
2340                    paths: path,
2341                    strokeColor: polygon.settings.stroke_color,
2342                    strokeOpacity: polygon.settings.stroke_opacity,
2343                    strokeWeight: polygon.settings.stroke_weight,
2344                    fillColor: polygon.settings.fill_color,
2345                    fillOpacity: polygon.settings.fill_opacity
2346                });
2347                if (typeof map_obj.map_data.shapes != 'undefined') {
2348
2349                    if (map_obj.map_data.shapes.drawing_editable === true) {
2350                        map_obj.event_listener(polygon.reference, "click", function() {
2351                            map_obj.setSelection(polygon.reference);
2352                            map_obj.get_shapes_options(polygon.reference, 'polygon');
2353                        });
2354
2355
2356                    } else if (polygon.events.url !== '' || polygon.events.message !== '') {
2357
2358                        map_obj.event_listener(polygon.reference, "click", function() {
2359
2360                            if (polygon.events.url === '' && polygon.events.message !== '') {
2361                                var bounds = new google.maps.LatLngBounds();
2362                                polygon.reference.getPath().forEach(function(element, index) {
2363                                    bounds.extend(element);
2364                                });
2365                                $.each(map_obj.places, function(key, place) {
2366                                    place.infowindow.close();
2367                                });
2368                                map_obj.opened_info.setPosition(bounds.getCenter());
2369                                map_obj.opened_info.setContent(polygon.events.message);
2370                                map_obj.opened_info.open(map_obj.map, this);
2371
2372                            } else {
2373                                window.location = polygon.events.url;
2374                            }
2375
2376                        });
2377
2378                    }
2379                }
2380                polygon.reference.setMap(map_obj.map);
2381
2382                map_obj.wpgmp_polygons.push(polygon.reference);
2383                map_obj.wpgmp_shape_events.push({
2384                    'shape': polygon.reference,
2385                    'url': polygon.events.url,
2386                    'message': polygon.events.message
2387                });
2388            });
2389        },
2390
2391        create_polyline: function() {
2392
2393            var map_obj = this;
2394
2395
2396            $.each(this.map_data.shapes.shape.polylines, function(index, polyline) {
2397                var path = [];
2398
2399                if (typeof polyline.cordinates != 'undefined') {
2400                    $.each(polyline.cordinates, function(ind, cordinate) {
2401                        var latlng = cordinate.split(',');
2402                        path.push(new google.maps.LatLng(latlng[0], latlng[1]));
2403                    });
2404
2405                    polyline.reference = new google.maps.Polyline({
2406                        path: path,
2407                        strokeColor: polyline.settings.stroke_color,
2408                        strokeOpacity: polyline.settings.stroke_opacity,
2409                        strokeWeight: polyline.settings.stroke_weight
2410                    });
2411
2412
2413
2414                    if (typeof map_obj.map_data.shapes != 'undefined') {
2415
2416                        if (map_obj.map_data.shapes.drawing_editable === true) {
2417
2418                            map_obj.event_listener(polyline.reference, "click", function() {
2419                                map_obj.setSelection(polyline.reference);
2420                                map_obj.get_shapes_options(polyline.reference, 'polyline');
2421                            });
2422
2423
2424                        } else if (polyline.events.url !== '' || polyline.events.message !== '') {
2425
2426                            map_obj.event_listener(polyline.reference, "click", function() {
2427
2428
2429                                if (polyline.events.url === '' && polyline.events.message !== '') {
2430                                    var bounds = new google.maps.LatLngBounds();
2431                                    polyline.reference.getPath().forEach(function(element, index) {
2432                                        bounds.extend(element);
2433                                    });
2434                                    $.each(map_obj.places, function(key, place) {
2435                                        place.infowindow.close();
2436                                    });
2437                                    map_obj.opened_info.setPosition(bounds.getCenter());
2438                                    map_obj.opened_info.setContent(polyline.events.message);
2439                                    map_obj.opened_info.open(map_obj.map, this);
2440
2441                                } else if (polyline.events.url !== '') {
2442                                    window.location = polyline.events.url;
2443                                }
2444
2445                            });
2446
2447
2448                        }
2449                    }
2450                }
2451                if (typeof polyline.reference != 'undefined') {
2452                    polyline.reference.setMap(map_obj.map);
2453                    map_obj.wpgmp_polylines.push(polyline.reference);
2454                    map_obj.wpgmp_shape_events.push({
2455                        'shape': polyline.reference,
2456                        'url': polyline.events.url,
2457                        'message': polyline.events.message
2458                    });
2459                }
2460            });
2461        },
2462        event_listener: function(obj, type, func) {
2463            google.maps.event.addListener(obj, type, func);
2464        },
2465        create_circle: function() {
2466
2467            var map_obj = this;
2468            $.each(this.map_data.shapes.shape.circles, function(index, circle) {
2469                var path;
2470                $.each(circle.cordinates, function(ind, cordinate) {
2471                    var latlng = cordinate.split(',');
2472                    path = new google.maps.LatLng(latlng[0], latlng[1]);
2473                });
2474
2475                circle.reference = new google.maps.Circle({
2476                    fillColor: circle.settings.fill_color,
2477                    fillOpacity: circle.settings.fill_opacity,
2478                    strokeColor: circle.settings.stroke_color,
2479                    strokeOpacity: circle.settings.stroke_opacity,
2480                    strokeWeight: circle.settings.stroke_weight,
2481                    center: path,
2482                    radius: parseInt(circle.settings.radius)
2483                });
2484
2485                if (typeof map_obj.map_data.shapes != 'undefined') {
2486
2487                    if (map_obj.map_data.shapes.drawing_editable === true) {
2488                        map_obj.event_listener(circle.reference, "click", function() {
2489                            map_obj.setSelection(circle.reference);
2490                            map_obj.get_shapes_options(circle.reference, 'circle');
2491                        });
2492
2493                    } else if (circle.events.url !== '' || circle.events.message !== '') {
2494                        map_obj.event_listener(circle.reference, "click", function() {
2495
2496                            if (circle.events.url === '' && circle.events.message !== '') {
2497                                $.each(map_obj.places, function(key, place) {
2498                                    place.infowindow.close();
2499                                });
2500                                map_obj.opened_info.setPosition(circle.reference.getCenter());
2501                                map_obj.opened_info.setContent(circle.events.message);
2502                                map_obj.opened_info.open(map_obj.map, this);
2503
2504                            } else if (circle.events.url !== '') {
2505                                window.location = circle.events.url;
2506                            }
2507
2508
2509                        });
2510
2511                    }
2512                }
2513
2514
2515                circle.reference.setMap(map_obj.map);
2516                map_obj.wpgmp_circles.push(circle.reference);
2517                map_obj.wpgmp_shape_events.push({
2518                    'shape': circle.reference,
2519                    'url': circle.events.url,
2520                    'message': circle.events.message
2521                });
2522            });
2523        },
2524
2525        create_rectangle: function() {
2526
2527            var map_obj = this;
2528            $.each(this.map_data.shapes.shape.rectangles, function(index, rectangle) {
2529                var left_latlng = rectangle.cordinates[0].split(',');
2530                var right_latlng = rectangle.cordinates[1].split(',');
2531
2532                var path = new google.maps.LatLngBounds(new google.maps.LatLng(left_latlng[0], left_latlng[1]), new google.maps.LatLng(right_latlng[0], right_latlng[1]));
2533
2534                rectangle.reference = new google.maps.Rectangle({
2535                    bounds: path,
2536                    fillColor: rectangle.settings.fill_color,
2537                    fillOpacity: rectangle.settings.fill_opacity,
2538                    strokeColor: rectangle.settings.stroke_color,
2539                    strokeOpacity: rectangle.settings.stroke_opacity,
2540                    strokeWeight: rectangle.settings.stroke_weight
2541                });
2542
2543                if (typeof map_obj.map_data.shapes != 'undefined') {
2544
2545                    if (map_obj.map_data.shapes.drawing_editable === true) {
2546
2547                        map_obj.event_listener(rectangle.reference, "click", function() {
2548
2549                            map_obj.setSelection(rectangle.reference);
2550                            map_obj.get_shapes_options(rectangle.reference, 'rectangle');
2551
2552                        });
2553
2554                    } else if (rectangle.events.url !== '' || rectangle.events.message !== '') {
2555                        map_obj.event_listener(rectangle.reference, "click", function() {
2556
2557                            if (rectangle.events.url === '' && rectangle.events.message !== '') {
2558                                $.each(map_obj.places, function(key, place) {
2559                                    place.infowindow.close();
2560                                });
2561                                map_obj.opened_info.setPosition(rectangle.reference.getBounds().getCenter());
2562                                map_obj.opened_info.setContent(rectangle.events.message);
2563                                map_obj.opened_info.open(map_obj.map, this);
2564                            } else if (rectangle.events.url !== '') {
2565                                window.location = rectangle.events.url;
2566                            }
2567
2568                        });
2569
2570                    }
2571                }
2572
2573                rectangle.reference.setMap(map_obj.map);
2574                map_obj.wpgmp_rectangles.push(rectangle.reference);
2575                map_obj.wpgmp_shape_events.push({
2576                    'shape': rectangle.reference,
2577                    'url': rectangle.events.url,
2578                    'message': rectangle.events.message,
2579                });
2580            });
2581        },
2582
2583        get_shapes_options: function(shape, type) {
2584            $(".hiderow").show();
2585            $("input[name='shape_fill_color']").val(shape.fillColor);
2586            $("input[name='shape_fill_color']").parent().parent().find('.wp-color-result').css('background-color', shape.fillColor);
2587            $("select[name='shape_fill_opacity']").val(shape.fillOpacity);
2588            $("input[name='shape_stroke_color']").val(shape.strokeColor);
2589            $("input[name='shape_stroke_color']").parent().parent().find('.wp-color-result').css('background-color', shape.strokeColor);
2590            $("select[name='shape_stroke_opacity']").val(shape.strokeOpacity);
2591            $("select[name='shape_stroke_weight']").val(shape.strokeWeight);
2592            $("textarea[name='shape_path']").parent().hide();
2593            $("input[name='shape_radius']").parent().hide();
2594            $("input[name='shape_center']").parent().hide();
2595            $("input[name='shape_northeast']").parent().hide();
2596            $("input[name='shape_southwest']").parent().hide();
2597
2598            var all_shape_events = this.wpgmp_shape_events;
2599            $.each(all_shape_events, function(i, shape_event) {
2600
2601                if (shape_event.shape == shape) {
2602                    $("input[name='shape_click_url']").val(shape_event.url);
2603                    $("textarea[name='shape_click_message']").val(shape_event.message);
2604                }
2605            });
2606            if (type == 'circle') {
2607                $("input[name='shape_radius']").parent().show();
2608                $("input[name='shape_radius']").val(shape.getRadius());
2609                $("input[name='shape_center']").parent().show();
2610                $("input[name='shape_center']").val(shape.getCenter().lat() + ',' + shape.getCenter().lng());
2611
2612            } else if (type == 'rectangle') {
2613                $("input[name='shape_northeast']").parent().show();
2614                $("input[name='shape_northeast']").val(shape.getBounds().getNorthEast().lat() + ',' + shape.getBounds().getNorthEast().lng());
2615                $("input[name='shape_southwest']").parent().show();
2616                $("input[name='shape_southwest']").val(shape.getBounds().getSouthWest
2616().lat() + ',' + shape.getBounds().getSouthWest().lng());
2617
2618            } else {
2619                var polygon_cordinate = [];
2620
2621                var cordinates = shape.getPath();
2622
2623                cordinates.forEach(function(latlng, index) {
2624
2625                    var latlngin = [latlng.lat(), latlng.lng()];
2626
2627                    if (latlng.lat() !== "" && latlng.lng() !== "")
2628                        polygon_cordinate.push(latlngin);
2629
2630                });
2631                $("textarea[name='shape_path']").parent().show();
2632                $("textarea[name='shape_path']").val(polygon_cordinate.join(' '));
2633            }
2634        },
2635
2636        set_shapes_options: function(shape) {
2637            var polyOptions2 = {
2638                fillColor: $("input[name='shape_fill_color']").val(),
2639                fillOpacity: $("select[name='shape_fill_opacity']").val(),
2640                strokeColor: $("input[name='shape_stroke_color']").val(),
2641                strokeOpacity: $("select[name='shape_stroke_opacity']").val(),
2642                strokeWeight: $("select[name='shape_stroke_weight']").val(),
2643            };
2644            shape.setOptions(polyOptions2);
2645            var all_shape_events = this.wpgmp_shape_events;
2646            $.each(all_shape_events, function(i, shape_event) {
2647                if (shape_event.shape == shape) {
2648                    shape_event.url = $("input[name='shape_click_url']").val();
2649                    shape_event.message = $("textarea[name='shape_click_message']").val();
2650                }
2651            });
2652
2653        },
2654
2655        wpgmp_save_shapes: function(allcordinate) {
2656            $("input[name='shapes_values']").val(allcordinate.join("|"));
2657        },
2658
2659        wpgmp_shape_complete: function(shape, type) {
2660            var map_obj = this;
2661            map_obj.setSelection(shape);
2662            map_obj.drawingmanager.setDrawingMode(null);
2663            if (typeof map_obj.map_data.shapes != 'undefined') {
2664
2665                if (map_obj.map_data.shapes.drawing_editable === true) {
2666
2667                    map_obj.event_listener(shape, 'click', function() {
2668                        map_obj.setSelection(shape);
2669                        map_obj.get_shapes_options(shape, type);
2670                    });
2671
2672                    map_obj.wpgmp_shape_events.push({
2673                        'shape': shape,
2674                        'url': '',
2675                        'message': ''
2676                    });
2677                }
2678
2679            }
2680
2681        },
2682
2683         wpgmp_save_polylines: function() {
2684
2685            var all_polylines = [];
2686            var map_obj = this;
2687            var wpgmp_polylines = map_obj.wpgmp_polylines;
2688            var all_shape_events = map_obj.wpgmp_shape_events;
2689
2690            for (var i = 0; i < wpgmp_polylines.length; i++) {
2691
2692                var polyline_cordinate = [];
2693
2694                var cordinates = wpgmp_polylines[i].getPath();
2695
2696                var settings = wpgmp_polylines[i].strokeWeight + "," + wpgmp_polylines[i].strokeOpacity + "," + wpgmp_polylines[i].strokeColor;
2697                var events = "";
2698                $.each(all_shape_events, function(j, shape_event) {
2699                    if (shape_event.shape == wpgmp_polylines[i]) {
2700                        events = shape_event.url + "***" + shape_event.message;
2701                    }
2702                });
2703
2704                cordinates.forEach(function(latlng, index) {
2705
2706                        var latlngin = [latlng.lat(), latlng.lng()];
2707                        polyline_cordinate.push(latlngin);
2708
2709                    }
2710
2711                );
2712
2713                all_polylines.push(polyline_cordinate.join("----") + "..." + settings + "..." + events);
2714
2715            }
2716            return all_polylines;
2717
2718
2719        },
2720
2721
2722        wpgmp_save_polygons: function() {
2723
2724            var all_polygons = [];
2725            var map_obj = this;
2726            var wpgmp_polygons = map_obj.wpgmp_polygons;
2727            var all_shape_events = map_obj.wpgmp_shape_events;
2728
2729            for (var i = 0; i < wpgmp_polygons.length; i++) {
2730
2731                var polygon_cordinate = [];
2732
2733                var cordinates = wpgmp_polygons[i].getPath();
2734
2735                var settings = wpgmp_polygons[i].strokeWeight + "," + wpgmp_polygons[i].strokeOpacity + "," + wpgmp_polygons[i].strokeColor + "," + wpgmp_polygons[i].fillColor + "," + wpgmp_polygons[i].fillOpacity;
2736
2737                var events = "";
2738                $.each(all_shape_events, function(j, shape_event) {
2739                    if (shape_event.shape == wpgmp_polygons[i]) {
2740                        events = shape_event.url + "***" + shape_event.message;
2741                    }
2742                });
2743
2744                cordinates.forEach(function(latlng, index) {
2745
2746                        var latlngin = [latlng.lat(), latlng.lng()];
2747
2748                        if (latlng.lat() !== "" && latlng.lng() !== "")
2749                            polygon_cordinate.push(latlngin);
2750
2751                    }
2752
2753                );
2754
2755                all_polygons.push(polygon_cordinate.join("----") + "..." + settings + "..." + events);
2756
2757            }
2758
2759            return all_polygons;
2760
2761        },
2762
2763
2764        wpgmp_save_circles: function() {
2765
2766            var all_circles = [];
2767            var map_obj = this;
2768            var wpgmp_circles = map_obj.wpgmp_circles;
2769            var all_shape_events = map_obj.wpgmp_shape_events;
2770
2771            for (var i = 0; i < wpgmp_circles.length; i++) {
2772
2773                var circle_cordinate = [];
2774
2775                var latlng = wpgmp_circles[i].getCenter();
2776
2777                var settings = wpgmp_circles[i].strokeWeight + "," + wpgmp_circles[i].strokeOpacity + "," + wpgmp_circles[i].strokeColor + "," + wpgmp_circles[i].fillColor + "," + wpgmp_circles[i].fillOpacity + "," + wpgmp_circles[i].getRadius();
2778
2779                var events = "";
2780                $.each(all_shape_events, function(j, shape_event) {
2781                    if (shape_event.shape == wpgmp_circles[i]) {
2782                        events = shape_event.url + "***" + shape_event.message;
2783                    }
2784                });
2785
2786
2787                var latlngin = [latlng.lat(), latlng.lng()];
2788
2789                if (latlng.lat() !== "" && latlng.lng() !== "")
2790                    circle_cordinate.push(latlngin);
2791
2792                all_circles.push(circle_cordinate.join("----") + "..." + settings + "..." + events);
2793
2794            }
2795
2796            return all_circles;
2797
2798        },
2799
2800        wpgmp_save_rectangles: function() {
2801
2802            var all_rectangles = [];
2803            var map_obj = this;
2804            var wpgmp_rectangles = map_obj.wpgmp_rectangles;
2805            var all_shape_events = map_obj.wpgmp_shape_events;
2806            for (var i = 0; i < wpgmp_rectangles.length; i++) {
2807
2808                var rectangle_cordinate = [];
2809
2810
2811
2812                var settings = wpgmp_rectangles[i].strokeWeight + "," + wpgmp_rectangles[i].strokeOpacity + "," + wpgmp_rectangles[i].strokeColor + "," + wpgmp_rectangles[i].fillColor + "," + wpgmp_rectangles[i].fillOpacity;
2813
2814                var events = "";
2815                $.each(all_shape_events, function(j, shape_event) {
2816                    if (shape_event.shape == wpgmp_rectangles[i]) {
2817                        events = shape_event.url + "***" + shape_event.message;
2818                    }
2819                });
2820
2821                var latlng = wpgmp_rectangles[i].getBounds().getSouthWest
2821();
2822
2823
2824
2825                var latlngin = [latlng.lat(), latlng.lng()];
2826
2827                if (latlng.lat() !== "" && latlng.lng() !== "")
2828                    rectangle_cordinate.push(latlngin);
2829
2830
2831
2832                latlng = wpgmp_rectangles[i].getBounds().getNorthEast();
2833
2834
2835                var latlngin = [latlng.lat(), latlng.lng()];
2836
2837                if (latlng.lat() !== "" && latlng.lng() !== "")
2838                    rectangle_cordinate.push(latlngin);
2839
2840                all_rectangles.push(rectangle_cordinate.join("----") + "..." + settings + "..." + events);
2841
2842            }
2843
2844            return all_rectangles;
2845
2846        },
2847
2848        set_kml_layer: function() {
2849
2850            var map_obj = this.map;
2851
2852            $.each(this.map_data.kml_layer.kml_layers_links, function(index, link) {
2853
2854                var kmlLayerOptions = {
2855                    url: link,
2856                    map: map_obj,
2857                    preserveViewport: true
2858
2859                };
2860
2861                new google.maps.KmlLayer(kmlLayerOptions);
2862            });
2863        },
2864
2865        set_fusion_layer: function() {
2866
2867            var fusionlayer = new google.maps.FusionTablesLayer({
2868                query: {
2869                    select: this.map_data.fusion_layer.fusion_table_select,
2870                    from: this.map_data.fusion_layer.fusion_table_from
2871                },
2872                heatmap: {
2873                    enabled: this.map_data.fusion_layer.fusion_heat_map
2874                },
2875                styles: [{
2876                    markerOptions: {
2877                        iconName: this.map_data.fusion_layer.fusion_icon_name
2878                    },
2879                    polygonOptions: {
2880                        fillColor: '#00FF00',
2881                        fillOpacity: 0.3
2882                    }
2883                }]
2884            });
2885
2886            fusionlayer.setMap(this.map);
2887        },
2888
2889        set_marker_cluster: function() {
2890            var map_obj = this;
2891            var markers = [];
2892            var clusterStyles = [{
2893                textColor: 'black',
2894                url: map_obj.map_data.marker_cluster.icon,
2895                height: 32,
2896                width: 33
2897            }];
2898            $.each(this.places, function(index, place) {
2899                if (place.marker.visible == true) {
2900                    markers.push(place.marker);
2901                }
2902
2903            });
2904
2905            if (map_obj.map_data.marker_cluster.apply_style === true) {
2906                if (!map_obj.markerClusterer) {
2907                    map_obj.markerClusterer = new MarkerClusterer(map_obj.map, {}, {
2908                        gridSize: parseInt(map_obj.map_data.marker_cluster.grid),
2909                        maxZoom: parseInt(map_obj.map_data.marker_cluster.max_zoom),
2910                        styles: clusterStyles
2911
2912                    });
2913                }
2914
2915                map_obj.markerClusterer.clearMarkers();
2916                map_obj.markerClusterer.addMarkers(markers);
2917
2918                google.maps.event.addListener(map_obj.markerClusterer, 'mouseover', function(c) {
2919
2920                    c.clusterIcon_.div_.firstChild.src = map_obj.map_data.marker_cluster.hover_icon
2921                });
2922
2923                google.maps.event.addListener(map_obj.markerClusterer, 'mouseout', function(c) {
2924                    c.clusterIcon_.div_.firstChild.src = map_obj.map_data.marker_cluster.icon
2925                });
2926
2927            } else {
2928                if (!map_obj.markerClusterer) {
2929                    map_obj.markerClusterer = new MarkerClusterer(map_obj.map, {}, {
2930                        gridSize: parseInt(map_obj.map_data.marker_cluster.grid),
2931                        maxZoom: parseInt(map_obj.map_data.marker_cluster.max_zoom),
2932                        imagePath: map_obj.map_data.marker_cluster.image_path,
2933                    });
2934                }
2935
2936                map_obj.markerClusterer.clearMarkers();
2937                map_obj.markerClusterer.addMarkers(markers);
2938
2939
2940            }
2941
2942        },
2943
2944        set_panning_control: function() {
2945
2946            var panning_data = this.map_data.panning_control;
2947            var panning_map_obj = this.map;
2948            var map_obj = this;
2949
2950            var strictBounds = new google.maps.LatLngBounds(
2951                new google.maps.LatLng(panning_data.from_latitude, panning_data.from_longitude),
2952                new google.maps.LatLng(panning_data.to_latitude, panning_data.to_longitude)
2953            );
2954
2955            google.maps.event.addListener(panning_map_obj, "dragend", function() {
2956
2957                if (strictBounds.contains(panning_map_obj.getCenter())) return;
2958
2959                var c = panning_map_obj.getCenter(),
2960                    x = c.lng(),
2961                    y = c.lat(),
2962                    maxX = strictBounds.getNorthEast().lng(),
2963                    maxY = strictBounds.getNorthEast().lat(),
2964                    minX = strictBounds.getSouthWest().lng(),
2965                    minY = strictBounds.getSouthWest().lat();
2966
2967                if (x < minX) x = minX;
2968                if (x > maxX) x = maxX;
2969                if (y < minY) y = minY;
2970                if (y > maxY) y = maxY;
2971
2972                panning_map_obj.setCenter(new google.maps.LatLng(y, x));
2973            });
2974
2975            google.maps.event.addListener(panning_map_obj, "zoom_changed", function() {
2976                if (panning_map_obj.getZoom() < panning_data.zoom_level) {
2977                    panning_map_obj.setZoom(parseInt(map_obj.settings.zoom));
2978                }
2979            });
2980        },
2981
2982        set_visual_refresh: function() {
2983
2984            google.maps.visualRefresh = true;
2985        },
2986
2987        set_45_imagery: function() {
2988            //this.map.setTilt(45);
2989        },
2990
2991        set_overlay: function() {
2992
2993            this.map.overlayMapTypes.insertAt(0, new overlay_generator(new google.maps.Size(this.map_data.overlay_setting.width, this.map_data.overlay_setting.height), this.map_data.overlay_setting));
2994        },
2995
2996        set_bicyle_layer: function() {
2997
2998            var bikeLayer = new google.maps.BicyclingLayer();
2999            bikeLayer.setMap(this.map);
3000        },
3001
3002        set_traffic_layer: function() {
3003
3004            var traffic_layer = new google.maps.TrafficLayer();
3005            traffic_layer.setMap(this.map);
3006        },
3007
3008        set_panoramic_layer: function() {
3009
3010            var panoramic_layer = new google.maps.panoramio.PanoramioLayer();
3011            panoramic_layer.setMap(this.map);
3012        },
3013
3014        set_transit_layer: function() {
3015
3016            var transit_layer = new google.maps.TransitLayer();
3017            transit_layer.setMap(this.map);
3018        },
3019
3020
3021        set_weather_layer: function() {
3022
3023            var weatherLayer = new google.maps.weather.WeatherLayer({
3024                windSpeedUnit: eval('google.maps.weather.WindSpeedUnit.' + this.map_data.weather_layer.wind_unit),
3025                temperatureUnits: eval('google.maps.weather.TemperatureUnit.' + this.map_data.weather_layer.temperature_unit)
3026            });
3027
3028            weatherLayer.setMap(this.map);
3029            var cloudLayer = new google.maps.weather.CloudLayer();
3030            cloudLayer.setMap(this.map);
3031        },
3032
3033        set_streetview: function(latlng) {
3034
3035            var panoOptions = {
3036                position: latlng,
3037                addressControlOptions: {
3038                    position: google.maps.ControlPosition.BOTTOM_CENTER
3039                },
3040                linksControl: this.map_data.street_view.links_control,
3041                panControl: this.map_data.street_view.street_view_pan_control,
3042                zoomControlOptions: {
3043                    style: google.maps.ZoomControlStyle.SMALL
3044                },
3045                enableCloseButton: this.map_data.street_view.street_view_close_button
3046            };
3047            if (this.map_data.street_view.pov_heading && this.map_data.street_view.pov_pitch) {
3048                panoOptions['pov'] = {
3049                    heading: parseInt(this.map_data.street_view.pov_heading),
3050                    pitch: parseInt(this.map_data.street_view.pov_pitch)
3051                };
3052            }
3053            var panorama = new google.maps.StreetViewPanorama(this.element, panoOptions);
3054        },
3055
3056        map_loaded: function() {
3057
3058            var map_obj = this;
3059
3060            var gmap = map_obj.map;
3061
3062            google.maps.event.addListenerOnce(gmap, 'idle', function() {
3063
3064                var center = gmap.getCenter();
3065                google.maps.event.trigger(gmap, 'resize');
3066                gmap.setCenter(center);
3067
3068            });
3069
3070            if (map_obj.settings.center_by_nearest === true) {
3071                map_obj.center_by_nearest();
3072            }
3073            if (map_obj.settings.close_infowindow_on_map_click === true) {
3074                google.maps.event.addListener(gmap, "click", function(event) {
3075                    $.each(map_obj.places, function(key, place) {
3076                        place.infowindow.close();
3077                        place.marker.setAnimation(null);
3078                    });
3079                });
3080            }
3081
3082        },
3083        resize_map: function() {
3084            var map_obj = this;
3085            var gmap = map_obj.map;
3086            var zoom = gmap.getZoom();
3087            var center = gmap.getCenter();
3088            google.maps.event.trigger(this.map, 'resize');
3089            gmap.setZoom(zoom);
3090            gmap.setCenter(center);
3091        },
3092        responsive_map: function() {
3093
3094            var map_obj = this;
3095
3096            var gmap = map_obj.map;
3097
3098            google.maps.event.addDomListener(window, "resize", function() {
3099
3100                var zoom = gmap.getZoom();
3101                var center = gmap.getCenter();
3102
3103                google.maps.event.trigger(gmap, "resize");
3104                gmap.setZoom(zoom);
3105                gmap.setCenter(center);
3106                gmap.getBounds();
3107
3108            });
3109
3110        },
3111
3112        create_markers: function() {
3113
3114            var map_obj = this;
3115            var places = map_obj.map_data.places;
3116            var temp_listing_placeholder;
3117            var replaceData;
3118            var remove_keys = [];
3119            $.each(places, function(key, place) {
3120
3121                if (place.location.lat && place.location.lng) {
3122                    if (typeof place.categories == 'undefined') {
3123                        place.categories = {};
3124                    }
3125                    place.marker = new google.maps.Marker({
3126                        position: new google.maps.LatLng(
3127                            parseFloat(place.location.lat),
3128                            parseFloat(place.location.lng)
3129                        ),
3130                        icon: place.location.icon,
3131                        url: place.url,
3132                        draggable: place.location.draggable,
3133                        map: map_obj.map,
3134                        clickable: place.location.infowindow_disable,
3135                    });
3136
3137                    if (map_obj.settings.infowindow_drop_animation === true) {
3138                        place.marker.setAnimation(google.maps.Animation.DROP);
3139                    }
3140
3141                    if (map_obj.settings.infowindow_filter_only === true) {
3142                        place.marker.visible = false;
3143                        place.marker.setVisible(false);
3144                    }
3145                    // bind event to marker
3146                    if (map_obj.map_data.page == 'edit_location')
3147                        map_obj.marker_bind(place.marker);
3148                    var location_categories = [];
3149                    if (typeof place.categories != 'undefined') {
3150                        for (var cat in place.categories) {
3151                            location_categories.push(place.categories[cat].name);
3152                        }
3153                    }
3154                    var content = '';
3155                    if (map_obj.settings.infowindow_setting && place.source != 'post') {
3156                        replaceData = {
3157                            "{marker_id}": place.id,
3158                            "{marker_title}": place.title.substr(2),
3159                            "{marker_address}": place.address,
3160                            "{marker_latitude}": place.location.lat,
3161                            "{marker_longitude}": place.location.lng,
3162                            "{marker_city}": place.location.city,
3163                            "{marker_state}": place.location.state,
3164                            "{marker_country}": place.location.country,
3165                            "{marker_postal_code}": place.location.postal_code,
3166                            "{marker_zoom}": place.location.zoom,
3167                            "{marker_icon}": place.location.icon,
3168                            "{marker_category}": location_categories.join(','),
3169                            "{marker_message}": place.content
3170                        };
3171
3172                        //Add extenstion fields of locations
3173                        if (typeof place.location.extension_fields != 'undefined') {
3174                            for (var extra in place.location.extension_fields) {
3175                                if (!place.location.extension_fields[extra]) {
3176                                    replaceData['{' + extra + '}'] = '';
3177                                } else {
3178                                    replaceData['{' + extra + '}'] = place.location.extension_fields[extra];
3179                                }
3180                            }
3181                        }
3182
3183                        //Add extra fields of locations
3184                        if (typeof place.location.extra_fields != 'undefined') {
3185                            for (var extra in place.location.extra_fields) {
3186                                if (!place.location.extra_fields[extra]) {
3187                                    replaceData['{' + extra + '}'] = '';
3188                                } else {
3189                                    replaceData['{' + extra + '}'] = place.location.extra_fields[extra];
3190                                }
3191                            }
3192                        }
3193                        var temp_listing_placeholder = map_obj.settings.infowindow_setting.replace(/{[^{}]+}/g, function(match) {
3194                            if (match in replaceData) {
3195                                return (replaceData[match]);
3196                            } else {
3197                                return ("");
3198                            }
3199                        });
3200
3201                        content = temp_listing_placeholder;
3202                    } else if (place.source == 'post') {
3203                        content = place.infowindow_content;
3204                    }
3205                    if (content === "") {
3206                        content = '<div class="wpgmp_infowindow">' + place.content + '</div>';
3207                    }
3208                    place.infowindow = new google.maps.InfoWindow({
3209                        content: content
3210                    });
3211                    if (place.location.infowindow_default_open === true) {
3212                        map_obj.openInfoWindow(place);
3213                    } else if (map_obj.settings.default_infowindow_open === true) {
3214                        map_obj.openInfoWindow(place);
3215                    }
3216                    var on_event = map_obj.settings.infowindow_open_event;
3217                    var bounce_on_event = map_obj.settings.infowindow_bounce_animation;
3218                    map_obj.event_listener(place.marker, on_event, function() {
3219                        $.each(map_obj.places, function(key, prev_place) {
3220                            prev_place.infowindow.close();
3221                            prev_place.marker.setAnimation(null);
3222                        });
3223                        map_obj.openInfoWindow(place);
3224                        if (bounce_on_event == 'click') {
3225                            map_obj.toggle_bounce(place.marker);
3226                        }
3227                    });
3228                    if (bounce_on_event == 'mouseover' && on_event != 'mouseover') {
3229                        map_obj.event_listener(place.marker, 'mouseover', function() {
3230                            place.marker.setAnimation(google.maps.Animation.BOUNCE);
3231                        });
3232
3233                        map_obj.event_listener(place.marker, 'mouseout', function() {
3234                            place.marker.setAnimation(null);
3235                        });
3236                    }
3237
3238                    if (bounce_on_event != '') {
3239                        google.maps.event.addListener(place.infowindow, 'closeclick', function() {
3240                            place.marker.setAnimation(null);
3241                        });
3242                    }
3243
3244                    map_obj.places.push(place);
3245                } else {
3246                    remove_keys.push(key);
3247                }
3248            });
3249            $.each(remove_keys, function(index, value) {
3250                places.splice(value, 1);
3251            });
3252
3253        },
3254        toggle_bounce: function(marker) {
3255            if (marker.getAnimation() !== null) {
3256                marker.setAnimation(null);
3257            } else {
3258                marker.setAnimation(google.maps.Animation.BOUNCE);
3259            }
3260        },
3261        display_markers: function() {
3262
3263            var map_obj = this;
3264            map_obj.show_places = [];
3265            map_obj.categories = [];
3266            var categories = {};
3267            for (var i = 0; i < map_obj.places.length; i++) {
3268                map_obj.places[i].marker.setMap(map_obj.map);
3269                if (map_obj.places[i].marker.visible === true) {
3270                    map_obj.show_places.push(this.places[i]);
3271                }
3272
3273                if (typeof map_obj.places[i].categories != 'undefined') {
3274                    $.each(map_obj.places[i].categories, function(index, category) {
3275
3276                        if (typeof categories[category.name] == 'undefined') {
3277                            categories[category.name] = category;
3278                        }
3279                    });
3280                }
3281            }
3282
3283            this.categories = categories;
3284        },
3285        show_center_circle: function() {
3286
3287            var map_obj = this;
3288            map_obj.set_center_circle = new google.maps.Circle({
3289                map: map_obj.map,
3290                center: map_obj.map.getCenter(),
3291                fillColor: map_obj.settings.center_circle_fillcolor,
3292                fillOpacity: map_obj.settings.center_circle_fillopacity,
3293                strokeColor: map_obj.settings.center_circle_strokecolor,
3294                strokeOpacity: map_obj.settings.center_circle_strokeopacity,
3295                strokeWeight: map_obj.settings.center_circle_strokeweight,
3296                radius: 5 * 1000
3297            });
3298
3299        },
3300        show_center_marker: function() {
3301
3302            var map_obj = this;
3303            var clickable = false;
3304            if (map_obj.settings.center_marker_infowindow != '') {
3305                clickable = true;
3306            }
3307
3308            map_obj.map_center_marker = new google.maps.Marker({
3309                position: map_obj.map.getCenter(),
3310                title: map_obj.settings.center_marker_infowindow,
3311                map: map_obj.map,
3312                icon: map_obj.settings.center_marker_icon,
3313                clickable: clickable
3314            });
3315            if (typeof map_obj.map_center_info == 'undefined') {
3316                map_obj.map_center_info = new google.maps.InfoWindow();
3317            }
3318            if (map_obj.settings.center_marker_infowindow != '') {
3319                google.maps.event.addListener(map_obj.map_center_marker, 'click', function() {
3320                    map_obj.map_center_info.setPosition(map_obj.map.getCenter());
3321                    map_obj.map_center_info.setContent(map_obj.settings.center_marker_infowindow);
3322                    map_obj.map_center_info.open(map_obj.map, this);
3323
3324                });
3325            }
3326        },
3327        center_by_nearest: function() {
3328            var map_obj = this;
3329            this.get_current_location(function(user_position) {
3330                if (!map_obj.user_location_marker) {
3331                    map_obj.user_location_marker = new google.maps.Marker({
3332                        position: user_position,
3333                        title: wpgmp_local.center_location_message,
3334                        map: map_obj.map,
3335                        icon: map_obj.settings.marker_default_icon
3336                    });
3337
3338                }
3339                map_obj.user_location_marker.setVisible(true);
3340                map_obj.map.setCenter(user_position);
3341                if (map_obj.settings.show_center_circle === true) {
3342                    map_obj.show_center_circle();
3343                }
3344            });
3345        },
3346
3347        get_current_location: function(success_func, error_func) {
3348
3349            var map = this;
3350
3351            if (typeof map.user_location == 'undefined') {
3352
3353                navigator.geolocation.getCurrentPosition(function(position) {
3354                    map.user_location = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
3355
3356                    if (success_func)
3357                        success_func(map.user_location);
3358
3359                }, function(ErrorPosition) {
3360
3361                    if (error_func)
3362                        error_func(ErrorPosition);
3363
3364                }, {
3365                    enableHighAccuracy: true,
3366                    timeout: 5000,
3367                    maximumAge: 0
3368                });
3369            } else {
3370                if (success_func)
3371                    success_func(map.user_location);
3372            }
3373        },
3374
3375        openInfoWindow: function(place) {
3376            var map_obj = this;
3377
3378            if (place.location.onclick_action == "custom_link") {
3379                if (place.location.open_new_tab == 'yes')
3380                    window.open(place.location.redirect_custom_link, '_blank');
3381                else
3382                    window.open(place.location.redirect_custom_link, '_self');
3383            } else {
3384                place.infowindow.open(this.map, place.marker);
3385                if (typeof map_obj.settings.infowindow_click_change_center != 'undefined' && map_obj.settings.infowindow_click_change_center == true) {
3386                    map_obj.map.setCenter(place.marker.getPosition());
3387                }
3388                if (typeof map_obj.settings.infowindow_click_change_zoom != 'undefined' && map_obj.settings.infowindow_click_change_zoom > 0) {
3389                    map_obj.map.setZoom(map_obj.settings.infowindow_click_change_zoom);
3390                }
3391                if (this.map_data.map_tabs && this.map_data.map_tabs.direction_tab && this.map_data.map_tabs.direction_tab.dir_tab === true) {
3392                    $(this.element).find('.start_point').val(place.address);
3393                }
3394            }
3395
3396        },
3397    };
3398
3399    $.fn.maps = function(options, places) {
3400
3401        this.each(function() {
3402
3403            if (!$.data(this, "wpgmp_maps")) {
3404                $.data(this, "wpgmp_maps", new GoogleMaps(this, options, places));
3405            }
3406
3407        });
3408        // chain jQuery functions
3409        return this;
3410    };
3411
3412}(jQuery, window, document));

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.