
var G_INT_PF_MONTHLY=1;var G_INT_PF_NONCALMONTH=2;var G_INT_PF_SEMIMONTH=3;var G_INT_PF_FORTNIGHTLY=4;var G_INT_PF_WEEKLY=5;var G_INT_AGE_BELOW18=1;var G_INT_AGE_BETWEEN1865=2;var G_INT_AGE_ABOVE65=3;var G_INT_AGE_DEPENDS=0;var G_INT_WC_MON_SUN=0;var G_INT_WC_TUE_MON=1;var G_INT_WC_WED_TUE=2;var G_INT_WC_THU_WED=3;var G_INT_WC_FRI_THU=4;var G_INT_WC_SAT_FRI=5;var G_INT_WC_SUN_SAT=6;var G_INT_MIN_MONTH_1=4000;var G_INT_MIN_SMONTH_1=2000;var G_INT_MIN_FNIGHT_1=1820;var G_INT_MIN_WEEK_1=910;var G_INT_MIN_DAY_1=130;var G_INT_MAX_MONTH_1=20000;var G_INT_MAX_SMONTH_1=10000;var G_INT_MAX_FNIGHT_1=9100;var G_INT_MAX_WEEK_1=4550;var G_INT_MAX_DAY_1=650;var G_INT_MIN_MONTH_2=5000;var G_INT_MIN_DAY_2=160;var G_INT_MAX_MONTH_2=20000;var G_INT_MAX_DAY_2=650;var G_EFF_DATE=new Date(2003,1,1);var G_NO_SAT_DEADLINE_DATE=new Date(2008,11,1);var G_CALCULATOR_ABS_PATH="/hk/mpf/calculator/";var G_HOLIDAY_FILE_NAME="pubholiday.txt";var G_STR_FORM_GENERAL_FIELDS=new Array("pr_freq","noncal_start_day","prfnight_start_year","prfnight_start_month","prfnight_start_date","prweekly_cycle");var G_STR_FORM_FIELDS_DOE=new Array("doe_year","doe_month","doe_date");var G_STR_FORM_FIELDS_DOB=new Array("dob_year","dob_month","dob_date");var G_STR_FORM_FIELDS_RI="ri";var G_LANG_ENG="eng";var G_LANG_CHI="chi";function getDisplayDate(dateDate)
{return dateDate.getFullYear()+"/"+getNumMonth((dateDate.getMonth()+1)+"")+"/"+getNumMonth(dateDate.getDate()+"");}
function getNumMonth(s)
{if(s.length<2)
{return"0"+s;}
else
{return s;}}
function getShortMonth(i)
{var strMonthName=new Array(12);strMonthName[0]="Jan";strMonthName[1]="Feb";strMonthName[2]="Mar";strMonthName[3]="Apr";strMonthName[4]="May";strMonthName[5]="Jun";strMonthName[6]="Jul";strMonthName[7]="Aug";strMonthName[8]="Sep";strMonthName[9]="Oct";strMonthName[10]="Nov";strMonthName[11]="Dec";return strMonthName[i];}
function getAge(dateDOB,dateTarget)
{if(dateDOB.getFullYear()!=dateTarget.getFullYear())
{if(dateDOB.getMonth()==dateTarget.getMonth())
{if(dateDOB.getDate()>dateTarget.getDate())
{return dateTarget.getFullYear()-dateDOB.getFullYear()-1;}
else
{return dateTarget.getFullYear()-dateDOB.getFullYear();}}
else
{if(dateDOB.getMonth()>dateTarget.getMonth())
{return dateTarget.getFullYear()-dateDOB.getFullYear()-1;}
else
{return dateTarget.getFullYear()-dateDOB.getFullYear();}}}
else
{return 0;}}
function getCommingDateByDay(dateDate,intDay)
{var date=dateDate;for(var i=0;i<8;i++)
{date=getDateAfter(i,dateDate);if(date.getDay()==intDay)
{return date;}}
return date;}
function getDateCount(date1,date2)
{return Math.abs(date1-date2)/3600000/24+1;}
function getDateDiff(date1,date2)
{return Math.abs(date1-date2)/3600000/24;}
function getDateAfter(intDays,dateDate)
{var date=new Date(dateDate.getFullYear(),dateDate.getMonth(),parseInt(dateDate.getDate())+parseInt(intDays));return date;}
function isSameDate(date1,date2)
{if(date1.toUTCString()==date2.toUTCString())
{return true;}
else
{return false;}}
function getLastDateOfMonth(dtDate)
{var date;if(dtDate.getMonth()!=1)
{date=new Date(dtDate.getFullYear(),dtDate.getMonth(),31);if(date.getMonth()==dtDate.getMonth())
{return date;}
else
{return new Date(dtDate.getFullYear(),dtDate.getMonth(),30);}}
else
{if(isLeapYear(dtDate))
{return new Date(dtDate.getFullYear(),1,29);}
else
{return new Date(dtDate.getFullYear(),1,28);}}}
function isLeapYear(dateDate)
{var date=new Date(dateDate.getFullYear(),1,29);if(date.getDate()==29)
{return true;}
else
{return false;}}
function getDisplayNum(str)
{var strReturn="";var intPos=str.lastIndexOf(".");if(intPos<0)
{strReturn=str+".00";}
else if(intPos==str.length-1)
{strReturn=str+"00";}
else if(intPos==str.length-2)
{strReturn=str+"0";}
else
{strReturn=str;}
return returnComma(strReturn);}
function returnComma(str)
{var strTail=str.substring(str.lastIndexOf("."),str.length);var strReturn=str.substring(0,str.lastIndexOf("."));var i=0,intPos=1;while(i<strReturn.length&&str.length>3)
{if(intPos==3&&i<strReturn.length-1)
{strReturn=strReturn.substring(0,strReturn.length-i-1)+","+strReturn.substring(strReturn.length-i-1,strReturn.length);intPos=0;i++;}
intPos++;i++;}
return strReturn+strTail;}
function getTheNumTail(strNum)
{var intNum=parseInt(strNum.substring(strNum.length-1,strNum.length));if(strNum!='11'&&strNum!='12'&&strNum!='13')
{if(intNum==1)
{return messages.numTailFirst;}
else if(intNum==2)
{return messages.numTailSecond;}
else if(intNum==3)
{return messages.numTailThird;}
else
{return messages.numTailOther;}}
else
{return messages.numTailOther;}}
function getTheLastDateByDay(dateCurr,intDay)
{var i=-1;while(getDateAfter(i,dateCurr).getDay()!=intDay)
{i--;}
return getDateAfter(i,dateCurr);}
function isFormValid(strFormFields)
{var obj=null;for(var i=0;i<strFormFields.length;i++)
{obj=Request.Form(strFormFields[i]);if(obj==null)
{return false;}}
return true;}
var intPyrllFrequency;var intNonCalStartDay;var datePryllFnightStartDate;var intWeeklyCycle;var dateDOB;var dateDOE;var bAge65Within1stPeriod;var dateContPeriods;var dblFormRI;var dateTodate=new Date();var bIsThe1stPeriodStartDate;var strLang="";var dateLastDOE;var bBeforeEffDate=false;function setPryllFrequency(strValue)
{intPyrllFrequency=parseInt(strValue);}
function setNonCalStartDay(strDay)
{intNonCalStartDay=parseInt(strDay);}
function setPryllFnightStartDate(strYear,strMonth,strDate)
{datePryllFnightStartDate=new Date(parseInt(strYear),parseInt(strMonth),parseInt(strDate));}
function setWeeklyCycle(strCycleValue)
{intWeeklyCycle=parseInt(strCycleValue);}
function setDOE(strYear,strMonth,strDate)
{dateDOE=new Date(parseInt(strYear),parseInt(strMonth),parseInt(strDate));}
function setDOB(strYear,strMonth,strDate)
{dateDOB=new Date(parseInt(strYear),parseInt(strMonth),parseInt(strDate));}
function setRelevantIncome(strName,intSize)
{dblFormRI=new Array(intSize);for(var i=0;i<intSize;i++)
{dblFormRI[i]=Request.Form(strName+i);}}
function setContPeriods(datePeriods)
{dateContPeriods=datePeriods;}
function setAge65Within1stPeriod(b)
{if(bAge65Within1stPeriod==null)
{bAge65Within1stPeriod=b;}}
function setThe1stPeriodStartDate(b)
{bIsThe1stPeriodStartDate=b;}
function setLang(strValue){strLang=strValue;}
function getTodate()
{return dateTodate;}
function getPryllFrequency()
{return intPyrllFrequency;}
function getNonCalStartDay()
{return intNonCalStartDay;}
function getPryllFnightStartDate()
{return datePryllFnightStartDate;}
function getWeeklyCycle()
{return intWeeklyCycle;}
function getDOE()
{return dateDOE;}
function getDOB()
{return dateDOB;}
function getThe60thDOE()
{return getDateAfter(59,dateDOE);}
function getThe30thDOE()
{return getDateAfter(29,dateDOE);}
function getThe31stDOE()
{return getDateAfter(30,dateDOE);}
function getThe18thAgeDate()
{var intAgeGap=getEEAge()-18;var int18thYear=getDOE().getFullYear()-intAgeGap;var intAge=getAge(getDOB(),new Date(int18thYear,getDOB().getMonth(),getDOB().getDate()));if(intAge>18)
{return new Date(int18thYear-1,getDOB().getMonth(),getDOB().getDate());}
else
{return new Date(int18thYear,getDOB().getMonth(),getDOB().getDate());}}
function is18thBdayAfter31stDOE()
{return(getThe18thAgeDate()>getThe31stDOE()||isSameDate(getThe18thAgeDate(),getThe31stDOE()))}
function getThe65thAgeDate()
{var intAgeGap=getEEAge()-65;var int65thYear=getDOE().getFullYear()-intAgeGap;var intAge=getAge(getDOB(),new Date(int65thYear,getDOB().getMonth(),getDOB().getDate()));if(intAge>65)
{return new Date(int65thYear-1,getDOB().getMonth(),getDOB().getDate());}
else
{return new Date(int65thYear,getDOB().getMonth(),getDOB().getDate());}}
function getRelevantIncome()
{return dblFormRI;}
function getEEAge()
{return getAge(getDOB(),getDOE());}
function getContPeriods()
{return dateContPeriods;}
function isAge65Within1stPeriod()
{return bAge65Within1stPeriod;}
function getContPeriod(i,j)
{return dateContPeriods[i][j];}
function getLang(){return strLang;}
function isBeforeEffDate()
{return(getDOE()<G_EFF_DATE);}
function isThe1stPeriodStartDate()
{return bIsThe1stPeriodStartDate;}
function isAge65WithinContPeriods()
{var date65=getThe65thAgeDate();var date1=getContPeriods()[0][0];var date2=getContPeriods()[getContPeriods().length-1][1];return((date1<date65||isSameDate(date1,date65))&&(date2>date65||isSameDate(date2,date65)));}
function setLastDOE(strYear,strMonth,strDate)
{dateLastDOE=new Date(parseInt(strYear),parseInt(strMonth),parseInt(strDate));}
function getLastDOE()
{return dateLastDOE;}
function isLCStartBeforeEffDate()
{return(getContPeriods()[0]<G_EFF_DATE);}
function getDateSelectionHtml(strName)
{var strDateHtml="";var strMonthHtml="";var strYearHtml="";strDateHtml+="<select name='"+strName+"_date' onclick=\"setPrFreq(document.forms['emp_details'], 3);\">";for(var i=0;i<31;i++)
{strDateHtml+="<option value='"+(i+1)+"'>"+(i+1)+"</option>";}
strDateHtml+="</select>&nbsp;";strMonthHtml+="<select name='"+strName+"_month' onclick=\"setPrFreq(document.forms['emp_details'], 3);\">";for(var i=0;i<12;i++)
{strMonthHtml+="<option value='"+i+"'>"+getShortMonth(i)+"</option>";}
strMonthHtml+="</select>&nbsp;";strYearHtml+="<select name='"+strName+"_year' onclick=\"setPrFreq(document.forms['emp_details'], 3);\">";for(var i=getTodate().getFullYear()-1;i<(getTodate().getFullYear()+5);i++){if(i==2003)
{strYearHtml+="<option value='"+i+"' selected>"+i+"</option>";}
else
{strYearHtml+="<option value='"+i+"'>"+i+"</option>";}}
strYearHtml+="</select>&nbsp;";return strDateHtml+strMonthHtml+strYearHtml;}
function getDateSelectionHtmlDOE(strName)
{var strDateHtml="";var strMonthHtml="";var strYearHtml="";strDateHtml+="<select name='"+strName+"_date'>";for(var i=0;i<31;i++)
{strDateHtml+="<option value='"+(i+1)+"'>"+(i+1)+"</option>";}
strDateHtml+="</select>&nbsp;";strMonthHtml+="<select name='"+strName+"_month'>";for(var i=0;i<12;i++)
{strMonthHtml+="<option value='"+i+"'>"+getShortMonth(i)+"</option>";}
strMonthHtml+="</select>&nbsp;";strYearHtml+="<select name='"+strName+"_year'>";for(var i=getTodate().getFullYear()+1;i>1999;i--)
{if(i==2003)
{strYearHtml+="<option value='"+i+"' selected>"+i+"</option>";}
else
{strYearHtml+="<option value='"+i+"'>"+i+"</option>";}}
strYearHtml+="</select>&nbsp;";return strDateHtml+strMonthHtml+strYearHtml;}
function getDateSelectionHtmlLDOE(strName)
{var strDateHtml="";var strMonthHtml="";var strYearHtml="";strDateHtml+="<select name='"+strName+"_date'>";for(var i=0;i<31;i++)
{strDateHtml+="<option value='"+(i+1)+"'>"+(i+1)+"</option>";}
strDateHtml+="</select>&nbsp;";strMonthHtml+="<select name='"+strName+"_month'>";for(var i=0;i<12;i++)
{strMonthHtml+="<option value='"+i+"'>"+getShortMonth(i)+"</option>";}
strMonthHtml+="</select>&nbsp;";strYearHtml+="<select name='"+strName+"_year'>";for(var i=getTodate().getFullYear()+1;i>2000;i--)
{if(i==2003)
{strYearHtml+="<option value='"+i+"' selected>"+i+"</option>";}
else
{strYearHtml+="<option value='"+i+"'>"+i+"</option>";}}
strYearHtml+="</select>&nbsp;";return strDateHtml+strMonthHtml+strYearHtml;}
function getDateSelectionHtmlAge(strName)
{var strDateHtml="";var strMonthHtml="";var strYearHtml="";strDateHtml+="<select name='"+strName+"_date' onclick=\"setAgeGroup(document.forms['emp_details'], 0);\">";for(var i=0;i<31;i++)
{strDateHtml+="<option value='"+(i+1)+"'>"+(i+1)+"</option>";}
strDateHtml+="</select>&nbsp;";strMonthHtml+="<select name='"+strName+"_month' onclick=\"setAgeGroup(document.forms['emp_details'], 0);\">";for(var i=0;i<12;i++)
{strMonthHtml+="<option value='"+i+"'>"+getShortMonth(i)+"</option>";}
strMonthHtml+="</select>&nbsp;";strYearHtml+="<select name='"+strName+"_year' onclick=\"setAgeGroup(document.forms['emp_details'], 0);\">";for(var i=getTodate().getFullYear()+1;i>getTodate().getFullYear()+1-70;i--)
{if(i==getTodate().getFullYear()-20)
{strYearHtml+="<option value='"+i+"' selected>"+i+"</option>";}
else
{strYearHtml+="<option value='"+i+"'>"+i+"</option>";}}
strYearHtml+="</select>&nbsp;";return strDateHtml+strMonthHtml+strYearHtml;}
function getNonCalStartDayHtml(strName)
{var strHtml="&nbsp;";var strUnit="th";var j=0;strHtml+="<select name='"+strName+"' onclick='setPrFreq(document.forms[\"emp_details\"], 1);//'>";for(var i=1;i<31;i++)
{j=(i==31)?1:i+1;strHtml+="<option value='"+(i+1)+"'>"+j+getTheNumTail(j+"")+" to "+i+getTheNumTail(i+"")+"</option>";}
strHtml+="</select>";return strHtml;}
function getDisplayPryllFeqDesc(num)
{var s='';switch(num){case G_INT_PF_MONTHLY:s=messages.calendarMonth;break;case G_INT_PF_NONCALMONTH:s=messages.nonCalendarMonthPre+getNonCalStartDay()+getTheNumTail(getNonCalStartDay()+"")+messages.nonCalendarMonthPost;break;case G_INT_PF_SEMIMONTH:s=messages.semiMonthly;break;case G_INT_PF_FORTNIGHTLY:s=messages.fortnightlyPre+getDisplayDate(getPryllFnightStartDate())+messages.fortnightlyPost;break;case G_INT_PF_WEEKLY:s=messages.weekly;break;default:break;}
return s;}
function getDisplayWeeklyDesc(intNum)
{var s='';switch(intNum){case G_INT_WC_MON_SUN:s=messages.weeklyMonSun;break;case G_INT_WC_TUE_MON:s=messages.weeklyTueMon;break;case G_INT_WC_WED_TUE:s=messages.weeklyWedTue;break;case G_INT_WC_THU_WED:s=messages.weeklyThuWed;break;case G_INT_WC_FRI_THU:s=messages.weeklyFriThu;break;case G_INT_WC_SAT_FRI:s=messages.weeklySatFri;break;case G_INT_WC_SUN_SAT:s=messages.weeklySunSat;break;default:break;}
return s;}
function getDisplayAgeDesc(intAge)
{var s=messages.ages18to65;if(intAge<18){s=messages.below18;}else if(intAge>=65){s=messages.above65;}
return s;}
function isValidDate(sYear,sMonth,sDate){var dt=new Date(sYear,sMonth,sDate);if(dt.getDate()==sDate){return true;}else{return false;}}
function getSelectionBoxValue(form,strName){return form.elements[strName].options[form.elements[strName].selectedIndex].value;}
function checkFormDate(form,strName,strDesc){var sYear=getSelectionBoxValue(form,strName+'_year');var sMonth=getSelectionBoxValue(form,strName+'_month');var sDate=getSelectionBoxValue(form,strName+'_date');if(isValidDate(sYear,sMonth,sDate)){return true;}else{alert(strDesc);return false;}}
var Request={};Request.Form=function(key){return Request.values[key];};(function(){var values={};var un=window.decodeURIComponent||window.decodeURI||window.unescape;var pairs=location.search.substring(1).split('&');var pair,key,val,oldval,i;Request.values=values;if(!un){return;}
for(i=0;i<pairs.length;i++){pair=pairs[i].split('=');key=un((pair[0]||'').replace(/\+/g,' '));val=parseFloat(un((pair[1]||'').replace(/\+/g,' ')));if(!key||isNaN(val)){continue;}
oldval=values[key];values[key]=(oldval==null)?val:oldval+','+val;}})();function checkNum(obj,strName,iMax)
{var s;for(var i=0;i<iMax;i++)
{s=obj.elements[strName+"_"+i].value;if(s=="")
{obj.elements[strName+"_"+i].value="0.00";}
if(isNaN(obj.elements[strName+"_"+i].value))
{alert(messages.invalidNumberPre+(i+1)+getTheNumTail(i+1+"")+messages.invalidNumberPost);obj.elements[strName+"_"+i].focus();return false;}
obj.elements[strName+"_"+i].value=parseFloat(obj.elements[strName+"_"+i].value);if(parseFloat(obj.elements[strName+"_"+i].value)<0)
{alert(messages.negativeNumberPre+(i+1)+getTheNumTail(i+1+"")+messages.negativeNumberPost);obj.elements[strName+"_"+i].focus();return false;}
if(s.indexOf('.')>-1&&s.indexOf('.')<s.length-3)
{alert(messages.tooManyDecimalsPre+(i+1)+getTheNumTail(i+1+"")+messages.tooManyDecimalsPost);obj.elements[strName+"_"+i].focus();return false;}}
return true;}
var selectToPF={noncal_start_day:G_INT_PF_NONCALMONTH,prfnight_start_date:G_INT_PF_FORTNIGHTLY,prfnight_start_month:G_INT_PF_FORTNIGHTLY,prfnight_start_year:G_INT_PF_FORTNIGHTLY,prweekly_cycle:G_INT_PF_WEEKLY};function assignPFRadios(form){var pfToRadio={};var i;for(i=form.pr_freq.length-1;i>=0;i--){pfToRadio[form.pr_freq[i].value]=form.pr_freq[i];}
for(i in selectToPF){if(form[i]){form[i].radio=pfToRadio[selectToPF[i]];}}
form.prfnightRadio=pfToRadio[G_INT_PF_FORTNIGHTLY];}
function checkPFRadio(select){var radios,i;if(!select){return;}
if(!select.radio){assignPFRadios(select.form);}
if(select.radio){select.radio.checked=true;}}