// 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_card_expiry(form,input){
	var label=getAttrValue(input,"label",input.name);
	var msg=getAttrValue(input,"errorMsg",errorMsgs["card_expiry"]);
	var disabled=getAttrValue(input,"disabled",input.name);
	var value=getInputValue(input,"");
	var today = new Date();
	
	if (value!="" && (disabled==false || disabled==input.name)){
		if (getObj(input.name.replace("Month","Year")).value==today.getFullYear()) {
			if (Number(value)<=today.getMonth+2){
				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)){
			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);
	
	if (!(/^[a-zA-Z]{1,2}\d{6,7}(\([\daA]{1}\))*$/).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_empty(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(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_email(form,input){
	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_no(form,input){
	var telNoObj=getObj(input.name.replace("Code","No"));
	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 check_date(form,input){
	var label=getAttrValue(input,"label",input.name);
	var msg=getAttrValue(input,"errorMsg",errorMsgs["invalid_date_format"]);
	
	var value=getInputValue(input,"");
	if(value=="")return true;
	var formats=new Array();
	var formatString="yyyy/MM/dd HH:mm:ss";
	if(arguments.length<3){
		formats[formats.length]="yyyy/MM/dd HH:mm:ss";
	}else{
		var preFormat=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]);
		if(d)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==""){
		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==""){
		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==""){
		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;
		case "radio":
			var radios=document.getElementsByName(input.name);
			for(var i=0;i<radios.length;i++){
				if(radios[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);
	
	if (d == "NaN"){
		return true;
	}
	/*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;
	}
}

/*** Begin added by Johnny ***/
function check_number_format(form,input){
	var label=getAttrValue(input,"label",input.name);
	var msg=getAttrValue(input,"errorMsg",errorMsgs["invalid_number_format"]);
	var value=getInputValue(input,"");
	
	if(value=="")return true;
	
	if(isNaN(value)){
		show_error_msg(errorMsgs["nan"],new Array("#label#"),new Array(label));
		return false;
	}
	else{
		return true;
	}
}

function check_select(form,input){
	var obj=getObj(input.name);
	var value=obj.value;
	
	if(value==""){
		var label=getAttrValue(obj,"label",obj.name);
		var msg=getAttrValue(obj,"errorMsg",errorMsgs["please select"]);
		show_error_msg(msg,new Array("#label#"),new Array(label));
		obj.focus();
		return false;
	}
	else return true;
}

function check_valid_warranty_card_number(form,input){
	var label=getAttrValue(input,"label",input.name);
	var msg=getAttrValue(input,"errorMsg",errorMsgs["invalid_warranty_card_number"]);
	var value=getInputValue(input,"");
	
	if(value!="" && valid_warranty_card_number(value)==false){
		show_error_msg(msg,new Array("#label#"),new Array(label));
		return false;
	}
	else return true;
}

function valid_warranty_card_number(warrantyCardNum){
	var result=true;
	var currentChar="";
	
	for(var i=0; i<warrantyCardNum.length; i++){
		currentChar=warrantyCardNum.charAt(i);
		//lower case characters will be converted into upper case during the database process.
		if(i<2 && (currentChar.toUpperCase() < "A" || currentChar.toUpperCase() > "Z")) result=false;
		else if(i>=2 && (isNaN(currentChar)==true)) result=false;
	}
	
	return result;
}

function check_valid_serial(form,input){
	var label=getAttrValue(input,"label",input.name);
	var msg=getAttrValue(input,"errorMsg",errorMsgs["invalid_serial"]);
	var value=getInputValue(input,"");
	
	//alert(valid_serial(value));
	if(value!="" && valid_serial(value)==false){
		show_error_msg(msg,new Array("#label#"),new Array(label));
		return false;
	}
	else return true;
}

function valid_serial(serialNum){
	var result=true;
	var currentChar="";
	
	for(var i=0; i<serialNum.length; i++){
		currentChar=serialNum.charAt(i);
		//lower case characters will be converted into upper case during the database process.
		if(i==0 && (currentChar.toUpperCase() < "A" || currentChar.toUpperCase() > "N" || currentChar.toUpperCase() == "I")) result=false;
		else if(i==2 && (currentChar.toUpperCase() < "A" || currentChar.toUpperCase() > "Z")) result=false;
		else if((i==1 || i>=3) && isNaN(currentChar)==true) result=false;
		else if(currentChar==" ") result=false;
	}
	
	return result;
}

function check_valid_date_string(form,input){	
	var value=getInputValue(input,"");
	
	if(value == "") return true;
	else{
		var dateArray = value.split("/");
		var d = new Date(value);
		
		if ((d.getDate() == dateArray[1]) && (d.getMonth() == dateArray[0] - 1) && (d.getFullYear() == dateArray[2])) 
		{
			return true;
		}
		else {
			var label=getAttrValue(input,"label",input.name);
			var msg=getAttrValue(input,"errorMsg",errorMsgs["valid_date"]);
			show_error_msg(msg,new Array("#label#"),new Array(label));
			
			return false;
		}
	}
}

function check_valid_time_string(form,input){	
	var value=getInputValue(input,"");
	
	if(value == "") return true;
	else{	
		var timeRegExp = /^(\d{1,2}):(\d{2}):(\d{2}) ([aApP][mM]){1}$/;
		var timeArray = value.match(timeRegExp);
		var result = false;
		
		if(timeArray){
			if((timeArray[1] == 0 && (timeArray[4] == "pm" || timeArray[4] == "PM")) || (timeArray[1] == 12 && (timeArray[4] == "am" || timeArray[4] == "AM"))) result = false;
			else if(timeArray[1] < 0 || timeArray[1] > 12) result = false;
			else if(timeArray[2] > 59 || timeArray[3] > 59) result = false;
			else result = true;
		}else result = false;

		if(result == false){
			var label=getAttrValue(input,"label",input.name);
			var msg=getAttrValue(input,"errorMsg",errorMsgs["valid_time"]);
			show_error_msg(msg,new Array("#label#"),new Array(label));
			
			return false;
		}
		else {
			return true;
		}
	}
}

function check_valid_decimal(form,input){	
	var value=getInputValue(input,"");
	
	if(value == "") return true;
	else{
		var maxDecimalPlaces = 2;
		var result = false;
		
		if(isNaN(value) == true){
			result = false;	
		}
		else if(value.substring(value.length-1, value.length) == ".") result = false;
		else{
			if(value.indexOf('.') == -1) value += ".";
			
			var decimalPlaces = value.substring(value.indexOf('.')+1, value.length);
			
			if(decimalPlaces.length > maxDecimalPlaces) result = false;
			else result = true;
		}
		
		if(result == false){
			var label=getAttrValue(input,"label",input.name);
			var msg=getAttrValue(input,"errorMsg",errorMsgs["valid_decimal"]);
			show_error_msg(msg,new Array("#label#"),new Array(label));
			
			return false;
		}
		else {
			return true;
		}
	}
}
/*** End added by Johnny ***/


function check_checked(form, input) {
    var count = 0;
    var label = getAttrValue(input, "label", input.name);
    var msg = getAttrValue(input, "errorMsg", errorMsgs["please_enter"]);
    var checkboxs = document.getElementsByName(input.name);
    for (var i = 0; i < checkboxs.length; i++) {
        if (checkboxs[i].checked) count++;
    }
    if (count <= 0) {
        show_error_msg(msg, new Array("#label#"), new Array(label));
        return false;
    } else {
        return true;
    }
}
