// +++++++++++++++++++++++++++++++++++
// (C) Copyright 2003 - 2008 Niro Solutions Pty Limited ABN 89 106 967 140
// +++++++++++++++++++++++++++++++++++
// Version: 3.1.0
// +++++++++++++++++++++++++++++++++++
// Original author: Miles Glisovic
// Last update completed by: Roland Beerling
// Modification date: 25/06/08
// +++++++++++++++++++++++++++++++++++
var cCol="";
var numberOfTabs = 4
var fcs=false
// parameter STRINGS to be retreived from DB and used in initialise()
var initCurrentAge="";
var initGrossSalary="";
var initGrossSalaryFreq="";
var MIN_AGE = 15;
var MAX_AGE = 69;
var MIN_R_AGE = 60;
var MAX_R_AGE = MAX_AGE+1;
var MAX_LEXPECT = 99
var MIN_SUPACCBAL=0
var MAX_SUPACCBAL=9999999
var MIN_SALARY=5000//p.a.
var MAX_SALARY=9999999
var MIN_AFTERTAX=0
var MIN_SALSAC=0
var MAX_CONCESSIONAL_50K=50000
var MAX_AFTERTAX150K=MAX_CONCESSIONAL_50K*3//150000
var MIN_EMPLCONT_PCTG = 9;
var MAX_EMPLCONT_PCTG = 50;
var MIN_FEES_PCTG=0;
var MAX_FEES_PCTG = 20;
var MIN_INSURANCEPREMIUMS_PCTG=0;
var MAX_INSURANCEPREMIUMS_PCTG = 20;
var MIN_INCOME=1
var __MAXANNUALPENSIONINCOME=9999999
var INVEST_RATE_SUPBENEFIT=6.5
var MIN_PCTG_SUPERBENEFIT=3
var MAX_PCTG_SUPERBENEFIT=8
var INVEST_RATE_RETBENEFIT=6.5
var MIN_PCTG_RETIREMENTBENEFIT=3
var MAX_PCTG_RETIREMENTBENEFIT=8
var INFLATION_SALARY=4.5
var MIN_INFLATION_SALARY=0
var MAX_INFLATION_SALARY=8
var INFLATION=2.5
var MIN_INFLATION=0
var MAX_INFLATION=3
var AWOTE=4.5
var _nbsp = "&nbsp;"
var minAnnualPensionIncome=0;
var minAnnualPensionIncomeNew=0;
var MIN_INV_AMOUNT=20000
var MAX_INV_AMOUNT=9999999
var navigator_appName=""
var gl_FinalTotalSuperSavings, gl_FinalTotalSuperSavingsNew
var STEP_5000 = 5000;
var POST_TAX_RATE = 3;
var INITIAL_LOWER_THRESHOLD = 30342;
var CO_CONTRIBUTION_MAX = 1500;
var SGC_RATE=0.09
var TAX_RATE = 0.15;
var TOTALBENEFIT_TOOBIG=200;
var FEESINSURANCE_TOOHIGH=300;
var FEESINSURANCE_TOOHIGH_NEW=301;
var FINALTOTALSUPERSAVINGS_OK=0;
var retirementFinalTotalSuperSavings;
var retirementFinalTotalSuperSavingsNew;
var MIN_DOLLAR = 0;
var RQRDINCOME_TOOHIGH=1
var RQRDINCOME_TOOHIGH_NEW=2
var BALANCE_TOOBIG=3
var BALANCE_TOOBIG_NEW=4
var INCOMEWILLSTOPATTHEEND_OK=5;
var MAX_PROJECTION_YEAR = 110;
var MAX_INCOME_CONCESS = 555555;

