//
//  Some properties arrays and functions
//
//
//

function featureStyle(feature) {
  speed = parseInt(feature.speed);
  var color = "#0000ff";
  if (speed >= 0 || speed == -1) {
    if (feature.highway) {
      color = colorTableHighway[closest(speedTableHighway, speed)];
    } else {
      color = colorTable[closest(speedTable, speed)];
    }
  }
  return { color: color };
}

function getPointSize(zoom) {
  return offsetStyle["highway"][zoom].point_radius;
}
function getTrackmarkerSize(zoom) {
  return offsetStyle["highway"][zoom].trackmarker_size;
}
function getWeight(highway, zoom) {
  highwaystr = highway ? "highway" : "nothighway";
  return offsetStyle[highwaystr][zoom].weight;
}
function getWeightMouseover(highway, zoom) {
  highwaystr = highway ? "highway" : "nothighway";
  return offsetStyle[highwaystr][zoom].weightOver;
}
function getOffset(highway, zoom) {
  highwaystr = highway ? "highway" : "nothighway";
  return offsetStyle[highwaystr][zoom].offset;
}
//https://gist.github.com/vipickering/6552366
function closest(array, num) {
  var i = 0;
  var minDiff = 1000;
  var idx;
  for (i in array) {
    var m = Math.abs(num - array[i]);
    if (m < minDiff) {
      minDiff = m;
      idx = i;
    }
  }
  return idx;
}

var speedTableHighway = [-1, 0, 30, 50, 70, 90, 110];
var colorTableHighway = ["#c0c0c0", "#850000", "#850000", "#cd0000", "#f5c800", "#acd739", "#00aa00"];

//var speedTable = [ 20,30,40,50,60];
//var colorTable = ["#850000","#cd0000","#f5c800","#acd739","#00aa00"];
var speedTable = [-1, 0, 5, 15, 25, 40, 60];
var colorTable = ["#c0c0c0", "#850000", "#850000", "#cd0000", "#f5c800", "#acd739", "#00aa00"];

