
/**
 * 单表单项验证函数
 * 
 * @param fieldObject 表单项对象
 * @param showType 提示样式
 */
function validateBlur(fieldObject, showType) {
	if (fieldObject.alt != null && fieldObject.alt != "" && fieldObject.alt.indexOf("validation") != -1) {
		var validationTypes = fieldObject.alt.split(":")[1].split(";");
		for (var j = 0;j < validationTypes.length;j++) {
			var methodName = validationTypes[j];
			var params = null;
			if (methodName.indexOf("(") != -1) {
				params = str2Param(methodName.substring(methodName.indexOf("("), methodName.length));
				methodName = methodName.substring(0, methodName.indexOf("("));
			}
			var validationMethod = ValidationFactory.prototype.getMethod(methodName);
			if (params != null && params.length > 0) {
				validationMethod.setParams(params);
			}
			if (validationMethod != null && !validationMethod.validate(fieldObject)) {
				// 错误提示
				ValidationFactory.prototype.showErr(validationMethod.getErrMsg(), fieldObject, showType);
				return false;
			}
		}
	}
	return true;
}

var submitBtn;

/**
 * 整个表单验证函数
 *
 * @param formObject 表单Document对象
 * @param showType 提示样式
 */
function validate(formObject, showType) {
	var btn = document.getElementById("submitBtn");
	return validate2(formObject, showType, btn);
}

function validate2(formObject, showType, btn) {
	//clearNoticeArea(showType);
	//var returnValue = true;
	if (typeof(formObject) == "object") {
		var elementsLength = formObject.length;
		//alert(elementsLength);
		for (var i = 0;i < elementsLength;i++) {
			var fieldObject = formObject.elements[i];
			if (fieldObject.className == "inputTextError") {
				fieldObject.className = "";
			}
			if (!fieldObject.disabled && !validateBlur(fieldObject, showType)) {
				return false;
			}
		}
	}
	if (btn != null) {
		submitBtn = btn;
		btn.disabled = true;
	}
	return true;
}

/**
 * 从字符串 (param1,param2,param3...) 取得参数数组
 */
function str2Param(str) {
	// (param1,param2,param3...) --> param1,param2,param3...
	str = str.substring(1, str.length - 1);
	// split str
	var params = str.split(",");
	return params;
}

/**
 * 验证方法工厂
 */
function ValidationFactory() {
}

//验证方法集合
ValidationFactory.prototype.methods = new ArrayList();

//获得验证方法
ValidationFactory.prototype.getMethod = function(methodName) {
	for (var i = 0;i < ValidationFactory.prototype.methods.size();i++) {
		var method = ValidationFactory.prototype.methods.get(i);
		if (method.getMethodName() == methodName) {
			return method;
		}
	}
}

//信息提示
ValidationFactory.prototype.showErr = function(errMsg, fieldObject, showType) {
	if (showType == null || showType == "alert") {
		//默认alert方式
		alert(errMsg);
		if (fieldObject.style.display != "none") {
			fieldObject.focus();
		}
	}

	if (showType == "msg") {
		showMsg(errMsg, fieldObject);
	}
}

//增加验证方法
ValidationFactory.prototype.addMethod = function(validationMethod) {
	ValidationFactory.prototype.methods.add(validationMethod);
}

/**
 * 验证方法
 */
function ValidationMethod() {
	
	this.params = null;
	
	/**
	 * 验证某表单项
	 *
	 * @param fieldObject 表单项对象
	 */
	this.validate = function(fieldObject) {	
	}
	
	/**
	 * 得到错误提示信息
	 */
	this.getErrMsg = function() {
		return this.errMsg;
	}
	
	/**
	 * 验证方法别名
	 */
	this.getMethodName = function() {
		return this.methodName;
	}
	
	/**
	 * 验证参数
	 */
	this.setParams = function(params) {
		this.params = params;
	}
}