function signifikantesRunden ( zahl, stellen )  {
                var  groessenordnungZahl = 0 ;
                var         mantisseZahl = 0 ;
                var       vorzeichenZahl = "" ;
                var     signifikanteZahl = 0 ;
                var  signifikanteZiffern = "" ;
                var   gerundetesErgebnis = "" ;
                var                    i = 0 ;
				
				if (formular.lang == 'de') {
					var	trennzeichen = ",";
				} else {
					var	trennzeichen = ".";
				}
				
				
                if ( zahl == 0 || isNaN(zahl)) {
                        gerundetesErgebnis = '0'+trennzeichen ;
                        for ( i = 1 ; i <= (stellen - 1) ; i++ ) { gerundetesErgebnis += '0' ; }
                        return gerundetesErgebnis ;
                }
                if (zahl < 0) {
                                vorzeichenZahl = "-" ;
                                          zahl = -zahl ;
                }
                with ( Math ) {
                        groessenordnungZahl = floor(log(zahl)/LN10) ;
                               mantisseZahl = exp( LN10 * (log(zahl)/LN10 - groessenordnungZahl)) ;
                           signifikanteZahl = round(mantisseZahl * exp( LN10 * (stellen - 1) ) ) ;
                        if ( abs(signifikanteZahl - exp(LN10*stellen)) < 0.1 ) {
                                signifikanteZahl = round(exp(LN10*(stellen-1))) ;
                                groessenordnungZahl++        ;
                         }
                        signifikanteZiffern = signifikanteZahl + "" ;
                }
                gerundetesErgebnis = vorzeichenZahl ;
                if ( (groessenordnungZahl > -5) && (groessenordnungZahl < 7) ) {
                        if ( groessenordnungZahl < 0 )  {
                                gerundetesErgebnis += '0'+trennzeichen ;
                                for ( i = -1 ; i > groessenordnungZahl; i-- ) {
                                        gerundetesErgebnis += '0' ;
                                }
                                gerundetesErgebnis += signifikanteZiffern ;
                        }
                        else  {
                                if (( stellen - groessenordnungZahl ) >= 2 )  {
                                        gerundetesErgebnis +=
                                                        signifikanteZiffern.substring(0,groessenordnungZahl+1) ;
                                        gerundetesErgebnis += trennzeichen;
                                        gerundetesErgebnis +=
                                                        signifikanteZiffern.substring(groessenordnungZahl+1,signifikanteZiffern.length) ;
                                }
                                else {
                                        gerundetesErgebnis += signifikanteZiffern ;
                                        for ( i = 1 ; i > (stellen - groessenordnungZahl) ; i-- ) {
                                                gerundetesErgebnis += "0" ;
                                        }
                                }
                        }
                }
                else {
                        gerundetesErgebnis += signifikanteZiffern.substring(0,1) ;
                        gerundetesErgebnis += trennzeichen;
                        gerundetesErgebnis += signifikanteZiffern.substring(1,signifikanteZiffern.length) ;
                        gerundetesErgebnis += 'E' ;
                        gerundetesErgebnis += groessenordnungZahl ;
                }
           return gerundetesErgebnis;
        }


