﻿/***************************************************************************************************************
* Program Name       : Javascript programmes
* Copyright Notice   : COPYRIGHT (C) 2008 BY HSBC
* Creation Date      : 20 October 2008
* Programmer         : elight Solutions Limited
* Abstract           : Functions for mortgage calculator - "How much can I borrow?" (English)
* Amendment History:
* Date		By					Description
* ---------	------------	--------------------------------------------------------------------------------
*                          PPCR No:
***************************************************************************************************************/

/***************************************************************************************************************
* Function			: addCommas(str)
* Description		: Adds comma as separators in to a given number
* Parameter Usage	: str - a numeric string
*
* Author				: elight Solutions Limited
* Creation Date	: 20 October 2008
* Side effect		: N/A
* Amendment History	:
* Date		By					Description
* ---------	------------	--------------------------------------------------------------------------------
***************************************************************************************************************/
function addCommas(str) {
	str += '';
	x = str.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}

/***************************************************************************************************************
* Function			: isLeapYear(year)
* Description		: Determines whether the given year is a leap year
* Parameter Usage	: year - a year value
*
* Author				: elight Solutions Limited
* Creation Date	: 20 October 2008
* Side effect		: N/A
* Amendment History	:
* Date		By					Description
* ---------	------------	--------------------------------------------------------------------------------
***************************************************************************************************************/
function isLeapYear(year) {
	if (year % 4 == 0)
		return true;
	else
		return false;
}

/***************************************************************************************************************
* Function			: getDays_Year(year)
* Description		: Returns the number of days in the given year
* Parameter Usage	: year - a year value
*
* Author				: elight Solutions Limited
* Creation Date	: 20 October 2008
* Side effect		: N/A
* Amendment History	:
* Date		By					Description
* ---------	------------	--------------------------------------------------------------------------------
***************************************************************************************************************/
function getDays_Year(year) {
	var num_of_days = "";
	if (isLeapYear(year) == true)
		num_of_days = 366;
	else
		num_of_days = 365;
	return num_of_days;
}

/***************************************************************************************************************
* Function			: getDays_Month(mth, year)
* Description		: Returns the number of days in the given month
* Parameter Usage	: mth - a month value
* 						  year - a year value
*
* Author				: elight Solutions Limited
* Creation Date	: 20 October 2008
* Side effect		: N/A
* Amendment History	:
* Date		By					Description
* ---------	------------	--------------------------------------------------------------------------------
***************************************************************************************************************/
function getDays_Month(mth, year) {
	var num_of_days = "";
	switch(String(mth))
	{
		case "1":
			num_of_days = 31;
			break;
		case "2": 
			if (isLeapYear(year) == true)
				num_of_days = 29;
			else
				num_of_days = 28;
			break;
		case "3":
			num_of_days = 31;
			break;
		case "4":
			num_of_days = 30;
			break;
		case "5":
			num_of_days = 31;
			break;
		case "6":
			num_of_days = 30;
			break;
		case "7":
			num_of_days = 31;
			break;
		case "8":
			num_of_days = 31;
			break;
		case "9":
			num_of_days = 30;
			break;
		case "10":
			num_of_days = 31;
			break;
		case "11":
			num_of_days = 30;
			break;
		case "12":
			num_of_days = 31;
			break;
	}
	return num_of_days;
}

/***************************************************************************************************************
* Function			: chkHouseHoldIncome()
* Description		: Validates the field 'Monthly household income'
* Parameter Usage	: N/A
*
* Author				: elight Solutions Limited
* Creation Date	: 20 October 2008
* Side effect		: N/A
* Amendment History	:
* Date		By					Description
* ---------	------------	--------------------------------------------------------------------------------
***************************************************************************************************************/
function chkHouseHoldIncome() {
	var str = document.getElementsByName("householdIncome")[0].value;
	var flag = true;
	var error = "";
	if (str != "")
	{
		if (isNaN(str) == true)
		{
			error += "The monthly household income you provided is invalid. Please re-enter.\n";
			flag = false;
		}
		else if (str != parseInt(str))
		{
			error += "Please limit your input for the monthly household income to a whole number.\n";
			flag = false;
		}
		str = parseInt(str);
		if ((str < 5000) || (str >= 10000000))
		{
			error += "Please enter the monthly household income within the range from HK$5,000 to HK$9,999,999.\n";
			flag = false;
		}
	}
	if (flag == false)
	{
		alert(error);
		document.getElementsByName("householdIncome")[0].select();
	}
}

