// erst mal ein paar globale Variablen definieren

var karte_popup = "karte_popup.htm";
var fav_popup = "fav_popup.htm";
var PopupFenster = null;
var seite;
// var anzFavoriten;

var map = null;
var place = null;
var zentrum = null;
var geocoder = null;
var zoomstufe = 16;

// Diese Funktion wird beim Ã–ffnen der Seite aufgerufen
// mit new GMap2() wird der angegebene div Tag als Container gewÃ¤hlt, die Karte erscheint
// mit den folgenden beiden Zeilen wird die Bildmitte und die Zoomstufe eingestellt
// danach folgen zwei Zeilen um auf Luftbildansicht um- und Zoomtools anzuschalten
// GClientGeocoder() wird benÃ¶tigt, um Adressen zu suchen

function load() {
	try {
	if (document.getElementById("favoriten").childNodes.length > 0) {
  while (document.getElementById("favoriten").childNodes.length > 1) {
//      alert(document.getElementById("favoriten").childNodes.length);
    document.getElementById("favoriten").removeChild(document.getElementById("favoriten").childNodes[1]);
  }

  document.getElementById("favoriten").removeChild(document.getElementById("favoriten").childNodes[0]);
 }
	} catch (e) {}

  if (GBrowserIsCompatible()) {
    map = new GMap2(document.getElementById("map"));

    zentrum = new GLatLng(xLAT, xLNG);
    map.setCenter(zentrum, xZOO); // 37.4419, -122.1419), 13);
    map.setMapType(G_SATELLITE_MAP);
    map.addControl(new GSmallMapControl());
    map.enableDoubleClickZoom();
    map.enableContinuousZoom();
    map.addControl(new GMapTypeControl());
    geocoder = new GClientGeocoder();
  }
	
  GEvent.addListener(map, "click", function(overlay, point)
  {
  	if (overlay)
  	{
  		myPoint = null;
    	map.removeOverlay (overlay);
    } else {
    	map.clearOverlays ();
    	myPoint = point;
    	map.addOverlay (new GMarker(point));
    }
  });
  
  if (parseInt(xPLA) != 0 && parseInt(xPLN) != 0)
  {
  	var point = new GLatLng(xPLA, xPLN);
  	map.addOverlay (new GMarker (point));
  }
  
  favoritenLaden();
}

function favoritenLaden() {

  var Wert = WertHolen();
  var anzKomma = 0;
 

  // Mit While-Schleife hat das ganze nicht funktioniert, deshalb diese merkwÃ¼rdige Konstruktion
  
  for (i=0; i<Wert.length; i++) {
    if (Wert.charAt(i+1) == ",") { 
      anzKomma = anzKomma+1;
    }
  }

  if (anzKomma > 0) {
    anzKomma++;
    var anzDatenSaetze = anzKomma/4;
//      anzFavoriten = anzDatenSaetze;
  }

  // Hier werden die Links fÃ¼r die Favoritenleiste konstruiert
  for (i = 0; i<anzDatenSaetze; i++) {
    var newLI = document.createElement("li");
    var FavoritName = Wert.substring(0, Wert.indexOf(","));
    Wert = Wert.substring(Wert.indexOf(",")+1, Wert.length);
    
    var latitude = Wert.substring(0, Wert.indexOf(","));
    Wert = Wert.substring(Wert.indexOf(",")+1, Wert.length);
    
    var longitude = Wert.substring(0, Wert.indexOf(","));
    Wert = Wert.substring(Wert.indexOf(",")+1, Wert.length);
   
    if (Wert.indexOf(",") > -1) {
      var zoom = Wert.substring(0, Wert.indexOf(","));
      Wert = Wert.substring(Wert.indexOf(",")+1, Wert.length);
    } else {
      var zoom = Wert.substring(0, Wert.length);
      Wert = "";
    }
   
    var aktLI = document.getElementById("favoriten").appendChild(newLI);
    
    var newA = document.createElement("a");
    var aktA = aktLI.appendChild(newA);
    
    var newAText = document.createTextNode(FavoritName);
    aktA.appendChild(newAText);
    
    var newAHref = document.createAttribute("href");
    var HrefZeichenkette = '/bild_plus.php?lat='+latitude+'&amp;lng='+longitude+'&amp;zoom='+zoom;
    newAHref.nodeValue = HrefZeichenkette; // window.open(HrefZeichenkette, '_self'); }";
    aktA.setAttributeNode(newAHref);
    
    var newLIText = document.createTextNode(" ");
    aktLI.appendChild(newLIText);
    
    var newA = document.createElement("a");
    var aktA = aktLI.appendChild(newA);
    
//      var newAText = document.createTextNode("LÃ¶schen");
//      aktA.appendChild(newAText);
    
    var newAHref = document.createAttribute("href");
    newAHref.nodeValue = "javascript:favoritenEntfernen("+ i +")";
    aktA.setAttributeNode(newAHref);
    
    var newIMG = document.createElement("img");
    var aktIMG = aktA.appendChild(newIMG);
    
    var newIMGSrc = document.createAttribute("src");
    newIMGSrc.nodeValue = "./images/sign_loeschen_kl.gif";
    aktIMG.setAttributeNode(newIMGSrc);
    
    var newIMGAlt = document.createAttribute("alt");
    //newIMGAlt.nodeValue = "Favoriten lÃ¶schen";
    newIMGAlt.nodeValue = "Favoriten löschen";
    aktIMG.setAttributeNode(newIMGAlt);
    
  }
}