function getMinSalary(f)
{
	return (Math.ceil(MIN_SALARY/f.cmbGrossSalaryFreq.value))
}
function reSetMinMaxAnnualPensionIncomes()
{
		minAnnualPensionIncome=0;
		document.getElementById("minAAI").innerHTML='<B>$' + _nbsp + minAnnualPensionIncome+"</B>";
		document.getElementById("lblMinInc21").innerHTML="$"+minAnnualPensionIncome;
}
function reSetMinMaxAnnualPensionIncomesNew()
{
		minAnnualPensionIncomeNew=0;
		document.getElementById("lblMinInc22").innerHTML="$"+minAnnualPensionIncomeNew;
}
function setMinMaxAnnualPensionIncomes()
{
	var f = document.forms.frmName;
	reSetMinMaxAnnualPensionIncomes()
	// validate every variable that can influence the final result for retirementFinalTotalSuperSavings
	var cnt=false;
if(
	validField(f.txtCurrentAge, MIN_AGE, MAX_AGE) && 
	validField(f.txtRetirementAge, MIN_R_AGE, MAX_R_AGE) && 
	(getSafeFieldValue(f.txtRetirementAge) > getSafeFieldValue(f.txtCurrentAge)) && 
	(jsLRTrim(f.txtSuperAccBalance.value)=="" || validField(f.txtSuperAccBalance, MIN_SUPACCBAL, MAX_SUPACCBAL)) && 
	validField(f.txtGrossSalary, getMinSalary(f), MAX_SALARY) && 
	(jsLRTrim(f.txtAfterTax.value) == "" || validAfterTax_JS(f, f.txtAfterTax)) && 
	(jsLRTrim(f.txtSalSac.value) == "" || validSalSac_JS(f, f.txtSalSac)) && 
	validEmplCont_JS(f) && 
	(jsLRTrim(f.txtFees.value)=="" || validField(f.txtFees, Math.ceil(((getSafeFieldValue(f.txtGrossSalary))*f.cmbGrossSalaryFreq.value)*(MIN_FEES_PCTG/100.0)/f.cmbFeesFreq.value), Math.ceil(((getSafeFieldValue(f.txtGrossSalary))*f.cmbGrossSalaryFreq.value)*(MAX_FEES_PCTG/100.0)/f.cmbFeesFreq.value))) && 
	(jsLRTrim(f.txtInsurance.value)=="" || validField(f.txtInsurance, Math.ceil(((getSafeFieldValue(f.txtGrossSalary))*f.cmbGrossSalaryFreq.value)*(MIN_INSURANCEPREMIUMS_PCTG/100.0)/f.cmbInsuranceFreq.value), Math.ceil(((getSafeFieldValue(f.txtGrossSalary))*f.cmbGrossSalaryFreq.value)*(MAX_INSURANCEPREMIUMS_PCTG/100.0)/f.cmbInsuranceFreq.value))) && 
	(jsLRTrim(f.txtAfterTaxNew.value)=="" || validField(f.txtAfterTaxNew, MIN_AFTERTAX, Math.floor(MAX_AFTERTAX150K/f.cmbAfterTaxFreq.value))) && 
	(jsLRTrim(f.txtSalSacNew.value)=="" || validField(f.txtSalSacNew, MIN_SALSAC, (Math.min(Math.floor((getSafeFieldValue(f.txtGrossSalary)*f.cmbGrossSalaryFreq.value)/f.cmbSalSacFreq.value),getMAX_SALSAC(f))))))
	{
	if((jsLRTrim(f.txtAgeStop.value)=="" && jsLRTrim(f.txtAgeRecommence.value)=="") || (isInt(f.txtAgeStop.value) && isInt(f.txtAgeRecommence.value)))
	{
		if(isInt(f.txtAgeStop.value) && isInt(f.txtAgeRecommence.value))
		{
			if(getSafeFieldValue(f.txtCurrentAge) < getSafeFieldValue(f.txtAgeStop) &&
					getSafeFieldValue(f.txtAgeStop) < getSafeFieldValue(f.txtAgeRecommence) &&
					getSafeFieldValue(f.txtAgeRecommence) < getSafeFieldValue(f.txtRetirementAge))
				cnt = true
		}
		else
			cnt=true
	}
	
	var s=jsLRTrim(f.txtSupBenInvRetNew.value)
	if(s.length==2 && s.substring(1,2) == '.')
		s=s.substring(0,1)
	f.txtSupBenInvRetNew.value=s
	if(jsLRTrim(f.txtSupBenInvRetNew.value)=="")
		f.txtSupBenInvRetNew.value=INVEST_RATE_SUPBENEFIT

	if(isDecimal_MinMax(f.txtSupBenInvRetNew,MIN_PCTG_SUPERBENEFIT,MAX_PCTG_SUPERBENEFIT,"",false))
		cnt=true
	else
		cnt = false

}
if(cnt)
{
	gl_FinalTotalSuperSavings = 0
	gl_FinalTotalSuperSavingsNew = 0

	var retCalculateBenefit07 = _calculateBenefit07(scenarioTwoEntered())
	if(retCalculateBenefit07 == FINALTOTALSUPERSAVINGS_OK)
	{
		gl_FinalTotalSuperSavings = retirementFinalTotalSuperSavings
		gl_FinalTotalSuperSavingsNew = retirementFinalTotalSuperSavingsNew
	
		if(validFinalTotalSuperSavings1(gl_FinalTotalSuperSavings,MIN_INV_AMOUNT,MAX_INV_AMOUNT,"",false))
		{
				minAnnualPensionIncome=getMinAnnualPensionIncome_NEW(f, gl_FinalTotalSuperSavings);
				if(minAnnualPensionIncome<0)
					minAnnualPensionIncome=0;
				document.getElementById("minAAI").innerHTML='<B>$' + _nbsp + removeDecimalPart((Math.ceil(minAnnualPensionIncome/f.cmbIncomeFreq.value)).toLocaleString()) + '</B>';
		}
	}
}
minAnnualPensionIncomeNew = minAnnualPensionIncome
document.getElementById("lblMinInc21").innerHTML="$"+removeDecimalPart((Math.ceil(minAnnualPensionIncome/f.cmbIncomeFreq.value)).toLocaleString())
document.getElementById("lblMinInc22").innerHTML=document.getElementById("lblMinInc21").innerHTML
}
function validFinalTotalSuperSavings(field,min1,max1,prompt0,prompt1)
{
var v=field.value
var int1 = /^\d{1,}(\.\d{1,})?$/;
var reg=new RegExp(int1);
var ret = reg.test(v);
if(ret && parseFloat(v) >= min1 && parseFloat(v) <= max1)
	return true;
else
{
	if(prompt1)
		alert(prompt0)
	return false;
}
}
function validFinalTotalSuperSavings1(_value,min1,max1,prompt0,prompt1)
{
var v=_value
var int1 = /^\d{1,}(\.\d{1,})?$/;
var reg=new RegExp(int1);
var ret = reg.test(v);
if(ret && parseFloat(v) >= min1 && parseFloat(v) <= max1)
	return true;
else
{
	if(prompt1)
		alert(prompt0)
	return false;
}
}
function setMinMaxAnnualPensionIncomesNew()
{
	var f = document.forms.frmName;
	reSetMinMaxAnnualPensionIncomesNew()
	var cnt=false;
	if( (jsLRTrim(f.txtAfterTaxNew.value) == "" || validAfterTax_JS(f, f.txtAfterTaxNew)) &&
			(jsLRTrim(f.txtSalSacNew.value) == "" || validSalSac_JS(f, f.txtSalSacNew)) && 
			validFieldNew(f.txtSupBenInvRetNew, MIN_PCTG_SUPERBENEFIT, MAX_PCTG_SUPERBENEFIT) &&
			validFieldNew(f.txtRtrmntBenInvRetNew, MIN_PCTG_RETIREMENTBENEFIT, MAX_PCTG_RETIREMENTBENEFIT) &&
			validFieldNew(f.txtSalaryInflationNew, MIN_INFLATION_SALARY, MAX_INFLATION_SALARY) &&
			validFieldNew(f.txtInflationNew, MIN_INFLATION, MAX_INFLATION)
		)
			cnt = true
		else
			cnt = false
if(cnt)
{
	gl_FinalTotalSuperSavings = 0
	gl_FinalTotalSuperSavingsNew = 0
	var retCalculateBenefit07 = _calculateBenefit07(scenarioTwoEntered())
	if(retCalculateBenefit07 == FINALTOTALSUPERSAVINGS_OK)
	{
		gl_FinalTotalSuperSavings = retirementFinalTotalSuperSavings
		gl_FinalTotalSuperSavingsNew = retirementFinalTotalSuperSavingsNew

		if(gl_FinalTotalSuperSavingsNew <= MAX_INV_AMOUNT)
		{
			minAnnualPensionIncomeNew=getMinAnnualPensionIncome_NEW(f, gl_FinalTotalSuperSavingsNew)
			if(minAnnualPensionIncomeNew<0)
				minAnnualPensionIncomeNew=0;
			document.getElementById("lblMinInc22").innerHTML="$"+removeDecimalPart((Math.ceil(minAnnualPensionIncomeNew/f.cmbIncomeFreq.value)).toLocaleString())
			if(getSafeFieldValue(f.txtRqdIncomeNew) < (Math.ceil(minAnnualPensionIncomeNew/f.cmbIncomeFreq.value)))
				f.txtRqdIncomeNew.value=(Math.ceil(minAnnualPensionIncomeNew/f.cmbIncomeFreq.value))
		}
		else
		{
			alert("Investment amount exceeded the maximum of "+removeDecimalPart(MAX_INV_AMOUNT.toLocaleString())+". Please adjust the figures.")

			resetToDefault(document.forms.frmName);
		}
	}
}
}
function getMinAnnualPensionIncome_NEW(f, _value)
{
return (_value*getPensionValuationFactor_NEW(getSafeFieldValue(f.txtRetirementAge)))
}
function goToStep2(e,tabNumber)
{
	var f=document.forms.frmName
	if(validStep1(f))
	{
		resetTo0(f.txtSuperAccBalance)
		resetTo0(f.txtAfterTax)
		resetTo0(f.txtSalSac)
		resetTo0(f.txtFees)
		resetTo0(f.txtInsurance)

		var atc=(jsLRTrim(f.txtAfterTax.value)=="")?0:getSafeFieldValue(f.txtAfterTax);
		document.getElementById("lblATCN0").innerHTML="Vary the " +getCmbText(f.cmbAfterTaxFreq,"l") + "ly after-tax contribution";
		document.getElementById("lblATCN1").innerHTML="$"+removeDecimalPart(atc.toLocaleString());

		var ptc=(jsLRTrim(f.txtSalSac.value)=="")?0:getSafeFieldValue(f.txtSalSac);
		document.getElementById("lblPTCN0").innerHTML="Vary the " +getCmbText(f.cmbSalSacFreq,"l") + "ly salary sacrifice contribution";
		document.getElementById("lblPTCN1").innerHTML="$"+removeDecimalPart(ptc.toLocaleString());

document.getElementById("lblMinInc20").innerHTML="The minimum "+getCmbText(f.cmbIncomeFreq,"l")+" pension income"
var inc=(jsLRTrim(f.txtRqdIncome.value)=="")?0:getSafeFieldValue(f.txtRqdIncome);
document.getElementById("lblINC0").innerHTML="Vary the nominated " +getCmbText(f.cmbIncomeFreq,"l") + " income in retirement";
document.getElementById("lblINC1").innerHTML="$"+removeDecimalPart(inc.toLocaleString());
document.getElementById("lblINVRATE_SUPERBENEFIT0").innerHTML="Superannuation benefit (between "+MIN_PCTG_SUPERBENEFIT+"% and "+MAX_PCTG_SUPERBENEFIT+"%)"
document.getElementById("lblINVRATE_RETIREMENTBENEFIT0").innerHTML="Retirement benefit (between "+MIN_PCTG_RETIREMENTBENEFIT+"% and "+MAX_PCTG_RETIREMENTBENEFIT+"%)"
document.getElementById("lblINFLATION_SALARY0").innerHTML="Vary the salary inflation rate (between "+MIN_INFLATION_SALARY+"% and "+MAX_INFLATION_SALARY+"%)"
document.getElementById("lblINFLATION0").innerHTML="Vary the inflation rate (between "+MIN_INFLATION+"% and "+MAX_INFLATION+"%)"
document.getElementById("lblINVRATE_SUPERBENEFIT").innerHTML=INVEST_RATE_SUPBENEFIT+"%";
document.getElementById("lblINVRATE_RETIREMENTBENEFIT").innerHTML=INVEST_RATE_RETBENEFIT+"%";
document.getElementById("lblINFLATION_SALARY").innerHTML=INFLATION_SALARY+"%";
document.getElementById("lblINFLATION").innerHTML=INFLATION+"%";

		if(!testLimits(f))
			showTab(1)
		else
		{
			showTab(tabNumber);
			mySelect(f.txtAfterTaxNew)
		}
	}
}
function goToStep4(e,tabNumber)
{
	var f=document.forms.frmName
	if(validStep1(f))
	{
			showTab(tabNumber);
	}
}
function setLifeExpectancy(f)
{
	var field = f.txtRetirementAge
	f.txtLifeExpectancy.value=""
	document.getElementById("lblNOYIR").innerHTML="&nbsp;"
	if((f.rdGender[0].checked || f.rdGender[1].checked) && isInt(field.value) && (getSafeFieldValue(field) >= MIN_R_AGE && getSafeFieldValue(field) <= MAX_R_AGE))
	{
			var le = Math.floor(getLifeExpectancyFactor(f.rdGender[0].checked, getSafeFieldValue(f.txtRetirementAge)))
			f.txtLifeExpectancy.value=(le+getSafeFieldValue(f.txtRetirementAge))
			setNoOfYrsInRet(f)
	}
}
function getLifeExpectancyFactor(isFemale,cAge)
{
	// isFemale is TRUE for Females
	ret = 0.0;
	if(!isFemale)
	{
		switch(cAge)
		{
			case 15:
					ret = 63.28;
					break;
			case 16:
					ret = 62.3;
					break;
			case 17:
					ret = 61.33;
					break;
			case 18:
					ret = 60.37;
					break;
			case 19:
					ret = 59.43;
					break;
			case 20:
					ret = 58.48;
					break;
			case 21:
					ret = 57.54;
					break;
			case 22:
					ret = 56.59;
					break;
			case 23:
					ret = 55.65;
					break;
			case 24:
					ret = 54.71;
					break;
			case 25:
					ret = 53.77;
					break;
			case 26:
					ret = 52.83;
					break;
			case 27:
					ret = 51.89;
					break;
			case 28:
					ret = 50.95;
					break;
			case 29:
					ret = 50.01;
					break;
			case 30:
					ret = 49.07;
					break;
			case 31:
					ret = 48.13;
					break;
			case 32:
					ret = 47.19;
					break;
			case 33:
					ret = 46.24;
					break;
			case 34:
					ret = 45.3;
					break;
			case 35:
					ret = 44.35;
					break;
			case 36:
					ret = 43.41;
					break;
			case 37:
					ret = 42.47;
					break;
			case 38:
					ret = 41.53;
					break;
			case 39:
					ret = 40.58;
					break;
			case 40:
					ret = 39.65;
					break;
			case 41:
					ret = 38.71;
					break;
			case 42:
					ret = 37.77;
					break;
			case 43:
					ret = 36.84;
					break;
			case 44:
					ret = 35.91;
					break;
			case 45:
					ret = 34.98;
					break;
			case 46:
					ret = 34.06;
					break;
			case 47:
					ret = 33.13;
					break;
			case 48:
					ret = 32.22;
					break;
			case 49:
					ret = 31.3;
					break;
			case 50:
					ret = 30.39;
					break;
			case 51:
					ret = 29.49;
					break;
			case 52:
					ret = 28.59;
					break;
			case 53:
					ret = 27.69;
					break;
			case 54:
					ret = 26.8;
					break;
			case 55:
				ret = 25.92;
				break;
			case 56:
				ret = 25.05;
				break;
			case 57:
				ret = 24.19;
				break;
			case 58:
				ret = 23.34;
				break;
			case 59:
				ret = 22.49;
				break;
			case 60:
				ret = 21.66;
				break;
			case 61:
				ret = 20.84;
				break;
			case 62:
				ret = 20.04;
				break;
			case 63:
				ret = 19.24;
				break;
			case 64:
				ret = 18.46;
				break;
			case 65:
				ret = 17.7;
				break;
			case 66:
				ret = 16.95;
				break;
			case 67:
				ret = 16.21;
				break;
			case 68:
				ret = 15.48;
				break;
			case 69:
				ret = 14.78;
				break;
			case 70:
				ret = 14.08;
				break;
			case 71:
				ret = 13.41;
				break;
			case 72:
				ret = 12.75;
				break;
			case 73:
				ret = 12.11;
				break;
			case 74:
				ret = 11.5;
				break;
			case 75:
				ret = 10.9;
				break;
			case 76:
				ret = 10.32;
				break;
			case 77:
				ret = 9.77;
				break;
			case 78:
				ret = 9.24;
				break;
			case 79:
				ret = 8.73;
				break;
			case 80:
				ret = 8.24;
				break;
			case 81:
				ret = 7.77;
				break;
			case 82:
				ret = 7.32;
				break;
			case 83:
				ret = 6.89;
				break;
			case 84:
				ret = 6.48;
				break;
			case 85:
				ret = 6.11;
				break;
			case 86:
				ret = 5.77;
				break;
			case 87:
				ret = 5.47;
				break;
			case 88:
				ret = 5.2;
				break;
			case 89:
				ret = 4.95;
				break;
			case 90:
				ret = 4.74;
				break;
			case 91:
				ret = 4.54;
				break;
			case 92:
				ret = 4.36;
				break;
			case 93:
				ret = 4.19;
				break;
			case 94:
				ret = 4.03;
				break;
			case 95:
				ret = 3.87;
				break;
			case 96:
				ret = 3.73;
				break;
			case 97:
				ret = 3.6;
				break;
			case 98:
				ret = 3.47;
				break;
			case 99:
				ret = 3.35;
				break;
			case 100:
				ret = 3.24;
				break;
			default:
				ret = 3.24;// just in case
				break;
		}
	}
	else
	{
		switch(cAge)
		{
			case 15:
					ret = 68.41;
					break;
			case 16:
					ret = 67.42;
					break;
			case 17:
					ret = 66.44;
					break;
			case 18:
					ret = 65.45;
					break;
			case 19:
					ret = 64.48;
					break;
			case 20:
					ret = 63.5;
					break;
			case 21:
					ret = 62.52;
					break;
			case 22:
					ret = 61.54;
					break;
			case 23:
					ret = 60.57;
					break;
			case 24:
					ret = 59.59;
					break;
			case 25:
					ret = 58.61;
					break;
			case 26:
					ret = 57.63;
					break;
			case 27:
					ret = 56.65;
					break;
			case 28:
					ret = 55.68;
					break;
			case 29:
					ret = 54.7;
					break;
			case 30:
					ret = 53.72;
					break;
			case 31:
					ret = 52.75;
					break;
			case 32:
					ret = 51.77;
					break;
			case 33:
					ret = 50.8;
					break;
			case 34:
					ret = 49.82;
					break;
			case 35:
					ret = 48.85;
					break;
			case 36:
					ret = 47.88;
					break;
			case 37:
					ret = 46.91;
					break;
			case 38:
					ret = 45.94;
					break;
			case 39:
					ret = 44.98;
					break;
			case 40:
					ret = 44.01;
					break;
			case 41:
					ret = 43.05;
					break;
			case 42:
					ret = 42.09;
					break;
			case 43:
					ret = 41.14;
					break;
			case 44:
					ret = 40.18;
					break;
			case 45:
					ret = 39.23;
					break;
			case 46:
					ret = 38.28;
					break;
			case 47:
					ret = 37.33;
					break;
			case 48:
					ret = 36.39;
					break;
			case 49:
					ret = 35.45;
					break;
			case 50:
					ret = 34.51;
					break;
			case 51:
					ret = 33.58;
					break;
			case 52:
					ret = 32.66;
					break;
			case 53:
					ret = 31.73;
					break;
			case 54:
					ret = 30.82;
					break;
			case 55:
				ret = 29.91;
				break;
			case 56:
				ret = 29;
				break;
			case 57:
				ret = 28.1;
				break;
			case 58:
				ret = 27.21;
				break;
			case 59:
				ret = 26.32;
				break;
			case 60:
				ret = 25.44;
				break;
			case 61:
				ret = 24.57;
				break;
			case 62:
				ret = 23.71;
				break;
			case 63:
				ret = 22.85;
				break;
			case 64:
				ret = 22;
				break;
			case 65:
				ret = 21.15;
				break;
			case 66:
				ret = 20.32;
				break;
			case 67:
				ret = 19.49;
				break;
			case 68:
				ret = 18.67;
				break;
			case 69:
				ret = 17.87;
				break;
			case 70:
				ret = 17.08;
				break;
			case 71:
				ret = 16.29;
				break;
			case 72:
				ret = 15.53;
				break;
			case 73:
				ret = 14.78;
				break;
			case 74:
				ret = 14.05;
				break;
			case 75:
				ret = 13.33;
				break;
			case 76:
				ret = 12.63;
				break;
			case 77:
				ret = 11.94;
				break;
			case 78:
				ret = 11.27;
				break;
			case 79:
				ret = 10.61;
				break;
			case 80:
				ret = 9.98;
				break;
			case 81:
				ret = 9.38;
				break;
			case 82:
				ret = 8.81;
				break;
			case 83:
				ret = 8.27;
				break;
			case 84:
				ret = 7.76;
				break;
			case 85:
				ret = 7.28;
				break;
			case 86:
				ret = 6.83;
				break;
			case 87:
				ret = 6.41;
				break;
			case 88:
				ret = 6.02;
				break;
			case 89:
				ret = 5.66;
				break;
			case 90:
				ret = 5.33;
				break;
			case 91:
				ret = 5.03;
				break;
			case 92:
				ret = 4.75;
				break;
			case 93:
				ret = 4.5;
				break;
			case 94:
				ret = 4.28;
				break;
			case 95:
				ret = 4.07;
				break;
			case 96:
				ret = 3.88;
				break;
			case 97:
				ret = 3.71;
				break;
			case 98:
				ret = 3.55;
				break;
			case 99:
				ret = 3.4;
				break;
			case 100:
				ret = 3.26;
				break;
			default:
				ret = 3.26;
				break;
		}
	}
	return ret;
}
function setRemainingWorkingYears(f)
{
	var ret = 0;
if(	isInt(f.txtCurrentAge.value) && (getSafeFieldValue(f.txtCurrentAge) >= MIN_AGE && getSafeFieldValue(f.txtCurrentAge) <= MAX_AGE) &&
		isInt(f.txtRetirementAge.value) && (getSafeFieldValue(f.txtRetirementAge) >= MIN_R_AGE && getSafeFieldValue(f.txtRetirementAge) <= MAX_R_AGE) &&
		(getSafeFieldValue(f.txtRetirementAge) > getSafeFieldValue(f.txtCurrentAge)) &&
		(
			(jsLRTrim(f.txtAgeStop.value)=="" && jsLRTrim(f.txtAgeRecommence.value)=="") ||
			(isInt(f.txtAgeStop.value) && isInt(f.txtAgeRecommence.value))
		)
)
{
	if(isInt(f.txtAgeStop.value) && isInt(f.txtAgeRecommence.value))
	{
		if(getSafeFieldValue(f.txtCurrentAge) < getSafeFieldValue(f.txtAgeStop) &&
				getSafeFieldValue(f.txtAgeStop) < getSafeFieldValue(f.txtAgeRecommence) &&
				getSafeFieldValue(f.txtAgeRecommence) < getSafeFieldValue(f.txtRetirementAge))
			ret = getRemainingWorkingYears(getSafeFieldValue(f.txtCurrentAge),getSafeFieldValue(f.txtRetirementAge),getSafeFieldValue(f.txtAgeStop),getSafeFieldValue(f.txtAgeRecommence))
	}
	else
		ret = getRemainingWorkingYears(getSafeFieldValue(f.txtCurrentAge),getSafeFieldValue(f.txtRetirementAge),getSafeFieldValue(f.txtAgeStop),getSafeFieldValue(f.txtAgeRecommence))
}
document.getElementById("lblRWY").innerHTML=((ret==0)?"&nbsp;":ret);
}
function getRemainingWorkingYears(cAge,rAge,aStop,aRecomm)
{
	var ret = 0;
	if(rAge < MIN_R_AGE || rAge > MAX_R_AGE)
	{
			return 0;
	}
	if(cAge < MIN_AGE || cAge > MAX_AGE)
	{
			return 0;
	}
	if(cAge >= rAge)
	{
			return 0;
	}
	if(aStop == 0 && aRecomm == 0)
	{ // no career interruption
			ret = rAge - cAge;
	}
	else
	{
			if(aStop > 0 && aRecomm > 0)
			{
					if( aStop >= aRecomm )
							return 0;
					if( cAge >= aStop )
							return 0;
					if( aRecomm >= rAge )
							return 0;
					ret = rAge - (aRecomm - aStop) - cAge;
			}
			else
					return 0;
	}
	return ret;
}
function setNoOfYrsInRet(f)
{
document.getElementById("lblNOYIR").innerHTML="&nbsp;"
if(isInt(f.txtRetirementAge.value) && (getSafeFieldValue(f.txtRetirementAge) >= MIN_R_AGE && getSafeFieldValue(f.txtRetirementAge) <= MAX_R_AGE) && isInt(f.txtLifeExpectancy.value) && (getSafeFieldValue(f.txtLifeExpectancy) > getSafeFieldValue(f.txtRetirementAge) && getSafeFieldValue(f.txtLifeExpectancy) <= MAX_LEXPECT))
		{
			if(getSafeFieldValue(f.txtLifeExpectancy) > getSafeFieldValue(f.txtRetirementAge))
				document.getElementById("lblNOYIR").innerHTML=(getSafeFieldValue(f.txtLifeExpectancy) - getSafeFieldValue(f.txtRetirementAge))
		}
}
function passFiguresToApplet(f,tabNumber,repaint)
{
var t = getSafeFieldValue(f.txtRqdIncomeNew)
if(getSafeFieldValue(f.txtRqdIncomeNew) < Math.ceil(minAnnualPensionIncomeNew/f.cmbIncomeFreq.value))
	t = 0
document.getElementById('appID').sendFiguresToApplet(((f.rdGender[0].checked)?0:1),
	getSafeFieldValue(f.txtCurrentAge),
	getSafeFieldValue(f.txtRetirementAge),
	getSafeFieldValue(f.txtLifeExpectancy),
	getSafeFieldValue(f.txtAgeStop),
	getSafeFieldValue(f.txtAgeRecommence),
	getSafeFieldValue(f.txtSuperAccBalance),
	getSafeFieldValue(f.txtGrossSalary),
	parseInt(f.cmbGrossSalaryFreq.value),
	getSafeFieldValue(f.txtAfterTax),
	parseInt(f.cmbAfterTaxFreq.value),
	getSafeFieldValue(f.txtSalSac),
	parseInt(f.cmbSalSacFreq.value),
	getSafeFieldValue(f.txtEmplCont),
	parseInt(f.cmbEmplContFreq.value),
	getSafeFieldValue(f.txtFees),
	parseInt(f.cmbFeesFreq.value),
	getSafeFieldValue(f.txtInsurance),
	parseInt(f.cmbInsuranceFreq.value),
	getSafeFieldValue(f.txtRqdIncome),
	parseInt(f.cmbIncomeFreq.value),
	getSafeFieldValue(f.txtAfterTaxNew),
	getSafeFieldValue(f.txtSalSacNew),
	t,
	jsLRTrim(""+INVEST_RATE_SUPBENEFIT),
	jsLRTrim(f.txtSupBenInvRetNew.value),
		jsLRTrim(""+INVEST_RATE_RETBENEFIT),
		jsLRTrim(f.txtRtrmntBenInvRetNew.value),
			jsLRTrim(""+INFLATION_SALARY),
			jsLRTrim(f.txtSalaryInflationNew.value),
	jsLRTrim(""+INFLATION),
	jsLRTrim(f.txtInflationNew.value),
Math.ceil(minAnnualPensionIncome/f.cmbIncomeFreq.value),
Math.ceil(minAnnualPensionIncomeNew/f.cmbIncomeFreq.value),
jsLRTrim(""+AWOTE),
	repaint);
var errT = document.getElementById('appID').errT;
return errT
}
function testLimits(f)
{
	var retCalculateBenefit07 = _calculateBenefit07(scenarioTwoEntered(f))
	var retCalculateHowLong07 = calculateHowLong07(scenarioTwoEntered(f), retCalculateBenefit07)

	if(retCalculateBenefit07!=FINALTOTALSUPERSAVINGS_OK)
	{
		if(retCalculateBenefit07==TOTALBENEFIT_TOOBIG)
			alert("Total benefit is greater than $10 billions. Please adjust your figures.");
		if(retCalculateBenefit07==FEESINSURANCE_TOOHIGH || retCalculateBenefit07==FEESINSURANCE_TOOHIGH_NEW)
			alert("Fees and/or insurance premiums exceed the benefit.");
		return false;
	}
	if(retCalculateHowLong07!=INCOMEWILLSTOPATTHEEND_OK)
	{
		if(retCalculateHowLong07==RQRDINCOME_TOOHIGH || retCalculateHowLong07==RQRDINCOME_TOOHIGH_NEW)
			alert("Please decrease the Required gross income in retirement or increase the amount of future contributions. The amount of superannuation held plus future contributions you have entered will not be enough to cover the required gross income in retirement.")
		if(retCalculateHowLong07==BALANCE_TOOBIG || retCalculateHowLong07==BALANCE_TOOBIG_NEW)
			alert("Total sum is greater than $10 billions. Please adjust your figures.")
		return false;
	}
	return true;
}
function resetToDefault(f)
{
	f.txtAfterTaxNew.value=(f.txtAfterTax.value=="")?0:(f.txtAfterTax.value)
	f.txtSalSacNew.value=(f.txtSalSac.value=="")?0:(f.txtSalSac.value)
	f.txtRqdIncomeNew.value=f.txtRqdIncome.value
	f.txtSupBenInvRetNew.value=INVEST_RATE_SUPBENEFIT
	f.txtRtrmntBenInvRetNew.value=INVEST_RATE_RETBENEFIT
	f.txtSalaryInflationNew.value=INFLATION_SALARY
	f.txtInflationNew.value=INFLATION

	document.getElementById("lblMinInc22").innerHTML=document.getElementById("lblMinInc21").innerHTML
}
function scenarioTwoEntered()
{
	var f=document.forms.frmName
	if(f.txtAfterTax.value != f.txtAfterTaxNew.value ||
		f.txtSalSac.value != f.txtSalSacNew.value ||
		f.txtRqdIncome.value != f.txtRqdIncomeNew.value ||
		(""+INVEST_RATE_SUPBENEFIT) != f.txtSupBenInvRetNew.value ||
		(""+INVEST_RATE_RETBENEFIT) != f.txtRtrmntBenInvRetNew.value ||
		(""+INFLATION_SALARY) != f.txtSalaryInflationNew.value ||
		(""+INFLATION) != f.txtInflationNew.value)
		return true;
	else
		return false;

}
function setLabels(f)
{
lblMinInc.innerHTML="Minimum "+getCmbText(f.cmbIncomeFreq,"l")+" pension income (based on age)"
lblNomInc.innerHTML="Nominated "+getCmbText(f.cmbIncomeFreq,"l")+" pension income"
}
function selectGender(i)
{
	document.forms.frmName.rdGender[i].click()
}
function validStep2(f)
{
	if(validAfterTax(f.txtAfterTaxNew) && validSalSac(f, f.txtSalSacNew) && 
			validIncomeInRet(f, f.txtRqdIncomeNew, 1) && 
			validSuperBenefitInvestmentReturnNew(f) && 
			validRetirementBenefitInvestmentReturnNew(f) && 
			validSalaryInflationNew(f) &&
			validInflationNew(f))
		return true
	else
		return false
}
function validStep1(f)
{
if(validGender(f,true) && validCurrentAge(f) && validRetAge(f) && validLifeExpectancy(f) && validCareerBreak(f)
	&& validSuperAccBalance(f) && validGrossSalary(f) && validAfterTax(f.txtAfterTax) && validSalSac(f, f.txtSalSac)
	&& validEmplCont(f) && validFees(f) && validInsurance(f)
	&& validFinalTotalSuperSavings1(gl_FinalTotalSuperSavings,MIN_INV_AMOUNT,MAX_INV_AMOUNT,"The calculated total investment must be between "+
	formatted_toFixed1(MIN_INV_AMOUNT, 2, "$")+" and "+formatted_toFixed1(MAX_INV_AMOUNT, 2, "$")+". Please check your figures and related frequencies to ensure they are correct. (Currently, the calculated total investment is " +formatted_toFixed1(gl_FinalTotalSuperSavings, 2, "$")+".)",true)
	&& validIncomeInRet(f, f.txtRqdIncome, 0))
		return true
	else
		return false
}

