// 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.name,"");
	
	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.name,"");
	
	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.name,"");
		
		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($(input.name+"Check").name,"");
	
	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 value=getInputValue(input.name,"");
	if(value==""){
		show_error_msg(msg,new Array("#label#"),new Array(label));
		return false;
	}else{
		return true;
	}
}

function check_empty_zero(form,input){
	var label=getAttrValue(input,"label",input.name);
	var msg=getAttrValue(input,"errorMsg",errorMsgs["please_enter"]);
	var value=getInputValue(input.name,"");
	if(value=="" || value == "0"){
		show_error_msg(msg,new Array("#label#"),new Array(label));
		return false;
	}else{
		return true;
	}
}

function check_empty(form,input,defaultValue){
	var label=getAttrValue(input,"label",input.name);
	var msg=getAttrValue(input,"errorMsg",errorMsgs["please_enter"]);
	var value=getInputValue(input.name,"");
	if(value=="" || value == defaultValue){
		show_error_msg(msg,new Array("#label#"),new Array(label));
		return false;
	}else{
		return true;
	}
}


function check_whole_number(form,input)
{
    var label=getAttrValue(input,"label",input.name);
	var msg=getAttrValue(input,"errorMsg",errorMsgs["whole_number"]);
	var value=getInputValue(input.name,"");
	
	if(isNaN(value) || value.indexOf('.') != -1){
		show_error_msg(msg,new Array("#label#"),new Array(label));
		return false;
	}else{
		return true;
	}
}

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;
    }
}

function check_input(form,input,count){
	var label=getAttrValue(input,"label",input.name);
	var value=getInputValue(input.name,"");
    
    var counting=value.split(',');
    var num_words = counting.length;
	if(counting.length < count){
		
		alert("["+ label+"] must have at least "+count+" values!! You only have "+num_words+" values.");
		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.name,"");
	if(value=="")return true;
	//if (!((/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/).test(value)) ){
	if (!(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.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.name,"");
			
	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.name,"");
	
	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.name,"");
	
	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.length<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.name,"");
	
	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(value.length>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.name,"");
	
	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.name,"");
	
	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.name,"");
	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.name,"");
	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=="" || 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;
			}
		}


function check_date_later_than(form,input,check_target) {
    var tg = document.getElementById(check_target);

    var label=getAttrValue(input,"label",input.name);
    var label2=getAttrValue(tg,"label",tg.name);
    
	var msg=getAttrValue(input,"errorMsg",errorMsgs["data_must_later_than"]);
	
	var value=getInputValue(input.name,"");
	var value2=getInputValue(tg.name,"");
	
	var d1 = new Date(value);
	var d2 = new Date(value2);
	
	if(d1 >= d2){
	    var arr1 = [];
	    arr1.push("#label#");
	    arr1.push("#label2#");
	    
	    var arr2 = [];
	    arr2.push(label);
	    arr2.push(label2);
	    
		show_error_msg(msg,arr1,arr2);
		return false;
	}else{
		return true;
	}
}

function check_date_greater_than(form,input,check_target) {
    var tg = document.getElementById(check_target);

    var label=getAttrValue(input,"label",input.name);
    var label2=getAttrValue(tg,"label",tg.name);
    
	var msg=getAttrValue(input,"errorMsg",errorMsgs["data_must_greater_than"]);
	
	var value=getInputValue(input.name,"");
	var value2=getInputValue(tg.name,"");
	
	var d1 = new Date(value);
	var d2 = new Date(value2);
	
	if(d1 <= d2){
	    var arr1 = [];
	    arr1.push("#label#");
	    arr1.push("#label2#");
	    
	    var arr2 = [];
	    arr2.push(label);
	    arr2.push(label2);
	    
		show_error_msg(msg,arr1,arr2);
		return false;
	}else{
		return true;
	}
}

function check_full_date_time(form,input) {
    var label=getAttrValue(input,"label",input.name);
	var msg=getAttrValue(input,"errorMsg",errorMsgs["full_date_time"]);
	var value=getInputValue(input.name,"");
	
	var regex = /^(\d{4})\/(\d{2})\/(\d{2}) (\d{2}):(\d{2}):(\d{2})$/;
	
	if(!regex.test(value)) {
	    show_error_msg(msg,new Array("#label#"),new Array(label));
		return false;
	} else {	
	
	    var d = new Date(value.replace(regex, '$1/$2/$3 $4:$5:$6'));

	    if( ( parseInt(RegExp.$2, 10) == (1+d.getMonth()) ) && ( parseInt(RegExp.$3, 10) == d.getDate() ) && ( parseInt(RegExp.$1, 10) == d.getFullYear() ) ){
	        return true;
		} else {
		    show_error_msg(msg,new Array("#label#"),new Array(label));
		    return false;
		}
		
	}
}


