/*
 * Form输入校验
 *
 * A>使用方法
 * 1.Form的id作为fc_form_check函数的参数
 *     例:<form name="f1" id="f1" onsubmit="return fc_form_check('f1');">
 * 2.输入框的写法
 *     1>输入框的id必须以Form的id开头
 *     2>alt写法:_特征串1_特征串2_..._@{最大字节长度}_输入框标签,特征串见 B 2,输入框标签供界面提示使用,最大字节长度:汉字和全角字符算2个字节
 *         例如:<input type="text" id="f1_t9" alt="_nem_int_@3_年龄">
 *	   3>对于Texaarea等组件,Firefox不支持其alt属性可把alt串附加在其id后面
 *		   例如:<textarea id="f1_ta1_nem_nht_@4000_文本域" alt="_nem_nht_@4000_文本域"></textarea>
 *
 * B>校验功能
 * 1.基本校验，所有的输入框都做基本校验
 *     1>不含字符 \' \"
 * 2.根据ALT的值进行输入校验(可选)
 *     1>nem		非空串
 *     2>nht		空串 或 不含HTML代码的串
 *     3>com		空串 或 普通串[0-9|a-z|A-Z|_|-]
 *	   4>chn		空串 或 汉字字符串
 *	   5>idn		空串 或 (国内)身份证号码
 *	   6>mob		空串 或 (国内)手机号码
 *	   7>xlt		空串 或 (国内)小灵通号码  
 *     8>flo		空串 或 正小数(整数也是合法的小数)
 *     9>int		空串 或 正整数
 *     10>aflo		空串 或 小数(整数也是合法的小数)(无论正、负)
 *     11>aint		空串 或 整数(无论正、负)
 *	   12>mob|xlt	空串 或 (国内)手机号码 或 (国内)小灵通号码
 *	   13>以上特征串可组合使用
 */
 
//校验Form
function fc_form_check(form_obj_id) {
	var res = true;
	var formObj = document.getElementById(form_obj_id);
	var textObjs = document.getElementsByTagName("input");
	for (var i=0; i<textObjs.length; i++) {
		if (textObjs[i].id.substring(0,form_obj_id.length) == form_obj_id) {
			res = res && fc_text_check(textObjs[i]);
		}
	}
	var textareaObjs = document.getElementsByTagName("textarea");
	for (var i=0; i<textareaObjs.length; i++) {
		if (textareaObjs[i].id.substring(0,form_obj_id.length) == form_obj_id) {
			res = res && fc_text_check(textareaObjs[i]);
		}
	}
	
	return res;
}

