// Globale Variablen
//var startCenterLatitude = 47.5299;        //Muttenz
//var startCenterLongitude = 7.6434;        //Muttenz
var startCenterLatitude = 46.81435;       //Schweiz
var startCenterLongitude = 8.22395;       //Schweiz
//var startZoom = 17;                       //Muttenz
var startZoom = 7;                       //Schweiz
var map;
var gmarkers = [];

var activeMarker;

var loadedOids = [];
var firstLoading=true;

var maxlng;
var minlng;
var maxlat;
var minlat;

var newIcon = createIcon("img/yellowIcon.PNG");
var standardIcon = createIcon("img/blueIcon.PNG");
var userIcon = createIcon("img/greenIcon.PNG");
var digitizeIcon = createIcon("img/greenIcon.PNG");

var digitizeMarker;

var aktivBlink;            //(Variable für Set- und Clear-Intervall)
var BlinkCounter;
var BlinkMarker;
var BlinkMarkerLatLng;

var xmlHttp = createXmlHttpRequestObject();

window.onresize = handleResize;
window.onload = init;

var BrowserDetect;

function init() {
        showdiv('idee');
        handleResize();
//********************************************************************************************************************************************************
// Map-Setup
//********************************************************************************************************************************************************
	map = new GMap2(document.getElementById("map"));
	map.addControl(new GLargeMapControl());
	map.addControl(new GMapTypeControl());
	map.enableScrollWheelZoom();

	map.setCenter(new GLatLng(startCenterLatitude, startCenterLongitude), startZoom);
	map.setMapType(G_HYBRID_MAP);

//********************************************************************************************************************************************************
// Browser-Erkennung
//********************************************************************************************************************************************************
  BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();
//************************************************************************************************************************************************
	//Speichern der ClientLocation in der DB
	if (google.loader.ClientLocation){
		var clientLat = google.loader.ClientLocation.latitude;
		var clientLng = google.loader.ClientLocation.longitude;
		var country = google.loader.ClientLocation.address.country;
		var region = google.loader.ClientLocation.address.region;
		var city = google.loader.ClientLocation.address.city;
		var getVars = "?lat="+clientLat+"&lng="+clientLng+"&country="+country+"&region="+region+"&city="+city+"&browser="+BrowserDetect.browser+"&version="+BrowserDetect.version;

		var request = GXmlHttp.create();
		if (request.readyState == 4 || request.readyState == 0){
		  request.open('GET', '_stats.php'+ getVars, true);
		  request.onreadystatechange = function() {
		  } //function
		  request.send(null);
		} //if
	}//if
//************************************************************************************************************************************************

    	getAreaFilterParameter();

        //******************************************************************************************************************************************************
        // MOVEEND-Listener-Setup
        //******************************************************************************************************************************************************
        GEvent.addListener(map, "moveend", function() {
                getAreaFilterParameter();
        });

        //******************************************************************************************************************************************************
        // ZOOMEND-Listener-Setup
        //******************************************************************************************************************************************************
        GEvent.addListener(map, "zoomend", function() {
            //alert("zooming");
                getAreaFilterParameter();
                map.clearOverlays();
                loadedOids = new Array();
        });

        //*******************************************************************************************************************************************************
        // CLICK-Listener-Setup
        //*******************************************************************************************************************************************************
	GEvent.addListener(map, "click", function(overlay, latlng) {
            openDigitizeWindow(overlay, latlng);
            activeMarker = overlay;
	});

        //*******************************************************************************************************************************************************
        // INFOWINDOWCLOSE-Listener-Setup
        //*******************************************************************************************************************************************************
	GEvent.addListener(map, "infowindowclose", function() {
            BlinkCounter=6;
            blinkingIcon();
            //map.removeOverlay(digitizeMarker);
	});

        //*******************************************************************************************************************************************************
        // MOUSEMOVE-Listener-Setup
        //*******************************************************************************************************************************************************
        //Koordinaten bestimmen
        GEvent.addListener(map, "mousemove", function(latlng) {
        // Coordinate-Transformation from WGS84 to CH1903
            var lat = (latlng.lat() * 3600 - 169028.66)/10000;
            var lng = (latlng.lng() * 3600 - 26782.5)/10000;
            //Umrechnung Länge/Breite --> SwissProj Koordinaten    (x entspricht lon, y entspricht lat)
            var newY = Math.round(200147.07 + 308807.95 * lat + 3745.25 * lng * lng + 76.63 * lat * lat + 119.79 * lng * lng * lng - 194.56 * lat * lng  * lng);
            var newX = Math.round(600072.37 + 211455.93 * lng - 10938.51 * lng * lat - 0.36 * lng * lat * lat - 44.54 * lng * lng * lng);
            document.getElementById("CurrentCoordCH").innerHTML = newX + " / " + newY;
            document.getElementById("CurrentCoordWorld").innerHTML = runden(latlng.lng(),4) + " / " + runden(latlng.lat(),4);
        });

      // ====== set up marker mouseover tooltip div ======
      //var tooltip = document.createElement("div");
      //document.getElementById("map").appendChild(tooltip);
      document.getElementById("tooltip").style.visibility="hidden";

      // == show or hide the categories initially ==
      show("newGeocode");
      show("myGeocode");
      show("communityGeocode");
}

//********************************************************************************************************************************************************
// Räumlichen Filter-Parameter berechnen
//********************************************************************************************************************************************************
function getAreaFilterParameter() {
     bounds = map.getBounds();
     sw = bounds.getSouthWest();
     ne = bounds.getNorthEast();
     center = map.getCenter();
     minlat = sw.lat();
     minlng = sw.lng();
     maxlat = ne.lat();
     maxlng = ne.lng();

     if(map.getZoom() < 17) {
       map.clearOverlays();
       loadedOids = new Array();
       firstLoading=true
     } else {
       retrieveMarkers(maxlng, minlng, maxlat, minlat);
     }
}

//********************************************************************************************************************************************************
// Set the Map-Center on the selected Search-Entry
//********************************************************************************************************************************************************
function setCenterOnSelect(Coords) {
    var zoomLevel = map.getZoom();
    if (zoomLevel < 17) {zoomLevel = 17;}
    var werte = Coords.split(",");
    var center = new GLatLng(werte[0], werte[1]);
    map.setCenter(center, zoomLevel);
    blinkingIconInitial(center.lat(), center.lng());
}

