//<![CDATA[

var map = null;
var geocoder = null;

var v_icon = new GIcon();
	v_icon.image = "/Files/Skin/Images/v_pointer.png";
	v_icon.shadow = "/Files/Skin/Images/v_shadow.png";
	v_icon.iconSize = new GSize(23, 36);
	v_icon.shadowSize = new GSize(34, 36);
	v_icon.iconAnchor = new GPoint(10, 38);
	v_icon.infoWindowAnchor = new GPoint(11, 5);

var e_icon = new GIcon();
	e_icon.image = "/Files/Skin/Images/e_pointer.png";
	e_icon.shadow = "/Files/Skin/Images/e_shadow.png";
	e_icon.iconSize = new GSize(27, 36);
	e_icon.shadowSize = new GSize(34, 36);
	e_icon.iconAnchor = new GPoint(12, 38);
	e_icon.infoWindowAnchor = new GPoint(11, 5);

function load() {

	if (!GBrowserIsCompatible()) {
		return;
	}

	// setup
	map = new GMap2($('gmap'));
	geocoder = new GClientGeocoder();
	map.addControl(new GSmallMapControl());

	map.clearOverlays();

	if (typeof map_points == 'undefined' || typeof map_points[0] == 'undefined') {
		if ($("gmap").className != 'small_map') {
			$("gmap").hide();
		}
		return;
	}

	// multiple points with center switch
	if (map_points.length > 1) {
		var zoom = 13;
		start_map();
	// single point
	} else {
		var zoom = 15;
	}

	map.setCenter(new GLatLng(map_points[0].geo_lat, map_points[0].geo_lng), zoom);

	markers = Array();

	map_points.each (
		function(my_point, index)
		{
			var point = new GLatLng(my_point.geo_lat, my_point.geo_lng);
			var icon = (my_point.type === 'event') ? e_icon : v_icon;
			markers[index] = createMarker(point, icon, my_point.info);

			map.addOverlay(markers[index]);
		}
	);
}

// Creates a marker at the given point
function createMarker(point, icon, info)
{
	var marker = new GMarker(point, icon);

	var info_tabs = Array();

	if (info.html) {
		GEvent.addListener(marker, "click", function() {
		  marker.openInfoWindowHtml(info.html);
		  stop_map();
		});

		return marker;
	}

	info.each (
		function (item, index)
		{
			info_tabs.push(new GInfoWindowTab(item.title, item.html));
		}
	);

	GEvent.addListener(marker, "click", function() {
	 	marker.openInfoWindowTabsHtml(info_tabs);
	 	stop_map();
	});

	return marker;
}

function showAddress(address)
{
	if (geocoder && address) {
		geocoder.getLatLng(address,
			function (point) {
				if (point) {
					showPoint(point);
					$('map_error').hide();
				} else {
					mapError('Adresse kann nicht lokalisiert werden. Bitte korrigieren.');
				}
			});
	}
	else
		mapError('Adresse konnte nicht lokalisiert werden. Versuch es spaeter.');
}

function showCoords(lat, lng)
{
	if(lat && lng)
		showPoint(new GLatLng(lat, lng));
}

function showPoint(point)
{
	if (point) {
	  map.clearOverlays();
	  map.checkResize();
	  map.setCenter(point, 15);
	  var marker = new GMarker(point);
	  map.addOverlay(marker);
	}
}

function mapError(message)
{
	map.clearOverlays();
	$('map_error').innerHTML = '<div>'+ message +'</div>';
	new Effect.SlideDown('map_error');
}

function switch_center()
{
	if (map_loop_index >= (map_points.length)) {
		map_loop_index = 0;
		map_loops++;
	}

	if (map_loops == map_max_loops) {
		stop_map();
	}

	if (cgeo_lat != map_points[map_loop_index].geo_lat || cgeo_lng != map_points[map_loop_index].geo_lng) {
		map.panTo(new GLatLng(map_points[map_loop_index].geo_lat, map_points[map_loop_index].geo_lng));
	}

	cgeo_lat = map_points[map_loop_index].geo_lat;
	cgeo_lng = map_points[map_loop_index].geo_lng;

	map_loop_index++;
}

function stop_map()
{
	map_loops = 0;
	map_loop_index = 0;

	clearInterval(map_interval);
}

function start_map()
{
	if (typeof map_points == 'undefined' || map_points.length <= 1) {
		return;
	}

	// start with second point
	map_loop_index = 1;
	map_max_loops = 1;
	cgeo_lat = map_points[0].geo_lat;
	cgeo_lng = map_points[0].geo_lng;
	map_loops = 0;

	map_interval = window.setInterval( 'switch_center()', 100*60 );
}

//]]>