//---------------------------------------------------------------------------
var map;
var layer_mapnik;
var layer_markers;

//============================================================================

//---------------------------------------------------------------------------
function openAddress() {
   var layer_marker = null;
   var markertext = "";
   var lonlat = null;
   var zoom = 15;
   var i = 0;
   var doctitle = document.title;

   map = new OpenLayers.Map('map', {
        projection: new OpenLayers.Projection("EPSG:900913"),
        displayProjection: new OpenLayers.Projection("EPSG:4326"),
        controls: [
            new OpenLayers.Control.MouseDefaults(),
            new OpenLayers.Control.ScaleLine(),
            new OpenLayers.Control.Permalink(),
            new OpenLayers.Control.KeyboardDefaults()
            ],
        maxExtent:
            new OpenLayers.Bounds(-20037508.34,-20037508.34,
                                    20037508.34, 20037508.34),
        numZoomLevels: 18,
        maxResolution: 156543,
        units: 'meters'
    });

   layer_mapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik");
   map.addLayer(layer_mapnik);

   layer_marker = new OpenLayers.Layer.Markers("Markers", {
                         projection: new OpenLayers.Projection("EPSG:4326"),
                         visibility: true, displayInLayerSwitcher: false });

   map.addLayer(layer_marker);
   lonlat = map.getCenter();

   if(!lonlat) {
      document.title = doctitle + " " + koords[i].name;

      zoom = 8;
      var lnlt = genLonLat(koords[i].coords.lon,
               koords[i].coords.lat);

      map.setCenter(lnlt, zoom);

      var ll = lnlt.clone();
      ll.transform(map.projection, map.displayProjection);

      for (j = 1; j <= 7; j++) {
         markertext = koords[j].markertext;
         lnlt = genLonLat(koords[j].coords.lon,
               koords[j].coords.lat);
         addMarker(layer_marker, lnlt, markertext);
      }
   } else {
      i = getBeratungIndex(lonlat);

      if (i == -1) {
         var ll = lonlat.clone();
	 ll.transform(map.projection, map.displayProjection);

         document.title = doctitle + " " + "unbekannte Adresse";
         markertext = "<b>unbekannte Adresse</b><br/>Längengrad: " + ll.lon +
	              "<br/>Breitengrad: " + ll.lat + "<br/>Kurz: " + ll.toShortString();

         addMarker(layer_marker, lonlat, markertext);
      } else {
         document.title = doctitle + " " + koords[i].name;
         markertext = koords[i].markertext;

         lonlat = genLonLat(koords[i].coords.lon,
                  koords[i].coords.lat);

         addMarker(layer_marker, lonlat, markertext);
      }
   }

}

//============================================================================

//---------------------------------------------------------------------------
function genLonLat(lon, lat) {
   var lonlat = new OpenLayers.LonLat();

   lonlat.transform(map.projection, map.displayProjection);
   lonlat.lon = lon;
   lonlat.lat = lat;
   lonlat.transform(map.displayProjection, map.projection);

   return lonlat;
}

//============================================================================

//---------------------------------------------------------------------------
function stripNumbers(num) {
   var Ausdruck = /(\d+)\.(\d+)/;
   Ausdruck.exec(num);

   return (RegExp.$1 + "." + RegExp.$2.substr(0,2));
}

//============================================================================

//---------------------------------------------------------------------------
function getBeratungIndex(ll)
{
   var lonlat = ll.clone();
   lonlat.transform(map.projection, map.displayProjection);
   var lon = stripNumbers(lonlat.lon);
   var lat = stripNumbers(lonlat.lat);

   for (var i in koords) {
      var blon = stripNumbers(koords[i].coords.lon);
      var blat = stripNumbers(koords[i].coords.lat);

      // alert (i + " :: " + blon + " : " + blat + " :: " + lon + " : " + lat);
      if (lon == blon && lat == blat) {
         return i;
      }
   }

   return -1;
}

//============================================================================

