
function unloadMe() {
  var i;	
  clearMarkers();
  if(map!=null && controls!=null && controls.length > 0) {
    for(i=0; i<controls.length; i++) {
      map.removeControl(controls[i]);
      delete controls[i];
      controls[i] = null;
    }
  }
  controls = [];
  GUnload();
}
var arrHere = ['wohnen','gebiete','gewerbe'];
var arrHereLen = arrHere.length;
var navi = {
	bBtnOver: null,
	bBtnOut: null,
	bBtnClick: null,
	btnOver: function(e) {
		var el=Event.element(e);
		Event.stop(e);
		if(el.nodeName!='SPAN') return;
		Element.setStyle(el.id,{color:'#f90',backgroundColor:'#006',cursor:'pointer'});
	},
	btnOut: function(e) {
		var el=Event.element(e);
		Event.stop(e);
		if(el.nodeName!='SPAN') return;
		if(el.id!=here) Element.setStyle($(el.id),{color:'#006',backgroundColor:'#fff'});
	},
	btnClick: function(e) {
		from = '';
		var el=Event.element(e),s;
		Event.stop(e);
		if(el.nodeName!='SPAN') return;
		here = el.innerHTML.toLowerCase();
		$('top_right').style.backgroundImage="url(img/top_"+here+".jpg)";
		setTxtFound(foundCount,obj);
		loadObjData();
		updateAll();
		Element.setStyle(el.id,{color:'#f90',backgroundColor:'#006'});
		$A($$('table#tabNavi span')).each(function(s){
			if(here==s.innerHTML.toLowerCase()) {
				Event.stopObserving(s.id,'mouseout',navi.bBtnOut,false);
			}
			else {
				Element.setStyle(s.id,{color:'#006',backgroundColor:'#fff'});
				Event.observe(s.id,'mouseout',navi.bBtnOut,false);
			}
		});
	}
}
navi.bBtnOver = navi.btnOver.bindAsEventListener(navi);
navi.bBtnOut = navi.btnOut.bindAsEventListener(navi);
navi.bBtnClick = navi.btnClick.bindAsEventListener(navi);
function searchAll() {
	from = '';
	searchMode = 'all';
	updateAll();
	setMyBounds(map);
}
function updateAll() {
	myLevel=(map.getZoom()<zoom_obj)?'ort':'obj';
	getFrmParams();
	if(map.getZoom()>zoomStart || searchMode=='all' || mapInAction==1) {
		setMyBounds(map);
		getList(searchMode);
	}
	if(debugParams==1) myDebug();
}
function myDebug() {
	var i=0;
	var len = arrDebug.length;
	txtDebug='';
	for(i=0;i<len;i++) {
		txtDebug+=arrDebug[i]+":	"+eval(arrDebug[i])+"<br/>";
	}
	showDebugger(txtDebug);
}
function removeCenterControl() {
//	return;
	var d=null,i=0;
	var divs = $('map').getElementsByTagName('div');
	var len = divs.length;
	for(i=0;i<len;i++){
		d=divs[i];
		if(d.getAttribute('log') && d.getAttribute('log')=='center_result') {
			d.setAttribute('log','');
			d.setAttribute('title','zurück zum Startzustand');
			d.onclick = goToStart;
			
//			d.style.backgroundImage="none";
//			d.style.display="none";
//			alert(i+': '+d.getAttribute('log'))
			break;
		}
	}
}
function myStartControl() {}
myStartControl.prototype = new GControl();
myStartControl.prototype.initialize = function(map) {
	var container = document.createElement("div");
	startDiv = document.createElement("div");
	this.setButtonStyle(startDiv);
	container.appendChild(startDiv);
	startDiv.appendChild(document.createTextNode("StartMap"));
	GEvent.addDomListener(startDiv, "click", function(){
		goToStart();
	});
	map.getContainer().appendChild(container);
	return container;
}
function goToStart() {
	location.href='index.php5?here='+here+'&mode='+mode+'&map=1';
}
myStartControl.prototype.getDefaultPosition = function() {
	return new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(7,15));
}
myStartControl.prototype.setButtonStyle = function(btn) {
	btn.style.fontWeight = "normal";
	btn.style.textDecoration = "none";
	btn.style.color = "#000";
	btn.style.backgroundColor = "white";
	btn.style.fontFamily = "arial";
	btn.style.border = "1px solid black";
	btn.style.paddingTop = "1px";
	btn.style.verticalAlign = "middle";
	btn.style.textAlign = "center";
	btn.style.width = "63px";
	btn.style.height = "16px";
	btn.style.cursor = "pointer";
}
function clearMarkers() {
	var i=0
	if (!gmarkers & mCount > 0) {
    	mCount = 0
		return
	}
	for (i=0; i<gmarkers.length; i++) {
		if(gmarkers[i].handleClick != null) {
			GEvent.removeListener (gmarkers[i].handleClick);
			gmarkers[i].handleClick = null;
		}
		if(gmarkers[i].handleMouseover != null) {
			GEvent.removeListener (gmarkers[i].handleMouseover);
			gmarkers[i].handleMouseover = null;
		}
		if(gmarkers[i].handleMouseout != null) {
			GEvent.removeListener (gmarkers[i].handleMouseout);
			gmarkers[i].handleMouseout = null;
		}
		if(gmarkers[i].marker != null) {
			map.removeOverlay (gmarkers[i].marker);
			delete gmarkers[i].marker;
			gmarkers[i].marker = null;
		}
		if(gmarkers[i].icon != null) {
			delete gmarkers[i].icon;
			gmarkers[i].icon = null;
		}
	}
	for (i=0; i<gmarkers.length; i++) {
		delete gmarkers[0];
	}
	if(map) map.clearOverlays();
	mCount = 0;
	gmarkers = [];
	mgrOrt = new GMarkerManager(map);
	mgrObj = new GMarkerManager(map);
}
function setMyBounds(m) {
	var b = m.getBounds()
	minX = b.getNorthEast().lat().toFixed(precision)
	minY = b.getNorthEast().lng().toFixed(precision)
	maxX = b.getSouthWest().lat().toFixed(precision)
	maxY = b.getSouthWest().lng().toFixed(precision)
}
function setDefault() {
	myLevel = 'ort'
	mapInAction = 0;
	from = '';
	searchMode = 'ort';
	removeListItems();
	Element.update('help',helpMsg)
	Element.update('titleListe','')
	if($('titleListe')) Element.hide('titleListe')
	if($('list')) Element.hide('list')
	Element.show('help')
	map.setMapType(G_NORMAL_MAP)
	map.setZoom(zoomStart)
	point = new GLatLng(latStart,lngStart)
	map.setCenter(point,zoomStart)
	point = map.getCenter()
	currentZoom = map.getZoom()
	currentLat = point.lat().toFixed(precision)
	currentLng = point.lng().toFixed(precision)
}
function createMarker(p,myobj,icn) {
	marker[myobj.id] = new GMarker(p,icn);
	var handleClick = GEvent.addListener(marker[myobj.id], 'click', function() {
		mapInAction = 1;
		if(myLevel=='ort') {
			idParent = myobj.id
			zoom_obj = myobj.zoom_obj
			searchMode='ort'
			map.setCenter(p)
			map.setZoom(zoom_obj)
			getList(searchMode)
			removeTxtData()
//			alert(zoom_obj)
		}
		else {
			goToObjekt(myobj.id)
		}
	});
	var handleMouseover = GEvent.addListener(marker[myobj.id], 'mouseover', function() {
		if(myLevel=='ort') {
			label = new ELabel(p,myobj.name,'mapLabel');
			map.addOverlay(label);
			setTxtData(myobj)
		}
		else {
			$A($$('div#list ul li')).each(function(li){Element.setStyle(li,paramList)});
			marker[myobj.id].setImage('img/icon_k38.png');
			Element.setStyle(myobj.id.toString(),paramSelList)
			getBild(myobj.file);
			showDescr(myobj.id);
		}
	});
	var handleMouseout = GEvent.addListener(marker[myobj.id], 'mouseout', function() {
		if(myLevel=='ort') {
			if(label!=null) map.removeOverlay(label);
			removeTxtData();
		}
		else {
			marker[myobj.id].setImage(iconObj.image);
			Element.setStyle(myobj.id.toString(),paramList)
		}
	});
	gmarkers[mCount] = new Object();
	gmarkers[mCount].marker = marker[myobj.id];
	gmarkers[mCount].handleClick = handleClick;
	gmarkers[mCount].handleMouseover = handleMouseover;
	gmarkers[mCount].handleMouseout = handleMouseout;
	gmarkers[mCount].icon = icn;
	mCount++;
	handleClick = null
	handleMouseover = null
	handleMouseout = null
	
	return marker[myobj.id]
}
function setOrtIcons(o) {
	clearMarkers()
	if(map.getZoom()>=zoom_obj) return
	var p=null,m=null,k=null,arr=[],a=[];
	showLoaderMap()
	if(typeof o=="undefined") {
		for (k in myPoints) {
			p = new GLatLng(parseFloat(myPoints[k].lat), parseFloat(myPoints[k].lng))
			if(checkMBR(p)==true) {
				m = createMarker(p,myPoints[k],icon)
				arr.push(m)
			}
		}
	}
	else {
		var a=collectOrtFromObj()
		for (k in myPoints) {
			p = new GLatLng(parseFloat(myPoints[k].lat), parseFloat(myPoints[k].lng))
			if(checkMBR(p)==true && a.length>0 && $A(a).indexOf(myPoints[k].id)!=-1) {
//			if(checkMBR(p)==true) {
				m = createMarker(p,myPoints[k],icon)
				arr.push(m)
			}
		}
	}
	mgrOrt.addMarkers(arr,zoomStart,(zoom_obj-1))
	mgrOrt.refresh()
	hideLoaderMap()
}
function setObjIcons(o) {
	clearMarkers()
	if(map.getZoom()<zoom_obj) return;
	var p=[],m=null,k,i=0,b=null,arr=[];
	for (k in o) {
		p[i] = new GLatLng(parseFloat(o[k].lat), parseFloat(o[k].lng));
		if(i>0 && p[i].equals(p[i-1])==true) continue;
		b = map.getBounds();
		if(checkMBR(p[i])==true) {
			m = createMarker(p[i],o[k],iconObj);
			arr.push(m)
		}
		i++
	}
	mgrObj.addMarkers(arr,zoom_obj,zoomEnd)
	mgrObj.refresh()
	hideLoaderMap();
}

