/*----------------------------------------------------------------------------*\
 *
 * $Name: INSTALL_falcon_interhyp_de $
 * $Id: tilgungsplan_calculator_include.js,v 1.11 2001/07/25 13:06:40 ghuber Exp $
 * $Source: /home/cvs/IHP/ihyp/src/templates/tilgungsrechner/include/tilgungsplan_calculator_include.js,v $
 *
\*----------------------------------------------------------------------------*/

if(navigator.appVersion.substring(0,1) >= 4)  {var JavaVersion = 12;}

var mWindow;

// ####  Tilgungs Objects #####

var gTilgungsObj = null; // Globales Tilgungsobject von Prohyp
var gBankTilgungsObj = null; // Globales Tilgungsobject von der Bank




 // ################## Calculate  #########################
function Calculate(mDarlehensbetrag,mCurrency,mNominalzinssatz,mAnfangstilgungssatz,mLaufzeitJahre,mZahlungenprojahr,mAuszahlungsMonth,mAuszahlungsYear){
  // Object variables ###
  this.darlehensbetrag = mDarlehensbetrag;
  this.enddarlehen = mDarlehensbetrag;

  this.currency = mCurrency;
  this.nominalzinssatz = mNominalzinssatz;
  this.anfangstilgungssatz = mAnfangstilgungssatz;
  this.laufzeitJahre = mLaufzeitJahre;
  this.zahlungenprojahr = mZahlungenprojahr;
  this.auszahlungsMonth = mAuszahlungsMonth;
  this.auszahlungsYear = mAuszahlungsYear;

  mDataBase = null;  // Init Tilgungszins Object Array
  mDataBase = new Array();
  mDataCount = 0;

  var mMonthName = new Array("Dez.", "Jan.","Feb.","M&auml;r.","Apr.","Mai","Jun.","Jul.","Aug.","Sep.","Okt.","Nov","Dez.");

  mAuszahlungsDateString = mMonthName[mAuszahlungsMonth] + " " + mAuszahlungsYear;
  this.auszahlungsDateString = mAuszahlungsDateString;

  var mAnuitaet = (mAnfangstilgungssatz + mNominalzinssatz) * 1.00;
  this.anuitaet = mAnuitaet; // #### Store anuitaet in Object

  // ############ mZahlungenprojahr   ##############
  if (mZahlungenprojahr == 1) {gZahlungenprojahrString = "J&auml;hrlich";}
  if (mZahlungenprojahr == 2) {gZahlungenprojahrString = "Halbj&auml;hrlich";}
  if (mZahlungenprojahr == 4) {gZahlungenprojahrString = "Viertelj&auml;hrlich";}
  if (mZahlungenprojahr == 12) {gZahlungenprojahrString = "Monatlich";}



 // ############ mAnzahlZahlungen   ##############
  var mAnzahlZahlungen = mZahlungenprojahr * mLaufzeitJahre;

 // ################### BERECHNUNG der Ratenzahlung ######################
 var mRatenzahlung = Math.round(mDarlehensbetrag  * mAnuitaet / mZahlungenprojahr ) ; // ### FORMEL Ratenzahlung
 var mRatenzahlung = (mRatenzahlung + 0.00)/ 100

 this.anzahlZahlungen = mAnzahlZahlungen; // #### Store anzahlZahlungen in Object
 this.rate = mRatenzahlung; // #### Store ratenzahlung in Object


  // #### Zeitberechnung ###
  TimeNow = new Date();

  var mMonth = TimeNow.getMonth() + 1;

  var mYear = TimeNow.getYear();
  if (mYear < 1000 && mYear > 75) {
            mYear = mYear + 1900;
  } else {
      mYear = mYear;
  }

  var mTodayMonth = (mYear * 12) + mMonth;

 // #################   TILGUNGSPLAN  ####################

 var mGetilgterBetrag = 0;
 var mRestSchuld = mDarlehensbetrag;
 var mTilgung = 0;
 var mZinsen = 0;
 var mAbbezahlt = false;  // ## Flag for iterative Loop
 var i = 1;

 var mStartMonth = parseInt((mAuszahlungsYear * 12) + mAuszahlungsMonth); // ## Calculate Month

 // ### Handle Past Time Inputs ###
 if (mStartMonth < mTodayMonth) {
    var mDatum = mMonthName[mAuszahlungsMonth] + " " + mAuszahlungsYear;
         // alert("Achtung:\nIhr Auszahlungsdatum " + mDatum + " ist in der Vergangenheit.  Dies macht nur Sinn, wenn Sie ein bestehendes Darlehen berechnen wollen.");
 }
 var mPureMonthCounter = 0;



 // ############# ITERATIVE LOOP  ###############
 while(mAbbezahlt == false){

      var mZinsen = Math.round(mRestSchuld * mNominalzinssatz / mZahlungenprojahr);
      var mZinsen = mZinsen / 100;

      var mTilgung = Math.round((mRatenzahlung - mZinsen) * 100);
      var mTilgung = (mTilgung / 100) + 0.00;

      // ### Letzter Rest ###
      if (mRestSchuld - mTilgung <= 0) {

                var mZinsen = Math.round(mRestSchuld * mNominalzinssatz / mZahlungenprojahr);
                var mZinsen = mZinsen / 100;

        var mRatenzahlung = mRestSchuld + mZinsen;

              var mTilgung = Math.round((mRatenzahlung - mZinsen) * 100);
              var mTilgung = (mTilgung / 100) + 0.00;
              var mAbbezahlt = true;

      }

      var mRestSchuld = mRestSchuld - mTilgung; // ## Decrement mRestSchuld
      var mGetilgterBetrag = mGetilgterBetrag +  mTilgung; // ## Increment mGetilgterBetrag


      var mPureMonthCounter = mPureMonthCounter + (12 / mZahlungenprojahr); // ## Increment Month Counter

          // if we're dealing with <= 0% Tilgung we should stop after Maturity-Time
          if (mPureMonthCounter >= mAnzahlZahlungen && mAnfangstilgungssatz <= 0) {
                 gTilgungZero = true;
                   var mAbbezahlt = true;
          }

      var mRealYear = parseInt((mStartMonth + mPureMonthCounter - 1) / 12);
      var mRealMonth = parseInt((mStartMonth + mPureMonthCounter) - (mRealYear * 12));

      var mDatum = mMonthName[mRealMonth] + "&nbsp;" + mRealYear;


    // ### Sonderfall wenn volle Tilgung vor Laufzeit erreicht wurde ###
        // ### Ausname: Tilgung 0
    if (mAbbezahlt == true && mAnfangstilgungssatz > 0) {
                      var mRestSchuld = 0.00;
                      var mGetilgterBetrag = mDarlehensbetrag;
     }

      if (i <= mAnzahlZahlungen) {
              AddRecord(i,mDatum,mRestSchuld,mTilgung,mZinsen,mRatenzahlung);
              // ## mLastGetilgterBetrag Runden ###
              var mLastGetilgterBetrag = Math.round(mGetilgterBetrag * 100);
         var mLastGetilgterBetrag =        mLastGetilgterBetrag / 100;

          // ## mLastRestschuld Runden ###
              var mLastRestschuld = Math.round(mRestSchuld * 100);
              var mLastRestschuld = mLastRestschuld / 100;

              var mLastYear = mRealYear;
                 var mLastMonth = mRealMonth;

              var gLastTilgungsString = mDatum;
      }

      i ++;
 }


    var mPureMonthCounter = mPureMonthCounter; // Decrement um das letzte Monat
    var FinalTilgungsYear = parseInt( mPureMonthCounter / 12);
    var FinalTilgungsMonth = parseInt(mPureMonthCounter - (FinalTilgungsYear * 12));



    // ### Default Final TilgungsLength String ###
    if (FinalTilgungsYear == 1) {
            var mYearStr = "Jahr";
            var mYearPluralStr = "Jahr";
    } else {
            var mYearStr = "Jahre";
            var mYearPluralStr = "Jahren";
    }

    if (FinalTilgungsMonth == 1) {
            var mMonthStr = "Monat";
            var mMonthPluralStr = "Monat";
    } else {
            var mMonthStr = "Monate";
            var mMonthPluralStr = "Monaten";
    }

    var FinalTilgungsLengthString = FinalTilgungsYear + " " + mYearStr + " und " + FinalTilgungsMonth + " " + mMonthStr;
    var FinalTilgungsPluralLengthString = FinalTilgungsYear + " " + mYearPluralStr + " und " + FinalTilgungsMonth + " " + mMonthPluralStr;

    var mFinalRealYear = parseInt((mStartMonth + mPureMonthCounter) / 12);
    var mFinalRealMonth = parseInt((mStartMonth + mPureMonthCounter) - (mFinalRealYear * 12));
        if (mFinalRealMonth==0) {
                mFinalRealMonth = 12;
                mFinalRealYear--;
        }

    var FinalTilgungsDate = mMonthName[mFinalRealMonth] + " " + mFinalRealYear;

    //alert("TILGUNGSPLAN " + mLastRestschuld + " # " + mLastGetilgterBetrag + " \n FinalTilgungsDate " + FinalTilgungsDate);

    this.dataBase = mDataBase;
    this.lastRestschuld = mLastRestschuld;
        this.finalTilgungsDate = FinalTilgungsDate;
        this.finalTilgungsLengthString = FinalTilgungsLengthString;
        this.finalTilgungsPluralLengthString = FinalTilgungsPluralLengthString;
        this.finalRealMonth = mFinalRealMonth;
        this.finalRealYear = mFinalRealYear;



        this.lastTilgungsString = gLastTilgungsString;
        this.lastYear = mLastYear;
        this.lastMonth = mLastMonth;


        this.lastRestschuld = mLastRestschuld;
        this.lastGetilgterBetrag = mLastGetilgterBetrag;


    return this;

}

