/* -------------------------------------------------------------------- */
/* JavaScript zur Errechnung von Anhaltewegen und mehr                  */
/* © Juli 1999 by Michael Dufek, Österreich                             */
/* alle Rechte vorbehalten                                              */
/* Verwendung des JavaScript-Quelltextes nur mit Quellenangabe erlaubt! */
/* Quelle: Brems Dich ein! - http://2cu.at/brems/                       */
/* -------------------------------------------------------------------- */


function formularcheck()
/* Formularwerte überprüfen */

   {

  /* Geschwindigkeit (v) */

     /* Feld darf nicht leer ein */
     if(document.brems.geschwindigkeit.value == "")
      {
       alert("Bitte die Geschwindigkeit eingeben!");
       document.brems.geschwindigkeit.focus();
       return false;
      }

     /* Nur Ziffern und den Kommapunkt (.) erlauben */
     for (var i = 0; i < document.brems.geschwindigkeit.value.length; i++)
     {
      var abc = document.brems.geschwindigkeit.value.substring(i, i + 1);
          if ((abc < "0" || "9" < abc) && abc != '.')
            {
             alert("Die Eingabefelder akzeptieren nur Zahlen und den Kommapunkt (.).");
             document.brems.geschwindigkeit.value = "";
             document.brems.geschwindigkeit.focus();
             return false;
            }
      }

     /* Wertebereich festlegen */
     if (document.brems.geschwindigkeit.value < 0 ||
         document.brems.geschwindigkeit.value > 500)
      {
         alert("Die Geschwindigkeit muß zwischen 0 und 500 km/h liegen!");
         document.brems.geschwindigkeit.value = "";
         document.brems.geschwindigkeit.focus();
         return false;
      }



  /* Reaktionszeit (t) */

     /* Feld darf nicht leer ein */
     if(document.brems.reaktion.value == "")
      {
       alert("Bitte die Reaktionszeit eingeben!");
       document.brems.reaktion.focus();
       return false;
      }

     /* Nur Ziffern und den Kommapunkt (.) erlauben */
     for (var i = 0; i < document.brems.reaktion.value.length; i++)
     {
      var abc = document.brems.reaktion.value.substring(i, i + 1);
          if ((abc < "0" || "9" < abc) && abc != '.')
            {
             alert("Die Eingabefelder akzeptieren nur Zahlen und den Kommapunkt (.).");
             document.brems.reaktion.value = "";
             document.brems.reaktion.focus();
             return false;
            }
      }

     /* Wertebereich festlegen */
     if (document.brems.reaktion.value < 0 ||
         document.brems.reaktion.value > 10)
      {
         alert("Die Reaktionszeit muß zwischen 0 und 10 Sekunden liegen!");
         document.brems.reaktion.value = "";
         document.brems.reaktion.focus();
         return false;
      }



  /* Bremsverzögerung (a) */

     /* Feld darf nicht leer ein */
     if(document.brems.verzoegerung.value == "")
      {
       alert("Bitte die Bremsverzögerung eingeben!");
       document.brems.verzoegerung.focus();
       return false;
      }

     /* Nur Ziffern und den Kommapunkt (.) erlauben */
     for (var i = 0; i < document.brems.verzoegerung.value.length; i++)
     {
      var abc = document.brems.verzoegerung.value.substring(i, i + 1);
          if ((abc < "0" || "9" < abc) && abc != '.')
            {
             alert("Die Eingabefelder akzeptieren nur Zahlen und den Kommapunkt (.).");
             document.brems.verzoegerung.value = "";
             document.brems.verzoegerung.focus();
             return false;
            }
      }

     /* Wertebereich festlegen */
     if (document.brems.verzoegerung.value < 0.1 ||
         document.brems.verzoegerung.value > 50)
      {
         alert("Die Bremsverzögerung muß zwischen 0.1 und 50 m/s2 liegen!");
         document.brems.verzoegerung.value = "";
         document.brems.verzoegerung.focus();
         return false;
      }


  /* Hindernisentfernung (hnd) */

     /* Feld darf nicht leer ein */
     if(document.brems.hindernis.value == "")
      {
       alert("Bitte die Hindernisentfernung eingeben!");
       document.brems.hindernis.focus();
       return false;
      }

     /* Nur Ziffern und den Kommapunkt (.) erlauben */
     for (var i = 0; i < document.brems.hindernis.value.length; i++)
     {
      var abc = document.brems.hindernis.value.substring(i, i + 1);
          if ((abc < "0" || "9" < abc) && abc != '.')
            {
             alert("Die Eingabefelder akzeptieren nur Zahlen und den Kommapunkt (.).");
             document.brems.hindernis.value = "";
             document.brems.hindernis.focus();
             return false;
            }
      }

     /* Wertebereich festlegen */
     if (document.brems.hindernis.value < 0 ||
         document.brems.verzoegerung.value > 9999)
      {
         alert("Die Hindernisentfernung muß zwischen 0 und 9999 Meter liegen.");
         document.brems.hindernis.value = "";
         document.brems.hindernis.focus();
         return false;
      }



   bremsauswertung()   /* Auswertung starten, wenn alle Eingaben ok */
   }


