/**
* link zur aktuellen ansicht erstellen
* @access public
* @return void
**/
function buildLinkForActualView()
{
	var get_data = 'showTyp=' + arShowTyp.join(','),
	    curCenter = GMap.getCenter();
	get_data += bonlyownMarkers && typeof( curUserId ) != "undefined" ? "&fromUser=" + curUserId : "";
	get_data += "&center=" + curCenter.lat() + ',' + curCenter.lng();
	get_data += "&zoom=" + GMap.getBoundsZoomLevel(GMap.getBounds());
	showError( 'text', 'currentLink', 'http://atlas.geteilt.de/?' + escape(get_data) );
}

/**
* auswahl ob nur eigene Marker gezeigt werden oder alle
* @access public
* @return void
**/
function onlyownMarkers()
{
	bonlyownMarkers = !bonlyownMarkers ? true : false;
	var node = document.getElementById('onlyownMarkers');
	node.className = (node.className == 'icon-notsubscribe') ? 'icon-subscribe' : 'icon-notsubscribe';
	refresh_view();
}

/**
* zeigt das ladeIcon
* @access public
* @reutn void
**/
function loadIcon(b)
{
	var s = document.getElementById('label').style;
	document.getElementById('label').innerHTML = '<img src="./theme/l.gif">';
	if(!b)
	{
		s.display = 'none';
	} else {
		s.display = 'inline';
		s.backgroundColor = 'transparent';
		s.right = '105px';
		s.left = 'auto';
		s.top = '60px';
		s.borderWidth = '0px';
		s.width = '16px';
		s.height = '16px';
		s.padding = '0px';
	}
}
/**
 * Umschalten des Anzeige-Status (Icons tauschen)
 * @access public
 * @return void
 **/
function anzeige(type_id, cat, status)
{
	//add events
	if(!bEventInit)
	{
		GEvent.addListener(GMap, 'zoomend', function() {refresh_view()});
		bEventInit = true;
	}
	
	var url = (status == 0) ? "./marker/gm-sw.png" : "./marker/gm-"+type_id+".png";
	var newstatus = (status == 0) ? 1 : 0;
	arShowTyp[type_id-1] = status;	
	
	var node = document.getElementById('ii'+type_id);
	node.style.backgroundImage = "url("+url+")";
	node = document.getElementById('il'+type_id);
	node.href = "javascript:anzeige("+type_id+",'"+cat+"',"+newstatus+")";
	
	var arCat2 = cat.split(';');
	aktAllCatLinks(arCat2, cat);
	if(arguments[3] != false) refresh_view();
}
/**
* aktiviert mehrere Menüpunkte
* @access public
* @return void
**/
function anzeigeAll(cat,status)
{
	var arCat = cat.split(';');
	
	for(i=1;i<arCat.length;++i)
	{
		anzeige(arCat[i],cat,status,false);
	}
	refresh_view();
}

