/*email验证
*功能概述：email值可以为空
*modified by wanghe 2008-1-16(该函数原来有语法错误),2008-1-30 验证不全面
*用法：if(!checkTextEmail("email")){
*	    alert("邮箱输入格式不对!");
*	    return false;
*     }
*/
function checkTextEmail(textObj) {
    intextObj = document.all(textObj);
    if (intextObj != undefined) {
    	if(intextObj.value.len()!=0){
			var patrn=/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
			var sInput = intextObj.value;
			if( sInput.search(patrn)==-1){
				 intextObj.select();
				 return false;
			}
		}
		return true;
    }
}

/**
 * 是否数字的验证
 * @param textObj 需要验证的对象
 * @param message 验证失败时显示的警告信息
 */
function checkTextNumber(textObj, message) {
    if (textObj != undefined) {
        var valueStr = textObj.value;
        if (!isNumber(valueStr)) {
            alert(message);
            textObj.focus();
            return false;
        }
        return true;
    }
}

function checkTextFloat(textObj,message){
    if (textObj != undefined) {
        var num = textObj.value;
        if (!(/\d+(\.\d+)?/g.test(num))) {
            alert(message);
            textObj.focus();
            return false;
        }
        return true;
    }
}

/*校验邮政编码（邮编）
 *功能概述：验证是否是正确的邮编格式
 *使用方法：if(!forPostCode(document.getElementById("postalcode"),"validNull","邮政编码")) return false;//邮编为必填项时
 *		或 if(!forPostCode(document.getElementById("postalcode"),"","邮政编码")) return false;//邮编为可填项时
 *add by wanghe 2008-1-16
*/
function forPostCode(obj,validFlag,objChineseName)
{
  var patrn=/^[1-9]{1}(\d){5}$/;
  if(obj==undefined){
  	alert("函数调用错误！");
	return false;
  }
  var sInput = obj.value;
  if(sInput.trim().len()==0&&validFlag.trim()=="validNull"){
  	alert("请输入"+objChineseName+"!");
  	obj.focus();
  	return false;
  }else if(sInput.trim()!=""&&sInput.len()!=6){
  	  alert(objChineseName+"输入长度不正确，应为6位！");
	  obj.select();
	  return false; 
  }else if (!isNumber(sInput)&&sInput.trim()!=""){
  	alert(objChineseName+"格式输入不正确!");
  	obj.select();
  	return false;
  }
  return true;
}

/*
 *验证姓名
 *功能概述：只能输入中文或英文字母
 *使用方法 onblur="retrun checkInForChineseAndChar(document.all.userName,'validNull','用户姓名')"
 *    或  if(!checkInForChineseAndChar(document.all.userName,'validNull','用户姓名')) return false;
 *add 2008-1-16 by wanghe
*/
function checkInForChineseAndChar(obj,validFlag,objName){
	var inputValue=obj.value;
	var post= /^[A-Za-z\u4E00-\u9FA5]+$/;
	if(inputValue.trim().len()==0&&validFlag.trim()=="validNull"){
		alert("请填写"+objName+"!");
		obj.focus();
		return false;
	}else if(!inputValue.match(post)&&inputValue.trim()!=""){
		alert(objName+"只能为汉字或英文字母"+"!");
		obj.select();
		return false;
	}
	return true;
}

/*
 *只能输入数字或英文字母
 *add by wanghe 2007-1-30
 *用法：if(!checkNumAndChar(document.all.loginName,"validNull","系统登陆用户ID")) return false;
*/
function checkNumAndChar(obj,validFlag,objName){
	var inputValue=obj.value;
	var post= /^[A-Za-z0-9]+$/;
	if(inputValue.trim().len()==0&&validFlag.trim()=="validNull"){
		alert("请填写"+objName+"!");
		obj.focus();
		return false;
	}else if(!inputValue.match(post)&&inputValue.trim()!=""){
		alert(objName+"只能为英文字母或数字"+"!");
		obj.select();
		return false;
	}
	return true;
}

/**
 * 是否为空验证
 * @param textObj 需要验证的对象
 * @param message 需要显示的警告信息
 */
