﻿/* 检测指定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;
}

/* END by yao */
/* 检测指定文本框输入是否合法 */
function verifyInput(input)
{
	var image;
	var i;
	var error = false;
	/* 长度校验 */
	if (strlen(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 && !isnull(input.value))
			{
				alert(input.chname+"值应该全为数字");
				error = true;
			}
			break;    // 这里无缝通过了，测试数字的时候会顺便测试浮点数，不知道是不是BUG，先修改了（by SNIGIUS）
			
			case "int": 
			if (isInt(input.value,null,null)==false && !isnull(input.value))
			{
				alert(input.chname+"值应该全为数字");
				error = true;
			}
			break;    // 这里无缝通过了，测试数字的时候会顺便测试浮点数，不知道是不是BUG，先修改了（by SNIGIUS）
			
			case "float":
			if(IsFloat(input.value,"+-",0)==false && !isnull(input.value))
			{
				alert(input.chname+"值应该为浮点数");
				error = true;
			}
			break;
			
			case "telephone":
			if(istelnum(input.value)==false && !isnull(input.value) && !isnull(input.value))
			{
				alert(input.chname+"值应该是区号加电话号码为7到11位数字")
				error=true;	
			}
			break;
			
			case "latn":
			if(islatnnum(input.value)==false && !isnull(input.value) && !isnull(input.value))
			{
				alert(input.chname+"值应该是3到4位数字")
				error=true;
			}
			break;
			case "fulltel":
			if(isfulltelnum(input.value)==false && !isnull(input.value))
			{
				alert(input.chname+"值应该是11位数字")
				error=true;
			}
			break;
			case "email":
			if(isEmail(input.value)==false && !isnull(input.value))
			{
				alert(input.chname+"格式不对");
				error=true;
			}
			break;
			case "hanzi":
			if(isHanZi(input.value)==false && !isnull(input.value))
			{
				alert(input.chname+"只能为中文");
				error=true;
			}
			break;
			case "ip":
			if(isIP(input.value)==false && !isnull(input.value))
			{
				alert(input.chname+"格式不对");
				error=true;
			}
			break;
			/* 在这里可以添加多个自定义数据类型的校验判断 */
			/*  case datatype1: ... ; break;        */
			/*  case datatype2: ... ; break;        */
			/*  ....................................*/
			default		: break;
		}
	}
	/* 根据有无错误设置或取消警示标志 */

	if (error)
	{
		//image = document.getElementById("img_"+input.name);
		//image.src="img/warning.gif";
		return false;
	}
	else
	{
		//image = document.getElementById("img_"+input.name);
		//image.src="img/space.gif";
		return true;
	}
}

/*控制float的输出精度位数*/
function floatRound(myFloat,mfNumber)
{
         var cutNumber = Math.pow(10,mfNumber-1);
         return Math.round(myFloat * cutNumber)/cutNumber;
}


/*
用途：检查输入的Email信箱格式是否正确
输入：
strEmail：字符串
返回：
如果通过验证返回true,否则返回false
*/
function isEmail(strEmail) {
//var emailReg = /^[_a-z0-9]+@([_a-z0-9]+\.)+[a-z0-9]{2,3}$/;
var emailReg = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;
if( emailReg.test(strEmail) ){
return true;
}else{
return false;
}
}