// Die folgende Funktion wird nur benÃ¶tigt, wenn die Zoomstufen per Hand verstellt werden
// Da ich derzeit zum soomen auf die GSmallMapControl von Google zurÃ¼ckgreife

function zoomsufe_anders(anders) {
  zoomstufe = zoomstufe + anders;

  if (zoomstufe > 18) {
    zoomstufe--;    
  } else if (zoomstufe < 13) {
    zoomstufe++;
  }

  map.setZoom(zoomstufe);
}


  // addAddressToMap() is called when the geocoder returns an
  // answer.  It adds a marker to the map with an open info window
  // showing the nicely formatted version of the address and the country code.
  function addAddressToMap(response) {
    map.clearOverlays();
    if (!response || response.Status.code != 200) {
      alert("Ihre Suchanfrage konnte leider nicht gefunden werden, bitte geben Sie sie genauer ein.");
    } else {
      place = response.Placemark[0];
//          '<b>Country code:</b> ' + place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName); // PostalCode.PostalCodeNumber);
    }
  }


function showAddress(address, zip, city)
{
  if (geocoder)
  {
    geocoder.getLatLng(
      address + ',' + zip + ' ' + city,
      function(point) {
        if (!point) {
          // alert(address + ',' + zip + ' ' + city + " konnte leider nicht gefunden werden.");
          geocoder.getLatLng(
            address + ' de ' + zip,
            function(point) {
              if (!point) {
                alert(address + ',' + zip + ' ' + city + " konnte leider nicht gefunden werden.");
              } else {
                map.setCenter(point, zoomstufe);
                geocoder.getLocations(address + ' de ' + zip, addAddressToMap);
              }
            }
          );
        } else {
          map.setCenter(point, zoomstufe);
          geocoder.getLocations(address + ',' + zip + ' ' + city, addAddressToMap);
        }
      }
    );
    document.getElementsByName("such_frm")[0].address.value = address;
    document.getElementsByName("such_frm")[0].zip.value = zip;
    document.getElementsByName("such_frm")[0].city.value = city;
  } else {
    window.open ('/bild_plus.php?street=' + address + '&zip=' + zip + '&city=' + city , '_self');
  }
}

