/*--------------------------------------------------------------------------
*	edaView, version 1.0
*	Explore the history of synagogues in Germany
*	Authors ordered alphabetical:
*	
*	(c) 2008 Daniel von der Helm
*  	(c) 2008 Dennis Kleine
*
*	Tue Jul 01 23:35:22 CET 2008
*	http://edaview.sourceforge.org/
*
*  	edaView is freely distributable under the terms of an GNU General Public License.
*  	For details, see the edaView Project Home at: http://www.sourceforge.org/projects/edaview/
*
*	The above copyright notice and this permission notice shall be
*	included in all copies or substantial portions of the Web-Application.
*
*	edaView was developed at the university of applied sience Kaiserslautern (Zweibr�cken) as a student project
*	during the course Mediaproduction - and conception. This application is distributed without any warranty. 
*	See the GNU General Public License for more details.
*--------------------------------------------------------------------------*/
// Startpoint f�r die Map (Mitte DE)
var centerLatitude = 51.165;
var centerLongitude = 10.455278;

var startZoom = 6;
var map;
var gdir;
var geocoder;
var locPattern;
var locSid;
var locCid;
var locChars = '';
var locDistrict= '';
var locParam = '';
var dragObj = false;
var mapType = 'Normal';

function init()
{

	map = new GMap2(document.getElementById("map"));
	_mPreferMetric = true;
	map.addControl(new GScaleControl(256));
	var zcontrol = new DragZoomControl({opacity:.25,fillColor:'#FFF',border:'2px solid blue'},{},{});
	map.addControl(zcontrol);
	var overView = new GOverviewMapControl(new GSize(200,150));
	map.addControl(overView);
	map.enableScrollWheelZoom();
	map.enableDoubleClickZoom();
	map.enableContinuousZoom();
	zoomPoint(centerLatitude, centerLongitude, startZoom);
	map.setMapType(G_NORMAL_MAP);
	
	GEvent.addListener(map, 'zoomend', function(oldLevel, newLevel)
	{
		footerCont.refreshFilters();
	});
	footerCont.refreshFilters();
} // ini


function getMarkers(sid, cid, chars, district, param)
{
	locSid = sid;
	locCid = cid;
	locChars = chars;
	locDistrict = district;
	locParam = param;
	
	var bounds = map.getBounds();
	var southWestLat = bounds.getSouthWest().lat();
	var northEastLat = bounds.getNorthEast().lat();
	var southWestLng = bounds.getSouthWest().lng();
	var northEastLng = bounds.getNorthEast().lng();
	var params = 'action=viewOnMap&sid='+sid+'&cid='+cid+'&chars='+chars+'&district='+district+'&param='+param+'&swLat='+southWestLat+'&swLng='+southWestLng+'&neLat='+northEastLat+'&neLng='+northEastLng;
	var request = GXmlHttp.create();
	request.open('GET', 'db/map_data.inc.php?'+params, true);
	request.send(null);
	request.onreadystatechange = function()
	{
		if(request.readyState == 4)
		{
			var jscript = request.responseText;
			getMarkers2(jscript);
		}
	}
}

function getMarkers2(jscript)
{
				map.clearOverlays();
				var points;
				eval(jscript);
				for(i in points)
				{
					var point = new GLatLng(points[i].lat, points[i].lng);
					var marker = createMarker(point, points[i].id, points[i].icon, points[i].csize, points[i].details, points[i].erhaltena, points[i]);
					map.addOverlay(marker);
				}
}

