/* ### Define Variables ### */
var vAnzahlDerFahrzeuge;
var vJaehrlicheLaufleistung;
var vKraftstoffverbrauchMinDiesel;
var vOelwechselNachStundenNormal;
var vOelwechselNachStundenVerkuerzt;
var vMengeOelProWechsel;
var vTagespreisDiesel;
var vTagespreisBiodiesel;
var vPreisMotoroel;
var vPreisOelfilter;
var vArbeitszeitOelwechsel;
var vArbeitskostenWerkstattstunde;
var vWorstCaseMehrverbrauch;

var vGesamtlaufleistung;
var vGesamtDieselverbrauch;
var vAnzahlOelwechselNormal;
var vAnzahlOelwechselVerkuerzt;
var vAnzahlZusaetzlicheOelwechsel;
var vGesamtBiodieselverbrauch;

var vKostenDiesel;
var vMehrverbrauchOel;
var vMehrverbrauchFilter;
var vArbeitslohnFuerZusaetzlicheOelwechsel;
var vKostenBiodiesel;

var vEndergebnis;
var vSparwert;
var vSpartext;

/* ### Format the output like Excel does ### */
/* Null Dezimalstellen, Tausendertrennzeichen */
function f0dt(uNumber)
{
    if (isNaN(uNumber)) return '';
    var locText = '';
    var locBuffer = '';
    var locBlockCounter = 0;

    locText = String(Math.round(Math.abs(uNumber)));

    for (i = locText.length - 1; i >= 0; i--)
    {
        locBlockCounter++;
        locBuffer = String(locText.charAt(i)) + locBuffer;
        if (locBlockCounter > 2 && (i > 0))
        {
            locBlockCounter = 0;
            locBuffer = '.' + locBuffer;
        }

    }
    return ((uNumber < 0)?'-':'') + String(locBuffer);
}
/* Zwei Dezimalstellen, Tausendertrennzeichen */
function f2dt(uNumber) {
    uNumber *= 100;
    var locText = '';
    var locBuffer = '';
    var locBlockCounter = -3;
    var i = 0;

    if (isNaN(uNumber)) return '';

    locText = String(Math.round(Math.abs(uNumber)));
    while (locText.length < 3) locText = '0' + String(locText);

    for (i = locText.length - 1; i >= 0; i--) {

        locBlockCounter++;
        if (locBlockCounter == 0) locBuffer = ',' + locBuffer;

        if (locBlockCounter > 2) {
            locBlockCounter = 0;
            locBuffer = '.' + locBuffer;
        }
        locBuffer = String(locText.charAt(i)) + locBuffer;

    }

    return ((uNumber < 0)?'-':'') + String(locBuffer);
}
/* Zwei Dezimalstellen */
function f2d(uNumber)
{
    uNumber *= 100;
    var locText = '';
    var locBuffer = '';
    var locBlockCounter = -2;
    var i = 0;

    if (isNaN(uNumber)) return '';

    locText = String(Math.round(Math.abs(uNumber)));
    while (locText.length < 3) locText = '0' + String(locText);

    for (i = locText.length - 1; i >= 0; i--) {

        locBlockCounter++;
        locBuffer = String(locText.charAt(i)) + locBuffer;
        if (locBlockCounter == -0) locBuffer = ',' + locBuffer;
    }

    return ((uNumber < 0)?'-':'') + String(locBuffer);
}
/* Eine Dezimalstelle */
function f1d(uNumber)
{
    uNumber *= 10;
    var locText = '';
    var locBuffer = '';
    var locBlockCounter = -1;
    var i = 0;

    if (isNaN(uNumber)) return '';

    locText = String(Math.round(Math.abs(uNumber)));
    while (locText.length < 2) locText = '0' + String(locText);

    for (i = locText.length - 1; i >= 0; i--) {

        locBlockCounter++;
        locBuffer = String(locText.charAt(i)) + locBuffer;
        if (locBlockCounter == -0) locBuffer = ',' + locBuffer;
    }

    return ((uNumber < 0)?'-':'') + String(locBuffer);
}
/* Standard */
function fStandard(u)
{
    return u;
}
/* Display negative values in red */
function makeRed(uNumber)
{

}

/* ### Turn the input into a number to calculate with ### */
function makeFloat(u)
{
    var finalFloat = "";
    u = u.toString();
    u = u.replace(/[^.,0-9]*/g, ""); /* make everything go away which is not a lovely number, comma or point.*/
    u = u.replace(/,/g, "."); /* turn them nasty commas into points the calculator loves */
    /* finally throw all points after the first one in the trashcan */
    u = u.split(".");
    for(i = 1; i < u.length; i++)
    {
        finalFloat += u[i]
    }
    finalFloat = u[0] + "." + finalFloat;
    if(finalFloat == ".") finalFloat = 0;
    return 1 * finalFloat;
}

