init set $locations to
[
    {name:'Zuhause', coords:[52.390879, 13.494377, 52.462751, 13.636810]},
    {name:'BER', coords:[52.354985, 13.489062, 52.373411, 13.541998]},
    {name:'Deutschland', coords:[47.840232, 7.5744897, 53.998111, 15.1501467]},
    {name:'Genf', coords:[46.169071, 6.014416, 46.339537, 6.349795]},
    {name:'Lausanne', coords:[46.498798, 6.522314, 46.555409, 6.694128]},
    {name:'Vevey', coords:[46.454654, 6.826860, 46.472875, 6.865797]},
    {name:'Montreux', coords:[46.425179, 6.894493, 46.441381, 6.924581]},
    {name:'Montbovon', coords:[46.483020, 7.038429, 46.490483, 7.048125]},
    {name:'Chateaudoex', coords:[46.457968, 7.105644, 46.485867, 7.159889]},
    {name:'Saanen', coords:[46.481033, 7.224693, 46.492215, 7.275424]},
    {name:'Gstaad', coords:[46.464437, 7.271988, 46.481237, 7.300752]},
    {name:'Zweisimmen', coords:[46.546246, 7.360489, 46.564252, 7.386547]},
    {name:'Wimmis', coords:[46.668612, 7.626205, 46.683705, 7.648607]},
    {name:'Spiez', coords:[46.677283, 7.658870, 46.709916, 7.693666]},
    {name:'Thun', coords:[46.718753, 7.591506, 46.781364, 7.660163]},
    {name:'Belp', coords:[46.874508, 7.484386, 46.908943, 7.515029]},
    {name:'Bern', coords:[46.928506, 7.377884, 46.972886, 7.492811]},
    {name:'Lyss', coords:[47.059727, 7.281890, 47.093013, 7.328414]},
    {name:'Leubringen', coords:[47.145696, 7.226900, 47.158905, 7.250161]},
    {name:'Biel', coords:[47.128037, 7.211261, 47.168184, 7.298241]},
    {name:'Nidau', coords:[47.121452, 7.226185, 47.127248, 7.244903]},
    {name:'Moerigen', coords:[47.078412, 7.198645, 47.092392, 7.224579]},
    {name:'Taeuffelen', coords:[47.063596, 7.188424, 47.070735, 7.209233]},
    {name:'Hagneck', coords:[47.052889, 7.172591, 47.061263, 7.198418]},
    {name:'Finsterhennen', coords:[47.019422, 7.167534, 47.037631, 7.191178]},
    {name:'Ins', coords:[46.995372, 7.085239, 47.014757, 7.117780]},
    {name:'Kerzers', coords:[46.957885, 7.175491, 46.982993, 7.216857]},
    {name:'GrossesMoos', coords:[46.947946, 7.059005, 47.087805, 7.228278]},
    {name:'Guemmenen', coords:[46.930083, 7.224763, 46.951681, 7.255996]},
    {name:'Olten', coords:[47.336607, 7.888728, 47.359985, 7.924417]},
    {name:'Zuerich', coords:[47.347492, 8.465011, 47.400999, 8.576124]},
    {name:'Goldau', coords:[47.039978, 8.534119, 47.058623, 8.562214]},
    {name:'Zug', coords:[47.155949, 8.489327, 47.189577, 8.542918]},
    {name:'Luzern', coords:[47.039887, 8.268503, 47.074782, 8.345674]}
]

init set $cachelocs to
[
    '/loc?locname=Zuhause', '/images/Zuhause-icon.svg',
    '/loc?locname=BER', '/images/BER-icon.png',
    '/loc?locname=Genf', '/images/Genf-icon.svg',
    '/loc?locname=Vevey', '/images/Vevey-icon.svg',
    '/loc?locname=Montreux', '/images/Montreux-icon.svg',
    '/loc?locname=Montbovon', '/images/Montbovon-icon.png',
    '/loc?locname=Chateaudoex', '/images/Chateaudoex-icon.svg',
    '/loc?locname=Saanen', '/images/Saanen-icon.svg',
    '/loc?locname=Gstaad', '/images/Saanen-icon.svg',
    '/loc?locname=Zweisimmen', '/images/Zweisimmen-icon.svg',
    '/loc?locname=Wimmis', '/images/Wimmis-icon.svg',
    '/loc?locname=Spiez', '/images/Spiez-icon.svg',
    '/loc?locname=Thun', '/images/Thun-icon.svg',
    '/loc?locname=Belp', '/images/Belp-icon.svg',
    '/loc?locname=Bern', '/images/Bern-icon.svg',
    '/loc?locname=Lyss', '/images/Lyss-icon.svg',
    '/loc?locname=Leubringen', '/images/Leubringen-icon.svg',
    '/loc?locname=Biel', '/images/Biel-icon.svg', '/images/bielbienne.jpg',
    '/loc?locname=Nidau', '/images/Nidau-icon.svg',
    '/loc?locname=Moerigen', '/images/Moerigen-icon.svg',
    '/loc?locname=Taeuffelen', '/images/Taeuffelen-icon.svg',
    '/loc?locname=Hagneck', '/images/Hagneck-icon.svg',
    '/loc?locname=Finsterhennen', '/images/Finsterhennen-icon.svg',
    '/loc?locname=Ins', '/images/Ins-icon.svg',
    '/loc?locname=Kerzers', '/images/Kerzers-icon.svg',
    '/loc?locname=GrossesMoos',
    '/loc?locname=Guemmenen', '/images/Guemmenen-icon.svg',
    '/loc?locname=Olten', '/images/Olten-icon.svg',
    '/loc?locname=Zuerich', '/images/Zuerich-icon.svg',
    '/loc?locname=Goldau', '/images/Goldau-icon.svg',
    '/loc?locname=Zug', '/images/Zug-icon.svg',
    '/loc?locname=Luzern', '/images/Luzern-icon.gif'
]

def inLocation(location, lat, lon)
  set coords to location.coords
  if coords[0] is less than lat and coords[2] is greater than lat and coords[1] is less than lon and coords[3] is greater than lon
  then
    return true
  else
    return false
  end
end

def coordsToLocation(lat, lon)
  for location in $locations where inLocation(location, lat, lon)
    log location.name
    return location.name
  end
end

def failedCoords(GeolocationPositionError)
  log GeolocationPositionError
  send positionUpdate to #geoinfo
end

def handleCoords(GeolocationPosition)
  set coords to GeolocationPosition.coords
  set global locname to coordsToLocation(coords.latitude, coords.longitude)
  if #geoinfo exists
    set #geoinfo's @hx-get to '/loc?locname=' + locname
    if #geoinfo's @data-locname is not locname
      send positionUpdate to #geoinfo
      log 'New location'
    end
    set #geoinfo's @data-locname to locname
  end
end

intercept /
  precache /, /todo, /offline, 'loc?locname=undefined' as "v5"
  offline fallback /offline
end

init
  set cache to caches.open('v5')
  cache.addAll($cachelocs)
end
