// Basiseinheit hier festlegen
$basisEinheitId = "m";

// Alle Einheiten in einem Array mit Umrechnungsfaktor zur Basiseinheit festlegen und ob der Wert der Basiseinheit
// multipliziert oder dividiert werden muss (relevant für Genauigkeit, i.d.R. ist Multiplikation besser/genauer,
// aber manche Umrechnungsfaktoren sind als Kehrbruch nicht genau darstellbar, dann wird besser dividiert,
// z.B. bei 1/3 lässt sich die "3" exakt speichern, dann muss man dividieren, umgekehrt müsste man für die Multiplikation
// ungenau "0.3333333..." speichern.
var aElemente = new Array();
aElemente.m = new Array("*", 1); // Basiseinheit
aElemente.zm = new Array("*", 1e+21);
aElemente.am = new Array("*", 1e+18);
aElemente.fm = new Array("*", 1e+15);
aElemente.pm = new Array("*", 1e+12);
aElemente.nm = new Array("*", 1e+9);
aElemente.µm = new Array("*", 1e+6);
aElemente.mm = new Array("*", 1e+3);
aElemente.cm = new Array("*", 1e+2);
aElemente.dm = new Array("*", 1e+1);
aElemente.dam = new Array("/", 1e+1);
aElemente.hm = new Array("/", 1e+2);
aElemente.km = new Array("/", 1e+3);
aElemente.Mm = new Array("/", 1e+4);
aElemente.Megm = new Array("/", 1e+6);
aElemente.Gm = new Array("/", 1e+9);
aElemente.Tm = new Array("/", 1e+12);
aElemente.Pm = new Array("/", 1e+15);
aElemente.Em = new Array("/", 1e+18);
aElemente.Zm = new Array("/", 1e+21);

aElemente.zo = new Array("/", 0.0254);
aElemente.fu = new Array("/", 0.3048);
aElemente.ya = new Array("/", 0.9144);
aElemente.fad = new Array("/", 1.8288);
aElemente.me = new Array("/", 1609.344);
aElemente.sm = new Array("/", 1852);
aElemente.di = new Array("/", 0.254);
aElemente.el = new Array("/", 0.46);
aElemente.ae = new Array("/", 149597870691);
aElemente.lj = new Array("/", 9460730472580800);

aElemente.ang = new Array("*", 1e+10);
aElemente.rod = new Array("/", 5.0292);
aElemente.cha = new Array("/", 20.1168);
aElemente.fur = new Array("/", 201.168);
aElemente.par = new Array("/", 3.0856776e16);


function setzeLandesDezimalltrennzeichen($zahl)
{
  $sZahl = "";
  if (!isNaN($zahl)) { $sZahl = $zahl.toString(); } else { $sZahl = $zahl; }
  
	// setze das landesspezifische Dezimaltrennzeichen
  $sZahl = $sZahl.replace(/\./g, $sDezimaltrennzeichen);
  return $sZahl;
}

function rechneUm($eingabeId) {
  // Schriftfarbe schwarz für alle Eingabefelder setzen, anschließend rot für das aktuelle Eingabefeld
  for (var elementId in aElemente) { document.getElementById(elementId).style.color = "black"; }
  document.getElementById($eingabeId).style.color = "red";

	// Eingegebenen Wert in $sEingabe speichern und eventuell eigegebene Kommas in einen Punkt wandeln
	$sEingabe = document.getElementById($eingabeId).value.replace(/,/g, ".");
	
  // Eventuell eingegebenen Buchstaben direkt wieder entfernen
	var eingabe = $sEingabe;
	var erlaubt ="0123456789.";
	var lz = eingabe.substring(eingabe.length-1,eingabe.length);
	var letter = erlaubt.indexOf(lz);
	if (letter == -1)	{ // unerlaubtes Zeichen
		$sEingabe = eingabe.substr(0, eingabe.length - 1);
	}
	
	document.getElementById($eingabeId).value = setzeLandesDezimalltrennzeichen($sEingabe);
  
  $basisEinheitValue = 1; // Variable im Kontext der Funktion bekannt machen und mit 1 initialisieren
  
  // wenn der eingegebene Wert nicht der Wert von der Basiseinheit ist, dann den Wert der
  // Basiseinheit berechnen und im Feld ausgeben
  if ($eingabeId != $basisEinheitId)
  {
    // in Abhängigkeit der Vorgabe "*" oder "/" multiplizieren oder dividieren, wobei sich das auf die Umrechnung
    // von der Basiseinheit zu den anderen Einheiten bezieht, deswegen ist es für die Berechnung der
    // Basiseinheit genau umgekehrt (multiplizieren bei "/" und dividieren bei "*") 
    if (aElemente[$eingabeId][0] == "*") { $basisEinheitValue = $sEingabe / aElemente[$eingabeId][1]; }
    else { $basisEinheitValue = $sEingabe * aElemente[$eingabeId][1]; }

    //document.form1[$basisEinheitId].value = beautifyResult($basisEinheitValue);
	  document.getElementById($basisEinheitId).value = setzeLandesDezimalltrennzeichen($sEingabe);
    $basisEinheitValue = parseFloat(beautifyResult($basisEinheitValue));
  }
  else
  {
    $basisEinheitValue = $sEingabe; // Wert für die Basiseinheit ist eingegeben worden 
  }
  

  // für alle Elemente (Einheiten) den Wert berechnen im Verhältnis zum Wert der Basiseinheit
  for (var elementId in aElemente)
  {
      // Wert von dem Eingabefeld nicht berechnen (wurde ja eingegeben)
      if (elementId != $eingabeId)
      {
          // wenn die Eingabe leer ist (Eingabe wurde gelöscht), dann alle Felder leeren
          if ($sEingabe == "")
          {
              //document.form1[elementId].value = "";
	            document.getElementById(elementId).value = "";
          }
          // bestimmen, ob der Umrechnungsfaktor multipliziert oder dividiert werden muss, dann den
          // Wert des akt. Elements berechnen ausgehend vom Wert der Basiseinheit mit dem festgelegten Umrechnungsfaktor
          // (der Wert wird dann noch für die Ausgabe optisch aufbereitet und auch ggf. Rundungsfehler eliminiert) 
          else if (aElemente[elementId][0] == "*")
          {
              //document.form1[elementId].value = beautifyResult(StrSigFigFxd($basisEinheitValue * aElemente[elementId][1], 15));
	            document.getElementById(elementId).value = setzeLandesDezimalltrennzeichen(beautifyResult(StrSigFigFxd($basisEinheitValue * aElemente[elementId][1], 15)));
          }
          else
          {
              //document.form1[elementId].value = beautifyResult(StrSigFigFxd($basisEinheitValue / aElemente[elementId][1], 15));
	            document.getElementById(elementId).value = setzeLandesDezimalltrennzeichen(beautifyResult(StrSigFigFxd($basisEinheitValue / aElemente[elementId][1], 15)));
          }
      }
  }
  
}

