var forgetPassword = {
	checker: [
		{id:'f-email',checker:'isEmail'}
	],
	check: function(){
		if(checker(this.checker)){
			document.actForm.submit();
		}
	},
	reset: function(){
		reset(this.checker);
	}
}
var check_id = {
	checker: [
		{id:'f-hk_id',checker:'isHKid'}
	],
	check: function(){
		return checker(this.checker);
	},
	reset: function(){
		reset(this.checker);
	}
}
function checkForgetPassword(){
	var checkListForgetPassword = [
		{id:'f-email',checker:'isEmail'}
	];
	if(checker(checkListForgetPassword)){
		document.actForm.submit();
	}
}

function checkRegister(){
	var checkListRegister = [
		{id:'f-chiname',checker:'isNull'},
		{id:'f-engname',checker:'isNull'},
		{id:'f-sex',checker:'isChecked'},
		{id:'f-birthyear,f-birthmonth,f-birthday',checker:'isDate'},
		{id:'f-hkid',checker:'isHKid'},
		{id:'f-loginname',checker:'isNull,isUniqueLoginName'},
		{id:'f-email',checker:'isEmail,isUniqueEmail'},
		{id:'f-password',checker:'isNull,isBetween,isSame',isBetween:'6,20',isSame:'f-password_c'},
		{id:'f-password_c',checker:'isNull,isBetween,isSame',isBetween:'6,20',isSame:'f-password'},
		{id:'f-agree',checker:'isChecked'},
		{id:'f-using',checker:'isChecked'}
	];
	if(checker(checkListRegister)){
		document.actForm.submit();
	}
}

function checkAmend(){
	var checkListAmend = [
		{id:'f-chiname',checker:'isNull'},
		{id:'f-engname',checker:'isNull'},
		{id:'f-sex',checker:'isChecked'},
		{id:'f-birthyear,f-birthmonth,f-birthday',checker:'isDate'},
		{id:'f-email',checker:'isEmail'},
		{id:'f-password',checker:'isNullOrBetween,isSame',isNullOrBetween:'6,20',isSame:'f-password_c'},
		{id:'f-password_c',checker:'isNullOrBetween,isSame',isNullOrBetween:'6,20',isSame:'f-password'}
	];
	return checker(checkListAmend);
}

function checkRemind(){
	var checkListRemind = [
		{id:'f-chiname',checker:'isNull'},
		{id:'f-engname',checker:'isNull'},
		{id:'f-sex',checker:'isChecked'},
		{id:'f-birthyear,f-birthmonth,f-birthday',checker:'isDate'},
		{id:'f-hkid',checker:'isHKid'},
		{id:'f-email',checker:'isEmail'},
		{id:'f-telephone',checker:'isPhone'},
		{id:'f-mobilephone',checker:'isPhone'},
		{id:'f-location',checker:'isChecked'},
		{id:'f-address',checker:'isNull'},
		{id:'f-startyear,f-startmonth,f-startday',checker:'isDate'},
		{id:'f-agree',checker:'isChecked'}
	];
	if(checker(checkListRemind)){
		document.actForm.submit();
	}
}

function checkContactUs(){
	var checkListContactUs = [
		{id:'f-salutation',checker:'isSelected',isSelected:'!=0'},
		{id:'f-lname',checker:'isNull'},
		{id:'f-fname',checker:'isNull'},
		{id:'f-email',checker:'isEmail'},
		{id:'f-message',checker:'isNull,isLess',isLess:'2000'}
	];
	if(checker(checkListContactUs)){
		document.actForm.submit();
	}
}