function validIncomeInRet(f, field, i)
{
	field.value = setEmptyFieldTo0(field)

	if(i == 0)
		MIN_INCOME = (Math.ceil(minAnnualPensionIncome/f.cmbIncomeFreq.value))
	else
		MIN_INCOME = (Math.ceil(minAnnualPensionIncomeNew/f.cmbIncomeFreq.value))

	var sAll="Please enter nominated pension income in retirement in whole numbers only (without commas or decimal places)."
	var sMin="The nominated "+getCmbText(f.cmbIncomeFreq,"l")+" pension income amount must be at least $"+removeDecimalPart(MIN_INCOME.toLocaleString())+"."

	if(isInt(field.value))
	{
		if(getSafeFieldValue(field) < MIN_INCOME)
		{
			alert(sMin)
			mySelect(field)
			return false
		}
		else
		 return true
	}
	else
	{
		alert(sAll)
			mySelect(field)
			return false
	}
}

function validAnnuityIncome(f)
{
	var minInc=Math.ceil(minAnnualPensionIncome/f.cmbIncomeFreq.value)
	if(minInc > 0)
	{
		var field = f.txtRqdIncome
		var sAll="Please enter nominated pension income amount in whole numbers only (without commas or decimal places)."
		var sMin="The nominated "+getCmbText(f.cmbIncomeFreq,"l")+" pension income amount must be at least $"+removeDecimalPart(minInc.toLocaleString())+"."
		if(isInt(field.value))
		{
			if(getSafeFieldValue(field) < minInc)
			{
				alert(sMin)
				mySelect(field)
				return false
			}
			else
				return true
		}
		else
		{
			alert(sAll)
			mySelect(field)
			return false
		}
	}
	else
		alert("Minimum pension income not set. Please check the input.")
	return false;
}
function validAnnuityIncomeNew(f)
{
	var minInc=Math.ceil(minAnnualPensionIncomeNew/f.cmbIncomeFreq.value)
	if(minInc > 0)
	{
		var field = f.txtRqdIncomeNew
		var sAll="Please enter new nominated pension income amount in whole numbers only (without commas or decimal places)."
		var sMin="The new nominated "+getCmbText(f.cmbIncomeFreq,"l")+" pension income amount must be at least $"+removeDecimalPart(minInc.toLocaleString())+"."
		if(isInt(field.value))
		{
			if(getSafeFieldValue(field) < minInc)
			{
				alert(sMin)
				mySelect(field)
				return false
			}
			else
				return true
		}
		else
		{
			alert(sAll)
			mySelect(field)
			return false
		}

	}
	else
		alert("Minimum pension income not set. Please check the input.")
	return false;
}
function validGender(f,prompt)
{
	var ret = false;
	if(!f.rdGender[0].checked && !f.rdGender[1].checked)
	{
		if(prompt)
		{
			alert("Please specify gender.")
			location.href='#top1';
		}
	}
	else
		ret=true;
	return ret;
}
function validCurrentAge(f)
{
	var field = f.txtCurrentAge
	var sAll="Please enter current age in whole numbers."
	var sMin="Please enter current age between "+MIN_AGE+" and "+MAX_AGE+"."
	return (isValidValue(field,getSafeFieldValue(field),MIN_AGE,MAX_AGE,sMin,sMin,sAll));
}
function validLifeExpectancy(f)
{
var field = f.txtLifeExpectancy
var leMin = (1+getSafeFieldValue(f.txtRetirementAge))
var sAll="Please enter life expectancy in whole numbers. Alternatively, please re-enter current age or re-select gender."
var sMin="Life expectancy must be between "+leMin+" and "+MAX_LEXPECT+"."
return (isValidValue(field,getSafeFieldValue(field),leMin,MAX_LEXPECT,sMin,sMin,sAll));
}
function validRetAge(f)
{
	var field = f.txtRetirementAge
	var sAll="Please enter retirement age in whole numbers."
	var sMin="Please enter retirement age between "+MIN_R_AGE+" and "+MAX_R_AGE+"."
	if(isValidValue(field,getSafeFieldValue(field),MIN_R_AGE,MAX_R_AGE,sMin,sMin,sAll))
	{
		if(getSafeFieldValue(f.txtCurrentAge) < getSafeFieldValue(field))
			return true
		else
		{
			alert("Current age must be less than retirement age.")
			return false
		}
	}
	else
		return false
}
function validCareerBreak(f)
{
	if(jsLRTrim(f.txtAgeStop.value)=="" && jsLRTrim(f.txtAgeRecommence.value)=="")
		return true
	else
	{
		if((jsLRTrim(f.txtAgeStop.value)=="" && jsLRTrim(f.txtAgeRecommence.value)!="") ||
			(jsLRTrim(f.txtAgeStop.value)!="" && jsLRTrim(f.txtAgeRecommence.value)==""))
		{
			alert("Both stop age and re-commence age must be entered")
			return false
		}

		if(jsLRTrim(f.txtAgeStop.value)!="")
		{
			var field = f.txtAgeStop
			var sAll="Please enter stop age in whole numbers."
			var sMin="Please enter stop age between "+(getSafeFieldValue(f.txtCurrentAge)+1)+" and "+(getSafeFieldValue(f.txtRetirementAge)-2)+"."
			if(!(isValidValue(field,getSafeFieldValue(field),(getSafeFieldValue(f.txtCurrentAge)+1),(getSafeFieldValue(f.txtRetirementAge)-2),sMin,sMin,sAll)))
				return false;
		}
		if(jsLRTrim(f.txtAgeRecommence.value)!="")
		{
			var field = f.txtAgeRecommence
			var sAll="Please enter recommence age in whole numbers."
			var sMin="Please enter recommence age between "+(getSafeFieldValue(f.txtCurrentAge)+2)+" and "+(getSafeFieldValue(f.txtRetirementAge)-1)+"."
			if(!(isValidValue(field,getSafeFieldValue(field),(getSafeFieldValue(f.txtCurrentAge)+2),(getSafeFieldValue(f.txtRetirementAge)-1),sMin,sMin,sAll)))
				return false;
		}
		var sAge = getSafeFieldValue(f.txtAgeStop)
		var rAge = getSafeFieldValue(f.txtAgeRecommence)
		if(sAge >= rAge)
		{
			alert("Stop age must be less than recommence age.")
			return false
		}
		if(sAge <= getSafeFieldValue(f.txtCurrentAge))
		{
			alert("Stop age must be greater than current age.")
			return false
		}
		if(rAge >= getSafeFieldValue(f.txtRetirementAge))
		{
			alert("Recommence age must be less than retirement age.")
			return false
		}
		return true
	}
}
function validSuperAccBalance(f)
{
	var field = f.txtSuperAccBalance
	if(jsLRTrim(field.value)=="")
		return true;
	var sAll="Please enter current super account balance in whole numbers only (without commas or decimal places)."
	var sMin="Please enter current super account balance between $"+MIN_SUPACCBAL+" and $"+removeDecimalPart(MAX_SUPACCBAL.toLocaleString())+"."
	return (isValidValue(field,getSafeFieldValue(field),MIN_SUPACCBAL,MAX_SUPACCBAL,sMin,sMin,sAll));
}
function validGrossSalary(f)
{
	var field = f.txtGrossSalary
	var sAll="Please enter gross salary for super purposes in whole numbers only (without commas or decimal places)."
	var sMin="Please enter gross salary for super purposes between $"+removeDecimalPart(getMinSalary(f).toLocaleString())+" and $"+removeDecimalPart(MAX_SALARY.toLocaleString())+"."
	return (isValidValue(field,getSafeFieldValue(field),getMinSalary(f),MAX_SALARY,sMin,sMin,sAll));
}
function setMinimumSGCPerPay(f)
{
	var eContMin = 0
	if(isInt(f.txtGrossSalary.value) && (getSafeFieldValue(f.txtGrossSalary) >= getMinSalary(f) && getSafeFieldValue(f.txtGrossSalary) <= MAX_SALARY))
	{
		eContMin=Math.ceil(((getSafeFieldValue(f.txtGrossSalary))*f.cmbGrossSalaryFreq.value)*(MIN_EMPLCONT_PCTG/100.0)/f.cmbEmplContFreq.value);
	}
	f.txtEmplCont.value=(eContMin==0)?"":eContMin
}
function validAfterTax(field)
{
	var f=document.forms.frmName
	var s1, s2 = "The amount of after-tax contributions, for the purposes of this calculator, is limited to 100% of your gross income less PAYG tax. "
	field.value = setEmptyFieldTo0(field)
	if(getSafeFieldValue(field) == 0)
		return true;
	
	field.value = jsLRTrim(field.value)
	field.value = setEmptyFieldTo0(field)
	var salary = getSafeFieldValue(f.txtGrossSalary)*f.cmbGrossSalaryFreq.value
	var MAX_DOLLAR1 = Math.min(getMaxAfterTax150K(f), getMaxAfterTaxD(f,field))
	var aTaxPossible = getMaxAfterTaxD(f,field)
	var aTaxEntered

	var MAX_PCTG1

	var sAll = "Please enter after-tax contribution in whole numbers only (without commas or decimal places)."
	MAX_DOLLAR1 = Math.floor(MAX_DOLLAR1/f.cmbAfterTaxFreq.value)
	aTaxEntered = getSafeFieldValue(field)*f.cmbAfterTaxFreq.value
	if(aTaxPossible >= getMaxAfterTax150K(f))
	{		
		s1 = "The amount of after-tax contributions, for the purposes of this calculator, is capped at $"+
					removeDecimalPart((getMaxAfterTax150K(f)).toLocaleString())+" per year. Based on the details you have entered, this yearly limit has been exceeded by $"+
					removeDecimalPart((aTaxEntered - getMaxAfterTax150K(f)).toLocaleString())+
					". You should either change the "+ getCmbText(f.cmbAfterTaxFreq,"l")+
					"ly after-tax contribution amount to less then or equal to $"+removeDecimalPart((Math.floor(getMaxAfterTax150K(f)/f.cmbAfterTaxFreq.value)).toLocaleString())+" or check your details and try again."  
	}
	else
	{
		if(MAX_DOLLAR1 > 0)
			s1 = s2 + "Please reduce your after-tax contribution to be within the range of $0 and $"+removeDecimalPart(MAX_DOLLAR1.toLocaleString())+" per "+getCmbText(f.cmbAfterTaxFreq,"l")+"."
		else
			s1 = s2 + "Based on the details you have entered this limit has been exceeded by $" + removeDecimalPart(aTaxEntered.toLocaleString()) + " ($"+removeDecimalPart(getSafeFieldValue(field).toLocaleString())+" per "+getCmbText(f.cmbAfterTaxFreq,"l")+"). You should either change the after-tax contribution amount to $0 or check your details and try again."
	}

	return (isValidValue(field,getSafeFieldValue(field), MIN_DOLLAR,MAX_DOLLAR1,s1,s1,sAll));
}
function validSalSac(f, field) 
{
	var ret = false;

	field.value = setEmptyFieldTo0(field)
	if(getSafeFieldValue(field) == 0)
		return true;

	var gIncome = getSafeFieldValue(f.txtGrossSalary)*f.cmbGrossSalaryFreq.value
	var emplConts = getEmployerContsYearly(f)
	var ss = getSalSacYearly(f)
	var sMin = "", sM = "Concessional (salary sacrifice plus SG) contributions are capped at a maximum of $"+removeDecimalPart((getMaxConcessional(f)).toLocaleString())+". "
	var sAll = "Please enter salary sacrifice contribution in whole numbers only (without commas or decimal places)."

	if(!numberValid(field.value,sAll))
	{
		mySelect(field)
		return false
	}

	if(emplConts >= getMaxConcessional(f))
	{
		// concessional already 50,000, so pre-tax has to be 0
		sMin = sM
		var dollarAbove = getSafeFieldValue(field)*f.cmbSalSacFreq.value
		sMin = sMin + "Based on the details you have entered this limit has been exceeded by $"+
				removeDecimalPart(dollarAbove.toLocaleString()) + 
				". You should either change the "+getCmbText(f.cmbSalSacFreq,"l")+"ly salary sacrifice contribution amount to $0 or check your details and try again."

		if(getSafeFieldValue(field) == 0)
			return true;
		else
		{
			alert(sMin)
			mySelect(field)
			return false
		}
	}
	else
	{
		// sum (emplConts+SalSac) can't be above 50000
		var salSac = getSafeFieldValue(field)*f.cmbSalSacFreq.value
		var maxAllowedConcessional_SalSac_Dlr
		if((emplConts + salSac) >= getMaxConcessional(f))
		{
			sMin = sM

			maxAllowedConcessional_SalSac_Dlr = Math.min(gIncome,Math.max(0,getMaxConcessional(f) - emplConts))
			var dlrAbove = Math.max(0, getSafeFieldValue(field)*f.cmbSalSacFreq.value - maxAllowedConcessional_SalSac_Dlr)
			sMin = sMin + "Based on the details you have entered this limit has been exceeded by $"+
					removeDecimalPart(dlrAbove.toLocaleString())+ 
					". You should either change the "+getCmbText(f.cmbSalSacFreq,"l")+"ly salary sacrifice contribution amount to less than or equal to $"+
					removeDecimalPart(Math.floor(((getSafeFieldValue(field)*f.cmbSalSacFreq.value - dlrAbove)/f.cmbSalSacFreq.value)).toLocaleString())+" or check your details and try again."
		}
		else
		{
			maxAllowedConcessional_SalSac_Dlr = gIncome
			sMin = "The salary sacrifice contribution is limited to 100% of your gross salary. Please enter the "+getCmbText(f.cmbSalSacFreq,"l")+"ly salary sacrifice contribution amount between $0 and $"+
					removeDecimalPart(Math.floor(maxAllowedConcessional_SalSac_Dlr/f.cmbSalSacFreq.value).toLocaleString())+"."
		}
		if(isValidValue(field,getSafeFieldValue(field),
					MIN_DOLLAR, Math.floor(maxAllowedConcessional_SalSac_Dlr/f.cmbSalSacFreq.value),sMin,sMin,sAll))
			return true;
		else
		{
			mySelect(field)
			return false
		}
	}
}

