function MM_findObj(n, d) { //v4.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);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}

function ValidateForm() { //v1.0
	var i=new Number(),MyParam=new String(),MyObjString=new String(),MyFunc=new String(),MyNameString=new String(),args=new Array()
	args=ValidateForm.arguments;
	for (i=0; i<(args.length-3); i+=4) {
		MyFunc=args[i];
		MyParam=args[i+3];
		MyObjString=args[i+1];
		MyNameString=args[i+2];
		if (!(ValidateFunc(MyFunc,MyParam,MyObjString,MyNameString))) {
				return false;
		}
	}
return true;
}

function ValidateFunc(MyFunc,MyParam,MyObjString,MyNameString) {//v0.8b	
	var j=new Number(),MyObj=new Object(),MyName=new String(),MyRange=new String();
	switch (MyFunc) {
		case "C": //Comparison
			MyObjArray=MyObjString.split("|");
			var MyObj1=new Object(MM_findObj(MyObjArray[0]));
			var MyObj2=new Object(MM_findObj(MyObjArray[1]));
			MyName=MyNameString.split("|");
			
			switch (MyParam) {
				case  "DGT": // Date Greater Than
				if (MyObj1.value !="" && MyObj2.value !="") {
					if (MyObj1.value.indexOf("-")!=-1){
						var MyDateString=new String(MyObj1.value.replace(/ /ig,"-"));
						MyDateString=MyDateString.replace(/-/ig,"/");
						var MyDate = new Array();
						MyDate =MyDateString.split("/");
					}
					else {
						var MyDateString=new String(MyObj1.value.replace(/ /ig,"/"));
						var MyDate =new Array();
						MyDate =MyDateString.split("/");
					}
					if (MyObj2.value.indexOf("-")!=-1){
						var MyDateString1=new String(MyObj2.value.replace(/ /ig,"-"));
						MyDateString1=MyDateString1.replace(/-/ig,"/");
						var MyDate1 =new Array();
						MyDate1 =MyDateString1.split("/");
					}
					else {
						var MyDateString1=new String(MyObj2.value.replace(/ /ig,"/"));
						var MyDate1 =new Array();
						MyDate1 =MyDateString1.split("/");
					}
					MyDateString=new Date(MyDate[2],MyDate[0]-1,MyDate[1]);
					MyDateString1=new Date(MyDate1[2],MyDate1[0]-1,MyDate1[1]);
					if (MyDateString>=MyDateString1) {
						alert("\"" + MyName[1] + "\" should be greater than \"" + MyName[0] + "\"!");
        					MyObj1.focus();
						return false;
					}
					}
					break;
				case  "VGT": // Value Greater Than
					if (parseFloat(MyObj1.value)>=parseFloat(MyObj2.value)) {
						alert("\"" + MyName[1] + "\" should be greater than \"" + MyName[0] + "\"!");
        					MyObj1.focus();
						return false;
					}
					break;
				case  "DGE": // Date Greater than or Equal to
					if (MyObj1.value !="" && MyObj2.value !="") {
					if (MyObj1.value.indexOf("-")!=-1){
						var MyDateString=new String(MyObj1.value.replace(/ /ig,"-"));
						MyDateString=MyDateString.replace(/-/ig,"/");
						var MyDate =new Array();
						MyDate =MyDateString.split("/");
					}
					else {
						var MyDateString=new String(MyObj1.value.replace(/ /ig,"/"));
						var MyDate =new Array();
						MyDate =MyDateString.split("/");
					}
					if (MyObj2.value.indexOf("-")!=-1){
						var MyDateString1=new String(MyObj2.value.replace(/ /ig,"-"));
						MyDateString1=MyDateString1.replace(/-/ig,"/");
						var MyDate1 =new Array();
						MyDate1 =MyDateString1.split("/");
					}
					else {
						var MyDateString1=new String(MyObj2.value.replace(/ /ig,"/"));
						var MyDate1 =new Array();
						MyDate1 =MyDateString1.split("/");
					}
					MyDateString=new Date(MyDate[2],MyDate[0]-1,MyDate[1]);
					MyDateString1=new Date(MyDate1[2],MyDate1[0]-1,MyDate1[1]);
					if (MyDateString>MyDateString1) {
						alert("\"" + MyName[1] + "\" should be greater than or equal to \"" + MyName[0] + "\"!");
        					MyObj1.focus();
						return false;
					}
					}
					break;
				case  "VGE": // Value Greater than or Equal to
					if (parseFloat(MyObj1.value)>parseFloat(MyObj2.value)) {
						alert("\"" + MyName[1] + "\" should be greater than or equal to \"" + MyName[0] + "\"!");
        					MyObj1.focus();
						return false;
					}
					break;
				}
			break;
		case "E": //File Extension
			MyObj=MM_findObj(MyObjString);
			var MyExt=new Array();
			MyExt=MyParam.split("|");
			var chkFileExt=new String();
			MyName=MyNameString;
			if (MyObj.value.length!=0) {
				var FileExt_Error=new Number(1);
				var pattern=new String();
 				for (var k=0; k<(MyExt.length); k++) {
 					pattern="." + MyExt[k];
 					chkFileExt=MyObj.value.slice(MyObj.value.length-pattern.length);
 					if (chkFileExt.toLowerCase() == pattern) {
	 					FileExt_Error=0;
 					}
 				}
 				if (FileExt_Error!=0) {
 			        	alert("Invalid file extension in \"" + MyName + "\"!");
     					MyObj.focus();
					return false;
				}
			}
			break;
		case "G": //Group
			var Neg=new Number(),k=new Number(),MyLength=new Number(),MyString=new String(),MyGroup=new String(),MyGroupValue=new Number(),MyValue=new Number(),MyFocus=new Object(),MyFocusValue=new Number(),NewString=new String();;
			var pattern =new RegExp("[ \f\n\r\t\v]","g");
			var MyGroupObj=new Array();
			MyObjArray=MyObjString.split("|");
			MyName=MyNameString;
			MyFocusValue=0;
			MyValue=0;
			for (j=0; j<(MyObjArray.length); j++) {
				MyGroup=MyObjArray[j].split(":");
				MyLength = MyGroup.length;
				MyGroupValue=1;
				for (k=0; k<MyLength; k++) {
					Neg=0;
					if (MyGroup[k].search(/^!/) != -1)  {
						MyGroup[k]=MyGroup[k].substr(1)
						Neg=1;	
					}
					MyString = "MyGroupObj[k]=" + MyParam + "." + MyGroup[k] + ";";
					eval(MyString);
					if (MyFocusValue==0) {
						MyFocus=MyGroupObj[k];
						MyFocusValue=1;
					}
					if (Neg==0){
						switch (MyGroupObj[k].type) {
							case "radio":
								if (!(MyGroupObj[k].checked)) {
									MyGroupValue=0;	
								}
								break;
							case "checkbox":
								if (!(MyGroupObj[k].checked)) {
									MyGroupValue=0;	
								}
								break;
							case "textarea":
								NewString=MyGroupObj[k].value.replace(pattern,"");
								if (NewString.length==0) {
									MyGroupValue=0;
									MyGroupObj[k].value="";	
								}
								break;
							case "text":
								NewString=MyGroupObj[k].value.replace(pattern,"");
								if (NewString.length==0) {
									MyGroupValue=0;	
									MyGroupObj[k].value="";
								}
								break;
							case "file":
								NewString=MyGroupObj[k].value.replace(pattern,"");
								if (NewString.length==0) {
									MyGroupValue=0;	
									MyGroupObj[k].value="";
								}
								break;
							case "password":
								NewString=MyGroupObj[k].value.replace(pattern,"");
								if (NewString.length==0) {
									MyGroupValue=0;	
									MyGroupObj[k].value="";
								}
								break;
							case "select-one":
								if (MyGroupObj[k].selectedIndex==0) {
									MyGroupValue=0;	
								}
								break;
							case "select-multiple":
								if (MyGroupObj[k].selectedIndex==-1) {
									MyGroupValue=0;	
								}
								break;
							case "hidden":
								NewString=MyGroupObj[k].value.replace(pattern,"");
								if (NewString.length==0) {
									MyGroupValue=0;	
									MyGroupObj[k].value="";
								}
								break;
						}
					}
					else {
						switch (MyGroupObj[k].type) {
							case "radio":
								if (MyGroupObj[k].checked) {
									MyGroupValue=0;	
								}								
								break;
							case "checkbox":
								if (MyGroupObj[k].checked) {
									MyGroupValue=0;	
								}
								break;
							case "textarea":
								NewString=MyGroupObj[k].value.replace(pattern,"");
								if (NewString.length!=0) {
									MyGroupValue=0;	
								}
								else {
									MyGroupObj[k].value="";
								}
								break;
							case "text":
								NewString=MyGroupObj[k].value.replace(pattern,"");
								if (NewString.length!=0) {
									MyGroupValue=0;	
								}
								else {
									MyGroupObj[k].value="";
								}
								break;
							case "file":
								NewString=MyGroupObj[k].value.replace(pattern,"");
								if (NewString.length!=0) {
									MyGroupValue=0;	
								}
								else {
									MyGroupObj[k].value="";
								}
								break;
							case "password":
								NewString=MyGroupObj[k].value.replace(pattern,"");
								if (NewString.length!=0) {
									MyGroupValue=0;	
								}
								else {
									MyGroupObj[k].value="";
								}
								break;
							case "select-one":
								if (MyGroupObj[k].selectedIndex!=0) {
									MyGroupValue=0;	
								}
								break;
							case "select-multiple":
								if (MyGroupObj[k].selectedIndex!=-1) {
									MyGroupValue=0;	
								}
								break;
							case "hidden":
								NewString=MyGroupObj[k].value.replace(pattern,"");
								if (NewString.length!=0) {
									MyGroupValue=0;	
								}
								else {
									MyGroupObj[k].value="";
								}
								break;
						}
					}
		
				}
				if (MyGroupValue==1) {
					MyValue=1;
					j=MyObjArray.length+1;
				}
			}
			if (MyValue==0) {
				var message = MyName.split("|");
				alert (message[1]);
				document.getElementById(message[0]).focus();
				return false;        			
			}
			break;
		case "G5": //Group
			var Neg=new Number(),k=new Number(),MyLength=new Number(),MyString=new String(),MyGroup=new String(),MyGroupValue=new Number(),MyValue=new Number(),MyFocus=new Object(),MyFocusValue=new Number(),NewString=new String();;
			var pattern =new RegExp("[ \f\n\r\t\v]","g");
			var MyGroupObj=new Array();
			MyObjArray=MyObjString.split("|");
			MyName=MyNameString;
			MyFocusValue=0;
			MyValue=0;
			SuccessCount=0;
			for (j=0; j<(MyObjArray.length); j++) {
				MyGroup=MyObjArray[j].split(":");
				MyLength = MyGroup.length;
				MyGroupValue=1;
				for (k=0; k<MyLength; k++) {
					Neg=0;
					if (MyGroup[k].search(/^!/) != -1)  {
						MyGroup[k]=MyGroup[k].substr(1)
						Neg=1;	
					}
					MyString = "MyGroupObj[k]=" + MyParam + "." + MyGroup[k] + ";";
					eval(MyString);
					if (MyFocusValue==0) {
						MyFocus=MyGroupObj[k];
						MyFocusValue=1;
					}
					if (Neg==0){
						switch (MyGroupObj[k].type) {
							case "radio":
								if (!(MyGroupObj[k].checked)) {
									MyGroupValue=0;	
								}
								break;
							case "checkbox":
								if (!(MyGroupObj[k].checked)) {
									MyGroupValue=0;	
								}
								break;
							case "textarea":
								NewString=MyGroupObj[k].value.replace(pattern,"");
								if (NewString.length==0) {
									MyGroupValue=0;
									MyGroupObj[k].value="";	
								}
								break;
							case "text":
								NewString=MyGroupObj[k].value.replace(pattern,"");
								if (NewString.length==0) {
									MyGroupValue=0;	
									MyGroupObj[k].value="";
								}
								break;
							case "file":
								NewString=MyGroupObj[k].value.replace(pattern,"");
								if (NewString.length==0) {
									MyGroupValue=0;	
									MyGroupObj[k].value="";
								}
								break;
							case "password":
								NewString=MyGroupObj[k].value.replace(pattern,"");
								if (NewString.length==0) {
									MyGroupValue=0;	
									MyGroupObj[k].value="";
								}
								break;
							case "select-one":
								if (MyGroupObj[k].selectedIndex==0) {
									MyGroupValue=0;	
								}
								break;
							case "select-multiple":
								if (MyGroupObj[k].selectedIndex==-1) {
									MyGroupValue=0;	
								}
								break;
							case "hidden":
								NewString=MyGroupObj[k].value.replace(pattern,"");
								if (NewString.length==0) {
									MyGroupValue=0;	
									MyGroupObj[k].value="";
								}
								break;
						}
					}
					else {
						switch (MyGroupObj[k].type) {
							case "radio":
								if (MyGroupObj[k].checked) {
									MyGroupValue=0;	
								}								
								break;
							case "checkbox":
								if (MyGroupObj[k].checked) {
									MyGroupValue=0;	
								}
								break;
							case "textarea":
								NewString=MyGroupObj[k].value.replace(pattern,"");
								if (NewString.length!=0) {
									MyGroupValue=0;	
								}
								else {
									MyGroupObj[k].value="";
								}
								break;
							case "text":
								NewString=MyGroupObj[k].value.replace(pattern,"");
								if (NewString.length!=0) {
									MyGroupValue=0;	
								}
								else {
									MyGroupObj[k].value="";
								}
								break;
							case "file":
								NewString=MyGroupObj[k].value.replace(pattern,"");
								if (NewString.length!=0) {
									MyGroupValue=0;	
								}
								else {
									MyGroupObj[k].value="";
								}
								break;
							case "password":
								NewString=MyGroupObj[k].value.replace(pattern,"");
								if (NewString.length!=0) {
									MyGroupValue=0;	
								}
								else {
									MyGroupObj[k].value="";
								}
								break;
							case "select-one":
								if (MyGroupObj[k].selectedIndex!=0) {
									MyGroupValue=0;	
								}
								break;
							case "select-multiple":
								if (MyGroupObj[k].selectedIndex!=-1) {
									MyGroupValue=0;	
								}
								break;
							case "hidden":
								NewString=MyGroupObj[k].value.replace(pattern,"");
								if (NewString.length!=0) {
									MyGroupValue=0;	
								}
								else {
									MyGroupObj[k].value="";
								}
								break;
						}
					}
				}
				if (MyGroupValue==1) {
					//MyValue=1;
					//j=MyObjArray.length+1;					
					SuccessCount++;
				}
			}
			//if ((MyValue==0)||(SuccessCount<5)) {
			if (SuccessCount<5) {
				message = MyName.split("|");
				alert (message[1]);
				$.scrollTo('#' + message[0], 0);
				return false;
			}
			break;
		case "L": //Length
			MyObj=MM_findObj(MyObjString);
			MyRange=MyParam.split(":");
			MyName=MyNameString;
			var pattern =new RegExp("%u","g");
			var pattern1 =new RegExp("%","g");
			var MyURLString=new String(escape(MyObj.value));
			var TempString=new String(MyURLString.replace(pattern,""));
			var NewString=new String(TempString.replace(pattern1,""));
			var MyStringLength=new Number(MyURLString.length-(MyURLString.length-NewString.length)*2);


	   MyStringLength = MyObj.value.length;

			if (MyStringLength > 0) {
			if ((!(isNaN(MyRange[0]))) && (MyRange[0]!="") && (!(isNaN(MyRange[1]))) && (MyRange[1]!="")) {
				if (parseInt(MyRange[0])==parseInt(MyRange[1])) {
					if (MyStringLength!=parseInt(MyRange[0])) {
						MyObj.focus();
						alert ("Please input " + MyRange[0] + " characters in \""+ MyName + "\".");
						return false;
					}		
				}
				else {
				if ((!(isNaN(MyRange[0]))) && (MyRange[0]!="")) {
					if (MyStringLength<parseInt(MyRange[0])) {
							MyObj.focus();
							//alert ("\""+ MyName + "\" is too short a word. Please input more than " + MyRange[0] + " characters.");
							alert (MyName);
							return false;
						}
					}
					if ((!(isNaN(MyRange[1]))) && (MyRange[1]!="")) {
						if (MyStringLength>parseInt(MyRange[1])) {
							MyObj.focus();
							alert ("\""+ MyName + "\" is too long a word. Please input less than " + MyRange[1] + " characters.");
							return false;
						}
					}			
				}
			}
			else {
				if ((!(isNaN(MyRange[0]))) && (MyRange[0]!="")) {
					if (MyStringLength<parseInt(MyRange[0])) {
						MyObj.focus();
						//alert ("\""+ MyName + "\" is too short a word. Please do not input less than " + MyRange[0] + " characters.");
						alert (MyName);
						return false;
					}
				}
				if ((!(isNaN(MyRange[1]))) && (MyRange[1]!="")) {
					if (MyStringLength>parseInt(MyRange[1])) {
						MyObj.focus();
						alert ("\""+ MyName + "\" is too long a word. Please do not input more than " + MyRange[1] + " characters.");
						return false;
					}
				}			
			}
			}
			break;
		
		case "P": //Password
			MyObjArray=MyObjString.split("|");
			var MyObj1=new Object(MM_findObj(MyObjArray[0]));
			var MyObj2=new Object(MM_findObj(MyObjArray[1]));
			var MyObj3=new Object(MM_findObj(MyObjArray[2]));
			MyName=MyNameString;
			switch (MyParam) {
				case  "noNull":
					if (!((MyObj1.value.length==0 && MyObj2.value.length==0 && MyObj3.value.length==0) || (MyObj1.value.length>0 && MyObj2.value.length>0 && MyObj3.value.length>0))) {
						alert ("To change password, please type old " + MyName + ", new " + MyName + " and confirm new " + MyName + ".");
						MyObj1.focus();
						return false;
					}
					else {
 						if (MyObj2.value!=MyObj3.value) {
 							alert ("The new " + MyName + "s you typed do not match!");
     							MyObj2.focus();
							return false;
						}
					}
				break;
				case  "Null":
					if (MyObj2.value!=MyObj3.value) {
 						alert ("The new " + MyName + "s you typed do not match!");
     						MyObj2.focus();
						return false;
					}
					break;
			}
			break;
		case "R": //Range
			MyObj=MM_findObj(MyObjString);
			MyRange=MyParam.split(":");
			MyName=MyNameString;
			if ((!(isNaN(MyRange[0]))) && (MyRange[0]!="")) {
				if (!(isNaN(MyRange[1])) && (MyRange[1]!="")) {					
					if (parseFloat(MyRange[0])==parseFloat(MyRange[1])) {
						if (parseFloat(MyObj.value)!=parseFloat(MyRange[0])) {
							alert("\"" + MyName + "\" should be equal to " + MyRange[0] + "!");
        						MyObj.focus();
							return false;
						}
					}
					else {
						
						if ((parseFloat(MyObj.value)<parseFloat(MyRange[0])) || (parseFloat(MyObj.value)>parseFloat(MyRange[1]))) {
							alert("\"" + MyName + "\" should be between " + MyRange[0] + " and " + MyRange[1] + "!");
        						MyObj.focus();
							return false;
						}
					}
				}
				else {
					if (parseFloat(MyObj.value)<parseFloat(MyRange[0])) {
						alert("\"" + MyName + "\" should be greater than or equal to " + MyRange[0] + "!");
        					MyObj.focus();
						return false;
					}
				}
			}
			else {
				if (!(isNaN(MyRange[1])) && (MyRange[1]!="")) {
					if (parseFloat(MyObj.value)>parseFloat(MyRange[1])) {
						alert("\"" + MyName + "\" should be smaller than or equal to " + MyRange[1] + "!");
        					MyObj.focus();
						return false;
					}
				}
			}		
			break;
		case "S": //Select
			MyObj=MM_findObj(MyObjString);
			MyName=MyNameString;
 			if (MyParam!="") {
 				if (MyObj.options[MyObj.selectedIndex].value==MyParam) {
 				        alert(MyName);
     					MyObj.focus();
					return false;
				}
			}
			break;
		case "T": //Data Type 
			MyObj=MM_findObj(MyObjString);
			var MyType=new Array();
			MyType=MyParam.split("|");
			MyName=MyNameString;
			for (j=0; j<(MyType.length); j++) {
				switch (MyType[j]) {
	 				case "Email":
 						if (MyObj.value.length!=0) {
 							if (isEmail(MyObj,MyName)==0) {
	 							return false;
	 						}
	 					}
	 					break;
	 				case "AN":
						if (MyObj.value.length!=0) { 
							if (isAN(MyObj,MyName)==0) {
								return false;
							}
						}
						break;
					case "Date":
						if (MyObj.value.length!=0) { 
							if (isDate(MyObj,MyName)==0) {
								return false;
							}
						}
						break;
					case "DDMM":
						if (MyObj.value.length!=0) { 
							if (isDDMM(MyObj,MyName)==0) {
								return false;
							}
						}
						break;						
					case "DDMMYYYY":
						if (MyObj.value.length!=0) { 
							if (isDDMMYYYY(MyObj,MyName)==0) {
								return false;
							}
						}
						break;
					case "MMDDYYYY":
						if (MyObj.value.length!=0) { 
							if (isMMDDYYYY(MyObj,MyName)==0) {
								return false;
							}
						}
						break;
					case "YYYYMMDD":
						if (MyObj.value.length!=0) { 
							if (isYYYYMMDD(MyObj,MyName)==0) {
								return false;
							}
						}
						break;					case "M":
		 				if (isM(MyObj,MyName)==0) {
		 					return false;
		 				}
		 				break;
		 			case "N":
		 				if (MyObj.value.length!=0) { 
		 					if (isN(MyObj,MyName)==0) {
		 						return false;
		 					}
		 				}
		 				break;
		 			case "I":
		 				if (MyObj.value.length!=0) { 
		 					if (isI(MyObj,MyName)==0) {
		 						return false;
		 					}
		 				}
		 				break;
		 			case "URL":
		 				if (MyObj.value.length!=0) { 
		 					if (isURL(MyObj,MyName)==0) {
		 						return false;
		 					}
		 				}
		 				break;
		 			case "HKID":    //extension 
		 				if (MyObj.value.length!=0) { 
		 					if (isHKID(MyObj,MyName)==0) {
		 						return false;
		 					}
		 				}
		 				break;
		 		}
			}
			break;
	}
return true;
}

function isEmail(MyString,MyName) { // Email ('Email')
    if (MyString.value.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1) {
        return 1;
    }
    else {
        alert("" + MyName + "");
        MyString.focus();
        return 0;
    }
}

function isAN(MyString,MyName) { // Alphanumeric ('AN')
	var pattern =new RegExp("[\f\n\r\t\v]","g");
	var NewString = new String(MyString.value.replace(pattern,""));
    if (NewString.search(/[^ -~]/) == -1) {
        return 1;
    }
    else {    
        alert("Please input Alphanumeric character in \"" + MyName + "\"!");
        MyString.focus();
        return 0;
    }
}

function isDate(MyString,MyName) { // Date ('D')
 if (MyString.value.search(/^\d{2}\/\d{2}\/\d{4} \d{2}/) != -1)  {
	if (MyString.value.indexOf("-")!=-1){
		var MyDateString=new String(MyString.value.replace(/ /ig,"-"));
		MyDateString=MyDateString.replace(/-/ig,"/");
		var MyDate =new Array();
		MyDate =MyDateString.split("/");
	}
	else {
		var MyDateString=new String(MyString.value.replace(/ /ig,"/"));
		var MyDate =new Array();
		MyDate =MyDateString.split("/");
	}
	var chkDate=new Date(MyDate[2],MyDate[1]-1,MyDate[0],MyDate[3]);
	var RealFullDate=new String((chkDate.getDate())+"/"+(chkDate.getMonth()+1)+"/"+(chkDate.getFullYear())+"/"+(chkDate.getHours()));
	var MyFullDate=new String((Math.abs(MyDate[0]))+"/"+(Math.abs(MyDate[1]))+"/"+(Math.abs(MyDate[2]))+"/"+(Math.abs(MyDate[3])));
	if (RealFullDate.toString()==MyFullDate.toString()) {
        	return 1;
        }
        else {
       		alert("Please input a valid date in \"" + MyName + "\"!");
        	MyString.focus();
        	return 0;
        }
    }
    else {    
        alert("Please input a valid date in \"" + MyName + "\"!");
        MyString.focus();
        return 0;
    }
}

function isDDMM(MyString,MyName) { // Date ('DDMM')
 if (MyString.value.search(/^\d{2}\/\d{2}/) != -1)  {
	var MyDate =new Array();
	var MyYear = 2008;
	MyDate =MyString.value.split("/");
	var chkDate=new Date(MyYear,MyDate[1]-1,MyDate[0]);
	var RealFullDate=new String((chkDate.getDate())+"/"+(chkDate.getMonth()+1)+"/"+(chkDate.getFullYear()));
	var MyFullDate=new String((Math.abs(MyDate[0]))+"/"+(Math.abs(MyDate[1]))+"/"+(Math.abs(MyYear)));
	if (RealFullDate.toString()==MyFullDate.toString()) {
        	return 1;
        }
        else {
       		alert(MyName);
        	MyString.focus();
        	return 0;
        }
    }
    else {    
     		alert(MyName);
        MyString.focus();
        return 0;
    }
}

function isDDMMYYYY(MyString,MyName) { // Date ('DDMMYYYY')
 if (MyString.value.search(/^\d{2}\/\d{2}\/\d{4}/) != -1)  {
	var MyDate =new Array();
	MyDate =MyString.value.split("/");
	var chkDate=new Date(MyDate[2],MyDate[1]-1,MyDate[0]);
	var RealFullDate=new String((chkDate.getDate())+"/"+(chkDate.getMonth()+1)+"/"+(chkDate.getFullYear()));
	var MyFullDate=new String((Math.abs(MyDate[0]))+"/"+(Math.abs(MyDate[1]))+"/"+(Math.abs(MyDate[2])));
	if (RealFullDate.toString()==MyFullDate.toString()) {
        	return 1;
        }
        else {
       		alert(MyName);
        	MyString.focus();
        	return 0;
        }
    }
    else {    
     		alert(MyName);
        MyString.focus();
        return 0;
    }
}

function isMMDDYYYY(MyString,MyName) { // Date ('MMDDYYYY')
 if (MyString.value.search(/^\d{2}\/\d{2}\/\d{4}/) != -1)  {
	var MyDate =new Array();
	MyDate =MyString.value.split("/");
	var chkDate=new Date(MyDate[2],MyDate[0]-1,MyDate[1]);
	var RealFullDate=new String((chkDate.getDate())+"/"+(chkDate.getMonth()+1)+"/"+(chkDate.getFullYear()));
	var MyFullDate=new String((Math.abs(MyDate[1]))+"/"+(Math.abs(MyDate[0]))+"/"+(Math.abs(MyDate[2])));
	if (RealFullDate.toString()==MyFullDate.toString()) {
        	return 1;
        }
        else {
       		alert("Please input a valid date in \"" + MyName + "\"!");
        	MyString.focus();
        	return 0;
        }
    }
    else {    
        alert("Please input a valid date in \"" + MyName + "\"!");
        MyString.focus();
        return 0;
    }
}

function isYYYYMMDD(MyString,MyName) { // Date ('YYYYMMDD')
 if (MyString.value.search(/^\d{4}-\d{2}-\d{2}/) != -1)  {
	var MyDate =new Array();
	MyDate =MyString.value.split("-");
	var chkDate=new Date();
	chkDate.setMonth(MyDate[1]-1,MyDate[2]);
	chkDate.setYear(MyDate[0]);
	var RealFullDate=new String((chkDate.getDate())+"/"+(chkDate.getMonth()+1)+"/"+(chkDate.getFullYear()));
	var MyFullDate=new String((Math.abs(MyDate[2]))+"/"+(Math.abs(MyDate[1]))+"/"+(Math.abs(MyDate[0])));
	if (RealFullDate.toString()==MyFullDate.toString()) {
        	return 1;
        }
        else {
       		alert("Please input a valid date in \"" + MyName + "\"!");
        	MyString.focus();
        	return 0;
        }
    }
    else {    
        alert("Please input a valid date in \"" + MyName + "\"!");
        MyString.focus();
        return 0;
    }
}

function isM(MyString,MyName) { // Mandatory ('M')
    var pattern =new RegExp("[ \f\n\r\t\v]","g");
    var NewString = new String(MyString.value.replace(pattern,""));
    if (NewString.length != 0) {
        return 1;
    }
    else {    
        MyString.value="";
        alert("" + MyName + "");
        MyString.focus();
        return 0;
    }
}

function isN(MyString,MyName) { // Number ('N')
    if (!(isNaN(MyString.value))) {
        return 1;
    }
    else {    
        alert("Please input a number in \"" + MyName + "\"");
        MyString.focus();
        return 0;
    }
}

function isI(MyString,MyName) { // Integer ('I')
    if (!(isNaN(MyString.value))) {
    	if (parseInt(MyString.value) == parseFloat(MyString.value)) {
       	 	return 1;
       	}
       	else {
       	 	alert("Please input an integer in \"" + MyName + "\"");
       	 	MyString.focus();
        	return 0;
       	}
    }
    else {    
        alert("Please input an integer in \"" + MyName + "\"");
        MyString.focus();
        return 0;
    }
}

function isURL(MyString,MyName) { // URL ('URL')
    if (MyString.value.search(/^[a-zA-Z]+:\/\/\S+((\.|-)\S+)*\.\S+$/) != -1)
        return 1;
    else
        alert("Please input a valid URL in \"" + MyName + "\"!");
        MyString.focus();
        return 0;
}

function isHKID(MyString,MyName) { // URL ('URL')
  var a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  var total = 0;
  var chk_digit = "";
  var startpos = 0;
  var myHKID = MyString.value;

  if (!(MyString.value.search(/^[xX]?[a-zA-Z][0-9]{6,6}[0-9aA]$/) != -1)) {
      alert(MyName);
      return 0;
  }
     
  if ((parseInt(myHKID.length) < 8) || (parseInt(myHKID.length) > 9)) {
      alert(MyName);
      //MyString.focus();
      return 0;
  }
  
  myHKID = myHKID.toUpperCase();
  if (myHKID.substring(0, 1) == "X") {
    total += 6;
    startpos = 1;    
  } else {
    startpos = 0;
  }      

  total += (a.indexOf(myHKID.substring(startpos, startpos+1)) + 1) * 8;
  for (var i=(startpos+1); i< (myHKID.length-1); i++) {
     total += parseInt(myHKID.substring(i, i+1)) * (8-i+startpos);
  }
  var checkNumber = 11 - total % 11;
  
  if (checkNumber < 10) {
     chk_digit = checkNumber.toString();
  } else {
     chk_digit = "A";
  }
  
  if (chk_digit == myHKID.substring(myHKID.length-1,myHKID.length))
      return 1;
  else
      alert(MyName);
      //MyString.focus();
      return 0;
}

