var anfragen = new Array();
var requests_to_wait_for = new Array();
var anfr;
 
var ergebnis_obj;
var map;

var ar_nearest;
var point; //punkt des besuchers

//einstellungen
var limit = 5; //wie viele suchen;
var umkreis = 1; //im umkreis von x km suchen

var suche = "umkreis";  // limit | umkreis
var eintraege_nummerieren = false;
var showPoint = true; //standort anzeigen
var showRoutenplaner = true;
var hideInfoWindows = false; //lässt die Info-Windows weg; für Minimap

var ar_zoom_level =  new Array();  //hilft uns zu entscheiden, welchen Zoom Level wir wählen;
ar_zoom_level[1] = 2*5000;
ar_zoom_level[2] = 3*2000;
ar_zoom_level[3] = 3*1000;
ar_zoom_level[4] = 3*500;
ar_zoom_level[5] = 3*200;
ar_zoom_level[6] = 2*200;
ar_zoom_level[7] = 2*100;
ar_zoom_level[8] = 2*50;
ar_zoom_level[9] = 2*20;
ar_zoom_level[10] = 2*10;
ar_zoom_level[11] = 2*5;
ar_zoom_level[12] = 3*2;
ar_zoom_level[13] = 3*1;
ar_zoom_level[14] = 3*0.5;
ar_zoom_level[15] = 3*0.2;
ar_zoom_level[16] = 3*0.1;
ar_zoom_level[17] = 3*0.05;
ar_zoom_level[18] = 3*0.02;

	




function getAddress()
{
	var address = document.getElementById('address').value;
	//address = address.replace(/ /gi,"+");
	return address;
}



function load() {
      if (GBrowserIsCompatible()) 
	  { 	

		  
		var mapObj = document.getElementById("map");
		if (mapObj != "undefined" && mapObj != null) 
		{
			map = new GMap2(document.getElementById("map"));
		}
		
        map.setCenter(new GLatLng(48.22482, 16.364058), 13);
        geocoder = new GClientGeocoder();
        map.addControl(new GSmallMapControl());
        //map.addControl(new GMapTypeControl());
        //map.addControl(new GScaleControl());		
        
      }
    }


function getCoordinates(address) 
{
   if(address.indexOf("Österreich") == -1 && address.indexOf("Oesterreich") == -1)
   		address += ", Österreich";
   if (geocoder) 
   {
		geocoder.getLocations(address, gotCoordinates ); 
	}
}   



function gotCoordinates(response)
{
	 place = response.Placemark[0];
     point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
	
     map.setCenter(point);
	var blueIcon = new GIcon(G_DEFAULT_ICON);
    blueIcon.image = "http://www.klienten-info.at/geodb/marker_blue.png"; 

	var marker = new GMarker(point, {icon:blueIcon});      map.addOverlay(marker);
	
	 getNearest(point.lat().toFixed(6), point.lng().toFixed(6));
}

function setPoint(lat, lng, showPoint)
{
	 point = new GLatLng(lat, lng);
     map.setCenter(point);
	 if(showPoint == true)
	 {
		 var blueIcon = new GIcon(G_DEFAULT_ICON);
		 blueIcon.image = "http://www.klienten-info.at/geodb/marker_blue.png"; 
	
		  var marker = new GMarker(point, {icon:blueIcon});     
		  map.addOverlay(marker);	 
	 }
}
function getCoordinatesOnly(address) //speichert die Koordination nur in einer variablen und sucht dann nicht nach steuerberatern
{
   if(address.indexOf("Österreich") == -1 && address.indexOf("Oesterreich") == -1)
   		address += ", Österreich";
   if (geocoder) 
   {
		geocoder.getLocations(address, gotCoordinatesOnly ); 
	}
}  
function gotCoordinatesOnly(response)
{
	 place = response.Placemark[0];
     point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
}


function getCoordinatesForSearchForm(address) //speichert die Koordination nur in einer variablen und sucht dann nicht nach steuerberatern
{
   if(address.indexOf("Österreich") == -1 && address.indexOf("Oesterreich") == -1)
   		address += ", Österreich";
   if (geocoder) 
   {
		geocoder.getLocations(address, gotCoordinatesForSearchForm ); 
	}
}  
function gotCoordinatesForSearchForm(response)
{
	 place = response.Placemark[0];
     point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
	document.getElementById("lat").value = point.lat(); 
	 document.getElementById("lng").value = point.lng(); 
	 document.mapform.submit();

}