function validEmplCont(f)
{
	var field = f.txtEmplCont
	field.value = setEmptyFieldTo0(field)

	var salary=getSafeFieldValue(f.txtGrossSalary)*f.cmbGrossSalaryFreq.value
	if(salary >= MAX_INCOME_CONCESS)
	{
		// SG has to be getMaxConcessional(f)
		setEmplContsTo50K(f, true)
		// SG has to be less than 9%, but not too low!
		alert("Based on the gross salary you have entered, the concessional employer contribution has to be limited to $"+removeDecimalPart((getMaxConcessional(f)).toLocaleString())+".")
		return true
	}

	var eContMin = myMathCeil(((getSafeFieldValue(f.txtGrossSalary))*f.cmbGrossSalaryFreq.value)*(MIN_EMPLCONT_PCTG/100.0)/f.cmbEmplContFreq.value, 2);
	var eContMax = myRound(Math.min(myMathFloor(((getSafeFieldValue(f.txtGrossSalary))*f.cmbGrossSalaryFreq.value)*(MAX_EMPLCONT_PCTG/100.0)/f.cmbEmplContFreq.value, 2),
								myMathCeil(getMaxConcessional(f)/f.cmbEmplContFreq.value, 2)), 2)
	var sMin = "Please enter "+getCmbText(f.cmbEmplContFreq,"l")+"ly employer contribution between $" + formatted_toFixed1(eContMin, 2, "")+" and $"+formatted_toFixed1(eContMax, 2, "")+"."

	if(!validDecimalField2(f, field, sMin, eContMin, eContMax))
		return false
	else
		return true
}
function setEmplContsTo50K(f, doit)
{
if(doit)
{
f.cmbEmplContFreq.selectedIndex=3
f.txtEmplCont.value = getMaxConcessional(f)
}
else
{
f.txtEmplCont.value = 0
}
}
function validFees(f)
{
	var field = f.txtFees
	if(jsLRTrim(field.value)=="")
		return true;
	var feesMin=Math.ceil(((getSafeFieldValue(f.txtGrossSalary))*f.cmbGrossSalaryFreq.value)*(MIN_FEES_PCTG/100.0)/f.cmbFeesFreq.value);
	var feesMax=Math.ceil(((getSafeFieldValue(f.txtGrossSalary))*f.cmbGrossSalaryFreq.value)*(MAX_FEES_PCTG/100.0)/f.cmbFeesFreq.value);
	var sAll="Please enter deducted fees in whole numbers only (without commas or decimal places)."
	var sMin="Please enter deducted fees between $"+removeDecimalPart(feesMin.toLocaleString())+" and $"+removeDecimalPart(feesMax.toLocaleString())+"."
	return (isValidValue(field,getSafeFieldValue(field),feesMin,feesMax,sMin,sMin,sAll));
}
function validInsurance(f)
{
	var field = f.txtInsurance
	if(jsLRTrim(field.value)=="")
		return true;
	var insMin=Math.ceil(((getSafeFieldValue(f.txtGrossSalary))*f.cmbGrossSalaryFreq.value)*(MIN_INSURANCEPREMIUMS_PCTG/100.0)/f.cmbInsuranceFreq.value);
	var insMax=Math.ceil(((getSafeFieldValue(f.txtGrossSalary))*f.cmbGrossSalaryFreq.value)*(MAX_INSURANCEPREMIUMS_PCTG/100.0)/f.cmbInsuranceFreq.value);
	var sAll="Please enter deducted insurance premiums in whole numbers only (without commas or decimal places)."
	var sMin="Please enter deducted insurance premiums between $"+removeDecimalPart(insMin.toLocaleString())+" and $"+removeDecimalPart(insMax.toLocaleString())+"."
	return (isValidValue(field,getSafeFieldValue(field),insMin,insMax,sMin,sMin,sAll));
}
function validInvestmentReturnNew(f)
{
	if(!validDecimalField2(f,f.txtSupBenInvRetNew, ("The investment return percentage must be between "+MIN_PCTG_SUPERBENEFIT+"% and "+MAX_PCTG_SUPERBENEFIT+"%."), MIN_PCTG_SUPERBENEFIT,MAX_PCTG_SUPERBENEFIT))
		return false
	else
		return true
}

