var map_top = false;

var tracks = [];
var track_ids = [];

var map = false;
var gpx = false;
var ajax_loaded = false;
var page_loaded = false;

function $_parse_bounds(b){return{minlat:b.attr('minlat'),minlon:b.attr('minlon'),maxlat:b.attr('maxlat'),maxlon:b.attr('maxlon')};}
function update_size(){var s=$(window).height()-map_top-5;s=(s<600?600:s);if($("#data_map").height()!==s){$("#data_map").height(s);}}

function loaded() {
  if (page_loaded && ajax_loaded) {
    var ul = $(document.createElement("ul"));
    track_ids.sort().reverse();
    for (var i = 0; i < track_ids.length; i++) {
      ul.append($(document.createElement("li")).append($(document.createElement("a")).attr("href","#" + tracks[track_ids[i]].id).text(tracks[track_ids[i]].name)));
    }
    $("#sidebar").append(ul);
    $("#loading_img").css("display","none");

    update_size();
  }
}

function init_tracks() {
  OpenLayers.ImgPath = "images/";
  map = new OpenLayers.Map({
    controls: [new OpenLayers.Control.Navigation(),
                  new OpenLayers.Control.PanZoomBar(),
                  new OpenLayers.Control.LayerSwitcher({'ascending': false}),
                  new OpenLayers.Control.Permalink(),
                  new OpenLayers.Control.ScaleLine(),
                  new OpenLayers.Control.Permalink('permalink'),
                  new OpenLayers.Control.MousePosition(),
                  new OpenLayers.Control.OverviewMap(),
                  new OpenLayers.Control.KeyboardDefaults()],
    theme:false,
    displayProjection: new OpenLayers.Projection("EPSG:4326"),
    projection: new OpenLayers.Projection("EPSG:900913"),
    units: "m",
    maxResolution: 156543.0339,
    numZoomLevels: 22,
    maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34, 20037508.34, 20037508.34)
  });
  map.addLayers([
      new OpenLayers.Layer.OSM.Mapnik("Mapnik"),
      new OpenLayers.Layer.OSM.Osmarender("Osmarender"),
      new OpenLayers.Layer.OSM.CycleMap("CycleMap"),
      new OpenLayers.Layer.Google("Google - Satellit",{type: google.maps.MapTypeId.SATELLITE, numZoomLevels: 22, sphericalMercator:true}),
      new OpenLayers.Layer.Google("Google - Gelände",{type: google.maps.MapTypeId.TERRAIN, sphericalMercator:true}),
      new OpenLayers.Layer.Google("Google - Karte",{numZoomLevels: 20, sphericalMercator:true}),
      new OpenLayers.Layer.Google("Google - Hybrid",{type: google.maps.MapTypeId.HYBRID, numZoomLevels: 22, sphericalMercator:true})
    ]);
  map.render("data_map");
  map.zoomToExtent(new OpenLayers.Bounds(13.5, 46.6, 16.2, 47.8).transform(map.displayProjection, map.projection));

  map_top = $("#data_map").position().top;
  $(window).resize(update_size);
  page_loaded = true;
  loaded();
}

function update_tracks(data) {
  var id = data.path;
  if (tracks[id]) {
    $("#data_header").text(tracks[id].name);
    $("#data_content").empty().append("<table><tr><td>Datum: </td><td>"+tracks[id].date.toLocaleDateString()+"</td></tr><tr><td>Autor:</td><td>"+tracks[id].author+"</td></tr></table>");
    if (gpx)
    {
      map.removeLayer(gpx);
    }

    gpx = new OpenLayers.Layer.GML(tracks[id].name, tracks[id].file, {
        format: OpenLayers.Format.GPX,
        style: {strokeColor: "red", strokeWidth: 2, strokeOpacity: 1},
        projection: new OpenLayers.Projection("EPSG:4326")
    });

    map.addLayer(gpx);
    map.zoomToExtent(new OpenLayers.Bounds(tracks[id].bounds.minlon, tracks[id].bounds.minlat, tracks[id].bounds.maxlon, tracks[id].bounds.maxlat).transform(map.displayProjection, map.projection));

  }
}

$.ajax({type:"GET",url:"tracks.xml",dataType:"xml",
success:function(x){$(x).find("track").each(function(i,e){var t=$(e);tracks[t.attr('id')]={id:t.attr('id'),name:t.find('name').text(),date:new Date(t.find('date').text()),file:t.find('file').text(),author:t.find('author').text(),bounds:$_parse_bounds(t.find('bounds'))};track_ids[i]=t.attr('id');});ajax_loaded=true;loaded();}
});