function get_anfrage_obj()
{
	var anfrage;
	try
	{
		anfrage = new XMLHttpRequest();
	}
	catch(versuchmicrosoft)
	{
		try
		{
			anfrage = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch(anderesmicrosoft)
		{
			try
			{
				anfrage = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(fehlschlag)
			{	
				anfrage = null;
			}
		}
	}
	
	
	if (anfrage == null)
		alert("Fehler beim Erzeugen des Anfrage-Objekts; Versuchen Sie es ggf mit einem anderen Browser.");
	else
		return anfrage;
}


function insert_into_db(selector, kd_idint, firmname, address, zip, city, lat, long)
{
	var anfrage = get_anfrage_obj();
	anfragen.push(anfrage);	
	var request_num = requests_to_wait_for.length;
	requests_to_wait_for.push(0);

	
	anfragen[request_num].open("GET", "insert.php?selector="+selector+"&kd_idint="+kd_idint+"&firmname="+firmname+"&address="+address+"&zip="+zip+"&city="+city+"&lat="+lat+"&long="+long, true);
	anfragen[request_num].onreadystatechange = processedRequest;
	anfragen[request_num].send(null);
}

function processedRequest()
{
	for(var i = 0; i < anfragen.length; i++)
	{
		if(anfragen[i].readyState == 4)
		{
			if(anfragen[i].status == 200)
			{
				requests_to_wait_for[i] = 1;
			}
		}
	}
	
	var fertig = true;
	for(var j = 0; j < requests_to_wait_for.length; j++)
	{	
		var mynumstr = requests_to_wait_for[j] + '';
		
		if(requests_to_wait_for[j] == 0)
			fertig = false;
					
	}	
	if(fertig==true)
		loadNextPage();
}


function getNearest(lat, lng)
{
	anfr = get_anfrage_obj();

	if(suche == "umkreis")
		anfr.open("GET", "demo_get_in_radius.php?lat="+lat+"&lng="+lng+"&umkreis="+umkreis, true);
	else
		anfr.open("GET", "demo_get_nearest.php?lat="+lat+"&lng="+lng+"&limit="+limit, true);

	anfr.onreadystatechange = gotNearest;
	anfr.send(null);	
	
}

function gotNearest()
{ 
	if(anfr.readyState == 4)
	{
		if(anfr.status == 200)
		{
			ar_nearest = JSON.parse(anfr.responseText);
			drawMap();

		}
	}
}




function drawMap()
{
	map.clearOverlays();

	var zoom;
	var groesste_entfernung = 0;
	if(ar_nearest == null || ar_nearest.length == 0)
	{
		zoom = 12;
	}
	else
	{
		for(var i in ar_nearest)
		{
			groesste_entfernung = Math.max(groesste_entfernung, ar_nearest[i]["distance"]);
		}
		zoom = 12;
		for(var i in ar_zoom_level)
		{
			if(groesste_entfernung < ar_zoom_level[i])
			{
				zoom = i;
			}
		}	
	}

	
	for(var i in ar_nearest)
	{
		/*ar_infoTabs[i] = [
							  new GInfoWindowTab('Adresse', '<b>'+ar_nearest[i]["firmname"]+'</b><br>'+ar_nearest[i]["address"]+'<br>'+ar_nearest[i]["zip"]+' '+ar_nearest[i]["city"]+'<br>Österreich'), 
							  new GInfoWindowTab('Anfahrt', 'Ihre Adresse:<br><form action="http://maps.google.de/maps" method="get" target="_blank"><input type="text" size="40" maxlength="60" name="saddr" id="saddr" value=""><br><input class="button" value="Route" type="submit"><input type="hidden" name="daddr" value=""></form>') 
							 ];*/
		var mittelwert_x = (point.lat() - ar_nearest[i]["lat"]) / 2;
		mittelwert_x = mittelwert_x.toFixed(5);
		var mittelwert_y = (point.lng() - ar_nearest[i]["lng"]) / 2;
		mittelwert_y = mittelwert_y.toFixed(6);
		var diff_mittelwert_x = Math.abs(point.lat() - ar_nearest[i]["lat"]);
		diff_mittelwert_x = diff_mittelwert_x.toFixed(5);
		var diff_mittelwert_y = Math.abs(point.lng() - ar_nearest[i]["lng"]);
		diff_mittelwert_y = diff_mittelwert_y.toFixed(5);
		
		

		var infoHmtl = '<b>'+ar_nearest[i]["firmname"]+'</b><br>'+ar_nearest[i]["address"]+'<br>'+ar_nearest[i]["zip"]+' '+ar_nearest[i]["city"]+'<br>Österreich<br><br>';
		infoHmtl = infoHmtl + '<a href="http://www.steuerdirekt.at/steuerberater-verzeichnis/eintrag/Oesterreich/alle-branchen/0/'+ar_nearest[i]["firmname"]+'/'+ar_nearest[i]["listing_id"]+'/index.html" ';
		infoHmtl = infoHmtl + 'target="_blank">Eintrag im Steuerberater-Verzeichnis</a>';
		
		if(showRoutenplaner == true)
		{
			var gm_url  =  'http://maps.google.com/maps?f=d&source=s_d&saddr='+getAddress()+'&daddr='+ar_nearest[i]["address"]+', '+ar_nearest[i]["zip"] +' ' +ar_nearest[i]["city"] +', Österreich';
			gm_url = gm_url +  '&hl=de&geocode=&mra=ls&sll='+mittelwert_x+','+mittelwert_y+'&sspn='+diff_mittelwert_x+','+diff_mittelwert_y+'&ie=UTF8&t=h';
			gm_url = googleMapsFriendlyUrl(gm_url);
			var gm_link = '<br><a target="_blank" href="' + gm_url + '">Route Berechnen</a>';
		}
		else
			gm_link = '';
	
		var j = parseInt(i) + 1;
		eval('var html_'+i+' = infoHmtl + gm_link;');
		eval('var html2_'+i+' = infoHmtl + gm_link;');
		eval('var point_'+i+' = new GLatLng(ar_nearest[i]["lat"], ar_nearest[i]["lng"]);');

		if(eintraege_nummerieren)
		{
			if(ar_nearest[i]['membership']==4)
				eval('var icon_'+i+'   = MapIconMaker.createLabeledMarkerIcon({addStar: false, label: "'+j+'", primaryColor: "#009900"});');
			else
				eval('var icon_'+i+'   = MapIconMaker.createLabeledMarkerIcon({addStar: false, label: "'+j+'", primaryColor: "#FD766A"});');
			eval('var marker_'+i+' = new GMarker(point_'+i+', {icon: icon_'+i+'});');
		}
		else
			eval('var marker_'+i+' = new GMarker(point_'+i+');');

		if(hideInfoWindows == false)
		{
			eval('GEvent.addListener(marker_'+i+', "click", function(){map.setCenter(point_'+i+'); marker_'+i+'.openInfoWindowHtml(html_'+i+')});');
			eval('GEvent.addListener(marker_'+i+', "mouseover", function(){marker_'+i+'.openInfoWindowHtml(html_'+i+')});');
		}
		eval(' map.addOverlay(marker_'+i+');');
		
	}




	eval("map.setCenter(point, "+zoom+");"); //sonst funktioniert das irgendwie nicht...
	if(showPoint == true)
	{
		var blueIcon = new GIcon(G_DEFAULT_ICON);
		blueIcon.image = "http://www.klienten-info.at/geodb/marker_blue.png"; 
	
		var marker = new GMarker(point, {icon:blueIcon}); 
		var html_standort = "<b>Ihr Standort</b>";
		var html_standort2 = html_standort
		GEvent.addListener(marker, "mouseover", function(){marker.openInfoWindowHtml(html_standort)});
		GEvent.addListener(marker, "click", function(){map.setCenter(point); marker.openInfoWindowHtml(html_standort2)});
	
		map.addOverlay(marker);
	}

}


function googleMapsFriendlyUrl(myString)
{
	myString = myString.replace(/ö/g, "oe");
	myString = myString.replace(/Ö/g, "Oe");
	myString = myString.replace(/ä/g, "ae");
	myString = myString.replace(/Ä/g, "ae");
	myString = myString.replace(/ü/g, "ue");
	myString = myString.replace(/Ü/g, "Ue");
	myString = myString.replace(/ß/g, "ss");
	myString = myString.replace(/&szlig;/g, "ss");
	myString = myString.replace(/&auml;/g, "ae");
	myString = myString.replace(/&Auml;/g, "Ae");
	myString = myString.replace(/&ouml;/g, "oe");
	myString = myString.replace(/&Ouml;/g, "Oe");
	myString = myString.replace(/&uuml;/g, "ue");
	myString = myString.replace(/&Uuml;/g, "Ue");	
	myString = myString.replace(/ /gi,"+");
	return myString;
}