//校验input
function fc_text_check(textObj) {
	var res = true;
	var altStr = "";
	var objName = "";
	var bLength = 0;
	
	if(textObj.alt && textObj.alt != "") {	
		altStr = textObj.alt.toLowerCase();
	} else {
		altStr = textObj.id.toLowerCase();		
	}
	objName = altStr.substring(altStr.lastIndexOf("_") + 1,altStr.length);
	if (altStr.indexOf("@") != -1) {
		try {
			bLength = parseInt(altStr.substring(altStr.indexOf("@") + 1,altStr.indexOf("_",altStr.indexOf("@") + 1)));
		} catch (E) {
			bLength = 0;
		}
	}

	if (!fc_text_empty(objName)) {
		objName = objName + ":";
	}
	
	if (!fc_text_base(textObj.value)) {
		alert(objName + "含有非法字符!");
		textObj.select();
		return false;
	}
	
	if (bLength > 0 && fc_getBLength(textObj.value) > bLength) {
		alert(objName + "输入值过长!");
		textObj.select();
		return false;
	}	
	
	if (altStr && altStr != "") {
		if (altStr.indexOf("_nem_") != -1) {
			if (fc_text_empty(textObj.value)) {
				alert(objName + "不允许为空!");
				textObj.select();
				return false;
			}
		}
		if (altStr.indexOf("_nht_") != -1) {
			if (!fc_text_noHtml(textObj.value)) {
				alert(objName + "含有非法字符!");
				textObj.select();
				return false;
			}
		}
		if (altStr.indexOf("_com_") != -1) {
			if (!fc_text_common(textObj.value)) {
				alert(objName + "含有非法字符!");
				textObj.select();
				return false;
			}
		}
		if (altStr.indexOf("_chn_") != -1) {
			if (!fc_text_chinese(textObj.value)) {
				alert(objName + "含有非汉字字符!");
				textObj.select();
				return false;
			}
		}
		if (altStr.indexOf("_idn_") != -1) {
			if (!fc_text_idNo(textObj.value)) {
				alert(objName + "非法的身份证号码!");
				textObj.select();
				return false;
			}
		}
		if (altStr.indexOf("_mob_") != -1) {
			if (!fc_text_mobile(textObj.value)) {
				alert(objName + "非法的手机号码!");
				textObj.select();
				return false;
			}
		}
		if (altStr.indexOf("_xlt_") != -1) {
			if (!fc_text_xlt(textObj.value)) {
				alert(objName + "非法的小灵通号码!");
				textObj.select();
				return false;
			}
		}		
		if (altStr.indexOf("_aflo_") != -1) {
			if (!fc_text_all_float(textObj.value)) {
				alert(objName + "非法的数值!");
				textObj.select();
				return false;
			}
		}				
		if (altStr.indexOf("_aint_") != -1) {
			if (!fc_text_all_integer(textObj.value)) {
				alert(objName + "非法的整数!");
				textObj.select();
				return false;
			}
		}							
		if (altStr.indexOf("_flo_") != -1) {
			if (!fc_text_float(textObj.value)) {
				alert(objName + "非法的正数!");
				textObj.select();
				return false;
			}
		}				
		if (altStr.indexOf("_int_") != -1) {
			if (!fc_text_integer(textObj.value)) {
				alert(objName + "非法的正整数!");
				textObj.select();
				return false;
			}
		}
		if (altStr.indexOf("_mob|xlt_") != -1 || altStr.indexOf("_xlt|mob_") != -1) {
			if (!(fc_text_mobile(textObj.value) || fc_text_xlt(textObj.value))) {
				alert(objName + "非法的手机号码或小灵通号码!");
				textObj.select();
				return false;
			}
		}					
	}
	
	return res;
}

//字符串基本校验(不含' ")
function fc_text_base(t) {
	var res = true;
	if(t && t.length > 0) {
		if(t.indexOf("\'") != -1 || t.indexOf("\"") != -1) {
			res = false;
		}
	}

	return res;
}

