/******************************************************/
/* 文件名：univerify.js                               */
/* 表单要设定为 form */
/* 功能              datatype		*/
/* 判断数字           number */
/* 判断电子邮件格式    email*/
/* 判断日期格式        datetime */
/* 比较日期早晚        comparetime*/
/* 中国身份证号        chinaidcard*/

/******************************************************/
/* 取得字符串的字节长度 */
function strlen(str)
{var i;
var len;
len = 0;
for (i=0;i<str.length;i++)
{
if (str.charCodeAt(i)>255) len+=2; else len++;
}
return len;
}
function strlength(str)
{
return str.length;
}
/* 检测字符串是否为空 */
function isnull(str)
{
var i;
 for (i=0;i<str.length;i++)
{
  if (str.charAt(i)!=' ') return false;
}
 return true;
}

/* 检测字符串是否全为数字 datatype="number" */
function isnumber(str)
{
var number_chars = "1234567890";
var i;
for (i=0;i<str.length;i++)
{
if (number_chars.indexOf(str.charAt(i))==-1) return false;
}
return true;
}

/* 检测字符串是否为email格式 datatype="email" */
function isemail(str)
{
var emailFilter=/^.+@.+\..{2,3}$/;
if (!(emailFilter.test(str))) { 
       return false;
}
return true;
}
/* 检测字符串是否为日期格式 datatype="datetime" 
 * 检测日期中的月和日的正确性
 * 日期格式如：2004-05-04
 */
function isdate(str)
{
 var lthdatestr
 if (str!= "")
  lthdatestr= str.length ;
 else
  lthdatestr=0;
  
 var tmpy="";
 var tmpm="";
 var tmpd="";
 var status;
 status=0;
 if ( lthdatestr== 0)
  return 0


 for (i=0;i<lthdatestr;i++)
 { if (str.charAt(i)== '-')
  {
   status++;
  }
  if (status>2)
  {
   return 0;
  }
  if ((status==0) && (str.charAt(i)!='-'))
  {
   tmpy=tmpy+str.charAt(i)
  }
  if ((status==1) && (str.charAt(i)!='-'))
  {
   tmpm=tmpm+str.charAt(i)
  }
  if ((status==2) && (str.charAt(i)!='-'))
  {
   tmpd=tmpd+str.charAt(i)
  }

 }
 year=new String (tmpy);
 month=new String (tmpm);
 day=new String (tmpd)
 if ((tmpy.length!=4) || (tmpm.length>2) || (tmpd.length>2))
 {
  return 0;
 }
 if (!((1<=month) && (12>=month) && (31>=day) && (1<=day)) )
 {
  return 0;
 }
 if (!((year % 4)==0) && (month==2) && (day==29))
 {
  return 0;
 }
 if ((month<=7) && ((month % 2)==0) && (day>=31))
 {
  return 0;
 
 }
 if ((month>=8) && ((month % 2)==1) && (day>=31))
 {
  return 0;
 }
 if ((month==2) && (day==30))
 {
  return 0;
 }
 
 return 1;
}


/**
*校验两个日期的先后
*返回值：
*如果其中有一个日期为空，校验通过,           返回flase
*如果起始日期早于等于终止日期，校验通过，     返回true
*如果起始日期晚于终止日期，                 返回false    参考提示信息： 起始日期不能晚于结束日期。
*/

function checkDateEarlier(strStart,strEnd)
{
    if(isdate(strStart) == false || isdate(strEnd) == false)
        return false;
    //如果有一个输入为空，则通过检验
    if (( strStart == "" ) || ( strEnd == "" ))
        return false;
    var arr1 = strStart.split("-");
    var arr2 = strEnd.split("-");
    var date1 = new Date(arr1[0],parseInt(arr1[1].replace(/^0/,""),10) - 1,arr1[2]);
    var date2 = new Date(arr2[0],parseInt(arr2[1].replace(/^0/,""),10) - 1,arr2[2]);
    if(arr1[1].length == 1)
        arr1[1] = "0" + arr1[1];
    if(arr1[2].length == 1)
        arr1[2] = "0" + arr1[2];
    if(arr2[1].length == 1)
        arr2[1] = "0" + arr2[1];
    if(arr2[2].length == 1)
        arr2[2]="0" + arr2[2];
    var d1 = arr1[0] + arr1[1] + arr1[2];
    var d2 = arr2[0] + arr2[1] + arr2[2];
    if(parseInt(d1,10) > parseInt(d2,10))
       return false;
    else
       return true;
}
/**
*校验是否为中国身份证
*
*返回值：是 返回 True, 不是 返回 False
*/

