 /*
	Copyright (c) 2010 by Nop.
	Copying/reuse require explicit approval by the author.
 */

var retry;

function resetFrame( frame ) {
	// reset target frame
	doc = frames[frame].document;
	doc.open();
	doc.close();		
}

function loadGPX() {
	// reset target frame
	resetFrame('gpx_target');

	form = document.getElementById('gpxBackForm');
	form.submit();
}

function loadGPXComplete() 
{
	doc = frames['gpx_target'].document;
	var ret = doc.getElementsByTagName("body")[0].innerHTML;
	
	if( ret.substr( 0, 3 ) == "gpx" )
	{
		resetFrame('gpx_target');
		
		startOption = document.getElementById('editorAutostart');
		if( startOption.checked )
		{
			var link = document.getElementById('permalink.editor').href;
			link += "&" + ret;
			window.location = link;
		}
		else
			document.getElementById('gpxfile').value = "";
			
	}
	else
	{
		alert( ret ); 
	}
}

function loadData() {
	// reset target frame
	resetFrame('upload_target');

	retry = 20;
	form = document.getElementById('uploadForm');
	form.submit();
	
	window.setTimeout("checkData()",500);
}

function checkData()
{
	doc = frames['upload_target'].document;
	var ret = doc.getElementsByTagName("body")[0].innerHTML;

	if( ret.length > 200 )
	{
		importData();
	}
	else
	{
		retry = retry-1;
		if( retry > 0 && ret.substr( 0, 7 ) != "Fehler:" )
		{
			window.setTimeout("checkData()",500);
		}
		else
		{
			alert( "Upload fehlgeschlagen\n" + ret );
		}
	}
}

var lonMin = 0;
var latMin = 0;
var lonMax = 0;
var latMax = 0;

function resetArea()
{
	lonMin = 200;
	latMin = 200;
	lonMax = -200;
	latMax = -200;
}

function registerPoint( lon, lat )
{
	lonMin = Math.min( lonMin, lon );
	lonMax = Math.max( lonMax, lon );
	latMin = Math.min( latMin, lat );
	latMax = Math.max( latMax, lat );
}

function showAreaCenter()
{
	var area = new OpenLayers.Bounds(lonMin, latMin, lonMax, latMax );
	area.transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
	map.zoomToExtent( area, false );
}

function importData()
{
	doc = frames['upload_target'].document;
	var ret = doc.getElementsByTagName("body")[0].innerHTML;

	hideLayer( 'uploadLayer' );	
	
	parser=new DOMParser();
	xmlDoc=parser.parseFromString( ret, "text/xml");

	var pointName = "rtept";  
	route = xmlDoc.getElementsByTagName("rte")[0];
	if( !route )
	{
		route = xmlDoc.getElementsByTagName("trk")[0];
		pointName = "trkpt";
	}

	if( route )
	{
		name = route.getElementsByTagName("name")[0].childNodes[0].nodeValue;
		if( name && name.length > 2 )
		{
			saveName = document.getElementById('routename');
			saveName.value = name;
		}
		if( pointName == "trkpt" )
		{
			// select first segment of track
			route = route.getElementsByTagName("trkseg")[0];
		}
		
		gpxTrack.clear();
		//alt = "pts:\n";
		points = route.getElementsByTagName( pointName );
		lonSum = 0;
		latSum = 0;
		for (i=0;i<points.length;i++)
		{
			lon = parseFloat( points[i].getAttribute('lon'));
			lat = parseFloat( points[i].getAttribute('lat'));
			
			lonSum += lon;
			latSum += lat;

			gpxTrack.addMarker( lon, lat );  		
			//alt = alt + lat + "," + lon + "\n";
		} 
		
		gpxTrack.updateTracklengthDisplay();
		
		lonSum /= points.length;
		latSum /= points.length;
		var lonlat = new OpenLayers.LonLat(lonSum, latSum);
		lonlat = p2p(p4326, p900913, lonlat);
		map.setCenter(lonlat, 12 );

		//alert("route " + name + "\n" + alt );	
	}
	else
	{
		alert( "Keine Routen oder Tracks gefunden" );
	}
}