//********************************************************************************************************************************************************
// Check if there is any Entry in the selectAddress
//********************************************************************************************************************************************************
function setMapOnDblClick() {
    if (document.getElementById('selectAddress').options.length>0) {
       setCenterOnSelect(document.getElementById('selectAddress').options[document.getElementById('selectAddress').selectedIndex].value) ;
    }
}

//********************************************************************************************************************************************************
// Create-Icon-Funktion
//********************************************************************************************************************************************************
function createIcon(image) {
        var icon = new GIcon();
        icon.image = image;
	icon.iconSize = new GSize(15, 15);
	icon.iconAnchor = new GPoint(7.5, 7.5);
	icon.infoWindowAnchor = new GPoint(7.5, 7.5);
	if (image!="img/greenIcon.PNG"){
    	    icon.dragCrossImage = "img/cross.PNG";
            icon.dragCrossSize = new GSize(15, 15);
            icon.maxHeight = 20
            icon.dragCrossAnchor = new GPoint(7.5, 7.5);
        }
        return icon;
}

//********************************************************************************************************************************************************
// Create-Blink-Icon-Funktion
//********************************************************************************************************************************************************
function createBlinkIcon(image) {
        var icon = new GIcon();
        icon.image = image;
	icon.iconSize = new GSize(100, 100);
	icon.iconAnchor = new GPoint(50, 50);
        return icon;
}

//********************************************************************************************************************************************************
// Blink-Funktionen
//********************************************************************************************************************************************************
function blinkingIconInitial(lat, lng) {
   BlinkCounter=0;
   BlinkMarkerLatLng = new GLatLng(lat, lng);
   aktivBlink = window.setInterval("blinkingIcon();", 500);
}

function blinkingIcon() {
  switch (BlinkCounter) {
    case 1:
      var blinkIcon = createBlinkIcon("img/Ring1.PNG");
      BlinkMarker = new GMarker(BlinkMarkerLatLng, blinkIcon);
      map.addOverlay(BlinkMarker);
      break;
    case 2:
      map.removeOverlay(BlinkMarker);
      var blinkIcon = createBlinkIcon("img/Ring2.PNG");
      BlinkMarker = new GMarker(BlinkMarkerLatLng, blinkIcon);
      map.addOverlay(BlinkMarker);
      break;
    case 3:
      map.removeOverlay(BlinkMarker);
      var blinkIcon = createBlinkIcon("img/Ring3.PNG");
      BlinkMarker = new GMarker(BlinkMarkerLatLng, blinkIcon);
      map.addOverlay(BlinkMarker);
      break;
    case 4:
      map.removeOverlay(BlinkMarker);
      var blinkIcon = createBlinkIcon("img/Ring4.PNG");
      BlinkMarker = new GMarker(BlinkMarkerLatLng, blinkIcon);
      map.addOverlay(BlinkMarker);
      break;
    case 5:
      map.removeOverlay(BlinkMarker);
      var blinkIcon = createBlinkIcon("img/Ring5.PNG");
      BlinkMarker = new GMarker(BlinkMarkerLatLng, blinkIcon);
      map.addOverlay(BlinkMarker);
      break;
    case 6:
      map.removeOverlay(BlinkMarker);
      window.clearInterval(aktivBlink);
      return;
      break;
  }
  BlinkCounter = BlinkCounter + 1;
}

//********************************************************************************************************************************************************
// Ein- und Ausblendfunktionalität der Legende
//********************************************************************************************************************************************************
      // == shows all markers of a particular category, and ensures the checkbox is checked ==
      function show(category) {
        for (var i=0; i<gmarkers.length; i++) {
          if (gmarkers[i].mycategory == category) {
            gmarkers[i].show();
          }
        }
        // == check the checkbox ==
        document.getElementById(category+"Box").checked = true;
      }

      // == hides all markers of a particular category, and ensures the checkbox is cleared ==
      function hide(category) {
        for (var i=0; i<gmarkers.length; i++) {
          if (gmarkers[i].mycategory == category) {
            gmarkers[i].hide();
          }
        }
        // == clear the checkbox ==
        document.getElementById(category+"Box").checked = false;
        // == close the info window, in case its open on a marker that we just hid
        map.closeInfoWindow();
      }

      // == a checkbox has been clicked ==
      function boxclick(box,category) {
        if (box.checked) {
          show(category);
        } else {
          hide(category);
        }
      }

//********************************************************************************************************************************************************
// Tooltip-Funktion
//********************************************************************************************************************************************************
      // ====== This function displays the tooltip ======
      // it's called from an icon mousover
function showTooltip(marker) {
        var splited = marker.title.split("*");
      	document.getElementById("tooltip").innerHTML = splited[0];
	var markerAnchor=map.getCurrentMapType().getProjection().fromLatLngToPixel(marker.getPoint(),map.getZoom());    //PixelPosition des Markers
        var west = map.getBounds().getSouthWest().lng();
        var north = map.getBounds().getNorthEast().lat();
        var northWest = new GLatLng(north, west);
        var northWestXY = map.getCurrentMapType().getProjection().fromLatLngToPixel(northWest,map.getZoom());  //PixelPosition der Linkenoberen Kartenecke
        var delta = new GPoint(markerAnchor.x - northWestXY.x, markerAnchor.y - northWestXY.y);
        var tooltipAnchor = new GSize(delta.x+390, delta.y+45);    //Korrektur der Pixelposition durch linke obere DIV-Tag-Ecke
        var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, tooltipAnchor);
        pos.apply(document.getElementById("tooltip"));
	document.getElementById("tooltip").style.visibility="visible";
}

