@@ -377,38 +377,37 @@ $.fn.storeLocator = function(options) {
377377 if ( settings . dataType === 'json' || settings . dataType === 'jsonp' ) {
378378 //Process JSON
379379 $ . each ( data , function ( ) {
380- var name = this . locname ;
381- var lat = this . lat ;
382- var lng = this . lng ;
383- var address = this . address ;
384- var address2 = this . address2 ;
385- var city = this . city ;
386- var state = this . state ;
387- var postal = this . postal ;
388- var country = this . country ;
389- var phone = this . phone ;
390- var email = this . email ;
391- var web = this . web ;
392- if ( web ) web = web . replace ( "http://" , "" ) ;
393- var hours1 = this . hours1 ;
394- var hours2 = this . hours2 ;
395- var hours3 = this . hours3 ;
396- var category = this . category ;
397- var featured = this . featured ;
398-
399- var distance = GeoCodeCalc . CalcDistance ( orig_lat , orig_lng , lat , lng , GeoCodeCalc . EarthRadius ) ;
400-
380+ var key , value , locationData = { } ;
381+
382+ // Parse each data variables
383+ for ( key in this ) {
384+ value = this [ key ] ;
385+
386+ if ( key == 'locname' ) {
387+ key = 'name' ; // Translate locname to name (todo: should NOT be done)
388+ }
389+ else if ( key == 'web' ) {
390+ if ( value ) value = value . replace ( "http://" , "" ) ; // Remove scheme (todo: should NOT be done)
391+ }
392+
393+ locationData [ key ] = value ;
394+ }
395+
396+ if ( ! locationData [ 'distance' ] ) {
397+ locationData [ 'distance' ] = GeoCodeCalc . CalcDistance ( orig_lat , orig_lng , locationData [ 'lat' ] , locationData [ 'lng' ] , GeoCodeCalc . EarthRadius ) ;
398+ }
399+
401400 //Create the array
402401 if ( settings . maxDistance === true && firstRun !== true ) {
403- if ( distance < maxDistance ) {
404- locationset [ i ] = [ distance , name , lat , lng , address , address2 , city , state , postal , country , phone , email , web , hours1 , hours2 , hours3 , category , featured ] ;
402+ if ( locationData [ ' distance' ] < maxDistance ) {
403+ locationset [ i ] = locationData ;
405404 }
406405 else {
407406 return ;
408407 }
409408 }
410409 else {
411- locationset [ i ] = [ distance , name , lat , lng , address , address2 , city , state , postal , country , phone , email , web , hours1 , hours2 , hours3 , category , featured ] ;
410+ locationset [ i ] = locationData ;
412411 }
413412
414413 i ++ ;
@@ -417,24 +416,26 @@ $.fn.storeLocator = function(options) {
417416 else if ( settings . dataType === 'kml' ) {
418417 //Process KML
419418 $ ( data ) . find ( 'Placemark' ) . each ( function ( ) {
420- var name = $ ( this ) . find ( 'name' ) . text ( ) ;
421- var lat = $ ( this ) . find ( 'coordinates' ) . text ( ) . split ( "," ) [ 1 ] ;
422- var lng = $ ( this ) . find ( 'coordinates' ) . text ( ) . split ( "," ) [ 0 ] ;
423- var description = $ ( this ) . find ( 'description' ) . text ( ) ;
419+ var locationData = {
420+ 'name' : $ ( this ) . find ( 'name' ) . text ( ) ,
421+ 'lat' : $ ( this ) . find ( 'coordinates' ) . text ( ) . split ( "," ) [ 1 ] ,
422+ 'lng' : $ ( this ) . find ( 'coordinates' ) . text ( ) . split ( "," ) [ 0 ] ,
423+ 'description' : $ ( this ) . find ( 'description' ) . text ( )
424+ } ;
424425
425- var distance = GeoCodeCalc . CalcDistance ( orig_lat , orig_lng , lat , lng , GeoCodeCalc . EarthRadius ) ;
426+ locationData [ ' distance' ] = GeoCodeCalc . CalcDistance ( orig_lat , orig_lng , locationData [ ' lat' ] , locationData [ ' lng' ] , GeoCodeCalc . EarthRadius ) ;
426427
427428 //Create the array
428429 if ( settings . maxDistance === true && firstRun !== true ) {
429- if ( distance < maxDistance ) {
430- locationset [ i ] = [ distance , name , lat , lng , description ] ;
430+ if ( locationData [ ' distance' ] < maxDistance ) {
431+ locationset [ i ] = locationData ;
431432 }
432433 else {
433434 return ;
434435 }
435436 }
436437 else {
437- locationset [ i ] = [ distance , name , lat , lng , description ] ;
438+ locationset [ i ] = locationData ;
438439 }
439440
440441 i ++ ;
@@ -443,38 +444,41 @@ $.fn.storeLocator = function(options) {
443444 else {
444445 //Process XML
445446 $ ( data ) . find ( 'marker' ) . each ( function ( ) {
446- var name = $ ( this ) . attr ( 'name' ) ;
447- var lat = $ ( this ) . attr ( 'lat' ) ;
448- var lng = $ ( this ) . attr ( 'lng' ) ;
449- var address = $ ( this ) . attr ( 'address' ) ;
450- var address2 = $ ( this ) . attr ( 'address2' ) ;
451- var city = $ ( this ) . attr ( 'city' ) ;
452- var state = $ ( this ) . attr ( 'state' ) ;
453- var postal = $ ( this ) . attr ( 'postal' ) ;
454- var country = $ ( this ) . attr ( 'country' ) ;
455- var phone = $ ( this ) . attr ( 'phone' ) ;
456- var email = $ ( this ) . attr ( 'email' ) ;
457- var web = $ ( this ) . attr ( 'web' ) ;
458- if ( web ) web = web . replace ( "http://" , "" ) ;
459- var hours1 = $ ( this ) . attr ( 'hours1' ) ;
460- var hours2 = $ ( this ) . attr ( 'hours2' ) ;
461- var hours3 = $ ( this ) . attr ( 'hours3' ) ;
462- var category = $ ( this ) . attr ( 'category' ) ;
463- var featured = $ ( this ) . attr ( 'featured' ) ;
464-
465- var distance = GeoCodeCalc . CalcDistance ( orig_lat , orig_lng , lat , lng , GeoCodeCalc . EarthRadius ) ;
447+ var locationData = {
448+ 'name' : $ ( this ) . attr ( 'name' ) ,
449+ 'lat' : $ ( this ) . attr ( 'lat' ) ,
450+ 'lng' : $ ( this ) . attr ( 'lng' ) ,
451+ 'address' : $ ( this ) . attr ( 'address' ) ,
452+ 'address2' : $ ( this ) . attr ( 'address2' ) ,
453+ 'city' : $ ( this ) . attr ( 'city' ) ,
454+ 'state' : $ ( this ) . attr ( 'state' ) ,
455+ 'postal' : $ ( this ) . attr ( 'postal' ) ,
456+ 'country' : $ ( this ) . attr ( 'country' ) ,
457+ 'phone' : $ ( this ) . attr ( 'phone' ) ,
458+ 'email' : $ ( this ) . attr ( 'email' ) ,
459+ 'web' : $ ( this ) . attr ( 'web' ) ,
460+ 'hours1' : $ ( this ) . attr ( 'hours1' ) ,
461+ 'hours2' : $ ( this ) . attr ( 'hours2' ) ,
462+ 'hours3' : $ ( this ) . attr ( 'hours3' ) ,
463+ 'category' : $ ( this ) . attr ( 'category' ) ,
464+ 'featured' : $ ( this ) . attr ( 'featured' )
465+ } ;
466+
467+ if ( locationData [ 'web' ] ) locationData [ 'web' ] = locationData [ 'web' ] . replace ( "http://" , "" ) ; // Remove scheme (todo: should NOT be done)
468+
469+ locationData [ 'distance' ] = GeoCodeCalc . CalcDistance ( orig_lat , orig_lng , locationData [ 'lat' ] , locationData [ 'lng' ] , GeoCodeCalc . EarthRadius ) ;
466470
467471 //Create the array
468472 if ( settings . maxDistance === true && firstRun !== true ) {
469- if ( distance < maxDistance ) {
470- locationset [ i ] = [ distance , name , lat , lng , address , address2 , city , state , postal , country , phone , email , web , hours1 , hours2 , hours3 , category , featured ] ;
473+ if ( locationData [ ' distance' ] < maxDistance ) {
474+ locationset [ i ] = locationData ;
471475 }
472476 else {
473477 return ;
474478 }
475479 }
476480 else {
477- locationset [ i ] = [ distance , name , lat , lng , address , address2 , city , state , postal , country , phone , email , web , hours1 , hours2 , hours3 , category , featured ] ;
481+ locationset [ i ] = locationData ;
478482 }
479483
480484 i ++ ;
@@ -484,9 +488,7 @@ $.fn.storeLocator = function(options) {
484488 //Distance sorting function
485489 function sort_numerically ( locationsarray ) {
486490 locationsarray . sort ( function ( a , b ) {
487- var x = a [ 0 ] ;
488- var y = b [ 0 ] ;
489- return ( ( x < y ) ? - 1 : ( ( x > y ) ? 1 : 0 ) ) ;
491+ return ( ( a [ 'distance' ] < b [ 'distance' ] ) ? - 1 : ( ( a [ 'distance' ] > b [ 'distance' ] ) ? 1 : 0 ) ) ;
490492 } ) ;
491493 }
492494
@@ -497,12 +499,12 @@ $.fn.storeLocator = function(options) {
497499 if ( settings . featuredLocations === true ) {
498500 //Create array for featured locations
499501 featuredset = $ . grep ( locationset , function ( val , i ) {
500- return val [ 17 ] === "true" ;
502+ return val [ 'featured' ] === "true" ;
501503 } ) ;
502504
503505 //Create array for normal locations
504506 normalset = $ . grep ( locationset , function ( val , i ) {
505- return val [ 17 ] !== "true" ;
507+ return val [ 'featured' ] !== "true" ;
506508 } ) ;
507509
508510 //Combine the arrays
@@ -515,62 +517,41 @@ $.fn.storeLocator = function(options) {
515517
516518 //Check the closest marker
517519 if ( settings . maxDistance === true && firstRun !== true ) {
518- if ( locationset [ 0 ] === undefined || locationset [ 0 ] [ 0 ] > maxDistance ) {
520+ if ( locationset [ 0 ] === undefined || locationset [ 0 ] [ 'distance' ] > maxDistance ) {
519521 alert ( settings . distanceErrorAlert + maxDistance + " " + distUnit ) ;
520522 return ;
521523 }
522524 }
523525 else {
524- if ( settings . distanceAlert != - 1 && locationset [ 0 ] [ 0 ] > settings . distanceAlert ) {
526+ if ( settings . distanceAlert != - 1 && locationset [ 0 ] [ 'distance' ] > settings . distanceAlert ) {
525527 alert ( settings . distanceErrorAlert + settings . distanceAlert + " " + distUnit ) ;
526528 }
527529 }
528530
529531 //Create the map with jQuery
530532 $ ( function ( ) {
531533
532- var storeDistance , storeName , storeAddress1 , storeAddress2 , storeCity , storeState , storeCountry , storeZip , storePhone , storeEmail , storeWeb , storeHours1 , storeHours2 , storeHours3 , storeDescription , storeCat , storeFeatured ;
534+ var key , value , locationData = { } ;
533535
534536 //Instead of repeating the same thing twice below
535537 function create_location_variables ( loopcount ) {
536- storeDistance = locationset [ loopcount ] [ 0 ] ;
537- storeDistance = roundNumber ( storeDistance , 2 ) ;
538- storeName = locationset [ loopcount ] [ 1 ] ;
539- storeAddress1 = locationset [ loopcount ] [ 4 ] ;
540- storeAddress2 = locationset [ loopcount ] [ 5 ] ;
541- storeCity = locationset [ loopcount ] [ 6 ] ;
542- storeState = locationset [ loopcount ] [ 7 ] ;
543- storeZip = locationset [ loopcount ] [ 8 ] ;
544- storeCountry = locationset [ loopcount ] [ 9 ] ;
545- storePhone = locationset [ loopcount ] [ 10 ] ;
546- storeEmail = locationset [ loopcount ] [ 11 ]
547- storeWeb = locationset [ loopcount ] [ 12 ] ;
548- storeHours1 = locationset [ loopcount ] [ 13 ] ;
549- storeHours2 = locationset [ loopcount ] [ 14 ] ;
550- storeHours3 = locationset [ loopcount ] [ 15 ] ;
551- storeCat = locationset [ loopcount ] [ 16 ] ;
552- storeFeatured = locationset [ loopcount ] [ 17 ] ;
553- }
538+ for ( key in locationset [ loopcount ] ) {
539+ value = locationset [ loopcount ] [ key ] ;
540+
541+ if ( key == 'distance' ) {
542+ value = roundNumber ( value , 2 ) ;
543+ }
554544
555- //There are less variables for KML files
556- function create_kml_location_variables ( loopcount ) {
557- storeDistance = locationset [ loopcount ] [ 0 ] ;
558- storeDistance = roundNumber ( storeDistance , 2 ) ;
559- storeName = locationset [ loopcount ] [ 1 ] ;
560- storeDescription = locationset [ loopcount ] [ 4 ] ;
545+ locationData [ key ] = value ;
546+ }
561547 }
562548
563549 //Define the location data for the templates
564550 function define_location_data ( currentMarker ) {
565- if ( settings . dataType === 'kml' ) {
566- create_kml_location_variables ( currentMarker . get ( "id" ) ) ;
567- }
568- else {
569- create_location_variables ( currentMarker . get ( "id" ) ) ;
570- }
551+ create_location_variables ( currentMarker . get ( "id" ) ) ;
571552
572553 var distLength ;
573- if ( storeDistance <= 1 ) {
554+ if ( locationData [ 'distance' ] <= 1 ) {
574555 if ( settings . lengthUnit === "km" ) {
575556 distLength = settings . kilometerLang ;
576557 }
@@ -598,49 +579,14 @@ $.fn.storeLocator = function(options) {
598579 }
599580
600581 //Define location data
601- if ( settings . dataType === 'kml' ) {
602- var locations = {
603- location : [
604- {
605- "distance" : storeDistance ,
606- "markerid" : markerId ,
607- "marker" : indicator ,
608- "name" : storeName ,
609- "description" : storeDescription ,
610- "length" : distLength ,
611- "origin" : origin
612- }
613- ]
614- } ;
615- }
616- else {
617- var locations = {
618- location : [
619- {
620- "distance" : storeDistance ,
621- "markerid" : markerId ,
622- "marker" : indicator ,
623- "name" : storeName ,
624- "address" : storeAddress1 ,
625- "address2" : storeAddress2 ,
626- "city" : storeCity ,
627- "state" : storeState ,
628- "postal" : storeZip ,
629- "country" : storeCountry ,
630- "phone" : storePhone ,
631- "email" : storeEmail ,
632- "web" : storeWeb ,
633- "hours1" : storeHours1 ,
634- "hours2" : storeHours2 ,
635- "hours3" : storeHours3 ,
636- "length" : distLength ,
637- "origin" : origin ,
638- "category" : storeCat ,
639- "featured" : storeFeatured
640- }
641- ]
642- } ;
643- }
582+ var locations = {
583+ location : [ $ . extend ( locationData , {
584+ 'markerid' : markerId ,
585+ 'marker' : indicator ,
586+ 'length' : distLength ,
587+ 'origin' : origin
588+ } ) ]
589+ } ;
644590
645591 return locations ;
646592 }
@@ -699,6 +645,8 @@ $.fn.storeLocator = function(options) {
699645 }
700646
701647 var map = new google . maps . Map ( document . getElementById ( settings . mapDiv ) , myOptions ) ;
648+ $this . data ( 'map' , map ) ;
649+
702650 //Create one infowindow to fill later
703651 var infowindow = new google . maps . InfoWindow ( ) ;
704652
@@ -729,8 +677,8 @@ $.fn.storeLocator = function(options) {
729677 //Add markers and infowindows loop
730678 for ( var y = 0 ; y <= storenum ; y ++ ) {
731679 var letter = String . fromCharCode ( "A" . charCodeAt ( 0 ) + y ) ;
732- var point = new google . maps . LatLng ( locationset [ y ] [ 2 ] , locationset [ y ] [ 3 ] ) ;
733- marker = createMarker ( point , locationset [ y ] [ 1 ] , locationset [ y ] [ 4 ] , letter , locationset [ y ] [ 14 ] ) ;
680+ var point = new google . maps . LatLng ( locationset [ y ] [ 'lat' ] , locationset [ y ] [ 'lng' ] ) ;
681+ marker = createMarker ( point , locationset [ y ] [ 'name' ] , locationset [ y ] [ 'address' ] , letter ) ;
734682 marker . set ( "id" , y ) ;
735683 markers [ y ] = marker ;
736684 if ( ( settings . fullMapStart === true && firstRun === true ) || settings . zoomLevel === 0 ) {
@@ -789,7 +737,7 @@ $.fn.storeLocator = function(options) {
789737 $ ( "#" + settings . listDiv + " ul li:odd" ) . css ( 'background' , "#" + settings . listColor2 ) ;
790738
791739 //Custom marker function - alphabetical
792- function createMarker ( point , name , address , letter , type ) {
740+ function createMarker ( point , name , address , letter ) {
793741 //Set up pin icon with the Google Charts API for all of our markers
794742 var pinImage = new google . maps . MarkerImage ( "http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=" + letter + "|" + settings . pinColor + "|" + settings . pinTextColor ,
795743 new google . maps . Size ( 21 , 34 ) ,
0 commit comments