/*
 *Toz前台JS表单脚本(输入&验证)库(原ITgene.cn--Toz上一版本版本验证库)
 *版本:V1.3
 *作者:Mickey
 *时间:2006-11-11
 *版权:Toz360.CoM
 *注:请使用本JS表单脚本(输入&验证)库的同时保留此版权信息，此是作者花了时间去收集整理以及编写的，谢谢!
 *	 此版本采用GB2312编码格式，请在使用前进行字符编码转换，以保证能够正常使用
 */

/*
 *以下是库函数目录及使用说明:
 *
 *常用
 *1、Trim=去除字符串前后空格									使用方法:String.trim()
 *2、ctrim=去除字符串中间空格									使用方法:String.ctrim()
 *3、onClickSelect=点中text框的时候，选中其中的文字				使用方法:在input位置加上 onClick/onFocus="onClickSelect();" 即可
 
 *
 *动态输入类													使用方法:在input位置加上 onkeypress="函数名" 即可
 *1、TextOnly=只允许输入字母、数字、下划线
 *2、TextNumOnly=只允许输入字母、数字
 *3、NumOnly=只允许输入数字
 *4、TelOnly=只能输入电话、"-"、"("、")"
 *5、EnterToTab=回车键换为Tab									使用方法:并且每个文本框中onKeyDown事件中写一个enter转tab函数

 *
 *表单验证类
 *1、isAccount=是否帐号(由字母、数字、下划线组成){有两种选择,一种有长度限制}
 *2、isChinese=是否中文(由中文、数字、字母组成)
 *3、ismail=是否Email
 *4、isip=是否ip
 *5、PhoneCheck=电话号码检测(电话和手机)
 *6、isMobile=手机号码检测
 *7、isDate=是否短日期
 *8、isTime=是否时间
 *9、isDateTime=是否长日期
 *10、isNumber=是否数字
 *11、isQQ=是否QQ
 *12、isIP=是否IP地址
 *13、isIP2=是否IP地址
 *14、isIdCardNo=是否身份证号
 *15、isIdCardNo2=是否身份证号(较严格的)

 *
 *其它函数
 *1、changeFrame=改变Frame大小
 *2、CheckAll=全选/全不选
 *3、onKeyDownDefault=回车->转->Tab
 *4、admin_Size=改变TextArea输入框高度
 *5、getChineseNum = 得到中文字符个数
 *6、getLength = 得到字符串长度,一个中文汉字占两个字符
 *7、appendValue= 向指定的text框追加字符

 *
 *其它验证正则表达式
 *Email : /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
 *Phone : /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/
 *Url : /^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/
 *Currency : /^\d+(\.\d+)?$/
 *Number : /^\d+$/
 *Zip : /^[1-9]\d{5}$/
 *QQ : /^[1-9]\d{4,8}$/
 *Integer : /^[-\+]?\d+$/
 *Double : /^[-\+]?\d+(\.\d+)?$/
 *English : /^[A-Za-z]+$/
 *Chinese :  /^[\u0391-\uFFE5]+$/
 *UnSafe : /^(([A-Z]*|[a-z]*|\d*|[-_\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\'\"]*)|.{0,5})$|\s/
 *Username : /^[a-z]\w{3,}$/i(用户名验证,带长度限制)
 */

//========================================================================常用函数
//--------------------------------除去前后空格
String.prototype.trim = function()
{
    //用正则表达式将前后空格用空字符串替代。
    return this.replace(/(^\s*)|(\s*$)/g, "");
}

//--------------------------------除去中间空格
String.prototype.ctrim = function()
{
    //用正则表达式将中间空格用空字符串替代。
	return this.replace(/\s/g,'');
}

//--------------------------------点中text框的时候，选中其中的文字
/**
*方法名：onClickSelect
*描述：点中text框的时候，选中其中的文字
*输入：空
*输出：空
**/
function onClickSelect()
{
    var obj = document.activeElement;
    if(obj.tagName == "TEXTAREA")
	{
        obj.select();
	}
    if(obj.tagName == "INPUT" )
	{
        if(obj.type == "text")
			obj.select();
	}
}

