//----------------------------------------------------------------------------------------------------------
//
// Seiten Layout für GPS Track Viewer
//
// Copyright peter@danninger.eu
//
//  Getestet wurde die Seite mit den aktuellen Versionen von:
//
//    - Mozilla Firefox 3.5.4
//    - Opera 9.80
//    - Apple Safari 531.9.1
//    - Goggle Chrome 3.0.195.27
//    - Microsoft Internet Explorer 8.0
//
//   Copyright peter@danninger.eu                 11. 11. 2009
//
//----------------------------------------------------------------------------------------------------------
//
//var LargeMapControl = true;
//var Legende = true;
//var Legende_trk = true;
//var Legende_rte = true;
//var Legende_wpt = true;
//var HP_verbinde = true;                                       // Profile mehrerer Tracks verbinden
//var HoehenFilter = parseFloat(10);                            // ------ ergaenzt peter@danninger.eu
//var FotoWidth = 400;                                          // pixel
//var FotoHeight = 300;                                         // pixel
//var CameraSymb = new Array("camera.png",32,32,10,32);         // file,width,height,hoff,voff
//var CameraShadow = new Array("camera_s.png",59,32);           // file,width,height
//var WayPointSymb = new Array("bubble_gelb.png",12,24,6,24);   // file,width,height,hoff,voff
//var WayPointShadow = new Array("bubble_shadow.png",22,20);    // file,width,height
//
var mapID = "map";                  // Karten ID (NICHT ändern, steht so in index.html)
var hpsuffix = "_hp";               // Suffix Höhenprofil für Karte (NICHT ändern, steht so in index.html)
var kTop = 44;                      // Höhe DIV oben bei großem Schirm
var kTopV;                          // Höhe DIV oben abhängig von Schirmgrösse
var kLeft = 220;                    // Breite DIV links bei großem Schirm
var kLeftV;                         // Breite DIV links abhängig von Schirmgrösse
var platz = 8;                      // Abstand zwischen Button-Groups
var helpWi = 160;                   // Breite Hilfe Buttons bei großem Schirm
var helpWiV;                        // Breite Hilfe Buttons abhängig von Schirmgrösse
var hoeheP = 200;                   // Höhe Profil bei großem Schirm
var hoehePV;                        // Höhe Profil abhängig von Schirmgrösse
var FSize = 14;                     // Font Size bei großem Schirm
var FSizeV;                         // Font Size abhängig von Schirmgrösse
var FSizeH = 18;                    // Font Size Tourenname bei großem Schirm
var FSizeHV;                        // Font Size Tourenname abhängig von Schirmgrösse
var FSizeTop = 30;                  // Font Size Überschrift bei großem Schirm
var FSizeTopV;                      // Font Size Überschrift abhängig von Schirmgrösse
var fontFam = "Verdana,Helvetica,Arial,sans-serif";     // Font Family
var abstand = 10;                   // Abstand zwischen Karte und Profil
var kLeftPL = 5;                    // Padding left Kartenauswahl
var kmainPR = 5;                    // Padding right Karte
var khelpPR = 20;                   // Padding right Helpbuttons
var MapHeadHeight = 20;             // MapHead Höhe
var FotoWidth = 400;                // Maximale Foto Breite
var FotoHeight = 300;               // Maximale Foto Höhe
var hellgelb = "#FFFFBB";           // Buttonfarbe hellgelb
var gelb = "#FFFF33";               // Buttonfarbe gelb onmouseover
var outColor = "#CCCCCC";           // Buttonfarbe hellgrau
var overColor = "#AAAAAA";          // Buttonfarbe dunkelgrau
var clickColor = "#AAAAFF";         // Buttonfarbe hellblau onmouseclick
var bCol = "#888888";               // Bordercolor
var hintergrund = "#DDDDDD";        // Hintergrundfarbe
var kartenArr = new Array(          // Array mit allen Kartentypen
        "Karte",                      // Google Maps Kartenansicht
        "Satellit",                   // Google Maps Satellitenansicht
        "Hybrid",                     // Google Maps Hybridansicht
        "Gelaende",                   // Google Maps Gelände Ansicht
        "Earth",                      // Google Earth Ansicht (nur wenn GoogleEarth = true)
        "OSM",                        // Open Street Map Standard (Mapnik)
        "OSM_T&H",                    // Open Street Map Tle and Home Renderer
        "OSMcycle"                    // Open Street Map Cycle Renderer mit Höhenlinien und Radwanderwegen
        );