/*
================================================================================
验证类函数
================================================================================
*/
function isEmpty(obj)
{
    obj=document.getElementsByName(obj).item(0);
    if(Trim(obj.value)=="")
    {
        alert("字段不能为空。");        
        if(obj.disabled==false && obj.readOnly==false)
        {
            obj.focus();
        }
    }
}
/*
IsFloat(string,string,int or string):(测试字符串,+ or - or empty,empty or 0)
功能：判断是否为浮点数、正浮点数、负浮点数、正浮点数+0、负浮点数+0
*/
function isFloat(objStr,sign,zero)
{
    var reg;    
    var bolzero;    
    if(Trim(objStr)=="")
    {
        return false;
    }
    else
    {
        objStr=objStr.toString();
    }    
    if((sign==null)||(Trim(sign)==""))
    {
        sign="+-";
    }
    if((zero==null)||(Trim(zero)==""))
    {
        bolzero=false;
    }
    else
    {
        zero=zero.toString();
        if(zero=="0")
        {
            bolzero=true;
        }
        else
        {
            alert("检查是否包含0参数，只可为(空、0)");
        }
    }

    switch(sign)
    {
        case "+-":
            //浮点数
            reg=/^((-?|\+?)\d+)(\.\d+)?$/;
            break;
        case "+": 
            if(!bolzero)           
            {
                //正浮点数
                reg=/^\+?(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$/;
            }
            else
            {
                //正浮点数+0
                reg=/^\+?\d+(\.\d+)?$/;
            }
            break;
        case "-":
            if(!bolzero)
            {
                //负浮点数
                reg=/^-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$/;
            }
            else
            {
                //负浮点数+0
                reg=/^((-\d+(\.\d+)?)|(0+(\.0+)?))$/;
            }            
            break;
        default:
            alert("检查符号参数，只可为(空、+、-)");
            return false;
            break;
    }

    var r=objStr.match(reg);
    if(r==null)
    {
        return false;
    }
    else
    {        
        return true;     
    }
}
function isfulltelnum(str)
{
	if(isnumber(str)){
		if(str.length==11) return true;
		else return false;
	}else{
		return false;	
	}		
}
//检查是否为中文

function isHanZi(strHanZi)
{
    if(!strHanZi) return; if(strHanZi=='') return;
    var PatSWord=/^[\x00-\xff]+$/; //匹配所有单字节长度的字符组成的字符串
    var PatDWord=/[^\x00-\xff]+/g; //匹配双字节长度的字符组成的字符串
    if(PatDWord.test(strHanZi)) return true;
    return false;
}
/*
IsInt(string,string,int or string):(测试字符串,+ or - or empty,empty or 0)
功能：判断是否为整数、正整数、负整数、正整数+0、负整数+0
*/
function isInt(objStr,sign,zero)
{
    var reg;    
    var bolzero;    
    if(Trim(objStr)=="")
    {
        return false;
    }
    else
    {
        objStr=objStr.toString();
    }    
    if((sign==null)||(Trim(sign)==""))
    {
        sign="+-";
    }
    if((zero==null)||(Trim(zero)==""))
    {
        bolzero=false;
    }
    else
    {
        zero=zero.toString();
        if(zero=="0")
        {
            bolzero=true;
        }
        else
        {
            alert("检查是否包含0参数，只可为(空、0)");
        }
    }
    switch(sign)
    {
        case "+-":
            //整数
            reg=/(^-?|^\+?)\d+$/;            
            break;
        case "+": 
            if(!bolzero)           
            {
                //正整数
                reg=/^\+?[0-9]*[1-9][0-9]*$/;
            }
            else
            {
                //正整数+0
                //reg=/^\+?\d+$/;
                reg=/^\+?[0-9]*[0-9][0-9]*$/;
            }
            break;
        case "-":
            if(!bolzero)
            {
                //负整数
                reg=/^-[0-9]*[1-9][0-9]*$/;
            }
            else
            {
                //负整数+0
                //reg=/^-\d+$/;
                reg=/^-[0-9]*[0-9][0-9]*$/;
            }            
            break;
        default:
            alert("检查符号参数，只可为(空、+、-)");
            return false;
            break;
    }

    var r=objStr.match(reg);
    if(r==null)
    {
        return false;
    }
    else
    {        
        return true;     
    }
}

/*
用途：校验ip地址的格式
输入：strIP：ip地址
返回：如果通过验证返回true,否则返回false；
*/
function isIP(strIP) {
if (isNull(strIP)) return false;
var re=/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/g //匹配IP地址的正则表达式
if(re.test(strIP))
{
if( RegExp.$1 <256 && RegExp.$2<256 && RegExp.$3<256 && RegExp.$4<256) return true;
}
return false;
}

/* END by SNIGIUS */
/* START by yao */
function islatnnum(str)
{
	if(isnumber(str)){
		if(str.length>=3&&str.length<=4) return true;
		else return false;
	}else{
		return false;	
	}		
}
/*
用途：检查输入手机号码是否正确
输入：
s：字符串
返回：
如果通过验证返回true,否则返回false
*/
function isMobile( s ){
var regu =/^[1][3][0-9]{9}$/;
var re = new RegExp(regu);
if (re.test(s)) {
return true;
}else{
return false;
}
}
/* 检测字符串是否为空 */
function isnull(str)
{
	var i;
	for (i=0;i<str.length;i++)
	{
		if (str.charAt(i)!=' ') return false;
	}
	return true;
}

/* 检测字符串是否全为数字 */
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;
}
/* 检测字符串是否全为电话号码类 */
function isnumber_tel(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;
}