function getMAX_SALSAC(f)
{
	var sgc=getSafeFieldValue(f.txtEmplCont)*f.cmbEmplContFreq.value
	return Math.max((Math.floor((MAX_CONCESSIONAL_50K-sgc)/f.cmbSalSacFreq.value)),0)
}
function validSuperBenefitInvestmentReturnNew(f)
{
	if(!validDecimalField2(f,f.txtSupBenInvRetNew, ("The superannuation benefit investment return percentage must be between "+MIN_PCTG_SUPERBENEFIT+"% and "+MAX_PCTG_SUPERBENEFIT+"%."), MIN_PCTG_SUPERBENEFIT,MAX_PCTG_SUPERBENEFIT))
		return false
	else
		return true
}
function validRetirementBenefitInvestmentReturnNew(f)
{
	if(!validDecimalField2(f,f.txtRtrmntBenInvRetNew, ("The retirement benefit investment return percentage must be between "+MIN_PCTG_RETIREMENTBENEFIT+"% and "+MAX_PCTG_RETIREMENTBENEFIT+"%."), MIN_PCTG_RETIREMENTBENEFIT,MAX_PCTG_RETIREMENTBENEFIT))
		return false
	else
		return true
}
function validSalaryInflationNew(f)
{
	if(!validDecimalField2(f,f.txtSalaryInflationNew, ("The new salary inflation rate must be between "+MIN_INFLATION_SALARY+"% and "+MAX_INFLATION_SALARY+"%."), MIN_INFLATION_SALARY,MAX_INFLATION_SALARY))
		return false
	else
		return true
}
function validInflationNew(f)
{
	if(!validDecimalField2(f,f.txtInflationNew, ("The new inflation rate must be between "+MIN_INFLATION+"% and "+MAX_INFLATION+"%."), MIN_INFLATION,MAX_INFLATION))
		return false
	else
		return true
}

function newScenario()
{
	var f = document.forms.frmName
	if(f.txtAfterTax.value == f.txtAfterTaxNew.value && f.txtSalSac.value == f.txtSalSacNew.value &&
		f.txtRqdIncome.value == f.txtRqdIncomeNew.value && f.txtInvRetNew.value==INVEST_RATE && f.txtInflationNew.value==INFLATION)
		return false
	else
		return true
}

function validInvestmentreturnNewT2(f, txtField)
{
txtField.value=jsLRTrim(txtField.value)
	if(!validDecimalField2(f,txtField, "", MIN_PCTG,MAX_PCTG))
	{
		txtField.value=""
		return false
	}
	else
		return true
}
function validInflationNewT2(f, txtField)
{
txtField.value=jsLRTrim(txtField.value)
	if(!validDecimalField2(f,txtField, "", MIN_INFLATION,MAX_INFLATION))
	{
		txtField.value=""
		return false
	}
	else
		return true
}