function checkTextIsNull(textObj, message) {
    if (textObj != undefined) {
        var valueStr = textObj.value;
        if (valueStr == null || valueStr == "" || trimStr(valueStr) == "") {
            alert(message);
            textObj.focus();
            return false;
        }
        return true;
    }
}

//check框是否有选择
//???
function checkCheckBoxChecked(checkObj) {
    checkObj = document.getElementsByName(checkObj);
    var flg = false;
    for (var i = 0; i < checkObj.length; i++) {
        if (checkObj[i].checked) {
            flg = true;
        }
    }
    if (!flg) {
        checkObj[0].focus();
    }
    return flg;
}

/*校验手机号码：必须以数字开头，除数字外，可含有“-”
*add by wanghe 2008-1-21
*用法：if(!forMobil(document.all.phoneNum,"validNull")) return false;
*/
function forMobil(obj,validFlag)
{
  var patrn=/^((\(\d{3}\))|(\d{3}\-))?1\d{10}$/;
  var sInput = obj.value;
  if(sInput.trim()==""&&validFlag.trim()=="validNull"){
  	alert("手机号码不能为空！");
  	obj.focus();
  	return false;
  }else if(sInput.length!=11&&sInput.trim()!=""){
    alert("手机输入位数不正确");
    obj.select();
  	return false;
  }else if(sInput.search(patrn)==-1&&sInput.trim()!=""){
    alert("手机输入格式不正确");
    obj.select();
  	return false;
  }
 	return true;
}

/*判断固定电话
 *功能概述：校验普通电话、传真号码：可以“+”开头，除数字外，可含有“-”
 *用法：if(!forTel(obj,"validNull","固定电话")) return false;
 *add by wanghe 2008-1-31
*/
function forTel(obj,validFlag,objName){
  var patrn=/^[+]{0,1}((0(\d{2}))?([-]{0,1})([1-9]\d{7})|(0(\d{3}))?([-]{0,1})([1-9]\d{6,7}))$/;
  var sInput = obj.value;
  if(sInput.trim()==""&&validFlag.trim()=="validNull"){
	  alert(objName+"不能为空！");
	  obj.focus();
      return false;
  }else if(sInput.trim()!=""&&sInput.len()>=13){
  	  alert(objName+"输入长度不正确！");
	  obj.select();
	  return false; 
  }else if(sInput.search(patrn)==-1&&sInput.trim()!=""){
	  alert(objName+"格式输入不正确！");
	  obj.select();
	  return false;
  }
 	return true;
}

/*
*add by wanghe 2007-11-14
*功能概述：判断checkbox是否一个都没有选中，如空选给出提示并返回false
*@inparam checkObj :checkboxId
*@inparam message  :要显示的错误信息，例如“请至少选择一个××”
*@outparam false(一个都没有选中) ture(至少有一个选中)
*@outprara alert(message)
*用法：if(!checkBoxNull("checkbox1","请至少选择一项！")) return false;
*/
function checkBoxNull(checkObjName, message) {
    checkObj = document.getElementsByName(checkObjName);
    var flg = false;
    for (var i = 0; i < checkObj.length; i++) {
        if (checkObj[i].checked) {
            flg = true;
        }
    }
    if (!flg) {
        alert(message);
    }
    return flg;
}

/*
*add by wanghe 2007-11-28
*功能概述：子checkbox如果有一个没有被选中，那么“全选”的复选框将被取消
*@inparam checkAllName :全选checkbox的name
*@inparam boxName  :子checkbox的name
*/
function checkBoxChange(checkAllName, boxName) {
    allcheckObj = document.getElementsByName(checkAllName);
    checkObj = document.getElementsByName(boxName);
    var flg = false;
    var j=0;
    for (var i = 0; i < checkObj.length; i++) {
        if (checkObj[i].checked) {
            j++;
        }
    }
    if(j==checkObj.length) flg=true;
    for (var i = 0; i < allcheckObj.length; i++) {
        allcheckObj[i].checked=flg;
    }
}

/*
*add by wanghe 2007-11-28
*功能概述：子checkbox如果有一个没有被选中，那么“全选”的复选框将被取消
*@inparam checkAllName :全选checkbox的name
*@inparam boxName  :子checkbox的name
*/
function cancelAll(objectName) {
    var checkObjList = document.getElementsByName(objectName);
    var checkFlg = true;
    for (var i = 0; i < checkObjList.length; i++) {
        if (checkObjList[i].checked) {
            checkFlg = false;
        }
    }
}

