PageSourceSearch

https://blackvelvetwhisky.com/js/locator.js?ver=764236165

js blackvelvetwhisky.com collected 2026-10-06 00:25:58 UTC 40,621 bytes, 1,801 lines download raw bytes

1$(document).on('ready', function() {
2
3    if ($('.results').length > 0) {
4
5        $('.result-scroll').mCustomScrollbar();
6
7    }
8
9});
10
11
12
13//var marker;
14
15var markers = [];
16
17var infowindows = [];
18
19var singleMarker = info = info1 = '';
20
21var isDraggable = $(document).width() > 480 ? true : false;
22
23var pos = lat =lng = "";
24
25
26
27function initMap() {
28
29    var map = new google.maps.Map(document.getElementById('map'), {
30
31        center: {lat: 37.0902, lng: -95.7129},
32
33        zoom: 4,
34
35        disableDefaultUI: true,
36
37        zoomControl: true,
38
39        draggable: true,
40
41        //scrollwheel: true,
42
43        mapTypeId:google.maps.MapTypeId.ROADMAP
44
45    });
46
47    
48
49    //var infowindow = new google.maps.InfoWindow();
50
51    //var infowindow;
52
53    
54
55    $('.gps-icon').on('click', function(){
56
57        if (navigator.geolocation) {
58
59            navigator.geolocation.getCurrentPosition(function(position) {
60
61                lat = position.coords.latitude;
62
63                lng = position.coords.longitude;
64
65                // lat = 40.70362;
66
67                // lng = -74.01243;
68
69
70
71                $.getJSON( "https://maps.googleapis.com/maps/api/geocode/json?latlng="+lat+","+lng+"&sensor=true&key=AIzaSyB7sd7uf1IxQEy7lxuUvCY3BH2pJN4aGmM", function( data ) {
72
73                    var data = data.results[0].address_components;
74
75                    var postalCode = data.find(function (zipCode){
76
77                        return zipCode.types == "postal_code";
78
79                    });
80
81                    $('[name=zip]').val(postalCode.short_name);
82
83                    $(".locator-zip-group .xm-tooltip").remove();
84
85                });
86
87                $('.product-locator').submit();
88
89            });
90
91        }     
92
93    });
94
95    
96
97    var normalIcon = {
98
99                    url: "images/map-marker.png?v=4",
100
101                    origin: new google.maps.Point(0, 0),
102
103                    anchor: new google.maps.Point(32,65),
104
105                    labelOrigin: new google.maps.Point(15,15),
106
107                };
108
109    var activeIcon = {
110
111                    url: "images/map-marker.png?v=4",
112
113                    origin: new google.maps.Point(0, 0),
114
115                    anchor: new google.maps.Point(32,65),
116
117                    labelOrigin: new google.maps.Point(15,15),
118
119                };
120
121
122
123    var bounds = new google.maps.LatLngBounds();
124
125    var isInitialized = 'false';
126
127
128
129    $('.refine-search').off().on('click', function(e){
130
131        e.preventDefault();
132
133
134
135        //ga('send', 'event', "Product Locator", "Refine Search");
136
137
138
139        $('.locator').removeClass('filter-complete_js');
140
141        $('.order-now').hide();
142
143        $('p.on-result-show, .showing-results,.no-results-found,.refine-search').hide();
144
145        $('.product-search-form').show();
146
147        $('.locator-map .order-now-block').hide();
148
149
150
151        if(markers != ''){    
152
153            for (var i = 0; i < markers.length; i++) {
154
155                markers[i].setMap(null);
156
157            }
158
159            markers = [];
160
161        }
162
163        if(infowindows != ''){    
164
165            for (var i = 0; i < infowindows.length; i++) {
166
167                infowindows[i].setMap(null);
168
169            }
170
171            infowindows = [];
172
173        }
174
175
176
177    });  
178
179
180
181
182
183    $('[name=zip]').on('blur', function(){
184
185        if($(this).val() != "") {
186
187            $(this).prev(".xm-tooltip").remove();
188
189        }
190
191    });
192
193
194
195    $(window).load(function() {
196
197        var onloadZip = $('[name=zip]').val();
198
199        if(onloadZip != ""){
200
201            $('.product-locator').submit();
202
203        }
204
205    });
206
207
208
209    $('.product-locator').on('submit', function(e){
210
211        e.preventDefault();
212
213
214
215        $(".product-locator .xm-tooltip").remove();
216
217
218
219        var valid = true;
220
221        var brand = 'Black Velvet';
222
223        var category = $('[name=product]').val();
224
225        if(category == null || category == ''){
226
227            $('[name=product]').before('<div class="xm-tooltip">Please select product.</div>');
228
229            valid = false;
230
231        }
232
233        //var brand = 'Evan Williams';
234
235        var zip = $('[name=zip]').val();
236
237        var locationArr = [];
238
239        var storeType = 'off';
240
241        var orderUrl = $('[name=product]').find(':selected').attr('data-order-url');
242
243        
244
245
246
247        //map-order-btn
248
249
250
251        if(zip == "") {
252
253            $('[name=zip]').before('<div class="xm-tooltip">Please enter zip code.</div>');
254
255            valid = false;
256
257        }
258
259
260
261        if(markers != ''){    
262
263            for (var i = 0; i < markers.length; i++) {
264
265                markers[i].setMap(null);
266
267            }
268
269            markers = [];
270
271        }
272
273        if(infowindows != ''){    
274
275            for (var i = 0; i < infowindows.length; i++) {
276
277                infowindows[i].setMap(null);
278
279            }
280
281            infowindows = [];
282
283        }
284
285
286
287        if (valid) {
288
289
290
291            //ga('send', 'event', "Product Locator", category, "Search");
292
293            
294
295            gtag('event', 'Product Locator Search', {'event_category': category,  'event_label': 'Product Locator'});
296
297
298
299            // gtag('event', 'conversion', {
300
301            //     'send_to': 'AW-881544575/TKQJCM3v8rIBEP-araQD'
302
303            // });
304
305
306
307
308
309            $('.loader').css('display','flex');
310
311            $('.info-text').hide();
312
313            $.ajax({
314
315              type: 'POST',
316
317              url: 'includes/vip-api.php',
318
319              data: {
320
321                format: 'json',
322
323                brand: brand,
324
325                brand_ext: category,
326
327                zip: zip,
328
329                store: storeType
330
331              },
332
333              //dataType: 'jsonp',
334
335              success: function(data) {
336
337                /*
338
339            	  var script = document.createElement("script"); //Make a script DOM node
340
341            	  script.src = '//pixel.mathtag.com/event/js?mt_id=1481557&mt_adid=225610&mt_exem=&mt_excl=&v1=&v2=&v3=&s1=&s2=&s3='; //Set it's src to the provided URL
342
343            	  document.head.appendChild(script); //Add it to the end of the head section of the page (could change 'head' to 'body' to add it to the end of the body section instead)
344
345                */
346
347            	  
348
349                $('.loader, .product-search-form').css('display','none');
350
351                $('.order-now').show();
352
353                var data = jQuery.parseXML( data);
354
355                var data2 = $(data);
356
357                
358
359                var locations, totalResult;
360
361                if(data2.find('locations').length > 0){
362
363                    locations = data.getElementsByTagName('locations')[0];
364
365                }
366
367                
368
369                if(data2.find('total').length > 0){
370
371                    totalResult = data.getElementsByTagName('total')[0].textContent;
372
373                }
374
375
376
377                if(category == "Evan Williams Single Barrel"){
378
379                    $('.info-text').show();
380
381                }
382
383
384
385                //console.log(locations);
386
387                if(typeof locations === "undefined" || totalResult == 0){
388
389                    $('.results,.locator-intro,.results-section_top h2').hide();
390
391                    $('.no-results-found,.showing-results,.refine-search').show();
392
393                    $('.result-bottom_nav').css('display', 'none');
394
395
396
397                    $('.results .inner-results').html('').mCustomScrollbar("update");
398
399                }else{
400
401                    $('.no-results-found').hide();
402
403                    $('.results,.results-section_top h2,.refine-search').show();
404
405                    $('.result-bottom_nav').css('display', 'flex');
406
407
408
409                    var result = '';
410
411                    for(var i = 0; i < (data2.find('locations').find('location')).length; i++){
412
413                 
414
415                        locationArr.push(locations.getElementsByTagName('location')[i]);
416
417                    }
418
419
420
421                    function mapResultShow(data, previousValue,i,initval){
422
423                        var data = xmlToJson(data);
424
425                        var lat = data.lat['#text'];
426
427                        var long = data.long['#text'];
428
429                        info = "<h2>"+ titleCase(data.dba['#text']) +"</h2>" + "<p>" + titleCase(data.street['#text']) + " " + titleCase(data.city['#text']) + ",</p>" + '<p>'+ titleCase(data.state['#text']) + " " + titleCase(data.zip['#text']) +'<a class="telephone" href="tel:'+ data.phoneFormatted['#text'] +'"> '+data.phoneFormatted['#text']+'</a> <a target="_blank"  class="direction-link" href="https://www.google.com/maps/dir/?api=1&destination='+lat+','+long
429+'&travelmode=driving">Get Directions</a></p>';
430
431
432
433                        info1 = "<h2>"+ titleCase(data.dba['#text']) +"</h2>" + "<p>" + titleCase(data.street['#text']) + " " + titleCase(data.city['#text']) + ", "+ titleCase(data.state['#text']) + " " + titleCase(data.zip['#text']) +"</p>" + '<p><a class="telephone" href="tel:'+ data.phoneFormatted['#text'] +'">'+data.phoneFormatted['#text']+'</a> <a target="_blank"  class="direction-link" href="https://www.google.com/maps/dir/?api=1&destination='+lat+','+long+'&travelmode=driving">Get Directions</a></p>';
434
435                        
436
437                        result += '<div class="media" id="m'+(previousValue + i)+'" data-markerid="'+(initval + i)+'">';
438
439                        result += '<div class="media-left"><span>';
440
441                        result += "<i>"+((previousValue + i)+1)+"</i>";         
442
443                        result += "</span></div><div class='media-body result-details'>";  
444
445                        result += info1; 
446
447                        result += '</div><div class="media-right"><a target="_blank" href="https://www.google.com/maps/dir/?api=1&destination='+lat+','+long+'&travelmode=driving">&#62;</a></div></div>';                       
448
449                                                                        
450
451                        var position = new google.maps.LatLng(lat,long);
452
453                        bounds.extend(position);
454
455                        var slNo = ((previousValue + i)+1).toString();
456
457                        var marker = new google.maps.Marker({
458
459                            position: position,
460
461                            icon: normalIcon,
462
463                            animation: google.maps.Animation.DROP,
464
465                            map: map,
466
467                            label: {
468
469                                text: slNo,
470
471                                color: "#000",
472
473                                fontSize: "14px"
474
475                              }
476
477                        });
478
479
480
481                        //attachInfo(marker, info);
482
483                        var infowindow = new google.maps.InfoWindow({
484
485                          content: info1
486
487                        });
488
489
490
491                        infowindows.push(infowindow);
492
493
494
495                        singleMarker = info + ', ' + lat + ', ' + long + ', ' + 1 + ',' + "images/map-marker.png?v=4";
496
497
498
499                        google.maps.event.addListener(marker, 'click', (function (marker, i) {
500
501                            return function () {
502
503                                for(j = 0; j < infowindows.length; j++){
504
505                                    infowindows[j].close();
506
507                                }
508
509
510
511                                for(k = 0; k < markers.length; k++){
512
513                                    markers[k].setIcon(normalIcon);
514
515                                }
516
517
518
519                                this.setIcon(activeIcon);
520
521
522
523                                infowindows[i].open(map, marker);
524
525
526
527                                var section = $('.media#m'+(previousValue + i));
528
529                                $('.results .media').removeClass('active');
530
531                                section.addClass('active');
532
533                                
534
535                                //$('.results').mCustomScrollbar("scrollTo", section.position().top);
536
537                                //$('.results').mCustomScrollbar("scrollTo", $('#m4')); //MH has hide it for scrolling functionality
538
539                                
540
541                                if(DEVICE_TYPE != "phone") {
542
543                                    $('.result-scroll').mCustomScrollbar('scrollTo','#m'+(previousValue + i));
544
545                                } else {
546
547                                    var totalspace = $('.site-header').height() + $('.locator-control').height() + $('.locator-map').height() + 50;
548
549                                    $('html,body').animate({
550
551                                        scrollTop: $("#m"+(previousValue + i)).offset().top - totalspace
552
553                                    });
554
555                                }
556
557
558
559                                //map.setCenter(bounds.getCenter());  
560
561                                //map.fitBounds(bounds);
562
563                                //map.panToBounds(bounds);
564
565                                map.setZoom(15);
566
567                                map.setCenter(marker.getPosition());
568
569                                
570
571                            }
572
573                        })(marker, i)); 
574
575
576
577                        marker.addListener('mouseover', function() {
578
579                            //infowindow.open(map, this);
580
581                        });
582
583
584
585                        // assuming you also want to hide the infowindow when user mouses-out
586
587                        marker.addListener('mouseout', function() {
588
589                            //infowindow.close();
590
591                        });
592
593
594
595                        markers.push(marker);
596
597                    }
598
599
600
601
602
603                    function isInfoWindowOpen(infowindow){
604
605                        var map = infowindow.getMap();
606
607                        return (map !== null && typeof map !== "undefined");
608
609                    }
610
611
612
613
614
615
616
617                    var paginateData = Paginator(locationArr);
618
619                    
620
621                    function paginationLinkUpdate(paginateData){
622
623                        if(paginateData.total_pages < 2){
624
625                            $('.prev-btn, .next-btn').addClass('hidden-initial');
626
627                        }else{
628
629                            $('.prev-btn, .next-btn').removeClass('hidden-initial');
630
631                        }
632
633                        if(paginateData.pre_page == '' || paginateData.pre_page == null){
634
635                            $('.prev-btn').addClass('isDisabled');
636
637                        }else{
638
639                            $('.prev-btn').removeClass('isDisabled');
640
641                        }
642
643
644
645
646
647                        if(paginateData.next_page == '' || paginateData.next_page == null){
648
649                            $('.next-btn').addClass('isDisabled');
650
651                        }else{
652
653                            $('.next-btn').removeClass('isDisabled');
654
655                        }
656
657
658
659                        $('.results-section_top h2').html('Showing '+ (((paginateData.page - 1) * 10) + 1) + '-' + (((paginateData.page - 1) * 10) + paginateData.data.length) + ' of ' + paginateData.total);
660
661
662
663                        //.pagination-block
664
665                        $('.result-bottom_nav h2').html('Page '+ paginateData.page + ' of ' + paginateData.total_pages);
666
667                    }
668
669
670
671                    var paginationPage = {
672
673                        prev: paginateData.pre_page,
674
675                        next: paginateData.next_page
676
677                    };
678
679
680
681                    //var nextPage = paginateData.page;
682
683                    
684
685                    for(i = 0; i < paginateData.data.length; i++){
686
687                        mapResultShow(paginateData.data[i], (paginateData.page - 1) * 10,i,(paginateData.page - 1) * 10);
688
689                    }
690
691                    paginationLinkUpdate(paginateData);
692
693
694
695                    $('.next-btn').off().on('click',function(e){
696
697                        e.preventDefault();
698
699
700
701                        //ga('send', 'event', "Product Locator", "Next Button", "Search Results");
702
703                        gtag('event', 'Product Locator Search Results', {'event_category': 'Next Button',  'event_label': 'Product Locator'});
704
705
706
707                        if(markers != ''){    
708
709                            for (var i = 0; i < markers.length; i++) {
710
711                                markers[i].setMap(null);
712
713                            }
714
715                            markers = [];
716
717                        }
718
719                        if(infowindows != ''){    
720
721                            for (var i = 0; i < infowindows.length; i++) {
722
723                                infowindows[i].setMap(null);
724
725                            }
726
727                            infowindows = [];
728
729                        }
730
731                        paginateData = Paginator(locationArr, paginationPage.next);
732
733                        paginationPage.next = paginateData.next_page;
734
735                        paginationPage.prev = paginateData.pre_page;
736
737
738
739                        result = '';
740
741                        for(i = 0; i < paginateData.data.length; i++){
742
743
744
745                            mapResultShow(paginateData.data[i], (paginateData.page - 1) * 10,i,0);
746
747                        }
748
749                        var scrollTopPos = ((paginateData.page - 1) * 10);
750
751                        paginationLinkUpdate(paginateData);
752
753
754
755
756
757                        //map.setCenter(bounds.getCenter());  
758
759                        //map.fitBounds(bounds);
760
761                        //map.panToBounds(bounds);
762
763                        map.setZoom(15);
764
765                        //google.maps.event.trigger(markers[0], 'click');
766
767                        //
768
769                        map.setCenter(markers[0].getPosition());
770
771
772
773                        $('.results .inner-results').html(result).mCustomScrollbar("update");
774
775                        nextPrevScrollTop(scrollTopPos);
776
777                        $('.locator-control,.locator').addClass('filter-complete_js');
778
779                        
780
781                    });
782
783
784
785                    $('.prev-btn').off().on('click',function(e){
786
787                        e.preventDefault();
788
789
790
791                        //ga('send', 'event', "Product Locator", "Previous Button", "Search Results");
792
793                        gtag('event', 'Product Locator Search Results', {'event_category': 'Previous Button',  'event_label': 'Product Locator'});
794
795
796
797                        if(markers != ''){    
798
799                            for (var i = 0; i < markers.length; i++) {
800
801                                markers[i].setMap(null);
802
803                            }
804
805                            markers = [];
806
807                        }
808
809                        if(infowindows != ''){    
810
811                            for (var i = 0; i < infowindows.length; i++) {
812
813                                infowindows[i].setMap(null);
814
815                            }
816
817                            infowindows = [];
818
819                        }
820
821                        paginateData = Paginator(locationArr, paginationPage.prev);
822
823                        paginationPage.next = paginateData.next_page;
824
825                        paginationPage.prev = paginateData.pre_page;
826
827
828
829                        result = '';
830
831                        for(i = 0; i < paginateData.data.length; i++){
832
833
834
835                            mapResultShow(paginateData.data[i], (paginateData.page - 1) * 10,i,0);
836
837                        }
838
839                        paginationLinkUpdate(paginateData);
840
841
842
843                        var scrollTopPos = ((paginateData.page - 1) * 10);
844
845
846
847                        //map.setCenter(bounds.getCenter());  
848
849                        //map.fitBounds(bounds);
850
851                        //map.panToBounds(bounds);
852
853                        map.setZoom(15);
854
855                        //google.maps.event.trigger(markers[0], 'click');
856
857                        //
858
859                        map.setCenter(markers[0].getPosition());
860
861
862
863                        $('.results .inner-results').html(result).mCustomScrollbar("update");
864
865                        nextPrevScrollTop(scrollTopPos);
866
867                        $('.locator-control,.locator').addClass('filter-complete_js');
868
869                    });
870
871
872
873                    
874
875                    //map.setCenter(bounds.getCenter());  
876
877                    //map.fitBounds(bounds);
878
879                    //map.panToBounds(bounds);
880
881                    map.setZoom(15);
882
883                    //google.maps.event.trigger(markers[0], 'click');
884
885                    //
886
887                    map.setCenter(markers[0].getPosition());
888
889                   
890
891                    $('.locator-intro').hide();
892
893                    $('.showing-results, .result-nav').show();
894
895                    $('.results .inner-results').html(result).mCustomScrollbar("update");
896
897                    $('.locator-control,.locator').addClass('filter-complete_js');  
898
899                    if( isInitialized != 'true') {
900
901                        $('.locator-control').addClass('initialized');
902
903                        isInitialized == 'true';
904
905                    }
906
907
908
909                    console.log(orderUrl);
910
911                    if(orderUrl == ""){
912
913                        $('.locator-map .order-now-block').hide();
914
915                        //$('.locator').removeClass('filter-complete_js'); 
916
917                        $('.locator-map').addClass('no-order-link'); 
918
919                    }else{
920
921                        $('.order-btn').attr('href', 'https://drizly.com/liquor/'+orderUrl);
922
923                        $('.locator-map').removeClass('no-order-link'); 
924
925                        $('.locator-map .order-now-block').show();
926
927                    }
928
929                    
930
931                    setTimeout(function(){ 
932
933                        $('html,body').animate({
934
935                            //scrollTop: $("#m0").offset().top - ($('.site-header').height() + $('.locator-control').height() + $('.locator-map').height() + 50)
936
937                        }); 
938
939                        //console.log('called');
940
941                    }, 500);    
942
943                }    
944
945              }                   
946
947            });
948
949            
950
951
952
953            $('.results').off().on('click', '.media', function () {
954
955
956
957                _xm.pushString('Product Locator|Directions Click|Search Results');
958
959
960
961                google.maps.event.trigger(markers[$(this).data('markerid')], 'click');
962
963                $('.results .media').removeClass('active');
964
965                $(this).addClass('active');
966
967
968
969               
970
971            });
972
973
974
975        }
976
977
978
979    });
980
981
982
983    //function for store type click
984
985    $('.store-type-btn').on('click', function(e){
986
987        e.preventDefault();
988
989        $('.store-type-btn').removeClass('active');
990
991        $(this).addClass('active');
992
993        //var brand = $('[name=product]').val();
994
995        var brand = 'Black Velvet';
996
997        var category = $('[name=product]').val();
998
999        var zip = $('[name=zip]').val();
1000
1001        var storeType = $(this).attr('data-store-type');
1002
1003        var locationArr = [];
1004
1005        
1006
1007        if(markers != ''){    
1008
1009            for (var i = 0; i < markers.length; i++) {
1010
1011                markers[i].setMap(null);
1012
1013            }
1014
1015            markers = [];
1016
1017        }
1018
1019
1020
1021        if(infowindows != ''){    
1022
1023            for (var i = 0; i < infowindows.length; i++) {
1024
1025                infowindows[i].setMap(null);
1026
1027            }
1028
1029            infowindows = [];
1030
1031        }
1032
1033
1034
1035        _xm.pushString('Product Locator|Store Type Changed');
1036
1037
1038
1039        $('.loader').css('display','flex');
1040
1041        $.ajax({
1042
1043          type: 'POST',
1044
1045          url: '/includes/vip-api.php',
1046
1047          data: {
1048
1049            format: 'json',
1050
1051            brand: brand,
1052
1053            brand_ext: category,
1054
1055            zip: zip,
1056
1057            store: storeType
1058
1059          },
1060
1061          //dataType: 'jsonp',
1062
1063          success: function(data) {
1064
1065        	  
1066
1067        	/*
1068
1069        	  var script = document.createElement("script"); //Make a script DOM node
1070
1071        	  script.src = '//pixel.mathtag.com/event/js?mt_id=1481557&mt_adid=225610&mt_exem=&mt_excl=&v1=&v2=&v3=&s1=&s2=&s3='; //Set it's src to the provided URL
1072
1073        	  document.head.appendChild(script); //Add it to the end of the head section of the page (could change 'head' to 'body' to add it to the end of the body section instead)
1074
1075            */
1076
1077        	    
1078
1079        	    
1080
1081            $('.loader').css('display','none');
1082
1083            $('.order-now').show();
1084
1085            var data = jQuery.parseXML( data);
1086
1087            var data2 = $(data);
1088
1089            
1090
1091            var locations, totalResult;
1092
1093            if(data2.find('locations').length > 0){
1094
1095                locations = data.getElementsByTagName('locations')[0];
1096
1097            }
1098
1099            
1100
1101            if(data2.find('total').length > 0){
1102
1103                totalResult = data.getElementsByTagName('total')[0].textContent;
1104
1105            }
1106
1107
1108
1109            var result = '';
1110
1111            if(typ
1111eof locations === "undefined" || totalResult == 0){
1112
1113                $('.results,.locator-intro,.results-section_top h2').hide();
1114
1115                $('.no-results-found,.showing-results,.refine-search').show();
1116
1117                $('.result-bottom_nav').css('display', 'none');
1118
1119
1120
1121                $('.results .inner-results').html('').mCustomScrollbar("update");
1122
1123            }else{
1124
1125                $('.no-results-found').hide();
1126
1127                $('.results,.results-section_top h2,.refine-search').show();
1128
1129                $('.result-bottom_nav').css('display', 'flex');
1130
1131
1132
1133
1134
1135                var result = '';
1136
1137                for(var i = 0; i < (data2.find('locations').find('location')).length; i++){
1138
1139             
1140
1141                    locationArr.push(locations.getElementsByTagName('location')[i]);
1142
1143                }
1144
1145
1146
1147                function mapResultShow(data, previousValue,i,initval){
1148
1149                    var data = xmlToJson(data);
1150
1151                    var lat = data.lat['#text'];
1152
1153                    var long = data.long['#text'];
1154
1155                    info = "<h2>"+ titleCase(data.dba['#text']) +"</h2>" + "<p>" + titleCase(data.street['#text']) + " " + titleCase(data.city['#text']) + ",</p>" + '<p>'+ titleCase(data.state['#text']) + " " + titleCase(data.zip['#text']) +'<a class="telephone" href="tel:'+ data.phoneFormatted['#text'] +'"> '+data.phoneFormatted['#text']+'</a> <a target="_blank"  class="direction-link" href="https://www.google.com/maps/dir/?api=1&destination='+lat+','+long+'&travelmode=driving">Get Directions</a></p>';
1156
1157
1158
1159                    info1 = "<h2>"+ titleCase(data.dba['#text']) +"</h2>" + "<p>" + titleCase(data.street['#text']) + " " + titleCase(data.city['#text']) + ", "+ titleCase(data.state['#text']) + " " + titleCase(data.zip['#text']) +"</p>" + '<p><a class="telephone" href="tel:'+ data.phoneFormatted['#text'] +'">'+data.phoneFormatted['#text']+'</a> <a target="_blank"  class="direction-link" href="https://www.google.com/maps/dir/?api=1&destination='+lat+','+long+'&travelmode=driving">Get Directions</a></p>';
1160
1161                    
1162
1163
1164
1165                    result += '<div class="media" id="m'+(previousValue + i)+'" data-markerid="'+(initval + i)+'">';
1166
1167                    result += '<div class="media-left"><span>';
1168
1169                    result += "<i>"+((previousValue + i)+1)+"</i>";         
1170
1171                    result += "</span></div><div class='media-body result-details'>";  
1172
1173                    result += info1; 
1174
1175                    result += '</div><div class="media-right"><a target="_blank" href="https://www.google.com/maps/dir/?api=1&destination='+lat+','+long+'&travelmode=driving">&#62;</a></div></div>';                       
1176
1177                                                                    
1178
1179                    var position = new google.maps.LatLng(lat,long);
1180
1181                    bounds.extend(position);
1182
1183                    var slNo = ((previousValue + i)+1).toString();
1184
1185                    var marker = new google.maps.Marker({
1186
1187                        position: position,
1188
1189                        icon: normalIcon,
1190
1191                        animation: google.maps.Animation.DROP,
1192
1193                        map: map,
1194
1195                        label: {
1196
1197                            text: slNo,
1198
1199                            color: "#000",
1200
1201                            fontSize: "14px"
1202
1203                          }
1204
1205                    });
1206
1207
1208
1209                    //attachInfo(marker, info);
1210
1211                    var infowindow = new google.maps.InfoWindow({
1212
1213                      content: info1
1214
1215                    });
1216
1217
1218
1219                    infowindows.push(infowindow);                           
1220
1221
1222
1223                    singleMarker = info + ', ' + lat + ', ' + long + ', ' + 1 + ',' + "images/map-marker.png?v=4";
1224
1225
1226
1227                    google.maps.event.addListener(marker, 'click', (function (marker, i) {
1228
1229                        return function () {
1230
1231                            //infowindow.setContent(info);
1232
1233
1234
1235                            for(j = 0; j < infowindows.length; j++){
1236
1237                                infowindows[j].close();
1238
1239                            }
1240
1241
1242
1243                            for(k = 0; k < markers.length; k++){
1244
1245                                markers[k].setIcon(normalIcon);
1246
1247                            }
1248
1249
1250
1251                            this.setIcon(activeIcon);
1252
1253
1254
1255                            infowindows[i].open(map, marker);
1256
1257
1258
1259                            var section = $('.media#m'+(previousValue + i));
1260
1261                            $('.results .media').removeClass('active');
1262
1263                            section.addClass('active');
1264
1265                            
1266
1267                            //$('.results').mCustomScrollbar("scrollTo", section.position().top);
1268
1269                            //$('.results').mCustomScrollbar("scrollTo", $('#m4')); //MH has hide it for scrolling functionality
1270
1271                            
1272
1273                            if(DEVICE_TYPE != "phone") {
1274
1275                                $('.result-scroll').mCustomScrollbar('scrollTo','#m'+(previousValue + i));
1276
1277                            } else {
1278
1279                                var totalspace = $('.site-header').height() + $('.locator-control').height() + $('.locator-map').height() + 50;
1280
1281                                $('html,body').animate({
1282
1283                                    scrollTop: $("#m"+(previousValue + i)).offset().top - totalspace
1284
1285                                });
1286
1287                            }
1288
1289                            
1290
1291                        }
1292
1293                    })(marker, i)); 
1294
1295
1296
1297                    marker.addListener('mouseover', function() {
1298
1299                        //infowindow.open(map, this);
1300
1301                    });
1302
1303
1304
1305                    // assuming you also want to hide the infowindow when user mouses-out
1306
1307                    marker.addListener('mouseout', function() {
1308
1309                        //infowindow.close();
1310
1311                    });
1312
1313
1314
1315                    markers.push(marker);
1316
1317                }
1318
1319
1320
1321              
1322
1323                var paginateData = Paginator(locationArr);
1324
1325                
1326
1327                function paginationLinkUpdate(paginateData){
1328
1329                    if(paginateData.pre_page == '' || paginateData.pre_page == null){
1330
1331                        $('.prev-btn').addClass('isDisabled');
1332
1333                    }else{
1334
1335                        $('.prev-btn').removeClass('isDisabled');
1336
1337                    }
1338
1339
1340
1341                    if(paginateData.next_page == '' || paginateData.next_page == null){
1342
1343                        $('.next-btn').addClass('isDisabled');
1344
1345                    }else{
1346
1347                        $('.next-btn').removeClass('isDisabled');
1348
1349                    }
1350
1351
1352
1353                    $('.results-section_top h2').html('Showing '+ (((paginateData.page - 1) * 10) + 1) + '-' + (((paginateData.page - 1) * 10) + paginateData.data.length) + ' of ' + paginateData.total);
1354
1355
1356
1357                    //.pagination-block
1358
1359                    $('.result-bottom_nav h2').html('Page '+ paginateData.page + ' of ' + paginateData.total_pages);
1360
1361                }
1362
1363
1364
1365                var paginationPage = {
1366
1367                    prev: paginateData.pre_page,
1368
1369                    next: paginateData.next_page
1370
1371                };
1372
1373
1374
1375                //var nextPage = paginateData.page;
1376
1377                
1378
1379                for(i = 0; i < paginateData.data.length; i++){
1380
1381                    mapResultShow(paginateData.data[i], (paginateData.page - 1) * 10,i,(paginateData.page - 1) * 10);
1382
1383                }
1384
1385                paginationLinkUpdate(paginateData);
1386
1387
1388
1389                $('.next-btn').off().on('click',function(e){
1390
1391                    e.preventDefault();
1392
1393
1394
1395                    _xm.pushString('Product Locator|Next Button|Search Results');
1396
1397
1398
1399                    if(markers != ''){    
1400
1401                        for (var i = 0; i < markers.length; i++) {
1402
1403                            markers[i].setMap(null);
1404
1405                        }
1406
1407                        markers = [];
1408
1409                    }
1410
1411                    if(infowindows != ''){    
1412
1413                        for (var i = 0; i < infowindows.length; i++) {
1414
1415                            infowindows[i].setMap(null);
1416
1417                        }
1418
1419                        infowindows = [];
1420
1421                    }
1422
1423                    paginateData = Paginator(locationArr, paginationPage.next);
1424
1425                    paginationPage.next = paginateData.next_page;
1426
1427                    paginationPage.prev = paginateData.pre_page;
1428
1429
1430
1431                    result = '';
1432
1433                    for(i = 0; i < paginateData.data.length; i++){
1434
1435
1436
1437                        mapResultShow(paginateData.data[i], (paginateData.page - 1) * 10,i,0);
1438
1439                    }
1440
1441                    var scrollTopPos = ((paginateData.page - 1) * 10) + 1;
1442
1443                    nextPrevScrollTop(scrollTopPos);
1444
1445                    paginationLinkUpdate(paginateData);
1446
1447
1448
1449
1450
1451                    map.setCenter(bounds.getCenter());  
1452
1453                    map.fitBounds(bounds);
1454
1455                    map.panToBounds(bounds);
1456
1457                    map.setZoom(15);
1458
1459                    //google.maps.event.trigger(markers[0], 'click');
1460
1461                    //
1462
1463                    map.setCenter(markers[0].getPosition());
1464
1465
1466
1467                    $('.results .inner-results').html(result).mCustomScrollbar("update");
1468
1469                    $('.locator-control,.locator').addClass('filter-complete_js');
1470
1471                    
1472
1473                });
1474
1475
1476
1477                $('.prev-btn').off().on('click',function(e){
1478
1479                    e.preventDefault();
1480
1481
1482
1483                    _xm.pushString('Product Locator|Previous Button|Search Results');
1484
1485
1486
1487                    if(markers != ''){    
1488
1489                        for (var i = 0; i < markers.length; i++) {
1490
1491                            markers[i].setMap(null);
1492
1493                        }
1494
1495                        markers = [];
1496
1497                    }
1498
1499                    if(infowindows != ''){    
1500
1501                        for (var i = 0; i < infowindows.length; i++) {
1502
1503                            infowindows[i].setMap(null);
1504
1505                        }
1506
1507                        infowindows = [];
1508
1509                    }
1510
1511                    paginateData = Paginator(locationArr, paginationPage.prev);
1512
1513                    paginationPage.next = paginateData.next_page;
1514
1515                    paginationPage.prev = paginateData.pre_page;
1516
1517
1518
1519                    result = '';
1520
1521                    for(i = 0; i < paginateData.data.length; i++){
1522
1523
1524
1525                        mapResultShow(paginateData.data[i], (paginateData.page - 1) * 10,i,0);
1526
1527                    }
1528
1529                    paginationLinkUpdate(paginateData);
1530
1531
1532
1533                    var scrollTopPos = ((paginateData.page - 1) * 10) + 1;
1534
1535                    nextPrevScrollTop(scrollTopPos);
1536
1537
1538
1539                    map.setCenter(bounds.getCenter());  
1540
1541                    map.fitBounds(bounds);
1542
1543                    map.panToBounds(bounds);
1544
1545                    map.setZoom(15);
1546
1547                    //google.maps.event.trigger(markers[0], 'click');
1548
1549                    //
1550
1551                    map.setCenter(markers[0].getPosition());
1552
1553
1554
1555                    $('.results .inner-results').html(result).mCustomScrollbar("update");
1556
1557                    $('.locator-control,.locator').addClass('filter-complete_js');
1558
1559                });
1560
1561
1562
1563                
1564
1565                map.setCenter(bounds.getCenter());  
1566
1567                map.fitBounds(bounds);
1568
1569                map.panToBounds(bounds);
1570
1571                map.setZoom(15);
1572
1573                //google.maps.event.trigger(markers[0], 'click');
1574
1575                //
1576
1577                map.setCenter(markers[0].getPosition());
1578
1579               
1580
1581                $('.locator-intro').hide();
1582
1583                $('.showing-results, .result-nav').show();
1584
1585                $('.results .inner-results').html(result).mCustomScrollbar("update");
1586
1587                $('.locator-control,.locator').addClass('filter-complete_js');  
1588
1589                if( isInitialized != 'true') {
1590
1591                    $('.locator-control').addClass('initialized');
1592
1593                    isInitialized == 'true';
1594
1595                }
1596
1597                
1598
1599                setTimeout(function(){ 
1600
1601                    $('html,body').animate({
1602
1603                        scrollTop: $("#m0").offset().top - ($('.site-header').height() + $('.locator-control').height() + $('.locator-map').height() + 50)
1604
1605                    }); 
1606
1607                    //console.log('called');
1608
1609                }, 500);    
1610
1611            } 
1612
1613                                
1614
1615          }                   
1616
1617        });
1618
1619        
1620
1621        $('.results').off().on('click', '.media', function () {
1622
1623
1624
1625            _xm.pushString('Product Locator|Directions Click|Search Results');
1626
1627
1628
1629            google.maps.event.trigger(markers[$(this).data('markerid')], 'click');
1630
1631            $('.results .media').removeClass('active');
1632
1633            $(this).addClass('active');
1634
1635        });
1636
1637
1638
1639        /*$('.results').on('mouseenter', '.media',function(){
1640
1641            google.maps.event.trigger(markers[$(this).data('markerid')], 'click');
1642
1643            $('.results .media').removeClass('active');
1644
1645            $(this).addClass('active');
1646
1647        });*/
1648
1649
1650
1651    });
1652
1653    
1654
1655    function titleCase(str) {
1656
1657      return str.toLowerCase().split(' ').map(function(word) {
1658
1659        return (word.charAt(0).toUpperCase() + word.slice(1));
1660
1661      }).join(' ');
1662
1663    }
1664
1665
1666
1667    //pagination function
1668
1669    function Paginator(items, page, per_page) {
1670
1671      var page = page || 1,
1672
1673      per_page = per_page || 10,
1674
1675      offset = (page - 1) * per_page,
1676
1677     
1678
1679      paginatedItems = items.slice(offset).slice(0, per_page),
1680
1681      total_pages = Math.ceil(items.length / per_page);
1682
1683      return {
1684
1685      page: page,
1686
1687      per_page: per_page,
1688
1689      pre_page: page - 1 ? page - 1 : null,
1690
1691      next_page: (total_pages > page) ? page + 1 : null,
1692
1693      total: items.length,
1694
1695      total_pages: total_pages,
1696
1697      data: paginatedItems
1698
1699      };
1700
1701    }
1702
1703
1704
1705    function nextPrevScrollTop(pos){
1706
1707        if(DEVICE_TYPE != "phone") {
1708
1709            $('.result-scroll').mCustomScrollbar('scrollTo','#m' + pos);
1710
1711        } else {
1712
1713            var totalspace = $('.site-header').height() + $('.locator-control').height() + $('.locator-map').height() + 50;
1714
1715            $('html,body').animate({
1716
1717                scrollTop: $("#m" + pos).offset().top - totalspace
1718
1719            });
1720
1721        }
1722
1723    }
1724
1725}
1726
1727
1728
1729function xmlToJson(xml) {
1730
1731    
1732
1733    // Create the return object
1734
1735    var obj = {};
1736
1737
1738
1739    if (xml.nodeType == 1) { // element
1740
1741        // do attributes
1742
1743        if (xml.attributes.length > 0) {
1744
1745        obj["@attributes"] = {};
1746
1747            for (var j = 0; j < xml.attributes.length; j++) {
1748
1749                var attribute = xml.attributes.item(j);
1750
1751                obj["@attributes"][attribute.nodeName] = attribute.nodeValue;
1752
1753            }
1754
1755        }
1756
1757    } else if (xml.nodeType == 3) { // text
1758
1759        obj = xml.nodeValue;
1760
1761    }
1762
1763
1764
1765    // do children
1766
1767    if (xml.hasChildNodes()) {
1768
1769        for(var i = 0; i < xml.childNodes.length; i++) {
1770
1771            var item = xml.childNodes.item(i);
1772
1773            var nodeName = item.nodeName;
1774
1775            if (typeof(obj[nodeName]) == "undefined") {
1776
1777                obj[nodeName] = xmlToJson(item);
1778
1779            } else {
1780
1781                if (typeof(obj[nodeName].push) == "undefined") {
1782
1783                    var old = obj[nodeName];
1784
1785                    obj[nodeName] = [];
1786
1787                    obj[nodeName].push(old);
1788
1789                }
1790
1791                obj[nodeName].push(xmlToJson(item));
1792
1793            }
1794
1795        }
1796
1797    }
1798
1799    return obj;
1800
1801};

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.