//********************************************************************************************************************************************************
// Create-Marker-Funktion
//********************************************************************************************************************************************************
function createMarker(latlng, html, icon, category, tooltiptext) {
	var marker = new GMarker(latlng, {icon:icon, draggable:true});
	marker.mycategory = category;
        marker.title = tooltiptext;

// Our info window content - für 1 Registerkarte
        var infoTabs = [
          new GInfoWindowTab("Tab #1", html)
        ];

	GEvent.addListener(marker, 'click', function() {
		marker.openInfoWindowHtml(html);
	  });

        //Funktionen für Verschieben der Marker
        GEvent.addListener(marker, "dragstart", function() {
          document.getElementById("tooltip").style.visibility="hidden"
          });

        GEvent.addListener(marker, "dragend", function() {
          //marker.openInfoWindowHtml("Just bouncing along...");
          updatemarker(latlng, html, marker);
          });

        //  ======  The new marker "mouseover" and "mouseout" listeners  ======
        GEvent.addListener(marker,"mouseover", function() {
          showTooltip(marker);
          });

        GEvent.addListener(marker,"mouseout", function() {
          document.getElementById("tooltip").style.visibility="hidden"
          });
        gmarkers.push(marker);
	return marker;
}

//*******************************************************************************************************************************************************
// Open-Digitize-InfoWindow for Map-Click-Listener
//*******************************************************************************************************************************************************
function openDigitizeWindow(overlay, latlng) {
      //nur digitalisieren, wenn Zoomlevel iO und noch kein Marker vorhanden (!Overlay)
      if(map.getZoom() <= 16) {
       return;
      }
       if(!overlay) {
    			//create an HTML DOM form element
    			var inputForm = document.createElement("form");
    			inputForm.setAttribute("action","");
    			inputForm.onsubmit = function() {storeMarker(); return false;};

    			//retrieve the longitude and lattitude of the click point
    			var lng = latlng.lng();
    			var lat = latlng.lat();

                        blinkingIconInitial(lat, lng);
                        //digitizeMarker = new GMarker(new GLatLng(lat, lng), digitizeIcon);
                        //map.addOverlay(digitizeMarker);

    			//Werte aus den Suchfeldern auslesen und bei Texten auf Grossschreibung prüfen / verbessern
    			var str = document.getElementById("InputSTR").value;
    			var hnr = document.getElementById("InputHNR").value;
    			//var adrzusatz = document.getElementById("InputADRZUSATZ").value;
    			var plz = document.getElementById("InputPLZ").value;
    			var ort = document.getElementById("InputORT").value;
    			var usr = document.getElementById("InputUSR").value;
    
/**traduction**/
    			inputForm.innerHTML = '<table bgcolor="#FFFFFF" id="gm_infowin" ><tr><td colspan="2" bgcolor="#DAE0D2" style="font-weight:bold">NEUE ADRESSE</td></tr>'
                        + '<tr><td>Strasse:</td>'
                        + '<td><input type="text" value="' + str + '" id="newStr" style="width:160px;"/></td></tr>'
                        + '<tr><td>Hausnummer:</td>'
    			+ '<td><input type="text" value="' + hnr + '" id="newHnr" style="width:50px;"/></td></tr>'
                        + '<tr><td>Adresszusatz:</td>'
    			+ '<td><input type="text" value="" id="newAdrzusatz" style="width:160px;"/></td></tr>'
                        + '<tr><td>PLZ: </td>'
                        + '<td><input type="text" value="' + plz + '" id="newPLZ" style="width:50px;"/></td></tr>'
    			+ '<tr><td>Ort:</td>'
                        + '<td><input type="text" value="' + ort + '" id="newOrt" style="width:160px;"/></td></tr>'
                        + '<tr><td>Erfasser:</td>'
                        + '<td><input type="text" value="' + usr + '" id="newUsr" style="width:160px;"/></td></tr>'
                        + '<tr><td colspan="2">'
    			+ '<input type="submit" value="Speichern"/>'
    			+ '<input type="hidden" id="newLng" value="' + lng + '"/>'
    			+ '<input type="hidden" id="newLat" value="' + lat + '"/>'
    			+ '</td></tr></table>';
/* bis hierher!!! */

    			map.openInfoWindow(latlng,inputForm);

     }
}

