var formName='installmentForm2';
var Q1selc=false, Q2selc=false;
/* Apollo add this line */
var outputTable = 'TblDetail';
var IsShowPortion = true;

// variables for new content
var newTotalTenure, newOutstandingAmt;

function getQryStr() { //get qry str from /tools/installmentcalculator/ to /tool/installmentcalculator/answer/
	if (location.search) { //answer/index.html?p=1&image.x=37&image.y=11
		var aryNmValPair = location.search.substring(1).split('&');
		
		for (var i=0; i<aryNmValPair.length; i++) {
			var nmValPair = aryNmValPair[i].split('=');
			if (nmValPair[0]=='p' && nmValPair[1]==1) Q1selc=true;
			else if (nmValPair[0]=='p' && nmValPair[1]==2) Q2selc=true;
			else if (nmValPair[0]=='ss' && nmValPair[1]==0) IsShowPortion=false; //show subtotal(s)
		}
	}
}

function formValidator1(formName) {
	if (!formName.p1.checked && !formName.p2.checked){
		alert("Please select a product to continue.");
		formName.p1.focus();
		return false;
	} 
	else {
		var Qselc= new Array();
		if (formName.p1.checked) Qselc.push("p1");
		if (formName.p2.checked) Qselc.push("p2");
		var url="/sg/realtyeasy/tools/installmentcalculator/answer/index.html?Qselc=" + Qselc; //var url="/sg/realtyeasy/tools/installmentcalculator/answer/index.html?Qselc=" + Qselc;
		formName.action=url;
		return true;
	}
}

/* Apollo added this function */
function validateInterest (interest)
{
   if (interest <= 0 || interest > 100)
      return false;
   return true;
}

function formvalidator2(QNumber) {
	
	if(QNumber == 1)
	{      
	      if (!getTFValue(formName,'LoanYearsLeft')
	            || getTFValue(formName, 'LoanYearsLeft') > 35
	            || getTFValue(formName, 'LoanYearsLeft') < 1)
	      {
	         alert('Please enter a valid "Loan Tenure"');
	      }
	      else if (!getTFValue(formName,'OutstandingAmt')) 
	      {
	      	alert('Please enter a valid "Loan Amount"');
	      }
	      else if (!getTFValue(formName, 'interest1')
	            || !validateInterest(getTFValue(formName, 'interest1')))
	         alert("Please enter a valid interest (Year 1)");
	      else if (!getTFValue(formName, 'interest2')
	            || !validateInterest(getTFValue(formName, 'interest2')))
	         alert("Please enter a valid interest (Year 2)");
	      else if (!getTFValue(formName, 'interest3')
	            || !validateInterest(getTFValue(formName, 'interest3')))
	         alert("Please enter a valid interest (Year 3)");
	      else if (!getTFValue(formName, 'interest4')
	            || !validateInterest(getTFValue(formName, 'interest4')))
	         alert("Please enter a valid interest (Year 4)");
	      else if (!getTFValue(formName, 'interest5')
	            || !validateInterest(getTFValue(formName, 'interest5')))
	         alert("Please enter a valid interest (Year 5)");
	      else if (!getTFValue(formName, 'interest6')
	            || !validateInterest(getTFValue(formName, 'interest6')))
	         alert("Please enter a valid interest (Year 6)");
	      else if (!getTFValue(formName, 'interest7')
	            || !validateInterest(getTFValue(formName, 'interest7')))
	         alert("Please enter a valid interest (Year 7)");
	      else if (!getTFValue(formName, 'interest8')
	            || !validateInterest(getTFValue(formName, 'interest8')))
	         alert("Please enter a valid interest (Year 8)");
	      else if (!getTFValue(formName, 'interest9')
	            || !validateInterest(getTFValue(formName, 'interest9')))
	         alert("Please enter a valid interest (Year 9)");
	      else if (!getTFValue(formName, 'interest10')
	            || !validateInterest(getTFValue(formName, 'interest10')))
	         alert("Please enter a valid interest (Year 10)");
	      else if (!getTFValue(formName, 'interest11')
	            || !validateInterest(getTFValue(formName, 'interest11')))
	         alert("Please enter a valid interest (Year 11)");
//	         
//	      else if(!getTFValue(formName, 'YearStart')
//	            || getTFValue(formName, 'YearStart') > 35
//	            || getTFValue(formName, 'YearStart') < 1)
//	         alert('Please enter a valid "From Year"');
//	      else if(!getTFValue(formName, 'YearEnd')
//	            || getTFValue(formName, 'YearEnd') > 35
//	            || getTFValue(formName, 'YearEnd') < 1)
//	         alert('Please enter a valid "to Year"');
	      /* <<<< */
	      else return true;
	}
	if(QNumber == 2)
	{      
	      if (!getTFValue(formName,'HDBLoanYearsLeft')
	         || getTFValue(formName,'HDBLoanYearsLeft') > 35
	         || getTFValue(formName,'HDBLoanYearsLeft') < 1)
	            alert('Please enter a valid "Loan Tenure"');
	      else if (!getTFValue(formName,'HDBOutstandingAmt')) alert('Please enter a valid "Loan Amount"');
	      /* Apollo added these lines >>>> */
	      else if (!getTFValue(formName, 'interestHDB1')
	            || !validateInterest(getTFValue(formName, 'interestHDB1')))
	         alert("Please enter a valid interest (Year 1)");
	      else if (!getTFValue(formName, 'interestHDB2')
	            || !validateInterest(getTFValue(formName, 'interestHDB2')))
	         alert("Please enter a valid interest (Year 2)");
	      else if (!getTFValue(formName, 'interestHDB3')
	            || !validateInterest(getTFValue(formName, 'interestHDB3')))
	         alert("Please enter a valid interest (Year 3)");
	      else if (!getTFValue(formName, 'interestHDB4')
	            || !validateInterest(getTFValue(formName, 'interestHDB4')))
	      {	         
	         alert("Please enter a valid interest (Year 4)");
	      }
	      else if (!getTFValue(formName, 'interestHDB5')
	            || !validateInterest(getTFValue(formName, 'interestHDB5')))
	         alert("Please enter a valid interest (Year 5)");
	      else if (!getTFValue(formName, 'interestHDB6')
	            || !validateInterest(getTFValue(formName, 'interestHDB6')))
	         alert("Please enter a valid interest (Year 6)");
	      else if (!getTFValue(formName, 'interestHDB7')
	            || !validateInterest(getTFValue(formName, 'interestHDB7')))
	         alert("Please enter a valid interest (Year 7)");
	      else if (!getTFValue(formName, 'interestHDB8')
	            || !validateInterest(getTFValue(formName, 'interestHDB8')))
	         alert("Please enter a valid interest (Year 8)");
	      else if (!getTFValue(formName, 'interestHDB9')
	            || !validateInterest(getTFValue(formName, 'interestHDB9')))
	         alert("Please enter a valid interest (Year 9)");
	      else if (!getTFValue(formName, 'interestHDB10')
	            || !validateInterest(getTFValue(formName, 'interestHDB10')))
	         alert("Please enter a valid interest (Year 10)");
	      else if (!getTFValue(formName, 'interestHDB11')
	            || !validateInterest(getTFValue(formName, 'interestHDB11')))
	         alert("Please enter a valid interest (Year 11)");	      
	      
//	      else if(!getTFValue(formName, 'YearStart')
//	         || getTFValue(formName, 'YearStart') > 35
//	         || getTFValue(formName, 'YearStart') < 1)
//	            alert('Please enter a valid "From Year"');
//	      else if(!getTFValue(formName, 'YearEnd')
//	         || getTFValue(formName, 'YearEnd') > 35
//	         || getTFValue(formName, 'YearEnd') < 1)
//	            alert('Please enter a valid "to Year"');
      		/* <<<< */
              else return true;
	}
	return false;
}

