// Google Map API Helper Functions
// (c) Christian Kohout 2009
// Version 0.1
// ------------------------------------------

google.load("maps", "2");

var map = null;
var data = null;

var marker_count = 0;

var markerList = [ ];

var datasource = "http://www.triesting-goelsentalradweg.at/fileadmin/map/dummy.json";
var datasource2 = "http://www.triesting-goelsentalradweg.at/index.php?id=";

var bounds = null;

// Icons
var iconPath = 'http://www.triesting-goelsentalradweg.at/fileadmin/icons/';
var iconSize = '24';
var iconList = [ ];
var availableIcons = [1, 2, 3, 34, 35, 36, 44, 45, 71, 73, 74, 80, 81, 82];

function setCenter() {
	if (marker_count < 2) {
		map.setCenter(bounds.getCenter(), 12);
	} else {
		map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
	}
}

function init_iconList() {
	for (n = 0; n < availableIcons.length; n++) {
		var _icon = new GIcon();
		_icon.image = iconPath + 'i' + availableIcons[n] + '_' + iconSize + '.png';
		_icon.iconSize = new GSize(iconSize, iconSize);
		_icon.iconAnchor = new GPoint(0, 0);
		_icon.infoWindowAnchor = new GPoint(0,0);
		_icon.transparent = "http://www.google.com/intl/en_ALL/mapfiles/markerTransparent.png";
		iconList[availableIcons[n]] = _icon;
	}
}

function createTabbedDetailMarker(point, icon, html, title, header, iconList, uid) {
	var marker = new GMarker(point, icon);
	var icons = iconList.split(",");
	GEvent.addListener(marker, "click", function() {
		var _tabs = '';
		var _wnds = '';
		var _icons = '';
		for (var i = 0; i < icons.length; i++) {
			_icons += '<img src="http://www.triesting-goelsentalradweg.at/fileadmin/icons/i' + icons[i] + '_' + iconSize + '.png" width="' + iconSize + '" height="' + iconSize + '" />';
		}
		for (var i = 0; i < title.length; i++) {
			_tabs += '<li><a href="#g' + i + '"><span>' + title[i] + '</span></a></li>';
			_wnds += '<div id="g' + i + '">' + html[i] + '<div style="text-align: right;"><a href="' + datasource2 + uid + '">Weitere Infos</a></div></div>';
		}
		var _str = '<h1>' + _icons + header + '</h1><div id="gtabset"><ul>' + _tabs + '</ul>' + _wnds + '</div>';
		$('#gmap_detail').html(_str);
		$('#gtabset').tabs();
	});
	return marker;
}

function createTabbedMarker(point, icon, html, title) {
	var marker = new GMarker(point, icon);
	GEvent.addListener(marker, "click", function() {
		if (html.length > 2) { html[0] = '<div style="width:' + html.length*88+'px">' + html[0] + '</div>'; }
		var tabs = [];
		for (var i=0; i < html.length; i++) {
			tabs.push(new GInfoWindowTab(title[i], html[i]));
		}
		marker.openInfoWindowTabsHtml(tabs);
	});
	return marker;
}

function load_gmap_data(response) {
	data = eval('(' + response + ')');
//	map.setCenter(new google.maps.LatLng(parseFloat(data.view.lat), parseFloat(data.view.lng)), parseInt(data.view.zoom));
	if (data.markers != null) {
		var geocoder = new GClientGeocoder();
		marker_count = data.markers.length;
		for (var i = 0; i < data.markers.length; i++) {
			var _adresse = data.markers[i].adresse + ', ' + data.markers[i].plz + ' ' + data.markers[i].ort;
			if ((data.markers[i].lat != '') && (data.markers[i].lng != '') && (marker_count > 1)) {
				// Lat / Lng bereits vorhanden
				var point = new GLatLng(parseFloat(data.markers[i].lat), parseFloat(data.markers[i].lng));
				var _icon = iconList[parseInt(data.markers[i].icon)];
				
				var tab_html = [
					'<p><strong>' + data.markers[i].titel + '</strong><br />' + data.markers[i].beschreibung + '</p>',
					'<p><strong>Öffnungszeiten</strong><br />' + data.markers[i].oeffnungszeiten + '</p><p><strong>Ruhetage</strong><br />' + data.markers[i].ruhetage + '</p>',
					'<p><strong>Tel:</strong> ' + data.markers[i].tel + '<br /><strong>Fax:</strong> ' + data.markers[i].fax + '<br /><strong>Email.:</strong> ' + data.markers[i].email + '<br /><strong>Web.:</strong> ' + data.markers[i].web + '</p>'
				];
				var tab_title = [
					'Allgemein',
					'Zeiten',
					'Kontakt'
				];
				bounds.extend(point);
				var marker = createTabbedDetailMarker(point, _icon, tab_html, tab_title, data.markers[i].titel, data.markers[i].icon, data.markers[i].uid);
				map.addOverlay(marker);
				markerList.push(marker);
				if (markerList.length == marker_count) {
					setCenter();
				}
			} else {
				geocoder.getLatLng(
					_adresse,
					function(point) {
						if (!point) {
							alert(_adresse + ' nicht gefunden');
						} else {						
							var _i = markerList.length;
							var _icon = iconList[parseInt(data.markers[_i].icon)];
							var result = null;
							GDownloadUrl(datasource2 + data.markers[_i].uid + "&type=6&lat=" + point.y + "&lng=" + point.x, result);

							var tab_html = [
								'<p><strong>' + data.markers[_i].titel + '</strong><br />' + data.markers[_i].beschreibung + '</p>',
								'<p><strong>Öffnungszeiten</strong><br />' + data.markers[_i].oeffnungszeiten + '</p><p><strong>Ruhetage</strong><br />' + data.markers[_i].ruhetage + '</p>',
								'<p><strong>Tel:</strong> ' + data.markers[_i].tel + '<br /><strong>Fax:</strong> ' + data.markers[_i].fax + '<br /><strong>Email.:</strong> ' + data.markers[_i].email + '<br /><strong>Web.:</strong> ' + data.markers[_i].web + '</p>'
							];
							var tab_title = [
								'Allgemein',
								'Zeiten',
								'Kontakt'
							];

							bounds.extend(point);
	
							var marker = createTabbedDetailMarker(point, _icon, tab_html, tab_title, data.markers[_i].titel, data.markers[_i].icon, data.markers[_i].uid);
							map.addOverlay(marker);
							markerList.push(marker);
							if (markerList.length == marker_count) {
								setCenter();
							}
						}
					}
				);
			}
		}
	}
	if (data.routes != null) {
		// Routen
		for (i = 0; i < data.routes.length; i++) {
			// Route
			for (j = 0; j < data.routes[i].track.length; j++) {
				// Track (Array)
				var pts = [];
				for (var n = 0; n < data.routes[i].track[j].points.length; n++) {
					pts[n] = new GLatLng(parseFloat(data.routes[i].track[j].points[n].lat), parseFloat(data.routes[i].track[j].points[n].lng));
				}
				map.addOverlay(new GPolyline(pts, data.routes[i].track[j].routecolor, 6, 0.5));
				if ((j+1) == data.routes[i].track.length) {
				}
			}
		}
	}
}

function init_gmap() {
	bounds = new GLatLngBounds();
	map = new google.maps.Map2(document.getElementById("gmap"));
	map.addControl(new GSmallMapControl());
	map.addControl(new GMapTypeControl());
	init_iconList();
	//map.setCenter(new google.maps.LatLng(37, -122), 13);
	//render_marker(wichtige_punkte);
	GDownloadUrl(datasource, load_gmap_data);
}