function createMarker(point, id, icon, size, details, erhaltena, info) 
{
	if(icon == 'c')
	{
		var iconCluster = new GIcon();
		var chartUrl = "http://chart.apis.google.com/chart?cht=p&chd=t:";
		
		var chartparts = details.split("|");
		
		green = Math.round(size*(chartparts[0]/100));
		blue = Math.round(size*(chartparts[2]/100));
		red = Math.round(size*(chartparts[4]/100));
		yellow = Math.round(size*(chartparts[6]/100));
		grey = Math.round(size*(chartparts[8]/100));
		
		for(i = 0; i < chartparts.length - 1; i = i + 2)
		{
			if(i >= chartparts.length - 2)
			{
				chartUrl += chartparts[i];
			}
			else
			{
				chartUrl += chartparts[i] + ",";
			}
		}
		
		chartUrl += "&chs=200x80&chco=";
		
		for(i = 1; i < chartparts.length; i = i + 2)
			chartUrl += chartparts[i];
		
		chartUrl += "&chf=bg,s,65432100";
		
		if(size < 25)
		{
			icoSize = 40;
		}
		if(size > 25 && size < 100)
		{
			icoSize = 50;
		}
		if(size > 100 && size < 250)
		{
			icoSize = 60;
		}
		if(size > 250 && size < 500)
		{
			icoSize = 70;
		}
		if(size > 500)
		{
			icoSize = 80;
		}

		iconCluster.image = 'icons/cluster'+icoSize+'_2.png';
		iconCluster.shadow = 'icons/shadow'+icoSize+'_2.png';
		iconCluster.iconSize = new GSize(icoSize, icoSize);
		iconCluster.shadowSize = new GSize(icoSize+20, icoSize+20);
		iconCluster.iconAnchor = new GPoint(icoSize/2, icoSize);
		iconCluster.infoWindowAnchor = new GPoint(icoSize/2, icoSize/2);
		
		/*
		chart = chartUrl.replace("200x80", "40x40");
		imgchart = '<img src="'+chart+'" width="40" height="40" align="middle" />';
		*/
		var latlng = new GLatLng(point.lat().toFixed(6), point.lng().toFixed(6));
		
		/*
		var labelChart = new ELabel(latlng, imgchart, "chart");
		labelChart.pixelOffset = new GSize(0,0);
		map.addOverlay(labelChart);
		*/
		sizeHTML = '<div style="width:40px; height:10px; text-align:center; font-size:9px; font-weight:bold;">'+size+'</div>';
		
		var labelSize = new ELabel(latlng, sizeHTML, "chart");
		labelSize.pixelOffset = new GSize(-20,-(icoSize/2)+2);
		map.addOverlay(labelSize);
		var marker = new GMarker(point, iconCluster);
		
		
		/*
		var labelGreen = new ELabel(latlng, green, "label");
		labelGreen.pixelOffset = new GSize(-(icoSize/2),-(icoSize-(icoSize/4)));
		map.addOverlay(labelGreen);
		
		var labelBlue = new ELabel(latlng, blue, "label");
		labelBlue.pixelOffset = new GSize(0,-(icoSize));
		map.addOverlay(labelBlue);
		*/

		var infoHTML = '<div>'
					+ '<b>Zusammengefasste Synagogen</b><br/>'
					+ '<br/>'
					+ '<img src="'+chartUrl+'" width="200" height="80"><br/>'
					+ '<br/>'
					+ '<table>'
					+ '<tr style="height:12px;"><td style="width:12px; background:#19B0E8;">&nbsp;</td><td style="padding:0 5px 0 5px;">'+blue+' Geb�ude im Originalzustand</td></tr>'
					+ '<tr style="height:12px;"><td style="width:12px; background:#6DC036;">&nbsp;</td><td style="padding:0 5px 0 5px;">'+green+' Geb�ude erhalten</td></tr>'
					+ '<tr style="height:12px;"><td style="width:12px; background:#FFE400;">&nbsp;</td><td style="padding:0 5px 0 5px;">'+yellow+' Geb�ude teilweise erhalten evtl. Ruine</td></tr>'
					+ '<tr style="height:12px;"><td style="width:12px; background:#D73333;">&nbsp;</td><td style="padding:0 5px 0 5px;">'+red+' Geb�ude nicht erhalten</td></tr>'
					+ '<tr style="height:12px;"><td style="width:12px; background:#B3B3B3;">&nbsp;</td><td style="padding:0 5px 0 5px;">Zu '+grey+' Geb�uden gibt es keine Informationen</td></tr>'
					+ '</table>'
					+ '</div>';
		
		GEvent.addListener(marker, 'click', function()
		{
			//zoomPoint(point.lat().toFixed(6), point.lng().toFixed(6), map.getZoom()+1);
			marker.openInfoWindowHtml(infoHTML);
		});
	}
	else if(dragObj == true)
	{
		var marker = new GMarker(point, {icon: iconBlue, draggable: true});
		GEvent.addListener(marker, 'click', function()
		{
			viewSakralbau(point.lat().toFixed(6), point.lng().toFixed(6), id);
		});
		GEvent.addListener(marker, "dragstart", function()
		{
        	marker.closeInfoWindow(); 
        });
    	GEvent.addListener(marker, "dragend", function()
		{
			var point = marker.getPoint();
			var pointlng = point.lng().toFixed(6);
			var pointlat = point.lat().toFixed(6);
			//saveData(pointlat, pointlng);
        	marker.openInfoWindowHtml("Vielen Dank f�r die neue Positionierung.<br>Die neuen Standortkoordinaten werden nach<br>Pr�fung eines Moderators �bernommen.");
        });
	} else 
	{
		if(erhaltena >= 10 && erhaltena < 20)
			ico = iconGreen;
		if(erhaltena >= 30 && erhaltena < 40)
			ico = iconBlue;
		if(erhaltena >= 20 && erhaltena < 30)
			ico = iconRed;
		if(erhaltena >= 40 && erhaltena < 50 || erhaltena >= 50 && erhaltena <= 60)
			ico = iconYellow;
		if(erhaltena == 70 || erhaltena == 80)
			ico = iconGrey;
		var marker = new GMarker(point, ico);
		
		var erbaut = createDate(info.zrerbaut, info.zp1erbaut, info.zp2erbaut);
		var nutzungsende = createDate(info.zrnutzungsende, info.zp1nutzungsende, info.zp2nutzungsende);
		var abriss = createDate(info.zrabriss, info.zp1abriss, info.zp2abriss);
		
		GEvent.addListener(marker, 'click', function()
		{
			var html = '<div>'
					+ '<b>'+info.name+'</b><br/>'
					+ info.strasse+'<br/>'
					+ info.plz+' '+info.ort+'<br/>'
					+ info.bundesland+'<br/>'
					+ '<br/>'
					+ 'Typ: '+info.typ+'<br/>'
					+ '<br/>'
					+ 'Erbaut '+erbaut+'<br/>'
					+ 'Nutzungsende '+nutzungsende+'<br/>'
					+ 'Abriss '+abriss+'<br/>'
					+ '<br/>'
					+ 'Aussen: '+textErahltenAussen(info.erhaltena)+'<br/>'
					+ '<br/>'
					+ 'Innen: '+textErahltenInnen(info.erhalteni)+'<br/>'
					+ '<br/>'
					+ 'heutige Nutzung: '+info.nutzung+'<br/>'
					+ '</div>'
					+ '<br/>'
					+ '<br/>'
					+ '<div>'
					+ '<a href="javascript:zoomPoint('+point.lat().toFixed(6)+', '+point.lng().toFixed(6)+', 15);">heranzoomen</a>&nbsp;&nbsp;'
					+ '<a href="javascript:zoomPoint('+centerLatitude+', '+centerLongitude+', '+startZoom+');">herauszoomen</a>&nbsp;&nbsp;'
					+ '<a href="javascript:viewSakralbau('+point.lat().toFixed(6)+', '+point.lng().toFixed(6)+', '+id+');">zur Synagoge</a>'
					+' </div>';
			marker.openInfoWindowHtml(html);
			locParam = 'object';
		});
	}
	return marker;
}

