function formHandler(){var URL = document.input.site.options[document.input.site.selectedIndex].value;
parent.main.location.href = URL;}

var p = GetValue('7,90');
var t = GetValue('3,00');

function GetZins() {
        return p;
}


function GetValue(wert) {
        if (!wert)
                return 0;
        strwert = 'x' + wert + 'x';
        komma = strwert.indexOf(',');
        if (komma >= 0)
                return (strwert.substring(1,komma) + '.' + strwert.substring(komma+1,strwert.length-1))*1;
        else
                return wert;
}

function GetGebuehr() {
        return t;
}

function Format00( wert ) {
        wert = Math.round(wert*100)/100;
        strwert = wert + '00x';
        if (strwert.indexOf('.') < 0)
                return wert + '.00';
        else
                return strwert.substring(0, strwert.indexOf('.')+3);
}

function retrieveValue( field ) {
        return (field.name.substring(0,2) == 's_')? field.options[field.selectedIndex].value: GetValue(field.value);
}

function ResetValue( field, value ) {
        field.value = value;
}



//
//  Berechnet Restkapital nach AIBD-Methode
//
function AIBDRestkapital(Nettokredit, Laufzeit, ARate, FRaten, EffZins)
{
   var epsilon;
   var r;
   var m;
   var alpha;

   r = Nettokredit;
   epsilon = 1.0+(EffZins/100.0);
   alpha = 1.0/12.0;

   r -= ARate/Math.pow(epsilon, alpha);

   for( m=2.0; m<=Laufzeit; m++ )
   {
      alpha = m/12.0;
      r -= FRaten/Math.pow(epsilon, alpha);
   }

   return r;
}


//
// Berechnet Rate/Zinsen aus Laufzeit (nach AIBD)
//
function UpdateRateAIBD(Nettokredit, Laufzeit, EffZins, BGProz, form)
{
   var DSRate, ARate, FRaten;
   var pmZins;
   var t0, t1, t;
   var r, g, z, b;

   // erstmal pmZins bestimmen (Newton-Iteration,nicht optimal aber funktioniert)
   t0 = 0.0;
   t1 = 0.01;
   t = (t0+t1)/2.0;
   z = Math.round(Nettokredit*t*Laufzeit*100)/100;
   b = Math.round(Nettokredit*BGProz)/100;
   g = (Nettokredit/1.0)+z+b;

   DSRate = g/Laufzeit;
   FRaten = Math.ceil(DSRate);
   ARate = g-(FRaten*(Laufzeit-1));
   r = AIBDRestkapital(Nettokredit,Laufzeit,ARate,FRaten,EffZins);
   while( Math.abs(r)>1.0 && (t1-t0>0.00000001) )
   {
      if( r > 0 ) t0 = t;
      else t1 = t;
      t = (t0+t1)/2.0;
      z = Math.round(Nettokredit*t*Laufzeit*100)/100;
      b = Math.round(Nettokredit*BGProz)/100;
      g = (Nettokredit/1.0)+z+b;
      DSRate = g/Laufzeit;
      FRaten = Math.ceil(DSRate);
      ARate = g-(FRaten*(Laufzeit-1));
      r = AIBDRestkapital(Nettokredit,Laufzeit,ARate,FRaten,EffZins);
   }

   // Werte aktualisieren
   form.jahreszins.value = EffZins;
   form.mtl_rate.value = Format00(FRaten);
   form.laufzeit.value = Laufzeit;
   form.gebuehr.value = Format00(b)
   form.erstrate.value=Format00(ARate);
   form.effekt_jahreszins.value = Format00(EffZins);
   form.rueckbetrag.value=Format00(g);
   form.zinsbetrag.value=Format00(z);
}


//
// Berechnet Laufzeit/tatsaechliche Rate aus Wunschrate (nach AIBD)
//
function UpdateLaufzeitAIBD(Nettokredit, Wunschrate, EffZins, BGProz, form)
{
   var Laufzeit;
   var t0, t1;
   var r;

   t0=5;
   t1=120;
   Laufzeit=Math.floor((t0+t1)/2);
   r = AIBDRestkapital(Nettokredit,Laufzeit,Wunschrate,Wunschrate,EffZins);
   while( (t1-t0)>1 )
   {
      if( r>0 ) t0=Laufzeit;
      else t1=Laufzeit;
      Laufzeit=Math.floor((t0+t1)/2);
      r = AIBDRestkapital(Nettokredit,Laufzeit,Wunschrate,Wunschrate,EffZins);
   }

   // auf nummer sicher gehen
   UpdateRateAIBD(Nettokredit, Laufzeit, EffZins, BGProz, form);
}


