var routeStart = 0;
var routeEnd = 0;
var routelist = [];
var sortable; 
var loadMarkersTimer;
window.addEvent('domready', function()
{
	loadMap();

	if ($('routeinfo'))
	{
		sortable = new Sortables($('routeinfo'), {
			cloneOpacity:.2,
			handle: 'h2',
			clone: false,
			revert: false,
			constrain: true,
			initialize: function(){
				this.scroller = new Scroller('routeinfo', { area:100, velocity:0.25, onChange: function(x, y){
					this.element.scrollTo(0, y);
				} });
				this.addEvent('onStart', function(){ this.scroller.start(); });
				this.addEvent('onComplete', function(){ this.scroller.stop(); });
			}
		});
		setMapSize();
		window.onresize = setMapSize;
		setLoadMarkersTimer();
	}
});

function loadMarkers()
{
	if (markerList.length < 1)
	{
		loadXML('karte_loadxml.php', initOverlays);
		setLoadMarkersTimer();
	}
}

function setLoadMarkersTimer()
{
	loadMarkersTimer = window.setTimeout("loadMarkers()", 1000);
}

function addRoute(rid) 
{
	if (rid == "") {
		return;
	}
	if (isInRoutelist(rid)) {
		alert("Position bereits vorhanden");
		return;
	}
	if (routelist.length > 15)
	{
		alert('Maximale Anzahl Routenpunkte ist erreicht');
		return;
	}
	if (rid == routeStart || rid == routeEnd)
	{
		alert('Routenpunkt ist bereits als Start-/Endpunkt definiert');
		return;
	}
	
	var routeDiv = createRouteNode(markerList[getIndexOfMarker(rid)]);
	if (routeDiv == null) {
		alert("Position anlegen ist fehlgeschlagen");
		return;
	}
	routelist.push(rid);
	$("routeinfo").appendChild(routeDiv);
	sortable.reinitialize();
	getMapObj().closeInfoWindow();
}

function delRoute(rid) 
{
	if (rid == "" || !isInRoutelist(rid)) {
		return null;
	}
	routelist = routelist.remove(rid);
	$("r" + rid).remove();
	sortable.reinitialize();
}

function setTarget(type, rid) 
{
	if (type == "" || rid == "") {
		return;
	}
	var mArr = markerList[getIndexOfMarker(rid)];
	if (!mArr)
		return;
	var rdiv = new Element("div", {"id":"r" + rid, "class":"route"});
	rdiv.appendChild(createInfoNode(mArr));
	rdiv.appendChild(createNameNode(mArr));
	rdiv.appendChild(createAddressNode(mArr));
	$(type).empty();
	$(type).appendChild(rdiv);
	if (type == 'start') 
	{
		routeStart = rid;
		getMapObj().closeInfoWindow();
	} else {
		if (type == 'destination') 
		{
			routeEnd = rid;
			getMapObj().closeInfoWindow();
		}
	}
}

function sendRoute(type) 
{
	if (!routeStart && !routeEnd)
	{
		alert('Start- und Zielpunkt muss definiert sein.');
		return;
	}
	var mIdArr = new Array();
	mIdArr.push(routeStart);
	var routes = sortable.serialize(0);
	for (var i = 0; i < routes.length; i++)
	{
		mIdArr.push(routes[i].substr(1));
	}
	mIdArr.push(routeEnd);
	
	showDirection(mIdArr, type);
}

function isInRoutelist(rid) 
{
	if (rid == "") {
		return false;
	}
	for (i = 0; i < routelist.length; i++) {
		if (routelist[i] == rid) {
			return true;
		}
	}
	return false;
}

function openInfoWindow(rid)
{
	var m = markerList[getIndexOfMarker(rid)][3];
	GEvent.trigger(m, 'click');
}

function createNameNode(mArr) 
{
	if (!mArr) {
		return null;
	}
	return new Element("h2").setHTML(mArr[1]);
}

function createAddressNode(mArr) 
{
	if (!mArr) {
		return null;
	}
	return new Element("p").setHTML(mArr[2]);
}

function createCloseNode(mArr) 
{
	if (!mArr) {
		return;
	}
	var img = new Element("img", {"src":"files/map/close.gif"});
	img.addEvent("click", function () {
		delRoute(mArr[0]);
	});
	return img;
}

function createInfoNode(mArr) 
{
	if (!mArr) {
		return;
	}
	var img = new Element("img", {"src":"files/map/openinfo.gif"});
	img.addEvent("click", function () {
		openInfoWindow(mArr[0]);
	});
	return img;
}

