/** Title:			CStringValidator.js
 *  Description:
 *		Validate String
 *  Copyright: 		www.trs.com.cn
 *  Company: 		TRS Info. Ltd.
 *  Author:			WSW
 *  Created:		2004-11-24
 *  Vesion:			1.0
 *  Last EditTime:	
 *	Update Logs:
 *		
 *	Note:
 *		
 *	Depends:
 *		CTRSReqeustParam.js
 *		CTRSHashtable.js
 *		CTRSAction.js
 *
 *	Examples:
 *			
 */

function CStringValidator(){
}

CStringValidator.inherits(CBaseValidator);
CStringValidator.registerMethod("validate",					CStringValidator_validate);
CStringValidator.registerMethod("validateStringMaxLength",  CStringValidator_validateStringMaxLength);
CStringValidator.registerMethod("validateStringMinLength",  CStringValidator_validateStringMinLength);
CStringValidator.registerMethod("validateEmail",			CStringValidator_validateEmail);
CStringValidator.registerMethod("validateUrl",			CStringValidator_validateUrl);
CStringValidator.registerMethod("validateIp",			CStringValidator_validateIp);
CStringValidator.registerMethod("validChar",			CStringValidator_validChar);
CStringValidator.registerMethod("validNumber",			CStringValidator_validNumber);
CStringValidator.registerMethod("validateDBKeyWords",		CStringValidator_validateDBKeyWords);
CStringValidator.registerMethod("validateSpecialCharacters",CStringValidator_validateSpecialCharacters);

function CStringValidator_validate(){
	if(this.oElement == null){
		this.oElement = arguments[0];
	}
	if(!this.superMethod("validate")){
		return false;
	}

	var bPassword = (this.oElement.type == "password");
	if(getValue(this.oElement,'min_len')){
		if(!this.validateStringMinLength(this.oElement, bPassword)){
			return false;
		}
	}
	if(getValue(this.oElement,'max_len')){
		if(!this.validateStringMaxLength(this.oElement, bPassword)){
			return false;
		}
	}
	
	if(getValue(this.oElement,'is_num'))
	{
		if(!this.validNumber(this.oElement.value)){
			return false;
		}
	}
	if(getValue(this.oElement,'is_char'))
	{
		if(!this.validChar(this.oElement.value)){
			return false;
		}
	}
	
	if(getValue(this.oElement,'is_url')){
		if(!this.validateUrl(this.oElement.value)){
			return false;
		}
	}
	if(getValue(this.oElement,'is_ip')){
		if(!this.validateIp(this.oElement.value)){
			return false;
		}
	}
	if(getValue(this.oElement,'is_email')){
		if(!this.validateEmail(this.oElement.value)){
			return false;
		}
	}
	if(getValue(this.oElement,'checkdbkeywords')){
		if(!this.validateDBKeyWords(this.oElement.value)){
			return false;
		}
	}
	
	/*
	if(!getValue(this.oElement,'special_char')) {
		if(this.validateSpecialCharacters(this.oElement.value, this.oElement)){
			return false;
		}
	}
	*/
	return true;
}

function CStringValidator_validateStringMaxLength(_oElement, _bPassword){
	var nMaxLen = getValue(_oElement,'max_len');
	if(isNaN(nMaxLen))return true;
	var sCode = TRSString.trim(_oElement.value);
	var nLen = TRSString.getStringLength(sCode);
	if(nLen==0)return true;

	if(nLen>parseInt(nMaxLen)){
		if(!_bPassword){
			this.sErrorInfo += (this.sErrorInfo.length>1?"\n\n":"")+"您輸入的["+_oElement.elname+"]長度大于最大長度 [" + nMaxLen + "]！"; //(注：每個漢字長度為2)
			return false;
		}
		this.sErrorInfo += (this.sErrorInfo.length>1?"\n\n":"")+"您輸入的密碼長度大于最大長度 [" + nMaxLen + "]！";
		return false;
	}
	return true; 
}