var defMap = kartenArr[0];          // Default MapType ("Karte" = Google Maps Karte)
var GoogleEarth = false;            // Google Earth ermöglicht oder nicht
var printView = false;              // Druckansicht
var flat = (SubTitle.length > 0);   // Keine Tourenkategorien (Verzeichnisse)

//
// Track Dateiname (.gpx) mit Pfad aus der Touren-Datei.js
//
function trackFile(v,t) {
  var i,j,p;
  i = (v < 0) ? Touren[t] : TourenArr[v][t];
  j = i.indexOf(":");
  if (j > 0)      i = i.substring(0,j);
  j = i.indexOf("|");
  if (j > 0)      i = i.substring(0,j);
  p = (v < 0) ? "./" : ("./" + Verzeichnisse[v] + "/");
  return(p + i + "/" + i + ".gpx");
}
//
// aktueller Track Dateiname aus actTrack (nur Name)
//
function actTrackFileName() {
  var i,tn;
  tn = actTrack;
  i = tn.lastIndexOf("/");
  if (i >= 0)   tn = tn.substring(i+1);
  i = tn.indexOf(".");
  if (i >= 0)   tn = tn.substring(0,i);
  return(tn);
}
//
// Track Datei Name aus der Touren-Datei.js (nur Name)
//
function trackFileName(v,t) {
  var i,tn;
  tn = (v < 0) ? Touren[t] : TourenArr[v][t];
  i = tn.indexOf(":");
  if (i > 0)      tn = tn.substring(0,i);
  i = tn.indexOf("|");
  if (i > 0)      tn = tn.substring(0,i);
  return(tn);
}
//
// Track Button Text aus der Touren-Datei.js
//
function trackButName(v,t) {
  var i,tn;
  tn = (v < 0) ? Touren[t] : TourenArr[v][t];
  i = tn.indexOf(":");
  if (i > 0)      tn = tn.substring(0,i);
  i = tn.indexOf("|");
  if (i > 0)      tn = tn.substring(i+1);
  return(tn);
}
//
// Kartentyp aus der Touren-Datei.js
//
function mapType(v,t) {
  var mt,i,l;
  i = (v < 0) ? Touren[t] : TourenArr[v][t];
  l = kartenArr.length;
  while (--l >= 0) {
    if (i.indexOf(":"+kartenArr[l]) > 0) {
      mt = (kartenArr[l].indexOf(kartenArr[4]) >= 0 && !GoogleEarth) ? kartenArr[2] : kartenArr[l];
      return(mt);
    }
  }
  return(defMap);
}
//
// Test ob Tourenbericht vorhanden sein sollte (aus der Touren-Datei.js)
//
function trackReport(t) {
  var i,j,b;
  b = ":Bericht";
  if (flat) {              // Keine Tourenkategorien (Verzeichnisse)
    for (j = 0; j < Touren.length; ++j) {
      if (Touren[j].indexOf(t) == 0 && Touren[j].indexOf(b) > 0)    return(true);
    }
  } else {
    for (i = 0; i < TourenArr.length; ++i) {
      for (j = 0; j < TourenArr[i].length; ++j) {
        if (TourenArr[i][j].indexOf(t) == 0 && TourenArr[i][j].indexOf(b) > 0)  return(true);
      }
    }
  }
  return(false);
}
//
// Pfad zu Tourenverzeichnis (für GPX2GM.js)
//
function trackPath(file) {
  var i = file.lastIndexOf("/");
  return(i <= 0) ? "./" : file.substring(0,++i);
}
//
// Test ob bei Start anzuzeigende Tour (aus der Touren-Datei.js)
//
function startTrack(v,t) {
  var i,j;
  i = (v < 0) ? Touren[t] : TourenArr[v][t];
  j = ":Start";
  return(i.indexOf(j) > 0);
}
//
// Bei Start anzuzeigende Tour ermitteln (aus der Touren-Datei.js)
// Konvention entsprechend GPX2GM.js
//
function startTour() {
  var i,j,i1,j1;
  i1 = j1 = -1;
  if (flat) {            						// Keine Tourenkategorien (Verzeichnisse)
    for (j = 0; j < Touren.length; ++j) {
      if (Touren[j].indexOf("-----") >= 0)  	continue;
      if (Touren[j].indexOf(":Header") >= 0) 	continue;
      if (Touren[j].length == 0)  						continue;
      if (j1 < 0) {
      	j1 = j;
      }
      if (startTrack(-1,j)) {
      	j1 = j;
      	break;
      }
    }
    if (j1 < 0) 								alert ("Array Touren fehlerhaft !!!");
    actTrack = trackFile(-1,j1);
    actMap = mapType(-1,j1);
  } else {
    for (i = 0; i < TourenArr.length; ++i) {
      for (j = 0; j < TourenArr[i].length; ++j) {
	      if (TourenArr[i][j].indexOf("-----") >= 0)   	continue;
	      if (TourenArr[i][j].indexOf(":Header") >= 0) 	continue;
	      if (TourenArr[i][j].length == 0)  						continue;
	      if (i1 < 0) {
          i1 = i;
          j1 = j;
	      }
        if (startTrack(i,j)) {
          i1 = i;
          j1 = j;
          i = TourenArr.length;
          break
        }
      }
    }
    if (i1 < 0) 								alert ("Array TourenArr fehlerhaft !!!");
    actTrack = trackFile(i1,j1);
    actMap = mapType(i1,j1);
  }
  return('gpxview1:'+actTrack+':'+actMap);
}
//
// Funktion Hilfe-Button
//
function HilfeF() {
  var t = ((flat) ? "../" : "./") + "Kurzanleitung.html";
  window.open(t,"hilfe","resizable=yes,scrollbars=yes,menubar=no,toolbar=no,location=no,directories=no,status=no,dependent=yes");
}
//
// Funktion Drucken-Button
//
function DruckenF() {
  window.print();
}
//
// Funktion Schliessen-Button
//
function CloseF() {
  window.close();
}
//
// Funktion Impressum-Button
//
function ImpressumF() {
  var t = ((flat) ? "../" : "./") + "Impressum.html";
  window.open(t,"impressum","resizable=yes,menubar=no,toolbar=no,location=no,directories=no,status=no,dependent=yes,width=700,height=500");
}
//
// Funktion Vollbild-Button (Druckansicht)
//
function VollbildF() {
  var i,t;
  t = this.location.href;
  i = t.indexOf("?");
  if (i > 0)    t = t.substring(0,i);
  t = "./" + t.substring(t.lastIndexOf("/")+1) + "?printView:" + actTrack + ":" +actMap;
  window.open(t,"Druckansicht","resizable=yes,scrollbars=no,menubar=no,toolbar=no,location=no,directories=no,status=no,dependent=yes");
}
//
// Funktion Download (gpx)-Button
//
function DownloadF() {
  // location.href = actTrack;      // ersetzt durch "href" damit rechte Maustaste funktioniert !!!
}
//
// Funktion Tourenbericht-Button (Konvention: Tourenname.html)
//
function BerichtF() {
  var i,t;
  i = actTrack.lastIndexOf(".");
  if (i > 0) {
    t = actTrack.substring(0,i) + ".html";
    window.open(t,"Bericht");
  }
}
//
// Der IE hat 2 verschiedene Objekte für den strict und quirks Mode.
//
function getBody(w) {                // Internet Explorer Workaround :-(
  return(w.document.compatMode && w.document.compatMode == "CSS1Compat") ? w.document.documentElement : w.document.body || null;
}
//
// Mouse Over Color
//
function mOver(b,c) {
  var ob;
  if (b == actTrackFileName())                return;
  ob = document.getElementById(b);
  if (typeof ob != "object" || ob == null)    return;
  ob.style.backgroundColor = c;
}
//
// Mouse Out Color
//
function mOut(b,c) {
  var ob;
  if (b == actTrackFileName())                return;
  ob = document.getElementById(b);
  if (typeof ob != "object" || ob == null)    return;
  ob.style.backgroundColor = c;
}
//
// Mouse Click Color
//
function mClickC(b,c) {
  var ob;
  ob = document.getElementById(b);
  if (typeof ob != "object" || ob == null)    return;
  ob.style.backgroundColor = c;
}
//
// Mouse Click
//
function mClick() {
  t = actTrackFileName();
  if (flat) {                                 // Keine Tourenkategorien (Verzeichnisse)
    for (j = 0; j < Touren.length; ++j) {
      if (Touren[j].length <= 0)              continue;
      if (Touren[j].indexOf(t) >= 0)          mClickC(trackFileName(-1,j),clickColor);
      else                                    mOut(trackFileName(-1,j),outColor);
    }
  } else {
    for (i = 0; i < TourenArr.length; ++i) {
      for (j = 0; j < TourenArr[i].length; ++j) {
        if (TourenArr[i][j].length <= 0)      continue;
        if (TourenArr[i][j].indexOf(t) >= 0)  mClickC(trackFileName(i,j),clickColor);
      else                                    mOut(trackFileName(i,j),outColor);
      }
    }
  }
  helpButs ();
}
//
// Touren Kategorie (Subtitle wenn flat)
//
function kategorie(e,t) {
  var j, e1;
  j = t.indexOf("|");
  if (j > 0)      t = t.substring(j+1);
  if (t.length <= 0)        return;           // kein Subtitle (| am Ende)
  e1 = document.createElement("div");
  with (e1.style) {
    padding = 0;
    marginTop = "5px";
    marginBottom = "0px";
    fontFamily = fontFam;
    fontSize = FSizeHV + "px";
  }
  e1.appendChild(document.createTextNode(t + ":"));
  e.appendChild(e1);
}
//
// Abstand zwischen Touren Buttons (wenn "----")
//
function tourGap(e) {
  var e1 = document.createElement("div");
  e1 = document.createElement("div");
  with (e1.style) {
    width = (kLeftV-30) + "px";
    height = platz + "px";
  }
  e.appendChild(e1);
}
//
// Überschrift für Touren Button Gruppe (wenn :Header)
//
function tourHeader(e,t) {
  var e1 = document.createElement("div");
  with (e1.style) {
    padding = 0;
    color = "#000000";
    marginTop = "5px";
    marginBottom = "0px";
    fontFamily = fontFam;
    fontSize = FSizeHV + "px";
  }
  e1.appendChild(document.createTextNode(t + ":"));
  e.appendChild(e1);
}
//
// Tourenbutton zur Auswahl
//
function tourBut(e,t,f,n) {           // Element, Dateiname, trackFileName, trackButText
  var a, e1;
  e1 = document.createElement("div");
  with (e1.style) {
    cursor = "pointer";
    display = "block";
    textDecoration = "none";
    fontFamily = fontFam;
    fontSize = FSizeV + "px";
    margin = "1px";
    paddingBottom = "3px";
    borderStyle = "solid";
    borderWidth = "1px";
    borderColor = bCol;
    width = (kLeftV-30) + "px";
    height = FSizeV + "px";
    color = "#000000";
    backgroundColor = outColor;
    textAlign = "center";
  }
  a = document.createAttribute("name");
  a.nodeValue = "button";
  e1.setAttributeNode(a);
  a = document.createAttribute("class");
  a.nodeValue = t;
  e1.setAttributeNode(a);
  a = document.createAttribute("id");
  a.nodeValue = f;
  e1.setAttributeNode(a);
  a = document.createAttribute("onmouseover");
  a.nodeValue = "mOver('"+f+"','"+overColor+"')";
  e1.setAttributeNode(a);
  a = document.createAttribute("onmouseout");
  a.nodeValue = "mOut('"+f+"','"+outColor+"')";
  e1.setAttributeNode(a);
  e1.appendChild(document.createTextNode(n));
  e.appendChild(e1);
}
//
// Hilfe, Druck, Impressum, ... Buttons
//
var hilfe = new Array ("Hilfe", "HilfeF()");                      // Buttontext, Funktionsname
var druck = new Array ("Drucken", "DruckenF()");                  //
var schliessen = new Array ("Schliessen", "CloseF()");            //
var impressum = new Array ("Impressum", "ImpressumF()");          //
var vollbild = new Array ("Vollbild (Drucken)", "VollbildF()");   //
var download = new Array ("Download (.gpx)", "DownloadF()");      //
var bericht = new Array ("Tourenbericht", "BerichtF()");          //
//
function helpBut(b) {
  var e1,color,bt;
  bt = (b[0] == download[0]) ? "a" : "div";
  e1 = document.createElement(bt);
  with (e1.style) {
    cursor = (b[0] == hilfe[0]) ? "help" : "pointer";
    display = "block";
    textDecoration = "none";
    fontFamily = fontFam;
    fontSize = FSizeV + "px";
    margin = "1px";
    paddingBottom = "3px";
    borderStyle = "solid";
    borderWidth = "1px";
    borderColor = bCol;
    width = (helpWiV-khelpPR) + "px";
    height = FSizeV + "px";
    color = "#000000";
    backgroundColor = hellgelb;
    textAlign = "center";
  }
  if (b[0] == download[0]) {
    a = document.createAttribute("href");
    a.nodeValue = actTrack;
    e1.setAttributeNode(a);
  }
  a = document.createAttribute("id");
  a.nodeValue = b[0];
  e1.setAttributeNode(a);
  a = document.createAttribute("onclick");
  a.nodeValue = b[1];
  e1.setAttributeNode(a);
  a = document.createAttribute("onmouseover");
  a.nodeValue = "mOver('"+b[0]+"','"+gelb+"')";
  e1.setAttributeNode(a);
  a = document.createAttribute("onmouseout");
  a.nodeValue = "mOut('"+b[0]+"','"+hellgelb+"')";
  e1.setAttributeNode(a);
  e1.appendChild(document.createTextNode(b[0]));
  return(e1);
}
//
// Buttons für Hilfe, Impressum, ....
//
function helpButs () {
  var e,e1,buts,minH;
  e = document.getElementById("help");
  if (typeof e != "object" || e == null)      return;
  deleteChilds(e);
  buts = (printView) ? 4 : 5;
  minH = buts * (FSizeV+8);
  with (e.style) {
    overflow = "hidden";
    position = "absolute";
    float = "left";
    width = helpWiV + "px";
    height = ((hoehePV < minH) ? minH : hoehePV) + "px";
    right = 0;
    bottom = 0;
    backgroundColor = hintergrund;
    fontFamily = fontFam;
    fontSize = FSizeV + "px";
  }
  if (printView) {                        // wenn Druckansicht:
    e1 = helpBut(druck);                    // Drucken
    e.appendChild(e1);
    e1 = helpBut(schliessen);               // Beenden
    e.appendChild(e1);
  } else {                                // Normalansicht:
    e1 = helpBut(vollbild);                 // Vollbid (Druckansicht)
    e.appendChild(e1);
  }
  e1 = helpBut(download);                 // Download Track (gpx)
  e.appendChild(e1);
  if (trackReport(actTrackFileName())) {  // Tourenbericht (wenn vorhanden)
    e1 = helpBut(bericht);
    e.appendChild(e1);
  }
  if (!printView) {                       // wenn Normalansicht:
    e1 = helpBut(hilfe);                    // Help
    e.appendChild(e1);
    e1 = helpBut(impressum);                // Impressum
    e.appendChild(e1);
  }
}
//
// Aufbereiten der Webseite - hier Starten wir nach "onload" ---------------------------------------------
//
function Layout(resize) {
  var t,bt;
  t = this.location.href;
  bt = false;
  if (t.indexOf("?") > 0) {               // evtl. Aufrufparameter
    t = t.substring(t.indexOf("?") + 1);
    if (t == "browser")     bt = true;
  }
  browserCheck(bt);
  Layout1(resize);
}

