﻿/***************************************************************************************************************
* 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 - "What will it cost?" (Chinese)
* Amendment History:
* Date		By					Description
* ---------	------------	--------------------------------------------------------------------------------
*                          PPCR No:
***************************************************************************************************************/

/***************************************************************************************************************
* Function			: addCommas(str)
* Description		: Adds comma as separators in to a given number
* Parameter Usage	: str - 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			: chkPropertyValue()
* Description		: Validates the field 'Property value'
* Parameter Usage	: N/A
*
* Author				: elight Solutions Limited
* Creation Date	: 20 October 2008
* Side effect		: N/A
* Amendment History	:
* Date		By					Description
* ---------	------------	--------------------------------------------------------------------------------
***************************************************************************************************************/
function chkPropertyValue() {
	var str = document.getElementsByName("propertyValue")[0].value;
	var flag = true;
	var error = "";
	if (str != "")
	{
		if (isNaN(str) == true)
		{
			error += "您輸入的樓價不正確。請重新輸入。\n";
			flag = false;
		}
		else if (str != parseInt(str))
		{
			error += "請輸入整數的樓價。\n";
			flag = false;
		}
		str = parseInt(str);
		if ((str < 100000) || (str >= 1000000000))
		{
			error += "請輸入樓價於港幣100,000元至港幣999,999,999元之範圍內。\n";
			flag = false;
		}
	}
	if (flag == false)
	{
		alert(error);
		document.getElementsByName("propertyValue")[0].select();
	}
	else
	{
		var ratio = document.getElementsByName("loanRatio")[0].value;
		var amount = document.getElementsByName("loanAmount")[0].value;
		if ((ratio != "") && (amount != ""))
			document.getElementsByName("loanAmount")[0].value = Math.round(str * ratio / 100);
	}
}

/***************************************************************************************************************
* Function			: chkLoanRatio()
* Description		: Validates the field 'Loan ratio'
* Parameter Usage	: N/A
*
* Author				: elight Solutions Limited
* Creation Date	: 20 October 2008
* Side effect		: N/A
* Amendment History	:
* Date		By					Description
* ---------	------------	--------------------------------------------------------------------------------
***************************************************************************************************************/
function chkLoanRatio() {
	var ratio = document.getElementsByName("loanRatio")[0].value;
	var flag = true;
	var error = "";
	if (ratio != "")
	{
		if (ratio == 0)
			document.getElementsByName("loanRatio")[0].value = "";
		if (isNaN(ratio) == true)
		{
			error += "您輸入的貸款比率不正確。請重新輸入。\n";
			flag = false;
		}
		else if (ratio != parseInt(ratio))
		{
			error += "請輸入貸款比率為整數。\n";
			flag = false;
		}
		else if ((ratio < 1) || (ratio > 90))
		{
			error += "請輸入貸款比率於1%至90%之範圍內。\n";
			flag = false;
		}
	}
	if (flag == false)
	{
		alert(error);
		if (pty_value == "")
			document.getElementsByName("propertyValue")[0].select();
		else
			document.getElementsByName("loanRatio")[0].select();
	}
	else
	{
		var pty_value = document.getElementsByName("propertyValue")[0].value;
		if ((pty_value != "") && (ratio != "") && (ratio != 0))
			document.getElementsByName("loanAmount")[0].value = Math.round(pty_value * ratio / 100);
	}
}