//********************************************************************************************************************************************************
// Initialgeocoder (Kartensuche)
//********************************************************************************************************************************************************
function searchaddress () {
    var geo = new GClientGeocoder();
    var address="";
    document.getElementById("selectAddress").innerHTML="";
/**traduction**/
    document.getElementById("Anzahl").innerHTML = "Suchresultate:";
    document.getElementById("goToEntry").disabled = true;

    // ====== Array for decoding the failure codes ======
      var reasons=[];
      reasons[G_GEO_SUCCESS]            = "Success";
      reasons[G_GEO_MISSING_ADDRESS]    = "Missing Address: The address was either missing or had no value.";
      reasons[G_GEO_UNKNOWN_ADDRESS]    = "Unknown Address:  No corresponding geographic location could be found for the specified address.";
      reasons[G_GEO_UNAVAILABLE_ADDRESS]= "Unavailable Address:  The geocode for the given address cannot be returned due to legal or contractual reasons.";
      reasons[G_GEO_BAD_KEY]            = "Bad Key: The API key is either invalid or does not match the domain for which it was given";
      reasons[G_GEO_TOO_MANY_QUERIES]   = "Too Many Queries: The daily geocoding quota for this site has been exceeded.";
      reasons[G_GEO_SERVER_ERROR]       = "Server error: The geocoding request could not be successfully processed.";

      var str=document.getElementById("InputSTR").value;
      var hnr=document.getElementById("InputHNR").value;
      var plz=document.getElementById("InputPLZ").value;
      var ort=document.getElementById("InputORT").value;

    // Überprüfung der PLZ auf Nummerik und 4-stellig
    if (plz!="") {
        if (String(Number(plz))=="NaN" || plz.length<4 || plz.length>5) {
/**traduction**/
           alert ("Ihre PLZ-Eingabe ist nicht korrekt! Bitte überprüfen.");
           return;
        }
    }

    // Korrektur der Eingabeparameter bezüglich Gross- und Kleinschreibung
    str=checkCapital(str);
    document.getElementById("InputSTR").value=str;
    ort=checkCapital(ort);
    document.getElementById("InputORT").value=ort;

    // Geokodier-String zusammensetzten
    if (str!="") {address = str + ' ';}
    if (hnr!="") {address = address + hnr + ' ';}
    if (plz!="") {address = address + plz + ' ';}
    if (ort!="") {address = address + ort + ' ';}
    if (address=="") {
/**traduction**/
       alert ("Sie haben keine Suchparameter eingegeben!");
       return;
    }

    // ====== Perform the Geocoding ======
        // Viewport für Suche auf ganze Schweiz setzten
        //var southwest = new GLatLng(45.81827218518002, 5.9497833251953125);
        //var northeast = new GLatLng(47.81038774105833, 10.498123168945312);
        // Viewport für Suche auf ganzen Deutschsprachigen Raum setzten
        var southwest = new GLatLng(45, 5);
        var northeast = new GLatLng(55, 17);
        var bounds = new GLatLngBounds(southwest, northeast);
        geo.setViewport(bounds);

//        geo.getLocations(address + ", Schweiz", function (result)
        geo.getLocations(address , function (result)
          {
            // If that was successful
            if (result.Status.code == G_GEO_SUCCESS) {
              // How many resuts were found
/**traduction**/
              document.getElementById("Anzahl").innerHTML = "Suchresultate: (" +result.Placemark.length +")";

              // Loop through the results
              for (var i=0; i<result.Placemark.length; i++) {
                var selectAddress;
                var newOption;
                var p = result.Placemark[i].Point.coordinates;
                var marker = new GMarker(new GLatLng(p[1],p[0]));

                  selectAddress=document.getElementById("selectAddress");
                  newOption = document.createElement("option");
                  newOption.appendChild(document.createTextNode((i+1)+": "+ result.Placemark[i].address));
                  newOption.value = p[1] + "," + p[0];
                  selectAddress.appendChild(newOption);

              }
              if (result.Placemark.length>0) {
                //document.getElementById("selectAddress").options[0].selected=true;
                document.getElementById("selectAddress").options[0].defaultSelected=true;
                document.getElementById("goToEntry").disabled = false;
              }

              if (result.Placemark.length==1) {
              // centre the map on the single result
                var p = result.Placemark[0].Point.coordinates;
                map.setCenter(new GLatLng(p[1],p[0]),17);
                blinkingIconInitial(p[1], p[0]);

              }
            }
            // ====== Decode the error status ======
            else {
              var reason="Code "+result.Status.code;
              if (reasons[result.Status.code]) {
                reason = reasons[result.Status.code]
              }
              //alert('Could not find "'+address+ '" ' + reason);
              alert('"'+address+ '" nicht gefunden: ' + reason);
            }
          }
        );
}
//********************************************************************************************************************************************************
// Überprüfung PLZ
//********************************************************************************************************************************************************
function checkPLZ(feldId) {
  if (String(Number(document.getElementById(feldId).value))=="NaN" || document.getElementById(feldId).value.length<4 || document.getElementById(feldId).value.length>5) {
/**traduction**/
    alert ("Ihre PLZ-Eingabe ist nicht korrekt! Bitte überprüfen.");
    return false;
  }
}

//********************************************************************************************************************************************************
// Search-Geocode-Funktion
//********************************************************************************************************************************************************
function searchGeocode() {
  document.getElementById("selectAddress").innerHTML=""
/**traduction**/
  document.getElementById("Anzahl").innerHTML = "Suchresultate:";
  document.getElementById("goToEntry").disabled = true;

  // Überprüfung der PLZ auf Nummerik und 4-stellig
  if (document.getElementById("InputPLZ").value!="") {
    if (checkPLZ("InputPLZ")==false) {
      return;
    }
  }

  // Bedingungen abfüllen  / Gross-/Kleinschreibung korrigieren
  var strasse = checkCapital(document.getElementById("InputSTR").value);
  document.getElementById("InputSTR").value = strasse;
  var hnr = document.getElementById("InputHNR").value;
  var plz = document.getElementById("InputPLZ").value;
  var ort = checkCapital(document.getElementById("InputORT").value);
  document.getElementById("InputORT").value = ort;

  if (strasse=="" && hnr=="" && plz=="" && ort=="") {
/**traduction**/
    alert("Sie haben keine Kriterien für die Suche in OpenAddresses.ch eingegeben!");
    return;
  }

//alert(BrowserDetect.browser + "/" + BrowserDetect.version);
  var getVars =  "?strasse=" + strasse + "&hnr=" + hnr + "&adrzusatz=&plz=" + plz + "&ort=" + ort + "&browser=" + BrowserDetect.browser + "&version=" + BrowserDetect.version;

  if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0){
    xmlHttp.open('GET', 'searchGeocode.php'+ getVars, true);   // Starte konventionelle Suchanfrage
    xmlHttp.onreadystatechange = function() {
    if (xmlHttp.readyState == 4) {
      if (xmlHttp.status == 200){
        var xml = xmlHttp.responseXML;
        if(xml) {
          punkte = xml.getElementsByTagName("pnt");

          //alert("Anzahl ResultSets: "+ punkte.length)

          if (punkte.length<1) {  // Wenn keine Resultate: Anfrage mit weichen Operatoren (%...%) starten

            //alert("Weiche Suche wird gestartet!")

            var xmlHttp2 = createXmlHttpRequestObject();
            if (xmlHttp2.readyState == 4 || xmlHttp2.readyState == 0){
              xmlHttp2.open('GET', 'searchGeocodeByParts.php'+ getVars, true);     //Starte Anfrage mit weichen Operatoren
              xmlHttp2.onreadystatechange = function() {
                if (xmlHttp2.readyState == 4) {
                  if (xmlHttp2.status == 200){
                    xml = xmlHttp2.responseXML;
                    if(xml) {
                      punkte = xml.getElementsByTagName("pnt");
                      if (punkte.length>0) {    // Wenn Resultate mit weichen Operatoren vorhanden: Ausgabe in Formular
/**traduction**/        document.getElementById("Anzahl").innerHTML = "Suchresultate: (" + punkte.length + ")";
                        searchGeocodePart2(xml);
                      }else{ // Wenn auch mit weichen Operatoren keine Resulate: Anfrage ob Kartensuche soll ausgeführt werden
/**traduction**/        if (confirm("Die gesuchte Adresse existiert noch nicht! Soll OpenAddresses.ch eine Kartensuche durchführen, damit Sie die gesuchte Adresse gleich in der Karte erfassen können?")) {
                          searchaddress();
                        } //if
                      } //else
                    } //if
                    } //if
                  } //if
                } //function
                xmlHttp2.send(null);
              } //if
            } //if
            else { //Wenn Resulate mit konventioneller Anfrage vorliegen: Ausgabe in Formular
/**traduction**/  document.getElementById("Anzahl").innerHTML = "Suchresultate: (" + punkte.length + ")";
                  searchGeocodePart2(xml);
            } //else
          } //if
        } //if
      } //if
    } //function
    xmlHttp.send(null);
  } //if
}