// for check_unique start 
var check_unique_obj = { 'pass' : "pass"}
function check_unique(input,table,field,int_id_field,int_id_value) {

    var label=getAttrValue(input,"label",input.name);
	var msg=getAttrValue(input,"errorMsg",errorMsgs["must_unique"]);
	var value=getInputValue(input.name,"");
	
	check_unique_obj.pass = "fail";
	check_unique_ajax(table,field,value,int_id_field,int_id_value);

    setTimeout(function() {check_unique_return(input,label,msg);},500);

    return true;
    
}

function check_unique_return(input,label,msg) {

    if (check_unique_obj.pass == "pass") {
	    return true;
	} else if (check_unique_obj.pass == "fail") {
	    show_error_msg(msg,new Array("#label#"),new Array(label));
	    input.value = "";
	    input.focus();
	    return false;
	} else if (check_unique_obj.pass == "checking_error") {
	    alert("Checking Error!");
	    input.value = "";
	    input.focus();
	    return false;
	}
}

function check_unique_ajax(table,field,data,int_id_field,int_id_value)  {
    var url = 'check_unique.aspx';

    var params= Object.extend({ 
            t:table,
			f:field,
			d:data,
			id_f:int_id_field,
			id_v:int_id_value,
			rand:Math.floor(Math.random()*10000000)
    });

    var myAjax = new Ajax.Request(
        url,
        {
            method: 'get',
            parameters: params,
            onComplete: check_unique_response
        }
    );
}

function check_unique_response(originalRequest) {
    //alert(originalRequest.responseText);
	    
    var root=originalRequest.responseXML.documentElement;
		
    var pass=root.selectSingleNode("pass").text; // not work in Firefox
    
    /* not work in eform
    var obj=new Object();
    
    var itemNodes=selectNodes(root,"pass");
    
    for(var i=0;i<itemNodes.length;i++){
        var item=itemNodes[i];            
        obj[item.nodeName] = item.firstChild.nodeValue;
    }    
    var pass = obj.pass;
    */
    
    check_unique_obj.pass = pass;
    
}
// for check_unique end


// for check multipleSelect options start
function check_multipleSelect_empty(form,input){
	var label=getAttrValue(input,"label",input.name);
	var msg=getAttrValue(input,"errorMsg",errorMsgs["please_enter"]);

	if (input.options.length <= 0) {
	    show_error_msg(msg,new Array("#label#"),new Array(label));
	    return false;
	} else {
	    return true;
	}
}

function check_multipleSelect_options(form,input,max_number){
	var label=getAttrValue(input,"label",input.name);
	var msg=getAttrValue(input,"errorMsg",errorMsgs["number_max"]);

	if (input.options.length > parseInt(max_number,10)) {
	    show_error_msg(msg,new Array("#label#","#number#"),new Array(label,max_number));
	    return false;
	} else {
	    return true;
	}
}

function check_multipleSelect_options_min(form,input,min_number){
	var label=getAttrValue(input,"label",input.name);
	var msg=getAttrValue(input,"errorMsg",errorMsgs["number_min"]);

	if (input.options.length < parseInt(max_number,10)) {
	    show_error_msg(msg,new Array("#label#","#number#"),new Array(label,max_number));
	    return false;
	} else {
	    return true;
	}
}
// for check multipleSelect options end


function check_contain_words(from,input,contain_words) {
    var label=getAttrValue(input,"label",input.name);
	var msg=getAttrValue(input,"errorMsg",errorMsgs["must_contain"]);
    var value=getInputValue(input.name,"");
    
    if(value=="")return true;
	if(value.indexOf(contain_words) < 0){
	    show_error_msg(msg,new Array("#label#","#contain_words#"),new Array(label,contain_words));
	    return false;
	} else {
	    return true;
	}
}

//Olympus Custom start 
function check_empty_custom(form, input) {
    var label = getAttrValue(input, "label", input.name);
    var msg = getAttrValue(input, "errorMsg", errorMsgs["custom"]);
    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_custom(form, input) {
    var label = getAttrValue(input, "label", input.name);
    var msg = getAttrValue(input, "errorMsg", errorMsgs["invalid_format_custom"]);
    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_digits_custom(form, input) {
    var label = getAttrValue(input, "label", input.name);
    var msg = getAttrValue(input, "errorMsg", errorMsgs["custom"]);
    var disabled = getAttrValue(input, "disabled", input.name);
    var value = getInputValue(input, "");

    var check_value = !/[^\d]/.test(value);
    //alert(check_value);

    if (check_value == false && (disabled == false || disabled == input.name)) {
        show_error_msg(msg, new Array("#label#"), new Array(label));
        return false;
    } else {
        return true;
    }
}
//end