function loadRouteTrack( routeid, name )
{
	var fr = document.getElementById( 'route.result' );
	fr.contentDocument.close();
	fr.contentDocument.open();
	fr.contentDocument.write( name + " wird geladen...");

	    OpenLayers.Request.GET({
			url:'http://www.wanderreitkarte.de/php/routeload.php',
			params: {relid: routeid},
        callback: function(request) {
		   if( request.status == 200 )
		   {
				resetArea();
				gpxTrack.clear();
				var points = request.responseText.split( "," );
				for( i =0; i<points.length; i++ )
				{
					var coords = points[i].split( " " );
					lat = parseFloat( coords[0]);
					lon = parseFloat( coords[1]);
					
					gpxTrack.addMarker( lon, lat );  		
					registerPoint( lon, lat );
				}
				gpxTrack.updateTracklengthDisplay();
				showAreaCenter();
			}
		   else
				alert( "Error code: " +request.status );
        }
      });
}

function showUpdateDate() {
  d = frames['update_date'].document.getElementsByTagName("body")[0].innerHTML;
  e = document.getElementById('currentData');
  e.innerHTML = d;
}

function showGarminUpdateDate() {
  d = frames['garmin_date'].document.getElementsByTagName("body")[0].innerHTML;
  e = document.getElementById('currentGarmin');
  e.innerHTML = d;
}


// bookmarklet by Sven Greggus

function createJOSMLink4bookmarklet(extent, objtype, objid) {

	var proj4326 = new OpenLayers.Projection("EPSG:4326");
	var projmerc = new OpenLayers.Projection("EPSG:900913");


	var e = extent.transform(projmerc, proj4326).toArray();
	var url = 'http://localhost:8111/load_and_zoom?left=' + e[0].toFixed(5) +
	'&bottom=' + e[1].toFixed(5) +
	'&right=' + e[2].toFixed(5) +
	'&top=' + e[3].toFixed(5);
	if (objtype && objid) {
		url += '&select=' + objtype + objid;
	}
	return url;
};

function bookmarklet_do_josm_remote(mymap) {
	var url=createJOSMLink4bookmarklet(mymap.getExtent());
	var e = document.getElementById('josmiframe');
	e.setAttribute("src", url); 
};

var translationMap;
var currentLang;
var lastLang = 'de';

function setLanguage( lang )
{
	alert( "Sorry, translation is still in progress" );
	return;
	
	if( !lang || lang == lastLang )
		return;
		
	currentLang = lang;
	getLanguage();
	translate();
}

function translate()
{
	//if( !translationMap )
	//	return;

	if( currentLang == lastLang )
		return;

		out = frames['trans_target'].document;
		out.write( " " );
	tags = document.getElementsByTagName("*");

	lastLang = currentLang;
	
	for( var i = 0; i < tags.length; i++)
	{
		tag = tags[i];
		if( tag.hasChildNodes() )
		{
			transid = tag.getAttribute('i18n');
			if( transid )
			{
				trans = translationMap[transid];
				if( trans )
					tag.firstChild.nodeValue = trans;
				else
					out.write( "'" + transid + "': '" + tag.firstChild.nodeValue + "',"  );
			}
			else
			{
				transid = tag.getAttribute('i18lnk');
				if( transid )
				{
					trans = translationMap[transid];
					if( trans )
						tag.setAttribute( 'href', trans );
					else
						out.write( "'" + transid + "': '" + tag.getAttribute( 'href' ) + "',"  );
				}
			}
		}
		else
		{
			transid = tag.getAttribute('i18img');
			if( transid )
			{
				trans = translationMap[transid];
				if( trans )
					tag.setAttribute( 'src', trans );
				else
					out.write( "'" + transid + "': '" + tag.getAttribute( 'src' ) + "',"  );
			}
		}
	}
	//document.write("Browser Language is=" + navigator.language);
}