function searchGeocodePart2(xml) {          // Ausgabe der Resultete in Formular
  hoch = xml.getElementsByTagName("hoch");
  rechts = xml.getElementsByTagName("rechts");
  strasse = xml.getElementsByTagName("strasse");
  hnr = xml.getElementsByTagName("hnr");
  plz = xml.getElementsByTagName("plz");
  ort = xml.getElementsByTagName("ort");

  if(punkte.length>0) {
    var selectAddress;
    var newOption;
    for(i=0;i<punkte.length;i++) {
      lat = hoch[i].firstChild.data;
      lng = rechts[i].firstChild.data;
      stra = strasse[i].firstChild.data;
      hanr = hnr[i].firstChild.data;
      polz = plz[i].firstChild.data;
      orts = ort[i].firstChild.data;
 
      var listEntry = stra + " " + hanr + ", " + polz + " " + orts;
 
      selectAddress=document.getElementById("selectAddress");
      newOption = document.createElement("option");
      newOption.appendChild(document.createTextNode((i+1) + ": "+ listEntry));
      newOption.value = lat + "," + lng;
      selectAddress.appendChild(newOption);
    }
    document.getElementById("selectAddress").options[0].defaultSelected=true;
    document.getElementById("goToEntry").disabled = false;

    if (punkte.length==1) { // centre the map on the single result
      map.setCenter(new GLatLng(hoch[0].firstChild.data,rechts[0].firstChild.data),17);
      blinkingIconInitial(hoch[0].firstChild.data,rechts[0].firstChild.data);
    }
  } //if
}

//********************************************************************************************************************************************************
// Prüfung, ob Feld nicht leer ist
//********************************************************************************************************************************************************
function checkIsNotEmty(FeldId, FeldName) {
  if (FeldId=="newHnr") {
     if (document.getElementById(FeldId).value=='') {
/**traduction**/
        alert("Falls die zu speichernde Adresse keine Hausnummer hat, geben sie einen Bindestrich ('-') ein!");
        return false;
     }
  } else {
     if (document.getElementById(FeldId).value=='') {
/**traduction**/
        alert("Das Feld '" + FeldName + "' ist leer! Zum Speichern müssen alle Felder befüllt sein.")
        return false;
     }
  }
}