function collectOrtFromObj() {
	loadObjData()
	if(obj==null) return [];
	var a=[]
	for(k in obj) {
		a.push(obj[k].id_ort)
	}
	return a.uniq()
}
function checkMBR(p) {
	return map.getBounds().contains(p);
}
function setTxtFound(c,o) {
	var el = $('found'),count='',txt;
	if(o==null) {
		txt = tplFound.replace(/%here%/,here.toUpperCase().bold());
		txt = txt.replace(/%count%/,foundCount.bold().fontcolor("#ff0000"));
	}
	else {
		var w = (c>0)?'Objekte':'Objekt';
		txt = c.toString().bold().fontcolor('#ff0000')+" "+w+" aus dem Bereich "+here.bold().toUpperCase()+" innerhalb der aktuellen Kartenauswahl.";
	}
	el.innerHTML = txt;
	el.style.display='block';
}
function removeTxtFound() {
	var el = $('found');
	el.innerHTML = '';
}
function setTxtData(o) {
	if(myLevel=='obj') return;
	var el = $('data');
	var word = (o.anzahl>0)?'Objekte':'Objekt';
	el.innerHTML = (o.anzahl+' '+word+' in '+o.name).bold();
}
function removeTxtData() {
	var el = $('data');
	el.innerHTML = '';
}
function setTextTitleListe() {
	if(myLevel=='ort') {
		$('titleListe').innerHTML = ('Objekte in '+eval('myPoints.p'+idParent+'.name')).bold();
	}
	else {
		$('titleListe').innerHTML = ('alle Objekte im Kartenausschnitt').bold();
	}
}
function removeTextTitleListe() {
	$('titleListe').innerHTML = '';
}
function showDebugger(msg) {
	$('errmsg').innerHTML=msg.replace(/[\n\r]+/g,'<br />');
	$('errframe').style.display='block';
}
function addListItems(ul,i,id,val,ort) {
	var myBold = null
	var li = document.createElement("LI");
	li.setAttribute('id',id)
	var valNode = document.createTextNode(val);
	if(ort!='') {
		var myBold = document.createElement("b");
		var ortNode = document.createTextNode('['+ort+'] ')
		myBold.appendChild(ortNode)
		li.appendChild(myBold)
	}
	li.appendChild(valNode);
	ul.appendChild(li);
	$('list').appendChild(ul);
}
function removeList() {
	if($$('div#list ul li').length==0) return;
	$A($$('div#list ul li')).each(function(el){$A($$('div#list ul'))[0].removeChild(el)});
	var ul = $('list').firstChild;
	$('list').removeChild(ul);
}
function getList(sMode) {
	if(map.getZoom()>=zoomStart) showLoaderList();
	showLoaderMap();
	map.clearOverlays();
	if(sMode && sMode=='all') idParent=0;
	getFrmParams();
	var urlParam = 'idParent='+idParent+'&seachMode='+searchMode+'&zoom='+map.getZoom()+'&minX='+minX+'&minY='+minY+'&maxX='+maxX+'&maxY='+maxY+'&here='+here+'&get=js&'+frmParams;
	new Ajax.Request('aj_data.php5',{
		method:'post',
		parameters:urlParam,
		onSuccess:function(r){
			if(debugData==1) showDebugger(r.responseText.replace(/[\n\r]+/g,'<br />'));
			if(r.responseText==0) {
				$('list').innerHTML='<br /><center><b>keine Daten vorhanden!</b></center>';
			}
			else {
				$('list').innerHTML='';
				eval(r.responseText);
				setTxtFound(foundCount,obj);
				if(sMode=='all') {
					$('titleListe').innerHTML = ('Alle Objekte im Kartenbereich').bold();
					$('titleListe').style.display = 'block';
					if(map.getZoom()>(zoomStart-1)) getListItems(obj);
					if(myLevel=='ort') {
						setOrtIcons(obj);
					}
					else {
						setObjIcons(obj);
					}
				}
				else {
					var myp = eval("myPoints.p"+idParent);
					if(typeof myp != "undefined") {
						$('titleListe').innerHTML = ("Objekte in "+myp.name).bold();
						$('titleListe').style.display = 'block';
					}
					getListItems(obj);
					if(myLevel=='obj') {
						setObjIcons(obj);
					}
					else {
						setOrtIcons(obj);
					}
				}
			}
			if(map.getZoom()>=zoomStart) {
				$('help').style.display='none';
				$('list').style.display='block';
			}
		},
		onFailure:function(r){showError(r.responseText)}
	});
	hideLoaderMap();
}