jQuery.fn.trimval = function() {
	return jQuery(this).val().replace(/^\s+|\s+$/g,"");
};
jQuery.fn.isPhone = function() {
	var patt1 = new RegExp(/^(ext|x)*[0-9 \(\)\+\-]{8,20}$/i);
	return patt1.test(jQuery(this).trimval());
};
jQuery.fn.isEmail = function() {
	var patt1= new RegExp(/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i);
	return patt1.test(jQuery(this).trimval());
};
jQuery.fn.isHKid = function() {
	var patt1= new RegExp(/^[a-zA-Z][\d]{3}$/i);
	return patt1.test(jQuery(this).trimval());
};
jQuery.fn.isLess = function(value) {
	function checkLength(countMe) {
		var escapedStr = encodeURI(countMe)
		if (escapedStr.indexOf("%") != -1) {
			var count = escapedStr.split("%").length - 1
			if (count == 0) count++  //perverse case; can't happen with real UTF-8
			var tmp = escapedStr.length - (count * 3)
			count = count + tmp
		} else {
			count = escapedStr.length
		}
		return count;
	}
	return checkLength(jQuery(this).val())<=value;
};
jQuery.fn.isChecked = function(value) {
	return jQuery(this).length!=0;
};
jQuery.fn.isSelected = function(value) {
	return jQuery(this).length!=0;
};
jQuery.fn.isSame = function(value) {
	return (jQuery(this).val()==jQuery('#'+value).val());
};
jQuery.fn.isUniqueLoginName = function() {
	var result = true;
	jQuery.ajax({
		url: 'checkLoginNameOrEmail.asp',
		dataType: 'json',
		async: false,
		type: 'GET',
		cache: false,
		timeout: 10000,
		data: "check=n&name=" + jQuery(this).val(),
		success: function(json){
			result = json.data;
			if(! result){
				msg2user.push(msg.isUniqueLoginName);
			}
		}
	});
	return result;
};
jQuery.fn.isUniqueEmail = function() {
	var result = true;
	jQuery.ajax({
		url: 'checkLoginNameOrEmail.asp',
		dataType: 'json',
		async: false,
		type: 'GET',
		cache: false,
		timeout: 10000,
		data: "check=e&name=" + jQuery(this).val(),
		success: function(json){
			result = json.data;
			if(! result){
				msg2user.push(msg.isUniqueEmail);
			}
		}
	});
	return result;
};
jQuery.fn.isBetween = function(from_to_string, tempAdd){
	var temp = from_to_string.split(',');
	var from = temp[0];
	var to = temp[1];
	temp = eval("jQuery(this).val()"+tempAdd);
	return (temp>=from && temp<=to);
};
jQuery.fn.isDate = function() {
	var result = true;
	var dateStr = '';
	jQuery(this).each(function(){
		dateStr += jQuery(this).val() + '-';
	});
	dateStr = dateStr.replace(/-$/,'');
	var filter = /^\d{4}-\d{1,2}-\d{1,2}$/;
	if(! filter.test(dateStr)){
		return false;
	}
	var spliter = dateStr.split("-");
	var today = new Date();
	var submitDay = new Date();
	submitDay.setFullYear(spliter[0],(spliter[1]-1),spliter[2]);
	var submitDayStr = submitDay.getFullYear()+"-"+(submitDay.getMonth()+1)+"-"+submitDay.getDate();
	return (dateStr.replace(/-0/g,'-')==submitDayStr);
};
function repeatX(str,supp,length){
	var result="";
	for(var counter=0;counter<=length;counter++){
		result += supp;
	}
	result += str;
	return result.substr(result.length-length,length);
}

function reset(checkList){
	$('#errMsg').remove();
	$('#servermsg2user').remove();
	for(x in checkList){
		me = checkList[x];
		tempId = me.id.split(',');
		for(x in tempId){
			$('[name="'+tempId[x].replace('f-','')+'"], label[for="'+tempId[x]+'"]').removeClass('invalid');
		}
	}
}

var msg2user = new Array();
function checker(checkList){
	var me,myPass,$me,tempId;
	var myChecker = '';
	var allPassed = true;
	msg2user = new Array();
	msg2user.push(msg.fill_marked);
	reset(checkList);
	try{
		for(x in checkList){
			myPass = true;
			me = checkList[x];
			if(me.id.search(',')==-1){
				$me = $('[name="'+me.id.replace('f-','')+'"]');
				myChecker = me.checker.split(',');
				for(y in myChecker){
					switch(myChecker[y]){
						case 'isNull':
							myPass &= ($me.trimval()!='');
							break;
						case 'isSame':
						case 'isLess':
							myPass &= eval('$me.'+myChecker[y]+'("'+eval('me.'+myChecker[y]+'')+'")');
							break;
						case 'isNullOrBetween':
							if($me.trimval()==''){
								myPass &= true;
							}else{
								myPass &= eval('$me.isBetween("'+eval('me.'+myChecker[y]+'')+'",".length")');
							}
							break;
						case 'isBetween':
							myPass &= eval('$me.'+myChecker[y]+'("'+eval('me.'+myChecker[y]+'')+'",".length")');
							break;
						case 'isChecked':
							$me = $('[name="'+me.id.replace('f-','')+'"]:checked');
							myPass &= eval('$me.'+myChecker[y]+'()');
							break;
						case 'isSelected':
							if(eval('me.'+myChecker[y])){
								$me = $('[name="'+me.id.replace('f-','')+'"] option:selected').val();
								myPass &= eval("'"+$me+"'"+eval('me.'+myChecker[y]))
							}else{
								$me = $('[name="'+me.id.replace('f-','')+'"]:selected');
								myPass &= eval('$me.'+myChecker[y]+'()');
							}
							break;
						default:
							myPass &= eval('$me.'+myChecker[y]+'()');
							break;
					}
				}
				if(! myPass){
					allPassed = false;
					$('#'+me.id+', label[for="'+me.id+'"]').addClass('invalid');
				}
			}else{
				myChecker = me.checker.split(',');
				for(y in myChecker){
					switch(myChecker[y]){
						case 'isDate':
						case 'isBirthDate':
							$me = $('#'+me.id.replace(/,/g,',#'));
							myPass &= eval('$me.'+myChecker[y]+'()');
							break;
						default:
							break;
					}
				}
				if(! myPass){
					allPassed = false;
					$('#'+me.id.replace(/,/g,',#')+', label[for="'+me.id.replace(/,/g,'"],for=["')+'"]').addClass('invalid');
				}
			}
		}
	}catch(e){
		alert(checkList[x].id+'\r\n'+e);
	}
	if(! allPassed){
		msg2user = $('<span style="display:none;">'+msg2user.join('jsjsjsjs')+'</span>').text().replace(/jsjsjsjs/g, '<br />');
		$('#errMsgDiv').append('<p id="errMsg" class="invalid">'+msg2user+'</p>')
	}
	return allPassed;
}