function isChinaIDCard(sNo){
		sNo = sNo.toString()
	    if (sNo.length==18)
	    {
			var a,b,c
			if (!isnumber(sNo.substr(0,17))) {return false}
			
			a=parseInt(sNo.substr(0,1))*7+parseInt(sNo.substr(1,1))*9+parseInt(sNo.substr(2,1))*10;
			a=a+parseInt(sNo.substr(3,1))*5+parseInt(sNo.substr(4,1))*8+parseInt(sNo.substr(5,1))*4;
			a=a+parseInt(sNo.substr(6,1))*2+parseInt(sNo.substr(7,1))*1+parseInt(sNo.substr(8,1))*6;	
			a=a+parseInt(sNo.substr(9,1))*3+parseInt(sNo.substr(10,1))*7+parseInt(sNo.substr(11,1))*9;	
			a=a+parseInt(sNo.substr(12,1))*10+parseInt(sNo.substr(13,1))*5+parseInt(sNo.substr(14,1))*8;	
			a=a+parseInt(sNo.substr(15,1))*4+parseInt(sNo.substr(16,1))*2;
			b=a%11;
				
			if (b==2)
			{
				c=sNo.substr(17,1).toUpperCase();
			}
			else
			{
				c=parseInt(sNo.substr(17,1));
			}
			
			switch(b)
			{
				case 0: if ( c!=1 ) {return false;}break;
				case 1: if ( c!=0 ) {return false;}break;
				case 2: if ( c!="X") {return false;}break;
				case 3: if ( c!=9 ) {return false;}break;
				case 4: if ( c!=8 ) {return false;}break;
				case 5: if ( c!=7 ) {return false;}break;
				case 6: if ( c!=6 ) {return false;}break;
				case 7: if ( c!=5 ) {return false;}break;
				case 8: if ( c!=4 ) {return false;}break;
				case 9: if ( c!=3 ) {return false;}break;
				case 10: if ( c!=2 ){return false}
			}
		}
		else
		{
			if (!isnumber(sNo)) {return false}	
		}
		var tmp_checkdate
		switch(sNo.length){
			case 15: 
					tmp_checkdate = "19"+sNo.substr(6,2)+"-"+sNo.substr(8,2)+"-"+sNo.substr(10,2)
					break;					
			case 18: 
					tmp_checkdate = sNo.substr(6,4)+"-"+sNo.substr(10,2)+"-"+sNo.substr(12,2)					
					break;
			} 
		switch(sNo.length){
			case 15: if (isdate(tmp_checkdate)) {return true}
			case 18: if (isdate(tmp_checkdate)) {return true}
			}
		return false
	}
	
/* 检测指定文本框输入是否合法 */
function verifyInput(input)
{
var image;
var i;
var error = false;
/* 长度校验 */
if (strlength(input.value)>parseInt(input.maxsize))
{
alert(input.chname+"超出最大长度"+input.maxsize+",请重新填写...");
error = true;
}
else
/* 非空校验 */
if (input.nullable=="no"&&isnull(input.value))
{
alert(input.chname+"不能为空");
error = true;
}
else
{
/* 数据类型校验 */
switch(input.datatype)
{
case "number": if (isnumber(input.value)==false)
{
alert(input.chname+"值应该全为数字,请重新填写...");
error = true;
}
break;
/* 电子邮件 */
case "email": if (isemail(input.value)==false)
{
alert(input.chname+"值不是电子邮件格式,请重新填写...");
error = true;
}
break;

/* 日期 */

case "datetime": if (isdate(input.value)==false)
{
alert(input.chname+"值不是日期格式,请重新填写...");
error = true;
}
break;
/* 比较日期 */
case "comparetime": if (isdate(input.value)==false)
{
alert(input.chname+"值不是日期格式,请重新填写...");
error = true;
}
else
{
var firstname
var firstchname
var firstvalue
firstname = input.compareto;
firstvalue=eval("document.form."+firstname+".value");
firstchname=eval("document.form."+firstname+".chname");
if ( checkDateEarlier(firstvalue,input.value)==false)
{
alert(input.chname+"比"+firstchname+"早");
error = true;

}
}
break;
/*两数据比较如密码*/
/* 身份证 */
case "chinaidcard": if (isChinaIDCard(input.value)==false)
{
alert(input.chname+"值不是身份证格式,请重新填写...");
error = true;
}
break;

/* 在这里可以添加多个自定义数据类型的校验判断 */
/*  case datatype1: ... ; break;        */
/*  case datatype2: ... ; break;        */
/*  ....................................*/
default		: break;
}
}
/* 根据有无错误设置或取消警示标志 */
if (error)
{
return false;
}
else
{
return true;
}
}

/* 检测指定FORM表单所有应被检测的元素
（那些具有自定义属性的元素）是否合法，此函数用于表单的onsubmit事件 */
function verifyAll(myform)
{
var i;
for (i=0;i<myform.elements.length;i++)
{
 /* 非自定义属性的元素不予理睬 */
if (myform.elements[i].chname+""=="undefined") continue;
/* 校验当前元素 */
if (verifyInput(myform.elements[i])==false)
{
myform.elements[i].focus();
return false;
}
}
return true;
}
