show_output=true;

startcheck=false;
map="";
started=false;
beitraege=false;
cnt_marker=0;
geocode_string="";
current_entry=false;
cnt_beitraege=0;
err_counter=0;
stop_loading=false;
current_thema=false;
geocoder=false;

div_status=false;
dstatus=false;
div_icon=false;
error=false;

cnt_geo=0;
cnt_dir=0;
checkdom_cnt=0;

function checkdom() {

	try {
		if (document.getElementById("map") && document.getElementById("status") && document.getElementById("inprogress")  && document.getElementById("serror") && document.getElementById("sticon") && GMap2 && GClientGeocoder) {
			throw true;
		} else {
			throw false;
		}
	} catch(e) {
		if (!e) {
			if (checkdom_cnt<60) {
			startcheck=setInterval(checkdom,500);
			checkdom_cnt++;
			} else {
				clearInterval(startcheck);
				alert('Applikation konnte nicht initialisiert werden!');
			}
		}
		if (e) {
			clearInterval(startcheck);
			initialize();
		}

	}

}



function initialize(){
	/* HTML-Output-Objekte initialisieren */
	dstatus=document.getElementById("status");
	error=document.getElementById("serror");
	div_status=document.getElementById("inprogress");
	div_icon=document.getElementById("sticon");



	// muss im Formualr stehen!
	var context = document.forms['db_suche'].con.value;
	var x_5 = document.forms['db_suche'].x_5.value;
	var thema = (document.forms['db_suche'].thema.value) ? document.forms['db_suche'].thema.value :false;
	var thema = (document.forms['db_suche'].thema.value) ? document.forms['db_suche'].thema.value : false;
	var land = (document.forms['db_suche'].land.value) ? document.forms['db_suche'].land.value : false;
	var org = (document.forms['db_suche'].org.value) ? document.forms['db_suche'].org.value : false;
	var ort = document.forms['db_suche'].x_1.value;
	ort = (ort=='Ort eingeben') ? '' : ort;
	var plz = document.forms['db_suche'].x_2.value;
	plz = (plz=='PLZ eingeben')  ? '' : plz;
	var qu = document.forms['db_suche'].qu.value;
	qu = (qu=='Suchbegriff eingeben') ? '' : qu;
	//

	if (GBrowserIsCompatible()) {

		map = new GMap2(document.getElementById("map"));
		map.enableScrollWheelZoom();
		map.enableContinuousZoom();

		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		map.setCenter(new GLatLng(51.49899167,10.40090556), 6);
		// falls es ein Thema gibt, dieses vorselektieren

		var c  = (context) ? context : '';



		var c_str =(thema) ? 'c='+thema : 'c='+context;
		c_str=  (land) ? ((c_str.length) ? c_str+";"+land : land) : c_str;
		c_str=  (org) ? ((c_str.length) ? c_str+";"+org : org) : c_str;
		var url=c_str+"&x_1="+ort+"&x_2="+plz+"&qu="+qu+"&x_5="+x_5;
		get_contacts(url);
	} else {
		var tmap = document.getElementById("map");
		var errorHTML = "<h1 style='color:red;'>Ihr Browser ist nicht zur Kartendarstellung geeignet</h1>";
		tmap.innerHTML=errorHTML;
	}
}


function admin_alert(txt,vars) {
	//alert(txt);
	new Ajax.Request('/app/map_error.php', {
		encoding: 'UTF-8',
		method: "post",
		parameters: {'txt':txt, 'vars':vars},
		onComplete: function(t){
			return true;
		}
	});
}

function get_contacts(url) {
	page_output('Lade Daten ...');
	new Ajax.Request('/app/map.php', {
		encoding: 'UTF-8',
		method: "post",
		parameters: {'url':url},
		onComplete: function(t){
			stop_loading=false;
			var json = t.responseJSON;
			if (!json) {
				page_output('Anfrage fehlgeschlagen!', ERROR);
				admin_alert('kein JSON-Object geladen!', {'url':url});
				return false;
			}

			gen_markers_form_contacts(json);
		}
	});

}

