function verzinsungen_berechnen()
{
    //zinsstaffel löschen
//zeile_loeschen('tabelle_staffel','alle');
//schleife----------------------------------------------------
var err=false;
var wert="0";
var id_num=0;
var id_name="";

for(k=3;k<document.getElementById('tabelle_verzinsungen').rows.length;k++){
    id_name=document.getElementById('tabelle_verzinsungen').rows[k].childNodes[0].childNodes[0].id;
    //id_name=document.getElementById('tabelle_verzinsungen').rows[k].firstChild.id;
    id_num=id_name.substr(20,1);            //aktuelle ID-nummer der zeile ermitteln
    err=false;
    for (j=1;j<4;j++){
        wert=document.getElementById('tabelle_verzinsungen'+id_num+'_'+j).value;
        if(wert.length==0){err=true;}          //wenn ein feld leer ist, (falsche Eingaben bereits ausgeschlossen) dann nicht rechnen
    }
    if(err==false){
        variablen_zuruecksetzen();
        //Zinssätze nur beim ersten durchlauf neu ordnen;
        var tabelle_neu_schreiben='ja';
        if(k>3){tabelle_neu_schreiben='nein';}
        if (verzinsungen_angaben_einlesen(id_num,tabelle_neu_schreiben)!="err"){
        }else{alert("Ein Fehler ist aufgetreten, die Berechnung wird abgebrochen");return;}
        bewegungen_zusammenstellen();

        //Bewegungen zusammen ausdrucken
        //var datum_probe =new Date();
        //for (i=0;i<bewegungen_zusammen[0].length;i++){
        //    datum_probe.setTime(bewegungen_zusammen[0][i]);
        //}
        ein_auszahlungen_berechnen();
        //ergebnis ausdrucken
        //zeile_loeschen('tabelle_staffel','alle');
        //Tage berechnen--------------------------------------------------------------
        zinsen_berechnen(0, 0, g_variablen_periodenbeginn, g_variablen_periodenende, tageberechnung_monat, tageberechnung_jahr)
        document.getElementById('tabelle_verzinsungen'+id_num+'_4').value= mvarTage;
        var zinsen=string_to_double(document.getElementById('tabelle_verzinsungen'+id_num+'_3').value);
        zinsen=g_variablen_endsaldo-zinsen;
        document.getElementById('tabelle_verzinsungen'+id_num+'_5').value= format_double_to_string(zinsen,2);
        document.getElementById('tabelle_verzinsungen'+id_num+'_6').value= format_double_to_string(g_variablen_endsaldo,2);
    }
}
}