//
//  Berechnet den effektiven Jahreszins
//

function effJahreszins( anz_raten, zins_p_a )
{
    var j;
    var m;

    var diff = 1;
    var delta = 0.000000001;

    var q, q1;

    var F1, F2;
    var F1_, F2_;

    var hf1, hf2;
    var const1;

    var zins_p_m;

        // Anzahl ganzer Laufzeitjahre und Restlaufzeitmonate berechnen

    j = Math.floor ( anz_raten / 12 );
    m = anz_raten - j * 12.;

    zins_p_m = zins_p_a / 1200;

    // Startwert nach uniformer Effektivzinsmethode
    q = 1 + (24 * (zins_p_m * anz_raten) / (anz_raten + 1)) / 100;

    const1 = zins_p_m * (Math.pow((1+zins_p_m),anz_raten)/(Math.pow((1+zins_p_m),anz_raten)-1));
    while ( diff > delta ) {
        hf1 = 1 + m * (q-1) / 12.;
        hf2 = (11.0/2.0 + 12.0/(q-1));

        F1  = Math.pow (q,j) * hf1;

        F1_ = j * Math.pow(q, (j-1)) * hf1 + Math.pow(q,j) * m/12.;

        F2  = const1 *
            (hf2 * (Math.pow(q,j-1) - 1) * hf1 +
            12. * Math.pow(q, (j-1)) * (1. + 11./24. * (q-1)) * hf1 +
            m * (1. + (m-1)/24.*(q-1)));

        F2_ = const1 *
            (hf2 * (j-1) * Math.pow(q,j-2) * hf1 -
            (Math.pow(q,j-1) - 1) * 12./Math.pow((q-1),2.) * hf1 +
            hf2 * (Math.pow(q,j-1) - 1) * m/12. +
            12. * (j-1) * Math.pow(q, (j-2)) * (1. + 11./24. * (q-1)) * hf1 +
            11./2. * Math.pow(q, (j-1)) * hf1 +
            m * Math.pow(q, (j-1)) * (1. + 11./24. * (q-1)) +
            m * (m-1) / 24. );

        q1 = q - (F1 - F2) / (F1_ - F2_);
        diff = ( q1 > q ) ? (q1 - q) : (q - q1);
        q = q1;
    }
    return 100 * (q1-1);
}


var minLaufzeit  = 12;
var maxLaufzeit  = 84;

var rm;                   // Rate pro Monat
var rmb, rm2, re;
var n;                    // Anzahl Raten
var p;
var nb, n3;
var M;

//
//  Monatliche Rate aus der Laufzeit berechnen
//
function UpdateRate( kreditbetrag, n, form )
{

        M   = Math.pow( ( 1 + p/1200 ), n );
        M   = Math.round(M*1000000)/1000000;
        rmb = kreditbetrag * p * M / ( 1200 * ( M-1 ) );
        rm2 = Math.round(rmb*100)/100;
        rm  = Math.ceil(rmb);
        re  = n * rm2 - rm * ( n-1 );
        if ( !(re>rm) ) rm=Math.floor(rmb);
        form.jahreszins.value = p;
        form.mtl_rate.value = Format00(rm);
        form.laufzeit.value = n;
        form.gebuehr.value = Format00(kreditbetrag / 100 * t)


        re = (re+rm*(n-1))-(rm*(n-1));
        re = Math.round(re*100)/100;
        form.erstrate.value=Format00(re);
        form.effekt_jahreszins.value = Format00(effJahreszins(n, p)-0.25);
        form.rueckbetrag.value=Format00(re+rm*(n-1));
        z  =(re+rm*(n-1))-kreditbetrag-(kreditbetrag / 100 * t);
        form.zinsbetrag.value=Format00(z);
}

//
//  Laufzeit aus Rate berechnen
//
function UpdateLaufzeit( kreditbetrag, rate, form )
{
        rm  = Math.round( rate );
        if (rm > p*kreditbetrag/1200) {
                nb  = Math.log( rm / ( rm - p*kreditbetrag/1200 ) ) / Math.log( 1 + p/1200 );
                n3  = Math.floor(nb*1000)/1000;
                n   = Math.ceil(nb);
                re  = n3 * rm - rm * (n-1);
                if ( !(re>rm) ) n=Math.floor(nb);
                form.jahreszins.value = p;
                form.mtl_rate.value=Format00(rm);
                form.gebuehr.value = Format00(kreditbetrag / 100 * t)
        }
        else {
                n = maxLaufzeit+1;
        }

        if (n>maxLaufzeit || n<minLaufzeit) {
                if (n>maxLaufzeit) n=maxLaufzeit;
                if (n<minLaufzeit) n=minLaufzeit;
                form.laufzeit.value=n;
                UpdateRate(kreditbetrag, n, form);
        }
        else {
                re = (re+rm*(n-1))-(rm*(n-1));
                re = Math.round(re*100)/100;
                form.laufzeit.value=n;
                form.erstrate.value=Format00(re);
                form.effekt_jahreszins.value = Format00(effJahreszins(n, p)-0.25);
                form.rueckbetrag.value=Format00(re+rm*(n-1));
                z  =(re+rm*(n-1))-kreditbetrag-(kreditbetrag / 100 * t);
                form.zinsbetrag.value=Format00(Math.round(z*100)/100);
        }
}



