var map;
var geocoder;

function load() {
	if (GBrowserIsCompatible()) {
		geocoder = new GClientGeocoder();
		map = new GMap2(document.getElementById('map'));
		map.addControl(new GSmallMapControl());
		map.addControl(new GMapTypeControl());
		map.setCenter(new GLatLng(51.165691,10.451526), 6);
	}
}

jQuery().ready(function(){
	
	//Formularfelder zur Texteingabe beim Daraufklicken automatisch selektieren
	$('.autoselect').focus(function() {
		$(this).select();
	});
	
	//***FILTER***//
	//Automatisch anzeigen, wenn Checkbox beim Laden der Seite bereits aktiviert (z.B. wg. Reload)
	if($("#toggle_kassenfilter").attr("checked")) $("#kassenfilter").css('display','block');
	if($("#toggle_laenderfilter").attr("checked")) $("#laenderfilter").css('display','block');
	
	//Ein- Ausblenden bei Zustandsänderung der jeweiligen Checkbox
	$("#toggle_kassenfilter").change(function() {
		if($(this).attr("checked") && ($("#kassenfilter").css('display') == 'none')) {
			$("#kassenfilter").show();
		}
		else if(!$(this).attr("checked") && ($("#kassenfilter").css('display') == 'block')) {
			$("#kassenfilter .filterbox").attr('checked',false);
			$("#kassenfilter").hide();
		}
	});
	
	$("#toggle_laenderfilter").change(function() {
		if($(this).attr("checked") && ($("#laenderfilter").css('display') == 'none')) {
			$("#laenderfilter").show();
		}
		else if(!$(this).attr("checked") && ($("#laenderfilter").css('display') == 'block')) {
			$("#laenderfilter .filterbox").attr('checked',false);
			$("#laenderfilter").hide();
		}
	});
	
	//Alle/Keine Filter anhaken
	$(".kassen_select").click(function() {
		$("#kassenfilter .filterbox").attr('checked',true);
	});
	$(".kassen_deselect").click(function() {
		$("#kassenfilter .filterbox").attr('checked',false);
	});
	
	$(".laender_select").click(function() {
		$("#laenderfilter .filterbox").attr('checked',true);
	});
	$(".laender_deselect").click(function() {
		$("#laenderfilter .filterbox").attr('checked',false);
	});
	
	//Trigger für die Suche
	$('#search_btn').click(function() {
		performSearch();
	});
	$('.autosubmit').keypress(function(event) {
		if (event.keyCode == '13') {
			performSearch();
		}
	});
	
	//Gültigkeitsüberprüfung des Formulars, ggf. Suche ausführen
	function performSearch() {
		if($('.errors').css('display') == 'block') $('.errors').hide();
		if(($('#plz').val() == '') && ($('#ort').val() == '')) {
			$('.errors').text('Bitte geben Sie eine Postleitzahl oder einen Ort an.');
			$('.errors').slideDown();
		}
		else searchLocations();
	}
	
	//***Google-Maps-API***//
	//Angegebenen Standort auslesen
	function searchLocations() {
		var address = $('#str').val()+', '+$('#plz').val()+' '+$('#ort').val()+', Deutschland';
		geocoder.getLatLng(address, function(latlng) {
			if (!latlng) {
				$('.errors').html('Adresse nicht gefunden.');
			} else {
				//Speichern der angefragten Daten
				$.ajax({
					type: "POST",
					url: "map.php",
					data: "save=true&plz=" + $('#plz').val() + "&ort=" + $('#ort').val() + "&lat=" + latlng.lat() + "&lng=" + latlng.lng()
				});
				
				if(typeof(icons) == 'undefined') icons = new Array();
				searchLocationsNear(latlng);	
			}
		});
	}
	
	//Suche ausführen
	function searchLocationsNear(center) {	
		/***FILTER***/
		//Radius:
		var radius = document.getElementById('radius').value;
		
		//Krankenkassen:
		var kassenfilter_arr = new Array();
		$('#kassenfilter .filterbox:checked').each(function() {
			kassenfilter_arr.push($(this).val());
		});
		if(kassenfilter_arr.length > 0) var kassenfilter = '&kassenfilter=' + kassenfilter_arr.join(',');
		else var kassenfilter = '';
		
		//Bundesländer:
		var laenderfilter_arr = new Array();
		$('#laenderfilter .filterbox:checked').each(function() {
			laenderfilter_arr.push($(this).val());
		});
		if(laenderfilter_arr.length > 0) var laenderfilter = '&laenderfilter=' + laenderfilter_arr.join(',');
		else var laenderfilter = '';
		/***Ende FILTER***/
		
		/***AJAX-Request***/
		var searchUrl = filepath+'/map.php?search=1&lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + radius + kassenfilter + laenderfilter;
		GDownloadUrl(searchUrl, function(data) {
			var xml = GXml.parse(data);
			var markers = xml.documentElement.getElementsByTagName('marker');
			map.clearOverlays();

			var sidebar = document.getElementById('sidebar');
			sidebar.innerHTML = '';
			if (markers.length == 0) {
				sidebar.innerHTML = 'Zu den angegebenen Suchkriterien wurden keine Ergebnisse gefunden.';
				map.setCenter(new GLatLng(51.165691,10.451526), 6);
				return;
			}
			
			var bounds = new GLatLngBounds();
			for (var i = 0; i < markers.length; i++) {
				var office = [];
				office['name'] = markers[i].getAttribute('name');
				office['filid'] = markers[i].getAttribute('filid');
				office['strasse'] = markers[i].getAttribute('strasse');
				office['plz'] = markers[i].getAttribute('plz');
				office['ort'] = markers[i].getAttribute('ort');
				office['tel'] = markers[i].getAttribute('tel');
				office['fax'] = markers[i].getAttribute('fax');
				office['e-mail'] = markers[i].getAttribute('e-mail');
				office['distance'] = parseFloat(markers[i].getAttribute('distance'));
				office['kid'] = markers[i].getAttribute('kid');
				office['zeiten'] = markers[i].getAttribute('zeiten');
				office['kkname'] = markers[i].getAttribute('kkname');
				office['icon_filename'] = markers[i].getAttribute('icon');
				office['icon_x'] = markers[i].getAttribute('icon_x');
				office['icon_y'] = markers[i].getAttribute('icon_y');
				office['icon_shadow'] = markers[i].getAttribute('shadow');
				office['shadow_x'] = markers[i].getAttribute('shadow_x');
				office['shadow_y'] = markers[i].getAttribute('shadow_y');
				office['antrag'] = markers[i].getAttribute('antrag');
				var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')),parseFloat(markers[i].getAttribute('lng')));

				var marker = createMarker(point, office);
				map.addOverlay(marker);
				var sidebarEntry = createSidebarEntry(marker, office);
				sidebar.appendChild(sidebarEntry);
				bounds.extend(point);
			}
			
			// Marker für Standort erstellen
			var iconStandort = new GIcon();
			iconStandort.image = src=filepath+'/img/icons/standort_icon.png';
			iconStandort.shadow = src=filepath+'/img/icons/standort_shadow.png';
			iconStandort.iconSize = new GSize(22, 34);
			iconStandort.shadowSize = new GSize(22, 34);
			iconStandort.iconAnchor = new GPoint(16, 16);	
			var markerStandort = new GMarker(center, {icon:iconStandort, title: 'Ihr Standort'});
			// InfoWindow für Standort-Marker erstellen
			var standortHTML = '<strong>Ihr Standort</strong><br>Es wurde nach Geschäftsstellen in einem Radius von<br>' + radius + 'km um diesen Ausgangspunkt herum gesucht.';
			GEvent.addListener(markerStandort, 'click', function() {
				map.openInfoWindowHtml(center, standortHTML);
			});
			map.addOverlay(markerStandort);
			// Standort-Marker immer mit im Suchergebnis anzeigen
			bounds.extend(center);
			
			map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
		});
	}
	
	//Neuen Marker auf Karte erstellen
	function createMarker(point, office) {
		var address = office['strasse'] + '<br>' + office['plz'] + ' ' + office['ort'];
		//GIcon erstellen, falls noch nicht vorhanden
		if(typeof(icons[office['kid']]) == 'undefined') {
			icons[office['kid']] = new GIcon();
			icons[office['kid']].image = src=filepath+'/img/icons/'+office['icon_filename'];
			icons[office['kid']].shadow = src=filepath+'/img/icons/'+office['icon_shadow'];
			icons[office['kid']].iconSize = new GSize(office['icon_x'], office['icon_y']);
			icons[office['kid']].iconAnchor = new GPoint(16, 16);
			icons[office['kid']].shadowSize = new GSize(office['shadow_x'], office['shadow_y']);
			icons[office['kid']].infoWindowAnchor = new GPoint(16, 0);
		}
		var marker = new GMarker(point, {icon:icons[office['kid']], title: office['kkname'] + ', ' + office['name']});
		
		//Infowindow
		var tabs = [];
		// wenn Öffnungszeiten vorhanden in Info-Tab anzeigen
		var zeiten = '';
		var reg = /\S/;
		var test = reg.test(office['zeiten']);	
		if (test === true) var zeiten = '<p style="margin: 5px 0; padding: 0;">&Ouml;ffnungszeiten:<br/>' + office['zeiten'] + '</p>';
		
		//Tab "Info"
		tabs.push(new GInfoWindowTab('Info','<p style="margin: 5px 0; padding: 0;"><b>' + office['name'] + '<br/><a href="redir.php?kid='+office['kid']+'&name='+office['kkname']+'" target="_blank">' + office['kkname'] + '</a></b> <br/>' + address + '</p><p style="margin: 5px 0; padding: 0;">Telefon: ' + office['tel'] + '<br/>Fax: ' + office['fax'] + '<br/><a href="redir.php?mode=kontakt&kid=' + office['kid'] + '&name=' + office['kkname'] + '&filid=' + office['filid'] + '#kasse_form">E-Mail schreiben</a></p><p style="margin: 5px 0; padding: 0;">' + zeiten + '</p>'));
		
		//Tab "Service"
		//Link zur Route - Startadresse:
		var saddr = "";
		if($('#str').val() != '') saddr += $('#str').val() + ", ";
		saddr += $('#plz').val()+' '+$('#ort').val()+', Deutschland';
		
		//Link zur Route - Zieladresse:
		var link_antrag = "";
		if (office['antrag'] != 0) link_antrag = "<a href='../antragkk" + office['antrag'] + ".pdf' target='_blank' class='link_kasse'>Mitgliedschaftsantrag herunterladen <img src='img/antrag.gif' style='border:none; line-height:17px; margin-bottom:-3px;'></a>"; 

		var daddr = "";
		if(office['strasse'] != '') daddr += office['strasse'] + ", ";
		daddr += office['plz'] + ' ' + office['ort'] + ', Deutschland';
		tabs.push(new GInfoWindowTab('Service','<br/><a href="http://maps.google.de/maps?saddr=' + encodeURIComponent(saddr) + '&daddr=' + encodeURIComponent(daddr) + '" target="_blank" class="link_kasse" style="border-top:1px dotted #b2b2b2;">Route zu dieser Geschäftsstelle</a><a href="redir.php?kid='+office['kid']+'&name='+office['kkname']+'" target="_blank" class="link_kasse" style="line-height:17px;">Details zu dieser Krankenkasse</a>' + link_antrag));
		
		//Infowindow erstellen
		GEvent.addListener(marker, 'click', function() {
			if(map.getZoom() < 14) map.setZoom(14);
			marker.openInfoWindowTabsHtml(tabs);
		});
		return marker;
	}	
	
	
	//Eintrag in Ergebnisliste hinzufügen
	function createSidebarEntry(marker, office) {
		var address = office['strasse'] + '<br>' + office['plz'] + ', ' + office['ort'];
		var div = document.createElement('div');
		var html = "<div class='float-right'>" + office['distance'].toFixed(1) + "km</div>" + office['name'] + "<br><strong>" + office['kkname'] + "</strong><br>" + address.replace(/,/,'<br>') + "<div class='clear-both entry-wrapper'></div>";
		div.innerHTML = html;
		div.style.cursor = 'pointer';
		div.style.marginBottom = '5px';
		$(div).addClass('sidebarMarker');
		GEvent.addDomListener(div, 'click', function() {
			GEvent.trigger(marker, 'click');
		});
		GEvent.addDomListener(div, 'mouseover', function() {
			$(div).addClass('hover');
		});
		GEvent.addDomListener(div, 'mouseout', function() {
			if($(div).hasClass('hover')) $(div).removeClass('hover');
		});
		return div;
	}

});