/***************************************************************************************************************
* Function			: chkInterestRate()
* Description		: Validates the field 'Interest rate'
* Parameter Usage	: N/A
*
* Author				: elight Solutions Limited
* Creation Date	: 20 October 2008
* Side effect		: N/A
* Amendment History	:
* Date		By					Description
* ---------	------------	--------------------------------------------------------------------------------
***************************************************************************************************************/
function chkInterestRate() {
	var str = document.getElementsByName("interestRate")[0].value;
	var flag = true;
	var error = "";
	var tmpstr = str.split(".");
	if (str != "")
	{
		if (isNaN(str) == true)
		{
			error += "The interest rate you provided is invalid. Please re-enter.\n";
			flag = false;
		}
		else if ((str != parseInt(str)) && (String(tmpstr[1]).length > 3))
		{
			error += "Please limit your input for the interest rate to 3 decimal places.\n";
			flag = false;
		}
		else if ((str < 0.001) || (str > 99.999))
		{
			error += "Please enter the interest rate within the range from 0.001% to 99.999%.\n";
			flag = false;
		}
	}
	if (flag == false)
	{
		alert(error);
		document.getElementsByName("interestRate")[0].select();
	}
}

/***************************************************************************************************************
* Function			: chkLoanPeriod()
* Description		: Validates the field 'Loan period'
* Parameter Usage	: N/A
*
* Author				: elight Solutions Limited
* Creation Date	: 20 October 2008
* Side effect		: N/A
* Amendment History	:
* Date		By					Description
* ---------	------------	--------------------------------------------------------------------------------
***************************************************************************************************************/
function chkLoanPeriod() {
	var str = document.getElementsByName("loanPeriod")[0].value;
	var flag = true;
	var error = "";
	var tmpstr = str.split(".");
	if (str != "")
	{
		if (isNaN(str) == true)
		{
			error += "The loan period you provided is invalid. Please re-enter.\n";
			flag = false;
		}
		else if (str != parseInt(str))
		{
			error += "Please limit your input for the loan period to a whole number.\n";
			flag = false;
		}
		str = parseInt(str);
		if ((str < 5) || (str > 40))
		{
			error += "Please enter the loan period within the range from 5 to 40 years.\n";
			flag = false;
		}
	}
	if (flag == false)
	{
		alert(error);
		document.getElementsByName("loanPeriod")[0].select();
	}
}

/***************************************************************************************************************
* Function			: validateForm()
* Description		: Validates the whole form and returns results if the validation is positive
* Parameter Usage	: N/A
*
* Author				: elight Solutions Limited
* Creation Date	: 20 October 2008
* Side effect		: N/A
* Amendment History	:
* Date		By					Description
* ---------	------------	--------------------------------------------------------------------------------
***************************************************************************************************************/
function validateForm() {
	var income = document.getElementsByName("householdIncome")[0].value;
	var rate = document.getElementsByName("interestRate")[0].value;
	var period = document.getElementsByName("loanPeriod")[0].value;
	var flag = true;
	var error = "";
	if (income == "")
	{
		error += "Please enter your monthly household income.\n";
		flag = false;
	}
	if (rate == "")
	{
		error += "Please enter the interest rate.\n";
		flag = false;
	}
	if (period == "")
	{
		error += "Please enter the loan period.\n";
		flag = false;
	}
	if (flag == false)
		alert(error);
	else
	{
		location.href = "#tabletop";
		refreshResult();
	}
}