//********************************************************************************************************************************************************
// Marker-Speicher-Funktion
//********************************************************************************************************************************************************
function storeMarker(){
/**traduction?????????????????????????**/
    if (checkIsNotEmty("newStr", "Strasse")==false) return;
    if (checkIsNotEmty("newHnr", "Hausnummer")==false) return;
    if (checkIsNotEmty("newPLZ", "PLZ")==false) return;
    if (checkIsNotEmty("newOrt", "Ort")==false) return;
    if (checkIsNotEmty("newUsr", "Erfasser")==false) return;

    //Check PLZ auf 4-stellig
    if (checkPLZ("newPLZ")==false) return;

    var lng = document.getElementById("newLng").value;
    var lat = document.getElementById("newLat").value;

    //*******************************************************************************************
    //Prüfe ob Geocode bereits in DB existiert
    var GeocodeAlreadyExist="false";

    var getVars = "?strasse=" + document.getElementById("newStr").value
    + "&hnr=" + document.getElementById("newHnr").value
    + "&adrzusatz=" + document.getElementById("newAdrzusatz").value
    + "&plz=" + document.getElementById("newPLZ").value
    + "&ort=" + document.getElementById("newOrt").value
    + "&browser=" + BrowserDetect.browser
    + "&version=" + BrowserDetect.version;

    var request = GXmlHttp.create();

     if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0){

      	xmlHttp.open('GET', 'searchGeocode.php'+ getVars, true);

	//tell the request what to do when the state changes.
	xmlHttp.onreadystatechange = function() {
	  if (xmlHttp.readyState == 4) {
            if (xmlHttp.status == 200){
              var xmlResponse = xmlHttp.responseXML.documentElement;
              var xml = xmlHttp.responseXML;

              if(xml) {
                  //Namen entsprechen den Spaltennamen in der DB
                  punkte = xml.getElementsByTagName("pnt");
                  strasse = xml.getElementsByTagName("strasse");
                  hnr = xml.getElementsByTagName("hnr");
                  adrzusatz = xml.getElementsByTagName("adrzusatz");
                  plz = xml.getElementsByTagName("plz");
                  ort = xml.getElementsByTagName("ort");
                  hoch = xml.getElementsByTagName("hoch");
                  rechts = xml.getElementsByTagName("rechts");


                  if(punkte.length>0) {
                      stra = strasse[0].firstChild.data;
                      hanr = hnr[0].firstChild.data;
                      adrzus = adrzusatz[0].firstChild.data;
                      polz = plz[0].firstChild.data;
                      orts = ort[0].firstChild.data;
                      lat = hoch[0].firstChild.data;
                      lng = rechts[0].firstChild.data;

                      GeocodeAlreadyExist="true";

/**traduction**/
                      if(confirm("Ein Datensatz mit der Adresse " + stra + " " + hanr + ", "  + adrzus + ", " + polz + " " + orts + " existiert bereits!\nWollen Sie sich diesen ansehen?")) {
                          map.closeInfoWindow();
                          map.setCenter(new GLatLng(lat, lng));
                      } else {
                          map.closeInfoWindow();
                      } //if
                  } //if
              } //if
             //*******************************************************************************************
             //Speichere Geocode in DB
             if (GeocodeAlreadyExist=="false") {

                if (document.getElementById("newAdrzusatz").value=="") document.getElementById("newAdrzusatz").value="-";
        	
                getVars =  "?str=" + document.getElementById("newStr").value
        	+ "&hnr=" + document.getElementById("newHnr").value
        	+ "&adrzusatz=" + document.getElementById("newAdrzusatz").value
        	+ "&plz=" + document.getElementById("newPLZ").value
        	+ "&ort=" + document.getElementById("newOrt").value
        	+ "&usr=" + document.getElementById("newUsr").value
        	+ "&lng=" + lng
        	+ "&lat=" + lat
                + "&browser=" + BrowserDetect.browser
                + "&version=" + BrowserDetect.version;

        	request = GXmlHttp.create();
                //alert(getVars);

        	request.open('GET', 'storeMarker.php' + getVars, true);
        	request.onreadystatechange = function() {
        		if (request.readyState == 4) {
        			//the request in complete
        			var xmlDoc = request.responseXML;
        			//retrieve the root document element (response)
        			var responseNode = xmlDoc.documentElement;
        			//retrieve the type attribute of the node
        			var type = responseNode.getAttribute("type");
        			//retrieve the content of the responseNode
        			var content = responseNode.firstChild.nodeValue;
        			//check to see if it was an error or success
        			if(type!='success') {
        				alert(content);
        			} else { 

                                        //*******************************************************************************************
                                        //Create a new marker and it's info window from the DB-Data of the new Geocode

                                            var request2 = GXmlHttp.create();

                                	//request.open('GET', 'getMarkerByAddress', true);
                                     if (request2.readyState == 4 || request2.readyState == 0){

                                	//open the request to getMarkerByAddress on your server
                                	//alert(getVars);
                                      	request2.open('GET', 'getMarkerByAddress.php'+ getVars, true);

                                	//tell the request what to do when the state changes.
                                	request2.onreadystatechange = function() {
                                	  if (request2.readyState == 4) {
                                            if (request2.status == 200){
                                                
                                                //alert("bis hier");
                                              var xmlResponse = request2.responseXML.documentElement;
                                              var xml = request2.responseXML;

                                              if(xml) {
                                                  //Namen entsprechen den Spaltennamen in der DB
                                                  punkte = xml.getElementsByTagName("pnt");
                                                  hoch = xml.getElementsByTagName("hoch");
                                                  rechts = xml.getElementsByTagName("rechts");
                                                  strasse = xml.getElementsByTagName("strasse");
                                                  hnr = xml.getElementsByTagName("hnr");
                                                  adrzusatz = xml.getElementsByTagName("adrzusatz");
                                                  plz = xml.getElementsByTagName("plz");
                                                  ort = xml.getElementsByTagName("ort");
                                                  oid = xml.getElementsByTagName("oid");

                                                  if(punkte.length>0) {
                                                      //alert("mehr als 0");

                                                      lat = hoch[0].firstChild.data;
                                                      lng = rechts[0].firstChild.data;
                                                      stra = strasse[0].firstChild.data;
                                                      hanr = hnr[0].firstChild.data;
                                                      adrzus = adrzusatz[0].firstChild.data;
                                                      polz = plz[0].firstChild.data;
                                                      orts = ort[0].firstChild.data;
                                                      obid = oid[0].firstChild.data;

/**traduction**/
                                                        html = '<table bgcolor="#FFFFFF" id="gm_infowin" cellspacing="1" cellpadding="0"><tr><td><b>Strasse:</b></td><td>'
                        				+ stra
                        				+ '</td></tr><tr><td><b>Hausnummer:</b></td><td>'
                        				+ hanr
                        				+ '</td></tr><tr><td><b>Adresszusatz:</b></td><td>'
                        				+ adrzus
                        				+ '</td></tr><tr><td><b>PLZ:</b></td><td>'
                        				+ polz
                        				+ '</td></tr><tr><td><b>Ort:</b></td><td>'
                        				+ orts
                        				+ '</td></tr><tr><td colspan="2"><input type="submit" value="löschen" onclick="deleteMarker();" /></td></tr></table>';
/* bis hierher !!!*/


                        				var latlng = new GLatLng(parseFloat(lat),parseFloat(lng));

                        				var tooltiptext = stra + " " + hanr + ", " + adrzus + ", " + polz + " " + orts + "*"+ obid;

                                                        var marker = createMarker(latlng, html, newIcon, "newGeocode", tooltiptext);
                                                        loadedOids.push(obid);         //Abfüllen der Oid in Array
                                                        loadedOids.sort(Numsort);
                                                        map.addOverlay(marker);
        				                map.closeInfoWindow();

                                                  } //if
                                              } //if
                                           } //if
                                         } //if
                                      } //function
                                      request2.send(null);
                                   } //if

        			} //else
        		} //if
        	} // function
        	request.send(null);
           } //if
        } //if
      } //if
    } //function
  xmlHttp.send(null);
  } //if
	return false;
}


