// Version 2009-01-28

var URL= '/markt.php?';
var libraryUrl = (("https:" == document.location.protocol) ? "https" : "http") + '://www.borromaeusverein.de/member/library/';

var map, koeb_icon, geocoder;
var mitte= new GLatLng (51.165, 10.455278);
var sid;


//cache benutzerdefiniert erweitern
// Erstellt ein Array von Geocode-Antworten für Städte
var city = [
	{
		name: "Urbar, Deutschland",
		Status: {
			code: 200,
			request: "geocode"
		},
		Placemark: [
			{
				address: "55430 Urbar, Deutschland",
				AddressDetails: {
					Country: {
						CountryNameCode: "DE",
						AdministrativeArea: {
							AdministrativeAreaName: "Rheinland-Pfalz",
							Locality: {
								LocalityName: "Urbar",
								PostalCode: {
									PostalCodeNumber: "55430"
								}
							}
						}
					},
					Accuracy: 4
				},
				Point: {
					coordinates: [7.7198007, 50.1309096, 0]
				}
			}
		]
	}
	
	// , etc. for other cities
	];


// CitiesCache ist ein benutzerdefinierter Cache, der den standardmäßigen GeocodeCache erweitert.
// apply(this) wird aufgerufen, um den Klassenkonstruktor des übergeordneten Elements aufzurufen.
function CitiesCache() {
	GGeocodeCache.apply(this);
}

// Weist eine Instanz der übergeordneten Klasse als Prototyp der untergeordneten Klasse zu, um sicherzustellen, dass alle für die übergeordnete Klasse definierten Methoden direkt für die untergeordnete Klasse aufgerufen werden können.
CitiesCache.prototype = new GGeocodeCache();

// Überschreibt die reset-Methode, um den leeren Cache mit Informationen aus dem Array von Geocode-Antworten für Städte zu füllen.
CitiesCache.prototype.reset = function() {
	GGeocodeCache.prototype.reset.call(this);
	for (var i in city) {
		this.put(city[i].name, city[i]);
	}
}



function load (session_id) {
	if (!GBrowserIsCompatible ()) { return; }
	map= new GMap2 (document.getElementById ('map'));

	map.addControl (new GLargeMapControl ());
	map.addControl (new GMapTypeControl ());
	map.setCenter (mitte, 5);

	koeb_icon= new GIcon ();
	koeb_icon.image= '/img/koeb_icon.png';
	koeb_icon.shadow= '/img/koeb_schatten.png';
	koeb_icon.iconSize= new GSize (36, 42);
	koeb_icon.shadowSize= new GSize (36, 42);
	koeb_icon.iconAnchor= new GPoint (6, 42);
	koeb_icon.infoWindowAnchor= new GPoint (5, 0);

	geocoder= new GClientGeocoder ();
	geocoder.setBaseCountryCode("de");
	geocoder.setCache(new CitiesCache());
	
	sid= session_id;
}


function createMarker (point, text, shop, adr) {
	var marker= (shop) ? new GMarker (point, koeb_icon) : new GMarker (point);
	GEvent.addListener (marker, 'click', function () {
/*
		Falls due Uebertragung an ein Formularfeld gewuenscht ist...
		if (shop) { document.getElementById ('filiale').value= adr; }
*/
		marker.openInfoWindowHtml (
				'<div style="font:0.9em sans-serif">'
			+ adr.replace (/,/g, '<br />')
			+ '<br />'
			+ text
			+ '</div>'
		);
	});
	return marker;
}


function addAddressToMap (response) {
	map.clearOverlays ();

	if (response) {
		if (response.Status.code == G_GEO_SUCCESS) {
			if (response.Placemark.length > 1) {
				var liste= document.getElementById ('alternativen');
				for (var i= 0; i < response.Placemark.length; i++) with (response.Placemark[i]) {
					var point= new GLatLng (Point.coordinates[1], Point.coordinates[0]);
					var elOptNew= document.createElement ('option');
					elOptNew.text= address.replace (/, germany/i, '');
					elOptNew.value= address;
					try { liste.add (elOptNew, null); }
					catch (explorer) { liste.add (elOptNew); }
				}
				liste.style.visibility= 'visible';
				return;
			}
			else with (response.Placemark[0]) {
				var point= new GLatLng (Point.coordinates[1], Point.coordinates[0]);
				map.setCenter (point, 13);
				GDownloadUrl (URL + point.toUrlValue (), function (data, response) {
					if (response != 200) return;
					var xml= GXml.parse (data);
					var filialen= xml.documentElement.getElementsByTagName ('markt');
					for (var i= filialen.length - 1; i >= 0; i--) with (filialen[i]) {
						var fp= new GLatLng (getAttribute ('lat'), getAttribute ('lng'));
						var linie= new GPolyline ([point, fp], '#FF0000', 2);
						var buecherei= getAttribute ('id');
						var text= '<a href="' + libraryUrl + buecherei + '/">Details</a>';
						map.addOverlay (createMarker (fp,
								text
							, true
							, getAttribute ('name') + ', ' + getAttribute ('adr')
						));
						map.addOverlay (linie);
					}
				});
				map.addOverlay (createMarker (point,
					''
					, false
					, address.replace (/, germany/i, '')
				));
				document.getElementById ('adr').value= address.replace (/, germany/i, ', Deutschland');
				return;
			}
		}
	}
	alert ('Die von Ihnen eingegebene Adresse wurde leider nicht gefunden');
}


function showLocation (adresse) {
	var liste= document.getElementById ('alternativen');
	liste.style.visibility= 'hidden';
	for (var i= liste.length - 1; i > 0; i--) { liste.remove (i); }
	if (adresse.search (/deutschland|germany|allemagne/i) == -1) { adresse+= ', Deutschland'; }
	geocoder.getLocations (adresse, addAddressToMap);
}

function via_liste (liste) {
	liste.style.visibility= 'hidden';
	if (liste.value.search (/deutschland|germany|allemagne/i) == -1) { liste.value+= ', Deutschland'; }
	document.getElementById ('adr').value= liste.value;
	for (var i= liste.length - 1; i > 0; i--) { liste.remove (i); }
	//document.getElementById ('suchs').submit ();
	showLocation( document.getElementById ('adr').value );
}
