Bremsweg JavaScript
/***********************************************
* Modul: 307
* Autor: philipp gressly / Santis Training AG
* Datum: März 2010
***********************************************/
/* Initialize: Disable buttons, empty fields and set Default Color*/
function initialisieren() {
document.getElementById("kmhField") .value = "";
document.getElementById("zustandBox").checked = false;
setButtonState("", false);
javaScriptEinschalten();
bildEinschalten(false);
}
/**
* Falls JavaScript ausgeschaltet ist: mache nichts ;-) (ginge auch nicht)
* Falls JavaScript eingeschaltet ist: zeige die JavaScript-abhängige Seite.
*/
function javaScriptEinschalten() {
var ohneScript = document.getElementById("ohneJavaScript");
var mitScript = document.getElementById("mitJavaScript");
ohneScript.style.display = "none";
mitScript .style.display = "block";
}
/* Check on every keyUp-Event ...*/
function entryCheck() {
var kmh = document.getElementById("kmhField") .value;
var zustand = document.getElementById("zustandBox").checked;
alertUserOnIllegalEntry(kmh);
setLabelColors();
setButtonState(kmh, zustand);
}
function setButtonState(kmh, zustand) {
var submitButton = document.getElementById("submit");
var resetButton = document.getElementById("reset");
submitButton.disabled = ! isFormSubmitable(kmh);
resetButton.disabled = ! isFormResetable (kmh, zustand);
}
/* Alert wrong entries and set label colors. */
function alertUserOnIllegalEntry(kmh)
{
alertWrongEntry(kmh, "kmh");
}
/* set colors for all labels */
function setLabelColors() {
setLabelColor("kmh");
}
/* color a single label according to its value.
* See "bremsweg.css".
*/
function setLabelColor(type) {
var cls;
label = document.getElementById(type + "Label");
value = document.getElementById(type + "Field").value;
if("" == value) { cls = "empty"; }
else if(isNumericalValue(value)) { cls = "ok"; }
else if(isOKWhileEntering(value)) { cls = "entering"; }
else { cls = "illegal"; }
label.setAttribute("class", "entry_" + cls);
}
/**
* check, if fields are OK (ready to submit).
* In our case: check, if exactly two (2) fields are
* filled in.
*/
function isFormSubmitable(kmh) {
return isNumericalValue(kmh);
}
/* check, if "txt" is a nonempty number */
function isNumericalValue(txt) {
return ("" != txt && isFinite(txt));
}
/* A value can be wrong while entering - but should not be
* alerted. E. g. To enter "-6" you have to enter "-" first,
* which is not ok.
*/
function isOKWhileEntering(value) {
return (/^(\+)?[0-9]*(\.[0-9]*)?$/.test(value));
}
/**
* missedValue ist die falsch eingegebene Zahl.
* Sollte jemand auf dem Dialog (alert) "ENTER" drücken, so wird wieder ein "onchange"
* ausgelöst, was zu einem neune alert führen würde.
*/
var missedValue = "";
function alertWrongEntry(value, label) {
// check Field while entering
if(! isOKWhileEntering(value)) {
if(missedValue != value) {
window.alert(label + " muss eine positive Zahl sein!");
missedValue = value;
}
}
}
/*check, if any of the 3 Fields contains a value
* so that "reset" makes sense. */
function isFormResetable(kmh, zustand) {
return ("" != kmh) || (zustand);
}
/* The calculation takes place */
function submitClick() {
var kmh = document.getElementById("kmhField" ).value;
var nass = document.getElementById("zustandBox").checked;
if(isNumericalValue(kmh)) {
showResult(kmh, nass);
}
}
/* Show the result in a given "output" field (id = "ausgabe") */
function showResult(kmh, nass) {
var resultText;
resultText = bremsweg(kmh, nass).toFixed(2);
document.getElementById("ausgabeBremsweg").innerHTML = resultText;
resultText = anhaltestrecke(kmh, nass).toFixed(2);
document.getElementById("ausgabeAnhaltestrecke").innerHTML = resultText;
resultText = bremszeit(kmh, nass).toFixed(1);
document.getElementById("ausgabeBremszeit").innerHTML = resultText;
resultText = anhaltezeit(kmh, nass).toFixed(1);
document.getElementById("ausgabeAnhaltezeit").innerHTML = resultText;
bildEinschalten(bremszeit(kmh, nass) > 3);
}
function bildEinschalten(sichtbar) {
var vis = sichtbar ? "block" : "none";
var cDiv = document.getElementById("crashBild");
cDiv.style.display = vis;
}
/** Berechnugen **/
var reaktionszeitInSekunden = 1.0;
var bremsverzoegerungTrocken = 7.7;
var bremsverzoegerungNass = 4;
function bremsverzoegerung(nass) {
return nass ? bremsverzoegerungNass : bremsverzoegerungTrocken;
}
function bremsweg(kmh, nass) {
var vms = kmh / 3.6;
var a = bremsverzoegerung(nass);
return vms * vms / 2 / a;
}
function anhaltestrecke(kmh, nass) {
var vms = kmh / 3.6;
return bremsweg(kmh, nass) + vms * reaktionszeitInSekunden;
}
function bremszeit(kmh, nass) {
var vms = kmh / 3.6;
var a = bremsverzoegerung(nass);
return vms / a;
}
function anhaltezeit(kmh, nass) {
return bremszeit(kmh, nass) + reaktionszeitInSekunden;
}