//---------------------------------------------------------------------------
function addMarker(layer, ll, popupContentHTML) {

    var feature = new OpenLayers.Feature(layer, ll);
    feature.closeBox = true;
    feature.popupClass = OpenLayers.Class(OpenLayers.Popup.FramedCloud);
    feature.data.popupContentHTML = popupContentHTML;
    feature.data.overflow = "hidden";

    var marker = new OpenLayers.Marker(ll);
    marker.feature = feature;

    var markerClick = function(evt) {
        if (this.popup == null) {
            this.popup = this.createPopup(this.closeBox);
            map.addPopup(this.popup);
            this.popup.show();
        } else {
            this.popup.toggle();
        }
        OpenLayers.Event.stop(evt);
    };
    marker.events.register("mousedown", feature, markerClick);

    layer.addMarker(marker);
    map.addPopup(feature.createPopup(feature.closeBox));
}

//============================================================================

//---------------------------------------------------------------------------
function getUrl(index) {
   var path = window.location.pathname;
   path = path.substring(0,path.lastIndexOf("/"));
   var url = window.location.protocol + "//" + window.location.hostname + path +
             "/map.html?zoom=15&lat=" + koords[index].coords.lat +
             "&lon=" + koords[index].coords.lon + "&layers=BT";

   return url;
}

//============================================================================

//---------------------------------------------------------------------------
function getLeftPos(breite) {
    return ( screen.width ) ? ( screen.width - breite ) / 2 : 0;
}

//============================================================================

//---------------------------------------------------------------------------
function getTopPos(hoehe) {
    return ( screen.height ) ? ( screen.height - hoehe ) / 2 : 0;
}

//============================================================================

//---------------------------------------------------------------------------
function linkMapUrl(index) {
   var url = getUrl(index);
   var breite = "61em";
   var hoehe = "41em";

   raam(url, "white", index, breite, hoehe);
}

//---------------------------------------------------------------------------
function loadMapUrl(index) {
   var url = getUrl(index);
   location.href = url;
}

//============================================================================

//---------------------------------------------------------------------------
function getAddress(index) {
   var text = koords[index].name + ', ' + koords[index].address;
   return text;
}

//============================================================================

//---------------------------------------------------------------------------
// Test !!!
//---------------------------------------------------------------------------

var mapframe;

function raam(url, color, index, width, height) {
   var titlecolor = "black";
   mapframe = document.getElementById("mapframe");

   if(!width){
      width = 500;
      height = 325;
   }

   var inside = "<iframe frameborder=0 name=\"Umgebungskarte\" width='100%'" +
            " height='100%'" + " src=\"" + url + "\" scrolling=\"auto\" ></iframe>";

   if(!color)
      color = "silver";

   mapframe.style.visibility = "visible";
   mapframe.style.position = "absolute";
   mapframe.style.left = "1em";
   mapframe.style.top = "1em";
   mapframe.style.width = width;
   mapframe.style.height = height;

   var output = "<table cellpadding=0 cellspacing=0 width='100%' height='100%' border=0>";
   output += "<tr>";

   output += "<td style='height:1.5em;text-align:left;font-weight:bold;padding-left:1em;' bgcolor='silver' width='70%'>";
   output += koords[index].name;
   output += "</td>";


   output += "<td style='height:1.5em;text-align:right;padding-right:1em;' bgcolor='silver' width='30%'>";
   output += "<a style='color:black;font-weight:bold;' href='javascript:closeraam()'>Fenster schließen</a>";
   output += "</td></tr>";

   output += "<tr><td width=100% height=100% colspan=2 bgcolor='" + color + "'>" + inside;
   output += "</td></tr>";

   output += "<tr>";
   output += "<td style='height:1.5em;text-align:center;' colspan=2 bgcolor='silver' width='100%'>";
   output += "<a style='color:black;font-weight:bold;' href='javascript:open_window(\"" + url + "\")'>Druckversion</a>";
   output += "</td></tr></table>";

   mapframe.innerHTML = output;
}

//=========================================================================

function closeraam() {
   mapframe.style.visibility="hidden";
}

//=========================================================================

function open_window(url) {
   window.open(url, "");
}

