/**
 * MEMORABILIA. Mapping my Familie / Lebenslinien
 * Diplomarbeit von Johanna Dietrich, johannadietrich.de
 */


var karte;
var einblendung;
var blenden;
var markierungen = [];
var linien;
var linienfarbe = '#000';


function initialize() {
	if(GBrowserIsCompatible()) {
		// Karte erstellen
		karte = new GMap2($('karte'), {
			draggableCursor: 'auto', 
			draggingCursor: 'move'
		});
		// Ausgangspunkt setzen: Görgesstraße 21, Braunschweig
		if(markierungen.length == 0) markierungen = [new GLatLng(52.2680337, 10.5048704)];
		karte.setCenter(markierungen[0], 5);
		// Bedienelemente hinzufügen
		karte.addControl(new GLargeMapControl());
		karte.addMapType(G_PHYSICAL_MAP);
		karte.addControl(new GScaleControl());
		karte.disableDoubleClickZoom();
		// Markierungen setzen
		if($$('form').length != 0) {
			// Bisherige Markierung laden
			for (i = 0; i < markierungen.length; i++) {
				setzen(i);
			}
			// Markierungen setzen
			klicken = GEvent.addListener(karte, 'click', markieren);
			// Namenseinblendungen
			einblendung = new Element('div', { 'class': 'einblendung' }).fade('hide');
			karte.getPane(G_MAP_MARKER_PANE).appendChild(einblendung);
			blenden = new Fx.Tween(einblendung, { 
				duration: '50',
				property: 'opacity',
				link: 'chain'
			});
		}
	}
}


/**
 * Setzt Markierungen auf der Karte
 */

function markieren(overlay, punkt) {
	// Neuen Punkt speichern
	var nummer = markierungen.length;
	markierungen[nummer] = punkt;
	setzen(nummer, true);
	speichern(punkt);
	// Nur einmaliges Hinzufügen gestatten
	GEvent.removeListener(klicken);
}


function setzen(nummer, drag) {
	// Neuen Punkt hinzufügen
	var icon = new GIcon(G_DEFAULT_ICON);
	icon.image = 'http://memorabilia.johannadietrich.de/workspace/layout/grafiken/marker.png';
	var optionen = {
		icon: icon
	};
	if(drag) optionen = {
		icon: icon,
		draggable: true, 
		bouncy: false, 
		dragCrossMove: true
	};
	var marker = new GMarker(markierungen[nummer], optionen);
	karte.addOverlay(marker);
	GEvent.addListener(marker, 'mouseover', function() {
		benennen(marker, nummer);
	});
	GEvent.addListener(marker, 'mouseout', function() {
		blenden.start(0);
	});
	// Verbindungslinien erzeugen
	verbinden();
	// Verbindungslinien nachziehen
	if(drag) {
		GEvent.addListener(marker, "drag", function(position) {
			var punkt = new GLatLng(position.y, position.x);
			markierungen[markierungen.length - 1] = punkt;
			speichern(punkt);
			verbinden();
		});
	}
}


function verbinden() {
	if(linien) karte.removeOverlay(linien);
 	linien = new GPolyline(markierungen, linienfarbe, 1, 1, {
		geodesic: true
	});
	karte.addOverlay(linien);
}


function speichern(position) {
	$('geoposition').value = position.y + ', ' + position.x;
}


function benennen(marker, nummer) {
	var koordinaten = marker.xn.getPosition($('karte').getElements('div')[1]);
	var text = (namen[nummer] != null) ? ': ' + namen[nummer] : '';
	if(nummer == 0) nummer = 'Start';
	einblendung.set('text', nummer + text);
	var breite = einblendung.getCoordinates();
	einblendung.setPosition({
		x: koordinaten.x + 10 - (breite.width / 2),
		y: koordinaten.y - 27
	});
	blenden.start(1);
}


/**
 * Karteninitialisierung beim Seitenaufruf
 */

window.addEvent('domready', function() {
	// Google Maps intitialisieren
    initialize();
    // Nachrichten in den Fokus rücken
    if($$('body').hasClass('nachricht') == true) {
	    var scroll = new Fx.Scroll(window);
	    scroll.toElement($('karte'));
    }
});