/****************************************************************
// function:      calculateTilgung()
// return type:   number - amortrate
// version: 1.0a
// date: 21/02/2001, ID: ak
***************************************************************/
function calculateTilgung(amount, nominalrate, monthlyrate, frequency) {
        return  ((100 * monthlyrate * frequency / amount) - nominalrate);
}

/****************************************************************
// function:      calculateRate()
// return type:   number - monthly rate
// version: 1.0a
// date: 21/02/2001, ID: ak
***************************************************************/
function calculateRate(amount, nominalrate, amortrate, frequency) {
        return Math.round( (amount  * (nominalrate + amortrate) / frequency) + 0.00) / 100;
}



/****************************************************************
// function:      AddRecord()
// return type:   null
// version: 1.0a
// date: 24/05/1998, ID: fk
***************************************************************/

function AddRecord(number,date,restschuld,tilgung,zinsen,ratenzahlung) {
        mDataBase[mDataCount] = new NewRecord(number,date,restschuld,tilgung,zinsen,ratenzahlung);
        mDataCount ++;
}

/****************************************************************
// function:      NewRecord()
// return type:   null
// version: 1.0a
// date: 24/05/1998, ID: fk
***************************************************************/

function NewRecord(number,date,restschuld,tilgung,zinsen,ratenzahlung) {
        this.number = number;
        this.date = date;
        this.restschuld = restschuld;
        this.tilgung = tilgung;
        this.zinsen = zinsen;
        this.ratenzahlung = ratenzahlung;
        return this;
}


  // ##############################
  // general functions
  // ##############################

  // ###############  KonvertFloatToString  ###############
 function KonvertFloatToString(mFloat) {
        var mNumber = Math.round(mFloat * 100);
    var mNumber =        mNumber / 100;

        var mString = "" + mNumber;

        var mZahlenArray = mString.split(".");

        if (mZahlenArray.length > 1) {
                        var VorKomma = mZahlenArray[0];
                        var NachKomma = mZahlenArray[1];

                        if (NachKomma.length == 1) {var NachKomma = NachKomma + "0";}
                        var mString = VorKomma + "." + NachKomma;
        } else {
                var mString = mString + ".00";
        }

        return mString;
}