//========================================================================动态输入类函数
//--------------------------------只允许输入字母、数字、下划线(动态判断)
function TextOnly(){
    var i= window.event.keyCode
	//8=backspace
	//9=tab
	//37=left arrow
	//39=right arrow
	//46=delete
	//48~57=0~9
	//97~122=a~z
	//65~90=A~Z
	//95=_
    if (!((i<=57 && i>=48)||(i>=97 && i<=122)||(i>=65 && i<=90)||(i==95)||(i==8)||(i==9)||(i==37)||(i==39)||(i==46)))
	{
        window.event.keyCode=27;
		//event.returnValue=false
		return false;
    }
	else
	{
        //window.event.keyCode=keycode;
		return true;
    }
}

//--------------------------------只允许输入字母、数字(动态判断)
function TextNumOnly(){
    var i= window.event.keyCode
	//8=backspace
	//9=tab
	//37=left arrow
	//39=right arrow
	//46=delete
	//48~57=0~9
	//97~122=a~z
	//65~90=A~Z
	//95=_
    if (!((i<=57 && i>=48)||(i>=97 && i<=122)||(i>=65 && i<=90)||(i==8)||(i==9)||(i==37)||(i==39)||(i==46)))
	{
        window.event.keyCode=27;
		//event.returnValue=false;
		return false;
    }
	else
	{
        //window.event.keyCode=keycode;
		return true;
    }
}

//回车键换为Tab
function EnterToTab()
{
    if(event.srcElement.type != 'button' && event.srcElement.type != 'textarea'
       && event.keyCode == 13)
    {
        event.keyCode = 9;
    }
}
//--------------------------------只允许输入数字(动态判断)
/**
*方法名：NumOnly()
*描述：只允许输入数字
*输入：空
*输出：空
**/
function NumOnly(){
    var i= window.event.keyCode
	//8=backspace
	//9=tab
	//37=left arrow
	//39=right arrow
	//46=delete
	//48~57=0~9
    if ((i>57 || i<48) && (i!=8) && (i!=9) && (i!= 37) && (i!=39) && (i!=46))
	{
        window.event.keyCode=27;
		//event.returnValue=false;
		return false;
    }
	else
	{
        //window.event.keyCode=keycode;
		return true;
    }
}

//--------------------------------只能输入电话号码或者"－"或者"("或者")"
function TelOnly(){
    var i= window.event.keyCode
	//8=backspace
	//9=tab
	//37=left arrow
	//39=right arrow
	//46=delete
	//48~57=0~9
	//40=(
	//41=)
	//45=-
	//32=空格
    if ((i>57 || i<48) && (i!=8) && (i!=9) && (i!= 37) && (i!=39) && (i!=46) && (i!=40) && (i!=41) && (i!=45) && (i!=32))
	{
        window.event.keyCode=27;
		//event.returnValue=false;
		return false;
    }
	else
	{
        //window.event.keyCode=keycode;
		return true;
    }
}
//========================================================================动态输入函数(结束)


//========================================================================表单验证函数
//--------------------------------判断用户名（判断字符由字母和数字，下划线,点号组成.且开头的只能是下划线和字母）
function isAccount(str)
{
	//if(/^[a-zA-z1-9]\w{3,}$/i.test(str))		 //用户名由字母和数字、下划线组成，且只能以字母开头，且长度最小为4位
	///[^0-9a-zA-Z]/g.test(str)					//用户名只能由字母数字组成
	if(/^([a-zA-z]{1})([\w]*)$/g.test(str))//用户名由字母和数字、下划线组成，且只能以字母开头
	{
		//alert(');
		return true;
	}
	else
		return false;
}

//--------------------------------判断只能输入中文、数字、字母、下划线
function isChinese(str)
{
	var pattern = /^[0-9a-zA-Z_\u4e00-\u9fa5]+$/i;
	if (pattern.test(str))
	{
		return true;
	}
	else
	{
		//alert("只能包含中文、字母、数字");
		return false;
	}
}

//--------------------------------Email格式判断
function ismail(email)
{
	return(new RegExp(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/).test(email));
}

//--------------------------------URL格式判断
function isURL(url)
{
	return(new RegExp(/^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/).test(url));
}