//********************************************************************************************************************************************************
// Update-Marker-Funktion
//********************************************************************************************************************************************************
function updatemarker(latlng, html, marker){
/**traduction**/
    if (confirm("Wollen Sie den Standort der Adresse wirklich verschieben?")) {   // Bestätigungsanfrage, ja der Marker soll versetzt werden
	if (document.getElementById("InputUSR").value=="") {                      // Überprüfung ob ein Benutzernamen eingetragen ist
            marker.setPoint(latlng)                                               // Zurücksetzten des Markers
            alert("Zum Verschieben von Adressen muss ein Benutzernamen eingetragen sein!"); //Ausgabe Fehlermeldung
            return;                                                               //Abbruch der Funktion
        }
        var splited = marker.title.split("*");
	var oid = splited[1];

        var markerpt = marker.getPoint();   //neue Koordinaten
	var lng = markerpt.lng();
	var lat = markerpt.lat();

	var oldlat = latlng.lat();          //alte Koordinaten
	var oldlng = latlng.lng();
	
	var usr = document.getElementById("InputUSR").value;

        var getVars = "?lng=" + lng + "&lat=" + lat + "&oid=" + oid + "&typ=update";
        var request = GXmlHttp.create();
        
        //alert(getVars);

        request.open('GET', 'updateMarker.php' + getVars, true);
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			//the request in complete
			var xmlDoc = request.responseXML;
			//retrieve the root document element (response)
			var responseNode = xmlDoc.documentElement;
			//retrieve the type attribute of the node
			var type = responseNode.getAttribute("type");
			//retrieve the content of the responseNode
			var content = responseNode.firstChild.nodeValue;
			//check to see if it was an error or success
			if(type!='success') {
				alert(content);
			}
		}
	}
	request.send(null);
	

	//*******************************************************************************************
	//Alte Koordinaten in Tabelle 'adressenupdates' speichern

        getVars = "?lng=" + oldlng + "&lat=" + oldlat + "&oid=" + oid + "&usr=" + usr + "&browser=" + BrowserDetect.browser + "&version=" + BrowserDetect.version;
        var request2 = GXmlHttp.create();

        //alert(getVars);

	//open the request to storeMakres.php on your server
	request2.open('GET', 'storeOldMarker.php' + getVars, true);
	request2.onreadystatechange = function() {
		if (request2.readyState == 4) {
			//the request in complete
			var xmlDoc = request2.responseXML;
			//retrieve the root document element (response)
			var responseNode = xmlDoc.documentElement;
			//retrieve the type attribute of the node
			var type = responseNode.getAttribute("type");
			//retrieve the content of the responseNode
			var content = responseNode.firstChild.nodeValue;
			//check to see if it was an error or success
			if(type!='success') {
				alert(content);
			}
		}
	}
	request2.send(null);

	return false;
    } else {
        marker.setPoint(latlng) // nein, der Marker soll nicht versetzt werden: zurücksetzten des Markers
    }
}

//********************************************************************************************************************************************************
// Delete-Marker-Funktion
//********************************************************************************************************************************************************
function deleteMarker(){
/**traduction**/
    if (confirm("Wollen Sie diese Adresse wirklich löschen?")) {   // Bestätigungsanfrage, ja der Marker soll gelöscht werden
        var splitter = activeMarker.title.split("*");
        var oid = splitter[1];

	var getVars =  "?oid=" + oid + "&typ=delete";
	var request = GXmlHttp.create();

	//open the request to deleteMarkers.php on your server
	request.open('GET', 'deleteMarker.php' + getVars, true);
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			//the request in complete
			var xmlDoc = request.responseXML;
			//retrieve the root document element (response)
			var responseNode = xmlDoc.documentElement;
			//retrieve the type attribute of the node
			var type = responseNode.getAttribute("type");
			//retrieve the content of the responseNode
			var content = responseNode.firstChild.nodeValue;
			//check to see if it was an error or success
			if(type!='success') {
				alert(content);
			}
		}
	}
        map.closeInfoWindow();          // InfoWindow schliessen

        map.removeOverlay(activeMarker);      // Marker von Karte entfernen

        request.send(null);
	return false;
    }
}

//********************************************************************************************************************************************************
// createXmlHttpRequestObject-Funktion
//********************************************************************************************************************************************************
function createXmlHttpRequestObject(){
   // will store the reference to the XMLHttpRequest object
   var xmlHttp;
   // if running Internet Explorer
   if(window.ActiveXObject){
     try{
         xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
     }
     catch (e){
         xmlHttp = false;
     }
   }
   // if running Mozilla or other browsers
   else{
     try{
         xmlHttp = new XMLHttpRequest();
     }
     catch (e){
         xmlHttp = false;
     }
   }
   // return the created object or display an error message
   if (!xmlHttp) {
     alert("Error creating the XMLHttpRequest object.");
   } else {
     return xmlHttp;
   }
}


