var map;
var geocoder;

function initialize(id, address) {

	map = new GMap2(document.getElementById(id));
	geocoder = new GClientGeocoder();

	GEvent.addListener(map, "mousemove", function(point) {
		point_y = Math.round(point.y * 100000) / 100000;
		point_x = Math.round(point.x * 100000) / 100000;
		document.getElementById("info").innerHTML = "<span class=\"label\">Breitengrad:</span> <span class=\"content\">" + point_y + "</span><br><span class=\"label\">L&auml;ngengrad:</span> <span class=\"content\">" + point_x + "</span>";
	});

	//map.addControl(new GMapTypeControl());
	//map.addControl(new GSmallZoomControl());
	//map.addControl(new GOverviewMapControl());
	//map.enableGoogleBar();
	map.enableScrollWheelZoom();
	map.disableDoubleClickZoom();
	map.enableContinuousZoom();
	map.setCenter(new GLatLng(49.13295, 9.37732), 14, G_NORMAL_MAP);

	if (address) {
		showLocation(address);
	} else {
		point = new GLatLng(49.13295, 9.37732);
		marker = new GMarker(point);
		map.addOverlay(marker);
		marker.openInfoWindowHtml('<b>Herzlich Willkommen in Obersulm</b><br>Bitte wählen Sie eine Kategorie in der Auswahlleiste (oben).');
	}


}

// addAddressToMap() is called when the geocoder returns an
// answer.  It adds a marker to the map with an open info window
// showing the nicely formatted version of the address and the country code.
function addAddressToMap(response) {

  map.clearOverlays();

  if (!response || response.Status.code != 200) {

	alert("Google konnte die Adresse leider nicht finden.");

  } else {

	place = response.Placemark[0];

	point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
	marker = new GMarker(point);
	map.addOverlay(marker);
	marker.openInfoWindowHtml('<b>Die gewählte Adresse:</b><br>' + place.address, {noCloseOnClick:true});
	window.setTimeout(function() {
	 	map.panTo(new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]));
	}, 1);

  }

}

// showLocation() is called when you click on the Search button
// in the form.  It geocodes the address entered into the form
// and adds a marker to the map at that location.
function showLocation(address) {
  geocoder.getLocations(address, addAddressToMap);
}

function selectGEOption(select, option, address, geoadress) {

	var select = document.getElementById(select);
	var currentClassName = select.className;

	// Wenn Liste bereits geöffnet
	if (currentClassName.indexOf('open') != -1) {

		// Geklickte Option
		var option = document.getElementById(option);

		// ClassName der geklickten Option
		var currentClassNameOfOption = option.className;

		// Wenn geklickte Option noch nicht ausgewählt war
		if (currentClassNameOfOption.indexOf('selected') == -1) {

			// Listenelemente in Array schreiben
			var listelements = select.getElementsByTagName('li');

			// Durch den Array wandern und alle ausblenden
			for (var i = 0; i < listelements.length; i++) {

				if (listelements[i].className.indexOf('selected') != -1) {
					listelements[i].className = listelements[i].className.replace('selected', '');
				}

			}

			if (geoadress) {
				showLocation(geoadress);
				if (document.getElementById('details')) {
					showhide_details('hide');
				}
			}

			option.className = option.className + ' selected';

			if (address) {

				// Adresslisten in Array schreiben
				addressesContainer = document.getElementById('addresses');
				var addresslist = document.getElementById('address_' + option.id + '_select');
				var addresslists = addressesContainer.getElementsByTagName('ul');

				// Durch den Array wandern und alle ausblenden
				for (var i = 0; i < addresslists.length; i++) {

					if (addresslists[i].className.indexOf('visible') != -1) {
						addresslists[i].className = addresslists[i].className.replace('visible', '');
					}

					if (addresslists[i].className.indexOf('open') == -1) {
						addresslists[i].className = addresslists[i].className + ' open';
					}

				}

				// Container der Adressen einblenden (nur den transparenten Hintergrund)
				if (document.getElementById('addresses').style.display != 'block') {
					document.getElementById('addresses').style.display = 'block';
				}
				if (document.getElementById('container_addresses').style.display != 'block') {
					document.getElementById('container_addresses').style.display = 'block';
				}

				addresslist.className = addresslist.className + ' visible';

			}

		}

		// Liste schließen
		select.className = select.className.replace('open', '');


	} else {

		select.className = select.className + ' open';

	}

}

function showhide_details(mode) {

	// Details ausblenden
	var details = document.getElementById('details');
	var containerClassName = details.className;

	if (containerClassName.indexOf('hidden') != -1 && mode != 'hide') {
		details.className = details.className.replace('hidden', '');
	} else if (containerClassName.indexOf('hidden') == -1) {
		details.className = details.className + ' hidden';
	}

	// Container Verschieben ausblenden
	var container_details = document.getElementById('container_details');
	var containerClassName = container_details.className;

	if (containerClassName.indexOf('minimized') != -1 && mode != 'hide') {
		container_details.className = container_details.className.replace('minimized', '');
	} else if (containerClassName.indexOf('minimized') == -1) {
		container_details.className = container_details.className + ' minimized';
	}

	// Option-Button verschieben
	var details_options = document.getElementById('details_options');
	var containerClassName = details_options.className;

	if (containerClassName.indexOf('minimized') != -1 && mode != 'hide') {
		details_options.className = details_options.className.replace('minimized', '');
	} else if (containerClassName.indexOf('minimized') == -1) {
		details_options.className = details_options.className + ' minimized';
	}

}

