function AccountValidator() {
	this.patternMaestroID = /^[A-Za-z가-힣]{1}[A-Za-z0-9가-힣]{3,19}$/;
	this.patternMaestroPW = /^[A-Za-z0-9]{4,16}$/;

	this.patternPlayerID = /^[A-Za-z0-9가-힣-_]{1,8}$/;
	this.patternPlayerPW = /^[0-9]{2,8}$/;

	this.patternLicenseTimerPW = /^[0-9]{2,8}$/;

	this.patternEmailAddress = /([a-zA-Z0-9]+)([+\_\.\-{1}])?([a-zA-Z0-9]+)\@([a-zA-Z0-9]+)([\.])([a-zA-Z\.]+)/;
}


// maestro ID
AccountValidator.prototype.isValidMaestroID = function(textID) {
	if(!this.patternMaestroID.test(textID))
		return false;

	return true;
}

AccountValidator.prototype.messageForInvalidMaestroID = function(textID) {
	if(textID.length < AccountValidator.MAESTRO_ID_LENGTH_MINIMUM)
		return "마에스트로 계정명은 " + AccountValidator.MAESTRO_ID_LENGTH_MINIMUM + "글자 이상이어야 합니다.";
	else if(textID.length > AccountValidator.MAESTRO_ID_LENGTH_MAXIMUM)
		return "마에스트로 계정명은 " + AccountValidator.MAESTRO_ID_LENGTH_MAXIMUM + "글자 이하이어야 합니다.";
	else if(!(/^[A-Za-z]/.test(textID)))
		return "마에스트로 계정명은 알파벳으로 시작해야 합니다.";
	else if((/[^\w]/g).test(textID))
		return "마에스트로 계정명은 알파벳과 숫자로만 적어주세요.";
}


// maestro password
AccountValidator.prototype.isValidMaestroPW = function(textPW) {
	if(!this.patternMaestroPW.test(textPW))
		return false;

	return true;
}

AccountValidator.prototype.messageForInvalidMaestroPW = function(textPW) {
	if(textPW.length < AccountValidator.MAESTRO_PW_LENGTH_MINIMUM)
		return "마에스트로의 암호는 " + AccountValidator.MAESTRO_PW_LENGTH_MINIMUM + "글자 이상이어야 합니다.";
	else if(textPW.length > AccountValidator.MAESTRO_PW_LENGTH_MAXIMUM)
		return "마에스트로의 암호는 " + AccountValidator.MAESTRO_PW_LENGTH_MAXIMUM + "글자 이하이어야 합니다.";
	else if((/[^\w]/g).test(textPW))
		return "마에스트로의 암호는 알파벳과 숫자로만 적어주세요.";
	else
		return "???";
}


// player ID
AccountValidator.prototype.isValidPlayerID = function(textID) {
	if(!this.patternPlayerID.test(textID))
		return false;

	return true;
}

AccountValidator.prototype.messageForInvalidPlayerID = function(textID) {
	if(typeof textID == "undefined" || textID == null || textID == "")
		return "학생 이름을 입력해 주세요.";
	else if(textID.length < Number(AccountValidator.Player_ID_LENGTH_MINIMUM))
		return "학생 이름은 " + AccountValidator.Player_ID_LENGTH_MINIMUM + "글자 이상이어야 합니다.";
	else if(textID.length > Number(AccountValidator.PLAYER_ID_LENGTH_MAXIMUM))
		return "학생 이름은 " + AccountValidator.PLAYER_ID_LENGTH_MAXIMUM + "글자 이하이어야 합니다.";
	else // if((/[^A-Za-z0-9가-힣-_]/g).test(textID))
		return "학생 이름 입력 가능한 문자는 [ 한글, 알파벳, 숫자, -, _ ] 입니다.";
}


// player password
AccountValidator.prototype.isValidPlayerPW = function(textPW) {
	if(!this.patternPlayerPW.test(textPW))
		return false;

	return true;
}

AccountValidator.prototype.messageForInvalidPlayerPW = function(textPW) {
	if(typeof textPW == "undefined" || textPW == null || textPW == "")
		return "학생 입장 번호를 입력해 주세요.";
	else if(textPW.length < Number(AccountValidator.PLAYER_PW_LENGTH_MINIMUM))
		return "학생 입장 번호는 " + AccountValidator.PLAYER_PW_LENGTH_MINIMUM + "자리 이상의 숫자로 입력해 주세요.";
	else if(textPW.length > Number(AccountValidator.PLAYER_PW_LENGTH_MAXIMUM))
		return "학생 입장 번호는 " + AccountValidator.PLAYER_PW_LENGTH_MAXIMUM + "자리 이하의 숫자로 입력해 주세요.";
	else
		return "학생 입장 번호는 2~8자리 숫자로 입력해 주세요.";
}


// license timer maestro password
AccountValidator.prototype.isValidLicenseTimerPassword = function(textID) {
	if(!this.patternLicenseTimerPW.test(textID))
		return false;

	return true;
}

AccountValidator.prototype.messageForInvalidLicenseTimerPassword = function(textID) {
	if(textID.length < AccountValidator.LICENSE_TIMER_PW_LENGTH_MINIMUM)
		return "자격증 타이머의 비밀번호는 " + AccountValidator.LICENSE_TIMER_PW_LENGTH_MINIMUM + "글자 이상이어야 합니다.";
	else if(textID.length > AccountValidator.LICENSE_TIMER_PW_LENGTH_MAXIMUM)
		return "자격증 타이머의 비밀번호는 " + AccountValidator.LICENSE_TIMER_PW_LENGTH_MAXIMUM + "글자 이하이어야 합니다.";
	else
		return "자격증 타이머의 비밀번호는 2~8자리 숫자로 입력해 주세요.";
}


// email ID
AccountValidator.prototype.isValidEmailAddress = function(email) {
	if(!this.patternEmailAddress.test(email))
		return false;

	return true;
}

AccountValidator.prototype.messageForInvalidEmailAddress = function(email) {
	return "유효하지 않은 이메일 주소입니다. 올바른 이메일 주소를 입력해주세요.";
}




AccountValidator.MAESTRO_ID_LENGTH_MINIMUM		= 4;
AccountValidator.MAESTRO_ID_LENGTH_MAXIMUM		= 20;

AccountValidator.MAESTRO_PW_LENGTH_MINIMUM		= 4;
AccountValidator.MAESTRO_PW_LENGTH_MAXIMUM		= 16;


AccountValidator.PLAYER_ID_LENGTH_MINIMUM		= 1;
AccountValidator.PLAYER_ID_LENGTH_MAXIMUM		= 8;

AccountValidator.PLAYER_PW_LENGTH_MINIMUM		= 2;
AccountValidator.PLAYER_PW_LENGTH_MAXIMUM		= 8;

AccountValidator.LICENSE_TIMER_PW_LENGTH_MINIMUM		= 2;
AccountValidator.LICENSE_TIMER_PW_LENGTH_MAXIMUM		= 8;