function CalcRate() {

        //UpdateRate(parent.kreditbetrag, parent.laufzeit, document.output);
        UpdateRateAIBD(parent.kreditbetrag, parent.laufzeit, EffZinsSatz(), BearbEntSatz(), document.output);
        //alert(AIBDRestkapital(16900.0,48,384.0,410.0,7.87));
}

function CalcLaufzeit() {
        //alert(parent.mtl_rate);
        //UpdateLaufzeit(parent.kreditbetrag, parent.mtl_rate, document.output);
        UpdateLaufzeitAIBD(parent.kreditbetrag, parent.mtl_rate, EffZinsSatz(), BearbEntSatz(), document.output);
}

function CalcValues() {
        f = document.input;

        parent.kreditbetrag= retrieveValue(f.kreditbetrag);
        parent.laufzeit = retrieveValue(f.s_laufzeit);
        parent.mtl_rate = retrieveValue(f.mtl_rate);
        parent.zins_p_a = retrieveValue(f.zins_p_a);
        parent.proz_gebuehr = retrieveValue(f.proz_gebuehr);
zinskomma();bearbeitkomma();


        if (parent.kreditbetrag*1 < 2000 || parent.kreditbetrag*1 > 150000) {
                alert('Bitte waehlen Sie einen Kreditbetrag zwischen 2.000,- und 150.000,- DM.');
                f.kreditbetrag.value = (parent.kreditbetrag*1 < 2000)? 2000: 150000;
        }
        else if (parent.zins_p_a*1 ==0){
                alert('Bitte geben Sie einen Zinssatz an');
                document.input.zins_p_a.focus();
        }
        else if (parent.kreditbetrag % 100) {
                alert('Bitte waehlen Sie als Kreditbetrag ein Vielfaches von 100.');
        }
        else if (parent.laufzeit > 0 && parent.mtl_rate > 0) {
                alert('Bitte legen Sie nur die Laufzeit oder die monatliche Rate fest, die jeweils andere Groesse wird berechnet!');
        }
        else if (parent.laufzeit > 0) {
                CalcRate();
        }
        else if (parent.mtl_rate > 0) {
                CalcLaufzeit();
        }
        else
                alert('Bitte waehlen Sie zunaechst die gewuenschte Laufzeit oder die gewuenschte monatliche Rate!');
}

function zinskomma(){

         if (f.zins_p_a.value.indexOf(',')>0){
            f.zins_p_a.value=
 (f.zins_p_a.value.substring(0,f.zins_p_a.value.indexOf(','))
+ '.' + f.zins_p_a.value.substring(f.zins_p_a.value.indexOf(',')+1,f.zins_p_a.value.length)) ;
        }
}
        function bearbeitkomma(){

       if (f.proz_gebuehr.value.indexOf(',')>0){
f.proz_gebuehr.value=
f.proz_gebuehr.value.substring(0,f.proz_gebuehr.value.indexOf(','))
+'.'+
f.proz_gebuehr.value.substring(f.proz_gebuehr.value.indexOf(',')+1,f.proz_gebuehr.value.length);
       }
}

function haushalt(){
         f1=document.haushalt;

f1.gesamteinnahmen1.value=((f1.netto1.value)*1)+((f1.ne1.value)*1);
f1.gesamteinnahmen2.value=((f1.netto2.value)*1)+((f1.ne2.value)*1);
f1.veinkommen1.value=((f1.gesamteinnahmen1.value)*1)-((f1.miete1.value)*1)-((f1.unterhalt1.value)*1)-((f1.rate1.value)*1)-((f1.haus1.value)*1);
f1.veinkommen2.value=((f1.gesamteinnahmen2.value)*1)-((f1.miete2.value)*1)-((f1.unterhalt2.value)*1)-((f1.rate2.value)*1)-((f1.haus2.value)*1);

}

function OnloadFunction() {
        if (parent.evalcode)
                eval(parent.evalcode);
        parent.evalcode = '';
}