function zoomPoint(lat, lng, zoom)
{
	map.setCenter(new GLatLng(lat, lng), zoom);
}

function viewSakralbau(lat, lng, id)
{
	footerCont.refreshFilters();
	if($('leftinterface').style.display == 'none')
		slideRight('leftinterface');
	$('lififrame').src = "patterns/object_details.php?sid="+id;
	/*
	if($('rightinterface').style.display == 'none')
		slideRight('rightinterface');
	$('rififrame').src = "patterns/object_comments.php?rtyp=sakralbau&rid="+id;
	*/
}

function MyZoomIn()
{
	map.zoomIn();
	footerCont.refreshFilters();
}

function MyZoomOut()
{
	map.zoomOut();
	footerCont.refreshFilters();
}

function mapNormal()
{
	map.setMapType(G_NORMAL_MAP);
	mapType = map.getCurrentMapType().getName();
}

function mapHybrid()
{
	map.setMapType(G_HYBRID_MAP);
	mapType = map.getCurrentMapType().getName();
}

function mapStart()
{
	map.setMapType(G_NORMAL_MAP);
	map.returnToSavedPosition();
	dragObj = false;
	locSid = 0;
	footerCont.refreshFilters();
	mapType = map.getCurrentMapType().getName();
}

function setExpert()
{
	footerCont.setLocalExpert();
	footerCont.refreshFilters();
}
/*function saveData(lat, lng) {
	document.setgeo.setgeob.value = lat;
	document.setgeo.setgeol.value = lng;
	document.setgeo.submit();
}
*/

function dragObject()
{
	if(locParam == 'object')
	{
		dragObj = true;
		getMarkers(locSid, 0, 0, 0, 'object');
	}
}

function makeNewObject()
{
	myLightWindow.activateWindow({
		href: "patterns/new_object.php",
		title: "",
		width: 750,
		height: 625,
		iframeEmbed: true
	});
}

