function zinsstaffel_berechnen()
{
    //zinsstaffel löschen
zeile_loeschen('tabelle_staffel','alle');
variablen_zuruecksetzen();

if (zinsstaffel_angaben_einlesen()!="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]);
    //alert (datum_probe.getDate()+"."+datum_probe.getMonth()+"."+datum_probe.getFullYear()+ " " +bewegungen_zusammen[1][i]+ " " +bewegungen_zusammen[2][i]+ " " +bewegungen_zusammen[3][i]);
}
ein_auszahlungen_berechnen();
//ergebnis ausdrucken
zeile_loeschen('tabelle_staffel','alle');
var staffelzeile=new Array(7);
var summe_soll=0;
var summe_haben=0;

//Ergebnisarray umkopieren, damit in der Ausgabe leere Zeilen (z. B. Zinssatzwechsel im soll bei habenstand) unterdrückt werden
var ergebnis_ausgabe=new Array;
ergebnis_ausgabe[0]=new Array;
ergebnis_ausgabe[1]=new Array;
ergebnis_ausgabe[2]=new Array;
ergebnis_ausgabe[3]=new Array;
ergebnis_ausgabe[4]=new Array;
ergebnis_ausgabe[5]=new Array;
ergebnis_ausgabe[6]=new Array;
ergebnis_ausgabe[7]=new Array;
ergebnis_ausgabe[8]=new Array;      //alten Index speichern, damit in der Ausgabe auf "bewegungen_zusammen" zugegriffen werden kann
var zaehler=0;
for (k=0;k<g_variablen_ergebnis[0].length;k++){
    //alle Bewegungen und, wenn alle, (Tage, Zinsen und %) größer 0 sind, dann kopieren
    if((bewegungen_zusammen[2][k]==0) || (g_variablen_ergebnis[5][k]!=0 && g_variablen_ergebnis[6][k]!=0 &&g_variablen_ergebnis[7][k]!=0)){
        for (l=0;l<8;l++){
            ergebnis_ausgabe[l][zaehler]=g_variablen_ergebnis[l][k]
        }
         ergebnis_ausgabe[8][zaehler]=k;      //index merken
         zaehler++;
    }
}
//alert(ergebnis_ausgabe[0].length);
//alert(ergebnis_ausgabe[7][0]);
//alert(millisec_to_datastring(ergebnis_ausgabe[0][0]));
for (k=0;k<ergebnis_ausgabe[0].length;k++){
    staffelzeile[0]=millisec_to_datastring(ergebnis_ausgabe[0][k]);
    //for (j=1;j < 5;j++){
    //soll und haben vertauscht wegen der Anzeige
       staffelzeile[1]= format_double_to_string(ergebnis_ausgabe[2][k],2);
       staffelzeile[2]= format_double_to_string(ergebnis_ausgabe[1][k],2);
       staffelzeile[3]= format_double_to_string(ergebnis_ausgabe[3][k],2);
       staffelzeile[4]= ergebnis_ausgabe[4][k];
    //}
    //letzte Zeile eins hochstellen, zeiel letzte Zeile +1 nicht mehr schreiben - sieht besser aus
    if (k<ergebnis_ausgabe[0].length){
        if(ergebnis_ausgabe[5][k+1]==undefined){staffelzeile[5]="";}
        staffelzeile[5]= ergebnis_ausgabe[5][k+1];
        staffelzeile[6]= ergebnis_ausgabe[6][k+1];
        staffelzeile[7]= format_double_to_string(ergebnis_ausgabe[7][k+1],2);
        //damit am Ende keine Ausgabe mehr erfolgt
        if(ergebnis_ausgabe[5][k+1]==undefined){staffelzeile[5]="-";}
        if(ergebnis_ausgabe[6][k+1]==undefined){staffelzeile[6]="-";}
        if(ergebnis_ausgabe[7][k+1]==undefined){staffelzeile[7]="-";}
    }
    //nicht alle anzeigen----------------------------------------------
    if ((ergebnis_ausgabe[0][k] > g_variablen_periodenbeginn)||(ergebnis_ausgabe[0][k] == g_variablen_periodenbeginn && bewegungen_zusammen[2][ergebnis_ausgabe[8][k]]==0)){  //wenn die Art "Bewegung" ist, dann anzeigen"
        //für die endummen
        summe_soll=Number(summe_soll)+Number(ergebnis_ausgabe[2][k]);
        summe_haben=Number(summe_haben)+Number(ergebnis_ausgabe[1][k]);
        //if (ergebnis_ausgabe[0][k] <= g_variablen_periodenende){
        staffel_schreiben('tabelle_staffel',staffelzeile);
    }

}

 //Summen bilden
            saldo_bewegungen=0;
            saldo_soll=0;
            saldo_haben=0;
            saldo_saldo=0;
            saldo_zinsen=0;
            zahl="";
            document.getElementById('tab_ergebnis_summe_saldo').innerHTML="<div align='right'>"+staffelzeile[3]+"</div>";
            document.getElementById('tab_ergebnis_summe_soll').innerHTML="<div align='right'>"+format_double_to_string(summe_soll,2)+"</div>";
            document.getElementById('tab_ergebnis_summe_haben').innerHTML="<div align='right'>"+format_double_to_string(summe_haben,2)+"</div>"; 


/*
for (k=0;k<g_variablen_ergebnis[0].length;k++){
    staffelzeile[0]=millisec_to_datastring(g_variablen_ergebnis[0][k]);
    //for (j=1;j < 5;j++){
    //soll und haben vertauscht wegen der Anzeige
       staffelzeile[1]= format_double_to_string(g_variablen_ergebnis[2][k],2);
       staffelzeile[2]= format_double_to_string(g_variablen_ergebnis[1][k],2);
       staffelzeile[3]= format_double_to_string(g_variablen_ergebnis[3][k],2);
       staffelzeile[4]= g_variablen_ergebnis[4][k];
    //}
    //letzte Zeile eins hochstellen, zeiel letzte Zeile +1 nicht mehr schreiben - sieht besser aus
    if (k<g_variablen_ergebnis[0].length){
        if(g_variablen_ergebnis[5][k+1]==undefined){staffelzeile[5]="";}
        staffelzeile[5]= g_variablen_ergebnis[5][k+1];
        staffelzeile[6]= g_variablen_ergebnis[6][k+1];
        staffelzeile[7]= format_double_to_string(g_variablen_ergebnis[7][k+1],2);
        //damit am Ende keine Ausgabe mehr erfolgt
        if(g_variablen_ergebnis[5][k+1]==undefined){staffelzeile[5]="-";}
        if(g_variablen_ergebnis[6][k+1]==undefined){staffelzeile[6]="-";}
        if(g_variablen_ergebnis[7][k+1]==undefined){staffelzeile[7]="-";}
    }
    //nicht alle anzeigen----------------------------------------------   
    if ((g_variablen_ergebnis[0][k] > g_variablen_periodenbeginn)||(g_variablen_ergebnis[0][k] == g_variablen_periodenbeginn && bewegungen_zusammen[2][k]==0)){  //wenn die Art "Bewegung" ist, dann anzeigen"
        //für die endummen
        summe_soll=Number(summe_soll)+Number(g_variablen_ergebnis[2][k]);
        summe_haben=Number(summe_haben)+Number(g_variablen_ergebnis[1][k]);
        //if (g_variablen_ergebnis[0][k] <= g_variablen_periodenende){
        staffel_schreiben('tabelle_staffel',staffelzeile);
    }

}

 //Summen bilden
            saldo_bewegungen=0;
            saldo_soll=0;
            saldo_haben=0;
            saldo_saldo=0;
            saldo_zinsen=0;
            zahl="";
            document.getElementById('tab_ergebnis_summe_saldo').innerHTML=staffelzeile[3];
            document.getElementById('tab_ergebnis_summe_soll').innerHTML=format_double_to_string(summe_soll,2);
            document.getElementById('tab_ergebnis_summe_haben').innerHTML=format_double_to_string(summe_haben,2);

/*
            jLabel_saldo_zahl.setText(formatierung.format_double_to_string(saldo_bewegungen,2));
            for (i=0;i<jTable_staffel.getRowCount();i++){
                if(jTable_staffel.getModel().getValueAt(i,1)!=null){
                    zahl=jTable_staffel.getModel().getValueAt(i,1).toString();
                    saldo_soll=saldo_soll+eigene_funktionen.string_mit_tausenderpunkt_als_double(zahl);}
                if(jTable_staffel.getModel().getValueAt(i,2)!=null){
                    zahl=jTable_staffel.getModel().getValueAt(i,2).toString();
                    saldo_haben=saldo_haben+eigene_funktionen.string_mit_tausenderpunkt_als_double(zahl);}
                if(jTable_staffel.getModel().getValueAt(i,7)!=null){
                    zahl=jTable_staffel.getModel().getValueAt(i,7).toString();
                    saldo_zinsen=saldo_zinsen+eigene_funktionen.string_mit_tausenderpunkt_als_double(zahl);}
            }

            jLabel_summen_zinsen.setText(formatierung.format_double_to_string(saldo_zinsen,2));
            jLabel_summen_soll.setText(formatierung.double_als_waehrungsstring(saldo_soll));
            jLabel_summen_haben.setText(formatierung.double_als_waehrungsstring(saldo_haben));
            //dez 2008 zinsensumme herausgenommen, da irritierend wg. teilweise kumulierter zinsen (z. B. bei Zinsänderungen)
            jLabel_summen_saldo.setText(formatierung.double_als_waehrungsstring(g_variablen.endsaldo));




*/
}