function gen_markers_form_contacts(json){

	if (!started) {

		started=true;
		stop_loading=false;

		// Geocoder Instantzieren
		if (!geocoder) {
			geocoder = new GClientGeocoder();
			geocoder.setBaseCountryCode('DE');
		}
		beitraege = (json.beitraege) ? json.beitraege : false;
		if (beitraege) {
			cnt_beitraege = beitraege.length;
			var txt="Treffer: 0/"+cnt_beitraege;
			page_output(txt);
			if (cnt_beitraege>0) {
			setMarker(beitraege[cnt_marker]);
			}
			if(cnt_beitraege==0) {
				close_status_div();

			}

		}
	}

}

function format_str(str) {
	if (str) {
		str = str.replace(/\"/g, "'");
	} else {

		str="";
	}
	return str ;
}

function show_status() {


}

function setMark(koordinaten) {
	if (!stop_loading) {

		if (!koordinaten) {
			err_counter++;
			//admin_alert('keine Koordinaten:'+current_entry.name);

		} else {

			var titel = current_entry.titel;
			var name = current_entry.name;
			var strasse = (current_entry.strasse) ? current_entry.strasse :false;
			var ort = (current_entry.ort) ? current_entry.ort : false;
			var plz = (current_entry.plz) ? current_entry.plz : false;
			var tel = (current_entry.telefon) ? current_entry.telefon : false;
			var fax = (current_entry.fax) ? current_entry.fax : false;
			var email = (current_entry.email) ? current_entry.email : false;
			var web = (current_entry.url) ? current_entry.url : false;
			var ansprech = (current_entry.ansprech) ? current_entry.ansprech : false;
			var bei_href = (current_entry.bei_href) ? current_entry.bei_href : false;

			var markerOptions = { draggable:false, title:titel };
			var curMarker = new GMarker(koordinaten, markerOptions);
			var myhtml="<div class='info'>";
			myhtml += (bei_href) ? "<b><a href='"+bei_href+"' target='_self' title='zur Detailansicht'>"+format_str(titel)+"</a></b><br>" : "<b>"+format_str(titel)+"</b><br><br>";


			myhtml+= (name && name != titel) ? format_str(name)+"<br>" : "";
			myhtml+= (strasse) ? format_str(strasse)+"<br>" : "";
			myhtml+= (plz) ? format_str(plz)+" " : "";
			myhtml+= (ort) ? format_str(ort) : "";

			if (ansprech || tel || fax || email || web) {
				myhtml+="<br><br>";
				myhtml+= (ansprech) ? "Ansprechpartner: "+format_str(ansprech) : "";
				myhtml+= (tel) ? "Telefon: "+format_str(tel)+"<br>" : "";
				myhtml+= (fax) ? "Telefax: "+format_str(fax)+"<br>" : "";
				myhtml+= (email) ? "E-Mail: <a href='mailto:"+format_str(email)+"'>"+format_str(email)+"</a><br>" : "";
				myhtml+= (web) ? "<a href='"+web+"' target='_blank'>"+web+"</a>" : "";

			}
			if (bei_href) {
				myhtml+="<br><br><a href='"+bei_href+"' target='_self' title='zum Beitrag'>zur Detailansicht <img src='/g/pfeil_weiss.gif' border='0' alt='' class='icon'/></a>";

			}
			myhtml+="</div>";
			var infooptions = {maxWidth:200};
			var func_str = "function openfunc"+cnt_marker+"(){this.openInfoWindowHtml(\""+myhtml+"\", infooptions);}";
			eval(func_str);
			GEvent.addListener(curMarker, "click", eval("openfunc"+cnt_marker));
			map.addOverlay(curMarker);
			// marker.openInfoWindowHtml(geocode_string+"<br><br>Positionieren Sie Ihren Marker, falls die Position nicht korrket ist");
		}
		cnt_marker++;
		var ptxt="Treffer: "+cnt_marker+"/"+cnt_beitraege;
		page_output(ptxt);

		if (cnt_marker<cnt_beitraege && !stop_loading) {
			setMarker(beitraege[cnt_marker]);
		} else if (cnt_marker==cnt_beitraege) {
			stop_loading=true;
			close_status_div();
		}
	}
}

function setMarker(obj){
	if (obj && !stop_loading) {
		current_entry=obj;
		var ort = (obj.ort) ? obj.ort : false;
		var strasse = (obj.strasse) ? obj.strasse : false;
		var geo = (obj.geo) ? obj.geo : false;
		geocode_string=strasse+", "+ort;
		if(!geo) {
			// keine Georeferenz? Dann versuchen diese mittels Geocoder zu ermitteln
			cnt_geo++;

			geocoder.getLatLng(
			geocode_string,
			function(koordinaten){
				setMark(koordinaten);
			}
			);
			//g.innerHTML=cnt_geo;
		} else if (geocode_string.length==0) {
			// was ist das denn?

		} else {
			// Marker für Georeferenz eintragen
			cnt_dir++;
			var ggeos = geo.split(",");
			var myKoord =new GLatLng(ggeos[0], ggeos[1]);
			if (!myKoord) {
				// hier könnte man eine Ausgabe machen..
				admin_alert('fehlerhafte Koordinaten:'+geo);
			} else {
				setMark(myKoord);
				//d.innerHTML=cnt_dir;
			}
		}
	}
}
function changeMap(obj) {
	if (obj) {
		var url="";
		var c="";
		var ort = obj.x_1.value;
		ort = (ort=='Ort eingeben') ? '' : ort;
		//obj.x_1.value = ort;

		var plz = obj.x_2.value;
		plz = (plz=='PLZ eingeben')  ? '' : plz;
		//obj.x_2.value = plz;

		var qu = obj.qu.value;
		qu = (qu=='Suchbegriff eingeben') ? '' : qu;
		//obj.qu.value = qu;

		var thema = (obj.thema.value) ? obj.thema.value : false;
		var land = (obj.land.value) ? obj.land.value : false;
		var org = (obj.org.value) ? obj.org.value : false;
		var context = (obj.con.value) ? obj.con.value : false;

		if (obj.changeaction.value == 'J' && thema!=context && thema.length>0) {
			var fieldname = "map_"+thema;
			var zielcontext = obj.elements[fieldname].value;
				if (zielcontext>0) {


				obj.action="/cms/ziel/"+zielcontext;
				obj.submit();
				}
			}
		if (obj.changeaction.value == 'J' && thema==context && thema.length>0) {
			var c =(thema) ? thema : context;
		}
		if (obj.changeaction.value != 'J' && thema!=context && thema.length>0) {
			var c =context;
			url+="x_3="+thema+"&";
		} else {
			var c =(thema) ? thema : context;
		}

		c=  (land) ? ((c.length) ? c+";"+land : land) : c;
		c=  (org) ? ((c.length) ? c+";"+org : org) : c;

		url+="c="+c+"&x_1="+ort+"&x_2="+plz+"&qu="+qu;
		stop_loading=true;
		reset_globals();
		map.clearOverlays();
		get_contacts(url);
	}



}

function reset_globals() {
	started=false;
	beitraege=[];
	cnt_marker=0;
	geocode_string="";
	current_entry={};
	cnt_beitraege=0;
	err_counter=0;
	error.innerHTML='';
	dstatus.innerHTML='';
	stop_loading=false;
	cnt_dir=0;
	cnt_geo=0;
}

//Konstanten für die page_output-Funktion
ERROR=1;
function open_status_div() {
	div_icon.innerHTML='';
	div_icon.style.backgroundImage='url(/g/loading.gif)';
	div_status.style.display='block';

}

function close_status_div() {
	div_icon.innerHTML="<input type='button' value='x' onclick='close_status()' id='x_button'/>";
	div_icon.style.backgroundImage='none';

}
function close_status() {
	div_status.style.display='none';

}

function page_output(str,stat) {
	if (show_output) {
		open_status_div();
		stat=(stat)?stat:0;
		switch (stat) {
			case 1:

			error.innerHTML=str;
			break;
			case 0:
			dstatus.innerHTML=str;
		}
	}
}