function _calculateBenefit07(scenarioTwo)
{
	var f=document.forms.frmName
	var ind;
	var afterTaxCont, afterTaxContNew, salSacCont, salSacContNew;
	var ReviewDate = null;
	var AnnualSalary = null;
	var AnnualSalaryNew = null;
	var TotalSuperSavings = null;
	var TotalSuperSavingsNew = null;
	var segmentLength = null;
	var NumberOfYears = 0;
	FinalTotalSuperSavings = 0.0;
	FinalTotalSuperSavingsNew = 0.0;
	retirementFinalTotalSuperSavings = 0;
	retirementFinalTotalSuperSavingsNew = 0;
	var fraction = 0.0
	var emplContPct = 0.0
	var sgcRate = 0.0
	var conts = 0.0
	var contsMax = 0.0
	var contsMin = 0.0;

	var employerCont$ = 0.0
	var totalEmployerCont$ = 0.0
	var netEmployerConts$ = 0.0
	var salSac$ = 0.0
	var salSacNew$ = 0.0
	var afterTax$ = 0.0
	var afterTaxNew$ = 0.0
	var fees$ = 0.0
	var insurance$ = 0.0;
	var feesPercent = 0.0
	var insurancePercent = 0.0;

var currentAge=getSafeFieldValue(f.txtCurrentAge)
var ageStop=getSafeFieldValue(f.txtAgeStop)
var ageRecommence=getSafeFieldValue(f.txtAgeRecommence)
	var investmentRate_SuperBenefit = INVEST_RATE_SUPBENEFIT/100.0
	var investmentRate_SuperBenefitNew = getSafeDecimalFieldValue(f.txtSupBenInvRetNew)/100.0
	var inflationSalary = INFLATION_SALARY/100.0
	var inflationSalaryNew = getSafeDecimalFieldValue(f.txtSalaryInflationNew)/100.0
	var inflation = INFLATION/100.0
	var inflationNew = getSafeDecimalFieldValue(f.txtInflationNew)/100.0

NumberOfYears = (getYearsToRetirement(f) + 1);
var todaysDate = new MyDate();
if( todaysDate.myGetDay() == 1 && todaysDate.myGetMonth() == 7 )
	;
else
	NumberOfYears++;

	ReviewDate = new Array(NumberOfYears);
	AnnualSalary = new Array(NumberOfYears);
	AnnualSalaryNew = new Array(NumberOfYears);

	TotalSuperSavings = new Array(NumberOfYears);
	segmentLength = new Array(NumberOfYears);
	TotalSuperSavingsNew = new Array(NumberOfYears);

	var lastBirthdayDate = setLastBirthdayDate(f, todaysDate);
	var salaryPerPay=getSafeFieldValue(f.txtGrossSalary)
	var payPeriod7=parseInt(f.cmbGrossSalaryFreq.value)
	var totalSuperSavings=getSafeFieldValue(f.txtSuperAccBalance)

	AnnualSalary[0] = salaryPerPay*payPeriod7;
	AnnualSalaryNew[0] = salaryPerPay*payPeriod7;
	TotalSuperSavings[0] = totalSuperSavings;
	TotalSuperSavingsNew[0] = totalSuperSavings;
	ReviewDate[0] = new MyDate();
	segmentLength[0] = 0;

	afterTaxCont = getSafeFieldValue(f.txtAfterTax)*parseInt(f.cmbAfterTaxFreq.value);
	afterTaxContNew = getSafeFieldValue(f.txtAfterTaxNew)*parseInt(f.cmbAfterTaxFreq.value);
	salSacCont = getSafeFieldValue(f.txtSalSac)*parseInt(f.cmbSalSacFreq.value);
	salSacContNew = getSafeFieldValue(f.txtSalSacNew)*parseInt(f.cmbSalSacFreq.value);

	var employerContributionPercent = (getSafeFieldValue(f.txtEmplCont)*parseInt(f.cmbEmplContFreq.value))/AnnualSalary[0];
	salSacPct = salSacCont/AnnualSalary[0];
	salSacNewPct = salSacContNew/AnnualSalary[0];
	afterTaxPct = afterTaxCont/AnnualSalary[0];
	afterTaxNewPct = afterTaxContNew/AnnualSalary[0];
	var feestmp = getSafeFieldValue(f.txtFees)*parseInt(f.cmbFeesFreq.value);
	feesPercent = feestmp/AnnualSalary[0];
	var insurancetmp = getSafeFieldValue(f.txtInsurance)*parseInt(f.cmbInsuranceFreq.value);
	insurancePercent = (insurancetmp/AnnualSalary[0]);
	sgcRate = SGC_RATE;
	emplContPct = Math.max(employerContributionPercent, sgcRate);

	var k = 0
	for(ind = 1; ind < NumberOfYears; ind++ )
	{
		ReviewDate[ind] = getNextReviewDate(ind - 1, ReviewDate[ind-1], lastBirthdayDate);

		fraction = getFraction(ind, ReviewDate[ind-1], ReviewDate[ind]);
		segmentLength[ind] = fraction;
		employerCont$ = emplContPct*AnnualSalary[ind-1]*fraction;
		salSac$ = salSacPct*AnnualSalary[ind-1]*fraction;
		totalEmployerCont$ = Math.min((employerCont$+salSac$), getConcessionalLimit_5K(k, inflationSalary));
		afterTax$ = Math.min(getAfterTaxLimit(k, inflationSalary),afterTaxPct*AnnualSalary[ind-1]*fraction);

		fees$ = feesPercent*AnnualSalary[ind-1]*fraction;
		insurance$ = insurancePercent*AnnualSalary[ind-1]*fraction;

		if(interruptedCareer(f))
		{
			if( (currentAge + ind) > ageStop && (currentAge + ind) <= ageRecommence )
			{
				employerCont$ = 0.0;
				totalEmployerCont$ = 0.0;
				salSac$ = 0.0;
				afterTax$ = 0.0;
			}
		}

		netEmployerConts$=(totalEmployerCont$ < (fees$+insurance$) && totalEmployerCont$ < 1)?(-fees$-insurance$):
			((totalEmployerCont$ < (fees$+insurance$))?(totalEmployerCont$-fees$-insurance$):((totalEmployerCont$-fees$-insurance$)*(1-TAX_RATE)));

		if(ind != 1)
			coContribution = getCoContribution(AnnualSalary[ind-1]*fraction, afterTax$, ReviewDate[ind], inflation);
		else
			coContribution = getCoContribution(AnnualSalary[ind-1], Math.min(getAfterTaxLimit(k, inflationSalary),afterTaxPct*AnnualSalary[ind-1]), ReviewDate[ind], inflation);

		TotalSuperSavings[ind] = TotalSuperSavings[ind - 1]*(1 + fraction*investmentRate_SuperBenefit) + (afterTax$ + netEmployerConts$)*(1 + fraction*investmentRate_SuperBenefit/2) + coContribution;

		if(scenarioTwo)
		{
			employerCont$ = emplContPct*AnnualSalaryNew[ind-1]*fraction;
			salSacNew$ = salSacNewPct*AnnualSalaryNew[ind-1]*fraction;
			totalEmployerCont$=Math.min((employerCont$+salSacNew$),getConcessionalLimit_5K(k, inflationSalaryNew));
			afterTaxNew$ = Math.min(getAfterTaxLimit(k, inflationSalaryNew),afterTaxNewPct*AnnualSalaryNew[ind-1]*fraction);
			
			fees$ = feesPercent*AnnualSalaryNew[ind-1]*fraction;
			insurance$ = insurancePercent*AnnualSalaryNew[ind-1]*fraction;
			if( interruptedCareer(f) )
			{
				if( (currentAge + ind) > ageStop && (currentAge + ind) <= ageRecommence )
				{
					employerCont$ = 0.0;
					totalEmployerCont$ = 0.0;
					salSacNew$ = 0.0;
					afterTaxNew$ = 0.0;
				}
			}
			netEmployerConts$=(totalEmployerCont$ < (fees$+insurance$) && totalEmployerCont$ < 1)?(-fees$-insurance$):
				((totalEmployerCont$ < (fees$+insurance$))?(totalEmployerCont$-fees$-insurance$):((totalEmployerCont$-fees$-insurance$)*(1-TAX_RATE)));

			if(ind != 1)
				coContribution = getCoContribution(AnnualSalaryNew[ind-1]*fraction, afterTaxNew$, ReviewDate[ind], inflationNew);
			else
				coContribution = getCoContribution(AnnualSalaryNew[ind-1], Math.min(getAfterTaxLimit(k, inflationSalaryNew),afterTaxNewPct*AnnualSalaryNew[ind-1]), ReviewDate[ind], inflationNew);

			TotalSuperSavingsNew[ind] = TotalSuperSavingsNew[ind - 1]*(1 + fraction*investmentRate_SuperBenefitNew) + (afterTaxNew$ + netEmployerConts$)*(1 + fraction*investmentRate_SuperBenefitNew/2) + coContribution;
		}
		AnnualSalary[ind] = AnnualSalary[ind - 1]*Math.pow((1 + inflationSalary),fraction);
		AnnualSalaryNew[ind] = AnnualSalaryNew[ind - 1]*Math.pow((1 + inflationSalaryNew),fraction);
		k++;
	}
	var i2;
	var indexationFactor = 1.0;
	for( i2 = 1; i2 < TotalSuperSavings.length; i2++)
	{
		indexationFactor = getIndexationFactor(indexationFactor, segmentLength[i2], inflation);
		TotalSuperSavings[i2] = TotalSuperSavings[i2]/indexationFactor;
	}
	if(scenarioTwo)
	{
		indexationFactor = 1.0;
		for( i2 = 1; i2 < TotalSuperSavingsNew.length; i2++)
		{
			indexationFactor = getIndexationFactor(indexationFactor, segmentLength[i2], inflationNew);
			TotalSuperSavingsNew[i2] = TotalSuperSavingsNew[i2]/indexationFactor;
		}
	}
	FinalTotalSuperSavings = TotalSuperSavings[ind - 1];
	if(scenarioTwo)
	{
		FinalTotalSuperSavingsNew = TotalSuperSavingsNew[ind - 1];
	}
	retirementFinalTotalSuperSavings = FinalTotalSuperSavings;

	if(scenarioTwo)
	{
		retirementFinalTotalSuperSavingsNew = FinalTotalSuperSavingsNew;
	}

	if(FinalTotalSuperSavings > 10000000000.0 || FinalTotalSuperSavingsNew > 10000000000.0)
	{
		return TOTALBENEFIT_TOOBIG;
	}
	for( ind = 0; ind < NumberOfYears; ind++)
	{
		if(TotalSuperSavings[ind] < 0)
		{
			NumberOfYears = 0;
			return FEESINSURANCE_TOOHIGH;
		}
	}
	if( scenarioTwo )
	{
		for( ind = 0; ind < NumberOfYears; ind++)
		{
			if(TotalSuperSavingsNew[ind] < 0)
			{
				NumberOfYears = 0;
				return FEESINSURANCE_TOOHIGH_NEW;
			}
		}
	}
	return FINALTOTALSUPERSAVINGS_OK;
}

function getYearsToRetirement(f)
{
	return (getSafeFieldValue(f.txtRetirementAge) - getSafeFieldValue(f.txtCurrentAge));
}

function setLastBirthdayDate(f, todaysDate)
{
var lastBirthdayDate = new MyDate();

	var tmpLastBirthday = new MyDate(
															(todaysDate.myGetYear() + (getSafeFieldValue(f.txtRetirementAge) - getSafeFieldValue(f.txtCurrentAge))),
															1,
															1)
	if(todaysDate.myGetMonth() == 2 && todaysDate.myGetDay() == 29)
	{
		if(tmpLastBirthday.isLeapYear())
		{
			lastBirthdayDate.mySetDay(todaysDate.myGetDay());
			lastBirthdayDate.mySetMonth(todaysDate.myGetMonth());
		}
		else
		{
			lastBirthdayDate.mySetDay(1);
			lastBirthdayDate.mySetMonth(3);
		}
		lastBirthdayDate.mySetYear(todaysDate.myGetYear() + (getSafeFieldValue(f.txtRetirementAge) - getSafeFieldValue(f.txtCurrentAge)));
	}
	else
	{
		lastBirthdayDate.mySetDay(todaysDate.myGetDay());
		lastBirthdayDate.mySetMonth(todaysDate.myGetMonth());
		lastBirthdayDate.mySetYear(todaysDate.myGetYear() + (getSafeFieldValue(f.txtRetirementAge) - getSafeFieldValue(f.txtCurrentAge)));
	}
	return lastBirthdayDate
}
function getNextReviewDate(k, previousReviewDate, lastBirthdayDate)
{
	var y = 0,m = 0,d = 0;
	if(previousReviewDate.myGetDay() == 1 && previousReviewDate.myGetMonth() == 7 )
	{
		var nextRevDate = new MyDate(previousReviewDate.myGetYear() + 1,previousReviewDate.myGetMonth(), previousReviewDate.myGetDay());
		if(nextRevDate.isThisDateBefore(lastBirthdayDate))
		{
			y = previousReviewDate.myGetYear() + 1;
			m = previousReviewDate.myGetMonth();
			d = previousReviewDate.myGetDay();
		}
		else
		{
			y = lastBirthdayDate.myGetYear();
			m = lastBirthdayDate.myGetMonth();
			d = lastBirthdayDate.myGetDay();
		}
	}
	else
	{
		todaysDate = new MyDate();
		if(previousReviewDate.isThisDateBefore(new MyDate(todaysDate.myGetYear(),7,1)))
		{
			y = todaysDate.myGetYear();
			m = 7;
			d = 1;
		}
		else
		{
			y = todaysDate.myGetYear() + 1;
			m = 7;
			d = 1;
		}
	}
	return new MyDate(y, m, d);
}
function getFraction(j, previousReviewDate, newReviewDate)
{
	var ret = 0.0;
	if(newReviewDate.myGetDay() == previousReviewDate.myGetDay() && newReviewDate.myGetMonth() == previousReviewDate.myGetMonth())
		ret = 1;
	else
	{
		var totalNoOfDays = newReviewDate.daysBetweenThisDateAndPreviousDate(previousReviewDate);
		var noOfLeapDays = getNoOfLeapDays(previousReviewDate, newReviewDate);
		if(previousReviewDate.isLeapYear() && noOfLeapDays > 0)
			ret = totalNoOfDays/366.0;
		else
			ret = totalNoOfDays/365.0;
	}
	return ret;
}
function getNoOfLeapDays(dateFirst, dateSecond)
{
	var ret = 0;
	if(dateFirst.myGetDay() == 29 && dateFirst.myGetMonth() == 2)
		return 1;
	var next29Feb;
	var dateFirstClone = new MyDate(dateFirst.myGetYear(),dateFirst.myGetMonth(),dateFirst.myGetDay());
	while(dateSecond.daysBetweenThisDateAndPreviousDate(dateFirstClone) > 0)
	{
		next29Feb = setNext29Feb(dateFirstClone);

		if(dateSecond.daysBetweenThisDateAndPreviousDate(next29Feb) > 0)
			ret++;
		dateFirstClone.mySetDay(next29Feb.myGetDay());
		dateFirstClone.mySetMonth(next29Feb.myGetMonth());
		dateFirstClone.mySetYear(next29Feb.myGetYear());
	}
	return ret;
}
function setNext29Feb(date1)
{
	var next29Feb1 = new MyDate();
	var d1 = 29, m1 = 2, y1;
	if(!date1.isLeapYear())
	{
		y1 = (Math.floor(date1.myGetYear()/4) + 1)*4;
	}
	else
	{
		var date2 = new MyDate(date1.myGetYear(),2,29);
		if(date2.daysBetweenThisDateAndPreviousDate(date1) > 0)
			y1 = date1.myGetYear();
		else
			y1 = (Math.floor(date1.myGetYear()/4) + 1)*4;
	}
	next29Feb1.mySetDay(d1);
	next29Feb1.mySetMonth(m1);
	next29Feb1.mySetYear(y1);
	return next29Feb1
}