/*
*功能概述：检验输入的四位数字是不是年
*1.首位数字不能为0，2.要求为四位数字
*@inparam objectName
*add by wanghe 2007-12-28
*/
function checkYear(objectValue){
	if(objectValue.len()!=4){
		return false;
	}else if(objectValue.charAt(0)==0){
		return false;
	}
	return true;
}

/**
 * 验证对象value的长度
 * @param txtObj 要验证的输入对象
 * @param len 长度
 * @param message 长度大于验证值时要提示的信息
 */
function checkLegth(txtObj, len, message){
    if(txtObj.value.length>len){
        alert(message);
        txtObj.focus();
        return false;
    }
    return true;
}

//??CheckBox
//??:????????????
//1????CheckBox???ID?????????
//2?????????CheckBox???ID?????all?
//3????CheckBox?OnClick?????clickChecked(this)
function clickChecked(checkboxObj) {
    var checkList = eval("document.all." + checkboxObj.id);
    if (checkboxObj.value == "all") {
        checkList = eval("document.all." + checkboxObj.childid);
        for (var i = 0; i < checkList.length; i++) {
            checkList[i].checked = checkboxObj.checked;
        }
    } else {
        checkList = eval("document.all." + checkboxObj.id);
        eval("document.all." + checkboxObj.id + "all").checked = true;
        for (var i = 0; i < checkList.length; i++) {
            if (!checkList[i].checked) {
                eval("document.all." + checkboxObj.id + "all").checked = false;
            }
        }
    }
}

//??CheckBox???????????????
function formCheckboxAllSelect(checkId) {
    var checkObjList = eval("document.all." + checkId);
    var checkFlg = true;
    for (var i = 0; i < checkObjList.length; i++) {
        if (checkObjList[i].checked) {
            checkFlg = false;
        }
    }
    if (checkFlg) {
        for (var i = 0; i < checkObjList.length; i++)
            checkObjList[i].checked = true;
        eval("document.all." + checkId + "all").checked = true;
    }
}
//?Form?OnSubmit?????
//??????????????????????????????????????ID???
function formSubmit() {
    formCheckboxAllSelect("quiztype");
    formCheckboxAllSelect("cognizelevel");
}

/**
 * 验证输入的字符串是否全是数字
 * @param String 要验证的字符串
 */
function isNumber(String){
    var Letters = "1234567890"; //可以自己增加可输入值
    var i;
    var c;
    for (i = 0; i < String.length; i ++){
        c = String.charAt(i);
        if (Letters.indexOf(c) < 0)
            return false;
    }
    return true;
}

/*
 *校验是否全为正整数，首位不能为零
 *用法：if(!validPositiveInteger(document.all.continueEduTime,"","继续教育学时")) return false;
*/
function validPositiveInteger(obj,validFlag,objName){
	var objValue=obj.value;
	if(objValue==""&&validFlag.trim()=="validNull"){
		alert("请输入"+objName);
		obj.focus();
		return false;
	}else if(objValue.trim()!=""&&objValue.substring(0,1)=="0"){
		alert(objName+"首位不能为零，请重新输入！");
		obj.select();
		return false;
	}else if(objValue.trim()!=""&&!isNumber(objValue)){
		alert(objName+"只能为数字，请重新输入！");
		obj.select();
		return false;
	}
	return true;
}

/*功能概述：通过按键控制，只允许输入数字，其它字符不能输入到文本中
*用法：onKeyPress="return isKeyNumberdot(0)"
*add by wanghe 2007-12-08
*/
function isKeyNumberdot(ifdot)
{
    var s_keycode=(navigator.appname=="Netscape")?event.which:event.keyCode;
	if(ifdot==0)
		if(s_keycode>=48 && s_keycode<=57)
			return true;
		else 
			return false;
    else
    {
		if((s_keycode>=48 && s_keycode<=57) || s_keycode==46)
		{
		      return true;
		}
		else if(s_keycode==45)
		{
		    alert('不允许输入负值,请重新输入!');
		    return false;
		}
		else
			  return false;
    }
}
 
  //求字符串长度
  String.prototype.len=function()
  {
     return this.replace(/[^\x00-\xff]/g,"aa").length; 
  }
 	
  //只剔除两头的空格   中文空不处理
  String.prototype.trim = function()
  {
  	 return this.replace( /^\s*/, "" ).replace( /\s*$/, "" );
  }    
  //剔除左边的空格
  String.prototype.trimL = function()
  {
  	 return this.replace( /^\s*/, "" );
  }
  //剔除右边的空格
  String.prototype.trimR = function ()
  {
  	 return this.replace( /\s*$/, "" );
  }