function CStringValidator_validateStringMinLength(_oElement, _bPassword){
	var nMinLen = getValue(_oElement,'min_len');
	if(isNaN(nMinLen))return true;
	var sCode = TRSString.trim(_oElement.value);
	var nLen = TRSString.getStringLength(sCode);

	if(nLen<parseInt(nMinLen)){
		if(!_bPassword){
			this.sErrorInfo += (this.sErrorInfo.length>1?"\n\n":"")+"您輸入的["+getValue(_oElement,'elname')+"]長度小于最小長度 [" + nMinLen + "]！";
			return false;
		}
		this.sErrorInfo += (this.sErrorInfo.length>1?"\n\n":"")+"您輸入的密碼長度小于最小長度 [" + nMinLen + "]！";
		return false;
	}
	return true; 
}

function CStringValidator_validNumber(_sCode){
	_sCode = _sCode.toString();
	var validChars = "0123456789";
	var startFrom = 0;
	for (var n = startFrom; n < _sCode.length; n++) {
		if (validChars.indexOf(_sCode.substring(n, n+1)) == -1){
			alert("您輸入的 ["+ _sCode + "] 不是一個數字！");
			return false;
		}
	}
	return true;
}

function CStringValidator_validChar(_sCode){
	_sCode = _sCode.toString();
	var validChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_0123456789";
	var startFrom = 0;
	for (var n = startFrom; n < _sCode.length; n++) {
		if (validChars.indexOf(_sCode.substring(n, n+1)) == -1){
			alert("您輸入的 ["+ _sCode + "] 不合法！");
			return false;
		}
	}
	return true;
}


function CStringValidator_validateEmail(_sCode){
	if(!TRSString.isEmailAddress(_sCode)){
		this.sErrorInfo += (this.sErrorInfo.length>1?"\n\n":"")+"無效Email地址！";
		return false;
	}
	return true;
}
function CStringValidator_validateUrl(_sCode){
	var   reg   =   /[http|https]:\/\/[\w]+\.[\w]+/i;
	if(!reg.test(_sCode))
	this.sErrorInfo += (this.sErrorInfo.length>1?"\n\n":"")+"無效URL地址！";
	return (reg.test(_sCode));
}
function CStringValidator_validateIp(_sCode){
	var   reg   =  	/(\d+)\.(\d+)\.(\d+)\.(\d+)/g;
	if(!reg.test(_sCode)) {
		this.sErrorInfo += (this.sErrorInfo.length>1?"\n\n":"")+"無效IP地址！";
		return false;
	}
	return true;
}
function CStringValidator_validateDBKeyWords(_sCode){
	var oTRSAction = new CTRSAction("../tools/check_string_is_dbkeywords.jsp");
	oTRSAction.setParameter("StrValue", TRSString.trim(_sCode));
	var sResult = oTRSAction.doXMLHttpAction();
	var bResult = (sResult=="true");
	if(bResult){
		this.sErrorInfo += (this.sErrorInfo.length>1?"\n\n":"")+"字符串 [" + _sCode + "] 屬于數據庫關鍵字，不能使用！";
	}
	return !bResult;
}

function CStringValidator_validateSpecialCharacters(_sCode,_oElement) {
	var sName = "字符串";
	if(_oElement != null) {
		sName = "[" + getValue(_oElement,'elname') + "]";
	}
	var sResult = CStringValidator_validateSpecialCharacters_def(_sCode);
	if(sResult==null) {
		return false;
	} else {
		this.sErrorInfo += (this.sErrorInfo.length>1?"\n\n":"")+"您輸入的"+sName+"包含禁用的特殊字符 ["+sResult+"]！";
		return true;
	}
}

function CStringValidator_validateSpecialCharacters_def(_sCode) {
	var regExp = /[<>\[\]{}#*%$%&^!~`\"\']/g;
	var sResult = _sCode.match(regExp)
	return sResult;
}