/***************************************************************************************************************
* Function			: refreshResult()
* Description		: Refreshes and updates results in all <div>
* Parameter Usage	: N/A
*
* Author				: elight Solutions Limited
* Creation Date	: 20 October 2008
* Side effect		: N/A
* Amendment History	:
* Date		By					Description
* ---------	------------	--------------------------------------------------------------------------------
***************************************************************************************************************/
function refreshResult() {
	document.getElementById("calc_result").style.visibility = "visible";
	document.getElementById('loanAmount').innerHTML = addCommas(calculateLoanAmount());
	document.getElementById('ptyPrice70').innerHTML = addCommas(calculatePtyPrice(0.7));
	document.getElementById('ptyPrice95').innerHTML = addCommas(calculatePtyPrice(0.95));
	document.getElementById('repayAmount1').innerHTML = addCommas(Math.round(calculateRepayAmount("mr")));
	document.getElementById('repayAmount2').innerHTML = addCommas(Math.round(calculateRepayAmount("fr")));
	document.getElementById('loanPeriod1').innerHTML = addCommas(Math.round(calculateRepaySummary("mr")[0]));
	document.getElementById('loanPeriod2').innerHTML = addCommas(Math.round(calculateRepaySummary("fr")[0]));
	document.getElementById('interestSum1').innerHTML = addCommas(Math.round(calculateRepaySummary("mr")[1]));
	document.getElementById('interestSum2').innerHTML = addCommas(Math.round(calculateRepaySummary("fr")[1]));
	document.getElementById('repaySum1').innerHTML = addCommas(Math.round(calculateRepaySummary("mr")[2]));
	document.getElementById('repaySum2').innerHTML = addCommas(Math.round(calculateRepaySummary("fr")[2]));
	document.getElementById("schedule").innerHTML = "";
	document.getElementById("link_mr").innerHTML = "<a href=javascript:showSchedule('mr')>Show Schedule</a>";
	document.getElementById("link_fr").innerHTML = "<a href=javascript:showSchedule('fr')>Show Schedule</a>";
}

/***************************************************************************************************************
* Function			: hideResult()
* Description		: Hide results before user's input
* Parameter Usage	: N/A
*
* Author				: elight Solutions Limited
* Creation Date	: 20 October 2008
* Side effect		: N/A
* Amendment History	:
* Date		By					Description
* ---------	------------	--------------------------------------------------------------------------------
***************************************************************************************************************/
function hideResult() {
	document.getElementById("calc_result").style.visibility = "hidden";
}

/***************************************************************************************************************
* Function			: writeRepayTable1()
* Description		: Prepares content output for repayment table part 1
* Parameter Usage	: N/A
*
* Author				: elight Solutions Limited
* Creation Date	: 20 October 2008
* Side effect		: N/A
* Amendment History	:
* Date		By					Description
* ---------	------------	--------------------------------------------------------------------------------
***************************************************************************************************************/
function writeRepayTable1() {
	var content = "";

	content += "<table class='hsbcTableStyle02 jsBalanceColumns' style='border:1px solid #ccc;'>";
	content += "<tr>";
	content += "<th class='hsbcAlign06' width='60%'>Loan ratio</th>";
	content += "<th class='hsbcAlign07' width='20%'>70%</th>";
	content += "<th class='hsbcAlign07' width='20%'>95%*</th>";
	content += "<th></th>";
	content += "</tr>";
	content += "<tr>";
	content += "<td class='hsbcAlign06' width='60%'>Maximum property price (HK$)</td>";
	content += "<td class='hsbcAlign07' width='20%' id='ptyPrice70'></td>";
	content += "<td class='hsbcAlign07' width='20%' id='ptyPrice95'></td>";
	content += "<td></td>";
	content += "</tr>";
	content += "</tbody>";
	content += "</table>";

	return content;
}