function verzinsungen_angaben_einlesen(zeile,tabelle_neu_schreiben)
	{
//Daten einlesen und bereinigen-----------------------------------------------------------------------------
//zeilennummer dient nur dazu, damit nicht nach jedem durchlauf die Zinssätze neu geordnet werden
var err="OK"
var zinsaenderungen_haben_=werte_aus_tabellen_in_array_schreiben('zinssatzaenderungen_haben');
if (zinsaenderungen_haben_.length==0){err="fehler";return err;}
for(i=0;i<zinsaenderungen_haben_.length;i++){
    split_string=zinsaenderungen_haben_[i].split("#");
    zinsaenderungen_haben[0][i]=split_string[0];
    zinsaenderungen_haben[1][i]=split_string[1];

}
array_sortiert_in_tabelle_schreiben(zinsaenderungen_haben, 'zinssatzaenderungen_haben',tabelle_neu_schreiben);     //sind global definiert und werden in der funktion neu geordnet
//werden eigentlich nicht benötigt
zinsaenderungen_soll[0][0]=zinsaenderungen_haben[0][0];
zinsaenderungen_soll[1][0]=0;
zinsaenderungen_soll[2][0]=2;

//Schleife für alle bewegungen; vorerst i=0
var i=zeile;
bewegungen[0][0]=stringdate_to_millisec(document.getElementById("tabelle_verzinsungen"+i+"_1").value);
bewegungen[1][0]=string_to_double(document.getElementById("tabelle_verzinsungen"+i+"_3").value);
bewegungen[2][0]=0;                 //Schlüssel für bewegungen

g_variablen_periodenende=stringdate_to_millisec(document.getElementById("tabelle_verzinsungen"+i+"_2").value);

g_variablen_periodenbeginn=stringdate_to_millisec(document.getElementById("tabelle_verzinsungen"+i+"_1").value);        //sind bereits millisec durch funktion vorher - 10 Sekunden dazu, damit, wenn Abschuß gleich letzter Bewegung ist, noch der Abschluß dazugenommen wird


//kapitalisierung
if (document.getElementById('kapitalisierung_monatlich').checked==true){kapitalisierungszeitraum='M';}
if (document.getElementById('kapitalisierung_vierteljaehrlich').checked==true){kapitalisierungszeitraum='V';}
if (document.getElementById('kapitalisierung_halbjaehrlich').checked==true){kapitalisierungszeitraum='H';}
if (document.getElementById('kapitalisierung_jaehrlich').checked==true){kapitalisierungszeitraum='J';}
if (document.getElementById('kapitalisierung_keine').checked==true){kapitalisierungszeitraum='K';}

if (document.getElementById('option_tageberechnung_jahr_kalendermaessig').checked==true){tageberechnung_jahr='365';}
if (document.getElementById('option_tageberechnung_jahr_360').checked==true){tageberechnung_jahr='360';}

if (document.getElementById('option_tageberechnung_monat_kalendermaessig').checked==true){tageberechnung_monat='31';}
if (document.getElementById('option_tageberechnung_monat_30').checked==true){tageberechnung_monat='30';}

g_variablen_abschlusstag_verzinsen=false;
return err;
}