/***************************************************************************************************************
* Function			: chkLoanAmount()
* Description		: Validates the field '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 chkLoanAmount() {
	var amount = document.getElementsByName("loanAmount")[0].value;
	var pty_value = document.getElementsByName("propertyValue")[0].value;
	var maxloan = Math.round(Number(pty_value) * 0.95);
	var flag = true;
	var error = "";
	if (amount != "")
	{
		if (amount == 0)
			document.getElementsByName("loanAmount")[0].value = "";
		if (isNaN(amount) == true)
		{
			error += "您輸入的貸款額不正確。請重新輸入。\n";
			flag = false;
		}
		else if (amount != parseInt(amount))
		{
			error += "請輸入貸款額為整數。\n";
			flag = false;
		}
		else if ((amount < 50000) || (amount > maxloan))
		{
			error += "請輸入貸款額於港幣50,000元至港幣" + addCommas(maxloan) + "元之範圍內。\n";
			flag = false;
		}
	}
	if (flag == false)
	{
		alert(error);
		document.getElementsByName("loanAmount")[0].select();
	}
	else
	{
		var pty_value = document.getElementsByName("propertyValue")[0].value;
		if ((pty_value != "") && (amount != "") && (amount != 0))
			document.getElementsByName("loanRatio")[0].value = Math.round(amount / pty_value * 100);
	}
}

/***************************************************************************************************************
* 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 += "您輸入的年息不正確。請重新輸入。\n";
			flag = false;
		}
		else if ((str != parseInt(str)) && (String(tmpstr[1]).length > 3))
		{
			error += "請輸入年息不多過小數點後3個位。\n";
			flag = false;
		}
		else if ((str < 0.001) || (str > 99.999))
		{
			error += "請輸入年息於0.001%至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 += "您輸入的貸款期不正確。請重新輸入。\n";
			flag = false;
		}
		else if (str != parseInt(str))
		{
			error += "請輸入貸款期為整數。\n";
			flag = false;
		}
		str = parseInt(str);
		if ((str < 5) || (str > 40))
		{
			error += "請輸入貸款期於5至40年之範圍內。\n";
			flag = false;
		}
	}
	if (flag == false)
	{
		alert(error);
		document.getElementsByName("loanPeriod")[0].select();
	}
}

/***************************************************************************************************************
* Function			: validateForm()
* Description		: Validates the whole form and return 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 pty_value = document.getElementsByName("propertyValue")[0].value;
	var ratio = document.getElementsByName("loanRatio")[0].value;
	var amount = document.getElementsByName("loanAmount")[0].value;
	var rate = document.getElementsByName("interestRate")[0].value;
	var period = document.getElementsByName("loanPeriod")[0].value;
	var flag = true;
	var error = "";
	if (pty_value == "")
	{
		error += "請輸入樓價。\n";
		flag = false;
	}
	if ((ratio == "") && (amount == ""))
	{
		error += "請輸入貸款比率或貸款額。\n";
		flag = false;
	}
	var maxloan = Math.round(Number(pty_value) * 0.95);
	if ((amount < 50000) || (amount > maxloan))
	{
			error += "請輸入貸款額於港幣50,000元至港幣" + addCommas(maxloan) + "元之範圍內。\n";
			flag = false;
	}
	if (rate == "")
	{
		error += "請輸入年息。\n";
		flag = false;
	}
	if (period == "")
	{
		error += "請輸入貸款期。\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('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')>還款表</a>";
	document.getElementById("link_fr").innerHTML = "<a href=javascript:showSchedule('fr')>還款表</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			: writeRepayTable()
* Description		: Prepares content output for repayment table
* Parameter Usage	: N/A
*
* Author				: elight Solutions Limited
* Creation Date	: 20 October 2008
* Side effect		: N/A
* Amendment History	:
* Date		By					Description
* ---------	------------	--------------------------------------------------------------------------------
***************************************************************************************************************/
function writeRepayTable() {
	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%'>每月還款</th>";
	content += "<th class='hsbcAlign07' width='20%'>每兩星期還款</th>";
	content += "<th></th>";
	content += "</tr>";
	content += "<tr>";
	content += "<th class='pink hsbcAlign06'>還款額（港元）</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>年期</td>";
	content += "<td class='hsbcAlign07' id='loanPeriod1'></td>";
	content += "<td class='hsbcAlign07' id='loanPeriod2'></td>";
	content += "<td></td>";
	content += "</tr>";
	content += "<tr>";
	content += "<td>利息總數（港元）</td>";
	content += "<td class='hsbcAlign07' id='interestSum1'></td>";
	content += "<td class='hsbcAlign07' id='interestSum2'></td>";
	content += "<td></td>";
	content += "</tr>";
	content += "<tr>";
	content += "<td>還款總額（港元）</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\");'>還款表</a></td>";
	content += "<td class='hsbcAlign07' id='link_fr'><a class='' href='javascript:showSchedule(\"fr\");'>還款表</a></td>";
	content += "<td></td>";
	content += "</tr>";
	content += "</tbody>";
	content += "</table>";

	return content;
}

/***************************************************************************************************************
* Function			: showRepayTable()
* Description		: Shows content for repayment table
* Parameter Usage	: N/A
*
* Author				: elight Solutions Limited
* Creation Date	: 20 October 2008
* Side effect		: N/A
* Amendment History	:
* Date		By					Description
* ---------	------------	--------------------------------------------------------------------------------
***************************************************************************************************************/
function showRepayTable() {
	document.getElementById('repay_table').innerHTML = writeRepayTable();
}

/***************************************************************************************************************
* 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')>隱藏還款表</a>";
		document.getElementById("link_fr").innerHTML = "<a href=javascript:showSchedule('fr')>還款表</a>";
	}
	else
	{
		document.getElementById("link_fr").innerHTML = "<a href=javascript:hideSchedule('fr')>隱藏還款表</a>";
		document.getElementById("link_mr").innerHTML = "<a href=javascript:showSchedule('mr')>還款表</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')>還款表</a>";
	else
		document.getElementById("link_fr").innerHTML = "<a href=javascript:showSchedule('fr')>還款表</a>";
}

/***************************************************************************************************************
* 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 = Number(document.getElementsByName("loanAmount")[0].value);
	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 = Number(document.getElementsByName("loanAmount")[0].value);
	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 = Number(document.getElementsByName("loanAmount")[0].value);
	
	if (pay_freq == "mr")
		content += "<br><p class='hsbcCustomText'><strong>每月按揭還款表</strong></p>";
	else
		content += "<br><p class='hsbcCustomText'><strong>每兩星期按揭還款表</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'>尚欠款項（港元）</th>";
	content += "</tr>";
	content += "<tr>";
	content += "<th align='center' class='hsbcAlign05' width='8%'>年期</th>";
	content += "<th align='center' class='hsbcAlign05' width='10%'>供款期</th>";
	content += "<th align='right' class='hsbcAlign07' width='20%'>供款額（港元）</th>";
	content += "<th align='right' class='hsbcAlign07' width='20%'>利息（港元）</th>";
	content += "<th align='right' class='hsbcAlign07' width='20%'>本金（港元）</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 ++;
			repayment_yr = 0;
			interest_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'>總額</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;
}
