//Definition von Funktionen fuer den Heizkoerper
function Heizkoerper_trbekannt() //Qmom und V bei bekanntem tr berechnen
{
  Spreizung      = this.Vorlauftemperatur   - this.Ruecklauftemperatur;
  Graedig_v      = this.Vorlauftemperatur   - this.Raumtemperatur;
  Graedig_r      = this.Ruecklauftemperatur - this.Raumtemperatur;
  this.templog   = Spreizung/Math.log(Graedig_v/Graedig_r);
  this.Momentanleistung = this.Nennleistung*  Math.pow((this.templog/60),this.Exponent);
  this.Volumenstrom     = this.Momentanleistung*3.6/(Spreizung*3.6);
}

function Heizkoerper_Qmombekannt() //tr und V bei bekanntem Qmom berechnen
{
  Q_Quotient   = this.Momentanleistung/this.Nennleistung;
  this.templog = 60 *  Math.pow(Q_Quotient,(1/this.Exponent));
  //Bestimmen eines Anfangswertes
  tr          = (1*this.Vorlauftemperatur + 1*this.Raumtemperatur) / 2 ;
  //Trivialschritte in Schleifen
    for (i=0 ; i<100 ; i++)
      {tr = 1*this.Raumtemperatur + (this.Vorlauftemperatur - this.Raumtemperatur)* Math.exp((tr-this.Vorlauftemperatur)/this.templog);
      }
  //Pruefen auf Sinnhaftigkeit
    if (tr > (this.Vorlauftemperatur-0.4))
       {
       tr = 0;
       alert("Die angegebene Momentanleistung ist nicht erreichbar !");
       }    
  this.Ruecklauftemperatur = tr;
  //Berechnung des Volumenstroms
  Spreizung      = this.Vorlauftemperatur   - this.Ruecklauftemperatur;
  this.Volumenstrom     = this.Momentanleistung*3.6/(Spreizung*3.6);
}

//Konstruktur fuer das Objekt Heizkoerper
function Heizkoerper()
{
  //Intialisiere die Objekteigenschaften
    this.Nennleistung        = 1000 ;
    this.Exponent            =  1.3 ;
    this.Vorlauftemperatur   =   70 ;
    this.Ruecklauftemperatur =   55 ;
    this.Raumtemperatur      =   20 ;
    this.templog             =   40 ;
    this.Momentanleistung    =  800 ;
    this.Volumenstrom        =   20 ;

  //Definition der Methoden fuer das Objekt
    this.trbekannt = Heizkoerper_trbekannt;
    this.Qmombekannt = Heizkoerper_Qmombekannt;
}

//Aufruf der Funktion Nennleistung durch Event
function Berechne(Auftrag)
{
  Heizkoerper1 = new Heizkoerper(); //Erzeugung des Objekts
  //Eintragen der Eigenschaften in das Objekt
    var f = document.Heizkoerper_Form ;
    Heizkoerper1.Nennleistung        = f.Nennleistung.value;
    Heizkoerper1.Exponent            = f.Exponent.value;
    Heizkoerper1.Vorlauftemperatur   = f.Vorlauftemperatur.value;
    Heizkoerper1.Ruecklauftemperatur = f.Ruecklauftemperatur.value;
    Heizkoerper1.Raumtemperatur      = f.Raumtemperatur.value;
    Heizkoerper1.Momentanleistung    = f.Momentanleistung.value;
    Heizkoerper1.Volumenstrom        = f.Volumenstrom.value;
  //Verzweigung fuer die unterschiedlichen Auftraege
    if (Auftrag == "trbekannt")
      {//Aufruf der entsprechenden Methode
        Heizkoerper1.trbekannt();
      //Uebertrag in das Formular
        f.Momentanleistung.value = Math.round(Heizkoerper1.Momentanleistung);}
    else
      {//Aufruf der entsprechenden Methode
        Heizkoerper1.Qmombekannt();
      //Uebertrag in das Formular
        f.Ruecklauftemperatur.value = (Math.round(10*Heizkoerper1.Ruecklauftemperatur))/10;}
    //Ende der Auftragsverzweigung
    f.Volumenstrom.value     = (Math.round(10*Heizkoerper1.Volumenstrom))/10;
    //f.Momentanleistung.value = 20;
}
