function Umrechnung()
	{
	// **** Einheiten konvertieren *****
	// Aufrufendes Document muss enthalten:
	// Formular "Konvertierung"
	// Textfeld "Eingabe" (für die Eingabe der gesuchten Einheit durch den Benutzer)
	// Textfeld "AusgabeEingabe" (für die Rückgabe des Klartextes bei gefundener Einheit)
	// Textarea "Ausgabe" (für die Ausgabe der gefundenen Ergebnisse)

	// --- Variablen definieren ---
		// Einheiten
		// Format:	Einheit,Abk/Suchbegr. 2,Abk/Suchbegr. 3,Bezeichnung		,enthält cm	,Art der Einheit
			var EinheitAr = new Array
				(
				"km"	,""		,""		,"Kilometer"		,"100000"	,"0"	,
				"m"	,""		,""		,"Meter"		,"100"		,"0"	,
				"cm"	,""		,""		,"Zentimeter"		,"1"		,"0"	,
				"mm"	,""		,""		,"Millimeter"		,"0.1"		,"0"	,
				"in"	,"inches"	,""		,"Zoll"			,"2.54"		,"0"	,
				"ft"	,"foot"		,"feet"		,"Fuss"			,"30.48"	,"0"	,
				"yd"	,""		,""		,"Yard(s)"		,"91.44"	,"0"	,
				"mi"	,"miles"	,"Meilen"	,"Meile(n)"		,"160934.4"	,"0"	,
				"nm"	,"nautical miles","Seemeilen"	,"Seemeile(n)"		,"185200"	,"0"	,
				"qm"	,""		,""		,"Quadratmeter"		,"10000"	,"1"	,
				"qcm"	,""		,""		,"Quadratzentimeter"	,"1"		,"1"	,
				"qmm"	,""		,""		,"Quadratmillimeter"	,"0.01"		,"1"	,
				"ha"	,"hectar"	,""		,"Hektar"		,"100000000"	,"1"	,
				"sqin"	,"qin"		,"square inches","Quadratzoll"		,"6.4516"	,"1"	,
				"sqft"	,"qft"		,"square feet"	,"Quadratfuss"		,"929.0304"	,"1"	,
				"sqyd"	,"qyd"		,"square yards"	,"Quadratyard(s)"	,"75251.462"	,"1"	,
				"ac"	,"acres"	,""		,"Acre(s)"		,"40462321"	,"1"	,
				"ccm"	,"cbcm"		,""		,"Kubikzentimeter"	,"1"		,"2"	,
				"cbm"	,""		,""		,"Kubikmeter"		,"1000000"	,"2"	,
				"fbm"	,"board foot"	,"board feet"	,"Boardfuss"		,"2360"		,"2"	,
				"cui"	,"cu in"	,"cubic inches"	,"Kubikzoll"		,"16.387064"	,"2"	,
				"cft"	,"cu ft"	,"cubic feet"	,"Kubikfuss"		,"28316.846592"	,"2"	,
				"cyd"	,"cu yd"	,"cubic yard"	,"Kubikyard"		,"764554.857984","2"	,
				"gal"	,"gallon"	,""		,"Gallone(n)"		,"3785.411784"	,"2"	,
				"l"	,""		,""		,"Liter"		,"1000"		,"2"	,
				"ml"	,""		,""		,"Milliliter"		,"1"		,"2"	,
				"floz"	,"ounces"	,"oz"		,"Unze(n) FL"		,"29.5735"	,"2"	,
				"Pa"	,""		,""		,"Pascal"		,"1"		,"3"	,
				"bar"	,""		,""		,"Bar"			,"100000"	,"3"	,
				"psi"	,""		,""		,"Pfund pro Quadratzoll","6894.757293168","3"	,
				"°C"	,""		,"Celsius"	,"Grad Celsius"		,"1"		,"9"	,
				"°F"	,""		,"Fahrenheit"	,"Grad Fahrenheit"	,"2"		,"9"	,
				"K"	,""		,""		,"Kelvin"		,"3"		,"9"	,
				"-1"
				);
		// Bezeichnungen der Berechnungsarten
			var EinheitArtBezeichnung = new Array
				(
				"Längenkonvertierung",
				"Flächenkonvertierung",
				"Volumenkonvertierung",
				"Druckkonvertierung",
				"N/A",
				"N/A",
				"N/A",
				"N/A",
				"N/A",
				"Temperaturkonvertierung"
				);
		// Farben und Textformatierung
			var Hintergrundfarbe = "#C0C0F0";			//Hintergrundfarbe, wenn Fehler bzw. kein Ergebnis
			var Textfarbe = "#FF0000";				//Textfarbe, wenn Fehler bzw. kein Ergebnis
			var Textfett = "bold";				//Schriftstärke, wenn Fehler bzw. kein Ergebnis
			var HintergrundfarbeAusgabe = "#F2F2FF";		//Hintergrundfarbe, wenn Ergebnis
			var TextfarbeAusgabe = "#2020FF";			//Textfarbe, wenn Ergebnis
			var TextfettAusgabe = "bold";				//Schriftstärke, wenn Ergebnis
		// Limitierungen
			var EingabeMax = 1000000;				//Grösste erlaubte Anzahl bei der Eingabe
			var EingabeMin = 0.0001;				//Kleinste erlaubte Anzahl bei der Eingabe
			var AusgabeMax = 100000000;				//Grösste erlaubte Anzahl bei der Ausgabe
			var AusgabeMin = 0.000001;				//Kleinste erlaubte Anzahl bei der Ausgabe
			var AusgabeMaxSinnvoll = 999000;			//Grösste sinnvolle Anzahl bei der Ausgabe
		// Fehlermeldungen
			var FehlerEingabeZuGross = "Die eingegebene Anzahl ist zu gross!";
			var FehlerEingabeZuKlein = "Die eingegebene Anzahl ist zu klein!";
			var FehlerAusgabeZuKlein = "Das Ergebnis ist zu klein!";
			var FehlerEinheitNichtEingegeben = "Bitte Einheit angeben.";
			var FehlerEinheitNichtGefunden = "Einheit nicht gefunden!";
			var FehlerZielEinheitNichtGefunden = "Zieleinheit nicht gefunden!";
			var FehlerZielUmrechnungsartFalsch1 = "Man kann ";
			var FehlerZielUmrechnungsartFalsch2 = " nicht in ";
			var FehlerZielUmrechnungsartFalsch3 = " umrechnen!\nBitte prüfe Deine Eingaben.";
			var FehlerEinheitenIdentisch = "Die gesuchte Einheit ist gleich der eingegebenen.";
		// Andere Variablen
			var Rückgabe = "";
			var Anzahl;
			var Suche;
			var Index;
			var x;
			var Grundeinheit;
			var Ergebnis;
			var ErgebnisFormatiert;
			var KommaPos;
			var MinusPos;
			var Ausgeben;
			var Benutzereingabe;
			var BenutzereingabeEinheit;
			var WerteAusblenden;
			var WerteRunden;
			var EinheitPosition;
			var Abk;
			var Einheit;
			var Faktor;
			var Umrechnungsart;
			var Feld;
			var ZieleinheitPosition;
			var ZielEinheit;
			var IndexZiel;
			var UmrechnungsartZiel;
			var AbkZiel;
			var FaktorZiel;


	// --- Benutzereingabe holen ---
		Benutzereingabe = document.Konvertierung.Eingabe.value;
		WerteAusblenden = document.Konvertierung.WerteAusblenden.checked;
		WerteRunden = document.Konvertierung.WerteRunden.checked;

	// --- Benutzereingabe in Kleinbuchstaben umwandeln ---
		Benutzereingabe = Benutzereingabe.toLowerCase();

	// --- Auf Hilfeanfrage prüfen ---
		if (Benutzereingabe.indexOf("?") == 0)
			{
			Benutzereingabe = Benutzereingabe.substr(1);
			for (x = 0; x < EinheitArtBezeichnung.length; x++)
				{
				Suche = EinheitArtBezeichnung[x].toLowerCase();
				if ( (Suche.indexOf(Benutzereingabe) == 0 || Benutzereingabe.length == 0) && EinheitArtBezeichnung[x].length > 4)
					{
					Rückgabe = Rückgabe + "\n" + EinheitArtBezeichnung[x] + "\n--------------------\n";
					Index = 0;
					do
						{
						if (EinheitAr[Index+5] == x)
							// gesuchte Umrechnungsart
							{
							Rückgabe = Rückgabe + EinheitAr[Index] + " (" + EinheitAr[Index+3] + ")\n";
							}
						Index = Index + 6;
						}
					while (EinheitAr[Index] != "-1");
					}
				}
			Rückgabe = "Liste der verfügbaren Einheiten:\n====================\n" + Rückgabe;
			}
		else
			{
			// --- Position der Einheit(en) in der Eingabe holen ---
				EinheitPosition = Benutzereingabe.search(/[a-zA-Z°]/);
				ZieleinheitPosition = Benutzereingabe.indexOf("=");
			// --- Anzahl prüfen / korrigieren ---
				if (EinheitPosition == 0)
					{Anzahl = "1"}
				else
					{Anzahl = Benutzereingabe.substring(0,EinheitPosition)}
				Anzahl = Anzahl.replace(/,/, ".");			// Komma durch Dezimalpunkt ersetzen
				Anzahl = parseFloat (Anzahl);				// In Fliesskommazahl wandeln
			// --- Auf Limitierungen prüfen ---
				if (EinheitPosition == -1)
					{
					Ausgabe(FehlerEinheitNichtEingegeben,Hintergrundfarbe,Textfarbe,Textfett);
					return;
					}
				if (ZieleinheitPosition == -1)
					{ZieleinheitPosition = 999}
				if (Math.abs(Anzahl) > EingabeMax)
					{
					Ausgabe(FehlerEingabeZuGross,Hintergrundfarbe,Textfarbe,Textfett);
					return;
					}
				if (Math.abs(Anzahl) < EingabeMin)
					{
					Ausgabe(FehlerEingabeZuKlein,Hintergrundfarbe,Textfarbe,Textfett);
					return;
					}
			// --- Einheit holen und prüfen ---
				BenutzereingabeEinheit = Benutzereingabe.substring(EinheitPosition,ZieleinheitPosition);
				Index = 0;
				Umrechnungsart = -1;
				Feld = 1;
				do
					{
					Suche = EinheitAr[Index].toLowerCase();
					if (Suche.indexOf(BenutzereingabeEinheit) == 0)
						// gesuchte Einheit wurde gefunden
						{
						Index = (Index - Feld + 1);	// Index auf das erste Feld im Datensatz
						Abk = EinheitAr[Index];
						Einheit = EinheitAr[Index+3];
						Faktor = EinheitAr[Index+4];
						Umrechnungsart = EinheitAr[Index+5];
						break;
						}
					Index = Index + 1;
					Feld = Feld + 1;
					if (Feld > 4)
						{
						Index = Index + 2;
						Feld = 1;
						}
		
					}
				while (EinheitAr[Index] != "-1");
				if (Umrechnungsart < 0)
					// Einheit wurde nicht gefunden -> Script abbrechen
					{
					Ausgabe(FehlerEinheitNichtGefunden,Hintergrundfarbe,Textfarbe,Textfett);
					return;
					}
		


				ZielEinheit = Benutzereingabe.substring(ZieleinheitPosition+1);
				if (ZielEinheit == "")
					{
					ZieleinheitPosition = 999;
					}
				else
					{
					// --- Zieleinheit holen und prüfen ---
					IndexZiel = 0;
					UmrechnungsartZiel = -1;
					Feld = 1;
					do
						{
						Suche = EinheitAr[IndexZiel].toLowerCase();
						if (Suche.indexOf(ZielEinheit) == 0)
							// gesuchte Einheit wurde gefunden
							{
							IndexZiel = (IndexZiel - Feld + 1);	// Index auf das erste Feld im Datensatz
							AbkZiel = EinheitAr[IndexZiel];
							ZielEinheit = EinheitAr[IndexZiel+3];
							FaktorZiel = EinheitAr[IndexZiel+4];
							UmrechnungsartZiel = EinheitAr[IndexZiel+5];
							break;
							}
						IndexZiel = IndexZiel + 1;
						Feld = Feld + 1;
						if (Feld > 4)
							{
							IndexZiel = IndexZiel + 2;
							Feld = 1;
							}
		
						}
					while (EinheitAr[IndexZiel] != "-1");
					if (UmrechnungsartZiel < 0)
						// Einheit wurde nicht gefunden -> Script abbrechen
						{
						Ausgabe(FehlerZielEinheitNichtGefunden,Hintergrundfarbe,Textfarbe,Textfett);
						return;
						}
					if (UmrechnungsartZiel != Umrechnungsart)
						// Umrechnungsart der Einheiten sind nicht gleich -> Script abbrechen
						{
						Ausgabe(FehlerZielUmrechnungsartFalsch1 + Einheit + FehlerZielUmrechnungsartFalsch2 + ZielEinheit + FehlerZielUmrechnungsartFalsch3,Hintergrundfarbe,Textfarbe,Textfett);
						return;
						}
					if (IndexZiel == Index)
						// Die gesuchte Einheit entspricht der angegebenen -> Script abbrechen
						{
						Ausgabe(FehlerEinheitenIdentisch,Hintergrundfarbe,Textfarbe,Textfett);
						return;
						}
					}
			// --- Bezeichnung der Umrechnungsart ---
				Rückgabe = EinheitArtBezeichnung[Umrechnungsart] + "\n=========================\n";
			// --- Bezeichnung der gefundenen Einheit ---
				Rückgabe = Rückgabe + Anzahl + " " + Abk + " (" + Einheit + ") ";
				if (Anzahl == 1)
					{
					Rückgabe = Rückgabe + " entspricht:";
					}
				else
					{
					Rückgabe = Rückgabe + " entsprechen:";
					}
				Rückgabe = Rückgabe + "\n-------------------------\n";

			// --- Eingabe in Grundeinheit konvertieren ---
				if (Umrechnungsart == 9)
					{
					// Sonderfall Temperaturen
					switch (EinheitAr[Index])
						{
						case "°C":
							Grundeinheit = Anzahl; // Grad Celsius ist Grundeinheit
							break;
						case "°F":
							Grundeinheit = ( (Anzahl - 32) * 5 / 9 ); // Grad Fahrenheit in Celsius
							break;
						case "K":
							Grundeinheit = (Anzahl - 273.15); // Grad Kelvin in Celsius
							break;
						default:
							Grundeinheit = 999;
							break;
						}
					}
				else
					{
					Grundeinheit = Anzahl * Faktor;
					}
			// --- Einheiten suchen, Konvertierungen errechnen und Ausgabestring erzeugen ---
				if (ZieleinheitPosition == 999)
					{
					x = 5;
					document.Konvertierung.WerteAusblenden.disabled = false;
					document.Konvertierung.WerteRunden.disabled = false;

					}
				else
					{
					x= IndexZiel + 5;
					document.Konvertierung.WerteAusblenden.disabled = true;
					document.Konvertierung.WerteRunden.disabled = true;
					}
				Index = Index + 5;
				Feld = 1;
				do
					{
					// Angegebene Einheit oder andere Umrechnungsart -> nächste Einheit
						if ( (EinheitAr[x] == Umrechnungsart) && (Index != x) )
							{
							// Ergebnis für die Einheit berechnen
							if (Umrechnungsart == 9)
								{
								// Sonderfall Temperaturen
								switch (EinheitAr[x-5])
									{
									case "°C":
										Ergebnis = Grundeinheit;	// Grad C ist Grundeinheit
										break;
									case "°F":
										Ergebnis = ( (Grundeinheit * 9) / 5 ) + 32 ; // Grad C in Grad F
										break;
									case "K":
										Ergebnis = Grundeinheit + 273.15; // Grad C in K
										break;
									default:
										Ergebnis = 999;
										break;
									}
								}
							else
								{
								Ergebnis = Grundeinheit / EinheitAr[x-1];
								}
							Ausgeben = true;
							if (ZieleinheitPosition == 999)
								{
								// Keine Zieleinheit angegeben, auf maximal vier Nachkommastellen reduzieren
									if (WerteRunden == true)
										{
										if (Math.abs(Ergebnis) > 100)
											{
											Ergebnis = Math.round(Ergebnis);
											}
										else
											{
											Ergebnis = (Ergebnis * 100);
											Ergebnis = Math.round(Ergebnis);
											Ergebnis = (Ergebnis / 100);
											}
										}
									else
										{
										Ergebnis = (Ergebnis * 10000);
										Ergebnis = Math.round(Ergebnis);
										Ergebnis = (Ergebnis / 10000);
										}
								// Ergebnis für die Einheit ausserhalb von Limitierungen -> Einheit nicht übernehmen
									if (WerteAusblenden == true && Math.abs(Ergebnis) > AusgabeMaxSinnvoll)
										{Ausgeben = false}
									if ( Math.abs(Ergebnis) > AusgabeMax || (Ergebnis == 0 && Umrechnungsart != 9) )
										{Ausgeben = false}
								}
							else
								{
								// Zieleinheit angegeben, auf sechs Nachkommastellen runden
								Ergebnis = (Ergebnis * 1000000);
								Ergebnis = Math.round(Ergebnis);
								Ergebnis = (Ergebnis / 1000000);
								if (Math.abs(Ergebnis) < AusgabeMin)
									{
									Ausgabe(FehlerAusgabeZuKlein,Hintergrundfarbe,Textfarbe,Textfett);
									return;
									}
								}
							if (Ausgeben == true)
								{
								// Zahl für Ausgabe formatieren
									Ergebnis = Ergebnis.toString();			// In String umwandeln
									Ergebnis = Ergebnis.replace(/\./,",");		// Dezimalpunkt durch Komma ersetzen
									KommaPos = Ergebnis.indexOf(',');		// Position Komma ermitteln
									if (KommaPos >= 0)
										{
										ErgebnisFormatiert = Ergebnis.substr(KommaPos);	// Komma und Nachkommastellen übernehmen
										}
									else
										{
										ErgebnisFormatiert = "";
										KommaPos = Ergebnis.length;
										}
									do
										{
										if (KommaPos > 2)
											{
											ErgebnisFormatiert = Ergebnis.substring(KommaPos-3,KommaPos) + ErgebnisFormatiert;
											KommaPos = KommaPos - 3;
											if ( (KommaPos > 1) || (KommaPos > 0 && Ergebnis.indexOf("-") != 0) )
												{
												ErgebnisFormatiert = "." + ErgebnisFormatiert;
												}
											}
											else
											{
											ErgebnisFormatiert = Ergebnis.substring(0,KommaPos) + ErgebnisFormatiert;
											KommaPos = 0;
											}
										}
									while (KommaPos > 0);
								// Einheit in die Ausgabe übernehmen
									Rückgabe = Rückgabe + ErgebnisFormatiert + " " + EinheitAr[x-5] + " (" + EinheitAr[x-2] + ")\n";
								}
							}
					x= x + 6;
					}
				while ( (EinheitAr[x-5] != "-1") && (ZieleinheitPosition == 999) );
			}
		// --- Ergebnis ausgeben ---
			Ausgabe(Rückgabe,HintergrundfarbeAusgabe,TextfarbeAusgabe,TextfettAusgabe);
	}


function Ausgabe(Ausgabetext, Hintergrundfarbe, Textfarbe, Fettschrift)
	{
	// ***** Ergebnis ausgeben *****
		document.Konvertierung.Ausgabe.style.backgroundColor = Hintergrundfarbe;
		document.Konvertierung.Ausgabe.style.color = Textfarbe;
		document.Konvertierung.Ausgabe.style.fontWeight = Fettschrift;
		document.Konvertierung.Ausgabe.style.fontFamily = "monospace";
		document.Konvertierung.Ausgabe.value = Ausgabetext;
	}
