/**
 * Datenklasse für eine Spalte mit Bildern
 */
function ImageRow(row)
{
	/** Array mit allen Bildern einer Spalte */
	this.images = new Array();
	/** IMG-Element, in welchem der Bildwechsel stattfinden soll */
	this.elm = document.getElementById("IMG_"+row);
	/** Zähler für das aktuell angezeigte Bild */
	this.count = 0;
	/** Schalter, ob Bildwechsel stattfinden soll */
	this.go = true;
}

/**
 * Verwaltungsklasse zum periodischen Wechseln von Bildern
 *
 * @param rows Anzahl der Spalten
 * @param delay Verweilzeit für ein Bild
 * @param startbilder Array mit Startbildern für jede Spalte
 */
function ImageChanger(rows, delay, min, startbilder)
{
	/** Testausgabe anzeigen */
	var SHOW_INFO = false;
	/** Array aus ImageRow-Objekten */
	var imageRows = new Array();

	/**
	 * Initialisierungsmethode
	 */
	this.init = function()
	{
		var imgID;
		var imgRow;
		var i;

		// für jede Spalte eine Instanz der ImageRow-Klasse erzeugen
		for (i = rows; i > 0; i--) {
			imageRows[i] = new ImageRow(i);
		}

		// Bilder nach ID einlesen
		for (i = document.getElementsByTagName("img").length-1; i >= 0 ; i--) {
			imgID = document.getElementsByTagName("img")[i].id;
			if (imgID.search(/^[1-9]_/) > -1)
				imageRows[imgID.slice(0,1)].images.push(document.getElementsByTagName("img")[i]);
		}

		// wenn weniger als MIN Bilder in einer Spalte sind,
		// keinen Bildwechsel durchführen
		for (i = rows; i > 0; i--) {
			imgRow = imageRows[i];
			if (imgRow.images.length < min)
				imgRow.images = new Array();
		}

		// für jede Rubrik das Startbild eintragen
		// (da es am Ende des Arrays steht, wird mit ihm begonnen)
		for (i = rows; i > 0; i--) {
			imgRow = imageRows[i];
			imgRow.images.push(new Image());
			imgRow.images[imageRows[i].images.length-1].src = startbilder[i];
			imgRow.count = imgRow.images.length-1;

			// wenn nur ein Bild vorhanden ist,
			// muss in der Spalte nichts gewechselt werden
			if (imgRow.images.length == 1) {
				imgRow.go 		= false;
				imgRow.elm.src	= imgRow.images[0].src;
			}
		}

		// Testausgabe
		if (SHOW_INFO) {
			var info, j;

			for (i = rows; i > 0; i--) {
				imgRow 	= imageRows[i];
				info 	= "Spalte "+i+"\n";
				info 	= info + imgRow.images.length + " Bild"+((imgRow.images.length==1)?"":"er") + "\n";
				info 	= info + "Bildwechsel: "+imgRow.go+"\n\n";

				for (j = 0; j < imgRow.images.length; j++)
					info = info + imgRow.images[j].src + "\n";

				alert(info);
			}
		}
	}

	/**
	 * Eigentliche Bildwechselmethode
	 */
	this.go = function()
	{
		var thisObj = this;
		var imgRow, i;

		for (i = rows; i > 0; i--) {
			imgRow = imageRows[i];

			if (imgRow.go) {
				imgRow.elm.src 	= imgRow.images[imgRow.count].src;
				imgRow.count	= (imgRow.count == imgRow.images.length-1) ? 0 : imgRow.count+1;
			}
		}

		setTimeout(function() { thisObj.go() }, delay);
	}
}

/**
 * Zeigt die Vorschaukarte an (interne Funktion)
 *
 * @param {Object} elm auslösendes Element
 * @param {Number} lat Breitenkoordinate
 * @param {Number} lng Längenkoordinate
 * @param {String} kuerzel Kürzel der Präsentation
 * @param {Number} rubrik Rubrik-ID
 */
function _showMapPreview(elm, lat, lng, kuerzel, rubrik)
{
	var latlng = new google.maps.LatLng(lat, lng);

	// Karte und Marker erzeugen
	preview_map = new google.maps.Map(preview_map_box.get(0), {
		disableDefaultUI:	true,
		mapTypeId:			google.maps.MapTypeId.HYBRID,
		center:				latlng,
		zoom:				16
	});
	preview_marker = new google.maps.Marker({
		map:		preview_map,
		clickable:	false,
		position:	latlng
	});

	// Markericon nach Rubrik
	var icon = getMarkerIcon(rubrik);
	if (icon)
		preview_marker.setIcon(icon);

	// Klick auf Tourismusseite mit übergebener Präsentation
	if (kuerzel && kuerzel.length > 0)
		google.maps.event.addListenerOnce(preview_map, "click", function() {
			location.href = getTourismusLink(kuerzel);
		});

	// ... und über das Aufmacherbild positionieren
	var img = $(elm).parent().parent().prev().find("img");
	preview_map_box
		.width(img.width()).height(img.height())
		.css({ left: img.offset().left, top: img.offset().top })
		.show();
}

function getTourismusLink(kuerzel)
{
	var backstep = (location.href.indexOf("/Reisen/") > -1) ? "../" : "";
	return backstep + "Reisen/" + kuerzel;
}

/**
 * Zeigt die Vorschaukarte an (externe Funktion, wiederholt
 * beim ersten Aufruf die interne Funktion, sonst wird auf
 * der Tourismusseite die Vorschaukarte nicht korrekt auf
 * den Marker zentriert
 *
 * @param {Object} elm auslösendes Element
 * @param {Number} lat Breitenkoordinate
 * @param {Number} lng Längenkoordinate
 * @param {String} kuerzel Kürzel der Präsentation
 * @param {Number} rubrik Rubrik-ID
 */
function showMapPreview(elm, lat, lng, kuerzel, rubrik)
{
	if (!preview_called)
		_showMapPreview(elm, lat, lng, kuerzel, rubrik);
	preview_called = true;
	_showMapPreview(elm, lat, lng, kuerzel, rubrik);
}

/**
 * Gibt das Markericon für eine Rubrik zurück
 *
 * @param {Number} rubrik Region-ID
 * @return {String}
 */
function getMarkerIcon(rubrik)
{
	if (rubrik <= 4)
		var icon = "kultur";
	else {
		switch (rubrik) {
			case 5:	var icon = "swk"; break;
			case 6:	var icon = "reisen"; break;
			case 7:	var icon = "restaurant"; break;
			case 8:	var icon = "hotel"; break;
		}
	}

	return icon
		? (is_tourismus ? "../" : "") + "pic/layout2/sticker_"+icon+".gif"
		: false;
}

/** ImgChanger-Instanz, wird direkt im HTML-Code erzeugt */
var img_changer = null;
/** jQuery-Instanz des Vorschaukarten-Containers */
var preview_map_box;
/** Instanz der Vorschaukarte */
var preview_map = null;
/** Instanz eines Google-Markers */
var preview_marker = null;
/** Kartenvorschau bereits aufgerufen? */
var preview_called = false;

$(document).ready(function()
{
	if (img_changer != null && (typeof img_changer) == "object") {
		img_changer.init();
		img_changer.go();
	}

	preview_map_box = $("#preview_map_box");

	// onclick-Handler für alle Eintragsboxen
	$("div.link").click(function() {
		// die URL zu den Eintragsdetails steht im ersten Link
		open($(this).children("a:eq(0)").attr("href"), "_self");
	});
});