function getAfterTaxLimit(k, salaryInflation)
{
	var ret=0.0;
	ret = POST_TAX_RATE*getConcessionalLimit_5K(k, salaryInflation);
	return ret;
}
function getConcessionalLimit_5K(k, salaryInflation)
{
	var ret=0.0;
	ret = (Math.floor(getConcessionalLimit(k, salaryInflation)/STEP_5000))*STEP_5000;
	return ret;
}
function getConcessionalLimit(k, salaryInflation)
{
	var ret=0.0;
	ret = MAX_CONCESSIONAL_50K*Math.pow((1+salaryInflation),k);
	return ret;
}
function getCoContribution(salary, afterTax$, date1, _inflation)
{
	var lowerThreshold = getLowerThreshold(date1, AWOTE/100.0);
	if(afterTax$ <= 0)
		return 0.0;

	var cc=Math.max(Math.min(Math.min(CO_CONTRIBUTION_MAX - (salary - lowerThreshold)*0.05,CO_CONTRIBUTION_MAX),afterTax$*1.5),0);
	if(cc > 0 && cc < 0.05)
		cc = 0.0;
	if(cc >= 0.05 && cc <= 20)
		cc = 20;
	return cc;
}
function getLowerThreshold(date1, _AWOTE)
{
	//if date of calculation is 1/7/2007 and before, lower threshold is 28000
	// after that, it's indexed on an annual basis
	var ret = 0.0;
	if(date1.daysBetweenThisDateAndPreviousDate(new MyDate(2007,7,1)) <= 0)
		ret = INITIAL_LOWER_THRESHOLD;
	else
		ret = INITIAL_LOWER_THRESHOLD*Math.pow((1 + _AWOTE),(date1.myGetYear() - 2007));

	return ret;
}
function getIndexationFactor(indexationFactorPrevious, fraction, inflation)
{
	return indexationFactorPrevious*Math.pow((1 + inflation),fraction);
}
function interruptedCareer(f)
{
if(getSafeFieldValue(f.txtAgeStop) > 0 && getSafeFieldValue(f.txtAgeRecommence) > 0)
	return true;
else
	return false;
}
function getMaxAfterTaxD(f, _field)
{
	var ret = false;
	var salSac = 0, afterTax = 0
	var taxableIncome, PAYE_Tax, taxOffset, medicareLevy, payeTaxTotal, takeHome
	var grossSalary=getSafeFieldValue(f.txtGrossSalary)*f.cmbGrossSalaryFreq.value

	salSac = myRound((f.cmbSalSacFreq.value)*(getSafeFieldValue(f.txtSalSac)),2)
	afterTax = myRound((f.cmbAfterTaxFreq.value)*(getSafeFieldValue(_field)),2)

	taxableIncome = grossSalary - salSac
	PAYE_Tax = myRound(getPAYETax(taxableIncome), 2)
	taxOffset = myRound(getLowIncomeTaxOffset_2006_07(taxableIncome), 2)
	medicareLevy = myRound(getMedicareLevy(grossSalary - salSac), 2)
	payeTaxTotal = myRound(getPAYETaxTotal(PAYE_Tax - taxOffset + medicareLevy), 2)
	takeHome = myRound(grossSalary - salSac - payeTaxTotal, 2)
	return Math.max(0,takeHome)
}
function calculateHowLong07(scenarioTwo, retCalculateBenefit07)
{
	if(retCalculateBenefit07 != FINALTOTALSUPERSAVINGS_OK)
		return retCalculateBenefit07

	var f=document.forms.frmName
	var i;
	var balanceLeft, balanceLeftNew, incomeRequiredPerYear, incomeRequiredPerYearNew, minPctg, counter;
	var expectedRetirementSavings = expectedRetirementSavingsNew = 0;
	incomeWillStopAtTheEndOfThisYear = 0;
	incomeWillStopAtTheEndOfThisYearNew = 0;

	expectedRetirementSavings = retirementFinalTotalSuperSavings;
	if(scenarioTwo)
		expectedRetirementSavingsNew = retirementFinalTotalSuperSavingsNew;

var incomePeriod = parseInt(f.cmbIncomeFreq.value)
var requiredIncomePerPeriod = getSafeFieldValue(f.txtRqdIncome)
var requiredIncomePerPeriodNew = getSafeFieldValue(f.txtRqdIncomeNew)

var retirementAge = getSafeFieldValue(f.txtRetirementAge)
var investmentRate_SuperBenefit = INVEST_RATE_SUPBENEFIT/100
var investmentRate_SuperBenefitNew = getSafeDecimalFieldValue(f.txtSupBenInvRetNew)/100

var investmentRate_RetirementBenefit = INVEST_RATE_RETBENEFIT/100
var investmentRate_RetirementBenefitNew = getSafeDecimalFieldValue(f.txtRtrmntBenInvRetNew)/100

var inflationSalary = INFLATION_SALARY/100
var inflationSalaryNew = getSafeDecimalFieldValue(f.txtSalaryInflationNew)/100

var inflation = INFLATION/100
var inflationNew = getSafeDecimalFieldValue(f.txtInflationNew)/100

	if( requiredIncomePerPeriod*incomePeriod > expectedRetirementSavings )
	{
		return RQRDINCOME_TOOHIGH;
	}
	if(scenarioTwo)
	{
		if( requiredIncomePerPeriodNew*incomePeriod > expectedRetirementSavingsNew )
		{
			return RQRDINCOME_TOOHIGH_NEW;
		}
	}

		balanceLeft = expectedRetirementSavings;
		incomeRequiredPerYear = requiredIncomePerPeriod*incomePeriod;
		
		counter = retirementAge + 1

		for( i = retirementAge + 1; i <= MAX_PROJECTION_YEAR; i++)
		{
			balanceLeft = balanceLeft - incomeRequiredPerYear + (balanceLeft*investmentRate_RetirementBenefit - incomeRequiredPerYear*investmentRate_RetirementBenefit/2);
			minPctg = getPensionValuationFactor_NEW(i);
			incomeRequiredPerYear = Math.max(incomeRequiredPerYear*(1 + inflation), balanceLeft*minPctg);

			if(balanceLeft > 10000000000.0)
			{
				return BALANCE_TOOBIG;
			}

			if(balanceLeft < 0)
			{
				counter--;
				break;
			}
			counter++;
		}
		incomeWillStopAtTheEndOfThisYear = counter;

	if(scenarioTwo)
	{
		balanceLeftNew = expectedRetirementSavingsNew;
		incomeRequiredPerYearNew = requiredIncomePerPeriodNew*incomePeriod;
		counter = retirementAge + 1
		for( i = retirementAge + 1; i <= MAX_PROJECTION_YEAR; i++)
		{
			balanceLeftNew = balanceLeftNew - incomeRequiredPerYearNew + (balanceLeftNew*investmentRate_RetirementBenefitNew - incomeRequiredPerYearNew*investmentRate_RetirementBenefitNew/2);
			minPctg = getPensionValuationFactor_NEW(i);
			incomeRequiredPerYearNew = Math.max(incomeRequiredPerYearNew*(1 + inflationNew), balanceLeftNew*minPctg);


			if(balanceLeftNew > 10000000000.0)
			{
				return BALANCE_TOOBIG_NEW;
			}
			if(balanceLeftNew < 0)
			{
				counter--;
				break;
			}
			counter++;
		}
		incomeWillStopAtTheEndOfThisYearNew = counter;
	}

	return INCOMEWILLSTOPATTHEEND_OK;
}
function getMaxConcessional(f)
{
	var ret = MAX_CONCESSIONAL_50K
	return ret
}
function getEmployerContsYearly(f)
{
	return getSafeDecimalFieldValue(f.txtEmplCont)*f.cmbEmplContFreq.value
}
function getSalSacYearly(f)
{
	return getSafeFieldValue(f.txtSalSac)*f.cmbSalSacFreq.value
}
function getMaxAfterTax150K(f)
{
	return 3*getMaxConcessional(f)
}
function validEmplCont_JS(f)
{
	var field = f.txtEmplCont
	var salary=getSafeFieldValue(f.txtGrossSalary)*f.cmbGrossSalaryFreq.value
	if(salary >= MAX_INCOME_CONCESS)
	{
		setEmplContsTo50K(f, true)
		return true
	}
	var eContMin = myMathCeil(((getSafeFieldValue(f.txtGrossSalary))*f.cmbGrossSalaryFreq.value)*(MIN_EMPLCONT_PCTG/100.0)/f.cmbEmplContFreq.value, 2);
	var eContMax = myRound(Math.min(myMathFloor(((getSafeFieldValue(f.txtGrossSalary))*f.cmbGrossSalaryFreq.value)*(MAX_EMPLCONT_PCTG/100.0)/f.cmbEmplContFreq.value, 2),
								myMathCeil(getMaxConcessional(f)/f.cmbEmplContFreq.value, 2)), 2)

	if(!validFieldNew(field, eContMin, eContMax))
		return false
	else
		return true
}
function validAfterTax_JS(f, field)
{
	if(jsLRTrim(field.value)=="")
		return true;
	field.value = jsLRTrim(field.value)
	if(isNaN(field.value))
		return false

	var MAX_DOLLAR1 = Math.min(getMaxAfterTax150K(f), getMaxAfterTaxD(f,field))
	MAX_DOLLAR1 = Math.floor(MAX_DOLLAR1/f.cmbAfterTaxFreq.value)
	return (isValidValue_JS(field, getSafeFieldValue(field), MIN_DOLLAR,MAX_DOLLAR1));
}
function validSalSac_JS(f, field) 
{
	var ret = false;
	if(jsLRTrim(field.value)=="")
		return true;
	field.value = jsLRTrim(field.value)
	if(isNaN(field.value))
		return false
	var gIncome = getSafeFieldValue(f.txtGrossSalary)*f.cmbGrossSalaryFreq.value
	var emplConts = getEmployerContsYearly(f)

	if(emplConts >= getMaxConcessional(f))
	{
		if(!getSafeFieldValue(field) == 0)
		{
			return false;
		}
		else
			return true
	}
	else
	{
		var salSac = getSafeFieldValue(field)*f.cmbSalSacFreq.value
		var maxAllowedConcessional_SalSac_Dlr
		if((emplConts+salSac) >= getMaxConcessional(f))
		{
			maxAllowedConcessional_SalSac_Dlr = Math.min(gIncome,Math.max(0,getMaxConcessional(f) - emplConts))
		}
		else
		{
			maxAllowedConcessional_SalSac_Dlr = gIncome
		}
		if(isValidValue_JS(field, getSafeFieldValue(field), MIN_DOLLAR, Math.floor(maxAllowedConcessional_SalSac_Dlr/f.cmbSalSacFreq.value)))
			return true
		else
			return false
	}
}
function isValidValue_JS(field, fldValue, vMin, vMax)
{
	var ret = false;
	if(isInt(field.value))
	{
		if(fldValue < vMin)
		{
			;
		}
		else if(fldValue > vMax)
		{
			;
		}
		else
			ret=true
	}
	else
	{
		;
	}
	return ret;
}

