//************************************************/
//Powered by ECENCO.COM-Tech2  2009年2月24日星期二
//检测表单信息,用标签输出警告信息
//obj:要检测的对象
//alertContent:警告信息的设置	格式	text:输入警告文字; tag:标签名; color:原本颜色,警告颜色;
//								例子	text:验证码; tag:label; color:#e0e5ea,#ff9900;
//chkArr:要检测的类型,以逗号分隔	例子	null,min:4,max:16,en
//函数调用例子	chkInfo(this,'text:验证码; tag:label; color:#e0e5ea,#ff9900;','null');
//************************************************/
function chkInfo(obj,alertContent,chkArr){
	var alertTag	= alertContent.replace(/.*tag:(.[^:]*);.*/gi,"$1");
	var alertMsg	= alertContent.replace(/.*text:(.[^:]*);.*/gi,"$1");
	if(alertTag != "null"){
		//用标签输出错误时,给控件添加一个获得焦点时的事件
		if(obj.tagName == "INPUT" || obj.tagName == "SELECT" || obj.tagName == "TEXTAREA"){
			if(typeof(obj.onfocus) != "function"){
				if(document.all)
					obj.attachEvent("onfocus",function (){chkInfoClear(obj,alertContent);});
				else
					obj.addEventListener("focus",function (){chkInfoClear(obj,alertContent);},false);
			}
		}else{
			if(typeof(obj.onmouseover) != "function"){
				if(document.all)
					obj.attachEvent("onmouseover",function (){chkInfoClear(obj,alertContent);});
				else
					obj.addEventListener("mouseover",function (){chkInfoClear(obj,alertContent);},false);
			}
		}
	}
	var endStr = "！";
	var oldChkArr = chkArr;
	chkArr = chkArr.toLowerCase();
	
	//=============检测值是否为空=============//
	if(/null/.test(chkArr)){
		var nullType = (obj.type.indexOf("select") != -1) ? "选择" : "填写";
		obj.value = obj.value.replace(/^\s*|\s*$/gi,"");
		if(!obj.value.length)
			return chkInfoAlert(obj,"请" + nullType + alertMsg + endStr,alertContent);
	}else{
		if(!/false/.test(chkArr)){
			if(typeof(obj.value) == "undefined"){
				return true;
			}else{
				if(!obj.value.length)
					return true;
			}
		}
	}
	//=============检测账号=============//
	if(/username/.test(chkArr)){
		if(!/^[0-9a-zA-Z\._\u0391-\uFFE5]+$/.test(obj.value))
			return chkInfoAlert(obj,alertMsg + "含有非法字符" + endStr,alertContent);
	}
	//=============检测重复密码=============//
	if(/repassword/.test(chkArr)){
		var reObjName = oldChkArr.replace(/(.*repassword:)|(,.*)/g,"");
		var reObj = document.getElementsByName(reObjName)[0];
		if(obj.value != reObj.value)
			return chkInfoAlert(obj,"两次输入的密码不一致" + endStr,alertContent);
	}
	//=============检测最小值=============//
	if(/min/.test(chkArr)){
		var minVal = chkArr.replace(/(.*min:)|(,.*)/g,"");
		var minNum = fucCheckLength(obj.value);
		if(minNum < minVal)	//****(调用到外部函数fucCheckLength)****//
			return chkInfoAlert(obj,alertMsg + "不能小于" + minVal + "个字符，当前" + minNum + "字符" + endStr,alertContent);
	}
	//=============检测最大值=============//
	if(/max/.test(chkArr)){
		var maxVal = chkArr.replace(/(.*max:)|(,.*)/g,"");
		var maxNum = fucCheckLength(obj.value);
		if(maxNum > maxVal)	//****(调用到外部函数fucCheckLength)****//
			return chkInfoAlert(obj,alertMsg + "不能超过" + maxVal + "个字符，当前" + maxNum + "字符" + endStr,alertContent);
	}
	//=============检测长度=============//
	if(/len/.test(chkArr)){
		var lenVal = chkArr.replace(/(.*len:)|(,.*)/g,"");
		var lenNum = fucCheckLength(obj.value);
		if(lenNum != lenVal)	//****(调用到外部函数fucCheckLength)****//
			return chkInfoAlert(obj,alertMsg + "长度为" + lenVal + "个字符，当前" + lenNum + "字符" + endStr,alertContent);
	}
	//=============检测数字=============//
	if(/num/.test(chkArr)){
		if(!/^(((\+|-)?\d+(\.\d*)?)|((\+|-)?(\d*\.)?\d+))$/.test(obj.value))
			return chkInfoAlert(obj,alertMsg + "包含非数字字符" + endStr,alertContent);
	}
	//=============检测单精度=============//
	if(/integer/.test(chkArr)){
		if(!/^[-\+]?(([1-9]{1}\d*$)|(\d{1})){1}/.test(obj.value))
			return chkInfoAlert(obj,alertMsg + "不是单精度数字" + endStr,alertContent);
	}
	//=============检测双精度=============//
	if(/double/.test(chkArr)){
		if(!/^[-\+]?\d+(\.\d+)?$/.test(obj.value))
			return chkInfoAlert(obj,alertMsg + "不是双精度数字" + endStr,alertContent);
	}
	//=============检测英文=============//
	if(/\ben\b/.test(chkArr)){
		if(!/^[A-Za-z]+$/.test(obj.value))
			return chkInfoAlert(obj,alertMsg + "包含非英文字符" + endStr,alertContent);
	}
	//=============检测中文=============//
	if(/\bcn\b/.test(chkArr)){
		if(!/^[\u4E00-\u9FA5]+$/.test(obj.value))
			return chkInfoAlert(obj,alertMsg + "包含非中文字符" + endStr,alertContent);
	}
	//=============检测身份证号=============//
	if(/idcard/.test(chkArr)){
		if(!isIdCard(obj.value))	//****(调用到外部函数isIdCard)****//
			return chkInfoAlert(obj,alertMsg + "不正确" + endStr,alertContent);
	}
	//=============检测电话号码=============//
	if(/tel/.test(chkArr)){
		if(!/^((\(\d{3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}$/.test(obj.value))
			return chkInfoAlert(obj,alertMsg + "不正确" + endStr,alertContent);
	}
	//=============检测手机号码=============//
	if(/mobile/.test(chkArr)){
		if(!/^(130|131|132|133|153|134|135|136|137|138|139|150|158|159|188|189){1}\d{8}$/.test(obj.value))
			return chkInfoAlert(obj,alertMsg + "不正确" + endStr,alertContent);
	}
	//=============检测邮政编码=============//
	if(/zip/.test(chkArr)){
		if(!/^[1-9]\d{5}$/.test(obj.value))
			return chkInfoAlert(obj,alertMsg + "不正确" + endStr,alertContent);
	}
	//=============检测电子邮箱=============//
	if(/email/.test(chkArr)){
		if(!/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/.test(obj.value))
			return chkInfoAlert(obj,alertMsg + "不正确" + endStr,alertContent);
	}
	//=============检测日期=============//
	if(/date/.test(chkArr)){
		if(isDate(obj.value) == 0)	//****(调用到外部函数isDate)****//
			return chkInfoAlert(obj,alertMsg + "不正确" + endStr,alertContent);
	}
	//=============检测QQ=============//
	if(/qq/.test(chkArr)){
		if(!/^[1-9]\d{4,8}$/.test(obj.value))
			return chkInfoAlert(obj,alertMsg + "不正确" + endStr,alertContent);
	}
	//=============不检测,直接输出警告=============//
	if(/false/.test(chkArr))
		return chkInfoAlert(obj,alertMsg + endStr,alertContent);
	return true;
}
//************************************************/
//Powered by ECENCO.COM-Tech2  2009年2月24日星期二
//检测表单信息函数chkInfo所用的输出警告信息函数
//obj:要检测的对象
//alertMsg:警告的文字
//alertTagStyle:警告信息的设置
//************************************************/
function chkInfoAlert(obj,alertMsg,alertTagStyle){
	var alertTag	= alertTagStyle.replace(/.*tag:(.[^:]*);.*/gi,"$1");
	var alertColor	= alertTagStyle.replace(/.*color:.[^:]*,(.*);.*/gi,"$1");

	var alertDiv = "";
	if(/alertDiv/.test(alertTagStyle)){
		alertDiv	= alertTagStyle.replace(/.*alertDiv:(.[^:]*);.*/gi,"$1");
	}
	//如果不用标签输出错误,则用弹出警告框显示错误
	if(alertTag=="null"){
		alert(alertMsg);
		if(obj.style.display!="none" && obj.style.visibility!="hidden" && obj.type!="hidden"){obj.focus();}
		return false;
	}

	if(obj.type!="checkbox" && obj.type!="radio"){
		obj.style.borderLeft	= alertColor+" solid 1px";
		obj.style.borderTop		= alertColor+" solid 1px";
		obj.style.borderRight	= alertColor+" solid 1px";
		obj.style.borderBottom	= alertColor+" solid 1px";
	}

	var parentnode = (alertDiv != "") ? document.getElementById(alertDiv) : obj.parentNode;

	//var parentnode = obj.parentNode;
	var tag=parentnode.getElementsByTagName(alertTag);
	if(tag.length>0)	//如果标签不存在,则创建标签
		parentnode.removeChild(tag[0]);
	var createTag=document.createElement(alertTag);
	if(document.all)
		createTag.style.styleFloat	= "right";
	else
		createTag.style.cssFloat	= "right";
	createTag.style.width			= "100%";
	createTag.style.textIndent		= "3px";
	createTag.style.fontSize		= "12px";
	createTag.style.fontWeight		= "normal";
	createTag.style.color			= alertColor;
	createTag.innerHTML				= alertMsg;
	createTag.innerHTML				+= "<div style='position:absolute;'><div style='position:absolute;top:-50px;'><a id=\"focus_control_" + obj.id + "\" href=\"#focus_control_" + obj.id + "\"></a></div></div>";
	parentnode.appendChild(createTag);
	return false;
}
//************************************************/
//Powered by ECENCO.COM-Tech2  2009年2月24日星期二
//检测表单信息函数chkInfo所用的清除警告信息的函数
//obj:要检测的对象
//alertTagStyle:警告信息的设置
//************************************************/
function chkInfoClear(obj,alertTagStyle){
	var alertTag	= alertTagStyle.replace(/.*tag:(.[^:]*);.*/gi,"$1");
	var oldColor	= alertTagStyle.replace(/.*color:((.[^:]*),.*);.*/gi,"$2");

	var alertDiv = "";
	if(/alertDiv/.test(alertTagStyle)){
		alertDiv	= alertTagStyle.replace(/.*alertDiv:(.[^:]*);.*/gi,"$1");
	}
	
	if(obj.type!="checkbox" && obj.type!="radio"){
		obj.style.borderLeft	= oldColor+" solid 1px";
		obj.style.borderTop		= oldColor+" solid 1px";
		obj.style.borderRight	= oldColor+" solid 1px";
		obj.style.borderBottom	= oldColor+" solid 1px";
	}
	
	var parentnode = (alertDiv != "") ? document.getElementById(alertDiv) : obj.parentNode;
	//var parentnode=obj.parentNode;
	var tag=parentnode.getElementsByTagName(alertTag);
	if(tag.length>0){
		parentnode.removeChild(tag[0]);
	}
}
//函数名：fucCheckLength
//功能介绍：检查字符串的长度
//参数说明：要检查的字符串
//返回值：长度值

function fucCheckLength(strTemp){
	var i,sum;
	sum=0;
	for(i=0;i<strTemp.length;i++){
		if ((strTemp.charCodeAt(i)>=0) && (strTemp.charCodeAt(i)<=255))
			sum=sum+1;
		else
			sum=sum+2;
	}
	return sum;
}
//身份证
function isIdCard(number)
{
	var date, Ai;
	var verify = "10x98765432";
	var Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
	var area = ['','','','','','','','','','','','北京','天津','河北','山西','内蒙古','','','','','','辽宁','吉林','黑龙江','','','','','','','','上海','江苏','浙江','安微','福建','江西','山东','','','','河南','湖北','湖南','广东','广西','海南','','','','重庆','四川','贵州','云南','西藏','','','','','','','陕西','甘肃','青海','宁夏','新疆','','','','','','台湾','','','','','','','','','','香港','澳门','','','','','','','','','国外'];
	var re = number.match(/^(\d{2})\d{4}(((\d{2})(\d{2})(\d{2})(\d{3}))|((\d{4})(\d{2})(\d{2})(\d{3}[x\d])))$/i);
	if(re == null) return false;
	if(re[1] >= area.length || area[re[1]] == "") return false;
	if(re[2].length == 12){
		Ai = number.substr(0, 17);
		date = [re[9], re[10], re[11]].join("-");
	}
	else{
		Ai = number.substr(0, 6) + "19" + number.substr(6);
		date = ["19" + re[4], re[5], re[6]].join("-");
	}
	if(!isDate(date, "ymd")) return false;
	var sum = 0;
	for(var i = 0;i<=16;i++){
		sum += Ai.charAt(i) * Wi[i];
	}
	Ai +=  verify.charAt(sum%11);
	return (number.length ==15 || number.length == 18 && number == Ai);
}

//日期
function isDate(op, formatString)
{
	formatString = formatString || "ymd";
	var m, year, month, day;
	switch(formatString){
		case "ymd" :
			m = op.match(new RegExp("^((\\d{4})|(\\d{2}))([-./])(\\d{1,2})\\4(\\d{1,2})$"));
			if(m == null ) return false;
			day = m[6];
			month = m[5]*1;
			year =  (m[2].length == 4) ? m[2] : GetFullYear(parseInt(m[3], 10));
			break;
		case "dmy" :
			m = op.match(new RegExp("^(\\d{1,2})([-./])(\\d{1,2})\\2((\\d{4})|(\\d{2}))$"));
			if(m == null ) return false;
			day = m[1];
			month = m[3]*1;
			year = (m[5].length == 4) ? m[5] : GetFullYear(parseInt(m[6], 10));
			break;
		default :
			break;
	}
	if(!parseInt(month)) return false;
	month = month==0 ?12:month;
	var date = new Date(year, month-1, day);
	return (typeof(date) == "object" && year == date.getFullYear() && month == (date.getMonth()+1) && day == date.getDate())
	function GetFullYear(y){return ((y<30 ? "20" : "19") + y)|0;}
}
