/*
 * Uhrzeit aktuallisieren
 */

function initClock() {
	var localtime = new Date();
	document.getElementById("jsclock").innerHTML = localtime.format();
	setTimeout("initClock()", 1000);
}

/*
 * Funktion zum aktualisieren der Orientierung des iPhones
 */
function updateOrientation() {
	switch(window.orientation) {
		case 0:
			displayStr = "Vertikal";
			break;
		case -90:
			displayStr = "Horizontal (rechts, im Uhrzeigersinn)";
			break;
		case 90:
			displayStr = "Horizontal (links, gegen den Uhrzeigersinn)";
			break;
		case 180:
			displayStr = "Vertikal (auf dem Kopf stehend)";
			break;
		default:
			displayStr = "unbekannt";
	}

	document.getElementById("aufloesung").innerHTML = displayStr;
}

/*
 * Initialisieren der GPS Funktionen
 */
function initGeo() {
	if(navigator.geolocation) {
		var geoURL = document.getElementById("geoURL");
		geoURL.innerHTML = "Position wird ermittelt - bitte warten";
		navigator.geolocation.watchPosition(successGeoCallback,errorGeoCallback);
		//navigator.geolocation.getCurrentPosition(successGeoCallback,errorGeoCallback);
	} else {
		var geoURL = document.getElementById("geoURL");
		geoURL.innerHTML = "Wird von Ihrem Gerät nicht unterst&uuml;tzt";
	}
}

function successGeoCallback(position) {
	/* Position abfragen und runden */
	var latitude = position.coords.latitude;
	var longitude = position.coords.longitude;
	var accuracy = position.coords.accuracy;
	var accuracyEinheit = "Meter";
	var altitude = position.coords.altitude;
	var altitudeEinheit = "Meter";
	var heading = position.coords.heading;
	var speed = position.coords.speed;
	var lastupdate = position.timestamp;

	/* Genauigkeit formatieren */
	if(accuracy > 5000) {
		accuracy =(accuracy/1000).toFixed(2);
		accuracyEinheit = "km";
	} else {
		accuracy = accuracy.toFixed(0);
	}

	/* Position ausgeben */
	if(latitude != null && longitude != null) {
		dojo.byId("geoLaengengradRow").style.display = "table-row";
		dojo.byId("geoLaengengrad").innerHTML = convertDecToBogenmass(longitude);

		dojo.byId("geoBreitengradRow").style.display = "table-row";
		dojo.byId("geoBreitengrad").innerHTML = convertDecToBogenmass(latitude);

		dojo.byId("geoURL").innerHTML = '<img src="/img/kmzfile.png" width="11" height="11" alt="Google Earth Icon" /> <a href="http://maps.google.de/maps?q=Aktuelle%20Position@' + latitude + ',' + longitude + '&sll=' + latitude + ',' + longitude + '&ll=' + latitude + ',' + longitude + '&t=h&z=15">In Google Maps anzeigen</a>';
	}

	/* Update Zeitpunkt ausgeben */
	if(lastupdate != null && lastupdate > 0) {
		var formupdatetime = new Date();
		formupdatetime.setTime(lastupdate);
		dojo.byId("geoUpdateRow").style.display = "table-row";
		dojo.byId("geoUpdate").innerHTML = formupdatetime.format();

	} else {
		dojo.byId("geoUpdateRow").style.display = "table-row";
		dojo.byId("geoUpdate").innerHTML = "unbekannt";
	}

	/* Genauigkeit ausgeben */
	if(accuracy != null) {
		dojo.byId("geoGenauigkeitRow").style.display = "table-row";
		dojo.byId("geoGenauigkeit").innerHTML = accuracy + " " + accuracyEinheit;
	}

	/* Hoehe ausgeben */
	if(altitude != null && altitude != 0) {
		dojo.byId("geoHoeheRow").style.display = "table-row";
		dojo.byId("geoHoehe").innerHTML = altitude.toFixed(0) + " " + altitudeEinheit;
	}

	/* Fahrtrichtung */
	if(heading != null && heading != 0) {
		dojo.byId("geoHeadingRow").style.display = "table-row";
		dojo.byId("geoHeading").innerHTML = heading + "&#176;";
	}

	/* Geschwindigkeit */
	if(speed != null && speed != 0) {
		speed = (speed * 3600) / 1000;
		dojo.byId("geoGeschwindigkeitRow").style.display = "table-row";
		dojo.byId("geoGeschwindigkeit").innerHTML = speed.toFixed(2) + " km/h";
	}

	/* Ort ermitteln */
	if(latitude != null && longitude != null) {
		var jsonURL = '/iphone/ajax/geonames.ajax.php?lat='+position.coords.latitude+'&lon='+position.coords.longitude;
		var geodata = dojo.xhrGet( {
	        url: jsonURL,
	        handleAs: "json",
	        timeout: 5000, // Time in milliseconds

	        load: function(response, ioArgs) {
				/* Debug Ausgabe */
				//console.dir(response);

				/* Geocodes bei Bedarf ausgeben */
				if(isArray(response.geonames)) {
					dojo.byId("geoOrtRow").style.display = "table-row";
					if(response.geonames[0]['name'] != "") {
						dojo.byId("geoOrt").innerHTML = response.geonames[0]['name'];
						dojo.byId("geoURL").innerHTML = '<img src="/img/kmzfile.png" width="11" height="11" alt="Google Earth Icon" /> <a href="http://maps.google.de/maps?q=' + response.geonames[0]['name'] + '@' + latitude + ',' + longitude + '&sll=' + latitude + ',' + longitude + '&ll=' + latitude + ',' + longitude + '&t=h&z=15">In Google Maps anzeigen</a>';

					} else {
						dojo.byId("geoOrt").innerHTML = "nicht ermittelbar";
					}

					dojo.byId("geoRegionRow").style.display = "table-row";
					if(response.geonames[0]['adminName1'] != "") {
						dojo.byId("geoRegion").innerHTML = response.geonames[0]['adminName1'];
					} else {
						dojo.byId("geoRegion").innerHTML = "nicht ermittelbar";
					}

					dojo.byId("geoLandRow").style.display = "table-row";
					if(response.geonames[0]['countryName'] != "") {
						dojo.byId("geoLand").innerHTML = "<img src=\"/img/flags/" + response.geonames[0]['countryCode'].toLowerCase() + ".png\" alt=\"" + response.geonames[0]['countryName'] + "\" /> " + response.geonames[0]['countryName'];
					} else {
						dojo.byId("geoLand").innerHTML = "nicht ermittelbar";
					}
				}

	          return response;
	        },

	        error: function(response, ioArgs) {
	        	//console.error("HTTP status code: ", ioArgs.xhr.status);
	        	return response;
	        }
		});
	}
}

function errorGeoCallback(error) {
	var geoURL = document.getElementById("geoURL");
	var fehlertext = "";

	switch(error.code) {
		case 0:
			fehlertext = "Unbekannter Fehler beim ermitteln der Position.";
			break;
		case 1:
			fehlertext = "GPS Zugriff verboten.";
			break;
		case 2:
			fehlertext = "Die Position konnte nicht per GPS ermittelt werden.";
			break;
		case 3:
			fehlertext = "Die Position konnte in der vorgegebenen Zeit nicht ermittelt werden.";
			break;
		default:
			fehlertext = "Unbekannter Fehler";
	}

	geoURL.innerHTML = fehlertext + "(" + error.message + ")";
}