function aktAllCatLinks( arCat2, cat )
{
	var bier = true;
	for(var l=1;l<arCat2.length;++l)
	{
		if(arShowTyp[arCat2[l]-1] != 1)
		{
			bier = false;
			break;
		}
	}
	node = document.getElementById('cl'+arCat2[0]);
	if(bier)
	{
		//alle sind an!
		node.href = "javascript:anzeigeAll('"+cat+"',0)";
	} else {
		node.href = "javascript:anzeigeAll('"+cat+"',1)";
	}
}
/**
* Aktualisiert die ansicht der Marker
* @access public
* @return void
**/
function refresh_view()
{
	
	//bRefreshEnabled:
	//nur eingeführt um das NonSeeing problem von markern serverseitig (MYSQL) zu verhindern und trafic zu sparen
	//derzeigt mit markermanager gelöst um performance zu sichern ... optimierung nachträglich möglich
	if(bRefreshEnabled)	
	{
		loadIcon(true);
		if(ajax.runing == false)
		{						
			//Zoomstufe
			var zoom = GMap.getZoom()
			
			//anfragestring erstellen
			var sShowTyp = arShowTyp.toString();
			
			ajax.request('showMarkers.php?u='+Number(bonlyownMarkers)+'&a='+sShowTyp+'&z='+GMap.getZoom(), 'get', new Array(), function(result) {
				
				if(wait == false)
					{
						//nur wenn keine funktion mehr wartet, wird die letzte änderung verarbeitet und auf der karte angezeigt!
						var xml = GXml.parse(result);
						var markers = xml.documentElement.getElementsByTagName("marker");
						var arMarkersToMap = new Array();

						for(i = 0; i < markers.length; i++)
						{
							if(markers[i].getAttribute('id') != 0)
							{
								//Marker
								m = createMarker(new GLatLng(parseFloat(markers[i].getAttribute('lat')),
															 parseFloat(markers[i].getAttribute('lng'))),
													 'marker/gm-'+markers[i].getAttribute('typ')+'.png',
													 markers[i].getAttribute('id'),
													 false);
								arMarkersToMap.push(m);
							} else {
								//Cluster
								var m = createCluster(new GLatLng(parseFloat(markers[i].getAttribute('lat')),
																  parseFloat(markers[i].getAttribute('lng'))),
													  markers[i].getAttribute('count'));
								arMarkersToMap.push(m);
							}
						}
						GMarkerManager.clearMarkers();
						GMarkerManager.addMarkers(arMarkersToMap, 5);
						GMarkerManager.refresh();
						loadIcon(false);
					}
					wait = false;
				}
			);
		} else {
			//das script warte, bis die letzte funktion über den timeout ausgeführt werden kann
			wait = true;
			Timeout = setTimeout('refresh_view()', 50);
		}
	}
}
/**
* Einen Einzelnen Marker laden
* @access public
* @return void
**/
function loadMarker2Map(id)
{
	ajax.request('showMarkerById.php?obj='+id, 'get', new Array(), function(result) {
			var xml = GXml.parse(result);
			var markers = xml.documentElement.getElementsByTagName("marker");
			//Marker
			m = createMarker(new GLatLng(parseFloat(markers[0].getAttribute('lat')),
										 parseFloat(markers[0].getAttribute('lng'))),
							 'marker/gm-'+markers[0].getAttribute('typ')+'.png',
							 markers[0].getAttribute('id'),
							 false);
			GMarkerManager.clearMarkers();
			GMarkerManager.addMarker(m, 5);
			GMarkerManager.refresh();
			GMap.setCenter(new GLatLng(parseFloat(markers[0].getAttribute('lat')),
										 parseFloat(markers[0].getAttribute('lng'))),14);
			
		}
	)
}
/**
* Erstellt einen Marker für Google Maps API
* @access public
* @return GMarker
**/
function createMarker(point, icon, id, iconVorlage)
{
	
	if(iconVorlage == false)
	{
		var iconVorlage = new GIcon();
		iconVorlage.iconSize = new GSize(12, 22);
		iconVorlage.shadowSize = new GSize(22, 20);
		iconVorlage.iconAnchor = new GPoint(6, 20);
		iconVorlage.infoWindowAnchor = new GPoint(5, 1);
		iconVorlage.shadow = "marker/gm-shadow.png";
	} else {
		var iconVorlage = iconVorlage;
	}
	
	var marker = new GMarker(point, new GIcon(iconVorlage, icon));
    GEvent.addListener(marker, 'click', function(koord)
		{
			if(arLoadedMarkerInfos[id])
			{
				marker.openInfoWindowHtml(arLoadedMarkerInfos[id]);
			} else {
				marker.openInfoWindowHtml("<br><center> <img src='theme/ajax2.gif'> </center>");
				ajax.request('showInfo.php?id='+id, 'get', new Array(), function(result)
					{
						marker.openInfoWindowHtml(result);
						arLoadedMarkerInfos[id] = result;
					}
				);
			}
		}
	);
	return marker;	
}
/**
* Erstellt einen Cluster-Marker 
* @access public
* @return GMarker
**/
function createCluster(point, c) 
{	
	//Cluster erstellen
	var iconVorlage = new GIcon();
	iconVorlage.iconSize = new GSize(32, 32);
	iconVorlage.shadowSize = new GSize(49, 32);
	iconVorlage.shadow = "marker/shadow-cm.png";
	iconVorlage.iconAnchor = new GPoint(6, 20);
	iconVorlage.infoWindowAnchor = new GPoint(5, 1);
	
	var marker = new GMarker(point, new GIcon(iconVorlage, 'marker/cm.php?n='+c));
	GEvent.addListener(marker, 'click', function()
		{
			GMap.setCenter(point, GMap.getZoom()+1);	
		}
	);
	return marker;
}
/**
* zeigt jede menge ortsnetzgrenzen an :)
* @access public
* @return void
**/
var arIds;
var poly = new Array();
var connections = 0;
var sLastLoadedVB = '';
function showONG()
{
	var vb = document.getElementById('vb').value;
	var node = CONST_WinNode;
	var nodeText = CONST_WinNodeText;
	var nodeHead = CONST_WinNodeHead;
	node.style.display = 'none';
	
	if(vb.length < 3 || isNaN(vb) == true)
	{
		nodeText.innerHTML = "Es müssen mindestens 3 Ziffern eingegeben werden.<br /><br />Um so weniger Ziffern Sie eingeben, um so größer ist die zu übertragende Datenmenge.";
		nodeHead.innerHTML = "Fehler";
		nodeText.style.color = CONST_errorCol;
		node.style.display = 'block';
		return false;
	}
	
	if(sLastLoadedVB == vb.toString())
	{
		if(bSomePolysPrinted == false)
			anzeigeONG();
		return false;
	}
	
	GProgressbar.start();
	
	ajax.request('ONGhowMany.php?vb='+vb, 'get', new Array(), function(result)
		{
			//wieviele ong sind es?
			if(result != '0')
			{				
				sLastLoadedVB = vb.toString();
				arIds = result.split(',');
				arIds.pop();
				GProgressbar.operations_ = arIds.length;
				bounds = new GLatLngBounds();
				poly = new Array();
				printPolygon();
			} else {
				GProgressbar.remove();
			}
		}
	);
}
/**
* gibt die polygone der ong aus
* @access public
* @return void
**/
var j;
var bounds = 0;
var bSomePolysPrinted = false;
function printPolygon()
{
	var id = arIds.pop();
	if(isNaN(id) == false)
	{
		connections ++;
		ajax.request('ONGgetLatLng.php?id='+id, 'get', new Array(), function(strPoints)
			{
				var ar = strPoints.split(';');
				var points = new Array();
				for(j=0; j<ar.length-1; j++)
				{
					ar2 = ar[j].split(',');
					bounds.extend(new GLatLng(ar2[0], ar2[1]));
					points.push(new GLatLng(ar2[0], ar2[1]));
				}
				poly.push(createONG(points, id,ar.pop()));
				GProgressbar.updateLoader(1);
				connections --;
				//maxiamle anzahl an verbindungen: 2
				//mehrfacher funktionsaufruf ermöglicht gleichzeitiges laden von daten => speed wird um 1.9 erhöht (theoretisch ^^)
				for(i=connections;i<2;i++)
				{
					printPolygon();
				}
			}
		);
	} else {
		var zoom = GMap.getBoundsZoomLevel(bounds);
		GMap.setCenter(bounds.getCenter(), zoom);
		GProgressbar.remove();
		GMap.clearOverlays();
		GMarkerManager.refresh();
		if(bDraggableMarkerEnabled) GMap.addOverlay(draggableMarker);
		bSomePolysPrinted = false;
		anzeigeONG();
	}
}
/**
* aus/einblenden der ongpolygone
* @access public
* @return void
**/
function anzeigeONG()
{
	if(poly.length > 0)
	{	
		var node = document.getElementById('ii0');
		if(bSomePolysPrinted)
		{
			//Polys wieder ausblenden
			for(j=0;j<poly.length;j++) GMap.removeOverlay(poly[j]);
			bSomePolysPrinted = false;
			node.src = './theme/icon_notsubscribe.gif';
			node.title = 'Ortsnetzgrenzen anzeigen';
		} else {
			//polys wieder einblenden
			for(j=0;j<poly.length;j++) GMap.addOverlay(poly[j]);
			bSomePolysPrinted = true;
			node.src = './theme/icon_subscribe.gif';
			node.title = 'Ortsnetzgrenzen ausblenden';
		}
	}
}
/**
* baut ein polygon!
* @access public
* @return GPolygon
**/
function createONG(p,id,isVS)
{
	var fAdd = 0.0;
	if(isVS == '1')	fAdd = 0.3;
	var newPolygon = new GPolygon(p,'#000000', 0.5, 0.5+fAdd, '#00458F', 0.15+fAdd, {clickable:true});
	GEvent.addListener(newPolygon,'click',function(GOverlayObject)
		{
			var b = newPolygon.getBounds();
			var centerPoint = b.getCenter();
			if(arLoadedONGInfos[id])
			{
				GMap.openInfoWindowHtml(centerPoint,  arLoadedONGInfos[id]);
			} else {
				ajax.request('ONGshowInfo.php?id='+id, 'get', new Array(), function(result)
					{
						if(result != "0")
						{
							GMap.openInfoWindowHtml(centerPoint,  result);
							arLoadedONGInfos[id] = result;
						}
					}
				);
			}
		}
	);
	return newPolygon;
}
/**
* gibt einen suchebegriff an den server weiter
* @access public
* @return void
**/
function search()
{
	var by = document.getElementById('keywords').value;
}




/**
DEBUG
**/
function runScript(s)
{
	ajax.request('debug/'+s,'get',new Array(),function(r){alert(r);});
}
/**
Error Msg
**/
var CountDownTime = 0;
var CountDownInterval;
function showError(a,m,l)
{
	ajax.request('error.php?a='+a+'&m='+m+'&give='+l, 'get', new Array(), function(res)
		{
			addWidget(res);
			CountDownTime = 6000;
			CountDownInterval = setInterval('if(CountDownTime > 0) {document.getElementById("MsgTimeline").innerHTML = CountDownTime/1000+"s"; CountDownTime -= 1000;} else {close_widget();clearInterval(CountDownInterval)};', 1000);
		}
	);
}