function drehmom() {
		this.faktor      = new Object() ;
		this.werte       = new Object() ;
		this.test        = new Object() ;
		this.neueZeichen = new Object() ;
		this.alteZeichen = new Object() ;
		this.stellen   = 7 ;
		this.warnung   = false ;
		this.faktor[0] = 12 ;       // Anzahl Elemente im Feld "drehmom.faktoren"
		this.faktor[1] = 1 ;               // Faktor m -> Nm
		this.faktor[2] = 0.1 ;             // Faktor m -> daNm
		this.faktor[3] = 10 ;              // Faktor m -> dNm
		this.faktor[4] = 100 ;             // Faktor m -> cNm
		this.faktor[5] = 1000 ;            // Faktor m -> Nmm
		this.faktor[6] = 0.737562121 ;     // Faktor m -> ft·lb
		this.faktor[7] = 8.85074807 ;      // Faktor m -> in·lb
		this.faktor[8] = 141.611929 ;      // Faktor m -> in·oz
		this.faktor[9] = 0.101971621 ;     // Faktor m -> kp·m
		this.faktor[10] = 10.1971621 ;     // Faktor m -> kp·cm
		this.faktor[11] = 101.971621 ;     // Faktor m -> g·m
		this.faktor[12] = 10197.1621 ;     // Faktor m -> g·cm
		this.werte[0]       = this.faktor[0] ;
		this.test[0]        = this.faktor[0] ;
		this.alteZeichen[0] = this.faktor[0] ;
		this.neueZeichen[0] = this.faktor[0] ;
		for ( i = 1 ; i <= this.faktor[0] ; i++ ) {
					  this.werte[i] = this.faktor[i] ;
					   this.test[i] = this.faktor[i] ;
				this.alteZeichen[i] = signifikantesRunden(this.werte[i],this.stellen)
				this.neueZeichen[i] = signifikantesRunden(this.werte[i],this.stellen)
		}
}

		
function kraft() {
                this.faktor      = new Object() ;
                this.werte       = new Object() ;
                this.test        = new Object() ;
                this.neueZeichen = new Object() ;
                this.alteZeichen = new Object() ;
                this.stellen   = 7 ;
                this.warnung   = false ;
                this.faktor[0] = 14 ;       // Anzahl Elemente im Feld "kraft.faktoren"
                this.faktor[1] = 1 ;               // Faktor m -> N
                this.faktor[2] = 0.1 ;             // Faktor m -> daN
                this.faktor[3] = 0.001 ;           // Faktor m -> kN
                this.faktor[4] = 0.000001 ;        // Faktor m -> MN
                this.faktor[5] = 10 ;              // Faktor m -> dN
                this.faktor[6] =  100 ;            // Faktor m -> cN
                this.faktor[7] = 101.971621 ;    // Faktor m -> p
                this.faktor[8] = 0.101971621 ;    // Faktor m -> kp
                this.faktor[9] = 0.224808924 ;     // Faktor m -> lbf
                this.faktor[10] = 7.233011464 ;    // Faktor m -> pdl
                this.faktor[11] = 100000 ;         // Faktor m -> dyn
                this.faktor[12] = 3.59694246 ;     // Faktor m -> oz
                this.faktor[13] = 1573.66260 ;    // Faktor m -> grf
                this.faktor[14] = 1.57366260 ;    // Faktor m -> kgrf
                this.werte[0]       = this.faktor[0] ;
                this.test[0]        = this.faktor[0] ;
                this.alteZeichen[0] = this.faktor[0] ;
                this.neueZeichen[0] = this.faktor[0] ;
                for ( i = 1 ; i <= this.faktor[0] ; i++ ) {
                              this.werte[i] = this.faktor[i] ;
                               this.test[i] = this.faktor[i] ;
                        this.alteZeichen[i] = signifikantesRunden(this.werte[i],this.stellen,this.name)
                        this.neueZeichen[i] = signifikantesRunden(this.werte[i],this.stellen,this.name)
                }
        }


		function zeige(feld) {
                s = "";
                for (i in feld) { s += i + ": " + feld[i] + "\n" ;}
                alert(s);
        }
        function schreibe(formular,zeichenfeld) {
                for (i = 1 ; i < elemente.length ; i++ ) {
                        elemente[i].value = zeichenfeld[i] ;
                }
        }
        function lese(formular,groesse) {
                var    wertZahl = 1 ;
                var wertZeichen = "" ;
                var       komma = 0 ;
                var         vor = "" ;
                var        nach = "" ;
                groesse.warnung = false ;
				
				
                for (i = 1 ; i < elemente.length ; i++ ) {
					//if (formular.elements[i].type == 'text') {
                        wertZeichen = elemente[i].value + ""  ;
						
                        if (wertZeichen == "")        {
                                //        keine Eingabe
                                wertZahl = 0 ;
                                groesse.warnung = true ;
                        }
                        else {
                                // Komma zur internen Verarbeitung in Punkt umwandeln
                                if ( (komma = wertZeichen.indexOf(",")) != -1 ) {
                                    vor = wertZeichen.substring(0,komma) ;
                                   nach = wertZeichen.substring(komma + 1, wertZeichen.length) ;
                            wertZeichen = vor + '.' + nach ;
                                }
                                //        Eingabestring in Zahl umwandeln.
                                wertZahl = parseFloat(wertZeichen);
                                //        Ist die Eingabe überhaupt eine Zahl ?
                                if (   (  (wertZahl == 0)
                                       && ( (wertZeichen != "0")
                                            && (wertZeichen != "0.0")
                                          )
                                       )
                                   ||  (  (parseInt(navigator.appVersion) >= 3)
                                       && isNaN(wertZahl)
                                       )
                                   )  {
                                                groesse.warnung = true ;
                                }
                        }
                        groesse.test[i] = wertZahl ;
					//}
                }
                if (groesse.warnung) {
                       alert('Sie haben ein ungültiges Zahlenformat verwendet!')
                }
                else {
					for (i = 1 ; i < elemente.length ; i++ ) {
							groesse.werte[i] = groesse.test[i] ;
					}
                }
        }
        function zuruecksetzen() {
                var  i = 1 ;
                for ( i = 1 ; i < elemente.length ; i++ ) {
                              groesse.werte[i] = groesse.faktor[i] ;
                        groesse.alteZeichen[i] = signifikantesRunden(groesse.werte[i],groesse.stellen) ;
                }
                schreibe(formular,groesse.alteZeichen) ;
        }
        function aktualisieren() {
                var     index = 1 ;
                var         j = 1 ;
                var neuerWert = 1 ;

				//        Auslesen des Formulars in das Feld "neueZeichen"
                lese(formular,groesse) ;
				for ( j = 1 ; j < elemente.length ; j++ ) {
                        groesse.neueZeichen[j] = signifikantesRunden(groesse.werte[j],groesse.stellen) ;
                }
                if (groesse.warnung) {
                //        ungueltige Eingabe abfangen
                        schreibe(formular,groesse.alteZeichen) ;
                        return ;
                }
				
				
                //        Suchen des Index des veraenderten Eintrags
                while (    (groesse.neueZeichen[index] == groesse.alteZeichen[index])
                        && (index < elemente.length -1 ) )  { index++ }
                //        Berechnung der neuen Werte,
                //  Aktualisierung des Feldes "alteZeichen"
                if   (index != (elemente.length - 2))   {
                        neuerWert = groesse.werte[index]/groesse.faktor[index] ;
                        for (j = 1 ; j < elemente.length ; j++ ) {
                                groesse.werte[j] = neuerWert * groesse.faktor[j]
                                groesse.neueZeichen[j] = signifikantesRunden(groesse.werte[j],groesse.stellen) ;
                                groesse.alteZeichen[j] = groesse.neueZeichen[j] ;
                        }
                }
                //        Uebertragung der neuen Werte in das Formular
                schreibe(formular,groesse.neueZeichen) ;
        }
        function aktualisierenStellen() {
                var         j = 1 ;

				groesse.stellen = (9 - formular.stellenWahl.selectedIndex) ;
                for (j = 1 ; j < elemente.length ; j++ ) {
                        groesse.neueZeichen[j] = signifikantesRunden(groesse.werte[j],groesse.stellen) ;
                        groesse.alteZeichen[j] = groesse.neueZeichen[j] ;
                }
                //        Uebertragung der neuen Werte in das Formular
                schreibe(formular,groesse.neueZeichen) ;
        }
		
		