function loadObjData(sMode) {
	if(sMode && sMode=='all') idParent=0;
//	Form.enable(document.frm)
	getFrmParams();
	var urlParam = 'idParent='+idParent+'&seachMode='+searchMode+'&zoom='+map.getZoom()+'&minX='+minX+'&minY='+minY+'&maxX='+maxX+'&maxY='+maxY+'&here='+here+'&get=js&'+frmParams;
	new Ajax.Request('aj_data.php5',{
		method:'post',
		parameters:urlParam,
		onSuccess:function(r){
			if(debugData==1) showDebugger(r.responseText.replace(/[\n\r]+/g,'<br />'));
			eval(r.responseText);
			setTxtFound(foundCount,obj);
			return obj;
		},
		onFailure:function(r){showError(r.responseText)}
	});
}
function showLoaderList() {
	$('help').innerHTML = '<br /><p /><br /><center>'+$('wait').innerHTML+'</center>';
}
function hideLoaderList() {
	$('help').style.display='none';
}
function showLoaderMap() {
	$('mapLoader').style.display='block';
}
function hideLoaderMap() {
	$('mapLoader').style.display='none';
}
function getListItems(ob) {
	var i = 0
	if($A($$('div#list ul li'))) removeList();
	var ul = document.createElement("UL");
	for(k in ob) {
		if(searchMode==='ort') {
			addListItems(ul,i+1,ob[k].id,obj[k].name,'')
		}
		else {
			addListItems(ul,i+1,ob[k].id,obj[k].name,obj[k].ort)
		}
//					else addListItems(i, obj[k].id,'['+obj[k].ort+'] '+obj[k].name)
		if(obj[k].file!='') {
			pics[obj[k].file] = new Image()
			pics[obj[k].file].src = pathPics+obj[k].file
		}
		else {
			pics[obj[k].file] = new Image()
			pics[obj[k].file].src = 'img/no_img.gif'
		}
		if(from=='detail' && obj[k].id==id) {
			Element.setStyle(obj[k].id.toString(),paramSelList)
			getBild(obj[k].file);
			showDescr(obj[k].id);
		}
		i++;
	}
	$('help').style.display='none';
	$('list').style.display='block';
}
function setRegion() {
	if($('region')) Element.show('region')
	if(region!=null) return
	region = new TPhoto(map)
	region.id = 'region'
	region.src = imgRegion
	region.percentOpacity = imgRegionOpacity
	region.anchorTopLeft = new GLatLng(52.82, 12.14)
	region.anchorBottomRight = new GLatLng(51.79, 13.66)
	var p = map.addTPhoto(region)
}
function removeRegion() {
	if($('region')) Element.hide('region')
}
function getBild(file) {
	document.thumb.src=pics[file].src
	document.thumb.width=pics[file].width
	document.thumb.height=pics[file].height
}
function showThumb(e) {
	var el = Event.element(e)
	Event.stop(e)
	if(el.nodeName!='LI') return
	var myobj=eval('obj.o'+el.id)
//	if(myobj && myobj.file) 
	getBild(myobj.file)
	$A($$('div#list ul li')).each(function(li){Element.setStyle(li,paramList)});
	Element.setStyle(el,paramSelList)
	showDescr(el.id);
	if(marker[el.id] && myLevel=='obj') marker[el.id].setImage('img/icon_k38.png');
}
function hideThumb(e) {
	var el = Event.element(e)
	Event.stop(e)
	if(el.nodeName!="LI") return
	Element.setStyle(el,paramList)
	if(marker[el.id] && myLevel=='obj') marker[el.id].setImage(iconObj.image);
}
function showDescr(id) {
	if(typeof obj=='undefined') return;
	var myobj=eval('obj.o'+id);
	html=myobj.descr+'<br />'
	if(preis==true && myobj.preis>0) html+='<br />Preis: '+myobj.preis+' €'
	if(miete==true && myobj.miete>0) html+='<br />Miete: '+myobj.miete+' €'
	if(bebaut==true) html+='<br />Fläche: '+myobj.flaeche+' qm'
	if(unbebaut==true) html+='<br />Grösse: '+myobj.groesse+' qm'
	getBild(myobj.file)
	$('descr').innerHTML=html
}
function goToObjektFromList(e) {
	var el = Event.element(e);
	Event.stop(e);
	if(el.nodeName!='LI') return;
	goToObjekt(el.id);
}
function goToObjekt(id) {
	var s = Form.serialize(document.frm)
	var params = s.replace(/&objList=[0-9]*/g,'');
	var p=map.getCenter();
	var lt=p.lat().toFixed(precision).toString();
	var lg=p.lng().toFixed(precision).toString();
	var z=map.getZoom().toString();
	delete p;
	location.href='index.php5?here='+here+'&searchMode='+searchMode+'&key=Allgemein&mode=detail&id='+id+'&idParent='+idParent+'&map=0&currentLat='+lt+'&currentLng='+lg+'&currentZoom='+z+'&'+params;
}
function selOption(f,v) {
	var i=0;
	var len=f.options.length;
	for(i=0;i<len;i++) {
		if(f.options[i].value==v && v!=null) {
			f.options[i].selected=true;
			break;
		}
	}
}
function selCheck(f,v) {
	var i=0;
	var len=f.length;
	for(i=0;i<len;i++) {
		if(f[i].value==v && v!=null) {
			f[i].checked=true;
			break;
		}
	}
}
function selFrmValues() {
	if(from!='detail' || myGet==null) return;
	var i,f,t,d,v,o='';
	var len = document.frm.elements.length;
	for(i=0;i<len;i++) {
		f=document.frm.elements[i].name;
		t=document.frm.elements[i].type;
		v=document.frm.elements[i].value;
		g=eval('myGet.'+f);
		d=(typeof g!='undefined')?g:null;
		if(t=='select-one') {
			o+=g+"\n"
			if(g!=null) selOption(eval('document.frm.'+f),g);
		}
		else if(t=='radio') {
			o+=g+"\n"
			if(g!=null) selCheck(eval('document.frm.'+f),g);
		}
	}
	getFrmParams();
}
function getFrmParams() {
	var s = Form.serialize(document.frm)
	frmParams = s.replace(/&objList=[0-9]*/g,'')
	return frmParams;
}
function setFrmParams() {
	Form.enable(document.frm)
	var s = Form.serialize(document.frm)
	frmParams = s.replace(/&objList=[0-9]*/g,'')
	var f=document.frm
	if(f.checkPreis) {
		if(f.checkPreis[0].checked==true) {
			f.checkPreis[0].checked=true
			preis=true
			miete=false
			f.mietpreisVon.options[0].selected=true
			f.mietpreisBis.options[0].selected=true
		}
		else if(f.checkPreis[1].checked==true) {
			preis=false
			miete=true
			f.kaufpreisVon.options[0].selected=true
			f.kaufpreisBis.options[0].selected=true
		}
	}
	else {
		setFrmPreisDefault()
	}
	if(f.checkBau || typeof myGet.checkBau!='undefined') {
		if(f.checkBau[0].checked==true) {
			bebaut=true
			unbebaut=false
			f.unbebautVon.options[0].selected=true
			f.unbebautBis.options[0].selected=true
		}
		if(f.checkBau[1].checked==true) {
			bebaut=false
			unbebaut=true
			f.bebautVon.options[0].selected=true
			f.bebautBis.options[0].selected=true
		}
	}
	else {
		setFrmBauDefault()
	}
	f.kaufpreisBis.onchange=function(){updateAll()}
	f.mietpreisBis.onchange=function(){updateAll()}
	f.bebautBis.onchange=function(){updateAll()}
	f.unbebautBis.onchange=function(){updateAll()}
}
function setFrmPreisDefault() {
	var f=document.frm
	Field.clear(f.checkPreis)
	f.mietpreisVon.options[0].selected=true
	f.mietpreisBis.options[0].selected=true
	f.kaufpreisVon.options[0].selected=true
	f.kaufpreisBis.options[0].selected=true
	preis=false
	miete=false
}
function setFrmBauDefault() {
	var f=document.frm
	Field.clear(f.checkBau)
	f.unbebautVon.options[0].selected=true
	f.unbebautBis.options[0].selected=true
	f.bebautVon.options[0].selected=true
	f.bebautBis.options[0].selected=true
	bebaut=false
	unbebaut=false
}
function setFrmDefault() {
	setFrmPreisDefault()
	setFrmBauDefault()
}
function observeMyForm() {
	var el=null,i=0;
	if(!document.frm) return;
	var len = document.frm.elements.length
	for(i=0;i<len;i++) {
		el = document.frm.elements[i]
		if(el.type=='select-one' && el.name!='objList') {
			new Form.Element.EventObserver(el, function(){setFrmParams(el)});
		}
	}
	getFrmParams();
}

