﻿/*
 *ITgene前台JS表单脚本(输入&验证)库
 *版本:V1.1
 *作者:Mickey
 *时间:2006-3-9
 *版权:ITgene.cn
 *注:请使用本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=只能输入电话、"-"、"("、")"

 *
 *表单验证类
 *1、isAccount=是否帐号(由字母、数字、下划线组成){有两种选择,一种有长度限制}
 *2、isChinese=是否中文(由中文、数字、字母组成)
 *3、ismail=是否Email
 *4、isip=是否ip
 *5、PhoneCheck=电话号码检测(电话和手机)
 *6、isMobile=手机号码检测
 *7、isDate=是否短日期
 *8、isTime=是否时间
 *9、isDateTime=是否长日期

 *
 *其它函数
 *1、changeFrame=改变Frame大小
 *2、CheckAll=全选/全不选
 *3、onKeyDownDefault=回车->转->Tab
 *4、admin_Size=改变TextArea输入框高度

 *
 *其它验证正则表达式
 *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;
    }
}

//--------------------------------只允许输入数字(动态判断)
/**
*方法名：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;
		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;
		return false;
    }
	else
	{
        //window.event.keyCode=keycode;
		return true;
    }
}
//========================================================================动态输入函数(结束)


//========================================================================表单验证函数
//--------------------------------判断用户名（判断字符由字母和数字，下划线,点号组成.且开头的只能是下划线和字母）
function isAccount(str)
{
	if(/^[a-z]\w{3,}$/i.test(str))		 //用户名由字母和数字、下划线组成，且只能以字母开头，且长度最小为4位
	//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));
}

//--------------------------------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]);
}

//========================================================================表单验证函数(结束)

//========================================================================其它函数
//用于改变当前后台框架的尺寸(参数:对象,关闭时显示图片,打开时显示图片,关闭显示尺寸,打开显示尺寸)
//							例:this,'../images/openout.gif','../images/setby.gif','top.frame.cols=\'0,*\'','top.frame.cols=\'150,*\''
function changeFrame(ob,s1,s2,evalString1,evalString2)
{
	if (ob.alt == "收起")
	{
		ob.alt = "展开";
		ob.src = s1;
		eval(evalString1);
	}
	else
	{
		ob.alt = "收起";
		ob.src = s2;
		eval(evalString2);
	}
}

//用于全选/全不选(参数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;
				}
			}
		}
    }     
}

//--------------------------------用户在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)
{
	var pattern = /^[\u4e00-\u9fa5]+$/i;
	var maxL,minL;
	maxL = obstring.length;				//原始长度
	obstring = obstring.replace(pattern,"");
	minL = obstring.length;				//处理后的长度
	return (maxL - minL)
}
//身份证号码检测
function checkIdcard(idcard){
var Errors=new Array(
"验证通过!",
"身份证号码位数不对!",
"身份证号码出生日期超出范围或含有非法字符!",
"身份证号码校验错误!",
"身份证地区非法!"
);
var area={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 idcard,Y,JYM;
var S,M;
var idcard_array = new Array();
idcard_array = idcard.split("");
//地区检验
if(area[parseInt(idcard.substr(0,2))]==null) return Errors[4];
//身份号码位数及格式检验
switch(idcard.length){
case 15:
if ( (parseInt(idcard.substr(6,2))+1900) % 4 == 0 || ((parseInt(idcard.substr(6,2))+1900) % 100 == 0 && (parseInt(idcard.substr(6,2))+1900) % 4 == 0 )){
ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;//测试出生日期的合法性
} else {
ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;//测试出生日期的合法性
}
if(ereg.test(idcard)) return Errors[0];
else return Errors[2];
break;
case 18:
//18位身份号码检测
//出生日期的合法性检查 
//闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))
//平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))
if ( parseInt(idcard.substr(6,4)) % 4 == 0 || (parseInt(idcard.substr(6,4)) % 100 == 0 && parseInt(idcard.substr(6,4))%4 == 0 )){
ereg=/^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;//闰年出生日期的合法性正则表达式
} else {
ereg=/^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;//平年出生日期的合法性正则表达式
}
if(ereg.test(idcard)){//测试出生日期的合法性
//计算校验位
S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7
+ (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9
+ (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10
+ (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5
+ (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8
+ (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4
+ (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2
+ parseInt(idcard_array[7]) * 1 
+ parseInt(idcard_array[8]) * 6
+ parseInt(idcard_array[9]) * 3 ;
Y = S % 11;
M = "F";
JYM = "10X98765432";
M = JYM.substr(Y,1);//判断校验位
if(M == idcard_array[17]) return Errors[0]; //检测ID的校验位
else return Errors[3];
}
else return Errors[2];
break;
default:
return Errors[1];
break;
}
}
///超链接title提示定义
var tipTimer;
function locateObject(n, d) { //v3.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=locateObject(n,d.layers[i].document); return x;
}
//隐藏
function hideTooltip(object)
{
if (document.all)
{
	locateObject(object).style.visibility="hidden"
	locateObject(object).style.left = 1;
	locateObject(object).style.top = 1;
return false
}
else if (document.layers)
{
	locateObject(object).visibility="hide"
	locateObject(object).left = 1;
	locateObject(object).top = 1;
	return false
}
else
	return true
}
//显示
function showTooltip(object,e, tipContent, backcolor, bordercolor, textcolor, displaytime)
{
	window.clearTimeout(tipTimer)
	
	if (document.all)
		{
			locateObject(object).style.top=document.body.scrollTop+event.clientY+20
			
			locateObject(object).innerHTML='<table style="font-family: Verdana,Tahoma, Arial, Helvetica, sans-serif; font-size: 11px; border: '+bordercolor+'; border-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; background-color: '+backcolor+'" width="10" border="0" cellspacing="1" cellpadding="1"><tr><td nowrap><font style="font-family: Verdana,Tahoma, Arial, Helvetica, sans-serif; font-size: 11px; color: '+textcolor+'">'+unescape(tipContent)+'</font></td></tr></table> '

			if ((e.x + locateObject(object).clientWidth) > (document.body.clientWidth + document.body.scrollLeft))
				{	
					locateObject(object).style.left = (document.body.clientWidth + document.body.scrollLeft) - locateObject(object).clientWidth-10;
				}
			else
			{
			locateObject(object).style.left=document.body.scrollLeft+event.clientX
			}
		locateObject(object).style.visibility="visible"
		tipTimer=window.setTimeout("hideTooltip('"+object+"')", displaytime);
		return true;
		}
	else if (document.layers)
		{
		locateObject(object).document.write('<table width="10" border="0" cellspacing="1" cellpadding="1"><tr bgcolor="'+bordercolor+'"><td><table width="10" border="0" cellspacing="0" cellpadding="2"><tr bgcolor="'+backcolor+'"><td nowrap><font style="font-family: Verdana,Tahoma, Arial, Helvetica, sans-serif; font-size: 11px; color: '+textcolor+'">'+unescape(tipContent)+'</font></td></tr></table></td></tr></table>')
		locateObject(object).document.close()
		locateObject(object).top=e.y+20

		if ((e.x + locateObject(object).clip.width) > (window.pageXOffset + window.innerWidth))
			{
				locateObject(object).left = window.innerWidth - locateObject(object).clip.width-10;
			}
		else
			{
			locateObject(object).left=e.x;
			}
		locateObject(object).visibility="show"
		tipTimer=window.setTimeout("hideTooltip('"+object+"')", displaytime);
		return true;
	}
	else
	{
		return true;
	}
}
//<td height=20><img src=images/arrow1.gif>
// <a onMouseOver="showTooltip('dHTMLToolTip',event, '连续滚动图片的制作', '#fffff2','#000000','#000000','20000')" onMouseOut="hideTooltip('dHTMLToolTip')" href=study_show.asp?id=38 >连续滚动图片的制作 </a>
// </td>

function checkspace(checkstr){
var str='';
for(var i=0;i<checkstr.length;i++){
str=str+' ';
}
return (str==checkstr);
}
function PhotoWin(theURL) 
{
win=open(theURL,"PhotoWindow","width=480,height=120,top=250,left=200,resizable=no,scrollbars=no,toolbar=no,location=no,menubar=no,status=no"); 
win.focus();
}