if (L.Browser.mobile) {
  // for mobile
  var offsetStyle = {
    highway: {
      "6": {
        weight: 3,
        weightOver: 6,
        offset: 3,
        trackmarker_size: 12,
        point_radius: 5
      },
      "7": {
        weight: 3,
        weightOver: 6,
        offset: 3,
        trackmarker_size: 12,
        point_radius: 5
      },
      "8": {
        weight: 3,
        weightOver: 6,
        offset: 3,
        trackmarker_size: 12,
        point_radius: 5
      },
      "9": {
        weight: 3,
        weightOver: 6,
        offset: 3,
        trackmarker_size: 12,
        point_radius: 5
      },
      "10": {
        weight: 3,
        weightOver: 6,
        offset: 3,
        trackmarker_size: 12,
        point_radius: 5
      },
      "11": {
        weight: 3,
        weightOver: 6,
        offset: 3,
        trackmarker_size: 12,
        point_radius: 5
      },
      "12": {
        weight: 3,
        weightOver: 6,
        offset: 3,
        trackmarker_size: 12,
        point_radius: 5
      },
      "13": {
        weight: 3,
        weightOver: 6,
        offset: 3,
        trackmarker_size: 12,
        point_radius: 5
      },
      "14": {
        weight: 3,
        weightOver: 6,
        offset: 3,
        trackmarker_size: 12,
        point_radius: 5
      },
      "15": {
        weight: 3,
        weightOver: 6,
        offset: 3,
        trackmarker_size: 12,
        point_radius: 5
      },
      "16": {
        weight: 3,
        weightOver: 6,
        offset: 3,
        trackmarker_size: 14,
        point_radius: 5
      },
      "17": {
        weight: 3,
        weightOver: 6,
        offset: 3,
        trackmarker_size: 15,
        point_radius: 5
      },
      "18": {
        weight: 3,
        weightOver: 6,
        offset: 3,
        trackmarker_size: 16,
        point_radius: 5
      },
      "19": {
        weight: 3,
        weightOver: 6,
        offset: 3,
        trackmarker_size: 18,
        point_radius: 5
      }
    },
    nothighway: {
      "6": {
        weight: 2,
        weightOver: 4,
        offset: 2
      },
      "7": {
        weight: 2,
        weightOver: 4,
        offset: 2
      },
      "8": {
        weight: 2,
        weightOver: 4,
        offset: 2
      },
      "9": {
        weight: 2,
        weightOver: 4,
        offset: 2
      },
      "10": {
        weight: 2,
        weightOver: 4,
        offset: 2
      },
      "11": {
        weight: 2,
        weightOver: 4,
        offset: 2
      },
      "12": {
        weight: 2,
        weightOver: 4,
        offset: 2
      },
      "13": {
        weight: 2,
        weightOver: 4,
        offset: 2
      },
      "14": {
        weight: 2,
        weightOver: 4,
        offset: 2
      },
      "15": {
        weight: 2,
        weightOver: 4,
        offset: 2
      },
      "16": {
        weight: 2,
        weightOver: 4,
        offset: 2
      },
      "17": {
        weight: 2,
        weightOver: 4,
        offset: 2
      },
      "18": {
        weight: 3,
        weightOver: 6,
        offset: 3
      },
      "19": {
        weight: 3,
        weightOver: 6,
        offset: 3
      }
    }
  };
} else {
  // for  PC
  var offsetStyle = {
    highway: {
      "6": {
        weight: 4,
        weightOver: 6,
        offset: 4,
        trackmarker_size: 12,
        point_radius:5
      },
      "7": {
        weight: 5,
        weightOver: 6,
        offset: 4,
        trackmarker_size: 12,
        point_radius:5
      },
      "8": {
        weight: 5,
        weightOver: 6,
        offset: 4,
        trackmarker_size: 12,
        point_radius:5
      },
      "9": {
        weight: 5,
        weightOver: 6,
        offset: 4,
        trackmarker_size: 12,
        point_radius:5
      },
      "10": {
        weight: 5,
        weightOver: 6,
        offset: 4,
        trackmarker_size: 12,
        point_radius:5
      },
      "11": {
        weight: 5,
        weightOver: 6,
        offset: 4,
        trackmarker_size: 12,
        point_radius:5
      },
      "12": {
        weight: 5,
        weightOver: 6,
        offset: 4,
        trackmarker_size: 12,
        point_radius:5
      },
      "13": {
        weight: 5,
        weightOver: 6,
        offset: 4,
        trackmarker_size: 12,
        point_radius:5
      },
      "14": {
        weight: 5,
        weightOver: 6,
        offset: 4,
        trackmarker_size: 12,
        point_radius:5
      },
      "15": {
        weight: 5,
        weightOver: 6,
        offset: 4,
        trackmarker_size: 12,
        point_radius:5
      },
      "16": {
        weight: 5,
        weightOver: 6,
        offset: 5,
        trackmarker_size: 12,
        point_radius:5
      },
      "17": {
        weight: 5,
        weightOver: 6,
        offset: 5,
        trackmarker_size: 12,
        point_radius:5
      },
      "18": {
        weight: 6,
        weightOver: 8,
        offset: 6,
        trackmarker_size: 12,
        point_radius:5
      },
      "19": {
        weight: 8,
        weightOver: 10,
        offset: 8,
        trackmarker_size: 12,
        point_radius:5
      }
    },
    nothighway: {
      "6": {
        weight: 2,
        weightOver: 5,
        offset: 2
      },
      "7": {
        weight: 3,
        weightOver: 5,
        offset: 3
      },
      "8": {
        weight: 3,
        weightOver: 5,
        offset: 3
      },
      "9": {
        weight: 3,
        weightOver: 5,
        offset: 3
      },
      "10": {
        weight: 3,
        weightOver: 5,
        offset: 3
      },
      "11": {
        weight: 3,
        weightOver: 5,
        offset: 3
      },
      "12": {
        weight: 3,
        weightOver: 5,
        offset: 3
      },
      "13": {
        weight: 3,
        weightOver: 5,
        offset: 3
      },
      "14": {
        weight: 3,
        weightOver: 5,
        offset: 3
      },
      "15": {
        weight: 3,
        weightOver: 5,
        offset: 3
      },
      "16": {
        weight: 3,
        weightOver: 5,
        offset: 3
      },
      "17": {
        weight: 3,
        weightOver: 5,
        offset: 3
      },
      "18": {
        weight: 5,
        weightOver: 7,
        offset: 5
      },
      "19": {
        weight: 7,
        weightOver: 9,
        offset: 7
      }
    }
  };
}

function localStoragePut(key, data) {
  window.localStorage.setItem(key, data);
}
function localStorageGet(key) {
  return window.localStorage.getItem(key);
}
function setHistory() {
  var center = m.getCenter();
  var lat = center.lat.toPrecision(6), lng = center.lng.toPrecision(6);
  history.replaceState({}, "", "#map=" + m.getZoom() + "/" + lat + "/" + lng);
  localStoragePut("zoom", m.getZoom());
  localStoragePut("lat", lat);
  localStoragePut("lon", lng);
}
function decodeHash(hashstring) {
  var hash = {};
  var hash_tmp = hashstring.substring(1).split("&");
  hash_tmp.forEach(function(s) {
    tmp1 = s.split("=");
    hash[tmp1[0]] = tmp1[1];
  });
  return hash;
}