function bewegungen_zusammenstellen(){
    kapitalisierungstermine_berechnen();
    //bewegungen zusammenfassen und sortieren----------------------------
    //wenn periodenende nicht gleich der letzten Bewegung ist, dann eine Bewegung "Abschluß dazunehmen"
    if (g_variablen_periodenende!=bewegungen[0][bewegungen[0].length-1]){
        anzahl_bewegungen_kapitalisierungen=Number(1)+ Number(bewegungen[0].length) + Number(zinsaenderungen_soll[0].length)+Number(zinsaenderungen_haben[0].length)+Number(kapitalisierung[0].length);
    }else {
        anzahl_bewegungen_kapitalisierungen=Number(bewegungen[0].length) + Number(zinsaenderungen_soll[0].length)+Number(zinsaenderungen_haben[0].length)+Number(kapitalisierung[0].length);
    }
    j=0;
    i=0;
    for (i=0; i< zinsaenderungen_soll[0].length;i++){      //die Soll_zinssatzänderungen
        bewegungen_zusammen[0][j]=zinsaenderungen_soll[0][i];
        bewegungen_zusammen[1][j]=zinsaenderungen_soll[1][i];
        bewegungen_zusammen[2][j]=2;     //Code für zinsaenderung soll
        bewegungen_zusammen[3][j]="Zinsänderung Soll";     //keine Bedeutung
        j++;
    }
    for (i=0; i< zinsaenderungen_haben[0].length;i++){      //die haben_zinssatzänderungen
        bewegungen_zusammen[0][j]=zinsaenderungen_haben[0][i];
        bewegungen_zusammen[1][j]=zinsaenderungen_haben[1][i];
        bewegungen_zusammen[2][j]=3;     //Code für zinsaenderung haben
        bewegungen_zusammen[3][j]="Zinsänderung Haben";     //keine Bedeutung
        j++;
    }
    for (i=0; i< kapitalisierung[0].length;i++){      //die Kapitalisierungen
        bewegungen_zusammen[0][j]=kapitalisierung[0][i];
        bewegungen_zusammen[1][j]=kapitalisierung[1][i];
        bewegungen_zusammen[2][j]=1;     //Code für zinsaenderung kapitalisierung
        bewegungen_zusammen[3][j]="Kapitalisierung";     //keine Bedeutung
        j++;
    }

    for (i=0; i< bewegungen[0].length;i++){      //die Bewegungen
        bewegungen_zusammen[0][j]=bewegungen[0][i];
        bewegungen_zusammen[1][j]=bewegungen[1][i];
        bewegungen_zusammen[2][j]=0;     //Code für Bewegung
        if(bewegungen[2][i]==""){bewegungen_zusammen[3][j]="Bewegung";}
        else{bewegungen_zusammen[3][j]=bewegungen[2][i];}
        j++;
    }

    //wenn periodenende nicht gleich der letzten Bewegung ist, dann eine Bewegung "Abschluß dazunehmen"
        //if (g_variablen_periodenende!=bewegungen[0][bewegungen[0].length-1]){
        bewegungen_zusammen[0][j]=Number(10)+Number(g_variablen_periodenende);
        bewegungen_zusammen[1][j]=0;  //  0 Keine Bedeutung
        bewegungen_zusammen[2][j]=4;    // Code Zeichen für "Abschluß"
        bewegungen_zusammen[3][j]=0;    //
        j++;
        //}
    //Bewegungen sortieren-------------------------------------------------------------
        hilf=0;hilf_1=0; hilf_2=0;
        for(i=0;i<bewegungen_zusammen[0].length;i++) {
        for(j=i+1;j < bewegungen_zusammen[0].length;j++) {
        if(bewegungen_zusammen[0][i]>bewegungen_zusammen[0][j]) {
        hilf=bewegungen_zusammen[0][j]; hilf_2=bewegungen_zusammen[2][j];hilf_1=bewegungen_zusammen[1][j];hilf_3=bewegungen_zusammen[3][j];
        bewegungen_zusammen[0][j]=bewegungen_zusammen[0][i];
        bewegungen_zusammen[1][j]=bewegungen_zusammen[1][i];
        bewegungen_zusammen[2][j]=bewegungen_zusammen[2][i];
        bewegungen_zusammen[3][j]=bewegungen_zusammen[3][i];

        bewegungen_zusammen[0][i]=hilf; bewegungen_zusammen[1][i]=hilf_1; bewegungen_zusammen[2][i]=hilf_2;bewegungen_zusammen[3][i]=hilf_3;
        }
        }
        }
        //Kontrolle----------------------------------------

        //alert("anzahl beweigungen"+bewegungen_zusammen[0].length+" " +anzahl_bewegungen_kapitalisierungen);
        for (i=0;i<bewegungen_zusammen[0].length;i++){
            kontrolldatum=new Date();
            kontrolldatum.setTime(bewegungen_zusammen[0][i]);

            k_jahr=kontrolldatum.getFullYear();
            k_monat=kontrolldatum.getMonth()+1;
            k_tag=kontrolldatum.getDate();
            k_stunden=kontrolldatum.getHours();
            datum = k_tag + "." + k_monat+ "." + k_jahr+"stunde=  "+k_stunden;
            //alert("Kontrolle sortierte Bewegungen "  + datum + " Kapital " + bewegungen_zusammen[1][i]+" " + bewegungen_zusammen[2][i]);
        }

}

