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

// 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.kz = new Array("*", 1e+6);
aElemente.li = new Array("*", 1000);
aElemente.hl = new Array("*", 10);
aElemente.km = new Array("*", 1); // Basiseinheit
aElemente.kk = new Array("/", 1e+9);
aElemente.rt = new Array("/", 2.8316846592);

aElemente.fm = new Array("/", 1.61);
aElemente.rm = new Array("*", 1);
aElemente.srm = new Array("*", (2.38 / 1.61));

aElemente.mga = new Array("*", 250);
aElemente.mpi = new Array("*", 2000);
aElemente.mcu = new Array("*", 4000);
aElemente.cu = new Array("*", 4000);

aElemente.ci = new Array("/", 1.6387064e-5);
aElemente.cf = new Array("/", 2.8316846592e-2);
aElemente.cy = new Array("/", 0.764554857984);
aElemente.cm = new Array("/", Math.pow(1609.344, 3));

aElemente.ukifo = new Array("/", 2.84130642624675e-5);
aElemente.ukip = new Array("/", 5.6826128524935e-4);    // 20 imperial fluid ounce
aElemente.ukigi = new Array("/", 1.420653213123375e-4); // 5 imperial fluid ounce
aElemente.ukicu = new Array("/", 2.84130642624675e-4);  // 10 imperial fluid ounce
aElemente.ukitc = new Array("/", 1.8942042841645e-4);   // 1/3 UK Imp. pint
aElemente.ukiqu = new Array("/", 1.1365225704987e-3);   // 8 imp. gill
aElemente.ukiga = new Array("/", 4.5460902819948e-3);   // 160 Imp. fl.oz.
aElemente.ukibu = new Array("/", 3.63687222559584e-2);  // 64 Imp. pint
aElemente.ukch = new Array("/", 1.3092740012145024);    // 4 Imp. Quarters = 36 bushels
aElemente.ukba = new Array("/", 0.1636592501518128);
aElemente.ukbo = new Array("/", 0.159113159869818);

aElemente.usfg = new Array("/", 3.785411784e-3);
aElemente.uslp = new Array("/", 4.73176473e-4);
aElemente.usdp = new Array("/", 5.506104713575e-4);
aElemente.uscu = new Array("/", 2.365882365e-4);
aElemente.ustc = new Array("/", 1.57725491e-4);
aElemente.uslq = new Array("/", 9.46352946e-4);
aElemente.usdq = new Array("/", 1.101220942715e-3);
aElemente.uslg = new Array("/", 3.785411784e-3);
aElemente.usdg = new Array("/", 4.40488377086e-3);
aElemente.usbu = new Array("/", 0.03523907016688);
aElemente.uscfo = new Array("/", 2.95735295625e-5);
aElemente.usb = new Array("/", 1.19240471196e-1);
aElemente.usbo = new Array("/", 1.58987294928e-1);


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(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)));
          }
      }
  }
  
}

