/*
 *	Google-Map
 *  initialisiert und konfiguriert eine Google-Map
 *  Author: Nicolas Riger & Marco Nätlitz
 *  Agentur: webstyle4k.de | e8media.de
 */

/* 
 * Konfiguration
 * ------------------------------------------------------------
 */
 
/* initialisiere globalen Array für die Marker
 * wird gebraucht, um die Marker später aus anderen Formularen anzusprechen
 */
var globalmarkers = [];

/*
 * Breite der Google-Map in px
 */
var map_width = 350;

/*
 * Höhe der Google-Map in px
 */
var map_height = 255;

/*
 * ID des <div>, das durch die Google-Map ersetzt wird
 */
var div_id = "map";

/*
 * ID des Formulares zur Map
 */
var form_id = "change_location";

/*
 * ID des Select-Feldes innerhab des Formulares
 */
var select_id = "geschaeftsstellen";

/*
 * Icon für Map_Points auf der Karte. Absolut angegeben
 */
var map_icon = "/google_map/img/google_marker_icon.png";
var map_icon_x = 19; // Größe Breite in px
var map_icon_y = 19; // Größe Höhe in px

/*
 * Default Zoom der Map
 */
var map_default_zoom = 10;

/*
 * Koordinaten, zu denen die Map zentriert wird
 */
var map_default_center_lat = 50.895;
var map_default_center_lng = 6.781654;

/*
 * XML-Datei mit den Koordinaten. Absolute Pfad-Angabe
 */
var map_xml_file = "/google_map/markers.xml";

/*
 * Deep Link zur Geschäftsstelle
 */
var map_deep_link = "/geschaeftsstellen/index.php?page=geschaeftsstellen&";



/*
 * Funktion "load_Google_Map"
 * ------------------------------------------------------------
 * Lädt die Google_Map, falss der Browser kompatibel ist
 */
function load_Google_Map() {

	if (GBrowserIsCompatible()) {
	
		initialise_Google_Map();
	
	}
}

/*
 * Funktion "parseHtmlForMarker"
 * ------------------------------------------------------------
 * generiert den HTML-Code, der eingeblendet wird, sobald der Marker geklickt wurde
 */
function parseHtmlForMarker(ort,address,phone,url,id) {

	var output = "<div class=\"mapinfo\"><strong>Gesch&auml;ftsstelle " + ort + "</strong><br /><br />" + address + "<br />" + phone + "<br /><br /><a href=\"" + url + "\">Mehr Informationen und Kontakt</a></div>";
				
	return output;

}

function JumpToMarker(markerid) {
	//document.forms["change_location"].elements["geschaeftsstellen"].options.selectedIndex = markerid;
	GEvent.trigger(globalmarkers[markerid],"click");
}

/*
 * Funktion "initialise_Google_Map"
 * ------------------------------------------------------------
 * Instanziert und konfiguriert die Google-Map
 */
function initialise_Google_Map () {

	// Konstruiert die Klasse
	var map2 = new GMap2(	document.getElementById(div_id),
							{ size: new GSize(map_width,map_height) } 
						);
						
	// Position und Zentrierung					
	map2.disableScrollWheelZoom();
	map2.setCenter(new GLatLng(map_default_center_lat,map_default_center_lng), map_default_zoom);
	map2.savePosition();

	// Ein paar Basisinfos fuer die Icons der Marker
	var baseIcon = new GIcon();
        baseIcon.iconSize = new GSize(map_icon_x, map_icon_y);
        baseIcon.iconAnchor = new GPoint(9, 9);
        baseIcon.infoWindowAnchor = new GPoint(9, 2);

    /*
     * Funktion "crateMarker"
     * Erstellt einen Marker, für die Positions-Angaben
	 */
	function createMarker(point, ort, address, phone, url, scriptcode, selectid) {
	
		// Erstelle "letteredIcon" aus der GIcon-Klasse
		var letteredIcon = new GIcon(baseIcon);
		letteredIcon.image = map_icon;
		
		// Erstelle GMarker-Objekt
		markerOptions = { icon:letteredIcon };
		var marker = new GMarker(point, markerOptions);
		
		// Fügt dem Marker einen Listener für das click-Event hinzu
		// diesem wird die Funktion zugewiesen, die Infobox zu öffnen
		GEvent.addListener(	marker,
							"click",
							function() {
								var html = parseHtmlForMarker(ort,address,phone,url);
								marker.openInfoWindowHtml(html);
								//Aus dem Select-Feld die entsprechende Stelle auswählen
								document.forms["change_location"].elements["geschaeftsstellen"].options.selectedIndex = selectid;
								//Stoppe Slider-Timeout
								clearTimeout(timeout);
								//leere Arrays
								images = new Array();
								desc = new Array();
								//in Scriptcode stehen in der XML die Array-Definitionen neu
								eval(scriptcode);
								//globaler Counter aus Slideshow zurücksetzen
								myCounter = 0;
								//Sofortstart der Slideshow
								tkStart("true");
							}
						);
		
		// Wird das Infofenster geschlossen, springt die Map zum Savepoint zurück
		// Dieser wurde nach initialem setCenter gesetzt
		GEvent.addListener(	marker,
							"infowindowclose",
							function() {
								//Select zurücksetzen
								document.forms["change_location"].elements["geschaeftsstellen"].options.selectedIndex = 0;
								//Standard-Slideshow reinhauen und neustarten
								clearTimeout(timeout);
								images = new Array();
								desc = new Array();
								setStandardSlideshow();
								myCounter = 0;
								tkStart("true");
								//Zur Startposition zurückkehren
								map2.returnToSavedPosition();
							}
						);
		globalmarkers[selectid] = marker;
		
		
		return marker;
	}


	/*
	 * Funktion "parseXML"
	 * Liest die XML-Datei ein füllt die Google-Map
	 */
	GDownloadUrl(	map_xml_file, 
					function(data, responseCode) {
				
						var xml = GXml.parse(data);
						var markers = xml.documentElement.getElementsByTagName("marker");
				
						for (var i = 0; i < markers.length; i++) {
				
							var point = new GLatLng(	parseFloat(markers[i].getAttribute("lat")),
														parseFloat(markers[i].getAttribute("lng"))
												);
							
							map2.addOverlay(	createMarker(	point,
																markers[i].getAttribute("title"),
																markers[i].getAttribute("address"),
																markers[i].getAttribute("phone"),
																markers[i].getAttribute("url"),
																markers[i].getAttribute("slidearrays"),
																markers[i].getAttribute("id")
															)
											);

							// Fügt die Marker dem Select hinzu und gibt der value den Wert des zugehörigen Inhalts von globalmarkers
							document.forms['change_location'].geschaeftsstellen.options[markers[i].getAttribute("id")] = new Option(markers[i].getAttribute("title"),markers[i].getAttribute("id"));
  						}
  						if(typeof(startmarker) != "undefined") {
  							JumpToMarker(startmarker);
  						}
					}
				);
}

/*
 * Funktion "clickmarker"
 * ------------------------------------------------------------
 * wird von onchange im select aufgerufen mit Attribut "this"
 * spricht das click-Event des Markers an, den er aus globalmarkers kennt
 */
function clickmarker(selectobject) {
	var wert = selectobject.options[selectobject.options.selectedIndex].value;
	
	if (wert != "noaction") {
	
		GEvent.trigger(globalmarkers[wert],"click");
	}
}