// Die Funktion seiteLaden Ã¶ffnet die Popup Fenster und belegt die Formularfenster vor
function seiteLaden(page)
{
  // Die folgende Zeile sollte ursprÃ¼nglich fÃ¼r das serverseitige Scripting sein, hat in aktueller Version keine Bedeutung
  // seite = seite + "?nord=" + map.getCenter().lat() + "&ost=" + map.getCenter().lng() + "&zoom=" + map.getZoom();
  
  // Popup Fenster Ã¶ffnen
  var seite = page;
  
  if (seite.indexOf ("fav") != -1)
  	PopupFenster = window.open(seite, "_blank", "width=400,height=150,left=100,top=200");
  else
  	PopupFenster = window.open(seite, "_blank", "width=400,height=350,left=100,top=200");

  // Formular des Popup Fensters mit Daten vorbelegen
  // => Beim FireFox werden die Felder nicht vorbelegt?
//    PopupFenster.document.getElementsByName("frm")[0].latitude.value = map.getCenter().lat();
//    PopupFenster.document.getElementsByName("frm")[0].longitude.value = map.getCenter().lng();
//    PopupFenster.document.getElementsByName("frm")[0].zoom.value = map.getZoom();
    
  // Im Popup Fenster fÃ¼r die Hofkarte stehen mehr Felder
//    if (seite == karte_popup) {
           
//      var address = document.forms[0].address.value;

//              Woerter = address.replace("," , " ");
//              Woerter = Woerter.replace(";" , " ");
//              Woerter = Woerter.split(" ");
//              for (i = 0; i < Woerter.length; i++) {
//                if (Woerter[i].length == 5) { 
//                  for (j = 0; j < Woerter[i].length; j++) {
//                    var istPLZ = 1;
//                    if (Woerter[i].charAt(j) < "0" || Woerter[i].charAt(j) > "9") {
//                      istPLZ = -1;
//                    }
//                    if (istPLZ == 1) {
//                      akt_plz = Woerter[i];
//                    }
//                  }
//                }
//              }  
//              alert(akt_plz);
            
//     PopupFenster.document.getElementsByName("frm")[0].plz.value = akt_plz;
 //   PopupFenster.document.getElementsByName("frm")[0].ort.value = place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName;
//    }
}


// Die folgende Funktion verarbeitet die RÃ¼ckgabe des PopupFensters
// Von hier aus kÃ¶nnte die SQL-Anbindung erfolgen

function PopupAbsendeButton(wert)
{
  if (wert == 1)
  {
		var latitude = PopupFenster.document.getElementsByName("frm")[0].latitude.value;    
		var longitude = PopupFenster.document.getElementsByName("frm")[0].longitude.value;    
		var zoom = PopupFenster.document.getElementsByName("frm")[0].zoom.value;    
		var bildname = PopupFenster.document.getElementsByName("frm")[0].bildname.value;  
		var besitzer = PopupFenster.document.getElementsByName("frm")[0].besitzer.value;    
		var plz = PopupFenster.document.getElementsByName("frm")[0].plz.value;    
		var email = PopupFenster.document.getElementsByName("frm")[0].email.value;    
		var strasse = PopupFenster.document.getElementsByName("frm")[0].strasse.value;    
		//var hnr = PopupFenster.document.getElementsByName("frm")[0].hnr.value;    
		var ort = PopupFenster.document.getElementsByName("frm")[0].ort.value;    
		//var tel = PopupFenster.document.getElementsByName("frm")[0].tel.value;    
		var beschreibung = PopupFenster.document.getElementsByName("frm")[0].beschreibung.value;    
		for(i = 0; i < PopupFenster.document.getElementsByName("frm")[0].art.length; i++)
		{
			if (PopupFenster.document.getElementsByName("frm")[0].art[i].checked == true)
			{
				var art = PopupFenster.document.getElementsByName("frm")[0].art[i].value;
				break;
			}
		}
		var plat = PopupFenster.document.getElementsByName("frm")[0].plat.value;    
		var plng = PopupFenster.document.getElementsByName("frm")[0].plng.value;

		//alert (PopupFenster.document.getElementsByName("frm")[0].art[0].value);
			
   if (latitude != "" && bildname != "" && besitzer != "" && plz != "" && email != "" && plz.length == 5)
   { 
			var sLink = "/neuer_punkt.php?lat=" + latitude +
																	"&lng=" + longitude + 
																	"&z="		+ zoom +
																	"&bn="	+ bildname +
																	"&b="		+ besitzer +
																	"&p="		+ plz +
																	"&e="		+ email +
																	"&s="		+ strasse +
																	"&o="		+ ort +
																	"&d="		+ beschreibung + 
																	"&a="		+ art + 
																	"&plat="+ plat +
																	"&plng="+ plng;
		
			window.open (sLink, '_parent');
			PopupFenster.close ();
   } else {
			alert("Pflichtfelder müssen alle ausgefüllt sein!");
			PopupFenster.focus();
   }
  } else if (wert == 2) {
  	var myWindow = opener.PopupFenster;
    var latitude = myWindow.document.getElementsByName("frm")[0].latitude.value;    
    var longitude = myWindow.document.getElementsByName("frm")[0].longitude.value;    
    var zoom = myWindow.document.getElementsByName("frm")[0].zoom.value;    
    var bildname = myWindow.document.getElementsByName("frm")[0].bildname.value;  

   if (latitude != "" && bildname != "") { 
    var Verfallszeit = 1000 * 60 * 60 * 24 * 365;                   // Für Cookie
    WertSetzen(bildname, latitude, longitude, zoom, Verfallszeit);  // Für Cookie

    
    var newLI = opener.document.createElement("li");
   
    var aktLI = opener.document.getElementById("favoriten").appendChild(newLI);
    anzahlLI = opener.document.getElementById("favoriten").childNodes.length-1;

    var newA = opener.document.createElement("a");
    var aktA = aktLI.appendChild(newA);
    
    var newAText = opener.document.createTextNode(bildname);
    aktA.appendChild(newAText);
    
    var newAHref = opener.document.createAttribute("href");
    newAHref.nodeValue = "javascript:map.setCenter(new GLatLng("+latitude+","+longitude+"),"+zoom+")";
    aktA.setAttributeNode(newAHref);

    var newLIText = opener.document.createTextNode(" ");
    aktLI.appendChild(newLIText);
    
    var newA = opener.document.createElement("a");
    var aktA = aktLI.appendChild(newA);
    
//      var newAText = document.createTextNode("Löschen");
//      aktA.appendChild(newAText);
    
    var newAHref = opener.document.createAttribute("href");
    newAHref.nodeValue = "javascript:favoritenEntfernen("+ anzahlLI +")";
    aktA.setAttributeNode(newAHref);
    
    var newIMG = opener.document.createElement("img");
    var aktIMG = aktA.appendChild(newIMG);
    
    var newIMGSrc = opener.document.createAttribute("src");
    newIMGSrc.nodeValue = "./images/sign_loeschen_kl.gif";
    aktIMG.setAttributeNode(newIMGSrc);
    
    var newIMGAlt = opener.document.createAttribute("alt");
    newIMGAlt.nodeValue = "Favoriten löschen";
    aktIMG.setAttributeNode(newIMGAlt);
 
    myWindow.close();
   } else {
     alert("Leider ist ein Fehler aufgetreten. Bitte versuchen Sie erneut, den Favoriten hinzuzufÃ¼gen");
   }
  }
}

