/** Title:			CTRSValidator.js
 *  Description:
 *		Controller of TRSVlidators
 *  Copyright: 		www.trs.com.cn
 *  Company: 		TRS Info. Ltd.
 *  Author:			WSW
 *  Created:		2004-11-23
 *  Vesion:			1.0
 *  Last EditTime:	2004-11-23
 *	Update Logs:
 *		WSW@2004-11-23 Created File
 *	Note:
 *		
 *
 *	Depends:
 *		TRSBase.js
 *		CTRSString.js
 *
 */
var DEBUG = false;

function CTRSValidator_validate(_oForm){
	
	this.sErrorInfo = "";
	var thisForm = _oForm;
	if(thisForm == null){
		thisForm = window.event.srcElement;
	}
	if(thisForm==null)return false;

	var arEls = thisForm.elements;//get All data from the form
	var oValidator = null;//predefined validator object
	var bValid = true;//is Valid

	for(var i = 0;i<arEls.length;i++){			
		if (DEBUG) {
			alert(i + ", " + arEls[i].name);
			alert(arEls[i]);
			alert(arEls[i].getAttribute('pattern'));
			alert(arEls[i].innerText);
		}
		oValidator = this.getValidator(arEls[i]);
		if(oValidator == null)
			continue;
		if(!oValidator.validate()){
			bValid = false;
			this.sErrorInfo += oValidator.sErrorInfo;
		}
	}
	if(!bValid){
		alert(this.sErrorInfo);//display error info
		return bValid;
	}
	return bValid;
}

function CTRSValidator_addValidators(_sPattern, _sObjectName, _sSrcFile){
	if(_sObjectName == null || _sObjectName.length == 0)return;
	if(_sPattern == null	|| _sPattern.length == 0)return;
	if(_sSrcFile == null	|| _sSrcFile.length == 0)return;
	
	_sPattern = _sPattern.toLowerCase();

	this.TRSValidators[_sPattern] = _sObjectName;
	this.TRSValidatorFiles[_sPattern] = _sSrcFile;	
	document.write("<script src=\""+_sSrcFile+"\"></script>");
}

function CTRSValidator_getValidator(_oElement){
	var sPattern = null;
	// ls@2006-08-14 for httpunit test: httpunit DOM not define getAttribute() function!
	try {
		sPattern = _oElement.getAttribute('pattern');	
	} catch (e) {
		alert("fail to getValidator! err=" + e);
	}
	
	if (sPattern == null) {
		return null;
	}

	var oValidator = this.TRSValidators[sPattern.toLowerCase()];
	if(oValidator == null)
		return null;

	if(typeof(oValidator) != "string"){
		oValidator.setElement(_oElement);
		return oValidator;
	}

	try{
		oValidator = eval("new "+oValidator+"();");	
		oValidator.setElement(_oElement);
	}catch(e){
		alert(e);
		alert("没有找到必须的源文件 ["+this.TRSValidatorFiles[sPattern]+"]\nlocation:" + location);
//		alert("没有找到必须的源文件 ["+this.TRSValidatorFiles[sPattern]+"]");
		//return null;
	}
	this.TRSValidators[sPattern] = oValidator;
	return oValidator;	
	
}

//Define TRSValidator Controller Object
function CTRSValidator(){
	this.sErrorInfo = "";
	this.TRSValidators = {};
	this.TRSValidatorFiles = {};
}

CTRSValidator.registerMethod('validate', CTRSValidator_validate);
CTRSValidator.registerMethod('addValidators', CTRSValidator_addValidators);
CTRSValidator.registerMethod('getValidator', CTRSValidator_getValidator);

//define an TRSValidator Controller Object
var TRSValidator  = new CTRSValidator();