/* Auswerten der Eingabe */
function bremsauswertung()
   {
   v=parseFloat(document.brems.geschwindigkeit.value/3.6); /* Geschwindigkeit in m/s */
   t=parseFloat(document.brems.reaktion.value);            /* Reaktionszeit */
   a=parseFloat(document.brems.verzoegerung.value);        /* Bremsverzögerung */
   hnd=parseFloat(document.brems.hindernis.value);         /* Hindernisentfernung */
   sr=v*t;                                                 /* Reaktionsweg */
   sb=(Math.pow(v,2))/(2*a);                               /* Bremsweg */
   sa=sr+sb;                                               /* Anhalteweg */
                                                           /* Anhaltezeit (ta) */
      if(v == 0)
          {
          ta=0
          }
      else
          {
          ta=Math.sqrt((2*sb)/a)+t
          }
                                                           /* Aufprallgeschwindigkeit (in m/s) auf Hindernis (vh) */
      if(hnd <= sr) {vh=v};                                                       /* Hindernis im Reaktionsweg */
      if(hnd > sr && hnd<sa) {vh=Math.sqrt( (Math.pow(v,2)) - (2*a*(hnd-sr)) )};  /* Hindernis im Bremsweg */
      if (hnd >= sa) {vh=0};                                                      /* Hindernis wird nicht erreicht */
                                                           /* Dauer bis zum Aufprall (th) */
      if( (hnd <= sr) && (v != 0) ) {th=hnd/v};                                   /* Hindernis im Reaktionsweg */
      if( (hnd > sr) && (hnd < sa) ) {th=(ta - (vh/a)) };                         /* Hindernis im Bremsweg */
      if( (hnd >= sa) || (v == 0) ) {th=-1 };                                     /* Hindernis wird nicht erreicht */

                                                           /* äquivalente Fallhöhe (fh) */
      fh=(Math.pow(vh,2))/19.62;


   /* Ausgabe der Zahlen */
   /* gerundet auf 2 Stellen und mit voranstehender 0 bei Zahlen kleiner als 1 - Bsp: '0.8' statt '.8' */
   if (String(v*3.6).substr(0,1)==".") {vaus=0+String(Math.round(v*3.6*100)/100)} else {vaus=(Math.round(v*3.6*100)/100)};      /* Geschwindigkeit */
   if (String(t).substr(0,1)==".") {taus=0+String(Math.round(t*100)/100)} else {taus=(Math.round(t*100)/100)};                  /* Reaktionszeit */
   if (String(a).substr(0,1)==".") {aaus=0+String(Math.round(a*100)/100)} else {aaus=(Math.round(a*100)/100)};                  /* Bremsverzögerung */
   if (String(hnd).substr(0,1)==".") {hndaus=0+String(Math.round(hnd*100)/100)} else {hndaus=(Math.round(hnd*100)/100)};        /* Hindernisentfernung */

   if (String(sr).substr(0,1)==".") {sraus=0+String(Math.round(sr*100)/100)} else {sraus=(Math.round(sr*100)/100)};             /* Reaktionsweg */
   if (String(sb).substr(0,1)==".") {sbaus=0+String(Math.round(sb*100)/100)} else {sbaus=(Math.round(sb*100)/100)};             /* Bremsweg */
   if (String(sa).substr(0,1)==".") {saaus=0+String(Math.round(sa*100)/100)} else {saaus=(Math.round(sa*100)/100)};             /* Anhalteweg */
   if (String(ta).substr(0,1)==".") {taaus=0+String(Math.round(ta*100)/100)} else {taaus=(Math.round(ta*100)/100)};             /* Anhaltezeit */

   if (String(vh*3.6).substr(0,1)==".") {vhaus=0+String(Math.round(vh*3.6*100)/100)} else {vhaus=(Math.round(vh*3.6*100)/100)}; /* Aufprallgeschwindigkeit */
   if (String(th).substr(0,1)==".") {thaus=0+String(Math.round(th*100)/100)} else {thaus=(Math.round(th*100)/100)};             /* Dauer bis zum Aufprall */
   if (th==-1) {thaus="-----"} /* Hindernis wird nicht getroffen */
   if (String(fh).substr(0,1)==".") {fhaus=0+String(Math.round(fh*100)/100)} else {fhaus=(Math.round(fh*100)/100)};             /* äquivalente Fallhöhe */

   /* Datenausgabe */
   /* Daten in Formularfeld schreiben - readonly funktioniert nicht bei allen Browsern */
   document.ausgabe.vausgabe.value = vaus;
   document.ausgabe.tausgabe.value = taus;
   document.ausgabe.aausgabe.value = aaus;
   document.ausgabe.srausgabe.value = sraus;
   document.ausgabe.sbausgabe.value = sbaus;
   document.ausgabe.saausgabe.value = saaus;
   document.ausgabe.taausgabe.value = taaus;
   document.ausgabe.hndausgabe.value = hndaus;
   document.ausgabe.vhausgabe.value = vhaus;
   document.ausgabe.thausgabe.value = thaus;
   document.ausgabe.fhausgabe.value = fhaus;

   /* zur Datenausgabe linken 
   ausgabeurl="#datenausgabe"
   location.href = parent.frames[1].ausgabeurl;*/
   }