//********************************************************************************************************************************************************
// Marker-Holen-und-Anzeigen-Funktion
//********************************************************************************************************************************************************
function retrieveMarkers(maxlng, minlng, maxlat, minlat) {
	//var request = GXmlHttp.create();

	//tell the request where to retrieve data from.
	//request.open('GET', 'retrieveMarkers.php', true);
     if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0){
	var getVars =  "?minlat=" + minlat + "&maxlat=" + maxlat + "&minlng=" + minlng + "&maxlng=" + maxlng;

	//open the request to map_data.php on your server
      	xmlHttp.open('GET', 'map_data.php'+ getVars, true);

	//tell the request what to do when the state changes.
	xmlHttp.onreadystatechange = function() {
		if (xmlHttp.readyState == 4) {
                  if (xmlHttp.status == 200){

                    var xmlResponse = xmlHttp.responseXML.documentElement;
                    var xml = xmlHttp.responseXML;
                    var jetzt = new Date();
                    var tag = jetzt.getDate();
                    var monat = jetzt.getMonth() + 1;
                    monat = monat * 100;
                    var jahr = jetzt.getYear();
                    if (jahr < 2000) jahr = jahr + 1900;
                    var jahr=jahr * 10000;
                    var heute = jahr + monat + tag;

                    if(xml)
                    {
                      //Namen entsprechen den Spaltennamen in der DB
                      punkte = xml.getElementsByTagName("pnt");
                      hoch = xml.getElementsByTagName("hoch");
                      rechts = xml.getElementsByTagName("rechts");
                      strasse = xml.getElementsByTagName("strasse");
                      hnr = xml.getElementsByTagName("hnr");
                      adrzusatz = xml.getElementsByTagName("adrzusatz");
                      plz = xml.getElementsByTagName("plz");
                      ort = xml.getElementsByTagName("ort");
                      usr = xml.getElementsByTagName("usr");
                      datum = xml.getElementsByTagName("datum");
                      oid = xml.getElementsByTagName("oid");

                      //map.clearOverlays();

                      if(punkte.length>0) {
                        for(i=0;i<punkte.length;i++)
                        {
                          lat = hoch[i].firstChild.data;
                          lng = rechts[i].firstChild.data;
                          stra = strasse[i].firstChild.data;
                          hanr = hnr[i].firstChild.data;
                          adrzus = adrzusatz[i].firstChild.data;
                          polz = plz[i].firstChild.data;
                          orts = ort[i].firstChild.data;
                          user = usr[i].firstChild.data;
                          date = datum[i].firstChild.data;
                          obid = oid[i].firstChild.data;

                          if (firstLoading) {                // keine Marker geladen
                              loadedOids.push(obid);         //Abfüllen der Oid in Array

                              var tooltiptext = stra + " " + hanr + ", " + adrzus + ", " + polz + " " + orts + "*" + obid;

                              if(lng && lat) {
    				var latlng = new GLatLng(parseFloat(lat),parseFloat(lng));
    
/**traduction**/
                                    var html = '<table bgcolor="#FFFFFF" id="gm_infowin" cellspacing="1" cellpadding="0"><tr><td><b>Strasse: </b></td><td>'
    				+ stra
    				+ '</td></tr><tr><td><b>Hausnummer: </b></td><td>'
    				+ hanr
    				+ '</td></tr><tr><td><b>Adresszusatz: </b></td><td>'
    				+ adrzus
    				+ '</td></tr><tr><td><b>PLZ: </b></td><td>'
    				+ polz
    				+ '</td></tr><tr><td><b>Ort: </b></td><td>'
    				+ orts
    				+ '</td></tr><tr><td><input type="submit" onclick="deleteMarker();" value="Löschen"/></td></tr></table>';
/* bis hierher !!!*/
                                    if (user == document.getElementById("InputUSR").value) {
                                        if (date == heute) {
                                           var marker = createMarker(latlng, html, newIcon, "newGeocode", tooltiptext);
                                        } else {
                                           var marker = createMarker(latlng, html, userIcon, "myGeocode", tooltiptext);
                                             }
                                    } else {
                                        var marker = createMarker(latlng, html, standardIcon, "communityGeocode", tooltiptext);
                                    }
    
    				map.addOverlay(marker);
    			       } //if
                            }
                            
                            else if (!loadedOid(obid)) { //bereits Marker geladen --> Überprüfung ob Marker mit obid bereits geladen

                              loadedOids.push(obid);         //Abfüllen der Oid in Array


                              var tooltiptext = stra + " " + hanr + ", " + adrzus + ", " + polz + " " + orts + "*" + obid;

                              if(lng && lat) {
    				var latlng = new GLatLng(parseFloat(lat),parseFloat(lng));
    
/**traduction**/
                                    var html = '<table bgcolor="#FFFFFF" id="gm_infowin" cellspacing="1" cellpadding="0"><tr><td><b>Strasse: </b></td><td>'
    				+ stra
    				+ '</td></tr><tr><td><b>Hausnummer: </b></td><td>'
    				+ hanr
    				+ '</td></tr><tr><td><b>Adresszusatz: </b></td><td>'
    				+ adrzus
    				+ '</td></tr><tr><td><b>PLZ: </b></td><td>'
    				+ polz
    				+ '</td></tr><tr><td><b>Ort: </b></td><td>'
    				+ orts
    				+ '</td></tr><tr><td><input type="submit" onclick="deleteMarker();" value="Löschen"/></td></tr></table>';
/* bis hierher!!!*/

                                    if (user == document.getElementById("InputUSR").value) {
                                        if (date == heute) {
                                           var marker = createMarker(latlng, html, newIcon, "newGeocode", tooltiptext);
                                        } else {
                                           var marker = createMarker(latlng, html, userIcon, "myGeocode", tooltiptext);
                                             }
                                    } else {
                                        var marker = createMarker(latlng, html, standardIcon, "communityGeocode", tooltiptext);
                                    }

    				map.addOverlay(marker);
    			       } //if
                            }


                        } //for
                        loadedOids.sort(Numsort);
                        firstLoading=false;

                      } //if
                    } //if
	       } //if
	    } //if
	} //function

	xmlHttp.send(null);
     } //if
}
//********************************************************************************************************************************************************
// Funktion zur Überprüfung, ob der marker mit der bestimmten Oid bereits geladen ist
//********************************************************************************************************************************************************
function loadedOid(oid) {
  var isLoaded = false;
  var z=0;
  for (z=0;z<loadedOids.length;z++) {
     if (oid==loadedOids[z]) {
       isLoaded = true;
       break;
     }
  }
  return isLoaded;
}
//********************************************************************************************************************************************************
// Funktion für das sortieren von nummerischen Arrays
//********************************************************************************************************************************************************
function Numsort (a, b) {
  return a - b;
}

//********************************************************************************************************************************************************
// Rundungsfunktion; x=zu rundende Zahl; n=Anzahl Nachkommastellen
//********************************************************************************************************************************************************
function runden(x, n) {
  if (n < 1 || n > 14) return false;
  var e = Math.pow(10, n);
  var k = (Math.round(x * e) / e).toString();
  if (k.indexOf('.') == -1) k += '.';
  k += e.toString().substring(1);
  return k.substring(0, k.indexOf('.') + n+1);
}

//********************************************************************************************************************************************************
// Grossschreib-Überprüfung
//********************************************************************************************************************************************************
function checkCapital(word) {
    // Wandelt das 1. Zeichen eines Strings in einen Grossbuchstaben, den Rest in Kleinbuchstaben um
    var correctWord
    var firstLetter =  word.substring(0, 1);
    var followingLetters = word.substring(1);
    firstLetter = firstLetter.toUpperCase();
    correctWord = firstLetter + followingLetters;
    return correctWord;
}
//********************************************************************************************************************************************************
// Change-Bodyclass-Funktion
//********************************************************************************************************************************************************
function changeBodyClass(from, to) {
document.body.className = document.body.className.replace(from, to);
return false;
}

//********************************************************************************************************************************************************
// Resize-Handler
//********************************************************************************************************************************************************
function handleResize() {
    setDivSizes();
}

//********************************************************************************************************************************************************
// Window-Height-Funktion
//********************************************************************************************************************************************************
function windowHeight() {
    // Standard browsers (Mozilla, Safari, etc.)
    if (self.innerHeight)
    return self.innerHeight;
    // IE 6
    if (document.documentElement && document.documentElement.clientHeight)
    return document.documentElement.clientHeight;
    // IE 5
    if (document.body)
    return document.body.clientHeight;
    // Just in case.
    return 0;
}