//--------------------------------IP格式判断
function isip(s)
{
	var check=function(v)
	{
		try
		{
			return (v<=255 && v>=0)
		}
		catch(x)
		{
			return false
		}
	};
	var re=s.split(".")
	return (re.length==4)?(check(re[0]) && check(re[1]) && check(re[2]) && check(re[3])):false;
}

//--------------------------------判断电话号码/手机号码
function PhoneCheck(s) 
{
	var str=s;
	var reg=/(^[0-9]{3,4}\-[0-9]{3,8}$)|(^[0-9]{3,8}$)|(^\([0-9]{3,4}\)[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$)/;
	//alert(reg.test(str));
	return reg.test(str);
}

//--------------------------------判断手机号码
function isMobile(str)
{      
	var reg=/^0{0,1}13[0-9]{9}$/;
	return reg.test(str);
}

//--------------------------------短日期(如2003-12-05)
function isDate(str)
{
	var r = str.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/); 
	if(r==null)
	{
		//alert('输入的信息不是日期格式（YYYY:MM:DD）'); 
		return false; 
	}
	if (r[1]<1 || r[3]<1 || r[3]-1>12 || r[4]<1 || r[4]>31)
	{
		//alert("日期格式（YYYY:MM:DD）不对");
		return false
	}
	var d= new Date(r[1], r[3]-1, r[4]); 
	return (d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]);
}

//--------------------------------短时间(如13:04:06)
function isTime(str)
{
	var a = str.match(/^(\d{1,2})(:)?(\d{1,2})\2(\d{1,2})$/);
	if (a == null) 
	{
		//alert('输入的信息不是时间格式（HH:MM:SS）'); 
		return false;
	}
	if (a[1]>23 || a[1]<0 || a[3]>60 || a[3]<0 || a[4]>60 || a[4]<0)
	{
		//alert("时间格式（0<=HH<23:0<=MM<60:0<=SS<60）不对");
		return false
	}
	return true;
}

//--------------------------------长时间(如2003-12-05 13:04:06)
function isDateTime(str)
{
	var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/;
	var r = str.match(reg); 
	if(r==null)
	{
		//alert('输入的信息不是时间格式（YYYY-MM-DD HH:MM:SS）'); 
		return false;
	}
	var d= new Date(r[1], r[3]-1,r[4],r[5],r[6],r[7]); 
	return (d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]&&d.getHours()==r[5]&&d.getMinutes()==r[6]&&d.getSeconds()==r[7]);
}

function isNumber(str)
{
	var pattern = /^\d+$/;
	if (pattern.test(str))
	{
		return true;
	}
	else
	{
		return false;
	}
}

function isQQ(str)
{
	var pattern = /^[1-9]\d{4,8}$/;
	if (pattern.test(str))
	{
		return true;
	}
	else
	{
		//alert("只能包含中文、字母、数字");
		return false;
	}
}

function isIP(s)
{
	var check=function(v){try{return (v<=255 && v>=0)}catch(x){return false}};
	var re=s.split(".")
	return (re.length==4)?(check(re[0]) && check(re[1]) && check(re[2]) && check(re[3])):false
}

function isIP2(str)
{
	var pattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
	if (pattern.test(str))
	{
		if(RegExp.$1<1 || RegExp.$1>254||RegExp.$2<0||RegExp.$2>254||RegExp.$3<0||RegExp.$3>254||RegExp.$4<1||RegExp.$4>254)
		{
			return false;
		}
		else
		{
			return true;
		}		
	}
	else
	{
		return false;
	}
}

function isIdCardNo(num)
{
	if (isNaN(num)) {alert("输入的不是数字！"); return false;}
	var len = num.length, re; 
	if (len == 15)
 		re = new RegExp(/^(\d{6})()?(\d{2})(\d{2})(\d{2})(\d{3})$/);
	else if (len == 18)
  		re = new RegExp(/^(\d{6})()?(\d{4})(\d{2})(\d{2})(\d{3})(\d)$/);
	else 
	{
		alert("输入的数字位数不对！");
		return false;
	}
	var a = num.match(re);
	if (a != null)
	{
		if (len==15)
		{
			var D = new Date("19"+a[3]+"/"+a[4]+"/"+a[5]);
			var B = D.getYear()==a[3]&&(D.getMonth()+1)==a[4]&&D.getDate()==a[5];
		}
		else
		{
			var D = new Date(a[3]+"/"+a[4]+"/"+a[5]);
			var B = D.getFullYear()==a[3]&&(D.getMonth()+1)==a[4]&&D.getDate()==a[5];
		}
		if (!B) 
		{
			alert("输入的身份证号 "+ a[0] +" 里出生日期不对！"); 
			return false;
		}
	}
	return true;
}