function calculate(QuestionNumber)
{
	// Sub Total(s)
	var intFirst3YrsOfPrincPaid = 0, intFirst3YrsOfInterestPaid = 0, intFirst3YrsOfInstalment = 0
	
	var intSubTotal0OfPrincPaid = 0, intSubTotal0OfInterestPaid = 0, intSubTotal0OfInstalment = 0; // year 1 <-> year X to display
	var intSubTotalOfPrincPaid = 0, intSubTotalOfInterestPaid = 0, intSubTotalOfInstalment = 0; // year 1 <-> year end to display
	var intSubTotal2OfPrincPaid = 0, intSubTotal2OfInterestPaid = 0, intSubTotal2OfInstalment = 0; // (year end + 1) to display <-> total tenor
	var intSubTotalOfAllPrincPaid = 0, intSubTotalOfAllInterestPaid = 0, intSubTotalOfAllInstalment = 0; // year 1 <-> total tenor
	var totalBalance = 0, averageBalance = 0, EIR = 0; //EIR = Effective Interest Rate		
			
	if (formvalidator2(QuestionNumber)==true)
	{  
		//validate the form
		if(QuestionNumber==1) {
         
	    var Period = parseInt(getTFValue(formName,'LoanYearsLeft')) * 12;
	    var OutstandingAmt = parseFloat(trimCommas(getTFValue(formName,'OutstandingAmt')));
	    newOutstandingAmt = OutstandingAmt;
         
         for (var h=0; h<11; h++)
         {
         	DBSRate[h] = getTFValue(formName, 'interest' + (h+1));
         }
//         DBSRate[0] = getTFValue(formName, 'interest1');
//         DBSRate[1] = getTFValue(formName, 'interest2');
//         DBSRate[2] = getTFValue(formName, 'interest3');
//         DBSRate[3] = getTFValue(formName, 'interest4');
         
         setTFValue(formName, 'YearEnd', Period/12);

         /* Apollo added this block >>>> */
         var yearStart = getTFValue(formName, 'YearStart');
         var yearEnd = getTFValue(formName, 'YearEnd');      
         
         if(yearEnd > Period/12)
         {
            yearEnd = Period/12;
            setTFValue(formName, 'YearEnd', yearEnd);
         }         
         
         /* Clear table content */
         clearDetailsTable();

         var installResult = calculateTotalInstall(Period, OutstandingAmt, "Private", "normal");	
         var interestResult = calculateInterest(DBSRate, Period, OutstandingAmt, installResult);
         
         var arrMthlyInstalment, arrCurRates;
         	
         for(var i = 1; i <= Period/12; i++) // modified by Gyl on 18 April 2007.
         {
            var resultIndex = i-1; // <= 11 ? (i - 1) : 10;
            var interestOfYear = 0;
            
            if (i >= yearStart && i <= yearEnd)
            {
               interestOfYear = drawDetailsOfYear(i, installResult[resultIndex],
                                                  interestResult[i - 1], OutstandingAmt);
            }
            else
            {
               for(var j = 0; j < interestResult[i - 1].length; j++)
               {                  
                  interestOfYear += interestResult[i - 1][j];
               }
            }
            OutstandingAmt -= installResult[resultIndex] * 12 - interestOfYear;
            
            // reverse if isntallment is negative.                      
            var curYearInstalment = 0;
           if (OutstandingAmt < 0)
           {
           	curYearInstalment = installResult[resultIndex]*12 + OutstandingAmt; //deduct the final monthly instalment.
           }
           else
           {
           	curYearInstalment = installResult[resultIndex]*12;
           }
                     
           // accumulate amount payable in the first 3* years
           if (i <= 3)
           {
           	intFirst3YrsOfInterestPaid += interestOfYear;
           	intFirst3YrsOfInstalment += curYearInstalment;
           	intFirst3YrsOfPrincPaid += curYearInstalment - interestOfYear;
           }
           
             if ((i == 3) && IsShowPortion)
	       {
	            var table = document.getElementById(outputTable);                       
		        var row = null;
		        var td = null;
		    
	            	row = table.insertRow(table.rows.length);
	            	row.className = "subTotalTr";           	
	            		    
		        td = row.insertCell(0);
    		    
		        td.className = "MCcellFormTextPad";
		        td.width = "31%";	   
		        td.colSpan = "2";	        
		    
		        var yearMinus = 3;
		        td.innerHTML = "Sub-total (Year 1-" + yearMinus + ")";
    		    
		        td = row.insertCell(1);		       
		        td.width = "18%";
		        td.align = "center";	        
		        
		        td.innerHTML = formatNum(intFirst3YrsOfPrincPaid,2);
    		    
		        td = row.insertCell(2);
		        td.width = "20%";
		        td.align = "center";
		    
		        td.innerHTML = formatNum(intFirst3YrsOfInterestPaid,2);
    		    
		        td = row.insertCell(3);
		        td.width = "18%";
		        td.align = "center";
		    
		        td.innerHTML = formatNum(intFirst3YrsOfInstalment,2);
		        
		        td = row.insertCell(4);
		        td.width = "18%";
		        td.align = "center";		        
	       }	              	
            
            ///* e.g. Tenure 30, from year 3 to 10
            if (yearStart > 1 && i < yearStart) // 1-2
            {
            	intSubTotal0OfInterestPaid += interestOfYear;
            	intSubTotal0OfInstalment += curYearInstalment;            
            	intSubTotal0OfPrincPaid += curYearInstalment - interestOfYear;            	
            }
            else if(i >= 4 && i <= yearEnd) // 3-10
            {               	
            	intSubTotalOfInterestPaid += interestOfYear;
            	intSubTotalOfInstalment += curYearInstalment;            
            	intSubTotalOfPrincPaid += curYearInstalment - interestOfYear;
            }
            else //11-30
            {
            	intSubTotal2OfInterestPaid += interestOfYear;
            	intSubTotal2OfInstalment += curYearInstalment;      
            	intSubTotal2OfPrincPaid += curYearInstalment - interestOfYear;
            }
            //*/
                     
            // accumulate Sub-total
            intSubTotalOfAllInterestPaid += interestOfYear;
            intSubTotalOfAllInstalment += curYearInstalment;            
            intSubTotalOfAllPrincPaid += curYearInstalment - interestOfYear;
	    
            if(OutstandingAmt <= 0)
            {
               break;
            }
            else
            {
            	totalBalance += OutstandingAmt;
            }
            
            if(interestOfYear == 0)
            {
               break;
            }
         }
         /* <<<< */
         	arrMthlyInstalment = installResult;
           	arrCurRates = DBSRate;
         	
		} // end 1st if of HDB Flat. 
		else if(QuestionNumber==2) {
         /* Apollo deleted these lines
			var Scheme = getDLValue(formName,'HDBLoanScheme');
			var Status = getDLValue(formName,'HDBLoanStatus');
         */
			var RemainingLoanTenure = parseInt(getTFValue(formName,'HDBLoanYearsLeft')) * 12;
			var RemainingLoanAmount = parseFloat(trimCommas(getTFValue(formName,'HDBOutstandingAmt')));
         
         		newOutstandingAmt = RemainingLoanAmount;
         		
         		setTFValue(formName, 'YearEnd', RemainingLoanTenure/12);
         		
         for (var h=0; h<11; h++)
         {
         	DBSRateForHDB[h] = getTFValue(formName, 'interestHDB' + (h+1));
         }
         
//         DBSRateForHDB[0] = getTFValue(formName, 'interestHDB1');
//         DBSRateForHDB[1] = getTFValue(formName, 'interestHDB2');
//         DBSRateForHDB[2] = getTFValue(formName, 'interestHDB3');
//         DBSRateForHDB[3] = getTFValue(formName, 'interestHDB4');
		
         /* Apollo added this block >>>> */
         var yearStart = getTFValue(formName, 'YearStart');
         var yearEnd = getTFValue(formName, 'YearEnd');
         if(yearEnd > RemainingLoanTenure / 12) {
            yearEnd = RemainingLoanTenure / 12;
            setTFValue(formName, 'YearEnd', yearEnd);
         }
         /* Clear table content */
         clearDetailsTable();
        
         var installResult = calculateTotalInstall(RemainingLoanTenure, RemainingLoanAmount, "HDB", "normal");	
         var interestResult = calculateInterest(DBSRateForHDB, RemainingLoanTenure, RemainingLoanAmount, installResult);	
         for(var i = 1; i <= RemainingLoanTenure/12; i++) // modified by Gyl, now it calculates entire tenor instead of till yearEnd.
         {
            var resultIndex = i-1; // <= 11 ? (i - 1) : 10;
            var interestOfYear = 0;
            if(i >= yearStart && i <= yearEnd)
            {
               	interestOfYear = drawDetailsOfYear(i, installResult[resultIndex],interestResult[i - 1], RemainingLoanAmount);          	
            }
            else
            {
               for(var j = 0; j < interestResult[i-1].length; j++)
               {                  
                  interestOfYear += interestResult[i-1][j];
               }
            }
            
            RemainingLoanAmount -= installResult[resultIndex]*12 - interestOfYear;
          
           var curYearInstalment = 0;
           if (RemainingLoanAmount < 0)
           {
           	curYearInstalment = installResult[resultIndex]*12 + RemainingLoanAmount;
           }
           else
           {
           	curYearInstalment = installResult[resultIndex]*12;
           }
                     
           // accumulate amount payable in the first 3* years
           if (i <= 3)
           {
           	intFirst3YrsOfInterestPaid += interestOfYear;
           	intFirst3YrsOfInstalment += curYearInstalment;
           	intFirst3YrsOfPrincPaid += curYearInstalment - interestOfYear;
           }
           
           if ((i == 3) && IsShowPortion)
	       {
	            var table = document.getElementById(outputTable);                       
		        var row = null;
		        var td = null;
		    
	            	row = table.insertRow(table.rows.length);
	            	row.className = "subTotalTr";
	            		    
		        td = row.insertCell(0);
		    
		        td.className = "MCcellFormTextPad";
		        td.width = "31%";
		   
		        td.colSpan = "2";
		    
		        var yearMinus = 3;
		        td.innerHTML = "Sub-total (Year 1-" + yearMinus + ")";
		    
		        td = row.insertCell(1);
		        td.width = "18%";
		        td.align = "center";
		    
		        td.innerHTML = formatNum(intFirst3YrsOfPrincPaid,2);
		    
		        td = row.insertCell(2);
		        td.width = "20%";
		        td.align = "center";
		    
		        td.innerHTML = formatNum(intFirst3YrsOfInterestPaid,2);
		    
		        td = row.insertCell(3);
		        td.width = "18%";
		        td.align = "center";
		    
		        td.innerHTML = formatNum(intFirst3YrsOfInstalment,2);
		        
		        td = row.insertCell(4);
		        td.width = "18%";
		        td.align = "center";
	       }          	
           
            if (yearStart > 1 && i < yearStart)
            {
            	intSubTotal0OfInterestPaid += interestOfYear;
            	intSubTotal0OfInstalment += curYearInstalment;            
            	intSubTotal0OfPrincPaid += curYearInstalment - interestOfYear;          	
            }
            else if(i >= 4 && i <= yearEnd)
            {               	
            	intSubTotalOfInterestPaid += interestOfYear;
            	intSubTotalOfInstalment += curYearInstalment;            
            	intSubTotalOfPrincPaid += curYearInstalment - interestOfYear;
            }
            else 
            {
            	intSubTotal2OfInterestPaid += interestOfYear;
            	intSubTotal2OfInstalment += curYearInstalment;            
            	intSubTotal2OfPrincPaid += curYearInstalment - interestOfYear;
            }
                     
            // accumulate Sub-total
            intSubTotalOfAllInterestPaid += interestOfYear;
            intSubTotalOfAllInstalment += curYearInstalment;            
            intSubTotalOfAllPrincPaid += curYearInstalment - interestOfYear;                    
            
            if(RemainingLoanAmount <= 0)
            {
               break;
            }
            else
            {
            	totalBalance += RemainingLoanAmount;
            }
            
            if(interestOfYear == 0)
            {
               break;
            }
         }  
         
         arrMthlyInstalment = installResult;
         arrCurRates = DBSRateForHDB;
         
         /* <<<< */
	} // end if Q2 - HDB Flat
		    
	    /* if yearEnd = total tenure, ignore this part */	    
	    var table = document.getElementById(outputTable);                      
	    var row = null;
	    var td = null;
	    var totalTenure = null;
	    
	    if (Period) // PrivateProperty
	    {
	    	totalTenure = Period/12;	    	
	    }	    
	    else if (RemainingLoanTenure) // HDB
	    {
	    	totalTenure = RemainingLoanTenure/12;    	
	    }
	    
	    // get total tenure to pass to new page.
	    newTotalTenure = totalTenure;
	    
	    if ((yearEnd >= 4) && IsShowPortion)
	    {
		    /* Sub total (Part-1)*/
		    row = table.insertRow(table.rows.length);	 // add new row at the end.		        
		    row.className = "subTotalTr";
		    
		    td = row.insertCell(0);
		    
		    td.className = "MCcellFormTextPad";
		    td.width = "31%";
		   
		    td.colSpan = "2";
		    td.innerHTML = "Sub-total (Year 4-" + yearEnd + ")";
		   
		    td = row.insertCell(1);
		    td.width = "18%";
		    td.align = "center";
		    
		    td.innerHTML = formatNum(intSubTotalOfPrincPaid,2);
		    
		    td = row.insertCell(2);
		    td.width = "20%";
		    td.align = "center";
		    
		    td.innerHTML = formatNum(intSubTotalOfInterestPaid,2);
		    
		    td = row.insertCell(3);
		    td.width = "18%";
		    td.align = "center";
		    
		    td.innerHTML = formatNum(intSubTotalOfInstalment,2);
		    
		    td = row.insertCell(4);
		    td.width = "18%";
		    td.align = "center";		
		}
		
	if ((yearEnd < totalTenure) && !IsShowPortion)
	{    
		    /* Sub Total (part-2) */
		    row = table.insertRow(table.rows.length);
		    row.className = "subTotalTr";
		    
		    td = row.insertCell(0);
		    
		    td.className = "MCcellFormTextPad";
		    td.width = "31%";
		   
		    td.colSpan = "2";
		    var yearEndPlus = 4;
		    
		    td.innerHTML = "Sub-total (Year " + yearEndPlus + "-" + totalTenure + ")";
		   
		    td = row.insertCell(1);
		    td.width = "18%";
		    td.align = "center";
		    
		    td.innerHTML = formatNum(intSubTotal2OfPrincPaid,2);
		    
		    td = row.insertCell(2);
		    td.width = "20%";
		    td.align = "center";
		    
		    td.innerHTML = formatNum(intSubTotal2OfInterestPaid,2);
		    
		    td = row.insertCell(3);
		    td.width = "18%";
		    td.align = "center";
		    
		    td.innerHTML = formatNum(intSubTotal2OfInstalment,2);
		    
		    td = row.insertCell(4);
	            td.width = "18%";
	            td.align = "center";
	    }
	    
	    // Total
	    row = table.insertRow(table.rows.length);
	    td = row.insertCell(0);
	    
	    td.className = "MCcellFormTextPad";
	    td.width = "31%";
	   
	    td.colSpan = "2";
	    td.innerHTML = "Total";
	   
	    td = row.insertCell(1);
	    td.width = "18%";
	    td.align = "center";
	    
	    var a = formatNum(intSubTotalOfAllInstalment,2).replace(/,/g, "");
	    var b = formatNum(intSubTotalOfAllInterestPaid,2).replace(/,/g, "");

	    intSubTotalOfAllPrincPaid = a-b;
	    td.innerHTML = formatNum(intSubTotalOfAllPrincPaid, 2);
	    
	    td = row.insertCell(2);
	    td.width = "20%";
	    td.align = "center";
	    
	    td.innerHTML = formatNum(intSubTotalOfAllInterestPaid,2);
	    
	    td = row.insertCell(3);
	    td.width = "18%";
	    td.align = "center";
	    
	    td.innerHTML = formatNum(intSubTotalOfAllInstalment,2);
	    
	    // Link to trigger new page for detailed full tenure display.
	    if (IsShowPortion)
	    {
		    row = table.insertRow(table.rows.length);
		    td = row.insertCell(0);
		    	    
		    td.align = "center";
		    td.colSpan = "6";	    
		    td.innerHTML = "<table width='100%' border='0' cellspacing='1' cellpadding='1' bgcolor='#FEE8DD'><tr><td align='center'><span id='sp_view_detail'>Click <a href='javascript:create_new_content();'>here</a> to view the full repayment schedule</span></td></tr></table>";
	    }
	    //
	    document.getElementById("tdAdditionalTbl").style.display = '';
	    
	    /* ----------------------------------------
	    	Gathering data for XIRR Calculation 
	       ---------------------------------------- */
	    var TotalMonths = 0;
	    var P = 0; // Outstanding Amount -> Current Portfolio
	    var strDates = "", strValues = "";
	    var curDate = "", curValue = "";
	    	    
	    TotalMonths = 12;
	    P = newOutstandingAmt;
	    
	    var thisDate = new Date();
	    var thisYear =thisDate.getFullYear();

	    for (var i=0; i<totalTenure; i++) // count of year(s)
	    {
		    curDate = ""; // reset
		    curValue = installResult[i];
		    
		    for (var j=0; j<TotalMonths; j++) // count of month(s)
		    {		    	
		    	curDate = "1/1/" + (thisYear+i);
		    	  	
		    	if (P <= curValue)
		    	{
		    		//alert("P: " + P + "\nInstallment: " + curValue);
		    	}
		    }
		    //P -= installResult[j]*12;
		    
		    strDates += curDate;
		    strValues += curValue;
		    
		    if ((i< totalTenure - 1)) //if not the final
		    {
				strDates += ",";
				strValues += ",";
	            }
	    }
	   
	    // Insert First Node.
	    strDates = "1/1/"+thisYear+"," + strDates;
	    strValues = (0-newOutstandingAmt) + "," + strValues; // negative first node.

	    FetchXIRR("sp_eir", strDates, strValues);
	    
	    // EIR (Effective Interest Rate) Calculation
	    //averageBalance = totalBalance/totalTenure;
	    
	    //EIR = (intSubTotalOfAllInterestPaid/totalTenure)/averageBalance * 100;
	    
	    /* Summary Table */
	    // MS-IE Browser
	    if (document.all)
	    {
	   	document.getElementById("sp_a").innerText = formatNum(intFirst3YrsOfInterestPaid,2);
	   	document.getElementById("sp_b").innerText = formatNum(intFirst3YrsOfInstalment,2);
	   	document.getElementById("sp_c").innerText = formatNum(intFirst3YrsOfInterestPaid/intFirst3YrsOfInstalment, 2);
	   	document.getElementById("sp_d").innerText = formatNum(intSubTotalOfAllInterestPaid, 2);
	   	document.getElementById("sp_e").innerText = formatNum(intSubTotalOfAllInstalment, 2);
	   	document.getElementById("sp_f").innerText = formatNum(intSubTotalOfAllInterestPaid/intSubTotalOfAllInstalment, 2);
	    }
	    else // Standard Browser
	    {
	   	document.getElementById("sp_a").textContent = formatNum(intFirst3YrsOfInterestPaid, 2);
	   	document.getElementById("sp_b").textContent = formatNum(intFirst3YrsOfInstalment, 2);
	   	document.getElementById("sp_c").textContent = formatNum(intFirst3YrsOfInterestPaid/intFirst3YrsOfInstalment, 2);
	   	document.getElementById("sp_d").textContent = formatNum(intSubTotalOfAllInterestPaid, 2);
	   	document.getElementById("sp_e").textContent = formatNum(intSubTotalOfAllInstalment,2 );
	   	document.getElementById("sp_f").textContent = formatNum(intSubTotalOfAllInterestPaid/intSubTotalOfAllInstalment, 2);	   	
	    }	    
	    
	    // Rates & Monthly Instalment
	    if (document.all)
	    {
	   	document.getElementById("sp_rate_01").innerText = arrCurRates[0] + "%";
	   	document.getElementById("sp_rate_02").innerText = arrCurRates[1] + "%";
	   	document.getElementById("sp_rate_03").innerText = arrCurRates[2] + "%";
	   	document.getElementById("sp_rate_04").innerText = arrCurRates[3] + "%";
	   	document.getElementById("sp_mthlyinst_01").innerText = "$" + formatNum(arrMthlyInstalment[0], 2);
	   	document.getElementById("sp_mthlyinst_02").innerText = "$" + formatNum(arrMthlyInstalment[1], 2);
	   	document.getElementById("sp_mthlyinst_03").innerText = "$" + formatNum(arrMthlyInstalment[2], 2);
	   	document.getElementById("sp_mthlyinst_04").innerText = "$" + formatNum(arrMthlyInstalment[3], 2);
	   	//document.getElementById("sp_eir").innerText = formatNum(EIR, 2) + "%";
	    }
	    else
	    {
	   	document.getElementById("sp_rate_01").textContent = arrCurRates[0] + "%";
	   	document.getElementById("sp_rate_02").textContent = arrCurRates[1] + "%";
	   	document.getElementById("sp_rate_03").textContent = arrCurRates[2] + "%";
	   	document.getElementById("sp_rate_04").textContent = arrCurRates[3] + "%";
	   	document.getElementById("sp_mthlyinst_01").textContent = "$" + formatNum(arrMthlyInstalment[0], 2);
	   	document.getElementById("sp_mthlyinst_02").textContent = "$" + formatNum(arrMthlyInstalment[1], 2);
	   	document.getElementById("sp_mthlyinst_03").textContent = "$" + formatNum(arrMthlyInstalment[2], 2);
	   	document.getElementById("sp_mthlyinst_04").textContent = "$" + formatNum(arrMthlyInstalment[3], 2);
	   	//document.getElementById("sp_eir").textContent = formatNum(EIR, 2) + "%";//formatNum(totalBalance/averageBalance*100/100, 2);	   	
	    }
	    
	    // 13 April 2007 - Expand Year 1 - 3 by default
	    expand("1", 'exp_y', 'row_month');
	    expand("2", 'exp_y', 'row_month');
	    expand("3", 'exp_y', 'row_month');
	
	} // end if form validator
}