/*add by wanghe 2007-11-22
*校验上传文件的文件类型
*/ 
	function forUploadFile(obj,fileTypes)
	{
		var fileName = obj.value;
		var flag = 1;
		if(fileName.trim()=="")
		{
			alert("请选择要上传的文件!");
			return false;
		}
		else
		{
			var pos = fileName.lastIndexOf(".");
			if(pos!=-1)
			{
				var suf = fileName.substring(pos+1,fileName.length).toLowerCase();
				var upType =fileTypes.split(",");
				for (var i=0;i<upType.length ;i++)
				{
						if(upType[i]==suf)
						{
						  return true;
						  break;
				        }
			    }
		    }
		 
		    alert("请上传文件后缀名为:"+fileTypes+"的文件");
		    return false;
	    }
 
    }

/*
*判断字符是否是合法的身份证,函数中自带错误时指定位置的方法（select（））
*add by wanghe 2008-1-2
*使用方法：if(!forIdCard(document.all.cardNum)) return false;
*/
function forIdCard(obj)
{
   var Errors=new Array("","号码位数不对!", "号码出生日期超出范围或含有非法字符!", "号码校验错误!", "地区非法!" ); 
   var idcard,Y,JYM; 
   var S,M; 
   var v_name=obj.v_name;

   if(v_name==null)
	   v_name="身份证";
 
   var idcard= obj.value;
   var idcard_array = new Array(); 
   idcard_array = idcard.split(""); 
   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 true; 
       else 
       {
		   alert(  v_name  +    Errors[2] );
           obj.select();
	       return false;
	   }
 
     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 true; //检测ID的校验位 
          else 
		  {
		    alert(   v_name  +    Errors[3] );
            obj.select();
	        return false;
		  }
        } 
      else 
		    alert(   v_name  +    Errors[2] );
	        obj.select();
	        return false;

         break; 
    default: 
		    alert(   v_name  +  Errors[1] );
 	        obj.select();
	        return false;
  } 
}

function trimStr(t){
    return (t||"").replace(/^\s+|\s+$/g, "");
}

/*
*密码和验证密码的校验
*add by wanghe 2008-1-30
*用法：if(!validPassWord(document.all.password,document.all.confirmPassword,"密码","确认密码",6,"六")) return false;
*或：  if(!validPassWord(document.all.password,document.all.confirmPassword,"密码","确认密码",0,"")) return false;//密码可以为空
*/
function validPassWord(passwordObj,confirmPasswordObj,passwordName,confirmPasswordName,minlength,minlengthChineseName,validType){
	passwordValue=passwordObj.value;
	confirmPasswordValue=confirmPasswordObj.value;
	if(passwordValue==""){
		alert(passwordName+"不能为空！");
		passwordObj.focus();
		return false;
	}else if(passwordValue.length<minlength&&minlength!=0){
		alert(passwordName+"不能少于"+minlengthChineseName+"位！");
		passwordObj.select();
		return false;
	}else if(confirmPasswordValue==""){
		alert(confirmPasswordName+"不能为空！");
		confirmPasswordObj.focus();
		return false;
	}else if(confirmPasswordValue.length<minlength){
		alert(confirmPasswordName+"不能少于"+minlengthChineseName+"位！");
		confirmPasswordObj.select();
		return false;
	}else if(passwordValue!=confirmPasswordValue){
		alert(passwordName+"和"+confirmPasswordName+"不相同，请重新输入！");
		passwordObj.value="";
		confirmPasswordObj.value="";
		passwordObj.focus();
		return false;
	}
	return true;
}