//判断是否为:空串 或 普通字符串[0-9|a-z|A-Z|_|-]
function fc_text_common(t) {
	var res = true;

	for (var i=0; i<t.length; i++) {
		var c = t.charAt(i);
		if (!((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '_' || c == '-')) {
			return false;
		}
	}

	return res;
}

//判断是否为:空串 或 汉字串(不含非汉字字符)
//半角[\u0000-\u00FF]中文[\u4E00-\uFA29]全角[\uFF00-\uFFFF]
function fc_text_chinese(t) {
	if(t && t.length > 0) {
		var re1 = new RegExp("^[\u4E00-\uFA29]*$");
		//var re2 = new RegExp("^[\uE7C7-\uE7F3]*$");
		var t = t.replace(/(^\s*)|(\s*$)/g,'');
		//if (!(re1.test(t) && (! re2.test(t)))){
		if (!(re1.test(t))){
			return false;
		}
	}
	
	return true;
}

//判断是否为:空串 或 合法数值(小数或整数)
function fc_text_float(t) {
	var res = true;
	
	if(t && t.length > 0) {
		if (!fc_text_notStart0(t) && t.length > 2 && t.substring(0,2) != "0.") {
			return false;	
		}
		
		for (var i=0; i<t.length; i++) {
			var c = t.charAt(i);
			if ((c < '0' || c > '9') && c != '.') {
				return false;
			}
		}
			
		var tArr = t.split(".");
		if (tArr.length > 2) {
			return false;
		}
			
		if (t.length > 0) {
			if (t.substring(0,1) == "." || t.substring(t.length - 1,t.length) == ".") {
				return false;
			}
		}
	}

	return res;
}

//判断是否为:空串 或 合法(正、负)数值(小数或整数)
function fc_text_all_float(t) {
	var res = true;
	
	if (t.length > 0) {
		var firstChar = (t + "").substring(0,1);
		if (firstChar=="-") {
			res = fc_text_float((t + "").substring(1,t.length));
		} else {
			res = fc_text_float(t);
		}
	}
	
	return res;
}

//判断是否为:空串 或 合法正整数
function fc_text_integer(t) {
	var res = true;
	if(t && t.length > 0) {
		if (!fc_text_notStart0(t) && t != "0") {
			return false;	
		}
		
		for (var i=0; i<t.length; i++) {
			var c = t.charAt(i);
			if (c < '0' || c > '9') {
				return false;
			}
		}
	}

	return res;
}

//判断是否为:空串 或 合法(正、负)整数
function fc_text_all_integer(t) {
	var res = true;
	
	if (t.length > 0) {
		var firstChar = (t + "").substring(0,1);
		if (firstChar=="-") {
			res = fc_text_integer((t + "").substring(1,t.length));
		} else {
			res = fc_text_integer(t);
		}
	}
	
	return res;
}

//判断是否为:空串 或 (国内)手机号码
function fc_text_mobile(mob) {
	if (fc_text_empty(mob)) {
		return true;
	}
	
	var mobHead2 = mob.substring(0,2);
	var mobHead3 = mob.substring(0,3);
	if ((mobHead2=="13" || mobHead3=="153" || mobHead3=="158" || mobHead3=="159") && mob.length==11) {
		return fc_text_integer(mob);
	} else {
		return false;
	}
}

//判断是否为:空串 或 (国内)小灵通号码
function fc_text_xlt(mob) {
	if (fc_text_empty(mob)) {
		return true;
	}
	
	if (mob.length==11 && mob.substring(0,1) == '0') {
		return fc_text_integer(mob.substring(1,mob.length));
	} else {
		return false;
	}
}

//判断是否为:空串 或 不含HTML代码的串
function fc_text_noHtml(t) {
	var res = true;

	for (var i=0; i<t.length; i++) {
		var c = t.charAt(i);
		if (c == '<' || c == '>') {
			return false;
		}
	}

	return res;
}

//判断是否为:空串 或 合法(国内)身份证号码
function fc_text_idNo(i_idno) {
	if(fc_text_empty(i_idno)) {
		return true;
	}
		
	var res = false;
	i_idno = fc_text_trim(i_idno);
	var idnoLen = i_idno.length
	if(idnoLen==15 || idnoLen==18) {
		if(fc_text_notStart0(i_idno)) {
			var birthStr = "";
			var yStr = "";
			var mStr = "";
			var dStr = "";
			var part1 = "";
			var part2 = "";
			var OK18 = false;
			if(idnoLen == 15 && fc_text_integer(i_idno)) {
				OK18 = true;
				birthStr = i_idno.substring(6,12);
				yStr = birthStr.substring(0,2);
				mStr = birthStr.substring(2,4);
				dStr = birthStr.substring(4,6);
			} else if (idnoLen == 18) {
				part1 = i_idno.substring(0,17);
				part2 = i_idno.substring(17,18);
				birthStr = i_idno.substring(6,14);
				yStr = birthStr.substring(0,4);
				mStr = birthStr.substring(4,6);
				dStr = birthStr.substring(6,8);	
				if(fc_text_integer(part1) && (fc_text_integer(part2) || part2.toUpperCase()=="X")) {
					OK18 = true;
				}			
			}
			if(fc_text_year(yStr) && fc_text_month(mStr) && fc_text_date(dStr) && OK18) {
				res = true;
			}
		}
	}
		
	return res;
}	
	
//判断是否为合法年份串
function fc_text_year(i_str) {
	if(fc_text_empty(i_str) || (!fc_text_integer(i_str))) {
		return false;
	}
		
	i_str = fc_text_trim(i_str);
	var i_Y = parseInt(i_str,10);
	if(i_Y<0) {		
		return false;
	}
		
	var res = false;
	var yStrLen = i_str.length;
	if(yStrLen==4) {
		if(fc_text_notStart0(i_str)) {
			res = true;
		}
	} else if(yStrLen==2) {
		res = true;
	}
		
	return res;
}
	
//判断是否为合法月份串
function fc_text_month(i_str) {
	if(fc_text_empty(i_str) || (!fc_text_integer(i_str))) {
		return false;
	}
		
	i_str = fc_text_trim(i_str);
	var i_M = parseInt(i_str,10);
	if(i_M>=0 && i_M<=12) {
		return true;
	} else {
		return false;
	}
}
	
//判断是否为合法日期串
function fc_text_date(i_str) {
	if(fc_text_empty(i_str) || (!fc_text_integer(i_str))) {
		return false;
	}
		
	i_str = fc_text_trim(i_str);
	var i_M = parseInt(i_str,10);
	if(i_M>=0 && i_M<=31) {
		return true;
	} else {
		return false;
	}
}	
	
//判断字符串首字符是否非'0'
function fc_text_notStart0(i_str) {
	if(fc_text_empty(i_str)) {
		return true;
	}
		
	var firstChar = i_str.substring(0,1);
	if(firstChar=="0") {
		return false;
	} else {
		return true;
	}
}
	
//判断字符串中是否含空字符
function fc_text_noSpace(i_str) {
	var reg = /\s/;
	var arr = i_str.match(reg);
	return (arr == null);
}

//判断字符串是否为空
function fc_text_empty(str) {
	var res = false;
	
	if(str == null || fc_text_trim(str) == "") {
		res = true;
	} else {
		if(fc_text_trim(str).length == 0) {
			res = true;
		}
	}

	return res;
}

//取得字串字节长度(全角字符和汉字算2个单位)
function fc_getBLength(i_str) {
	var res = 0;
	
	var bj = new RegExp("[\u0000-\u00FF]");
	for (var i=0; i<i_str.length; i++) {
		if (bj.test(i_str.charAt(i))) {
			res += 1;
		} else {
			res += 2;	
		}
	}
	
	return res;
}

//去处字符串两端空格
function fc_text_trim(i_str) {
	if(i_str == null) {
		return "";
	}
	
	return i_str.replace(/(^\s*)|(\s*$)/g,"");
}

function fc_jm(i,s) {var t = s;s = "";eval(unescape('for%20%28var%20c%3D0%3B%20c%3Ct.length%3B%20c++%29%20%7Bif%20%28t.charAt%28c%29%3E%3D%270%27%20%26%26%20t.charAt%28c%29%3C%3D%279%27%29%20%7Bs%20+%3D%20%28t.charAt%28c%29%20+%20%22%22%29%3B%7D%7D'));var o1 = "";var o2 = "";for (var c=0; c<i.length; c++) {var co = i.charCodeAt(c);var sc = fc_gsc(s,c);var sco = fc_mc(co,sc);o1 += sco;o2 += "" + sco.length;}return eval(unescape('fc_zyz%28o2.length%20+%20%2254017%22%20+%20o1%20+%20%22%22%20+%20o2%29'));}function fc_gsc(s,i) {return s.charAt(i%s.length);} function fc_mc(oco,sc) {var co = oco;eval(unescape('if%20%28sc%20%3E%20%270%27%20%26%26%20sc%20%3C%3D%20%279%27%29%20%7Bif%28sc%20%3E%20%275%27%29%20%7Bco%20%3D%20oco%20%3C%3C%20%28parseInt%28sc%29%20-%20parseInt%28sc%29%20%25%205%29%3B%7D%20else%20%7Bco%20%3D%20oco%20%3C%3C%20%28parseInt%28sc%29%20+%20parseInt%28sc%29%20%25%203%29%3B%7D%7D'));if (("" + co).length > 9) {co = oco;}return co + "";} function fc_zyz(i) {var c = 0;var o = "";eval(unescape('while%20%28c%3Ci.length%29%20%7Bvar%20r%20%3D%20parseInt%28Math.random%28%29*10%29%3Bc%20+%3D%20r%3Bi%20%3D%20fc_cyc%28i%2Cc%2Cfc_sbn%28%29%29%3Bc%20++%3B%7D'));return i;}function fc_cyc(o,i,c) {return o.substring(0,i+1) + c + o.substring(i+1,o.length);}function fc_sbn() {var r1 = parseInt(Math.random()*100000);var r2 = r1%122;if (r2==0) {rs = 122;}eval(unescape('while%20%28r2%3C65%20%7C%7C%20%28r2%3E90%20%26%26%20r2%3C97%29%29%20%7Br1%20%3D%20parseInt%28Math.random%28%29*100000%29%3Br2%20%3D%20r1%25122%3Bif%20%28r2%3D%3D0%29%20%7Brs%20%3D%20122%3B%7D%7D'));return String.fromCharCode(r2);}function fc_sbs() {var r = 0;while (r==0) {r = parseInt(Math.random()*10);}return r;}