﻿if(typeof dode !== 'undefined') {
	dode.mainfunc.geoCoding = {
		init : function () {
			var map;
			var geocoder;
			var marker;
			
			var map_boundaries = new GLatLngBounds(new GLatLng(51.41,7.3), new GLatLng(51.61,7.64));
			
			var handlerSelect = function (e) {
				moveToAddress(this.value);
				return false;
			}
			
			var handlerSubmit = function (e) {
				moveToAddress(document.forms["googleGeoStadtbezirk"].elements["inputstring"].value);
				dode.newevent.preventDefaultEvent(e);
				return false;
			}

			//raus wenn keine Suche	dode.newevent.addEvent(document.forms["googleGeoStadtbezirk"].elements["stadtbezirk"],"change",handlerSelect);
			//raus wenn keine Suche	dode.newevent.addEvent(document.forms["googleGeoStadtbezirk"],"submit",handlerSubmit);
		
			function initialize() {
				if (GBrowserIsCompatible()) {
					map = new GMap2(document.getElementById("map_canvas"));
					geocoder = new GClientGeocoder();
					var center = new GLatLng(51.514939, 7.466197);
					map.enableScrollWheelZoom();
					map.setCenter(center, 13);
			
					var mt_loop = map.getMapTypes();
						for (var i=0; i<mt_loop.length; i++) {
							mt_loop[i].getMinimumResolution = function() {return 11;}
							mt_loop[i].getMaximumResolution = function() {return 20;}
						}

					map.addControl(new GLargeMapControl());
					map.addControl(new GMenuMapTypeControl());
				    map.setMapType(G_NORMAL_MAP); 
					//raus wenn keine Suche clearAll();
					GEvent.addListener(map, "move", function() {
						test_boundaries();
					});
				}
		    }

			function moveToAddress(addressFromInputfield) {
				if (geocoder) {
					var dotest;
					var address_new = addressFromInputfield.toLowerCase();
					address_new = address_new.replace(/\bdortmund\b/, "");
					address_new =  address_new + " dortmund";
					var searchIcon = new GIcon(G_DEFAULT_ICON);
					searchIcon.image = "http://maps.gstatic.com/intl/de_de/mapfiles/arrow.png";
					searchIcon.shadow = "http://maps.gstatic.com/intl/de_de/mapfiles/arrowshadow.png";
					searchIcon.iconSize = new GSize(39, 34);
					searchIcon.shadowSize = new GSize(39, 34);
					markerOptions = { icon:searchIcon };
					
					geocoder.getLatLng(address_new, function(point) {
						geocoder.getLocations(point, function(dotest) {
							if ((dotest) && 
								(dotest.Status.code == 200) && 
								(((point.lat() != 51.5120542) && (point.lng() != 7.4635729)) || (address_new == " dortmund")) &&
								(dotest.Placemark[0].AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.SubAdministrativeAreaName == "Dortmund"))
								{
									clearAll();
									document.getElementById("suchhilfestring").value = addressFromInputfield;							
									map.clearOverlays();
									map.setCenter(point);
									var marker_search = new GMarker(point, markerOptions);
									map.addOverlay(marker_search);
									document.getElementById("suchhilfestring").blur();
							} else {
								document.getElementById("suchhilfestring").value = "Nicht gefunden!";
								document.getElementById("suchhilfestring").style.color = "red";
								document.getElementById("suchhilfestring").blur();
								// alert("Nicht gefunden im Dortmunder Stadtgebiet.");
							}
						});
					});
				}
			}

			/*
			raus wenn keine Suche			
			
				function clearAll() {
				document.getElementById("stadtbezirkselect").options.selectedIndex = 0;
				document.getElementById("suchhilfestring").value = "Suchhilfe: Straße, Stadtteil etc.";
			}
			*/

			function test_boundaries() {
				if (map_boundaries.contains(map.getCenter())) {
					return;
				}
				var c = map.getCenter();
				var x = c.lng();
				var y = c.lat();

				var max_x = map_boundaries.getNorthEast().lng();
				var max_y = map_boundaries.getNorthEast().lat();
				var min_x = map_boundaries.getSouthWest().lng();
				var min_y = map_boundaries.getSouthWest().lat();

				if (x < min_x) {x = min_x;}
				if (x > max_x) {x = max_x;}
				if (y < min_y) {y = min_y;}
				if (y > max_y) {y = max_y;}
				map.setCenter(new GLatLng(y,x));
			}
			
			initialize();
			
		}
	}
	dode.domLoad.registerOnLoad(dode.mainfunc.geoCoding.init);
}