// ################## KonvertStringToFloat  #########################
 function KonvertStringToFloat(mString) {

    // ### Get Value of Input Field ###//
         if(isNaN(mString) == false){
            var mValue = parseFloat(mString);
            if(isNaN(mValue)){
                     var mValue = 0;
            }
                  return mValue;
        } else {
                 // ### Convert , into . of Input Field ###//
                  var mZahlenString = "" + mString;
                 var Zahlen = mZahlenString.split(",");
                 if (Zahlen.length > 0) {
                         var mNewValue = Zahlen[0] + "." + Zahlen[1];
                         var mNewValue = parseFloat(mNewValue);

                                 if (isNaN(mNewValue) == true) {
                                         var mValue = 0;

                                         return mValue;
                                 }
                         return mNewValue;
                }
        }
 }

// #################### DotToKomma #####################

function DotToKomma(mZahl)

         {
        var mNumber = Math.round(mZahl * 100);
        var mNumber =        mNumber / 100;


         stringZahl = "" + mNumber;
         Komma = stringZahl.split(".");

         if (Komma.length > 1)
            {
             var VorKomma = Komma[0];
             var NachKomma = Komma[1];

             if (NachKomma.length == 1)
                {
                var NachKomma = NachKomma + "0";
                }
             var stringZahl = VorKomma + "," + NachKomma;
             }
         else
             {
            newZahl = stringZahl + ",00";
             }

         return stringZahl;
         }