function calculateTotalInstall(Period, OutstandingAmt, LoanType, Scheme)
{
	var Period = Period;
	var OutstandingAmt = OutstandingAmt;
	var LoanType = LoanType;
	var Scheme = Scheme;
	
	var DBSTotalInterest, comparisonBankTotalInterest;
	var totalInterestSavings;
   /* Apollo changed this line
	var InstallmentResult = new Array(3);
   */
   	
	var InstallmentResult = new Array();

	if (LoanType=="Private"){
		if(Scheme=="normal") InstallmentResult=calculateInstallment(DBSRate, Period, OutstandingAmt);
		else if (Scheme=="intService") InstallmentResult=calculateInterestServicingInstallment(DBSRate, Period, OutstandingAmt);
		else InstallmentResult=calculateInstallment(DBSRate, 540, OutstandingAmt);
	}
	else if (LoanType=="HDB"){
		if(Scheme=="normal") InstallmentResult=calculateInstallment(DBSRateForHDB, Period, OutstandingAmt);
		else if (Scheme=="intService") InstallmentResult = calculateInterestServicingInstallment(DBSRateForHDB, Period, OutstandingAmt);
		else InstallmentResult=calculateInstallment(DBSRateForHDB, 540, OutstandingAmt);
	}
	//totalInterestSavings = eval(comparisonBankTotalInterest-DBSTotalInterest);
	//return CommaFormatted(CurrencyFormatted(totalInterestSavings));
	
	return InstallmentResult;
}

