function GetAge(day, month, year) {

	if (day != '' || month != '' || year != '') {
		today = new Date();
		curyear = today.getFullYear();
		curmonth = today.getMonth()+1;
		curdate = today.getDate();
		age = curyear - year;
		if ((month > curmonth) || ((month == curmonth) && (curdate < day)))
			age = age - 1;

		return age;
	};

};
//
// Purpose :	Find out whether the inputted year is a leap year
// Return :	true/false
// Parameter :	The inputted year
//
function fnIsLeapYear (year)
{
	return (year%4 == 0 && (year%100 != 0 || year%400 == 0));
}

//
// Purpose :	Validate the date
// Return :	true/false
// Parameter :	year, month, day
//
function fnIsValidDate (year, month, day)
{
	var iMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	var iMonthLY = new Array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	if (!fnIsMonth(month))
		 return false;
	if (isNaN(day))
		return false;
    	if ( (fnIsLeapYear(year) && (day > iMonthLY[month-1] || day < 1)) ||
             (!fnIsLeapYear(year) && (day > iMonth[month-1] || day < 1)) )
		return false;
	else
		return true;
}

//
// Purpose :	Validate the time
// Return :	true/false
// Parameter :	hr, min, sec
//
function fnIsValidTime (hr, min, sec)
{
	if (!fnIsHour(hr))	{ return "invalid hour !";	}
	if (!fnIsMin(min))	{ return "invalid minute !";}
	if (!fnIsSec(sec))	{	return "invalid second !";}

	if ((hr=="" || min=="" || sec=="") && (hr!="" || min!="" || sec!="")) {
		return "Enter Hour, Minute, Second correspondingly"
	};

	return true;

}

//
// Purpose :	Validate the year
// Return :	true/false
// Parameter :	Inputted year
//
function fnIsYear ( year )
{
	return (year > 1970 && year < 2999);
}

//
// Purpose :	Validate the month
// Return  :    true/false
// Parameter :	Inputted month
//
function fnIsMonth ( month )
{
	return (month >= 1 && month <= 12);
}

//
// Purpose :  	Validate the hour
// Return  :	true/false
// Parameter :	Inputted hour
//
function fnIsHour ( hour )
{
	return (hour >= 0 && hour < 24)
}

//
// Purpose : 	Validate the minute
// Return :	true/false
// Parameter :	Inputted minute
//
function fnIsMin ( minute )
{
	return (minute >= 0 && minute <= 59);
}

//
// Purpose :	Validate the second
// Return :	true/false
// Parameter :	Inputted second
//
function fnIsSec ( second )
{
	return (second >= 0 && second <= 59);
}

//
// Purpose :	Validate the number
// Return :	true/false
// Parameter :	Inputted number
//
function fnIsNumber ( number )
{
	return (!isNaN(number));
}

//
// Purpose :	Validate the integer
// Return :	true/false
// Parameter :	Inputted second
//
function fnIsInteger ( intvalue )
{
	if (intvalue == parseInt(intvalue))
		return true;
	else
		return false;
}

function trim(string)
{
        for (i = string.length; i > 0; i --)
        {
                if (string.substring(i-1, i) != " ")
                        break;
        }
        for (j = 0; j < i; j ++)
        {
                if (string.substring(j, j+1) != " ")
                {
                        break;
                }
        }
        return string.substring(j,i);
}

function zeropad(string, len)
{
	sbuf = string;

	for (i = string.length; i < parseInt(len); i ++)
	{
		sbuf = "0" + sbuf;
	}
	return sbuf;
}

function fnIsNumString(cardno)
{
	var i;
	for (i=0;i<cardno.length;i++)
		if (isNaN(cardno.charAt(i)) || cardno.charAt(i) == " ")
			return(false);

	return(true);
}


function checkHkid(hkid_prefix,hkid_digits,hkid_check) {

			var i, j;
			// check english characters for hkid_prefix
			if (hkid_prefix == "") {
					alert("HKID prefix cannot be blank!");
					return(1);
			}

			for (j=0;j<hkid_prefix.length;j++) {
				prefixChar = hkid_prefix.charAt(j);
				if (prefixChar.charCodeAt(0) < 65	|| hkid_prefix.charCodeAt(0) > 90) {
					alert("HKID prefix can only be capital letter!");
					return(1);
				};
			};

			// check digits for hkid_digits
			if (hkid_digits.length != 6) {
				alert("HKID digits cannot be less than 6 digits!");
				return(2);
			};


			if (!fnIsNumString(hkid_digits)) {
				alert("Please input 6 digits!");
				return(2);
			};


			// check check digit character
			if (hkid_check.length != 1) {
				alert("Please input HKID check digit!");
				return(3);
			};

			/*
			if ((hkid_check != "a" && hkid_check != "A") || !fnIsNumString(hkid_check)) {
				alert("Check digit!");
				return;
			};
			*/

			idpre=hkid_prefix.charCodeAt(0);
			stringA='A';
			acode=stringA.charCodeAt(0);
			indexcode=idpre-acode+1;
			total=indexcode*8;
			for (i=0;i<6;i++){
			 	dcodes=hkid_digits.charAt(i);
				total=total+parseInt(dcodes)*(7-i);
			};

			if (hkid_check=="A" || hkid_check=="a")
				total=total+10;
			else {
				if (!isNaN(hkid_check))
				total=total+parseInt(hkid_check);
			}

			if ((total%11)!=0){
				alert("Invalid value of HKID, please input again!");
				return(2);
			}

	return(0);

}