function createRouteNode(mArr) 
{
	if (!mArr) {
		return null;
	}
	var nameNode = createNameNode(mArr);
	if (nameNode == null) {
		return null;
	}
	var rdiv = new Element("div", {"id":"r" + mArr[0], "class":"route"});
	rdiv.appendChild(createCloseNode(mArr));
	rdiv.appendChild(createNameNode(mArr));
	rdiv.appendChild(createInfoNode(mArr));
	rdiv.appendChild(createAddressNode(mArr));
	return rdiv;
}

function unescapeHtml(str)
{
	var div = new Element('div');
	div.innerHTML = str;
	return div.childNodes[0].nodeValue;
}

function setMapSize() 
{
	var size = getBodySize();
	var w = (size[0] > 0) ? size[0] : 800;
	w = w - 20;
	var h = (size[1] > 0) ? size[1] : 600;
	var mapDiv = $("bePALmapContainer");
	var pos = findPos(mapDiv);
	h = h - pos[1] - 10;
	mapDiv.setStyle("height", h + "px");
	mapDiv.setStyle("width", (w - $("cRouteinfo").getSize().size.x) + "px");
	$("cRouteinfo").setStyle("height", h + "px");
	$("routeinfo").setStyle("height", (h - 165) + "px");
}

/*########## Funktionen für Menüs: Benutzer registrieren / Daten ändern ##########*/
function centerObject(targetObj, sourceObj) {
	var size;
	if (sourceObj) {
		size = [sourceObj.offsetWidth, sourceObj.offsetHeight];
	} else {
		size = getBodySize();
	}
	if (size[0] < 1 || size[1] < 1) {
		return;
	}
	if (typeof targetObj == "string") {
		targetObj = getElement(targetObj);
	}
	if (typeof targetObj == "object") {
		targetObj.style.left = Math.round((size[0] - targetObj.offsetWidth) / 2) + "px";
		targetObj.style.top = Math.round((size[1] - targetObj.offsetHeight) / 2) + "px";
	}
}
var streetcheck = true;
function findAddress() {
	var f = document.forms["users"];
	var adr = "";
	if (f.mappos_manual.value == "1") {
		adr = f.latitude.value + ", " + f.longitude.value;
	} else {
		var street = f.street.value;
		var plz = f.plz.value;
		var city = f.city.value;
		if (!street || !plz || !city) {
			alert("F\xfcr einen Test m\xfcssen die Felder: Stra\xdfe, PLZ und Ort ausgef\xfcllt sein");
			return;
		}
		var nation = f.nat_id.options[f.nat_id.selectedIndex].text;
		if (!nation) {
			nation = "Germany";
		}
		street = (streetcheck == true) ? street + ", " : "";
		adr = street + plz + " " + city + ", " + nation;
	}
	geocoder.getLocations(adr, setAddressInMap);
	adr = "";
}
var tAdrMarker;
function setAddressInMap(response) {
	if (!response || response.Status.code == 500) {
		alert("Server Fehler. Der Dienst steht momentan nicht zur Verf\xfcgung");
		return;
	} else {
		if (response.Status.code != 200) {
			if (streetcheck == false) {
				alert("PLZ, Ort wurde nicht gefunden. \nKorrigieren Sie bitte Ihre Adresse.");
				streetcheck = true;
				return;
			}
			var msg = confirm("Adresse wurde nicht gefunden. \nM\xf6chten Sie nur nach PLZ und Ort suchen? \nSie m\xfcssen dann die Kartenposition manuell setzen.");
			if (msg == true) {
				streetcheck = false;
				findAddress();
			}
			return;
		}
	}
	place = response.Placemark[0];
	point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
	removeMarker(tAdrMarker);
	tAdrMarker = new GMarker(point, {draggable:true, icon:getArrowIcon()});
	GEvent.addListener(tAdrMarker, "dragend", setAddress);
	addMarker(tAdrMarker);
	panMapTo(point.lat(), point.lng());
	setZoomlevel(15);
	if (streetcheck === false) {
		setAddress();
	}
}
function setAddress() {
	if (!tAdrMarker) {
		alert("Keine Position zum \xfcbernehmen vorhanden");
		return;
	}
	var l = tAdrMarker.getPoint();
	var d = (document.getElementById) ? document.getElementById("mapMsg") : document.all.mapMsg;
	d.innerHTML = "Position manuell: Ja";
	document.forms["users"].mappos_manual.value = "1";
	document.forms["users"].latitude.value = l.lat();
	document.forms["users"].longitude.value = l.lng();
}
/*END########## Funktionen für Menüs: Benutzer registrieren / Daten ändern ##########*/