function update_punkt ()
{
	var uKey = document.getElementById('unique_id').value;
	var hid = document.getElementById('hid').value;
	var aid = document.getElementById('aid').value;
	var lid = document.getElementById('lid').value;
	var note = document.getElementById('note').value;
	
	var lat = window.map.getCenter().lat(); 
	var lng = window.map.getCenter().lng();
	var zoom = window.map.getZoom();
	try {
	  var plat = myPoint.lat();
		var plng = myPoint.lng();
	} catch (e) {
		var plat = "";
		var plng = "";
	}

	try {
		Request("/AJAX/note.php?hid=" + hid + "&note=" + note);
	} catch (e) {}
	
	var link = "/update_punkt.php?id="+ hid +"&lat=" + lat +
																	"&lng=" + lng + 
																	"&z="		+ zoom +
																	"&plat="+ plat +
																	"&plng="+ plng + 
																	"&aid="+ aid + 
																	"&lid="+ lid + 
																	"&user="+ uKey;

  window.open (link, '_self');
}


function WertHolen () {
  var Wert = "";
  if (document.cookie) {
    Wert = document.cookie.substring(document.cookie.indexOf("Favoriten"),document.cookie.length); 
    var Wertstart = Wert.indexOf("=") + 1;
    var Wertende = Wert.indexOf(";");
    if (Wertende == -1)
      Wertende = document.cookie.length;
    Wert = Wert.substring(Wertstart, Wertende);
  }
  return Wert;
}

