jQuery( document ).ready( function() {

  /* Variables */

  var isMobile = navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry)/);

 /*
  * Google Map Ajax
  * ----------------------- */


  $(".js-ajax-php-json").submit(function(){
    var data = {
      "action": "test"
    };
    data = $(this).serialize() + "&" + $.param(data);
    $.ajax({
      type: "POST",
      dataType: "json",
      url: "googlemaps/map_json.php",
      data: data,
      success: function(data) {
        $(".the-return").html(
          data
        );

      }
    });
    return false;
  });


/*
 * Google Map Display
 * ------------------------ */

  var markers = [];
  var newMarkers= [];
  var mapCategories = [];
  var markerJSON;
  var dofitbounds = true;
  var myMarkerClusterer = null;
  var storageKey = $('.map').data('name');
  var jsonURL = $('.map').data('json');
  var mapCenterLatLng = loadStorage( 'mapCenterLatLng' );
  var map = null;
  var color = '#00000';
  var maxzoom = 7;
  var size = 30;
  var month = [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ];
  var styles = [
    {
      "featureType": "poi.park",
      "elementType": "geometry",
      "stylers": [
        { "color": "#B4E484" }
      ]
    },{
      "featureType": "water",
      "stylers": [
        { "color": "#72DAFF" }
      ]
    },{
      "featureType": "road.local",
      "elementType": "geometry",
      "stylers": [
        { "visibility": "simplified" },
        { "color": "#ffffff" }
      ]
    },{
      "featureType": "transit"  },{
      "featureType": "road.highway",
      "elementType": "geometry",
      "stylers": [
        { "visibility": "simplified" },
        { "color": "#ffffff" }
      ]
    },{
      "featureType": "road.local",
      "stylers": [
        { "color": "#FFFFFF" },
        { "visibility": "simplified" }
      ]
    },{
      "elementType": "geometry"  },{
      "featureType": "landscape.man_made",
      "elementType": "geometry",
      "stylers": [
        { "color": "#F0EEE9" }
      ]
    },{
      "elementType": "labels.text.fill",
      "stylers": [
        { "saturation": -100 },
        { "gamma": 0.88 }
      ]
    }
  ];

    

  // Create a new StyledMapType object, passing it the array of styles,
  // as well as the name to be displayed on the map type control.

    var markerIcons = [];


   if ( $('.map').length > 0 ) {
     // Load the xml file using ajax

     runMapScripts();


   }

   function showLog( logs ) {
     if ( window.location.href.indexOf('dev') >= 0 || window.location.href.indexOf('localhost') >= 0 ) {
       console.log( logs );
     }
     return;
   }

   function runMapScripts() {
     var styledMap = new google.maps.StyledMapType(styles,
       {name: "Map"});

      if ( mapCenterLatLng === false || mapCenterLatLng === undefined || mapCenterLatLng.lat === null ) {
        mapCenterLatLng = new google.maps.LatLng(30.447275, -100.821923);
        saveStorage( 'mapCenterLatLng', mapCenterLatLng );
      }

      markerIcons = {
        'race': new google.maps.MarkerImage("/articles/static/css/images/sprite.svg",
           new google.maps.Size(35, 50),
           new google.maps.Point(0, 460)),
        'triclub': new google.maps.MarkerImage("/articles/static/css/images/sprite.svg",
            new google.maps.Size(35, 50),
            new google.maps.Point(38, 460)),
        'coach': new google.maps.MarkerImage("/articles/static/css/images/sprite.svg",
             new google.maps.Size(35, 50),
             new google.maps.Point(78, 460)),
        'runshop': new google.maps.MarkerImage("/articles/static/css/images/sprite.svg",
             new google.maps.Size(35, 50),
             new google.maps.Point(118, 460)),
        'retailer': new google.maps.MarkerImage("/articles/static/css/images/sprite.svg",
             new google.maps.Size(35, 50),
             new google.maps.Point(158, 460)),
        'fitter': new google.maps.MarkerImage("/articles/static/css/images/sprite.svg",
             new google.maps.Size(35, 50),
             new google.maps.Point(198, 460)),
        'roadshow': new google.maps.MarkerImage("/articles/static/css/images/sprite.svg",
             new google.maps.Size(35, 50),
             new google.maps.Point(0, 505)),
      };

      loadMap(); //generate blank google map

      loadMapData(); //refresh google map with marker(s) data

      mapOfEverything(); //setup map of everything

   }

   if ( $('.map-control .text-input').length > 0 ) {
     updateMapPerLocationInput();
   }

   //val = window.location.search.replace("?", "");
   function parseSecond(val) {
       var result = "Not found",
           tmp = [];
       var items = location.search.substr(1).split("&");
       for (var index = 0; index < items.length; index++) {
           tmp = items[index].split("=");
           if (tmp[0] === val) result = decodeURIComponent(tmp[1]);
       }
       return result;
   }


  function loadMapData() {

    var refreshStorage = false; //
    var lastmodified = loadStorage( 'lastModified' );
    var query = window.location.search.replace("?", "");
    var queryParsed = parseSecond( query );

    if ( storageKey == 'single' )
      refreshStorage = true;

    if ( lastmodified !== false ) {
        var now = Date.now();
        if ( now >= lastmodified + 300 * 1000 )
          refreshStorage = true; //5minutes

        showLog( 'reload json', refreshStorage );
    }

    if ( loadStorage( storageKey ) === false || refreshStorage ) {

      showLog( 'load storage ');
      fetchMakersAndInitialize( storageKey, jsonURL );


    } else {

      showLog( 'from storage');
      markerJSON = loadStorage( storageKey );
      refreshMap();
      //google.maps.event.addDomListener(window, 'load', initialize);
    }

  }

  function fetchJson( storageKey, jsonURL, refresh ) {

    var markerJSON;

    $.ajax({
        type: "GET",
        url: jsonURL,
        dataType: "json",
        success: function (json) {
          markerJSON = json;
          storeMarkerJson( storageKey, markerJSON );

          if ( refresh )
            refreshMap();
      }

    }).fail( function(){

      markerJSON = false;

    });


  }

  function isDataReady() {

    var ready = false;


    if ( storageKey == 'everything' ) {

      var storageKeys = jsonURL.split(',');
      var total = storageKeys.length - 1;

      for ( i = 1; i < storageKeys ; i++ ) {

        if ( loadStorage( storageKeys[i] ) !== false )
          counter++;

        if ( counter === total )
          ready = true;

        //showLog( counter, storageKeys[i] );
      }


    } else if ( storageKey == 'single' ) {

    } else {

      if ( loadStorage( storageKey ) )
        ready = true;

    }

    //showLog( counter, ready );
    return ready;

  }

  function fetchMakersAndInitialize( storageKey, jsonURL ) {

    var markerJSON;
    var refresh = false;

    if ( storageKey == 'single' ) {

      //showLog('loading single marker');
      refresh = true;
      markerJSON = [{
        "category": $('.map').data('category'),
        "name": $('.details h2').text(),
        "lat": $('.map').data('lat'),
        "lng": $('.map').data('lng'),
        "info1": $('.details .address').html() + $('.details .contact').html(),
        "info2":"",
        "info3":"",
        "info4":"",
        "phone":"",
        "email":"",
        "website":"",
        "details": $('.details .race-info').html(),
      }];

      saveStorage( storageKey, markerJSON );

      refreshMap();

    } else if ( storageKey !== 'everything' ) {
      refresh = true;
      markerJSON = fetchJson( storageKey, jsonURL, refresh );

    } else {

      var jsons = jsonURL.split(",");
      var jsonBase = jsons['0'];

      for ( i = 1; i < jsons.length; i++ ) {

        var thisURL = jsonBase + jsons[i] + '.json';

        if ( i == ( jsons.length - 1 ) )
          refresh = true;

        fetchJson( jsons[i], thisURL, refresh );

      }
    }
  }

  function storeMarkerJson( storageKey, markerJSON ) {
    if (markerJSON) {
      saveStorage( storageKey, markerJSON );
    }
  }



  function refreshMap() {

    //showLog('refresh map', storageKey );

    var markersData = [];

    var i = 1;
    if ( storageKey == 'everything' ) {
      var storageKeys = jsonURL.split(',');
      for ( i = 1; i < storageKeys.length; i ++ ) {
        markersData = markersData.concat( loadStorage( storageKeys[i] ) );
      }
    } else {
      markersData = loadStorage( storageKey );
    }

    var bounds = new google.maps.LatLngBounds();


    if ( markersData ) {
      for ( i = 0; i < markersData.length; ++i) {

        var category = markersData[i].category;

        if ( markersData[i] ) {
          var latLng = new google.maps.LatLng( markersData[i].lat, markersData[i].lng);
          var marker = new google.maps.Marker({
            position: latLng,
            draggable: false,
            icon: markerIcons[category],
            category: category,
          });

          var content = '<h4>' + markersData[i].name + '</h4>';

          if ( category == 'race') {

            if (markersData[i].details && storageKey == 'single') {
                content += markersData[i].details;
            }
            else {
                var raceDate = new Date( markersData[i].info1 );
                raceDate = month[ raceDate.getMonth() ] + ' ' + raceDate.getDay() + ', ' + raceDate.getFullYear();

                content = content + '<b>' + raceDate + '</b><br/>';

                if ( markersData[i].info2.length > 0 )
                  content = content + markersData[i].info2 + ' kilometers swim<br/>';

                if ( markersData[i].info3.length > 0 )
                  content = content + markersData[i].info3 + ' kilometers bike<br/>';

                if ( markersData[i].info4.length > 0 )
                  content = content + markersData[i].info4 + ' kilometers run<br/>';

                if ( markersData[i].phone.length > 0 )
                  content = content + 'Phone: ' + markersData[i].phone + '<br/>';
             }


          } else {

            content = content + '<b>' + markersData[i].info1 + '<br/>';

            if ( markersData[i].info2.length > 0 )
              content = content + markersData[i].info2 + '<br/>';

            if ( markersData[i].info3.length > 0 && markersData[i].info4.length > 0 )
              content = content + markersData[i].info3 + ', ' + markersData[i].info4 + '</b><br/>';

            if ( markersData[i].phone.length > 0 )
              content = content + 'Phone: ' + markersData[i].phone + '<br/>';

            if ( markersData[i].email.length > 0 )
              content = content + '<a href="mailto:' + markersData[i].email + '" title="email">' + markersData[i].email + '</a><br/>';

            if ( markersData[i].website.length > 0 )
              content = content + '<a href="' + markersData[i].website + '" title="website">' + markersData[i].website.replace('http://', '') + '</a>';

          }

          if ( storageKey !== 'single' ) {
            content = content +
            '<br/><br/>' +
            '<div class="center"><a href="' + markersData[i].details + '" class="btn" title="get details">Get Details</></div>';
          } else {
            content = content +
            '<br/>' +
            '<div class="center"><a href="https://maps.google.com?daddr=' + markersData[i].lat + ',' + markersData[i].lng+ '" class="btn" title="get details">Get Directions</></div>';
          }

          var infowindow =  new google.maps.InfoWindow({
            content: content
          });

          bindInfoWindow(marker, map, infowindow, unescape( content ) );

          markers.push(marker);

          bounds.extend(latLng);
          //mapCenterLatLng = latLng;
        }
      }

      newMarkers = markers;
    }



    //display clustered markers
    myMarkerClusterer = new MarkerClusterer(map, markers, {
      maxZoom: maxzoom,
      gridSize: size,
    });




    //When there is only one marker, set zoom to 13
    if ( map === null ) {

    //single / one location
    } else if ( markers.length === 1 ) {

        //map.setCenter( mapCenterLatLng );
        map.setZoom( 14 );

        mapCenterLatLng = map.getCenter();
        saveStorage( 'mapCenterLatLng' , mapCenterLatLng );
        infowindow.open(map, markers['0']);

    //show multiple locations
    } else if ( markers.length > 1 ) {

        //if ( dofitbounds )
        //  map.fitBounds(bounds);

        //mapCenterLatLng = map.getCenter();
        mapCenterLatLng = loadStorage( mapCenterLatLng );

        //set a default center if .lat is not a number
        if ( !isNaN( mapCenterLatLng.lat ) )
            mapCenterLatLng = new google.maps.LatLng( mapCenterLatLng.lat, mapCenterLatLng.lng );
        else
            mapCenterLatLng = new google.maps.LatLng(38.447275, -88.821923);

        //console.log( mapCenterLatLng );

        map.setCenter ( mapCenterLatLng );
        map.setZoom( 3 );
        //showLog( 'save ', mapCenterLatLng );
        //saveStorage( 'mapCenterLatLng' , mapCenterLatLng );

        dofitbounds = false;
    //no markers
    } else {
        //do nothing
    }


    saveMapCenter( map );

  }


  function saveMapCenter( map ) {

    map.addListener('center_changed', function() {
      // 3 seconds after the center of the map has changed, pan back to the
      // marker.
      saveStorage( 'mapCenterLatLng', map.getCenter() );
    });

  }



  function checkMapCategories() {

    if ( $('.map-category input').length > 0 ) {
      $('.map-category input').change(function(){

        mapCategories = [];

        $('.map-category input').each( function(){

          if ( $(this).prop('checked') )
            mapCategories.push( $(this).val() );

        });

        filterMarkers( mapCategories );

      });

    }

    toogleMapCategories();

  }

  function toogleMapCategories() {

    $('.map-category .hide-button').click( function() {

      if ( $(this).siblings().hasClass('collapsed') ) {
        $('.collapsed').slideDown('200').removeClass('collapsed');
        $(this).text( $(this).text().replace('Show', 'Hide').replace( '9660', '9650' ) );
      }
      else {
        $(this).siblings().slideUp('200').addClass('collapsed');
        $(this).text( $(this).text().replace('Hide', 'Show').replace( '9650', '9660' ) );
      }

    });

  }

  function filterMarkers( mapCategories ) {
      newMarkers = [];
      clearClusters();

      if ( mapCategories.length > 0 ) {
        for (i = 0; i < markers.length; i++) {
            var marker = markers[i];
            // If is same category or category not picked
            if ( mapCategories.indexOf( marker.category ) >= 0 ) {
                newMarkers.push( marker );
                marker.setVisible(true);
            }
            // Categories don't match
            else {
                marker.setVisible(false);
            }
        }
        refreshClusterer();
      }

  }

  function refreshClusterer() {
    //display clustered markers

    myMarkerClusterer = new MarkerClusterer(map, newMarkers, {
      maxZoom: maxzoom,
      gridSize: size,
    });

  }

  function resetClusterer() {
    //display clustered markers
    myMarkerClusterer = new MarkerClusterer(map, newMarkers, {
      maxZoom: maxzoom,
      gridSize: size,
    });
  }

  function bindInfoWindow(marker, map, infowindow, description) {
      marker.addListener('click', function() {
          infowindow.setContent(description);
          infowindow.open(map, this);
      });
  }

  function loadMap() {
    map = new google.maps.Map(document.getElementById('map'), {
      zoom: 8,
      center: mapCenterLatLng,
      mapTypeId: google.maps.MapTypeId.ROADMAP,
      maxZoom: '17',
      scrollwheel: false,
      draggable: false,
      fullscreenControl: true,
      mapTypeControlOptions: {
        mapTypeId: google.maps.MapTypeId.HYBRID,
      }
    });

    map.setOptions({styles: styles});


    //Enable Scrolling and Dragging with Mouse Click (For Desktop)
    google.maps.event.addListener(map, 'mousedown', function(){
        enableScrollingWithMouseWheel();

        if (!isMobile)
            map.setOptions({ draggable: true });
    });

    //Enable Dragging with Double Tab/Click (For Desktop and Mobile)
    google.maps.event.addListener(map, 'dblclick', function() {
        map.setOptions({ draggable: true, scrollwheel: true });
    });

  }


  function clearClusters() {
    myMarkerClusterer.clearMarkers();
  }


  function enableScrollingWithMouseWheel() {
      map.setOptions({ scrollwheel: true });
  }

  function disableScrollingWithMouseWheel() {
      map.setOptions({ scrollwheel: false, draggable: false });
  }

  google.maps.event.addListenerOnce(map, 'idle', function(){
      // do something only the first time the map is loaded
  //Disable scrolling and dragging when clicking / tapping outside the map (For Desktop and Mobile)
     $('body').on('mouseup', function(event) {
         var clickedInsideMap = $(event.target).parents('#map').length > 0;

         if(!clickedInsideMap) {
             disableScrollingWithMouseWheel();
         }
     });

     //Disable scrolling and dragging when scrolling the page with mousewheel (For Desktop)
     $(window).scroll(function() {
         disableScrollingWithMouseWheel();
     });
  });

  function updateMapPerLocationInput() {
    var address;

    $('.map-control .text-input').keyup(function(e){
      if (e.keyCode == 13) {
        address = $(this).val();
        if ( address.length > 3 ) {
          getLatLng( address );
        }
      }
    });

  }

  function setNewMapCenter( data ) {

    var newLatLng = new google.maps.LatLng( data['0'], data['1'] );

    map.setZoom( 7 );
    map.setCenter( newLatLng );
    var boundaryMarkers = find_closest_marker( data );

    setBounds ( boundaryMarkers );

  }

  function distance(lat1, lon1, lat2, lon2) {
    var p = 0.017453292519943295;    // Math.PI / 180
    var c = Math.cos;
    var a = 0.5 - c((lat2 - lat1) * p)/2 +
            c(lat1 * p) * c(lat2 * p) *
            (1 - c((lon2 - lon1) * p))/2;

    return 12742 * Math.asin(Math.sqrt(a)); // 2 * R; R = 6371 km
  }

  function find_closest_marker( center ) {

    var distances = [];
    var lat1, lat2, lng1, lng2;
    var boundaryMarkers;

    if ( center ) {
      lat1 = center['0'];
      lng1 = center['1'];

      for ( i = 0; i < newMarkers.length; i++) {

        lat2 = newMarkers[i].getPosition().lat();
        lng2 = newMarkers[i].getPosition().lng();

        newMarkers[i].distance = distance( lat1, lng1, lat2, lng2 );

    }

    boundaryMarkers = sortByDistance( newMarkers );
    return boundaryMarkers;
    }

  }

  function sortByDistance( markerArray ) {

    var fifthMarker = [];

    markerArray.sort(function (a, b) {
      if (a.distance > b.distance) {
        return 1;
      }
      if (a.distance < b.distance) {
        return -1;
      }
      // a must be equal to b
      return 0;
    });

    firstMarker = markerArray.splice(0, 1)['0'];
    fifthMarker = markerArray.splice(4, 1)['0'];

    var boundaryMarkers = [ firstMarker, fifthMarker ];

    return boundaryMarkers;
  }

  function setBounds( boundaryMarkers ){

    if ( boundaryMarkers ) {
      var bounds = new google.maps.LatLngBounds();
      bounds.extend( boundaryMarkers['0'].position );
      bounds.extend( boundaryMarkers['1'].position );
      map.fitBounds( bounds);
    }
  }

  function mapOfEverything() {

    if ( $('.map ').data('name') === 'everything' ) {

      selectRegionBounds(); //to refresh boundaries on region select;

      checkMapCategories(); //to display category filters for Map of Everything
    }

  }
  function selectRegionBounds() {

    $('.map-control .select').change( function(){

      var region = $(this).find('option:selected').text();

      refreshRegionBounds( region );

    });

  }

  function refreshRegionBounds( regionName ) {
    var regionBounds = new google.maps.LatLngBounds();
    var regionNE, regionNW;
    var regions = {
      "West": [
        [ 49.075306, -125.121097 ],
        [ 31.514869, -103.148438 ]
      ],
      "Rockies" : [
        [ 48.960023, -117.166993 ],
        [ 31.888753, -102.972657]
      ],
      "Prairie" : [
        [48.931162, -119.759766 ],
        [ 31.627192, -89.349610 ]
      ],
      "Northwest" : [
        [71.485876, -171.421888],
        [41.921898, -109.617194]
      ],
      "Northeast" : [
        [52.977754, -79.734381],
        [ 38.500032, -52.136725]
      ],
      "Mid South" : [
        [39.592143, -106.628913],
        [25.029865, -87.117194]
      ],
      "Mid Atlantic" : [
        [39.592143, -88.962897],
        [24.471152, -73.845710]
      ],
      "Great Lakes" : [
        [57.529980, -95.466798],
        [36.830391, -72.263673]
      ],
      "Deep South" : [
        [36.477842, -88.699220],
        [24.950205, -75.427735]
      ],
      "Centro" : [
        [32.569038, -118.494147],
        [9.475071, -60.398439]
      ]
    };

    if ( regions[regionName] ) {
      regionNW = new google.maps.LatLng( regions[regionName]['0']['0'], regions[regionName]['0']['1'] );
      regionNE = new google.maps.LatLng( regions[regionName]['1']['0'], regions[regionName]['1']['1']);
      regionBounds.extend( regionNW );
      regionBounds.extend( regionNE );
    } else {
      regionNW = new google.maps.LatLng( 72.743220, -171.632817 );
      regionNE = new google.maps.LatLng( 2.565555, -53.507817 );
      regionBounds.extend( regionNW );
      regionBounds.extend( regionNE );
    }
    map.fitBounds( regionBounds );

  }

  function getLatLng( address ) {

    var key = 'AIzaSyBDttorbDzy7Fa5IGeyvolnJZpiOVeQdBA';
    var requestUrl = 'https://maps.googleapis.com/maps/api/geocode/json?address='+address+'&key='+key;
    var data;

    $.ajax({
        type: "GET",
        url: requestUrl,
        dataType: "json",
        success: function (data) {

          if ( data.results['0'] ) {
            var addressLat = data.results['0'].geometry.location.lat;
            var addressLng = data.results['0'].geometry.location.lng;
            var formatted =data.results['0'].formatted_address;
            data = [addressLat, addressLng];

            setNewMapCenter( data );
            updateAlert( formatted );

          } else {
            showMapWarning();
          }
      }

    });

  }

  function getAddressFromLatLng( latlng ) {
    var key = 'AIzaSyBDttorbDzy7Fa5IGeyvolnJZpiOVeQdBA';
    var requestUrl = 'https://maps.googleapis.com/maps/api/geocode/json?latlng='+latlng+'&key='+key;
    var data;

    $.ajax({
        type: "GET",
        url: requestUrl,
        dataType: "json",
        success: function (data) {

          if ( data.results['0'] ) {

            var formatted = data.results['0'].formatted_address;

            return formatted;

          }
      }

    });
  }


  function updateAlert( location ) {
    $('.alert-info .location').text( location );
  }

  function showMapWarning( errorType ) {

    var errors = {
      'undefined': '',

    };

    return errors[errorType];

  }

  /* XML TO JSON */
  // Changes XML to JSON
  function xmlToJson(xml) {

        // Create the return object
        var obj = {};

        if (xml.nodeType == 1) { // element
                // do attributes
                if (xml.attributes.length > 0) {
                obj["@attributes"] = {};
                        for (var j = 0; j < xml.attributes.length; j++) {
                                var attribute = xml.attributes.item(j);
                                obj["@attributes"][attribute.nodeName] = attribute.nodeValue;
                        }
                }
        } else if (xml.nodeType == 3) { // text
                obj = xml.nodeValue;
        }

        // do children
        if (xml.hasChildNodes()) {
                for(var i = 0; i < xml.childNodes.length; i++) {
                        var item = xml.childNodes.item(i);
                        var nodeName = item.nodeName;
                        if (typeof(obj[nodeName]) == "undefined") {
                                obj[nodeName] = xmlToJson(item);
                        } else {
                                if (typeof(obj[nodeName].push) == "undefined") {
                                        var old = obj[nodeName];
                                        obj[nodeName] = [];
                                        obj[nodeName].push(old);
                                }
                                obj[nodeName].push(xmlToJson(item));
                        }
                }
        }
        return obj;
  }

  function hasStorage(){
      try{
          localStorage.setItem('test', '7');
          if(localStorage.getItem('test')=== '7'){
              localStorage.removeItem('test');
              return true;
          }
      }
      catch(er){}

      return false;
  }

  function loadStorage( key ){

    if ( !key )
      return false;

    if ( key == 'mapCenterLatLng' && storageKey == 'single' ) {

      mapCenterLatLng = {"lat": $('.map-single').data('lat'),"lng": $('.map-single').data('lng') };
      saveStorage( 'mapCenterLatLng', mapCenterLatLng );

      return mapCenterLatLng;

    } else if ( key ) {
      if ( localStorage.getItem( key ) === null || localStorage.getItem( key ) === undefined )
        return false;
      else if ( localStorage[ key ] === undefined )
        return false;
      else
        return JSON.parse( localStorage.getItem( key ) );

    } else {
      //nothing
    }

  }

  function saveStorage( key, obj ) {
      var lastModified = Date.now();
      var date_key = 'lastModified';

      if ( key !== 'mapCenterLatLng' )
        localStorage[ date_key ] = JSON.stringify( lastModified );

      localStorage[ key ] = JSON.stringify(obj);
  }



    


});