function kapitalisierungstermine_berechnen(){
    //kapitalisierungsdaten ermitteln----------------------------------------------------------------------------
    jahr=0;
    monat=0;
    tag=0;

    zw_sp_datum =new Date();
    zw_sp_datum.setHours(0, 0, 0, 0);
    k_datum=new Date();
    k_datum.setHours(0,0,0,0);
    zw_sp_datum.setTime(g_variablen_periodenbeginn)
    jahr=zw_sp_datum.getFullYear();
    monat=zw_sp_datum.getMonth()+Number(1);
    tag=zw_sp_datum.getDate();
    zeit_in_millisec=0;
    kapitalisierung_zaehler=0;
    switch (kapitalisierungszeitraum){
            case 'M':
                do {
                zeit_objekt=Tag_Ende_Monat(zw_sp_datum.getFullYear(),zw_sp_datum.getMonth());       //zurückgabe ist time in millisec
                k_datum.setTime(zeit_objekt);
                kapitalisierung[0][kapitalisierung_zaehler]=zeit_objekt;
                kapitalisierung[1][kapitalisierung_zaehler]=0;              //nicht wichtig
                kapitalisierung[2][kapitalisierung_zaehler]=1;              //Schlüssel für die Kapitalisierung
                zw_sp_datum.setFullYear(k_datum.getFullYear(),k_datum.getMonth(),k_datum.getDate()+1);
                zeit_in_millisec=zw_sp_datum.getTime();
                kapitalisierung_zaehler++                   //index weiterzählen
                } while (zeit_in_millisec < g_variablen_periodenende); //(Zinsende > DateAdd("d", -1, Zw_Sp_Datum)
                break;
            case 'V':
                do {
                zeit_objekt=naechstes_Quartal(zw_sp_datum.getFullYear(),zw_sp_datum.getMonth());
                k_datum.setTime(zeit_objekt);
                kapitalisierung[0][kapitalisierung_zaehler]=zeit_objekt;
                kapitalisierung[1][kapitalisierung_zaehler]=0;              //nicht wichtig
                kapitalisierung[2][kapitalisierung_zaehler]=1;              //Schlüssel für die Kapitalisierung
                zw_sp_datum.setFullYear(k_datum.getFullYear(),k_datum.getMonth(),k_datum.getDate()+1);
                zeit_in_millisec=zw_sp_datum.getTime();
                kapitalisierung_zaehler++                   //index weiterzählen
                } while (zeit_in_millisec < g_variablen_periodenende); //(Zinsende > DateAdd("d", -1, Zw_Sp_Datum)
                break;
            case 'H':
                do {
                zeit_objekt=naechstes_Halbjahr(zw_sp_datum.getFullYear(),zw_sp_datum.getMonth());
                k_datum.setTime(zeit_objekt);
                kapitalisierung[0][kapitalisierung_zaehler]=zeit_objekt;
                kapitalisierung[1][kapitalisierung_zaehler]=0;              //nicht wichtig
                kapitalisierung[2][kapitalisierung_zaehler]=1;              //Schlüssel für die Kapitalisierung
                zw_sp_datum.setFullYear(k_datum.getFullYear(),k_datum.getMonth(),k_datum.getDate()+1);
                zeit_in_millisec=zw_sp_datum.getTime();
                kapitalisierung_zaehler++                   //index weiterzählen
                } while (zeit_in_millisec < g_variablen_periodenende); //(Zinsende > DateAdd("d", -1, Zw_Sp_Datum)
                break;
            case 'J':
                do {
                zeit_objekt=naechstes_Jahresende(zw_sp_datum.getFullYear(),zw_sp_datum.getMonth());
                k_datum.setTime(zeit_objekt);
                kapitalisierung[0][kapitalisierung_zaehler]=zeit_objekt;
                kapitalisierung[1][kapitalisierung_zaehler]=0;              //nicht wichtig
                kapitalisierung[2][kapitalisierung_zaehler]=1;              //Schlüssel für die Kapitalisierung
                zw_sp_datum.setFullYear(k_datum.getFullYear(),k_datum.getMonth(),k_datum.getDate()+1);
                zeit_in_millisec=zw_sp_datum.getTime();
                kapitalisierung_zaehler++                   //index weiterzählen
                } while (zeit_in_millisec < g_variablen_periodenende); //(Zinsende > DateAdd("d", -1, Zw_Sp_Datum)
                break;
          }
}