//严格身份证验证
function isIdCardNo2(sId)
{
	var aCity={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"}
	var iSum=0;
	var info="";
	if(!/^\d{17}(\d|x)$/i.test(sId))return false;
	sId=sId.replace(/x$/i,"a");
	if(aCity[parseInt(sId.substr(0,2))]==null)return "Error:非法地区";
	sBirthday=sId.substr(6,4)+"-"+Number(sId.substr(10,2))+"-"+Number(sId.substr(12,2));
	var d=new Date(sBirthday.replace(/-/g,"/"));
	if(sBirthday!=(d.getFullYear()+"-"+ (d.getMonth()+1) + "-" + d.getDate()))return "Error:非法生日";
	for(var i = 17;i>=0;i --) iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),11)
	if(iSum%11!=1)return "Error:非法证号";
	return aCity[parseInt(sId.substr(0,2))]+","+sBirthday+","+(sId.substr(16,1)%2?"男":"女")
}
//========================================================================表单验证函数(结束)

//========================================================================其它函数
//用于全选/全不选(参数form=表单)
function CheckAll(form)     
{
	for (var i=0;i<form.length;i++)     
	{     
		var e = form[i];
		if (e.type=="checkbox")
		{
			if (e.name!="AllChoice")
			{
				if (form.AllChoice.checked==true)
				{
					if (e.disabled==false) e.checked=true;
	
				}
				else
				{
					if (e.disabled==false) e.checked=false;
				}
			}
		}
	}     
}

//用于全选/全不选(参数form=表单)
var checkallstate = true;
function CheckAll_Text(form)     
{
	for (var i=0;i<form.length;i++)     
	{     
		var e = form[i];
		if (e.type=="checkbox")
		{
			if (checkallstate == true)
			{
				if (e.disabled==false) e.checked=true;
			}
			else
			{
				if (e.disabled==false) e.checked=false;
			}
		}
	} 
	if (checkallstate == true)
	{
		checkallstate = false;
	}
	else
	{
		checkallstate = true;
	}
}

//全选指定组以象
function CheckAllGroup(form,groupName)     
{
  for (var i=0;i<form.length;i++)     
    {     
		var e = form[i];
		if (e.type=="checkbox")
		{
			if ((e.name!="AllChoice")&&(e.name == groupName))
			{
				if (form.AllChoice.checked==true)
				{
					if (e.disabled==false) e.checked=true;
				}
				else
				{
					if (e.disabled==false) e.checked=false;
				}
			}
		}
    }     
}

function UnSelectAll(form)
{
    if(form.AllChoice.checked)
	{
		form.AllChoice.checked = form.AllChoice.checked & 0;
    } 	
}
//--------------------------------用户在button以外的页面元素中按回车-->转换-->按tab键
/**
*方法名：onKeyDownDefault
*描述：用户在button以外的页面元素中按回车，转换为按tab键
*输入：空
*输出：空
**/
function onKeyDownDefault()
{
    if (window.event.keyCode == 13 && window.event.ctrlKey == false && window.event.altKey == false){
        if (window.event.srcElement.type != "button")
            window.event.keyCode = 9;
    }
    else{
        return true;
    }
}

// 修改编辑栏高度
function admin_Size(num,objname)
{
	var obj=document.getElementById(objname)
	if (parseInt(obj.rows)+num>=3) {
		obj.rows = parseInt(obj.rows) + num;	
	}
	if (num>0)
	{
		obj.width="90%";
	}
}

//取得字符串中中文/汉字的个数
function getChineseNum(obstring)
{
	//[^\x00-\xff]双字节字符，包括中文文字
	//[\u4e00-\u9fa5]中文文字	
	var pattern = /[^\x00-\xff]+/ig;
	var maxL,minL;
	maxL = obstring.length;				//原始长度
	obstring = obstring.replace(pattern,"");
	minL = obstring.length;				//处理后的长度
	return (maxL - minL);
}

