/***************************************************************************************
Name:           berechne - Kostenersparnis bei Verwendung von Erfurt KV 600

Synopsis:       void berechne(formular)

Beschreibung:   Die berechne-Funktion erhält vom Benutzer modifizierte Daten (formular):
                - Raumgrundfläche
                - Bauweise
                - Dämmstandard
                - Beheizung
                - Heizmittel
                
                Berechnung erfogt nur, wenn Raumgrundfläche plausibel ist.
                                
                arrays werden mit notwendingen Konstanten initialisiert:
                - kWh/qm für die KV 600
                - Konstante in Abhängigkeit von der Bauweise und der Dämmung
                
                Die Kosten werden ermittelt und verglichen.
                Ergenisse werden  mit 2 Nachkommastellen ins formular zurückgeschrieben:
                - Energiekosten ohne Erfurt KV 600
                - Energiekosten mit Erfurt KV 600
                - Kostenersparnis in einem Jahr
                - Kostenersparnis in 5 Jahren
            
Modifikation:   08.01.2009 - dd
                Implementierung der Funktion nach excel-Tabelle vom 06.01.2009
                
                09.01.2009 -dd
                Bei Grundflächeneingabe eine Dezimalstelle mit Dezimalkomma zulassen,
                allerdings für Berechnungen in Dezimalpunkt umwandeln.
                
                Fehlermeldung aus Plausibilitaet() hierhin verschoben.
                
                27.01.2009 -dd
                Die arrays KV600_kWh_qm[],BauweiseDaemmung[][] werden mit aktualisierten
                Daten initialisiert (nach Siebels excel-Tabelle vom 27.01.2001).
                
                22.02.2009 -dd
                Die Jahreseinsparkosten ohne Dezimalstellen mit vorgestelltem "ca."
                ausgeben.
                
                26.02.2009 -dd
                Die Energiekosternkosten ohne Dezimalstellen mit vorgestelltem "ca."
                ausgeben.

***************************************************************************************/
function berechne(form) {
    
    var i = 0, j = 0, x = 0, kWh = 0, kWhSumme = 0, M21 = 0;
    var BauweiseDaemmung = new Array(2);
    var KV600_kWh_qm = new Array(5);
    var Grundflaeche = 0;
    
    /* Für Berechnungen muss das Dezimalkomma durch Dezimalpunkt ersetzt werden;
    resultierende Zahl wird auf eine Dezimalstelle reduziert.*/    
    Grundflaeche = parseFloat((form.Flaeche.value).replace(",", "\.")).toFixed(1);
    // Falls Dezimalpunkt eingegeben wurde, in der Ausgabe durch Komma ersetzen
    form.Flaeche.value = String(Grundflaeche).replace(/\./, ",");
   
    
    /* wenn Grundfäche nicht plausibel ist, dann Fehlermeldung ausgeben und 
    Funktion ohne Berechnung verlassen. */
    if (!Plausibilitaet(Grundflaeche)) {
        alert("Die Raumgrundfläche hat keinen gültigen Eintrag! Erlaubte Werte: Fläche > 0");
        return;
    }
   
    // array für die KV 600 kWh/qm Konstanten (N10:N15)
    KV600_kWh_qm[0] = 252;
    KV600_kWh_qm[1] = 176;
    KV600_kWh_qm[2] = 141;
    KV600_kWh_qm[3] = 97;
    KV600_kWh_qm[4] = 48.5;
    
    /*  Konstanten, abhängig von der Bauweise und dem Dämmstandard in 2*5 array füllen.
    Erst das array basteln. */ 
    for (i = 0; i < BauweiseDaemmung.length; ++i)
        BauweiseDaemmung[i] = new Array(5);
     
    // für die leichte Bauweise (K10:K15)
    BauweiseDaemmung[0][0] = 280;
    BauweiseDaemmung[0][1] = 160;
    BauweiseDaemmung[0][2] = 90;
    BauweiseDaemmung[0][3] = 85;
    BauweiseDaemmung[0][4] = 55;
    
    // dann die schwere Bauweise (K10:K15)
    BauweiseDaemmung[1][0] = 280;
    BauweiseDaemmung[1][1] = 160;
    BauweiseDaemmung[1][2] = 105;
    BauweiseDaemmung[1][3] = 90;
    BauweiseDaemmung[1][4] = 55;
    
      
    // Berechnung: ohne Erfurt KV 600, ist ja noch überschaubar
    x = (form.Daemmung.value * form.Heizmittel.value / 100 * Grundflaeche);
    
    
    // Ausgabefeld ohne 2 Nachkommastellen füllen
    form.KostenOhneKV600.value = x.toFixed(0);
    
    
    /* jetzt die Berechnung mit der KV 600, ist ein bisschen komplizierter;
    erstmal schauen, was denn selektiert wurde */    
    for (i = 0; i < 2; ++i) 
        if (form.Bauweise[i].selected == true)
                break;
                        
    for (j = 0; j < 5; ++j) 
        if (form.Daemmung[j].selected == true)
                break;
                
    // jetzt habe ich die Indizes für das array mit den Konstanten und kann kWh berechnen
    kWh = BauweiseDaemmung[i][j] * Grundflaeche / 1000;
        
    // wann wird geheizt? betrachtet wird hier nur mittags und abends
    if (form.wannHeizung[1].checked == true && form.wannHeizung[2].checked == true) { // mittags und abends
        kWhSumme = kWh;
    }   else if (form.wannHeizung[1].checked == false && form.wannHeizung[2].checked == false) { // weder mittags noch abends
            kWhSumme = kWh;
        }   else { // entweder mittags oder abends
                kWhSumme = kWh + kWh / 2;
            }
    
    // Feld M21 aus xls berechnet                
    M21 = kWhSumme * form.Bauweise.value;
    
    // jetz alles zusammen in eine Formel gequetscht und ausrechnen
    x = ((KV600_kWh_qm[j] * form.Heizmittel.value / 100 * Grundflaeche) -
        (form.Heizmittel.value * (kWhSumme - M21) * 2));
        
        
    
    // Ausgabefeld ohne 2 Nachkommastellen füllen
    form.KostenMitKV600.value = x.toFixed(0);
    
    // zu erwartenden Einsparungen berechnen
    form.Einsparung_1_Jahr.value = (form.KostenOhneKV600.value - form.KostenMitKV600.value).toFixed(0);
    form.Einsparung_5_Jahr.value = (form.Einsparung_1_Jahr.value * 5).toFixed(0);
    
    //alles gerechnet; jetzt noch "ca." vorangesetzt
    form.Einsparung_5_Jahr.value = "ca. " + String(form.Einsparung_5_Jahr.value);
    form.Einsparung_1_Jahr.value = "ca. " + String(form.Einsparung_1_Jahr.value);
    form.KostenMitKV600.value = "ca. " + String(form.KostenMitKV600.value);
    form.KostenOhneKV600.value = "ca. " + String(form.KostenOhneKV600.value);


    
    return;
   
}

/***************************************************************************************
Name:           Plausibilitaet - untersucht Zahl

Synopsis:       boolean Plausibilitaet(Zahl)

Beschreibung:   Die Plausibilitaet-Funktion analysiert,ob Zahl > 0
                - Zahl
                
                Der Wertebereich dieses Feldes: Zahl > 0;
                                
                Die Funktion liefert:
                - true:     alles ok, kann verarbeitet werden
                - false:    falsche Eingabe
                              
            
Modifikation:   08.01.2009 - dd
                Implementierung der Funktion
                
                09.01.2009 - dd
                Funktion auf positive Zahlen checken; erhält jetzt statt eines Formulars
                lediglich eine Zahl. Funktion kann so besser erweitert werden.
***************************************************************************************/
function Plausibilitaet(x) {

    if (x > 0)
        return(true);
        
    
    return(false);
    
}