function Layout1(resize) {
  var e,e1,a,w,h,sw,sh,shV,t,i,j,k,l,header,gap,loc,ps;
  if (typeof window.innerWidth != 'undefined') {
    sw = window.innerWidth;
    sh = window.innerHeight;
  } else {                                          // Internet Explorer Workaround :-(
    sw = parseInt(getBody(window).clientWidth);     // damit richtige Screenheight
    sh = parseInt(getBody(window).clientHeight);
  }
  shV = (sh < 500) ? 500 : (sh > 1000) ? 1000 : sh;
  hoehePV = Math.round (shV / 1000 * hoeheP);
  kTopV = Math.round (shV / 1000 * kTop / 4 * 3 + (kTop / 4));
  FSizeV = Math.round (shV / 1000 * FSize / 2 + (FSize / 2));
  FSizeHV = Math.round (shV / 1000 * FSizeH / 2 + (FSizeH / 2));
  FSizeTopV = Math.round (shV / 1000 * FSizeTop / 2 + (FSizeTop / 2));
  kLeftV = Math.round (shV / 1000 * kLeft / 3 + (kLeft / 3 * 2));
  helpWiV = Math.round (shV / 1000 * helpWi / 3 + (helpWi / 3 * 2));
  FotoWidth = (sw - kLeftV) - 150;
  if (FotoWidth < 100)  FotoWidth = 100;
  if (FotoWidth > 600)  FotoWidth = 600;
  FotoHeight = (sh - kTopV - hoehePV) - 200;
  if (FotoHeight < 80)  FotoHeight = 80;
  if (FotoHeight > 600) FotoHeight = 600;
  document.bgColor = hintergrund;
  t = this.location.href;
  if (t.indexOf("?") > 0) {                         // Druckansicht oder Reload
    t = t.substring(t.indexOf("?") + 1);
    t = t.split(":");
    printView = (t[0].indexOf("printView") == 0);
    if (! resize) {
      actTrack = t[1];
      actMap = t[2];
    }
    if (printView) {
      actTrack = t[1];
      actMap = t[2];
      kTopV = kLeftV = kLeftPL = 0;
    }
  }
  //
  // Überschrift oben --------------------------------------
  //
  e = document.getElementById("top");
  if (typeof e != "object" || e == null)      return;
  deleteChilds(e);
  w = sw - kLeftV;
  with (e.style) {
    overflow = "hidden";
    width =  w + "px";
    height = kTopV + "px";
    position = "absolute";
    top = 0;
    left = kLeftV + "px";
    color = "#0000ff";
    backgroundColor = hintergrund;
    fontFamily = fontFam;
    fontSize = FSizeTopV + "px";
    verticalAlign = "middle";
    textAlign = "center";
  }
  if (!printView)  e.appendChild(document.createTextNode(MainTitle));
  //
  // Tourauswahl Buttons generieren --------------------------
  //
  e = document.getElementById("left");
  if (typeof e != "object" || e == null)      return;
  deleteChilds(e);
  w = kLeftV - kLeftPL;
  h = sh;
  with (e.style) {
    overflow = "auto";
    width = w + "px";
    height = h + "px";
    position = "absolute";
    top = 0
    left = 0;
    margin = 0;
    padding = 0;
    paddingLeft = kLeftPL + "px";
    color = "#0000ff";
    backgroundColor = hintergrund;
    fontFamily = fontFam;
    fontSize = FSizeHV + "px";
    verticalAlign = "top";
  }
  if (DOM && !printView) {
    if (flat) {                         // Keine Tourenkategorien (Verzeichnisse)
      kategorie(e,SubTitle);
      for (j = 0; j < Touren.length; ++j) {
        header = (Touren[j].indexOf(":Header") > 0);
        gap = (Touren[j].indexOf("---") == 0);
        if (gap)                tourGap (e);
        else if (header)        tourHeader (e, trackButName(-1,j));
        else {
          t = (Touren[j].length <= 0) ? "" : ("gpxview2:" + mapID + ":lade:" + trackFile(-1,j) + ":" + mapType(-1,j));
          if (t.length > 0) {           // Tourendateiname vorhanden
            tourBut(e,t,trackFileName(-1,j),trackButName(-1,j));
          }
        }
      }
    } else {
      for (i = 0; i < TourenArr.length; ++i) {
        t = (TourenArr[i][0].length <= 0) ? "" : Verzeichnisse[i];
        if (t.length > 0) {             // Verzeichnis mit Inhalt
          kategorie(e,t);
        }
        for (j = 0; j < TourenArr[i].length; ++j) {
          header = (TourenArr[i][j].indexOf(":Header") > 0);
          gap = (TourenArr[i][j].indexOf("---") == 0);
          if (gap)                tourGap (e);
          else if (header)        tourHeader (e, trackButName(i,j));
          else {
            t = (TourenArr[i][j].length <= 0) ? "" : ("gpxview2:" + mapID + ":lade:" + trackFile(i,j) + ":" + mapType(i,j));
            if (t.length > 0) {         // Tourendateiname vorhanden
              tourBut(e,t,trackFileName(i,j),trackButName(i,j));
            }
          }
        }
      }
    }
  }
  //
  // Karte ---------------------------------------------------
  //
  e = document.getElementById(mapID);
  if (typeof e != "object" || e == null)      return;
  w = sw - kLeftV - kmainPR;
  h = sh - kTopV - hoehePV - abstand;
  with (e.style) {
    overflow = "hidden";
    position = "absolute";
    top = kTopV + "px";
    left = kLeftV + "px";
    width = w + "px";
    height = h + "px";
    fontFamily = fontFam;
    fontSize = FSizeV + "px";
    backgroundColor = hintergrund;
  }
  if (! DOM) {
    a = document.createElement("h2");
    a.style.textAlign = "center";
    a.style.marginTop = "100px";
    a.appendChild(document.createTextNode('Der verwendete Browser ist fuer dynamische Webseiten nicht geeignet :-('));
    e.appendChild(a);
  } else if (sw < 600 || sw < 380) {
    a = document.createElement("h2");
    a.style.textAlign = "center";
    a.style.marginTop = "100px";
    a.appendChild(document.createTextNode('Das Browserfenster ist zu klein :-('));
    e.appendChild(a);
  } else {
    a = document.createElement("h2");
    a.style.textAlign = "center";
    a.style.marginTop = "100px";
    a.appendChild(document.createTextNode('Wenn nach 20 Sekunden keine Karte kommt Browser Reload probieren ....'));
    e.appendChild(a);
    a = document.createAttribute("class");
    a.nodeValue = (actTrack.length > 0) ? ('gpxview1:'+actTrack+':'+actMap) : startTour();
    e.setAttributeNode(a);
    mClick();
  }
  //
  // Abstand -----------------------------------
  //
  e = document.getElementById("abstand");
  if (typeof e != "object" || e == null)      return;
  w = sw - kLeftV - kmainPR;
  with (e.style) {
    overflow = "hidden";
    position = "absolute";
    left = kLeftV + "px";
    top = (sh - hoehePV - abstand) + "px";
    width = w + "px";
    height = abstand + "px";
    backgroundColor = hintergrund;
  }
  //
  // Höhenprofil --------------------------------
  //
  e = document.getElementById(mapID + hpsuffix);
  if (typeof e != "object" || e == null)      return;
  w = sw - kLeftV - kmainPR - helpWiV;
  with (e.style) {
    overflow = "hidden";
    position = "absolute";
    left = kLeftV + "px";
    bottom = 0;
    width = w + "px";
    height = hoehePV + "px";
    fontFamily = fontFam;
    fontSize = FSizeV + "px";
    backgroundColor = hintergrund;
  }
  //
  // Buttons für Help, Impressum, .....
  //
  helpButs ();
  if (resize) {             // Screen resized
    loc = location.href;
    ps = loc.indexOf("?");
    if (ps > 0)   loc = loc.substring(0,ps);
    location.replace(loc + "?" + ((printView) ? "printView" : "reload") + ":"+actTrack+":"+actMap);
  }
}
//
// Browserfunktionalitaet ermitteln ------------------------------------------
//
// globale Variable
//
var COOKIE = false;       // Cookies enabled
var JAVA = false;         // Java enabled
var DOM = false;          // DOM verfügbar (aktueller Browser !)
var MSIE = false;         // IExplore
var MOZILLA = false;      // Mozilla, Netscape
var OPERA = false;        // Opera
var APPNAME = "";         // Browser-Name
var APPVERSION = "";      // Browser-Version
var BROWSER = "";         // brauchbare Browser-Version
//
// setzen der globalen Variablen ---------------------------------------------
//
function browserCheck(bt) {
  var i,s,v,moz,iex,ope,saf,chr;
  APPNAME = navigator.appName;
  APPVERSION = navigator.appVersion;
  USERAGENT = navigator.userAgent;
//alert (bt+"   APPNAME= "+APPNAME+"\nAPPVERSION= "+APPVERSION+"\nUSERAGENT= "+USERAGENT);
  JAVA = navigator.javaEnabled();
  COOKIE = cookieEnabled();
  BROWSER = "";
  MESSAGE = "";
  if (window.opera) {
    OPERA = true;
  }
  if (document.getElementById) {
    DOM = true;
  }
  if ((typeof document.all == "object") && !OPERA) {
    MSIE = true;
  }
  if (window.netscape && window.screen && !OPERA) {
    MOZILLA = true;
  }
  moz = "Mozilla Firefox";
  iex = "Microsoft Internet Explorer";
  ope = "Opera";
  saf = "Apple Safari";
  chr = "Google Chrome";
  HINWEIS = "";
  if (APPNAME.indexOf("Netscape") == 0 && USERAGENT.indexOf("Apple") < 0) {
     i = USERAGENT.indexOf("Firefox/");
     s = USERAGENT.substring(i+8);
     BROWSER = moz + " " + s;
     v = parseFloat(s);
     if (v < 3.5)     HINWEIS = "Mozilla Firefox V" + v;
  } else if (APPNAME.indexOf(iex) == 0) {
     i = USERAGENT.indexOf("MSIE ");
     s = USERAGENT.substring(i+5);
     s = s.substring(0,s.indexOf(";"));
     BROWSER = iex + " " + s;
     v = parseFloat(s);
     if (v < 8.0)     HINWEIS = "Internet Explorer V" + v;
  } else if (APPNAME.indexOf(ope) == 0) {
     i = USERAGENT.indexOf("Opera/");
     s = USERAGENT.substring(i+6);
     s = s.substring(0,s.indexOf("("));
     BROWSER = ope + " " + s;
     v = parseFloat(s);
     if (v < 9.8)     HINWEIS = "Opera V" + v;
  } else if (USERAGENT.indexOf("Apple") >= 0 && USERAGENT.indexOf("Chrome") < 0) {
     i = USERAGENT.lastIndexOf("Safari/");
     s = USERAGENT.substring(i+7);
     BROWSER = saf + " " + s;
     v = parseFloat(s);
     if (v < 531.0)   HINWEIS = "Apple Safari V" + v;
  } else if (USERAGENT.indexOf("Chrome") >= 0) {
     i = USERAGENT.lastIndexOf("Chrome/");
     s = USERAGENT.substring(i+7);
     s = s.substring(0,s.indexOf(" "));
     BROWSER = chr + " " + s;
     v = parseFloat(s);
     if (v < 3.0)     HINWEIS = "Google Chrome V" + v;
  }
  if (bt) {
    alert ("Ihr Browser:  " + BROWSER + ((HINWEIS == "") ? "" : ("\n" + HINWEIS)));
    location.replace (location.href.substring (0, location.href.indexOf ("?")));
  } else if (HINWEIS != "") {
    alert ("Ihr " + HINWEIS + " ist nicht aktuell - bitte aktualisieren !");
  }
}
//
// entferne alle childNodes eines Elementknotens
//
function deleteChilds(e) {
  var i,ch;
  if (! DOM)        return;
  if (e == null)    return;
  ch = e.childNodes;
  i = ch.length;
  while (--i >= 0) {
    e.removeChild(ch[i]);
  }
}
//
// Test ob Cookies enabled ---------------------------------------------------
//
function cookieEnabled() {
  var myCookie;
  if (navigator.cookieEnabled == true)          return(true);
  else if (navigator.cookieEnabled == false)    return(false);
  else {
    myCookie = "";
    document.cookie = "test";
    if (document.cookie)        myCookie = document.cookie;
    return(myCookie.indexOf("test") >= 0);
  }
}
//
// the end
//