//判断字符串占用的总位数,一个汉字占两位
function getLength(obstring)
{
	return (obstring.length + getChineseNum(obstring)); 
}

//SELECT表单选取
function ChoiceSelect(Voption,Value)
{
	var obj = document.getElementById(Voption);
	for (i=0;i<obj.length;i++){
		if (obj.options[i].value==Value)
		{
			obj.options[i].selected=true;
			break;
		}
	}
}

//SELECT表单选取(多选)
function ChoiceSelects(Voption,Value)
{
	var obj = document.getElementById(Voption);
	Value = ","+ Value +",";
	for (i=0;i<obj.length;i++)
	{
		//if (obj.options[i].value==Value)
		if (Value.indexOf(","+ obj.options[i].value +",") >= 0)
		{
			obj.options[i].selected=true;
		}
	}
}

//SELECT添加值,objOption=SELECT对象,objTextArray=添加的文本对象,objValueArray=添加的值对象
//说明objTextArray数组长度与objValueArray应保持一致
function OptionAdd(objOption,objTextArray,objValueArray)
{
	var obj = document.getElementById(objOption);
	for(i=0;i<objTextArray.length;i++)
	{
		if(objValueArray != "")
		{
			obj.options.add(new Option(objTextArray[i],objValueArray[i]));
		}
		else
		{
			obj.options.add(new Option(objTextArray[i],objTextArray[i]));
		}
	}
}

//向指定的text框用指定格式追回指定格式字符
//参数说明aType(add=追加(追加时如果存在相同字串不再追加),''=替换),ob=追加对象,toValue=追加值,tMiddleChar=追加时的分隔符
function appendValue(aType,tOb,toValue,tMiddleChar)
{
	var ob = eval("document.all."+ tOb);
	if(aType.toLowerCase() == 'add')		//追加
	{
		if(ob.value.indexOf(toValue) < 0)	//如果小于0，说明没找到，那么追加
		{
			if(ob.value.trim() != '')		//如果本身值不为空，那么追加带分隔符的字符
			{
				ob.value = ob.value + tMiddleChar + toValue;
			}
			else
			{
				ob.value = toValue;
			}
		}
	}
	else									//替换
	{
		ob.value = toValue;
	}
}

function AddFavorite(toPage)
{
	window.open(toPage,"_blank","height=580,left=10,top=10,width="+ (screen.availWidth -30) +",toolbar=1,titlebar=1,status=1,menubar=1,scrollbars=1,resizable=1,location=1");
}

//显示字数
function ViewLength(objName,viewObjName)
{
	var obj = document.getElementById(objName);
	if (viewObjName.trim() != "")
	{
		document.getElementById(viewObjName).innerText = getLength(obj.value.trim());
	}
}

//Iframe自动适应窗体高度
function AutoIframeHeight(obj)
{
	var autoObj=obj;
	if (document.getElementById)
	{
		if (autoObj && !window.opera)
		{
			if (autoObj.contentDocument && autoObj.contentDocument.body.offsetHeight)
			{			
				autoObj.height = autoObj.contentDocument.body.offsetHeight;
			}
			else if(autoObj.Document && autoObj.Document.body.scrollHeight)
			{
				autoObj.height = autoObj.Document.body.scrollHeight;
			}
		}
	}
}

/// Cookies操作
var cookies = {
	/*	cookies设置函数
		@name		Cookies名称
		@value		值
	*/
	setCookie : function(name,value)
	{
		var Days = 30;
		var exp = new Date(); //new Date("December 31, 9998");
		exp.setTime(exp.getTime() + Days*24*60*60*1000);
		document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
	},
	/*	cookies读取函数
		@Name		Cookies名称
		返回值		Cookies值
	*/
	getCookie : function (name)
	{
		var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
		if(arr=document.cookie.match(reg)) 
		{
			return unescape(arr[2]);
		}
		else
		{
			return null;
		}
	},
	/*	cookies删除函数
		@Name		Cookies名称
	*/
	delCookie : function (name)
	{
		var exp = new Date();
		exp.setTime(exp.getTime() - 1);
		var cval=getCookie(name);
		if(cval!=null) document.cookie= name + "="+cval+";expires="+exp.toGMTString();
	}
};
//========================================================================其它函数(结束)