PageSourceSearch

https://cititrans.com.sg/wp-content/plugins/google-maps/assets/js/frontend/frontend.js?ver=4.7.20

js cititrans.com.sg collected 2026-10-09 00:57:40 UTC 31,086 bytes, 585 lines download raw bytes

1var hugeitMaps = [];
2
3function hugeitMapsBindInfoWindow(marker, map, infowindow, description, infoType, openOnload) {
4    if (openOnload) {
5        /* Temporarily unnecessary       google.maps.event.addListenerOnce(map, 'tilesloaded', function() {
6         infowindow.setContent(description);
7         infowindow.open(map, marker);
8         });*/
9    }
10
11    google.maps.event.addListener(marker, 'click', function () {
12        infowindow.setContent(description);
13        infowindow.open(map, marker);
14    });
15}
16
17function hugeitMapsAttachInstructionText(stepDisplay, marker, text, map) {
18    google.maps.event.addListener(marker, 'click', function () {
19        /*Open an info window when the marker is clicked on, containing the text of the step.*/
20        stepDisplay.setContent(text);
21        stepDisplay.open(map, marker);
22    });
23}
24
25
26jQuery(document).ready(function () {
27    function hugeitMapsInitializeMap(elementId) {
28        var element = jQuery("#" + elementId),
29            marker = [],
30            polygone = [],
31            polyline = [],
32            polylinepoints,
33            newpolylinecoords = [],
34            polygonpoints,
35            polygoncoords = [],
36            directions = [],
37            directionMarkers = [],
38            newcircle = [],
39            infowindow = new google.maps.InfoWindow,
40            infowindows = [],
41            newcirclemarker = [],
42            circlepoint,
43            locatorEnabled = element.data('locator-enabled'),
44            width = element.width(),
45            height = element.height(),
46            div = parseInt(width) / parseInt(height),
47            dataMapId = element.data('map_id'),
48            dataZoom = element.data('zoom'),
49            dataMinZoom = element.data('min-zoom'),
50            dataMaxZoom = element.data('max-zoom'),
51            dataCenterLat = element.data('center-lat'),
52            dataCenterLng = element.data('center-lng'),
53            dataPanController = parseInt(element.data('pan-controller')),
54            dataZoomController = parseInt(element.data('zoom-controller')),
55            dataTypeController = parseInt(element.data('type-controller')),
56            dataScaleController = parseInt(element.data('scale-controller')),
57            imgurl = element.data('img-url'),
58            dataStreetViewController = parseInt(element.data('street-view-controller')),
59            dataOverviewMapController = parseInt(element.data('overview-map-controller')),
60            dataInfoType = element.data('info-type'),
61            dataOpenInfowindowsOnload = element.data('open-infowindows-onload');
62
63        var center_coords = new google.maps.LatLng(dataCenterLat, dataCenterLng);
64
65        var frontEndMapOptions = {
66            zoom: parseInt(dataZoom),
67            center: center_coords,
68            disableDefaultUI: true,
69            panControl: dataPanController,
70            zoomControl: dataZoomController,
71            mapTypeControl: dataTypeController,
72            scaleControl: dataScaleController,
73            streetViewControl: dataStreetViewController,
74            overviewMapControl: dataOverviewMapController,
75            mapTypeId: google['maps']['MapTypeId']['ROADMAP'],
76            minZoom: dataMinZoom,
77            maxZoom: dataMaxZoom,
78            fullscreenControl: true
79        };
80        var front_end_map = new google.maps.Map(document.getElementById(elementId), frontEndMapOptions);
81
82
83        function hugeitMapsFrontRefresh() {
84            google.maps.event.trigger(front_end_map, 'resize');
85        }
86
87        jQuery(document).on('click',function () {
88            setTimeout(function () {
89                hugeitMapsFrontRefresh();
90            }, 500);
91        })
92
93        var front_end_data = {
94            action: 'hugeit_maps_get_info',
95            map_id: dataMapId
96        };
97        jQuery.ajax({
98            url: ajaxurl,
99            dataType: 'json',
100            method: 'post',
101            data: front_end_data,
102            beforeSend: function () {
103            }
104        }).done(function (response) {
105            hugeitMapsInitializeMap(response);
106            locStores = response.success.locators;
107        }).fail(function () {
108            console.log('Failed to load response from database');
109        });
110        function hugeitMapsInitializeMap(response) {
111            if (response.success) {
112                var mapInfo = response.success;
113                var markers = mapInfo.markers;
114                for (var i = 0; i < markers.length; i++) {
115                    var name = markers[i].name;
116                    var address = markers[i].address;
117                    var anim = markers[i].animation;
118                    var description = markers[i].description;
119                    var point = new google.maps.LatLng(
120                        parseFloat(markers[i].lat),
121                        parseFloat(markers[i].lng));
122                    marker[i] = new google.maps.Marker({
123                        map: front_end_map,
124                        position: point,
125                        title: name,
126                        content: description,
127                        animation: google['maps']['Animation'][anim]
128                    });
129                    var currentInfoWindow;
130
131                    if (dataOpenInfowindowsOnload) {
132                        currentInfoWindow = infowindows[i] = new google.maps.InfoWindow;
133                    } else {
134                        currentInfoWindow = infowindow;
135                    }
136                    hugeitMapsBindInfoWindow(marker[i], front_end_map, currentInfoWindow, description, dataInfoType, dataOpenInfowindowsOnload);
137                }
138                var polygones = mapInfo.polygons;
139                for (var i = 0; i < polygones.length; i++) {
140                    var name = polygones[i].name;
141                    var line_opacity = polygones[i].line_opacity;
142                    var line_color = "#" + polygones[i].line_color;
143                    var fill_opacity = polygones[i].fill_opacity;
144                    var line_width = polygones[i].line_width;
145                    var fill_color = "#" + polygones[i].fill_color;
146                    var latlngs = polygones[i].latlng;
147                    polygoncoords = [];
148                    for (var j = 0; j < latlngs.length; j++) {
149                        polygonpoints = new google.maps.LatLng(parseFloat(latlngs[j].lat),
150                            parseFloat(latlngs[j].lng))
151                        polygoncoords.push(polygonpoints)
152                    }
153                    polygone[i] = new google.maps.Polygon({
154                        paths: polygoncoords,
155                        map: front_end_map,
156                        strokeOpacity: line_opacity,
157                        strokeColor: line_color,
158                        strokeWeight: line_width,
159                        fillOpacity: fill_opacity,
160                        fillColor: fill_color,
161                        draggable: false
162                    });
163                }
164                var polylines = mapInfo.polylines;
165                for (var i = 0; i < polylines.length; i++) {
166                    var name = polylines[i].name;
167                    var line_opacity = polylines[i].line_opacity;
168                    var line_color = polylines[i].line_color;
169                    var line_width = polylines[i].line_width;
170                    var latlngs = polylines[i].latlng;
171                    newpolylinecoords = [];
172                    for (var j = 0; j < latlngs.length; j++) {
173                        polylinepoints = new google.maps.LatLng(parseFloat(latlngs[j].lat),
174                            parseFloat(latlngs[j].lng));
175                        newpolylinecoords.push(polylinepoints)
176                    }
177                    polyline[i] = new google.maps.Polyline({
178                        path: newpolylinecoords,
179                        map: front_end_map,
180                        strokeColor: "#" + line_color,
181                        strokeOpacity: line_opacity,
182                        strokeWeight: line_width
183                    });
184                }
185                var circles = mapInfo.circles;
186                for (var i = 0; i < circles.length; i++) {
187                    var circle_name = circles[i].name;
188                    var circle_center_lat = circles[i].center_lat;
189                    var circle_center_lng = circles[i].center_lng;
190                    var circle_radius = circles[i].radius;
191                    var circle_line_width = circles[i].line_width;
192                    var circle_line_color = circles[i].line_color;
193                    var circle_line_opacity = circles[i].line_opacity;
194                    var circle_fill_color = circles[i].fill_color;
195                    var circle_fill_opacity = circles[i].fill_opacity;
196                    var circle_show_marker = parseInt(circles[i].show_marker);
197                    circlepoint = new google.maps.LatLng(parseFloat(circles[i].center_lat),
198                        parseFloat(circles[i].center_lng));
199                    newcircle[i] = new google.maps.Circle({
200                        map: front_end_map,
201                        center: circlepoint,
202                        title: name,
203                        radius: parseInt(circle_radius),
204                        strokeColor: "#" + circle_line_color,
205                        strokeOpacity: circle_line_opacity,
206                        strokeWeight: circle_line_width,
207                        fillColor: "#" + circle_fill_color,
208                        fillOpacity: circle_fill_opacity
209                    });
210                    if (circle_show_marker) {
211                        newcirclemarker[i] = new google.maps.Marker({
212                            position: circlepoint,
213                            map: front_end_map,
214                            title: circle_name
215                        });
216                    }
217                }
218            }
219        }
220
221        /* locator start */
222        if (locatorEnabled != 0) {
223            var locpOptions = {
224                map: front_end_map,
225                strokeColor: "#00FF00",
226                strokeOpacity: 0.9,
227                strokeWeight: 4
228            };
229            var locDirectionsService = new google.maps.DirectionsService;
230            var locDirectionsDisplay = new google.maps.DirectionsRenderer({
231                suppressMarkers: true,
232                polylineOptions: locpOptions
233            });
234            var locRouteInfowindow = new google.maps.InfoWindow;
235            var locClosest, locClosetPosition, def, locClosetAddress, locInfoWindow, locCurrent,fromLatLng, locMarker, finalStores = [], locClosetArr = [], locMarkers = [];
236            var locBounds = new google.maps.LatLngBounds();
237            var locMap_id = dataMapId;
238            var input = document.getElementById('searchLocator_' + locMap_id);
239            var autocomplete = new google.maps.places.Autocomplete(input);
240            var searchBox = new google.maps.places.SearchBox(input);
241            var LocatorIcon = {
242                url: imgurl + "/str-marker-icon.png",
243                labelOrigin: new google.maps.Point(22, 20)
244            };
245            var labels = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
246            var labelIndex = 1;
247
248            function calcDistance(pointA, pointB) {
249
250                return (google.maps.geometry.spherical.computeDistanceBetween(pointA, pointB) / 1000).toFixed(2);
251
252            }
253
254            function clearDistance() {
255                for (var i in locMarkers) {
256                    if (locMarkers[i].get('name') == 'closest') {
257                        locMarkers[i].setMap(null);
258                        locMarkers[i].length = 0;
259                    }
260
261                    if (locCurrent) {
262                        locCurrent.setMap(null);
263                        locCurrent.length = 0;
264                    }
265
266                }
267            }
268
269            function clearLocations() {
270                for (var i in locMarkers) {
271                    locMarkers[i].setMap(null);
272                }
273                locMarkers.length = 0;
274            }
275
276            function clearDirections() {
277                locDirectionsDisplay.setMap(null);
278            }
279
280
281
282            var oldRadius;
283            var hgCounter=0;
284            var hgTheSame;
285            jQuery(document).on("click", "#submitLocator_" + locMap_id, function () {
286                if(oldRadius!=jQuery("#locatorRadius_" + locMap_id).val()){
287                    oldRadius = jQuery("#locatorRadius_" + locMap_id).val();
288                    hgTheSame=false;
289                }
290                else {
291                    hgTheSame=true;
292                }
293
294                var locAddress = jQuery("#searchLocator_" + locMap_id).val();
295                var locRadius =  jQuery("#locatorRadius_" + locMap_id).val();
296                var testGetDist = function (lp1, lp2) {
297                    var deferred = jQuery.Deferred();
298                    var tLocRoute, tLocContent;
299                    locDirectionsService.route({
300                        origin: lp1,
301                        destination: lp2,
302                        travelMode: 'DRIVING'
303                    }, function (response, status) {
304                        if (status === google.maps.DirectionsStatus.OK) {
305                            tLocRoute = response.routes[0];
306                            deferred.resolve(tLocContent = Number(tLocRoute.legs[0].distance.value / 1000).toFixed(1));
307                        }
308                        else {
309                            deferred.reject(status);
310                        }
311                    });
312                    return deferred.promise();
313                };
314
315
316                function getFinalStores(locStores) {
317                    var dfd = jQuery.Deferred();
318                    for (var i in locStores) {
319                        (function(i){
320
321                            locStores[i].latLng = new google.maps.LatLng(locStores[i].locator_lat, locStores[i].locator_lng);
322
323
324                            testGetDist(fromLatLng, locStores[i].latLng).then(function (resp) {
325                               if(locRadius && jQuery.isNumeric(locRadius)){
326                                    if (resp < parseInt(locRadius)) {
327                                        locStores[i].distance = resp;
328                                        finalStores.push(locStores[i]);
329                                    }
330                                }
331
332                                },
333                                function (err) {
334
335                                    console.log(err);
336
337                                }).always(function () {
338                                if (i == locStores.length - 1) {
339                                    dfd.resolve();
340                                }
341                            });
342                        }(i));
343
344                    }
345
346                    return dfd.promise();
347                }
348                if (locAddress != "" && locRadius != "") {
349                    finalStores = [];
350                    var geocoder = new google.maps.Geocoder();
351                    geocoder.geocode({'address': locAddress}, function (result, status) {
352                        if (status == google.maps.GeocoderStatus.OK) {
353                            /* Compare old with new value */
354                            if(!!fromLatLng){
355                                var oldLatLng = fromLatLng;
356                            }
357                            fromLatLng = new google.maps.LatLng(result[0].geometry.location.lat(), result[0].geometry.location.lng());
358                                if(!!oldLatLng){
359                                    if(oldLatLng.lat()===fromLatLng.lat() && oldLatLng.lng()===fromLatLng.lng() && hgTheSame ){
360                                        return false;
361                                    }
362                                }
363
364                            /* Compare old with new value */
365                            getFinalStores(locStores).then(function () {
366                                if (finalStores.length > 0) {
367                                    labels = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
368                                    labelIndex = 1;
369                                    jQuery(document).find("#huge_main_store_block").remove();
370                                    jQuery(".huge_it_google_map_container").after("<div id='huge_main_store_block'></div>");
371                                    var StoreBlock = "";
372                                    StoreBlock += "<div class='str-block'>";
373                                    StoreBlock += "        <div class='addr-info'>";
374                                    StoreBlock += "            <div class='str-img'>";
375                                    StoreBlock += "                <img src='" + imgurl + "\/str-marker.png' alt=''>";
376                                    StoreBlock += "            <\/div>";
377                                    StoreBlock += "            <div class='addr_block'>";
378                                    StoreBlock += "                <p class='str-name'><\/p>";
379                                    StoreBlock += "                <p class='str-dir'><a href='' target='_blank'>Get Directions<\/a><\/p>";
380                                    StoreBlock += "                <div class='str-phone'>";
381                                    StoreBlock += "                    <img src='" + imgurl + "\/phone.png' alt=''><p class='str-number'><\/p>";
382                                    StoreBlock += "                <\/div>";
383                                    StoreBlock += "";
384                                    StoreBlock += "            <\/div>";
385                                    StoreBlock += "";
386                                    StoreBlock += "            <p class='str-addr'><\/p>";
387                                    StoreBlock += "        <\/div>";
388                                    StoreBlock += "";
389                                    StoreBlock += "        <div class='a_info'>";
390                                    StoreBlock += "            <table>";
391                                    StoreBlock += "                <tr>";
392                                    StoreBlock += "                    <td>Sun<\/td>";
393                                    StoreBlock += "                    <td name='sun'><\/td>";
394                                    StoreBlock += "                <\/tr>";
395                                    StoreBlock += "                <tr>";
396                                    StoreBlock += "                    <td>Mon<\/td>";
397                                    StoreBlock += "                    <td name='mon'><\/td>";
398                                    StoreBlock += "                <\/tr>";
399                                    StoreBlock += "                <tr>";
400                                    StoreBlock += "                    <td>Tue<\/td>";
401                                    StoreBlock += "                    <td name='tue'><\/td>";
402                                    StoreBlock += "                <\/tr>";
403                                    StoreBlock += "                <tr>";
404                                    StoreBlock += "                    <td>Wed<\/td>";
405                                    StoreBlock += "                    <td name='wed'><\/td>";
406                                    StoreBlock += "                <\/tr>";
407                                    StoreBlock += "                <tr>";
408                                    StoreBlock += "                    <td>Thu<\/td>";
409                                    StoreBlock += "                    <td name='thu'><\/td>";
410                                    StoreBlock += "                <\/tr>";
411                                    StoreBlock += "                <tr>";
412                                    StoreBlock += "                    <td>Fri<\/td>";
413                                    StoreBlock += "                    <td name='fri'><\/td>";
414                                    StoreBlock += "                <\/tr>";
415                                    StoreBlock += "                <tr>";
416                                    StoreBlock += "                    <td>Sat<\/td>";
417                                    StoreBlock += "                    <td name='sat'><\/td>";
418                                    StoreBlock += "                <\/tr>";
419                                    StoreBlock += "";
420                                    StoreBlock += "            <\/table>";
421                                    StoreBlock += "";
422                                    StoreBlock += "        <\/div>";
423                                    StoreBlock += "    <\/div>";
424                                    locClosetArr = [];
425                                    clearDistance();
426                                    clearLocations();
427                                    clearDirections();
428                                    locClosest = parseInt(locRadius);
429
430                                    for (var i in finalStores) {
431                                        locClosetArr.push(finalStores[i].distance);
432                                    }
433                                    locClosest = Math.min.apply(null, locClosetArr);
434                                    for (var i in finalStores) {
435
436                                        if (typeof(finalStores[i].locator_days) != "object" && finalStores[i].locator_days != "") {
437                                            finalStores[i].locator_days = JSON.parse(finalStores[i].locator_days);
438                                        }
439                                        else {
440
441                                            if(typeof(finalStores[i].locator_days) != "object" && finalStores[i].locator_days == ""){
442                                                finalStores[i].locator_days = JSON.parse(null);
443                                            }
444
445                                        }
446
447                                        locMarker = new google.maps.Marker({
448                                            map: front_end_map,
449                                            position: {
450                                                lat: finalStores[i].locator_lat,
451                                                lng: finalStores[i].locator_lng
452                                            },
453                                            id: i,
454                                            icon: LocatorIcon,
455                                            label: labels[labelIndex++ % labels.length]
456
457                                        });
458                                        locInfoWindow = new google.maps.InfoWindow;
459
460                                        if (parseFloat(finalStores[i].distance) <= parseFloat(locClose
460st)) {
461                                            locClosest = finalStores[i].distance;
462                                            locClosetPosition = {
463                                                lat: parseFloat(finalStores[i].locator_lat),
464                                                lng: parseFloat(finalStores[i].locator_lng)
465                                            };
466                                            locClosetAddress = finalStores[i].locator_addr;
467                                            locMarker.set('name', 'closest');
468                                        }
469
470                                        locBounds.extend(locMarker.getPosition());
471                                        google.maps.event.addListener(locMarker, 'click', function (i) {
472                                            return function () {
473                                                testGetDist(fromLatLng, this.position).then(function (resp) {
474                                                    locInfoWindow.setContent("<b>" + finalStores[i].name + "</b><br/>" + finalStores[i].locator_addr + "<br/>" + resp+" km");
475                                                }, function (err) {
476                                                    console.log(err);
477                                                });
478                                                locInfoWindow.open(front_end_map, this);
479                                            }
480                                        }(i));
481
482                                        locMarkers.push(locMarker);
483                                        jQuery("#huge_main_store_block").append(StoreBlock);
484                                        if (finalStores[i].locator_phone == "") {
485                                            jQuery(document).find(".str-phone").last().css("visibility", 'hidden');
486                                        }
487                                        else {
488                                            jQuery(document).find(".str-phone").last().css("visibility", 'visible');
489                                        }
490                                        var gDirQuery = finalStores[i].locator_addr;
491                                        gDirQuery = gDirQuery.replace(/ /g, '+');
492                                        jQuery(document).find("#huge_main_store_block .str-name").last().text(finalStores[i].name);
493                                        jQuery(document).find("#huge_main_store_block .str-addr").last().text(finalStores[i].locator_addr);
494                                        jQuery(document).find("#huge_main_store_block .str-number").last().text(finalStores[i].locator_phone);
495                                        jQuery(document).find("#huge_main_store_block .str-dir a").last().prop('href', 'https://www.google.com/maps/dir//' + gDirQuery);
496                                        jQuery(document).find("#huge_main_store_block .str-img img").last().before("<p class='markerLabel'>" + locMarker.label + "</p>");
497                                        jQuery(document).find("#huge_main_store_block .a_info").last().find("table tr td:last-child").each(function () {
498                                            var nameDayOfWeek = jQuery(this).attr('name');
499                                            if (finalStores[i].locator_days[nameDayOfWeek].start != "" && finalStores[i].locator_days[nameDayOfWeek].end != "") {
500                                                jQuery(this).text(finalStores[i].locator_days[nameDayOfWeek].start + " - " + finalStores[i].locator_days[nameDayOfWeek].end);
501                                            }
502                                            else {
503                                                jQuery(this).text("Closed");
504                                            }
505                                        });
506                                    }
507                                    locCurrent = new google.maps.Marker({
508                                        map: front_end_map,
509                                        icon: LocatorIcon,
510                                        label: 'A',
511                                        position: fromLatLng
512                                    });
513                                    google.maps.event.addListener(locCurrent, "click", function () {
514                                        locInfoWindow.setContent(locAddress);
515                                        locInfoWindow.open(front_end_map, this);
516                                    });
517
518                                    locBounds.extend(locCurrent.getPosition());
519                                    front_end_map.fitBounds(locBounds);
520                                    center_coords = locBounds;
521                                    var locRoute, locContent;
522                                    locDirectionsDisplay.setMap(front_end_map
522);
523                                    locDirectionsService.route({
524                                        origin: locCurrent.getPosition(),
525                                        destination: locClosetPosition,
526                                        travelMode: 'DRIVING'
527                                    }, function (response, status) {
528                                        if (status === google.maps.DirectionsStatus.OK) {
529                                            locDirectionsDisplay.setDirections(response);
530                                            locRoute = response.routes[0];
531                                            locContent = "<b>Total distance: </b>" + locRoute.legs[0].distance.text;
532                                            front_end_map.fitBounds(locBounds);
533                                        }
534                                        else {
535                                            window.alert('Directions request failed due to ' + status);
536                                        }
537                                    });
538                                    locRouteInfowindow.close();
539                                    google.maps.event.clearListeners(locpOptions, 'click');
540                                    google.maps.event.addListener(locpOptions, "click", function (e) {
541                                        locRouteInfowindow.close();
542                                        locRouteInfowindow.setPosition(e.latLng);
543                                        locRouteInfowindow.setContent(locContent);
544                                        locRouteInfowindow.open(front_end_map);
545                                    });
546
547                                }
548                                else {
549                                    clearDistance();
550                                    clearLocations();
551                                    clearDirections();
552                                    jQuery(document).find("#huge_main_store_block").remove();
553                                    alert("Sorry, but there are not available stores in certain radius!");
554
555                                }
556                            });
557                        } else {
558                            alert('Geocode was not successful for the following reason: ' + status);
559                        }
560
561                    });
562                }
563            });
564        }
565
566        /* locator end */
567    }
568
569    var allMaps = jQuery('.huge_it_google_map');
570
571    if (allMaps.length) {
572
573        allMaps.each(function (i) {
574
575            var id = jQuery(this).attr('id');
576
577            hugeitMaps[i] = hugeitMapsInitializeMap(id);
578
579
580        });
581
582    }
583
584
585});

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.