function trim(str) {

	return str.replace(/^\s*(\S*)\s*$/,"$1")
}

function fnIsDecimal(numValue, beforeDec, afterDec) {
	numValue = stringReplace(numValue,",","");
   	if (isNaN(numValue) == true)
		return false;
        else {
        	maxnumber = Math.pow(10,beforeDec) - Math.pow(10,afterDec * -1);
	        if (numValue > maxnumber)
	        	return false;
	        if (numValue * 1 <= 0)
			return false;
	        if (numValue.indexOf(".") >= 0) // contains "."
	        {
   	                if (eval("/[.]{1}[\\d]{0,"+afterDec+"}$/.test(numValue)")==false)
				return false;
			else
				return true;
		}
		else
			return true;
	}

}

function stringReplace(originalString,findText,replaceText)
{
  var pos=0;
  var len = findText.length;
  pos = originalString.indexOf(findText);
  while(pos != -1)
  {
    preString = originalString.substring(0,pos);
    postString = originalString.substring(pos+len,originalString.length);
    originalString = preString + replaceText + postString;
    pos = originalString.indexOf(findText,pos);
  }
  return originalString;
}


// card number
var bName = navigator.appName;
var bVer = parseInt(navigator.appVersion);
var NS4 = (bName == "Netscape" && bVer >= 4);
var IE4 = (bName == "Microsoft Internet Explorer" && bVer >= 4);


function skipboxNS(event){
	var boxno = event.target;
	var thekeycode = '';
	thekeycode = event.which;

	if(thekeycode != 9 && thekeycode != 8 && thekeycode != 0){
		switch(boxno.name){
			case 'cardno1' :
				if(boxno.value.length == 4){
					document.appForm.cardno2.focus();
					document.appForm.cardno2.select();
				}
				break;
			case 'cardno2' :
				if(boxno.value.length == 4){
					document.appForm.cardno3.focus();
					document.appForm.cardno3.select();
				}
				break;
			case 'cardno3' :
				if(boxno.value.length == 4){
					document.appForm.cardno4.focus();
					document.appForm.cardno4.select();
				}
				break;
			case 'cardno4' :
				if(boxno.value.length == 4){
					document.appForm.cardholdname.focus();
					document.appForm.cardholdname.select();
				}
				break;
			case 'bankcode1' :
				if(boxno.value.length == 3){
					document.appForm.bankcode2.focus();
					document.appForm.bankcode2.select();
				}
				break;
			case 'bankcode2' :
				if(boxno.value.length == 3){
					document.appForm.bankcode3.focus();
					document.appForm.bankcode3.select();
				}
				break;
			case 'bankcode3' :
				if(boxno.value.length == 9){
					document.appForm.bankname.focus();
					document.appForm.bankname.select();
				}
				break;
		}
	}
}

function skipboxIE(boxno,event){
	var thekeycode = '';
	thekeycode = window.event.keyCode;

	if(thekeycode != 9 && thekeycode != 8 && thekeycode != 37 && thekeycode != 39 && thekeycode != 46){
		switch(boxno.name){
			case 'cardno1' :
				if(boxno.value.length == 4){
					document.appForm.cardno2.focus();
					document.appForm.cardno2.select();
				}
				break;
			case 'cardno2' :
				if(boxno.value.length == 4){
					document.appForm.cardno3.focus();
					document.appForm.cardno3.select();
				}
				break;
			case 'cardno3' :
				if(boxno.value.length == 4){
					document.appForm.cardno4.focus();
					document.appForm.cardno4.select();
				}
				break;
			case 'cardno4' :
				if(boxno.value.length == 4){
					document.appForm.cardholdname.focus();
					document.appForm.cardholdname.select();
				}
				break;
			case 'bankcode1' :
				if(boxno.value.length == 3){
					document.appForm.bankcode2.focus();
					document.appForm.bankcode2.select();
				}
				break;
			case 'bankcode2' :
				if(boxno.value.length == 3){
					document.appForm.bankcode3.focus();
					document.appForm.bankcode3.select();
				}
				break;
			case 'bankcode3' :
				if(boxno.value.length == 9){
					document.appForm.bankname.focus();
					document.appForm.bankname.select();
				}
				break;
		}
	}
}

if(NS4){
	document.captureEvents(Event.KEYUP);
	document.onkeyup = skipboxNS;
}

function MM_findObj(n, d) { //v3.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); return x;
}
function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
 var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
   var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
   if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}


function selectOption(selectionObj, selectedText) {
	for(i=0;i<selectionObj.length;i++) {
		if (selectionObj.options[i].value == selectedText) {
			selectionObj.options[i].selected=true;
			return;
		}
	}
}

function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}

//-------------------------------------------------------------------------
// Return boolean value indicate string is valid email address
//-------------------------------------------------------------------------
function chkEmail(sValue){
	return /^[A-Za-z0-9_]+([\.A-Za-z0-9_-])*@[A-Za-z0-9_-]+(\.[A-Za-z0-9_-]+)+$/.test(sValue);

}