/* Apollo added this function */
function expand(yn, IconNameBase, RowNameBase)
{  
   	// collapse.jpg: +
   	// expand.jpg: -   	
   	if (document.all)
   	{
	   var icon = document.getElementById(IconNameBase + yn);		
		var iconImg = document.getElementById("sp_" + IconNameBase + yn);
		
		if (icon)
		{			
			if(icon.innerText == "+")
			{
				icon.innerText = "-";
				iconImg.innerHTML = "<img src='/img/sg/realtyeasy/tools/loanscalculator/expand.jpg' title='Click to collapse and view the yearly repayments' style='border: 0px solid rgb(0,0,0);'>";
			}
			else
			{
				icon.innerText = "+";				
				iconImg.innerHTML = "<img src='/img/sg/realtyeasy/tools/loanscalculator/collapse.jpg' title='Click to expand and view the monthly repayments' style='border: 0px solid rgb(0,0,0);'>";
			}
			
			for(var i = (yn - 1) * 12 + 1; i <= yn * 12; i++)
			{
				row = document.getElementById(RowNameBase + i);
				
				if(!row)
				 break;
				
				if(icon.innerText == "+") {
					row.style.display = "none";
				}
				else {
				 	row.style.display = "";
				}
			}
		}
	}
	else // for Non-IE
	{
		var icon = document.getElementById(IconNameBase + yn);		
		var iconImg = document.getElementById("sp_" + IconNameBase + yn);
		
		if (icon)
		{				
			if(icon.textContent == "+")
			{
				icon.textContent = "-";
				iconImg.innerHTML = "<img src='/img/sg/realtyeasy/tools/loanscalculator/expand.jpg' title='Click to collapse and view the yearly repayments' style='border: 0px solid rgb(0,0,0);'>";
			}
			else
			{
				icon.textContent = "+";			
				iconImg.innerHTML = "<img src='/img/sg/realtyeasy/tools/loanscalculator/collapse.jpg' title='Click to expand and view the monthly repayments' style='border: 0px solid rgb(0,0,0);'>";
			}
			
			for(var i = (yn - 1) * 12 + 1; i <= yn * 12; i++)
			{
				row = document.getElementById(RowNameBase + i);
				
				if(!row)
				 break;
				
				if(icon.textContent == "+") {
					row.style.display = "none";
				}
				else {
				 	row.style.display = "";
				}
			}
		}	  
   	}	
}