/***************************************************************************************************************
* Function			: writeRepayTable2()
* Description		: Prepares content output for repayment table part 2
* Parameter Usage	: N/A
*
* Author				: elight Solutions Limited
* Creation Date	: 20 October 2008
* Side effect		: N/A
* Amendment History	:
* Date		By					Description
* ---------	------------	--------------------------------------------------------------------------------
***************************************************************************************************************/
function writeRepayTable2() {
	var content = "";

	content += "<table class='hsbcTableStyle02 jsBalanceColumns' style='border:1px solid #ccc;'>";
	content += "<tbody>";
	content += "<tr>";
	content += "<th class='hsbcAlign06' width='60%'></th>";
	content += "<th class='hsbcAlign07' width='20%'>Monthly</th>";
	content += "<th class='hsbcAlign07' width='20%'>Fortnightly</th>";
	content += "<th></th>";
	content += "</tr>";
	content += "<tr>";
	content += "<th class='pink hsbcAlign06'>Repayment amount (HK$)</th>";
	content += "<th class='pink hsbcAlign07' id='repayAmount1'></th>";
	content += "<th class='pink hsbcAlign07' id='repayAmount2'></th>";
	content += "<th class='pink'></th>";
	content += "</tr>";
	content += "<tr>";
	content += "<td>Loan period (years)</td>";
	content += "<td class='hsbcAlign07' id='loanPeriod1'></td>";
	content += "<td class='hsbcAlign07' id='loanPeriod2'></td>";
	content += "<td></td>";
	content += "</tr>";
	content += "<tr>";
	content += "<td>Total interest amount (HK$)</td>";
	content += "<td class='hsbcAlign07' id='interestSum1'></td>";
	content += "<td class='hsbcAlign07' id='interestSum2'></td>";
	content += "<td></td>";
	content += "</tr>";
	content += "<tr>";
	content += "<td>Total repayment amount (HK$)</td>";
	content += "<td class='hsbcAlign07' id='repaySum1'></td>";
	content += "<td class='hsbcAlign07' id='repaySum2'></td>";
	content += "<td></td>";
	content += "</tr>";
	content += "<tr>";
	content += "<td></td>";
	content += "<td class='hsbcAlign07' id='link_mr'><a class='' href='javascript:showSchedule(\"mr\");'>Show schedule</a></td>";
	content += "<td class='hsbcAlign07' id='link_fr'><a class='' href='javascript:showSchedule(\"fr\");'>Show schedule</a></td>";
	content += "<td></td>";
	content += "</tr>";
	content += "</tbody>";
	content += "</table>";

	return content;
}

/***************************************************************************************************************
* Function			: showRepayTable1()
* Description		: Shows content for repayment table part 1
* Parameter Usage	: N/A
*
* Author				: elight Solutions Limited
* Creation Date	: 20 October 2008
* Side effect		: N/A
* Amendment History	:
* Date		By					Description
* ---------	------------	--------------------------------------------------------------------------------
***************************************************************************************************************/
function showRepayTable1() {
	document.getElementById('repay_table1').innerHTML = writeRepayTable1();
}

/***************************************************************************************************************
* Function			: showRepayTable2()
* Description		: Shows content for repayment table part 2
* Parameter Usage	: N/A
*
* Author				: elight Solutions Limited
* Creation Date	: 20 October 2008
* Side effect		: N/A
* Amendment History	:
* Date		By					Description
* ---------	------------	--------------------------------------------------------------------------------
***************************************************************************************************************/
function showRepayTable2() {
	document.getElementById('repay_table2').innerHTML = writeRepayTable2();
}

/***************************************************************************************************************
* Function			: showSchedule(pay_freq)
* Description		: Shows detailed repayment schedule
* Parameter Usage	: pay_freq - repayment frequency (either monthly 'mr' or fortnightly 'fr')
*
* Author				: elight Solutions Limited
* Creation Date	: 20 October 2008
* Side effect		: N/A
* Amendment History	:
* Date		By					Description
* ---------	------------	--------------------------------------------------------------------------------
***************************************************************************************************************/
function showSchedule(pay_freq) {
	document.getElementById("schedule").innerHTML = writeSchedule(pay_freq);
	if (pay_freq == "mr")
	{
		document.getElementById("link_mr").innerHTML = "<a href=javascript:hideSchedule('mr')>Hide Schedule</a>";
		document.getElementById("link_fr").innerHTML = "<a href=javascript:showSchedule('fr')>Show Schedule</a>";
	}
	else
	{
		document.getElementById("link_fr").innerHTML = "<a href=javascript:hideSchedule('fr')>Hide Schedule</a>";
		document.getElementById("link_mr").innerHTML = "<a href=javascript:showSchedule('mr')>Show Schedule</a>";
	}
}