function goToStep3(e,tabNumber)
{
	var f=document.forms.frmName
	if(validStep1(f) && validStep2(f))
	{
		if(!testLimits(f))
			showTab(1);
		else
		{
			var secondScenario=scenarioTwoEntered()
			var csab=(jsLRTrim(f.txtSuperAccBalance.value)=="")?0:getSafeFieldValue(f.txtSuperAccBalance);
			document.getElementById("lblCSAB1").innerHTML=("$"+removeDecimalPart(csab.toLocaleString()));
			document.getElementById("lblCSAB2").innerHTML=secondScenario?("$"+removeDecimalPart(csab.toLocaleString())):"&nbsp;";
			var ec=(jsLRTrim(f.txtEmplCont.value)=="")?0:getSafeFieldValue(f.txtEmplCont);
			document.getElementById("lblEC1").innerHTML=("$"+removeDecimalPart((ec*f.cmbEmplContFreq.value).toLocaleString()));
			document.getElementById("lblEC2").innerHTML=secondScenario?("$"+removeDecimalPart((ec*f.cmbEmplContFreq.value).toLocaleString())):"&nbsp;";

			var atc1=(jsLRTrim(f.txtAfterTax.value)=="")?0:getSafeFieldValue(f.txtAfterTax);
			var atc2=(jsLRTrim(f.txtAfterTaxNew.value)=="")?0:getSafeFieldValue(f.txtAfterTaxNew);
			document.getElementById("lblATC1").innerHTML="$"+removeDecimalPart((atc1*f.cmbAfterTaxFreq.value).toLocaleString());
			document.getElementById("lblATC2").innerHTML=secondScenario?("$"+removeDecimalPart((atc2*f.cmbAfterTaxFreq.value).toLocaleString())):"&nbsp;";

			var ptc1=(jsLRTrim(f.txtSalSac.value)=="")?0:getSafeFieldValue(f.txtSalSac);
			var ptc2=(jsLRTrim(f.txtSalSacNew.value)=="")?0:getSafeFieldValue(f.txtSalSacNew);
			document.getElementById("lblPTC1").innerHTML="$"+removeDecimalPart((ptc1*f.cmbSalSacFreq.value).toLocaleString());
			document.getElementById("lblPTC2").innerHTML=secondScenario?("$"+removeDecimalPart((ptc2*f.cmbSalSacFreq.value).toLocaleString())):"&nbsp;";

			var riir1=(jsLRTrim(f.txtRqdIncome.value)=="")?0:getSafeFieldValue(f.txtRqdIncome);
			var riir2=(jsLRTrim(f.txtRqdIncomeNew.value)=="")?0:getSafeFieldValue(f.txtRqdIncomeNew);
			var s7=getCmbText(f.cmbIncomeFreq,"l")
			s7 = (s7.substring(0,1)).toUpperCase() + s7.substring(1)
			document.getElementById("lblRIIR0").innerHTML=s7 + " pension income"
			document.getElementById("lblRIIR1").innerHTML="$"+removeDecimalPart((riir1).toLocaleString());
			document.getElementById("lblRIIR2").innerHTML=secondScenario?("$"+removeDecimalPart((riir2).toLocaleString())):"&nbsp;";

			document.getElementById("lblWL1").innerHTML=incomeWillStopAtTheEndOfThisYear
			document.getElementById("lblWL2").innerHTML=secondScenario?incomeWillStopAtTheEndOfThisYearNew:"&nbsp;"
			document.getElementById("lblLEXP1").innerHTML=f.txtLifeExpectancy.value
			document.getElementById("lblLEXP2").innerHTML=secondScenario?f.txtLifeExpectancy.value:"&nbsp;"
			var finalTotalSuperSavings = Math.floor(retirementFinalTotalSuperSavings)
			var finalTotalSuperSavingsNew = Math.floor(retirementFinalTotalSuperSavingsNew)

			document.getElementById("lblELS0").innerHTML="Estimated lump sum benefit at age "+ getSafeFieldValue(f.txtRetirementAge)
			document.getElementById("lblELS1").innerHTML="$"+removeDecimalPart(finalTotalSuperSavings.toLocaleString())
			document.getElementById("lblELS2").innerHTML=secondScenario?("$"+removeDecimalPart(finalTotalSuperSavingsNew.toLocaleString())):"&nbsp;";

			document.getElementById("lblSBIRET1").innerHTML=INVEST_RATE_SUPBENEFIT+"%";
			var s=jsLRTrim(f.txtSupBenInvRetNew.value)
			if(s.length==2 && s.substring(1,2) == '.')
				s=s.substring(0,1)
			document.getElementById("lblSBIRET2").innerHTML=secondScenario?(s+"%"):"&nbsp;";

			document.getElementById("lblRBIRET1").innerHTML=INVEST_RATE_RETBENEFIT+"%";
			s=jsLRTrim(f.txtRtrmntBenInvRetNew.value)
			if(s.length==2 && s.substring(1,2) == '.')
				s=s.substring(0,1)
			document.getElementById("lblRBIRET2").innerHTML=secondScenario?(s+"%"):"&nbsp;";

			document.getElementById("lblSAL_INFLATION_T31").innerHTML=INFLATION_SALARY+"%";
			s=jsLRTrim(f.txtSalaryInflationNew.value)
			if(s.length==2 && s.substring(1,2) == '.')
			s=s.substring(0,1)
			document.getElementById("lblSAL_INFLATION_T32").innerHTML=secondScenario?(s+"%"):"&nbsp;";

			document.getElementById("lblINFLATION_T31").innerHTML=INFLATION+"%";
			s=jsLRTrim(f.txtInflationNew.value)
			if(s.length==2 && s.substring(1,2) == '.')
				s=s.substring(0,1)
			document.getElementById("lblINFLATION_T32").innerHTML=secondScenario?(s+"%"):"&nbsp;";
			var sh1=getSafeFieldValue(f.txtLifeExpectancy) - incomeWillStopAtTheEndOfThisYear
			if(sh1>0)
				document.getElementById("lblSHORT1").innerHTML='<SPAN class=red1>'+sh1+'</SPAN>'
			else
				document.getElementById("lblSHORT1").innerHTML=sh1

			if(secondScenario)
			{
				var sh2=getSafeFieldValue(f.txtLifeExpectancy) - incomeWillStopAtTheEndOfThisYearNew
				if(sh2>0)
					document.getElementById("lblSHORT2").innerHTML='<SPAN class=red1>'+sh2+'</SPAN>'
				else
					document.getElementById("lblSHORT2").innerHTML=sh2
			}
			else
				document.getElementById("lblSHORT2").innerHTML="&nbsp;"

			showTab(tabNumber);
		}
	}
}

function passATN(aEvent)
{
	var myEvent = window.event ? window.event : aEvent;

	if(myEvent.keyCode != 9 && myEvent.keyCode != 16)
	{
		var f=document.forms.frmName
		var field=f.txtAfterTaxNew

		if(jsLRTrim(field.value)!="")
		{
			var s1, s2 = "The amount of after-tax contributions, for the purposes of this calculator, is limited to 100% of your gross income less PAYG tax. "
			field.value=jsLRTrim(field.value)
			field.value=setEmptyFieldTo0(field)

			var salary = getSafeFieldValue(f.txtGrossSalary)*f.cmbGrossSalaryFreq.value
			var MAX_DOLLAR1 = Math.min(MAX_AFTERTAX150K, getMaxAfterTaxD(f, field))
			var aTaxPossible = getMaxAfterTaxD(f,field)
			var aTaxEntered
			var MAX_PCTG1

			field.value = setEmptyFieldTo0(field)
			var sAll = "Please enter new after-tax contribution in whole numbers only (without commas or decimal places)."
			MAX_DOLLAR1 = Math.floor(MAX_DOLLAR1/f.cmbAfterTaxFreq.value)
			aTaxEntered = getSafeFieldValue(field)*f.cmbAfterTaxFreq.value

			if(aTaxPossible >= MAX_AFTERTAX150K)
			{		
				s1 = "The amount of after-tax contributions, for the purposes of this calculator, is capped at $"+
							removeDecimalPart(MAX_AFTERTAX150K.toLocaleString())+" per year. Based on the details you have entered, this yearly limit has been exceeded by $"+
							removeDecimalPart((aTaxEntered - MAX_AFTERTAX150K).toLocaleString())+
							". You should either change the new "+ getCmbText(f.cmbAfterTaxFreq,"l")+
							"ly after-tax contribution amount to less then or equal to $"+removeDecimalPart((Math.floor(MAX_AFTERTAX150K/f.cmbAfterTaxFreq.value)).toLocaleString())+" or check your details and try again."  
			}
			else
			{
				if(MAX_DOLLAR1 > 0)
					s1 = s2 + "Please reduce your new after-tax contribution to be within the range of $0 and $"+removeDecimalPart(MAX_DOLLAR1.toLocaleString())+" per "+getCmbText(f.cmbAfterTaxFreq,"l")+"."
				else
					s1 = s2 + "Based on the details you have entered this limit has been exceeded by $" + removeDecimalPart(aTaxEntered.toLocaleString()) + " ($"+removeDecimalPart(getSafeFieldValue(field).toLocaleString())+" per "+getCmbText(f.cmbAfterTaxFreq,"l")+"). You should either change the new after-tax contribution amount to $0 or check your details and try again."
			}

			if(!isValidValue(field,getSafeFieldValue(field),MIN_DOLLAR,MAX_DOLLAR1,s1,s1,sAll))
			{
				field.value=f.txtAfterTax.value
				mySelect(field)
			}
		}
		setMinMaxAnnualPensionIncomesNew()
		var errT = passFiguresToApplet(f,2,true)
	}
}

function passPTN(aEvent)
{
var myEvent = window.event ? window.event : aEvent;
	var f=document.forms.frmName
	var sAll="Please enter salary sacrifice contribution in whole numbers only (without commas or decimal places).", sMin=""
	var field=f.txtSalSacNew
if(myEvent.keyCode != 9 && myEvent.keyCode != 16)
{
	if(jsLRTrim(field.value)!="")
	{
		var salary=getSafeFieldValue(f.txtGrossSalary)*f.cmbGrossSalaryFreq.value
		MAX_SALSAC=Math.min(Math.floor(salary/f.cmbSalSacFreq.value),getMAX_SALSAC(f))
		if(Math.floor(salary/f.cmbSalSacFreq.value) <= getMAX_SALSAC(f))
		{
			sMin="Please enter salary sacrifice contribution between $"+MIN_SALSAC+" and $"+removeDecimalPart(MAX_SALSAC.toLocaleString())+"."
			if(!isValidValue(field,getSafeFieldValue(field),MIN_SALSAC,MAX_SALSAC,sMin,sMin,sAll))
			{
				field.value=f.txtSalSac.value
				mySelect(field)
			}
		}
		else
		{
			var sgc=getSafeFieldValue(f.txtEmplCont)*f.cmbEmplContFreq.value
			var ss=getSafeFieldValue(f.txtSalSacNew)*f.cmbSalSacFreq.value
			if((sgc+ss) > MAX_CONCESSIONAL_50K)
				sMin="Concessional (salary sacrifice plus SG) contributions are capped at a maximum of $"+removeDecimalPart(MAX_CONCESSIONAL_50K.toLocaleString())+". "

			var ptcn=(jsLRTrim(field.value)=="")?0:getSafeFieldValue(field);
			if(MAX_SALSAC != 0)
				sMin=sMin+"Please enter new salary sacrifice contribution between $"+MIN_SALSAC+" and $"+removeDecimalPart(MAX_SALSAC.toLocaleString())+"."
			else
				sMin=sMin+"Based on your current figures, the new salary sacrifice contribution amount has to be $0."

			if(!isValidValue(field,ptcn,MIN_SALSAC,MAX_SALSAC,sMin,sMin,sAll))
			{
				field.value=f.txtSalSac.value
				mySelect(field)
			}
		}
	}
	setMinMaxAnnualPensionIncomesNew()
	var errT = passFiguresToApplet(f,2,true)
}
}

function passINC(aEvent)
{
	var myEvent = window.event ? window.event : aEvent;
	if(myEvent.keyCode != 9 && myEvent.keyCode != 16)
	{
		var f = document.forms.frmName
		var field = f.txtRqdIncomeNew
		var rinc = (jsLRTrim(field.value)=="")?0:getSafeFieldValue(field);
		MIN_INCOME = (Math.ceil(minAnnualPensionIncomeNew/f.cmbIncomeFreq.value))
		var sAll = "Please enter new required gross income in retirement in whole numbers only (without commas or decimal places)."
		sMin = "The new required "+getCmbText(f.cmbIncomeFreq,"l")+" gross income in retirement must be at least $"+MIN_INCOME+"."
		if(isInt(field.value))
			;
		else
		{
			alert(sAll)
			field.value=f.txtRqdIncome.value
			mySelect(field)
		}
		var errT = passFiguresToApplet(f,2,true)
	}
}

function passSuperBenefitNew(true_false,txtField,aEvent)
{
var myEvent = window.event ? window.event : aEvent;
	var f=document.forms.frmName
	var sAll = "The superannuation benefit investment return must be between "+MIN_PCTG_SUPERBENEFIT+"% and "+MAX_PCTG_SUPERBENEFIT+"%.";
if(myEvent.keyCode != 9 && myEvent.keyCode != 16)
{
	if(!validDecimalField2(f,txtField, sAll, MIN_PCTG_SUPERBENEFIT,MAX_PCTG_SUPERBENEFIT))
	{
		txtField.value=INVEST_RATE_SUPBENEFIT;
		mySelect(txtField)
	}
	setMinMaxAnnualPensionIncomesNew()
	var errT = passFiguresToApplet(f,2,true)
}
}

function passRetirementBenefitNew(true_false,txtField,aEvent)
{
var myEvent = window.event ? window.event : aEvent;
	var f=document.forms.frmName
	var sAll = "The retirement benefit investment return must be between "+MIN_PCTG_RETIREMENTBENEFIT+"% and "+MAX_PCTG_RETIREMENTBENEFIT+"%.";
if(myEvent.keyCode != 9 && myEvent.keyCode != 16)
{
	if(!validDecimalField2(f,txtField, sAll, MIN_PCTG_RETIREMENTBENEFIT,MAX_PCTG_RETIREMENTBENEFIT))
	{
		txtField.value=INVEST_RATE_RETBENEFIT;
		mySelect(txtField)
	}
	var errT = passFiguresToApplet(f,2,true)
}
}

function pass_salaryInflationNew(true_false,txtField,aEvent)
{
var myEvent = window.event ? window.event : aEvent;
	var f=document.forms.frmName
	var sAll = "The salary inflation rate must be between "+MIN_INFLATION_SALARY+"% and "+MAX_INFLATION_SALARY+"%.";
if(myEvent.keyCode != 9 && myEvent.keyCode != 16)
{
	if(!validDecimalField2(f,txtField, sAll, MIN_INFLATION_SALARY,MAX_INFLATION_SALARY))
	{
		txtField.value=INFLATION_SALARY
		mySelect(txtField)
	}
	setMinMaxAnnualPensionIncomesNew()
	var errT = passFiguresToApplet(f,2,true)
}
}

function pass_InflationNew(true_false,txtField,aEvent)
{
var myEvent = window.event ? window.event : aEvent;
	var f=document.forms.frmName
	var sAll = "The new inflation rate must be between "+MIN_INFLATION+"% and "+MAX_INFLATION+"%.";
if(myEvent.keyCode != 9 && myEvent.keyCode != 16)
{
	if(!validDecimalField2(f,txtField, sAll, MIN_INFLATION,MAX_INFLATION))
	{
		txtField.value=INFLATION
		mySelect(txtField)
	}
	setMinMaxAnnualPensionIncomesNew()
	var errT = passFiguresToApplet(f,2,true)
}
}