/* Apollo added this function
 * @yn, year number
 * @install, total installment of each month
 * @interest, interest paid of each month
 */
function drawDetailsOfYear(yn, install, interest, outstanding)
{   
   ///*
   var row;
   var td;
   var monthCount = 12;
   var interestOfYear = 0;

   for (var i = 0; i < interest.length; i++)
      interestOfYear += interest[i];

   var table = document.getElementById(outputTable);
   table.border = "0";
   
   var newStartRow = table.rows.length;
	
   row = table.insertRow(newStartRow++);
   td = row.insertCell(0);
   td.className = "MCcellFormTextPad";
   td.width = "27%";
   
   td.colSpan = "2";
   td.innerHTML = "<a href=\"javascript: expand(" + yn + ", 'exp_y', 'row_month')\"> \
                   <span id='exp_y" + yn + "' style='display: none;'>+</span><span id=\"sp_exp_y" + yn + "\"><img id='iconImg' src='/img/sg/realtyeasy/tools/loanscalculator/collapse.jpg' title='Click to expand and view the monthly repayments' style='border: 0px solid #000;'></span>&nbsp;&nbsp;Year "+ yn + "</a>";
   td = row.insertCell(1);
   td.width = "18%";
   td.align = "center";
   var yearPrinciple = install*12 - interestOfYear;
 
   if(yearPrinciple > outstanding)
   {
      yearPrinciple = outstanding;
      monthCount = interest.length;
   }
   
   if (document.all)
   	td.innerText = formatNum(yearPrinciple, 2);
   else
   	td.textContent = formatNum(yearPrinciple, 2);
   
   td = row.insertCell(2);
   td.width = "18%";
   td.align = "center";

   if (document.all)
   	td.innerText = formatNum(interestOfYear, 2);
   else
   	td.textContent = formatNum(interestOfYear, 2);
   	
   td = row.insertCell(3);
   td.width = "20%";
   td.align = "center";
   var yearInstall = yearPrinciple + interestOfYear;
   
   if (document.all)
   	td.innerText = formatNum(yearInstall, 2);
   else
   	td.textContent = formatNum(yearInstall, 2);

   td = row.insertCell(4);
   td.width = "18%";
   td.align = "center";
   var yearOutstanding = outstanding - yearPrinciple;
   if(yearOutstanding < 0)
      yearOutstanding = 0;
   
   if (document.all)
   	td.innerText = formatNum(yearOutstanding, 2);
   else
   	td.textContent = formatNum(yearOutstanding, 2);

   for (var i = (yn - 1) * 12 + 1; i <= yn * 12; i++) {
      var interestIndex = (i - 1) % 12;
      if(outstanding <= 0)
         break;
      var principle = install - interest[interestIndex];
      if(principle > outstanding)
         principle = outstanding;
      row = table.insertRow(newStartRow++);
      row.id = "row_month" + i;
      row.style.display = "none";
      td = row.insertCell(0);
      td.width = "5%";
   
   if (document.all)
   	td.innerText = " ";
   else
   	td.textContent = " ";
      
      td = row.insertCell(1);
      td.width = "23%";
      td.className = "MCcellFormTextPad";
   
   if (document.all)
   	td.innerText = "Month " + i;
   else
   	td.textContent = "Month " + i;
      
      td = row.insertCell(2);
      td.width = "18%";
      td.align = "center";
      
      if (document.all)
   	td.innerText = formatNum(principle, 2);
      else
   	td.textContent = formatNum(principle, 2);
      
      td = row.insertCell(3);
      td.width = "18%";
      td.align = "center";
      
      if (document.all)
   	td.innerText = formatNum(interest[interestIndex], 2);
      else
   	td.textContent = formatNum(interest[interestIndex], 2);
      
      td = row.insertCell(4);
      td.width = "20%";
      td.align = "center";
      
    if (document.all)
   	td.innerText = formatNum(principle + interest[interestIndex], 2);
    else
   	td.textContent = formatNum(principle + interest[interestIndex], 2);

      td = row.insertCell(5);
      td.width = "18%";
      td.align = "center";
      
      outstanding -= install - interest[interestIndex];
      
      if(outstanding < 0)
         outstanding = 0;
         
    if (document.all)
   	td.innerText = formatNum(outstanding, 2);
    else
   	td.textContent = formatNum(outstanding, 2);        
   }

   table.style.display = "inline";
   return interestOfYear;     
}