/***************************************************************************************************************
* Function			: hideSchedule(pay_freq)
* Description		: Hides detailed repayment schedule
* Parameter Usage	: pay_freq - repayment frequency (either monthly 'mr' or fortnightly 'fr')
*
* Author				: elight Solutions Limited
* Creation Date	: 20 October 2008
* Side effect		: N/A
* Amendment History	:
* Date		By					Description
* ---------	------------	--------------------------------------------------------------------------------
***************************************************************************************************************/
function hideSchedule(pay_freq) {
	document.getElementById("schedule").innerHTML = "";
	if (pay_freq == "mr")
		document.getElementById("link_mr").innerHTML = "<a href=javascript:showSchedule('mr')>Show Schedule</a>";
	else
		document.getElementById("link_fr").innerHTML = "<a href=javascript:showSchedule('fr')>Show Schedule</a>";
}

/***************************************************************************************************************
* Function			: calculateLoanAmount(pay_freq)
* Description		: Calculates the maximum loan amount
* Parameter Usage	: N/A
*
* Author				: elight Solutions Limited
* Creation Date	: 20 October 2008
* Side effect		: N/A
* Amendment History	:
* Date		By					Description
* ---------	------------	--------------------------------------------------------------------------------
***************************************************************************************************************/
function calculateLoanAmount() {
	var income = Number(document.getElementsByName("householdIncome")[0].value);
	var rate = Number(document.getElementsByName("interestRate")[0].value);
	var period = Number(document.getElementsByName("loanPeriod")[0].value);
	var loan_amt = "";
	
	var num_of_mth = period * 12;
	var rate = rate / 1200;
	
	loan_amt = ((income / 2) * ((1 - Math.pow((1 + rate),(-num_of_mth))) / rate) / 0.7) * 0.7;
	loan_amt = Math.round(loan_amt);
	return loan_amt;
}

/***************************************************************************************************************
* Function			: calculatePtyPrice(ratio)
* Description		: Calculates the maximum property price with the given loan ratio
* Parameter Usage	: ratio - loan ratio
*
* Author				: elight Solutions Limited
* Creation Date	: 20 October 2008
* Side effect		: N/A
* Amendment History	:
* Date		By					Description
* ---------	------------	--------------------------------------------------------------------------------
***************************************************************************************************************/
function calculatePtyPrice(ratio) {
	var loan_amt = calculateLoanAmount();
	var pty_price = Math.round(loan_amt / ratio);

	return pty_price;
}

/***************************************************************************************************************
* Function			: calculateRepayAmount(pay_freq)
* Description		: Calculates the repayment amount with the given repayment frequency
* Parameter Usage	: pay_freq - repayment frequency (either monthly 'mr' or fortnightly 'fr')
*
* Author				: elight Solutions Limited
* Creation Date	: 20 October 2008
* Side effect		: N/A
* Amendment History	:
* Date		By					Description
* ---------	------------	--------------------------------------------------------------------------------
***************************************************************************************************************/
function calculateRepayAmount(pay_freq) {
	var loan_amount = calculateLoanAmount();
	var rate = Number(document.getElementsByName("interestRate")[0].value);
	rate = rate / 100;
	var period = Number(document.getElementsByName("loanPeriod")[0].value);
	var num_of_days_in_a_year = getDays_Year();
	var num_of_repayments = "";
	var repay_amount = "";
	
	if (pay_freq == "mr")
	{
		rate = rate / 12;
		num_of_repayments = period * 12;
	}
	else 
	{
		rate = rate * 14 / num_of_days_in_a_year;
		num_of_repayments = period * 26;
	}
	repay_amount = loan_amount * rate / (1 - Math.pow((1 + rate),(-num_of_repayments)));
	return repay_amount;
}