/* ### Initialize input values ### */
function initializeInput()
{
vAnzahlDerFahrzeuge = 1;
vJaehrlicheLaufleistung = 700;
vKraftstoffverbrauchMinDiesel = 17;
vOelwechselNachStundenNormal = 500;
vOelwechselNachStundenVerkuerzt = 250;
vMengeOelProWechsel = 16.5;
vTagespreisDiesel = 80;
vTagespreisBiodiesel = 71;
vPreisMotoroel = 2.5;
vPreisOelfilter = 14;
vArbeitszeitOelwechsel = 1;
vArbeitskostenWerkstattstunde = 0;
vWorstCaseMehrverbrauch = 6;

    with(document.forms["bdr"])
    {
        AnzahlDerFahrzeuge.value             = f0dt(vAnzahlDerFahrzeuge);
        JaehrlicheLaufleistung.value         = f0dt(vJaehrlicheLaufleistung);
        KraftstoffverbrauchMinDiesel.value   = f2dt(vKraftstoffverbrauchMinDiesel);
        OelwechselNachStundenNormal.value    = f0dt(vOelwechselNachStundenNormal);
        OelwechselNachStundenVerkuerzt.value = f0dt(vOelwechselNachStundenVerkuerzt);
        MengeOelProWechsel.value             = f2dt(vMengeOelProWechsel);
        TagespreisDiesel.value               = f2dt(vTagespreisDiesel);
        TagespreisBiodiesel.value            = f2dt(vTagespreisBiodiesel);
        PreisMotoroel.value                  = f2dt(vPreisMotoroel);
        PreisOelfilter.value                 = f2d(vPreisOelfilter);
        ArbeitszeitOelwechsel.value          = fStandard(vArbeitszeitOelwechsel);
        ArbeitskostenWerkstattstunde.value   = f2d(vArbeitskostenWerkstattstunde);
        WorstCaseMehrverbrauch.value         = f1d(vWorstCaseMehrverbrauch);
    }
}
/* ### Compute the output ### */
function computeOutput()
{
    /* Zwischenrechnungen */
    vGesamtlaufleistung                    = vAnzahlDerFahrzeuge * vJaehrlicheLaufleistung;
    vGesamtDieselverbrauch                 = vAnzahlDerFahrzeuge * vJaehrlicheLaufleistung * vKraftstoffverbrauchMinDiesel;
    vAnzahlOelwechselNormal                = vJaehrlicheLaufleistung / vOelwechselNachStundenNormal;
    vAnzahlOelwechselVerkuerzt             = vJaehrlicheLaufleistung / vOelwechselNachStundenVerkuerzt;
    vAnzahlZusaetzlicheOelwechsel          = vAnzahlOelwechselVerkuerzt - vAnzahlOelwechselNormal;
    vGesamtBiodieselverbrauch              = vGesamtDieselverbrauch * ((100 + vWorstCaseMehrverbrauch) / 100);
    /* Kosten-/Nutzen-Rechnung */
    vKostenDiesel                          = vGesamtDieselverbrauch * vTagespreisDiesel / 100;
    vMehrverbrauchOel                      = vAnzahlZusaetzlicheOelwechsel * vMengeOelProWechsel * vAnzahlDerFahrzeuge * vPreisMotoroel;
    vMehrverbrauchFilter                   = vAnzahlDerFahrzeuge * vAnzahlZusaetzlicheOelwechsel * vPreisOelfilter;
    vArbeitslohnFuerZusaetzlicheOelwechsel = vArbeitszeitOelwechsel * vAnzahlZusaetzlicheOelwechsel * vArbeitskostenWerkstattstunde * vAnzahlDerFahrzeuge;
    vKostenBiodiesel                       = vGesamtBiodieselverbrauch * vTagespreisBiodiesel / 100;
    /* Endergebni */
    vSparwert                              = vKostenBiodiesel + vArbeitslohnFuerZusaetzlicheOelwechsel + vMehrverbrauchFilter + vMehrverbrauchOel - vKostenDiesel;
    if (vSparwert > 0)
    {
        vSpartext           = "Sie sparen leider nichts. Die Mehrkosten betragen: ";
        //document.bdr.Sparwert.value = document.bdr.Sparwert.value * -1;
    }
    else               vSpartext           = "Sie könnten im Jahr sparen: ";
}
function displayResults()
{
    with(document.forms["bdr"])
    {
        Gesamtlaufleistung.value                    = f0dt(vGesamtlaufleistung);
        GesamtDieselverbrauch.value                 = f0dt(vGesamtDieselverbrauch);
        AnzahlOelwechselNormal.value                = f1d(vAnzahlOelwechselNormal);
        AnzahlOelwechselVerkuerzt.value             = f1d(vAnzahlOelwechselVerkuerzt);
        AnzahlZusaetzlicheOelwechsel.value          = f1d(vAnzahlZusaetzlicheOelwechsel);
        GesamtBiodieselverbrauch.value              = f0dt(vGesamtBiodieselverbrauch);

        KostenDiesel.value                          = f2dt(vKostenDiesel);
        MehrverbrauchOel.value                      = f2dt(vMehrverbrauchOel);
        MehrverbrauchFilter.value                   = f2dt(vMehrverbrauchFilter);
        ArbeitslohnFuerZusaetzlicheOelwechsel.value = f2dt(vArbeitslohnFuerZusaetzlicheOelwechsel);
        KostenBiodiesel.value                       = f2dt(vKostenBiodiesel);


        Sparwert.value                              = f2dt(vSparwert);

        if (parseFloat(Sparwert.value) < 0)
            Sparwert.value                          = f2dt(vSparwert * -1);

        Spartext.value                              = vSpartext;
    }
}
function formsubmit(uFormName, uFormValue)
{
    switch(uFormName)
    {
        case "AnzahlDerFahrzeuge":
            vAnzahlDerFahrzeuge = makeFloat(uFormValue);
            replaceInput = 'document.forms["bdr"].' + uFormName + ".value = '" + f0dt(vAnzahlDerFahrzeuge) + "'";
            eval(replaceInput);
        break;
        case "JaehrlicheLaufleistung":
            vJaehrlicheLaufleistung = makeFloat(uFormValue);
            replaceInput = 'document.forms["bdr"].' + uFormName + ".value = '" + f0dt(vJaehrlicheLaufleistung) + "'";
            eval(replaceInput);
        break;
        case "KraftstoffverbrauchMinDiesel":
            vKraftstoffverbrauchMinDiesel = makeFloat(uFormValue);
            replaceInput = 'document.forms["bdr"].' + uFormName + ".value = '" + f2dt(vKraftstoffverbrauchMinDiesel) + "'";
            eval(replaceInput);
        break;
        case "OelwechselNachStundenNormal":
            vOelwechselNachStundenNormal = makeFloat(uFormValue);
            replaceInput = 'document.forms["bdr"].' + uFormName + ".value = '" + f0dt(vOelwechselNachStundenNormal) + "'";
            eval(replaceInput);
        break;
        case "OelwechselNachStundenVerkuerzt":
            vOelwechselNachStundenVerkuerzt = makeFloat(uFormValue);
            replaceInput = 'document.forms["bdr"].' + uFormName + ".value = '" + f0dt(vOelwechselNachStundenVerkuerzt) + "'";
            eval(replaceInput);
        break;
        case "MengeOelProWechsel":
            vMengeOelProWechsel = makeFloat(uFormValue);
            replaceInput = 'document.forms["bdr"].' + uFormName + ".value = '" + f2dt(vMengeOelProWechsel) + "'";
            eval(replaceInput);
        break;
        case "TagespreisDiesel":
            vTagespreisDiesel = makeFloat(uFormValue);
            replaceInput = 'document.forms["bdr"].' + uFormName + ".value = '" + f2dt(vTagespreisDiesel) + "'";
            eval(replaceInput);
        break;
        case "TagespreisBiodiesel":
            vTagespreisBiodiesel = makeFloat(uFormValue);
            replaceInput = 'document.forms["bdr"].' + uFormName + ".value = '" + f2dt(vTagespreisBiodiesel) + "'";
            eval(replaceInput);
        break;
        case "PreisMotoroel":
            vPreisMotoroel = makeFloat(uFormValue);
            replaceInput = 'document.forms["bdr"].' + uFormName + ".value = '" + f2dt(vPreisMotoroel) + "'";
            eval(replaceInput);
        break;
        case "PreisOelfilter":
            vPreisOelfilter = makeFloat(uFormValue);
            replaceInput = 'document.forms["bdr"].' + uFormName + ".value = '" + f2d(vPreisOelfilter) + "'";
            eval(replaceInput);
        break;
        case "ArbeitszeitOelwechsel":
            vArbeitszeitOelwechsel = makeFloat(uFormValue);
            replaceInput = 'document.forms["bdr"].' + uFormName + ".value = '" + fStandard(vArbeitszeitOelwechsel) + "'";
            eval(replaceInput);
        break;
        case "ArbeitskostenWerkstattstunde":
            vArbeitskostenWerkstattstunde = makeFloat(uFormValue);
            replaceInput = 'document.forms["bdr"].' + uFormName + ".value = '" + f2d(vArbeitskostenWerkstattstunde) + "'";
            eval(replaceInput);
        break;
        case "WorstCaseMehrverbrauch":
            vWorstCaseMehrverbrauch = makeFloat(uFormValue);
            replaceInput = 'document.forms["bdr"].' + uFormName + ".value = '" + f1d(vWorstCaseMehrverbrauch) + "'";
            eval(replaceInput);
        break;
        default:
        break;
    }
    computeOutput();
    displayResults();
}

function hideInput()
{
    document.getElementById("headTxt").style.display = "none";
    document.getElementById("calcIn").style.display = "none";
    document.getElementById("calcOut").style.display = "inline";
    document.getElementById("calcStartBt").style.display = "none";
}

function showInput()
{
    document.getElementById("headTxt").style.display = "inline";
    document.getElementById("calcIn").style.display = "inline";
    document.getElementById("calcOut").style.display = "none";
    document.getElementById("calcStartBt").style.display = "inline";
}