function getLanguage()
{
	if( !currentLang )
	return;

	if( currentLang == 'en' )
	{
		translationMap = {
			'page.title': 'OSMC Hiking- and Bridlemap',
			'bar.title': 'OSMC Hike & Bridlemap',
			'bar.info': 'About the map',
			'bar.update': 'Data of ',
			'bar.wiki': 'http://wiki.openstreetmap.org/wiki/OSMC_Reitkarte',
			'bar.key': 'Show map key',
			'bar.scale': 'Scale',
			'bar.perma': 'Permalink',
			'bar.lang': 'Language', 
			'key.way': 'Ways',
			'key.poi': 'POIs',
			'key.area': 'Areas',
			'key.way_img': 'static/key_ways_en.png',
			'key.node_img': 'static/key_nodes_en.png',
			'key.ground_img': 'static/key_ground_en.png',
			'dirs.title': 'Directories',
			'dirs.trail': 'Hiking trails',
			'dirs.bridle': 'Bridleways',
			'dirs.station': 'Trail riding stations',
			'dirs.rest': 'Restaurants',
			'dirs.update': 'Map updates',
			'garmin.title': 'Garmin version',
			'garmin.gps': 'for GPS devices',
			'garmin.mapsource': 'for Mapsource',
			'garmin.data': 'Date',
			'edit.title': 'Edit the map',
			'edit.potlatch': 'Edit in Potlatch',
			'edit.josm': 'Call JOSM (remote)',
			'edit.stil': 'Matching JOSM-Style',
			'route.title': 'Route editor',
			'route.load': 'Load route...',
			'route.delete': 'Clear route',
			'route.length': 'Route length:',
			'route.save': 'Save route...',
			'route.help': 'Show help',
			'route.attr': 'Editor code by Harald Kirsch.',
			'route.browser': 'Tested with Firefox 3.5',
			'save.title': 'Save route',
			'save.name': 'File name: ',
			'save.type': 'GPX type: ',
			'save.action': 'Download',
			'point.title': 'Route point',
			'point.delete': 'Delete',
			'point.waypoint': 'Waypoint',
			'point.at': 'at',
			'point.action': 'OK',
			'load.title': 'Load route',
			'load.name': ' File name: ',
			'load.warning': 'Loading GPX data deletes the current route!',
			'load.text': 'The file must contain valid GPX data. Maximum size is 50kB. The first route or track is imported.',
			'load.action': 'Upload',
			'help.empty': 'Route is empty. Set some points before saving.',
			'help.title': 'Edit routes',
			'help.new': 'Click map to add new point.',
			'help.move': 'Drag points to move them.',
			'help.edit': 'Click points to edit.',
			'help.delete': 'Ctrl-Click points to delete them.',
			'help.insert': 'Toggle insert mode with a key. Click a line to insert point. ',
			'help.nav': 'Navigate map',
			'help.zoom': 'Zoom with mouse wheel or keys +/-.',
			'help.pos': 'Move map with mouse or arrow keys.',
			'help.area': 'Zoom to area by holding down Shift key.',
			'tool.title': 'Tools',
			'tool.print': 'Print map',
			'tool.locate': 'Locate me',
			'tool.alternate': 'Alternate display',
			'tool.contact': 'Contact',
			'license.title': ' Licence',
			'license.total': 'Overall licence',
			'license.link': 'static/licence_en.html',
			'license.map': 'Map data by ', 
			'license.ele': 'Elevations by ', 		
			'imprint.support': 'Supported by',
			'imprint.title': 'Imprint'
		};
	}
	else if( currentLang == 'it' )
	{
	translationMap = {
			'page.title': 'OSMC Mappa delle escursioni- a piedi e a cavallo',
			'bar.title': 'OSMC Mappa di sentieri e ippovie',
			'bar.info': 'Informazioni sulla mappa',
			'bar.wiki': 'http://wiki.openstreetmap.org/wiki/IT:OSMC_Reitkarte',
			'bar.key': 'Mostra la legenda',
			'bar.update': 'Dati del ',
			'bar.scale': 'Scala',
			'bar.perma': 'Permalink',
			'bar.lang': 'Lingua', 
			'key.way': 'Linee',
			'key.poi': 'POI',
			'key.area': 'Superfici',
			'key.way_img': 'static/key_ways_it.png',
			'key.node_img': 'static/key_nodes_it.png',
			'key.ground_img': 'static/key_ground_it.png',
			'dirs.title': 'Elenchi',
			'dirs.trail': 'Sentieri',
			'dirs.bridle': 'Ippovie',
			'dirs.station': 'Posti tappa per equiturismo',
			'dirs.rest': 'Ristoranti',
			'dirs.update': 'Aggiornamenti',
			'garmin.title': 'Versione per Garmin',
			'garmin.gps': 'per navigatori GPS',
			'garmin.mapsource': 'per Mapsource',
			'garmin.data': 'Data',
			'edit.title': 'Modifica la mappa',
			'edit.potlatch': 'Modifica con Potlatch',
			'edit.josm': 'Apri in JOSM (remote)',
			'edit.stil': 'Stile per JOSM dedicato',
			'route.title': 'Editor di itinerario',
			'route.load': "Carica l'itinerario...",
			'route.delete': "Cancella l'itinerario",
			'route.length': 'Lunghezza itinerario:',
			'route.save': "Salva l'itinerario...",
			'route.help': 'Aiuto',
			'route.attr': "Codice dell'editor di Harald Kirsch.",
			'route.browser': 'Testato con Firefox 3.5',
			'save.title': "Salva l'itinerario",
			'save.name': 'Nome file: ' ,
			'save.type': 'Tipo di GPX: ',
			'save.action': 'Salva',
			'point.title': 'Punto itinerario',
			'point.delete': 'Annulla',
			'point.waypoint': 'Nome',
			'point.at': 'a',
			'point.action': 'OK',
			'load.title': "Carica l'itinerario",
			'load.name': ' Nome del file: ',
			'load.warning': "Il caricamento di dati GPX cancella l'itinerario corrente!",
			'load.text': 'Il file deve contenere dati GPX validi. La dimensione massima è 50kB. Viene importato il primo itinerario o la prima traccia.',
			'load.action': 'Carica',
			'help.empty': "L'itinerario è vuoto. Aggiungi alcuni punti prima di salvare.",
			'help.title': 'Modifica degli itinerari',
			'help.new': 'Clicca sulla mappa per aggiungere un nuovo punto.',
			'help.move': 'Trascina i punti con il tasto sinistro.',
			'help.edit': 'Clicca sui un punti per modificarli.',
			'help.delete': 'Cancella i punti con Ctrl-Click.',
			'help.insert': 'Abilita/disabilita la modalità inserimento tramite il tasto a. Clicca su una linea per inseriri un punto. ',
			'help.nav': 'Navigazione sulla mappa',
			'help.zoom': 'Modifica lo zoom con la rotella del mouse o con i tasti  ±.',
			'help.pos': 'Muovi la mappa con il mouse o con i tasti freccia.',
			'help.area': "Ingrandisci un'area trascinandovi il mouse con il tasto sinistro ed il tasto Shift premuti.",
			'tool.title': 'Varie',
			'tool.print': 'Stampa la mappa',
			'tool.alternate': 'Visualizzazione alternativa',
			'tool.locate': 'Locate me',
			'tool.contact': 'Contatto',
			'license.title': ' Licenza',
			'license.total': 'Licenza globale',
			'license.link': 'static/licence_it.html',
			'license.map': 'Dati della mappa da ', 
			'license.ele': 'Elevazione da ', 		
			'imprint.support': 'Patrocinato da',
			'imprint.title': 'Note legali'	
			};
	}
	else
	{
		translationMap = {
			'page.title': 'OSMC Reit- und Wanderkarte',
			'bar.title': 'OSMC Reit & Wanderkarte',
			'bar.info': 'Informationen zur Karte',
			'bar.update': 'Daten vom ',
			'bar.wiki': 'http://wiki.openstreetmap.org/wiki/DE:OSMC_Reitkarte',
			'bar.key': 'Legende',
			'bar.scale': 'Maßstab',
			'bar.perma': 'Permalink setzen',
			'bar.lang': 'Sprache', 
			'key.way': 'Wege',
			'key.poi': 'POIs',
			'key.area': 'Gelände',
			'key.way_img': 'static/key_ways_de.png',
			'key.node_img': 'static/key_nodes_de.png',
			'key.ground_img': 'static/key_ground_de.png',
			'dirs.title': 'Verzeichnisse',
			'dirs.trail': 'Wanderwege',
			'dirs.bridle': 'Reitwege',
			'dirs.station': 'Wanderreitstationen',
			'dirs.rest': 'Einkehr mit Pferd',
			'dirs.update': 'Aktualisierung',			
			'garmin.title': 'Garmin-Version',
			'garmin.gps': 'für GPS-Geräte',
			'garmin.mapsource': 'für Mapsource',
			'garmin.data': 'Stand',
			'edit.title': 'Karte bearbeiten',
			'edit.potlatch': 'Potlatch aufrufen',
			'edit.josm': ' JOSM (remote) aufrufen',
			'edit.stil': 'Passender JOSM-Stil',
			'route.title': 'Routeneditor',
			'route.load': 'Route laden...',
			'route.delete': 'Route löschen',
			'route.length': 'Routenlänge:',
			'route.save': 'Route speichern...',
			'route.help': 'Hilfe',
			'route.attr': 'Editorcode von Harald Kirsch.',
			'route.browser': 'Getestet mit Firefox 3.5',
			'save.title': 'Route speichern',
			'save.name': ' Dateiname: ',
			'save.type': 'GPX Typ: ',
			'save.action': 'Speichern',
			'point.title': 'Routenpunkt',
			'point.delete': 'Löschen',
			'point.waypoint': 'Wegpunkt:',
			'point.at': 'bei',
			'point.action': 'OK',
			'load.title': 'Route laden',
			'load.name': ' Dateiname: ',
			'load.warning': 'Das Hochladen von GPX Daten löscht die aktuelle Route! ',
			'load.text': ' Die Datei muß gültige GPX Daten enthalten und kleiner als 50kB sein. Die erste Route/Track wird importiert. ',
			'load.action': 'Hochladen',
			'help.empty': ' Route ist leer. Vor dem Speichern zuerst Routenpunkte setzen.',
			'help.title': 'Routen bearbeiten',
			'help.new': 'Neuen Punkt mit Klick setzen.',
			'help.move': 'Punkte verschieben mit linker Taste.',
			'help.edit': 'Punkt zum Bearbeiten anklicken.',
			'help.delete': 'Löschen mit CTRL-Klick.',
			'help.insert': 'Einfügemodus mit Taste a ein/ausschalten. Linie f&uuml;r Zwischenpunkt ausw&auml;hlen.',
			'help.nav': 'Kartennavigation',
			'help.zoom': 'Zoomen mit Mausrad oder Tasten +/-.',
			'help.pos': 'Kartenposition mit Maus oder Pfeiltasten verschieben.',
			'help.area': 'Auf Ausschnitt zoomen mit Shift-Linke Maustaste.',
			'tool.title': 'Nützliches',
			'tool.print': 'Karte drucken',
			'tool.locate': 'Aktueller Standort',			
			'tool.alternate': 'Alternative Darstellung',
			'tool.contact': 'Kontakt',
			'license.title': ' Lizenz',
			'license.total': 'Gesamtlizenz ',
			'license.link': 'static/licence_de.html',
			'license.map': 'Karte von ', 
			'license.ele': ' Höhen von ', 		
			'imprint.support': 'Unterstützt von',
			'imprint.title': 'Impressum'
		};
	}
};

if( typeof(urlLang) != "undefined" )
{
	setLanguage( urlLang );
}
//currentLang = 'en';
//getLanguage();
//translate();