function createDate(zr, zp1, zp2)
{
	switch(zr)
	{
		case '?': return 'keine Angaben'; break;
		case '=': return 'am '+zp1; break;
		case '<': return 'vor '+zp1; break;
		case '>': return 'nach '+zp1; break;
		case '<->': return 'zwischen '+zp1+' und '+zp2; break;
		case '~': return 'ca. '+zp1; break;
		default: return 'keine Angaben'; break;
	}
}

function textErahltenAussen(value)
{
	string = "";
	switch(value)
	{
		case '10': string = 'Geb�ude vorhanden'; break;
		case '11': string = 'Geb�ude vorhanden - �u�erlich kaum ver�ndert'; break;
		case '12': string = 'Bausubstanz vorhanden - keine weiteren Angaben'; break;
		case '13': string = 'Geb�ude vorhanden - keine weiteren Angaben - besondere Nutzung nicht mehr ablesbar'; break;
		case '14': string = 'Geb�ude vorhanden - restauriert'; break;
		case '15': string = 'Geb�ude vorhanden - besonders viel erhalten, aber zum Teil verfallen'; break;
		case '16': string = 'Geb�ude vorhanden - umgebaut, ver�ndert -  fr�here besondere Nutzung ableitbar'; break;
		case '17': string = 'Geb�ude vorhanden - umgebaut, ver�ndert - besondere Nutzung nicht ablesbar'; break;
		case '18': string = 'Geb�ude vorhanden - umgebaut, ver�ndert'; break;
		case '19': string = 'Teile des Geb�udes an anderer Stelle erhalten'; break;
		case '20': string = 'Geb�ude nicht erhalten'; break;
		case '21': string = 'Geb�ude nicht erhalten - Reste an anderer Stelle vorhanden'; break;
		case '30': string = 'Originalzustand wieder hergestellt bzw. weitgehend wieder hergestellt'; break;
		case '31': string = 'Originalzustand nicht erhalten'; break;
		case '32': string = 'Originalzustand teilweise wieder hergestellt'; break;
		case '40': string = 'Ruine/wenige Reste vorhanden'; break;
		case '41': string = 'Ruine/wenige Reste vorhanden - fr�here besondere Nutzung ableitbar'; break;
		case '42': string = 'Ruine/wenige Reste vorhanden - besondere Nutzung nicht mehr ablesbar'; break;
		case '50': string = 'Geb�ude teilweise erhalten'; break;
		case '51': string = 'Geb�ude teilweise erhalten -  fr�here besondere Nutzung ableitbar'; break;
		case '52': string = 'Geb�ude teilweise erhalten - besondere Nutzung nicht ablesbar'; break;
		case '60': string = 'Geb�ude arch�ologisch nachgewiesen'; break;
		case '70': string = 'keine Informationen'; break;
		case '80': string = 'widerspr�chliche Angaben'; break;
		default: string = 'keine Informationen'; break;
	}
	return string;
}

function textErahltenInnen(value)
{
	string = "";
	switch(value)
	{
		case '10': string = 'Innenraum erhalten'; break;
		case '11': string = 'Innenraum komplett bzw. weitgehend erhalten'; break;
		case '12': string = 'Innenraum erhalten - umgebaut, ver�ndert - besondere Nutzung nicht ablesbar'; break;
		case '14': string = 'Innenraum erhalten - restauriert'; break;
		case '19': string = 'Innenraum erhalten - Teile des Innenraums an anderer Stelle erhalten'; break;
		case '20': string = 'Innenraum nicht erhalten'; break;
		case '21': string = 'Innenraum nicht erhalten - Reste an anderer Stelle vorhanden'; break;
		case '30': string = 'Innenraum im Originalzustand wieder hergestellt bzw. weitgehend wieder hergestellt'; break;
		case '31': string = 'Originalzustand nicht erhalten'; break;
		case '32': string = 'Innenraum im Originalzustand teilweise wieder hergestellt'; break;
		case '50': string = 'Innenraum teilweise erhalten'; break;
		case '51': string = 'Innenraum teilweise erhalten - fr�here besondere Nutzung ableitbar'; break;
		case '52': string = 'Innenraum teilweise erhalten - fr�here sakrale Nutzung aber kaum ablesbar'; break;
		case '70': string = 'keine Informationen'; break;
		case '80': string = 'widerspr�chliche Angaben'; break;
		default: string = 'keine Informationen'; break;
		
	}
	return string;
}

function viewPoint(lat, lng)
{
	zoomPoint(lat, lng, 10)
	var pointReport = new GLatLng(lat, lng);
	var markerReport = new GMarker(pointReport, {icon: iconReport, draggable: false});
	parent.map.addOverlay(markerReport);
}
window.onunload = GUnload;
