/*******************************************
 Validator v1.0
 cody by Mascot.Leo
 featherheaven@gmail.com
 http://hi.baidu.com/rockofages
 ********************************************/
/*******************************************
 * checkItem, 检查项目
 * checkType, 检查类型
 * msgID, 错误信息显示控件(span)ID
 * msgPass, 验证成功提示信息
 * msgErr, 验证失败提示信息
 * msgPassColor, 验证成功字体颜色
 * msgErrColor  验证失败字体颜色
 ********************************************/


var Validator = {
	userName : /^[a-zA-Z\u4e00-\u9fa5]{1}([a-zA-Z0-9]|[_]|[\u4e00-\u9fa5]){1,15}$/,
	email : /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/,
	url : /^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/,
	zip : /^[1-9]\d{5}$/,
	qq : /^[1-9]\d{4,20}$/,
	idCard : /^\d{15}(\d{2}[A-Za-z0-9])?$/,
	number : /^\d+$/,
	olive : /^(([1-9]\d*)(\.\d{1,2})|(0\.\d{1,2})|(\d*))$/,
	formItems:[],
//搜索项目是否被验证过
	itemCheckSearch:function(checkID)
	{
		for (var loop = 0; loop < this.formItems.length; loop++)
		{
			if (this.formItems[loop].checkedID == checkID)
			{
				loop++;
				return loop;
			}
		}
		return false;
	},
	updateFormItems:function(itemID, msgID, msgCont, isPassed)
	{
		var recordLine;
		if (recordLine = Validator.itemCheckSearch(itemID))
		{
			recordLine--;
			this.formItems[recordLine].showMsgID = msgID;
			this.formItems[recordLine].showMsgCont = msgCont;
			this.formItems[recordLine].isPassed = isPassed;
			return true;
		}else
		{
			return false;
		}
	},
//	正则验证-基础类
	validateRegular : function(checkItem, checkType)
	{
		if (!Validator.itemCheckSearch(checkItem.id))
		{
			var formItem = new formMessage();
			formItem.checkedID = checkItem.id;
			this.formItems.push(formItem);
		}
		if (this[checkType].test(checkItem.value))
		{
			return true;
		}
		else
		{
			return false;
		}
	},
//	正则验证-返回通过和错误信息
	validateRegularWithMsg : function(checkItem, checkType, msgID, msgPass, msgErr)
	{
		if (this.validateRegular(checkItem, checkType))
		{
			Validator.updateFormItems(checkItem.id, msgID, msgPass, true);
			document.getElementById(msgID).innerHTML = msgPass;
			return true;
		}
		else
		{
			Validator.updateFormItems(checkItem.id, msgID, msgErr, false);
			document.getElementById(msgID).innerHTML = msgErr;
			return false;
		}
	},
//	正则验证-返回通过和错误信息及字体颜色
	validateRegularWithMsgColor : function(checkItem, checkType, msgID, msgPass, msgErr, msgPassColor, msgErrColor)
	{
		if (this.validateRegularWithMsg(checkItem, checkType, msgID, msgPass, msgErr))
		{
			document.getElementById(msgID).style.color = msgPassColor;
			return true;
		}
		else
		{
			document.getElementById(msgID).style.color = msgErrColor;
			return false;
		}
	},
//	正则验证-返回通过和错误信息及Css式样
	validateRegularWithMsgCss : function(checkItem, checkType, msgID, msgPass, msgErr, msgPassCss, msgErrCss)
	{
		if (this.validateRegularWithMsg(checkItem, checkType, msgID, msgPass, msgErr))
		{
			document.getElementById(msgID).className = msgPassCss;
			return true;
		}
		else
		{
			document.getElementById(msgID).className = msgErrCss;
			return false;
		}
	},
//	长度验证-基础类
	validateLength : function(checkItem, minL, maxL)
	{
		if (!Validator.itemCheckSearch(checkItem.id))
		{
			var formItem = new formMessage();
			formItem.checkedID = checkItem.id;
			this.formItems.push(formItem);
		}
		if (checkItem.value.replace(/[\u4e00-\u9fa5]/g, '**').length > maxL || checkItem.value.replace(/[\u4e00-\u9fa5]/g, '**').length < minL)
		{
			return false;
		}
		else
		{
			return true;
		}

	},
//  长度验证-返回通过和错误信息
	validateLengthMsg : function(checkItem, msgID, msgPass, msgErr, minL, maxL)
	{
		if (this.validateLength(checkItem, minL, maxL))
		{
			Validator.updateFormItems(checkItem.id, msgID, msgPass, true);
			document.getElementById(msgID).innerHTML = msgPass;
			return true;
		}
		else
		{
			Validator.updateFormItems(checkItem.id, msgID, msgErr, false);
			document.getElementById(msgID).innerHTML = msgErr;
			return false;
		}
	},
//  长度验证-返回通过和错误信息及字体颜色
	validateLenthMsgColor :function(checkItem, msgID, msgPass, msgErr, msgPassColor, msgErrColor, mimL, maxL)
	{
		if (this.validateLengthMsg(checkItem, msgID, msgPass, msgErr, mimL, maxL))
		{
			document.getElementById(msgID).style.color = msgPassColor;
			return true;
		}
		else
		{
			document.getElementById(msgID).style.color = msgErrColor;
			return false;
		}
	},
//  长度验证-返回通过和错误信息及Css式样
	validateLenthMsgCss :function(checkItem, msgID, msgPass, msgErr, msgPassCss, msgErrCss, minL, maxL)
	{
		if (this.validateLengthMsg(checkItem, msgID, msgPass, msgErr, minL, maxL))
		{
			document.getElementById(msgID).className = msgPassCss;
			return true;
		}
		else
		{
			document.getElementById(msgID).className = msgErrCss;
			return false;
		}
	},
//  与另一控件匹配验证-基础类
	validateDuplicate : function(checkItem,withItemID)
	{
		if (!Validator.itemCheckSearch(checkItem.id))
		{
			var formItem = new formMessage();
			formItem.checkedID = checkItem.id;
			this.formItems.push(formItem);
		}
		if (checkItem.value == document.getElementById(withItemID).value)
		{
			Validator.updateFormItems(checkItem.id, '', '', true);
			return true;
		}
		else
		{
			Validator.updateFormItems(checkItem.id, '', '', false);
			return false;
		}
	},

//  与另一控件匹配验证-返回通过和错误信息及字体颜色
	validateDuplicateMsg : function(checkItem, withItemID, msgID, msgPass, msgErr)
	{
		if (this.validateDuplicate(checkItem, withItemID))
		{
			Validator.updateFormItems(checkItem.id, msgID, msgPass, true);
			document.getElementById(msgID).innerHTML = msgPass;
			return true;
		}
		else
		{
			Validator.updateFormItems(checkItem.id, msgID, msgErr, false);
			document.getElementById(msgID).innerHTML = msgErr;
			return false;
		}
	},
	validateDuplicateMsgColor : function(checkItem, withItemID, msgID, msgPass, msgErr, msgPassColor, msgErrColor)
	{
		if (this.validateDuplicateMsg(checkItem, withItemID, msgID, msgPass, msgErr))
		{
			document.getElementById(msgID).innerHTML = msgPass;
			document.getElementById(msgID).style.color = msgPassColor;
			return true;
		}
		else
		{
			document.getElementById(msgID).innerHTML = msgErr;
			document.getElementById(msgID).style.color = msgErrColor;
			return false;
		}
	},
//  与另一控件匹配验证-返回通过和错误信息及Css式样
	validateDuplicateMsgCss : function(checkItem, withItemID, msgID, msgPass, msgErr, msgPassCss, msgErrCss)
	{
		if (this.validateDuplicateMsg(checkItem, withItemID, msgID, msgPass, msgErr))
		{
			document.getElementById(msgID).innerHTML = msgPass;
			document.getElementById(msgID).className = msgPassCss;
			return true;
		}
		else
		{
			document.getElementById(msgID).innerHTML = msgErr;
			document.getElementById(msgID).className = msgErrCss;
			return false;
		}
	},
//  正则及长度验证-返回通过和错误信息及字体颜色
	validateRegularWithMsgColorLength : function(checkItem, checkType, msgID, msgPass, msgErr, msgPassColor, msgErrColor, minL, maxL)
	{
		if (this.validateLength(checkItem, minL, maxL))
		{
			document.getElementById(msgID).style.color = msgPassColor;
			if (this.validateRegularWithMsgColor(checkItem, checkType, msgID, msgPass, msgErr, msgPassColor, msgErrColor))
			{
				return true;
			}
			else
			{
				return false;
			}
		}
		else
		{
			document.getElementById(msgID).style.color = msgErrColor;
			document.getElementById(msgID).innerHTML = msgErr;
			return false;
		}
	},
// 正则及长度验证-返回通过和错误信息及Css样式
	validateRegularWithMsgCssLength : function(checkItem, checkType, msgID, msgPass, msgErr, msgPassCss, msgErrCss, minL, maxL)
	{
		if (this.validateLenthMsgCss(checkItem, msgID, msgPass, msgErr, msgPassCss, msgErrCss, minL, maxL))
		{
			this.validateRegularWithMsgCss(checkItem, checkType, msgID, msgPass, msgErr, msgPassCss, msgErrCss);
			return true;
		}
		else
		{
			return false;
		}
	}
};
function formMessage()
{
	var checkedID;
	var showMsgID;
	var isPassed;
	var showMsgCont;
	this.checkedID = checkedID;
	this.showMsgID = showMsgID;
	this.isPassed = isPassed;
	this.showMsgCont = showMsgCont;
}