/***************************************************************************************************************
* Function			: calculateInterestRate_MR(mm, yy)
* Description		: Calculates the interest rate of each instalment for monthly repayment
* Parameter Usage	: mm - a month value
*						  yy - a year value
* Author				: elight Solutions Limited
* Creation Date	: 20 October 2008
* Side effect		: N/A
* Amendment History	:
* Date		By					Description
* ---------	------------	--------------------------------------------------------------------------------
***************************************************************************************************************/
function calculateInterestRate_MR(mm, yy) {
	var rate = Number(document.getElementsByName("interestRate")[0].value);
	rate = rate / 100;
	var num_of_days_in_a_year = getDays_Year(yy);
	var num_of_days_in_a_month = getDays_Month(mm, yy);
	var interest_rate = "";
	
	interest_rate = rate * num_of_days_in_a_month / num_of_days_in_a_year;

	return interest_rate;
}

/***************************************************************************************************************
* Function			: calculateInterestRate_FR(dd, mm, yy)
* Description		: Calculates the interest rate of each instalment for fortnightly repayment
* Parameter Usage	: dd - a day value
*						  mm - a month value
*						  yy - a year value
* Author				: elight Solutions Limited
* Creation Date	: 20 October 2008
* Side effect		: N/A
* Amendment History	:
* Date		By					Description
* ---------	------------	--------------------------------------------------------------------------------
***************************************************************************************************************/
function calculateInterestRate_FR(dd, mm, yy) {
	var rate = Number(document.getElementsByName("interestRate")[0].value);
	rate = rate / 100;
	var num_of_days_in_a_year = getDays_Year(yy);
	var num_of_days_in_a_month = getDays_Month(mm, yy);
	var interest_rate = "";
	
	var dd2 = dd + 13;
	var mm2 = mm;
	var yy2 = yy;
	if (dd2 > num_of_days_in_a_month)
	{
		dd2 = dd2 - num_of_days_in_a_month;
		mm2 = mm + 1;
		if (mm2 > 12)
		{
			mm2 = 1;
			yy2 = yy + 1;
		}
		interest_rate = rate * dd2 / getDays_Year(yy2) + rate * (14 - dd2) / getDays_Year(yy);		
	}
	else	
		interest_rate = rate * 14 / num_of_days_in_a_year;

	return interest_rate;
}

/***************************************************************************************************************
* Function			: calculateRepaySummary(pay_freq)
* Description		: Calculates the loan period, total interest amount and total repayment amount
* Parameter Usage	: pay_freq - repayment frequency (either monthly 'mr' or fortnightly 'fr')
*
* Author				: elight Solutions Limited
* Creation Date	: 20 October 2008
* Side effect		: N/A
* Amendment History	:
* Date		By					Description
* ---------	------------	--------------------------------------------------------------------------------
***************************************************************************************************************/
function calculateRepaySummary(pay_freq) {
	var summary = new Array(3);
	var pre_out = calculateLoanAmount();
	var repayment = calculateRepayAmount(pay_freq);

	var d = new Date();
	var dd = 1;
	var mm = d.getMonth()+1;
	var yy = d.getFullYear();

	var loan_period = 0;
	var repay_sum = 0;
	var interest = 0;
	var interest_sum = 0;
	
	var instal_no = 0;
	if (pay_freq == "mr")
		var instal_count = 12;
	else
		var instal_count = 26;
		
	while (pre_out > 0)
	{
		if (pay_freq == "mr")
			rate = calculateInterestRate_MR(mm, yy);
		else
			rate = calculateInterestRate_FR(dd, mm, yy);			

		interest = pre_out * rate;
		principal = repayment - interest;
		pre_out = pre_out - principal;
		
		if (pre_out <= 0)
			repayment = repayment + pre_out;
		
		repay_sum = repay_sum + repayment;
		interest_sum = interest_sum + interest;

		instal_no ++;
		
		if (pay_freq == "mr")
			mm ++;
		else
		{
			dd = dd + 14;
			if ((dd > 31) && ((mm == 1) || (mm == 3) || (mm == 5) || (mm == 7) || (mm == 8) || (mm == 10) || (mm == 12)))
			{
				dd = dd - 31;
				mm ++;
			}
			else if ((dd > 30) && ((mm == 4) || (mm == 6) || (mm == 5) || (mm == 9) || (mm == 11)))
			{
				dd = dd - 30;
				mm ++;
			}
			else if ((dd > 29) && (mm == 2) && (isLeapYear(yy) == true))
			{
				dd = dd - 29;
				mm ++;
			}
			else if ((dd > 28) && (mm == 2) && (isLeapYear(yy) == false))
			{
				dd = dd - 28;
				mm ++;
			}
		}

		if (mm == 13)
		{
			mm = 1;
			yy ++;
		}
	}
	if (instal_no % instal_count == 0)
		loan_period = instal_no / instal_count;
	else
		loan_period = parseInt(instal_no / instal_count) + 1;
	
	summary[0] = loan_period;
	summary[1] = interest_sum;
	summary[2] = repay_sum;

	return summary;
}