function zinsstaffel_angaben_einlesen()
	{
//Daten einlesen und bereinigen-----------------------------------------------------------------------------
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');     //sind global definiert und werden in der funktion neu geordnet
var zinsaenderungen_soll_=werte_aus_tabellen_in_array_schreiben('zinssatzaenderungen_soll');
if (zinsaenderungen_soll_.length==0){err="fehler";return err;}
for(i=0;i<zinsaenderungen_soll_.length;i++){
    split_string=zinsaenderungen_soll_[i].split("#");
    zinsaenderungen_soll[0][i]=split_string[0];
    zinsaenderungen_soll[1][i]=split_string[1];
}
array_sortiert_in_tabelle_schreiben(zinsaenderungen_soll, 'zinssatzaenderungen_soll');     //sind global definiert und werden in der funktion neu geordnet

var bewegungen_=werte_aus_tabellen_in_array_schreiben('tabelle_bewegungen');
if (bewegungen_.length==0){err="fehler";return err;}
for(i=0;i<bewegungen_.length;i++){
    split_string=bewegungen_[i].split("#");
    bewegungen[0][i]=split_string[0];
    bewegungen[1][i]=split_string[1];
    bewegungen[2][i]=split_string[2];
}
if(document.getElementById('text_datum_abschluss').value==""){		//Datum der letzten Bewegung auslesen-------
	document.getElementById('text_datum_abschluss').value=bewegungen[0][bewegungen[0].length-1];
}
g_variablen_periodenende=stringdate_to_millisec(document.getElementById('text_datum_abschluss').value)+Number(10);
array_sortiert_in_tabelle_schreiben(bewegungen, 'tabelle_bewegungen');     //sind global definiert und werden in der funktion neu geordnet
g_variablen_periodenbeginn=Number(bewegungen[0][0]);        //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';}

abschlusstag_verzinsen=false;
if (document.getElementById('checkbox_abschlusstag_verzinsen').checked==true){g_variablen_abschlusstag_verzinsen=true;}
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;
          }
}