/* Apollo added this function */
function clearDetailsTable ()
{
   var table = document.getElementById(outputTable);
   while(table.rows.length > 2)
      table.deleteRow(2);
}

/* Apollo added this function */
function formatNum(num, digit)
{   
   /^(\+|-)?(\d+)(\.\d+)?$/.test(num);
   var a = RegExp.$1, b = RegExp.$2, c = RegExp.$3;
   var re = new RegExp().compile("(\\d)(\\d{3})(,|$)");
   while(re.test(b)) b = b.replace(re, "$1,$2$3");
   if (c && digit && new RegExp("^.(\\d{"+ digit +"})(\\d)").test(c)){
   if (RegExp.$2>4) c = (parseFloat(RegExp.$1)+1)/Math.pow(10, digit);
   else c = "."+ RegExp.$1;}
   
   return a +""+ b +""+ fill_zero((c+"").substr((c+"").indexOf(".")), digit);
}

function fill_zero(input, digit)
{
	input = input.replace(/\./g, "");
	
	var gap = digit - input.length;
	
	for (var k=0; k<gap; k++)
	{
		input += "0";
	}
	
	return "." + input;
}

/* Create detailed content on new page. */
function create_new_content()
{	
	//document.getElementById("newForm").action = "./";
	if (Q1selc)
	{
		document.getElementById("sp_p").value = "1";
		document.getElementById("sp_tt").value = newTotalTenure;
		document.getElementById("sp_amt").value = newOutstandingAmt;
		document.getElementById("sp_int").value = DBSRate;
	}
	else if (Q2selc)
	{
		document.getElementById("sp_p").value = "2";
		document.getElementById("sp_tt").value = newTotalTenure;
		document.getElementById("sp_amt").value = newOutstandingAmt;
		document.getElementById("sp_int").value = DBSRateForHDB;
	}
	
	document.getElementById("newForm").submit();
}