/***************************************************************************************************************
* Function			: writeSchedule(pay_freq)
* Description		: Prepares content output for detailed repayment schedule
* Parameter Usage	: pay_freq - repayment frequency (either monthly 'mr' or fortnightly 'fr')
*
* Author				: elight Solutions Limited
* Creation Date	: 20 October 2008
* Side effect		: N/A
* Amendment History	:
* Date		By					Description
* ---------	------------	--------------------------------------------------------------------------------
***************************************************************************************************************/
function writeSchedule(pay_freq) {
	var content = "";
	var period = Number(document.getElementsByName("loanPeriod")[0].value);
	var year_no = 1;
	var instal_no = 1;
	if (pay_freq == "mr")
		var instal_count = 12;
	else
		var instal_count = 26;
	
	var d = new Date();
	var dd = 1;
	var mm = d.getMonth()+1;
	var yy = d.getFullYear();
	
	var repayment = calculateRepayAmount(pay_freq);

	var rate = 0;
	var interest = 0;
	var principal = 0;
	var repayment_yr = 0;
	var interest_yr = 0;
	var principal_yr = 0;
	var interest_sum = 0;
	var principal_sum = 0;
	var repayment_sum = 0;
	
	var pre_out = calculateLoanAmount();
	
	if (pay_freq == "mr")
		content += "<br><p class='hsbcCustomText'><strong>Monthly Mortgage Repayment Schedule</strong></p>";
	else
		content += "<br><p class='hsbcCustomText'><strong>Fortnightly Mortgage Repayment Schedule</strong></p>";
	content += "<table class='hsbcTableStyle02 jsBalanceColumns' style='border:1px solid #ccc;'>";
	content += "<tbody>";
	content += "<tr>";
	content += "<th class='hsbcAlign05'></th>";
	content += "<th class='hsbcAlign05'></th>";
	content += "<th class='hsbcAlign07'></th>";
	content += "<th class='hsbcAlign07'></th>";
	content += "<th class='hsbcAlign07'></th>";
	content += "<th align='right' class='hsbcAlign07'>Oustanding Amount (HK$)</th>";
	content += "</tr>";
	content += "<tr>";
	content += "<th align='center' class='hsbcAlign05' width='8%'>Year</th>";
	content += "<th align='center' class='hsbcAlign05' width='10%'>Instalment</th>";
	content += "<th align='right' class='hsbcAlign07' width='20%'>Repayment (HK$)</th>";
	content += "<th align='right' class='hsbcAlign07' width='20%'>Interest (HK$)</th>";
	content += "<th align='right' class='hsbcAlign07' width='20%'>Principal (HK$)</th>";
	content += "<th align='right' class='hsbcAlign07' width='22%'>" + addCommas(pre_out) + "</th>";
	content += "</tr>";
	
	while (year_no <= period)
	{
		if (pay_freq == "mr")
			rate = calculateInterestRate_MR(mm, yy);
		else
			rate = calculateInterestRate_FR(dd, mm, yy);			

		repayment_yr = repayment_yr + repayment;
		repayment_sum = repayment_sum + repayment;
		
		interest = pre_out * rate;
		interest_yr = interest_yr + interest;
		interest_sum = interest_sum + interest;
		
		principal = repayment - interest;
		principal_yr = repayment_yr - interest_yr;
		principal_sum = repayment_sum - interest_sum;
		
		pre_out = pre_out - principal;
		
		if (pre_out <= 0)
		{
			repayment = repayment + pre_out;
			repayment_yr = repayment_yr + pre_out;
			repayment_sum = repayment_sum + pre_out;
			principal = repayment - interest;
			principal_yr = repayment_yr - interest_yr;
			principal_sum = repayment_sum - interest_sum;
			pre_out = 0;
		}

		if (year_no == 1)
		{
			content += "<tr>";
			content += "<td class='hsbcAlign05'>" + (instal_no==1?year_no:'') + "</td>";
			content += "<td class='hsbcAlign05'>" + instal_no + "</td>";
			content += "<td class='hsbcAlign07'>" + addCommas(Math.round(repayment)) + "</td>";
			content += "<td class='hsbcAlign07'>" + addCommas(Math.round(interest)) + "</td>";
			content += "<td class='hsbcAlign07'>" + addCommas(Math.round(principal)) + "</td>";
			content += "<td class='hsbcAlign07'>" + addCommas(Math.round(pre_out)) + "</td>";
			content += "</tr>";
		}
		if ((year_no > 1) && (instal_no == instal_count))
		{
			content += "<tr>";
			content += "<td class='hsbcAlign05'>" + year_no + "</td>";
			content += "<td class='hsbcAlign05'></td>";
			content += "<td class='hsbcAlign07'>" + addCommas(Math.round(repayment_yr)) + "</td>";
			content += "<td class='hsbcAlign07'>" + addCommas(Math.round(interest_yr)) + "</td>";
			content += "<td class='hsbcAlign07'>" + addCommas(Math.round(principal_yr)) + "</td>";
			content += "<td class='hsbcAlign07'>" + addCommas(Math.round(pre_out)) + "</td>";
			content += "</tr>";			
		}
		
		if (instal_no == instal_count)
		{
			instal_no = 1;
			year_no ++;
			interest_yr = 0;
			repayment_yr = 0;
		}
		else
			instal_no ++;
		
		if (pay_freq == "mr")
			mm ++;
		else
		{
			dd = dd + 14;
			if ((dd > 31) && ((mm == 1) || (mm == 3) || (mm == 5) || (mm == 7) || (mm == 8) || (mm == 10) || (mm == 12)))
			{
				dd = dd - 31;
				mm ++;
			}
			else if ((dd > 30) && ((mm == 4) || (mm == 6) || (mm == 5) || (mm == 9) || (mm == 11)))
			{
				dd = dd - 30;
				mm ++;
			}
			else if ((dd > 29) && (mm == 2) && (isLeapYear(yy) == true))
			{
				dd = dd - 29;
				mm ++;
			}
			else if ((dd > 28) && (mm == 2) && (isLeapYear(yy) == false))
			{
				dd = dd - 28;
				mm ++;
			}
		}

		if (mm == 13)
		{
			mm = 1;
			yy ++;
		}
	}
	content += "<tr>";
	content += "<th class='pink hsbcAlign05'>Total</th>";
	content += "<th class='pink hsbcAlign05'></th>";
	content += "<th class='pink hsbcAlign07'>" + addCommas(Math.round(repayment_sum)) + "</th>";
	content += "<th class='pink hsbcAlign07'>" + addCommas(Math.round(interest_sum)) + "</th>";
	content += "<th class='pink hsbcAlign07'>" + addCommas(Math.round(principal_sum)) + "</th>";
	content += "<th class='pink hsbcAlign07'></th>";
	content += "</tr>";			
	content += "</tbody>";
	content += "</table><br/>";

	return content;
}