function WertSetzen (Wert1, Wert2, Wert3, Wert4, Verfall) {
  var Wert = "";
  if (opener.document.cookie) {
    Wert = opener.document.cookie.substring(document.cookie.indexOf("Favoriten"),document.cookie.length); 
    var Wertstart = Wert.indexOf("=") + 1;
    var Wertende = Wert.indexOf(";");
    if (Wertende == -1)
      Wertende = opener.document.cookie.length;

    Wert = Wert.substring(Wertstart, Wertende);
    Wert = Wert + ","; 
  }

  var jetzt = new Date();
  var Auszeit = new Date(jetzt.getTime() + Verfall);

//   alert(document.getElementById("favoriten").childNodes.length);
//  folgendes Problem tritt hier auf: beim FireFox wird beim Setzen des ersten Favoriten das Cookie falsch gespeichert, daher ist der Text nicht sichtbar
//  setzt der Benutzer sofort zwei Favoriten, dann tritt das Problem nicht auf

//  es folgt die variable eins, die dazu dienen soll festzustellen, ob es sich um den ersten oder einen folgenden Favoriteneintrag handelt.
//  Wenn bereits ursprÃ¼ngliche Werte vorliegen, dann wird ein Komma an diese angehÃ¤ngt, sonst nicht

  // var eins = 1; // FÃ¼r Internet Explorer
  // var eins = 3; // FÃ¼r Firefox
  // => Browserweiche erforderlich!!!
  
  if (opener.document.getElementById("favoriten").childNodes.length > 0) { 
    opener.document.cookie = "Favoriten" + "=" + Wert + Wert1 + "," + Wert2 + "," + Wert3 + "," + Wert4 + "; expires=" + Auszeit.toGMTString() + ";";
  } else {
    opener.document.cookie = "Favoriten" + "=" + Wert1 + "," + Wert2 + "," + Wert3 + "," + Wert4 + "; expires=" + Auszeit.toGMTString() + ";";
  }
}

function favoritenEntfernen(Nummer) {

 // Nummer = Nummer-1;
  var Wert = WertHolen();
  var zwWert = "";
  var arrWert = Wert.split(",");
 
 if (Nummer >= arrWert.length/4) {
  for (i=0; i<arrWert.length-4; i++) {
   zwWert = zwWert + arrWert[i] +",";
  }
 } else {
  if (Nummer > 0) {
   for (i=0; i<Nummer*4; i++) {
     zwWert = zwWert + arrWert[i] +",";
   }
  } 

  for (i=Nummer*4+4; i<arrWert.length; i++) {
    zwWert = zwWert + arrWert[i] +",";
  }
 }

  var jetzt = new Date();
  var Auszeit = new Date(jetzt.getTime() + 1000 * 60 * 60 * 24 * 365);
  document.cookie = "Favoriten" + "=" + zwWert.substring(0,zwWert.length-1) + "; expires=" + Auszeit.toGMTString() + ";";

  
  while (document.getElementById("favoriten").childNodes.length > 1) {
//      alert(document.getElementById("favoriten").childNodes.length);
    document.getElementById("favoriten").removeChild(document.getElementById("favoriten").childNodes[1]);
  }

  document.getElementById("favoriten").removeChild(document.getElementById("favoriten").childNodes[0]);

  favoritenLaden();
}

function getValues()
{
  document.getElementsByName("frm")[0].latitude.value = window.opener.map.getCenter().lat();
  document.getElementsByName("frm")[0].longitude.value = window.opener.map.getCenter().lng();
  document.getElementsByName("frm")[0].zoom.value = window.opener.map.getZoom();
}

function getValuesForInsert()
{
  document.getElementsByName("frm")[0].latitude.value = window.opener.map.getCenter().lat();
  document.getElementsByName("frm")[0].longitude.value = window.opener.map.getCenter().lng();
  document.getElementsByName("frm")[0].zoom.value = window.opener.map.getZoom();
  try {
	  document.getElementsByName("frm")[0].plat.value = opener.myPoint.lat();
	  document.getElementsByName("frm")[0].plng.value = opener.myPoint.lng();
  } catch (e) {}
  
  var street = window.opener.document.such_frm.address.value;
  var zip = window.opener.document.such_frm.zip.value;
  var city = window.opener.document.such_frm.city.value;
  var address = street + "," + zip + " " + city;
	var Woerter = zip;
	var akt_plz = "";
	
	Woerter = Woerter.replace(";" , " ");
	Woerter = Woerter.split(" ");
	for (i = 0; i < Woerter.length; i++)
	{
		if (Woerter[i].length == 5)
		{ 
		  for (j = 0; j < Woerter[i].length; j++)
		  {
		    var istPLZ = 1;
		    if (Woerter[i].charAt(j) < "0" || Woerter[i].charAt(j) > "9") {
		      istPLZ = -1;
		    }
		    if (istPLZ == 1) {
		      akt_plz = Woerter[i];
		    }
		  }
		}
	}
	
  document.getElementsByName("frm")[0].plz.value = akt_plz.length == 5 ? akt_plz : "";
  document.getElementsByName("frm")[0].strasse.value = street;
  document.getElementsByName("frm")[0].ort.value = city;
}