/* Vorgabewerte Geschwindigkeit setzen */
function vvorgabewert(vorgabewert)
   {
   document.brems.geschwindigkeit.value = vorgabewert;
   }


/* Vorgabewerte Reaktionszeit setzen */
function tvorgabewert(vorgabewert)
   {
   document.brems.reaktion.value = vorgabewert;
   }


/* Vorgabewerte Bremsverzögerung setzen */
function avorgabewert(vorgabewert)
   {
   document.brems.verzoegerung.value = vorgabewert;
   }


/* Vorgabewerte Hindernisentfernung setzen */
function hndvorgabewert(vorgabewert)
   {
   document.brems.hindernis.value = vorgabewert;
   }


/* Hindernis berechnen (wird gerade nicht getroffen = Anhalteweg)*/
function hndberechnen ()
   {
   sr=(document.brems.geschwindigkeit.value/3.6) * document.brems.reaktion.value;                     /* Reaktionsweg */
   sb=(Math.pow((document.brems.geschwindigkeit.value/3.6),2))/(2*document.brems.verzoegerung.value); /* Anhalteweg */
   hndentfernung=sr+sb;
   if (String(hndentfernung).substr(0,1)==".") {hndentfernung=0+String(Math.round((hndentfernung*100)+0.5)/100)} else {hndentfernung=(Math.round((hndentfernung*100)+0.5)/100)}; /* auf 2 Stellen runden und auf jeden Fall aufrunden; Null voran, bei Zahlen kleiner als Null */
   hndvorgabewert(hndentfernung);
   }