/* 检测字符串是否为合法的电话号码 */
/* START by SNIGIUS */
function istelnum(str)
{
	if(isnumber(str)){
		if(str.length>=7&&str.length<=11) return true;
		else return false;
	}else{
		return false;	
	}		

}
/*使用户只能输入数字*/
　　//alert(iCode);
function onlydigital()
{ 
　　var iCode=event.keyCode;
　　if(((iCode<48)||((iCode>57)&&(iCode<96))||iCode>105)&&((iCode!=8)&&(iCode!=109)&&(iCode!=9)
　　&&(iCode!=229)&&(iCode!=13)&&(iCode!=110)&&(iCode!=190)&&(iCode!=46)&&(iCode!=27))&&((iCode<37)||(iCode>40)))
　　{
　　　	event.returnValue=false;
  　}
}
/* 取得字符串的字节长度 */
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 yhdelete(str){
	str=str.replace('"','\"');
	return str;
}
/*
       名字：Common.js
       功能：通用JavaScript脚本函数库
       包括：
      1.Trim(str)－－去除字符串两边的空格
      2.XMLEncode(str)－－对字符串进行XML编码
      3.ShowLabel(str,str)－－鼠标提示功能（显示字符，提示字符）
      4.IsEmpty(obj)－－验证输入框是否为空
      5.IsInt(objStr,sign,zero)－－验证是否为整数
      6.IsFloat(objStr,sign,zero)－－验证是否为浮点数
      7.IsEnLetter(objStr,size)－－验证是否为26个字母
*/
/*
==================================================================
字符串操作
Trim(string):去除字符串两边的空格
==================================================================
*/
/*
==================================================================
LTrim(string):去除左边的空格
==================================================================
*/
function LTrim(str)
{
    var whitespace = new String(" \t\n\r");
    var s = new String(str);
    if (whitespace.indexOf(s.charAt(0)) != -1)
    {
        var j=0, i = s.length;
        while (j < i && whitespace.indexOf(s.charAt(j)) != -1)
        {
            j++;
        }
        s = s.substring(j, i);
    }
    return s;
}
/*
==================================================================
RTrim(string):去除右边的空格
==================================================================
*/
function RTrim(str)
{
    var whitespace = new String(" \t\n\r");
    var s = new String(str);
    if (whitespace.indexOf(s.charAt(s.length-1)) != -1)
    {
        var i = s.length - 1;
        while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1)
        {
            i--;
        }
        s = s.substring(0, i+1);
    }
    return s;
}
/*
==================================================================
Trim(string):去除前后空格
==================================================================
*/
function Trim(str)
{
    return RTrim(LTrim(str));
}
/*
================================================================================
XMLEncode(string):对字符串进行XML编码
================================================================================
*/
function XMLEncode(str)
{
       str=Trim(str);
       str=str.replace("&","&amp;");
       str=str.replace("<","&lt;");
       str=str.replace(">","&gt;");
       str=str.replace("'","&apos;");
       str=str.replace("\"","&quot;");
       return str;
}
function isUserIdentityCard(id)
{
      var idNum = id;
      //alert(idNum);
      var errors=new Array(
       "验证通过",
       "身份证号码位数不对",
       "身份证含有非法字符",
       "身份证号码校验错误",
       "身份证地区非法","身份证号其它错误"
      );
         //身份号码位数及格式检验
         var re;
         var len = idNum.length;
         //身份证位数检验
         if(len != 15 && len != 18)
         {
         	return errors[1];
         } 
         else if(len == 15)
         {
             re = new RegExp(/^(\d{6})()?(\d{2})(\d{2})(\d{2})(\d{3})$/);
         }else
         {
             re = new RegExp(/^(\d{6})()?(\d{4})(\d{2})(\d{2})(\d{3})([0-9xX])$/);
         }

      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_array = new Array();
        idcard_array = idNum.split("");
      
        //地区检验
        if(area[parseInt(idNum.substr(0,2))]==null) 
        {
         return errors[4];
        }
      
    
        
          //出生日期正确性检验
          var a = idNum.match(re);
        
        if (a != null)
        {
            if (len==15){
              var DD = new Date("19"+a[3]+"/"+a[4]+"/"+a[5]);
              var flag = DD.getYear()==a[3]&&(DD.getMonth()+1)==a[4]&&DD.getDate()==a[5];
            }
            else if(len == 18){
              var DD = new Date(a[3]+"/"+a[4]+"/"+a[5]);
              var flag = DD.getFullYear()==a[3]&&(DD.getMonth()+1)==a[4]&&DD.getDate()==a[5];
            }
        
            if (!flag) {
             return "身份证出生日期不对！";
            }                     
          
            //检验校验位
/*
            if(len == 18)
            {
              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);//判断校验位
            
              //检测ID的校验位
              if(M == idcard_array[17]){
               return errors[5];
              }
              else{
               return errors[3];
              }
       		}
*/         
          }else{
            return errors[2];
          }
          return true;
}
 //登录窗口验证代码
     function showMessageDailog()
    {
        document.getElementById("validMessage").innerHTML="<span style='color:red;'>验证码错误</span>";
    }
    
    function cleanValidMess()
    {
        document.getElementById("validMessage").innerHTML="";
    }
