// namespace : webon.js.form_tools
// version : 1.0.0
// modify : 27/09/2004
//
function check_format(form,input,format){
	var label=getAttrValue(input,"label",input.name);
	var msg=getAttrValue(input,"errorMsg",errorMsgs["invalid_format"]);
	var disabled=getAttrValue(input,"disabled",input.name);
	var value=getInputValue(input,"");
	
	if(value!="" && (disabled==false || disabled==input.name)){
		if (!format.test(value)){
			show_error_msg(msg,new Array("#label#"),new Array(label));
			return false;
		}
	}
	
	return true;
}

function check_format_name(form,input){
	var label=getAttrValue(input,"label",input.name);
	var msg=getAttrValue(input,"errorMsg",errorMsgs["invalid_format"]);
	var disabled=getAttrValue(input,"disabled",input.name);
	var value=getInputValue(input,"");
	
	if(value!="" && (disabled==false || disabled==input.name)){
		if (!(/^[\w\s.,']+$/).test(value)){
			show_error_msg(msg,new Array("#label#"),new Array(label));
			return false;
		}
	}
	
	return true;
}

function check_id_format(form,input){
	input.value=input.value.toUpperCase().replace(/^\s+|\s+$/, '');
	if (getObj(input.name.replace("No","TypeCheck")).value.toLowerCase()=="hkid") {
		var label=getAttrValue(input,"label",input.name);
		var msg=getAttrValue(input,"errorMsg",errorMsgs["invalid_id_format"]);
		var disabled=getAttrValue(input,"disabled",input.name);
		var value=getInputValue(input,"");
		
		if (value!="" && !validHKID(value) &&  (disabled==false || disabled==input.name)){
			show_error_msg(msg,new Array("#label#"),new Array(label));
			return false;
		}
	}
	return true;
}

function validHKID(hkid){
	var last3char=hkid.substring(hkid.length-3);
	var chk=last3char.charAt(1);
	var reg=/^[a-zA-Z]{1,2}\d{6,7}\([a-zA-Z0-9]{1}\)$/g;
	if (!reg.test(hkid)){
		return false;
	}
	
	var totalSum=0;
	var chkDigit=0;
	var remainder=0;
	
	if (hkid.length==10){
		totalSum=58*9;
	}
	
	for(var i=hkid.length-2; i>1; i--){
		var posChar=hkid.charAt(hkid.length-2-i);
		totalSum+=getDigitValue(posChar)*i;
	}
	
	remainder=totalSum%11;
	
	var check=totalSum;
	if (chk=="A"){
		check=check+10;
	}else{
		check=check+Number(chk);
	}
	if (check%11!=0){
		return false;
	}
	return true;
}

function getDigitValue(digit){
	/*switch(digit){
		case "A": case "L": case "W":
			return 1;
		case "B": case "M": case "X":
			return 2;
		case "C": case "N": case "Y":
			return 3;
		case "D": case "O": case "Z":
			return 4;
		case "E": case "P":
			return 5;
		case "F": case "Q":
			return 6;
		case "G": case "R":
			return 7;
		case "H": case "S":
			return 8;
		case "I": case "T":
			return 9;
		case "J": case "U":
			return 10;
		case "K": case "V":
			return 11;
	}*/
	if (digit.charCodeAt(0)>=65 && digit.charCodeAt(0)<=90){
		return digit.charCodeAt(0)-55;
	}
	
	return Number(digit);
}

function check_radio(form,input){

	var label=getAttrValue(input,"label",input.name);
	var msg=getAttrValue(input,"errorMsg",errorMsgs["please_enter"]);
	var disabled=getAttrValue(input,"disabled",input.name);
	
	var value=getInputValue(getObj(input.name+"Check"),"");
	
	if(value=="" &&  (disabled==false || disabled==input.name)){
		show_error_msg(msg,new Array("#label#"),new Array(label));
		return false;
	}else{
		return true;
	}
}
function check_select(form,input){

	var label=getAttrValue(input,"label",input.name);
	var msg=getAttrValue(input,"errorMsg",errorMsgs["select_empty"]);
	var disabled=getAttrValue(input,"disabled",input.name);
	var value=getInputValue(input,"");
	if(value=="" && (disabled==false || disabled==input.name)){
		show_error_msg(msg,new Array("#label#"),new Array(label));
		return false;
	}else{
		return true;
	}
}
function check_empty(form,input){
	
//	alert( ' 1 ' );
	

	var label=getAttrValue(input,"label",input.name);
	var msg=getAttrValue(input,"errorMsg",errorMsgs["please_enter"]);
	var disabled=getAttrValue(input,"disabled",input.name);
	var value=getInputValue(input,"");
	if(value=="" && (disabled==false || disabled==input.name)){
		show_error_msg(msg,new Array("#label#"),new Array(label));
		return false;
	}else{
		return true;
	}
}

function check_tom( form,input ){
	if ( form.amount[3].checked  ) 
	{	 // alert( form.amountT.value  );	
		if (form.amountT.value == null ||form.amountT.value== "") {		
			alert("Sponsored amount cannot be empty.");
			return false;
			}		
		//return true;	
	} 
	return true;
}

function check_email(form,input){
	//alert( ' 2 ' );
	
	var label=getAttrValue(input,"label",input.name);
	var msg=getAttrValue(input,"errorMsg",errorMsgs["invalid_format"]);
	var value=getInputValue(input,"");
	if(value=="")return true;
	if (!((/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/).test(value)) ){
		show_error_msg(msg,new Array("#label#"),new Array(label));
		return false;	
	}else{
		return true;
	}
}

function check_tel(form,input)
{
	var label=getAttrValue(input,"label",input.name);
	var msg=getAttrValue(input,"errorMsg",errorMsgs["string_equal"]);
	var min =8;
	var value=getInputValue(input,"");
			
	if(value=="")return true;
	if($('country').value != 'HK')return true;
			
	if(value.length!=8){
		show_error_msg(msg,new Array("#label#","#number#"),new Array(label,min));		
		return false;
	}else{		
		return true;
	}
}

function check_tel_no(form,input){
	var telNoObj=getObj(input.name.replace("Code",""));
	var label=getAttrValue(telNoObj,"label",telNoObj.name);
	var msg=getAttrValue(input,"errorMsg",errorMsgs["invalid_format"]);
	var disabled=getAttrValue(input,"disabled",input.name);
	var value=getInputValue(input,"");
	
	if (value!="" && telNoObj.value!="") {
		if (!check_number_min(form,input,0) || !check_number_min(form,telNoObj,0)){
			return false;
		}else{
			if (value=="852"){
				if (telNoObj.value.length!=8){
					show_error_msg(msg,new Array("#label#"),new Array(label));
					return false;
				}
			}
		}
	}
	
	return true;
}

function check_number_min(form,input,min){
	
	var label=getAttrValue(input,"label",input.name);
	var msg=getAttrValue(input,"errorMsg",errorMsgs["number_min"]);
	var value=getInputValue(input,"");
	
	if(value=="")return true;
	/*var n=parseInt(value,10);
	if("NaN"==n.toString()){*/
	if (isNaN(value)){
		
		show_error_msg(errorMsgs["nan"],new Array("#label#"),new Array(label));
		return false;
	}
	//if(n<min){
	if(value<min){
		show_error_msg(msg,new Array("#label#","#number#"),new Array(label,min));
		return false;
	}else{
		return true;
	}
}

function check_number_max(form,input,max){
	var label=getAttrValue(input,"label",input.name);
	var msg=getAttrValue(input,"errorMsg",errorMsgs["number_max"]);
	var value=getInputValue(input,"");
	
	if(value=="")return true;
	
	var n=parseInt(value,10);
	if("NaN"==n.toString()){
		show_error_msg(errorMsgs["nan"],new Array("#label#"),new Array(label));
		return false;
	}
	if(n>max){
		show_error_msg(msg,new Array("#label#","#number#"),new Array(label,max));
		return false;
	}else{
		return true;
	}
}

function check_string_min(form,input,min){
	var label=getAttrValue(input,"label",input.name);
	var msg=getAttrValue(input,"errorMsg",errorMsgs["string_min"]);
	var value=getInputValue(input,"");
	
	if(value=="")return true;
	if(value.length<min){
		show_error_msg(msg,new Array("#label#","#number#"),new Array(label,min));
		return false;
	}else{
		return true;
	}
}

function check_string_equal(form,input,min){
	var label=getAttrValue(input,"label",input.name);
	var msg=getAttrValue(input,"errorMsg",errorMsgs["string_equal"]);
	var value=getInputValue(input,"");
	
	if(value=="")return true;
	if(value.length!=min){
		show_error_msg(msg,new Array("#label#","#number#"),new Array(label,min));
		return false;
	}else{
		return true;
	}
}

function check_string_max(form,input,max){
	
	var label=getAttrValue(input,"label",input.name);
	var msg=getAttrValue(input,"errorMsg",errorMsgs["string_max"]);
	var value=getInputValue(input,"");
	if(value=="")return true;
	if(value.length>max){
		
		show_error_msg(msg,new Array("#label#","#number#"),new Array(label,max));
		return false;
	}else{
		return true;
	}
}
function isLeap(year) {
    if (year % 400 == 0) {
        return true;
    } else if ((year % 4 == 0) && (year % 100 != 0)) {
        return true
    } else return false;
}

function days_in(month, year) {
    
    if (month == 4 || month == 6 || month == 9 || month == 11) {
        return 30;
    } else if (!isLeap(year) && month == 2) {
        return  28;
    } else if (isLeap(year) && month == 2) {
        return  29;
    } else day_validator = 31;    
}

function check_date(form,input){
	var label=getAttrValue(input,"label",input.name);
	var msg=getAttrValue(input,"errorMsg",errorMsgs["invalid_date_format"]);
	
	var value=getInputValue(input,"");
    var myArrayDate, myDay, myMonth, myYear, myString, myYearDigit, day_validator;

	if(value=="")return true;
	var formats=new Array();
	var formatString="dd/MM/yyyy";
	if(arguments.length<3){
		formats[formats.length]="dd/MM/yyyy";
	}else{
		var preFormat=arguments[2];
		alert(arguments[2]);
		var f="";
		switch(preFormat){
			case "fulldatetime":
				f="dd/MM/yyyy HH:mm:ss";
				formats[formats.length]="dd/MM/yyyy HH:mm:ss";
				formats[formats.length]="dd/M/yyyy HH:mm:ss";
				formats[formats.length]="d/MM/yyyy HH:mm:ss";			
				formats[formats.length]="d/M/yyyy HH:mm:ss";
			case "datetime":
				if(f=="")f="dd/MM/yyyy HH:mm";
				formats[formats.length]="dd/MM/yyyy HH:mm";
				formats[formats.length]="dd/M/yyyy HH:mm";
				formats[formats.length]="d/MM/yyyy HH:mm";			
				formats[formats.length]="d/M/yyyy HH:mm";
			case "date":
				if(f=="")f="dd/MM/yyyy";
				formats[formats.length]="dd/MM/yyyy";
				formats[formats.length]="dd/M/yyyy";
				formats[formats.length]="d/MM/yyyy";			
				formats[formats.length]="d/M/yyyy";
				break;
			default:
				alert(arguments[2]);
				for(var i=2;i<arguments.length;i++){
					var f=arguments[i];
					if(f!="" && f!=null)formats[formats.length]=f;

				}
				f=arguments[2];
				break;
		}
		formatString=f;
	}
	var d=null;
	for(var i=0;i<formats.length;i++){	
//		d=parseDateObject(value,formats[i]); //18092009
        d= new Date(value,formats[i]);
        myArrayDate = value.split("/");
    myDay = Math.round(parseFloat(myArrayDate[0]));
    myMonth = Math.round(parseFloat(myArrayDate[1]));
    myYear = Math.round(parseFloat(myArrayDate[2]));
    myString = myYear + "";
    myYearDigit = myString.length;
    

    if (isNaN(myDay) || isNaN(myMonth) || isNaN(myYear) || (myYear < 1) || (myDay < 1) || (myMonth < 1) || (myMonth > 12) || (myYearDigit != 4) || (myDay > days_in(myMonth, myYear))) {
        show_error_msg(msg,new Array("#label#","#format#"),new Array(label,formatString));
        return false;
    } else {
        return true;
    }
	}
	show_error_msg(msg,new Array("#label#","#format#"),new Array(label,formatString));
	return false;

}


function check_select_date(form,input){
	var dayObj=getObj(input.name+"Day");
	var mthObj=getObj(input.name+"Month");
	var yearObj=getObj(input.name+"Year");
	
	
	if (dayObj.value=="" || dayObj.value.toLowerCase()=="day"){
		label=getAttrValue(dayObj,"label",dayObj.name);
		msg=getAttrValue(dayObj,"errorMsg",errorMsgs["please_enter"]);
		show_error_msg(msg,new Array("#label#"),new Array(label));
		dayObj.focus();
		return false;
	}
	if (mthObj.value=="" || mthObj.value.toLowerCase()=="month"){
		label=getAttrValue(mthObj,"label",mthObj.name);
		msg=getAttrValue(mthObj,"errorMsg",errorMsgs["please_enter"]);
		show_error_msg(msg,new Array("#label#"),new Array(label));
		mthObj.focus();
		return false;
	}
	if (yearObj.value=="" || yearObj.value.toLowerCase()=="year"){
		label=getAttrValue(yearObj,"label",yearObj.name);
		msg=getAttrValue(yearObj,"errorMsg",errorMsgs["please_enter"]);
		show_error_msg(msg,new Array("#label#"),new Array(label));
		yearObj.focus();
		return false;
	}
	
	
	
	return true;
}


function check_select_min(form,input,min){
	var label=getAttrValue(input,"label",input.name);
	var msg=getAttrValue(input,"errorMsg",errorMsgs["select_min"]);
	
	var count=_count_selected(input);
	if(count<min){
		show_error_msg(msg,new Array("#label#","#number#"),new Array(label,min));
		return false;
	}else{
		return true;
	}
}

function check_select_max(form,input,max){
	var label=getAttrValue(input,"label",input.name);
	var msg=getAttrValue(input,"errorMsg",errorMsgs["select_max"]);
	
	var count=_count_selected(input);
	if(count>max){
		show_error_msg(msg,new Array("#label#","#number#"),new Array(label,max));
		return false;
	}else{
		return true;
	}
}

function _count_selected(input){
	var type=input.type.toLowerCase();
	var count=0;
	
	switch(type){
		case "select-one":
		case "select-multiple":
			for(var i=0;i<input.options.length;i++){
				if(input.options[i].selected)count++;
			}
			break;
		case "checkbox":
			var checkboxs=document.getElementsByName(input.name);
			for(var i=0;i<checkboxs.length;i++){
				if(checkboxs[i].checked)count++;
			}		
			break;
		
	}
	return count;
}

function checkPassword(theForm){
	
	var passwordmsg=theForm.password.value;
	var repasswordmsg=theForm.repassword.value;
	if((theForm.password.value!=theForm.repassword.value)&&(theForm.password.value!="")){
		
		alert("Your passwords do not match, please verify you entered the same password in each field.\n\n");
		theForm.password.select();
		theForm.password.focus();
		return false;
	}
		return true;
}

function check_valid_date(form,input){
			
			var dayObj=getObj(input.name+"Day");
			var mthObj=getObj(input.name+"Month");
			var yearObj=getObj(input.name+"Year");
		
			var d = mthObj.value +'/'+ dayObj.value +'/'+ yearObj.value;
			d = new Date(d);
			/*alert(d.getDate());
			alert(d.getMonth());
			alert(d.getFullYear());
			alert(d);*/
			if ((d.getDate() == dayObj.value) && (d.getMonth() == (mthObj.value-1)) && (d.getFullYear() == yearObj.value)) 
			{
				return true;
			}
			else {
			
				dayObj.focus();
				label=getAttrValue(dayObj,"label",dayObj.name);
				msg=getAttrValue(input,"errorMsg",errorMsgs["valid_date"]);
				show_error_msg(msg,new Array("#label#"),new Array(label));
				
				return false;
			}
		}