/* Globale Variablen */
var formular = '';
var elemente = new Array();
var groesse = '';
		
		
function applyEvents() {
	
	// Formular aus dem DOM lesen
	if (document.forms['kraftForm']) {
		formular = document.getElementById('kraftForm');
		kraft = new kraft;
		groesse = kraft;

	} else if (document.forms['drehmomForm']) {
		formular = document.getElementById('drehmomForm');
		drehmom = new drehmom() ;
		groesse = drehmom;
	}
	
	
	// Dummy-Element ins Array einfügen (belegt den Schlüssel 0, den wir nicht benötigen)
	elemente.push('dummy');
	
	
	// Formularelemente durchlaufen und alle Input-Felder vom Typ "text" speichern
	for (var i = 0; i < formular.elements.length; i++) {
		if (formular.elements[i].type == 'text') {
			elemente.push(formular.elements[i]);
		}
	}
	
	
	// Gesammelte Elemente durchlaufen und mit Standardwerten füllen
	// Zuweisung der onblur-Eventhandler
	for (var j = 1; j < elemente.length; j++) {
			elemente[j].value = groesse.alteZeichen[j];
			elemente[j].onblur = aktualisieren;
	}
	
	// Zuweisung der Eventhandler für die Steuerungsbuttons
	document.getElementById('umrechnen').onclick = aktualisieren;
	document.getElementById('zurueck').onclick = zuruecksetzen;
	document.getElementById('stellenWahl').onchange = aktualisierenStellen;

}


// Initialisierung beim Laden der Seite
Event.observe(window, 'load', applyEvents, false);