function GetGrossIncome(C4,C5) { //set C6
            // =C4+(C5*80%)
           
           var result = parseFloat(C4) + (parseFloat(C5) * 0.8);
           return Math.round(result);
           
        }

        function GetTaxDeductions(C2,C30,C31,C32,F18) { //C7
            // =IF($C$31="Investment",($F$18+($C$30*$C$32))/$C$2,(F18/C2))
            var result;
            if (C31 == "Investment") {
                result = (parseFloat(F18) + ((parseFloat(C30) * parseFloat(C32))/100)) / parseFloat(C2);
            }
            else {
                result= parseFloat(F18) / parseFloat(C2);
            }
            return Math.round(result);
        }

        function GetTaxableIncome(C6,C7) { //set C8
            //=C6-C7
           
            var result = parseFloat(C6) - parseFloat(C7);
            return Math.round(result);
           
        }

        function GetNetIncome(C8) { //Set C9
            //=C8-(IF(C8<6001,0,IF(C8<=37000,(C8-6000)*0.15,IF(C8<=80000,4650+(C8-37000)*0.3,IF(C8<=180000,17550+(C8-80000)*0.37,IF(C8>=180000,54550+(C8-180000)*0.45)))))+C8*0.015)
                           
            var deductAmount;
          
            if (parseFloat(C8) < 6001) { //
                deductAmount = 0;
            }
            else if (parseFloat(C8) <= 37000) { //
                deductAmount = (parseFloat(C8) - 6000) * 0.15;
            }
            else if (parseFloat(C8) <= 80000) //
            {
                deductAmount = 4650 + (parseFloat(C8) - 37000) * 0.3;
            }
            else if (parseFloat(C8) <= 180000) {
                deductAmount = 17550 + (parseFloat(C8) - 80000) * 0.37;
            }
            else if (parseFloat(C8) >= 180000) //
            {
                deductAmount = 54550 + (parseFloat(C8) - 180000) * 0.45;
            }
            else {
                deductAmount = 0;
            }

            deductAmount = deductAmount + (parseFloat(C8) * 0.015);
            var result = parseFloat(C8) - parseFloat(deductAmount);
            return Math.round(result);

        }

        function GetTotalNetIncome(C2,C9,D9,E9,F9) { //F11
            //=IF($C$2=1,C9,IF($C$2=2,C9+D9,IF($C$2=3,C9+D9+E9,C9+D9+E9+F9)))/12

            if (C2 == 1) {
                return Math.round(parseFloat(C9)/12);
            }
            else if (C2 == 2) {
                return Math.round((parseFloat(C9) + parseFloat(D9)) / 12);
            }
            else if (C2 == 3) {
                return Math.round((parseFloat(C9) + parseFloat(D9) + parseFloat(E9)) / 12);
            }
            else {
                return Math.round((parseFloat(C9) + parseFloat(D9) + parseFloat(E9) + parseFloat(F9)) / 12);
            }

        }

        function GetAnnualDeductableInterest(C18,D18) { //F18
            //=C18*D18

            return Math.round((parseFloat(C18) * parseFloat(D18))/100);
        }

        function GetMonthlyCommitmentForCC(D22) { //E22
            //=D22*3%
            return Math.round(parseFloat(D22) * 0.03);
        }

        function GetTotalMonthlyOutgoings(E17,E18,E20,E22) { //F24
            //=E17+E18+E20+E22
            return Math.round(parseFloat(E17) + parseFloat(E18) + parseFloat(E20) + parseFloat(E22));
        }

        function GetMinimumLivingExpenses(C2,C14) { //F25
            //=(IF($C$2=1,14191+($C$14*5014),IF($C$2=2,20632+($C$14*5014),IF($C$2>2,(($C$2-1)*14191+6441)+($C$14*5014),0))))/12

            if (C2 == 1) {
                return Math.round((14191 + (parseFloat(C14) * 5014)) / 12);
            }
            if (C2 == 2) {
                return Math.round((20632 + (parseFloat(C14) * 5014)) / 12);
            }
            if (C2 > 2) {
                ((C2 - 1) * 14191 + 6441) + (C14 * 5014)
                return Math.round((((parseFloat(C2) - 1) * 14191 + 6441) + (parseFloat(C14) * 5014)) / 12);
            }
            else {
                return 0;
            }
        }

        function GetMonthlySurplusForLoan(F11,F24,F25) { //F28
            //=F11-F24-F25
            return Math.round(parseFloat(F11)-parseFloat(F24)-parseFloat(F25));
        }

        function GetRepaymentPeriod(C35) { //D35
            //=IF(C35="Weekly",52,IF(C35="Fortnightly",26,12))
            if (C35 == "Weekly") {
                return 52;
            }
            else if (C35 == "Fortnightly") {
                return 26;
            }
            else {
                return 12;
            }
        }
        function GetNewLoanRepayments(C30,C32,C33,C34,C35,D35) { //C37
            //=IF($C$34="Principle and Interest",-PMT($C$32/$D$35,$C$33*$D$35,$C$30,0,0),($C$30*$C$32/$D$35))
            
            if (C34 == "Principle and Interest") {

                return PmtCalculation(parseFloat(C32)/parseFloat(D35),parseFloat(C33) * parseFloat(D35),parseFloat(C30));
                       
            }
            else {
                C32 = parseFloat(C32/100);
                return Math.round((parseFloat(C30) * parseFloat(C32) / parseFloat(D35)));
            }
            

        }

       function GetNewLoanMonthlyPayments(C30,C32,C33,C34) { //C38
            //=IF($C$34="Principle and Interest",-PMT($C$32/12,$C$33*12,$C$30,0,0),($C$30*$C$32/12))
            if (C34 == "Principle and Interest") {

                return PmtCalculation(parseFloat(C32) / 12, parseFloat(C33) * 12, parseFloat(C30));

            }
            else {
                C32 = parseFloat(C32/100);
                return Math.round((parseFloat(C30) * parseFloat(C32) / 12));
            }
           
        }
        function GetRequiredLoanPossible(C37,F28) { //C39
            //=IF(C37<F28,"YES","NO")

            if (parseFloat(C37) < parseFloat(F28)) {
                return "YES";
            }
            else {
                return "NO";
            }

        }

        function GetMaximumLoanPossible(C32,C33,F28) { //*****C41
            //=-PV($C$32/12,$C$33*12,$F$28,0,0)
            //PV(rate,nper,pmt,fv,type)

            return PVCalculation(parseFloat(C32)/12,parseFloat(C33)*12,parseFloat(F28));
        }

         function GetMaxLoanMonthlyPayments(C32,C41) { //F41
            //=-PMT(C32/12,360,C41,0,0)
            return PmtCalculation(parseFloat(C32) / 12, 360, parseFloat(C41));
            
        }
        function PmtCalculation(Interestrate, Period, Principalamount) {

        Interestrate = parseFloat(Interestrate/100);
        var i=parseFloat(Interestrate); //(should be already divided by 100 e.g 7.5/100=0.075 )
        var n=parseInt(Period);
        var p=parseFloat(Principalamount);

        //var pmt = i * p * Math.pow((1 + i), n) / (1 – Math.pow((1 + i), n));
          var pmt = i * p * Math.pow((1 + i), n) / (1-Math.pow((1 + i), n));
          pmt = -pmt;
          return Math.round(pmt);
      }
      
      function PVCalculation(rate, nper, pmt) {
          rate = parseFloat(rate/100);  
          var pv = pmt / rate * (1 - Math.pow(1 + rate, -nper));
          return Math.round(pv);
      }
  function pv(rate,nper,pmt,fv,type)
  { 
    if(!isFinite(type)||!isFinite(fv)||!isFinite(pmt)||!isFinite(nper)||!isFinite(rate))
        return Number.NaN;
        if(rate ==0 )
            return-(fv+nper*pmt);
            var type1=(type!=0)?1:0;
            var pvif=Math.pow(1+rate,nper);
            var fvifa=(Math.pow(1+rate,nper)-1)/rate;
            if(pvif==0)
                return Number.NaN;
                return((-fv-pmt*(1+rate*type)*fvifa)/pvif);
  }
