﻿/* 通用验证函数 */

// 验证错误处理
function doInvalid(obj, msg) {
	if (msg != null) alert(msg);
	if (obj != null) obj.focus();
}

// 验证是否为空
function checkEmpty(obj, msg) {
	if (obj == null) return false;
	if (trim(obj.value) == "") {
		doInvalid(obj, msg);
		return false;
	}
  	return true;
}

// 验证文本长度
function checkLength(obj, msg, max, min) {
	if (obj == null) return false;
	if (max != null && obj.value.length > max) {
		doInvalid(obj, msg);
		return false;
	}
	if (min != null && obj.value.length < min) {
		doInvalid(obj, msg);
		return false;
	}
  	return true;
}

// 验证是否全为数字
function checkNumber(obj, msg) {
	if (obj == null) return false;
	var str = obj.value;
	for (var i = 0; i < str.length; i++){
		if (str.charAt(i) < '0' || str.charAt(i) > '9'){
			doInvalid(obj, msg);
			return false;
		}
	}
    return true;
}

function checkNum(str) {
	if (str == null) return false;
	for (var i = 0; i < str.length; i++){
		if (str.charAt(i) < '0' || str.charAt(i) > '9'){
			return false;
		}
	}
    return true;
}

// 验证是否全为字母
function checkLetter(obj, msg) {
	if (obj == null) return false;
	var str = obj.value;
	for(var i = 0; i < str.length; i++) {
		if ((str.charAt(i) > 'Z' && str.charAt(i) < 'a') || str.charAt(i) < 'A' || str.charAt(i) > 'z') {
			doInvalid(obj, msg);
			return false;
		}
	}
    return true;
}

// 验证是否为整数
function checkInteger(obj, msg) {
	if (obj == null) return false;
	var str = obj.value;
	for (var i = 0; i < str.length; i++) {
		ch = str.charAt(i);
		if (i == 0 && ch == '-') {
			continue;
		}
		if (ch < '0' || ch > '9') {
			doInvalid(obj, msg);
			return false;
		}
	}
    return true;
}

// 验证是否为浮点数
function checkFloat(obj, msg) {
	if (obj == null) return false;
	var str = obj.value;
	var bDot = false;
	for (var i = 0; i < str.length; i++) {
		ch = str.charAt(i);
		if (i == 0 && ch == '-') {
			continue;
		}
		if (ch == "." && !bDot) {
			bDot = true;
			continue;
		}
		if (ch < "0" || ch > '9') {
			doInvalid(obj, msg);
			return false;
		}
	}
    return true;
}

// 验证是否为合法的日期
function checkDate(obj, msg) {
	if (obj == null) return false;
	var str = obj.value;
	if (str.length != 10) {
		doInvalid(obj, msg);
		return false;
	}
	if (!checkNum(str.substring(0,4))) {
		doInvalid(obj, msg);
		return false;
	}
	if (str.substring(4,5) != "-" && str.substring(4,5) != "/" && str.substring(4,5) != ".") {
		doInvalid(obj, msg);
		return false;
	}
	if (!checkNum(str.substring(5,7)) || Number(str.substring(5,7)) > 12) {
		doInvalid(obj, msg);
		return false;
	}
	if (str.substring(7,8) != "-" && str.substring(7,8) != "/" && str.substring(7,8) != ".") {
		doInvalid(obj, msg);
		return false;
	}
	if (!checkNum(str.substring(8,10)) || Number(str.substring(8,10)) > 31) {
		doInvalid(obj, msg);
		return false;
	}
	return true;
}

// 验证是否为合法的身份证号码
function checkID(obj, msg, birthday, gender) {
	if (obj == null) return false;
	var str = obj.value;
	if (str.length != 15 && str.length != 18) {
		doInvalid(obj, msg);
		return false;
	}
	for (var i = 0; i < str.length; i++){
		if (str.charAt(i) < '0' || str.charAt(i) > '9'){
			doInvalid(obj, msg);
			return false;
		}
	}
	if (birthday != null && birthday.length == 10) {
		var ids = "";
		var bs = birthday.substring(2,4) + birthday.substring(5,7) + birthday.substring(8,10);
		if (str.length == 15) {
			ids = str.substring(6,12);
		}
		if (str.length == 18) {
			ids = str.substring(8,14);
		}	
		if (ids != bs) {
			doInvalid(obj, msg);
			return false;
		}			
	}
	if (gender != null && gender > 0) {
		var gs = "";
		if (str.length == 15) {
			gs = str.substring(14,15);
		}
		if (str.length == 18) {
			gs = str.substring(17,18);
		}	
		if (Number(gs % 2) != Number(gender % 2)) {
			doInvalid(obj, msg);
			return false;
		}		
	}
  	return true;
}

// 验证是否为合法的电话号码
function checkPhone(obj, msg) {
	if (obj == null) return false;
	var str = obj.value;
	for (var i = 0; i < str.length; i++) {
		if ((str.charAt(i) < '0' || str.charAt(i) > '9') && str.charAt(i) != '-' && str.charAt(i) != '*' && str.charAt(i) != '(' && str.charAt(i) != ')') {
			doInvalid(obj, msg);
			return false;
		}
	}
    return true;
}

// 验证是否为合法的Email地址
function checkEmail(obj, msg) {
	if (obj == null) return false;
	var str = obj.value;
	var bCheck = true;
	
  	var CHAR_LETTER_NUMERIC = 1;
  	var CHAR_UNDERLINE = 2;
  	var CHAR_DOT = 3;
  	var CHAR_AT = 4;
  	var CHAR_DIVIDE = 5;
  	var CHAR_END = 6;
  	var CHAR_OTHER = 7;
  	var DIV_CHAR = ',';
    
	var exit_flag = false;
	var total_char = str.length;
	var pos = 0;
	var cur_char;
	var cur_status = 0;
	
	while ((pos <= total_char) && (!exit_flag)) {
		if (pos == total_char) {
	    	cur_char = CHAR_END;
	    }
	    else if (str.charAt(pos) == '.') {
	        cur_char = CHAR_DOT;
	    }
	    else if (str.charAt(pos) == DIV_CHAR) {
	        cur_char = CHAR_DIVIDE;
	    }
	    else if (str.charAt(pos) == '_') {
	        cur_char=CHAR_UNDERLINE;
	    }
	    else if (str.charAt(pos) == '@') {
	       	cur_char = CHAR_AT;
	    }
	    else if(((str.charAt(pos) >= 'a') && (str.charAt(pos) <= 'z')) || ((str.charAt(pos) >= 'A') && (str.charAt(pos) <= 'Z')) || ((str.charAt(pos) >= '0') && (str.charAt(pos) <= '9')) || (str.charAt(pos) == '-')) {
	    	cur_char=CHAR_LETTER_NUMERIC;
	    }
	    else {
	    	cur_char = CHAR_OTHER;
	    }
	    switch (cur_status){
	    	case -1://error
	        	bCheck = false;
	            exit_flag = true;
	            break;
	          
			case 0://初始状态
	            if ((cur_char == CHAR_LETTER_NUMERIC) || (cur_char == CHAR_UNDERLINE) || (cur_char == CHAR_DOT)) {
	            	cur_status=1;
	            }
	            else {
	            	bCheck = false;
	              	cur_status = -1;
	            }
	            break;
	        
			case 1://用户名
	            if ((cur_char == CHAR_LETTER_NUMERIC) || (cur_char == CHAR_UNDERLINE) || (cur_char == CHAR_DOT)) {
	            	cur_status = 1;
	            }
	            else if (cur_char == CHAR_AT) {
	            	cur_status = 2;
	            }
	            else {
	              bCheck = false;
	              cur_status = -1;
	            }
	            break;
	        
			case 2://@
	            if (cur_char == CHAR_LETTER_NUMERIC) {
	            	cur_status = 6;
	            }
	            else {
	            	bCheck = false;
	              	cur_status = -1;
	            }
	            break;
	
	        case 6://"."
	        	if (cur_char == CHAR_LETTER_NUMERIC) {
	            	cur_status = 6;
	            }
	            else if (cur_char == CHAR_DOT){
	            	cur_status = 3;
	            }
	            else {
	            	bCheck = false;
	              	cur_status = -1;
	            }
	            break;
	
	        case 3://fisrt domain name
	            if (cur_char == CHAR_LETTER_NUMERIC) {
	            	cur_status = 4;
	            }
	            else {
	            	bCheck = false;
	              	cur_status = -1;
	            }
	            break;
	        
			case 4://not first domain name
	            if (cur_char == CHAR_LETTER_NUMERIC) {
	            	cur_status = 4;
	            }
	            else if (cur_char == CHAR_DOT) {
	              	cur_status = 3;
	            }
	            else if (cur_char == CHAR_DIVIDE) {
	              	cur_status = 0;
	            }
	            else if (cur_char == CHAR_END) {
	              	cur_status = 5;
	            }
	            else {
	              	bCheck = false;
	              	cur_status = -1;
	            }
	            break;
	        
			case 5://ok
	            bCheck = true;
	            exit_flag = true;
	            break;
	        
			default:
	            bCheck = false;
	            exit_flag = true;
	            break;
	    }
	    pos++;
	}
	if (!bCheck) doInvalid(obj, msg);
    return bCheck;
}

// 验证用户名，不能包含部分符号
function checkUsernameExcept(str) {
   	var bCheck = true;
	if (str + "" == "undefined" || str == null){
		bCheck = false;
	}
	else {
		if (str.indexOf("%") != -1) {
				bCheck = false;
		}
		if (str.indexOf("^") != -1) {
				bCheck = false;
		}
		if (str.indexOf("&") != -1) {
				bCheck = false;
		}
		if (str.indexOf("*") != -1) {
				bCheck = false;
		}
		if (str.indexOf("(") != -1) {
				bCheck = false;
		}
		if (str.indexOf(")") != -1) {
				bCheck = false;
		}
		if (str.indexOf("#") != -1) {
				bCheck = false;
		}
		if (str.indexOf("!") != -1) {
				bCheck = false;
		}
	}
	if(!bCheck) alert("用户名不能包含%^&*()#!符号！");
    return bCheck;
}

// 验证用户名，只能为字母或数字或部分符号
function checkUsernameContain(str) {
   	var bCheck = true;
	if (str + "" == "undefined" || str == null){
		bCheck = false;
	}
	else {
		for(var i = 0; i < str.length; i++) {
	    	if (!(str.charAt(i) >= '0' && str.charAt(i) <= '9') && !(str.charAt(i) >= 'a' && str.charAt(i) <= 'z') && !(str.charAt(i) >= 'A' && str.charAt(i) <= 'Z') && str.charAt(i) != '-' && str.charAt(i) != '_' && str.charAt(i) != '@' && str.charAt(i) != '.'&& str.charAt(i) != '#'&& str.charAt(i) != '&') {
	        	bCheck = false;
	            break;
	        }
	    }
	}
	if(!bCheck) alert("用户名只能为A~Z a~z 0~9 - _ @ . # & 符号！");
    return bCheck;
}

// 验证密码，只能为字母或数字
function checkPassword(str) {
   	var bCheck = true;
	if (str + "" == "undefined" || str == null){
		bCheck = false;
	}
	else {
		for(var i = 0; i < str.length; i++) {
	    	if (str.charAt(i) < '0' || (str.charAt(i) > '9' && str.charAt(i) < 'A') || (str.charAt(i) > 'Z' && str.charAt(i) < 'a') || str.charAt(i) > 'z') {
	        	bCheck = false;
	            break;
	        }
	    }
	}
    return bCheck;
}

// 验证是否全为空格
function checkSpace(str) {
	for (var i = 0; i < str.length-1; i++) {
    	if (str.charAt(i) != ' ') {
        	if (str.charAt(i) != 0xa1 || str.chatAt(i+1) != 0xa1) {
            	return false;
			}
            else i++;
        }
	}
    if (str.charAt(i) != ' ') {
    	return false;
	}
    return true;
}

function checkFolderName(str, msg) {
	if (msg == null)
		msg = "文件夹名称";
	var str = trim(str);
	if (str == "" || checkSpace(str)) {
		alert(msg + " 不能为空!");
		return false;
	}
	var c = /[\/\\:\*\?"<>\|]/;
	if (str.match(c) != null) {
		alert(msg + " can not include following characters: / \\ : * ? \" < > |");
		return false;
	}
	var f = /^\w{1}/;
	if (str.match(f) == null) {
		alert(msg + " initial must be following character: 0-9 a/A-z/Z _ ");
		return false;
	}
	return true;
}

var errorMsg = "";
var focusElement = null;
var checkVal = null;

function trim2(val) {
	for(var l=0;l<val.length;) {
		if(val.charAt(l)==' ')
			val=val.substring(1);
		else
			break;
	}
	for(var r=val.length-1;r>0;r--) {
		if(val.charAt(r)==' ')
			val=val.substring(0,val.length-1);
		else
			break;
	}
	return val;
}

function checkFormArg(form) {
	var obj;
	if(isNaN(form))
		obj=eval("document."+form);
	else
		obj=document.forms[form];
	if(typeof(obj)!="object")
		alert("error form！");
	else
		return obj
}

function checkReturn() {
	if(errorMsg!="") {
		alert(errorMsg);
		errorMsg="";
		return false;
	}
	return true;
}

function focusToElement(obj) {
	if(errorMsg!="") {
		obj.select();
		obj.focus();
	}
	focusElement==null;
}

function validateRequired(form,element,argName) {
	with(checkFormArg(form)) {
		element = element.split(",");
		argName = argName.split(",");
		if(element.length!=argName.length) {
			alert("error arg!");
			return;
		}
		for(var i=0;i<element.length;i++) {
			if(trim(eval(element[i]+".value")=="")) {
				errorMsg+=argName[i]+" 不能为空！\n";
				if(focusElement==null) 
					focusElement=element[i];
			}
		}
		focusToElement(eval(focusElement));
	}
	return checkReturn();
}

function validateNumber(form,element,argName) {
	with(checkFormArg(form)) {
		element = element.split(",");
		argName = argName.split(",");
		if(element.length!=argName.length) {
			alert("error arg!");
			return;
		}
		for(var i=0;i<element.length;i++) {		
			if(checkEmpty(eval(element[i]+".value")))
				continue;
			if(isNaN(checkVal)) {
				errorMsg+=argName[i]+" 不是一个有效的数字！\n";
				if(focusElement==null)
					focusElement=element[i];
			}
		}
		focusToElement(eval(focusElement));
	}
	return checkReturn();
}

function validateInt(form,element,argName) {
	with(checkFormArg(form)) {
		if(checkEmpty(eval(element+".value")))
			return;
		if(parseInt(checkVal)!=checkVal) {
			errorMsg+=argName+" 不是一个有效的整数！";
			focusToElement(eval(element));
		}
	}
	return checkReturn();
}

function validateLengthRange(form,element,argName,minLength,maxLength) {
	with(checkFormArg(form)) {
		if(minLength>maxLength) {
			alert("error arg!");
			return;
		}
		if(checkEmpty(eval(element+".value")))
			return;
		if(minLength!=-1) {
			if(checkVal.length<minLength)
				errorMsg+=argName+" 的长度不能小于 "+minLength+"！\n";
		}
		if(maxLength!=-1) {
			if(checkVal.length>maxLength)
				errorMsg+=argName+" 的长度不能大于 "+maxLength+"！\n";
		}
		if(minLength!=-1 && maxLength!=-1) {
			if(errorMsg!="")
				errorMsg=argName+" 的长度必须在 "+minLength+" 到 "+maxLength+" 之间！\n";
		}
		focusToElement(eval(element));
	}
	return checkReturn();
}

function validateValRange(form,element,argName,minValue,maxValue) {
	with(checkFormArg(form)) {
		if(checkEmpty(eval(element+".value")))
			return;
		if(isNaN(checkVal)) 
			errorMsg+=argName+" 不是一个有效数字！\n";
		else {
			if(minValue!=-1) {
				if(checkVal<minValue)
					errorMsg+=argName+" 不能小于 "+minValue+"！\n";
			}
			if(maxValue!=-1) {
				if(checkVal>maxValue)
					errorMsg+=argName+" 不能大于 "+maxValue+"！\n";
			}
			if(minValue!=-1 && maxValue!=-1) {
				if(errorMsg!="")
					errorMsg=argName+" 必须在 "+minValue+" 到 "+maxValue+" 之间！\n";
			}
		}
		focusToElement(eval(element));		
	}
	return checkReturn();	
}

function validateEmail(form,element,argName) {
	with(checkFormArg(form)) {
		if(checkEmpty(eval(element+".value")))
			return;
		var emailPat=/(\w+@\w+\.\w+)(\.{0,1}\w*)(\.{0,1}\w*)/i;
		if(checkVal.match(emailPat)==null) {
			errorMsg+=argName+" 不是一个有效的 E-Mail 格式！";
			focusToElement(eval(element));
		}
	}
	return checkReturn();
}

function validateEquals(form,element1,element2,argName1,argName2) {
	with(checkFormArg(form)) {
		if(trim(eval(element1+".value"))!=trim(eval(element2+".value"))) {
			errorMsg=argName2+" 必须与 "+argName1+" 一致！";
			focusToElement(eval(element2));
		}
	}
	return checkReturn();
}

function validateLink(form,element,argName) {
	with(checkFormArg(form)) {
		if(checkEmpty(eval(element+".value")))
			return;
		var linkPat=/(http:\/\/\w+.\w+\.\w+)(\.{0,1}\w*)(\.{0,1}\w*)/i;
		if(checkVal.match(linkPat)==null) {
			errorMsg+=argName+" 不是一个有效的 连接 格式！";
			focusToElement(eval(element));
		}
	}
	return checkReturn();
}

function validateCheckBox(form,element,argName,minSele,maxSele) {
	with(checkFormArg(form)) {
		var seleCount=0;
		element=eval(element);
		if(typeof(element.length)=="undefined") {
			if(element.checked==true)
				seleCount++;
		}
		else {
			for(var i=0;i<element.length;i++) {
				if(element[i].checked==true)
					seleCount++;
			}
		}
		if(minSele!=-1) {
			if(seleCount<minSele) 
				errorMsg=argName+" 不能选择少于 "+minSele+" 项！\n";	
		}
		if(maxSele!=-1) {
			if(seleCount>maxSele) 
				errorMsg+=argName+" 不能选择多于 "+maxSele+" 项！\n";	
		}
		if(minSele!=-1 && maxSele!=-1) {
			if(errorMsg!="")
				errorMsg=argName+" 必须选择 "+minSele+" 到 "+maxSele+" 之间！"
		}
	}
	return checkReturn();
}

function validateRadio(form,element,argName) {
	with(checkFormArg(form)) {
		var selected=false;
		element=eval(element);
		if(typeof(element.length)=="undefined") {
			if(element.checked==true) {
				selected=true;
				return selected;
			}
		}
		else {
			for(var i=0;i<element.length;i++) {
				if(element[i].checked==true) {
					selected=true;
					return selected;
				}
			}
		}
		if(!selected)
			errorMsg=argName+" 必须选择一项！";
	}
	return checkReturn();
}

function validateSelect(form,element,argName) {
	with(checkFormArg(form)) {
		if(eval(element).selectedIndex==0)
			errorMsg="请选择 "+argName+" ！";
	}
	return checkReturn();
}

function validateDate(form,element,argName) {
	with(checkFormArg(form)) {
		var isDate=true;
		if(checkEmpty(eval(element+".value")))
			return;
		checkVal=checkVal.replace('/','');
		checkVal=checkVal.replace('-','/');
		checkVal=checkVal.replace('-','/');
		if(new Date(checkVal)=="NaN") 
			isDate=false;
		else {
			var newDate=new Date(checkVal);
			var y=newDate.getFullYear();
			var m=newDate.getMonth()+1;
			if(m<10)
				m="0"+m
			var d=newDate.getDate();
			if(d<10)
				d="0"+d
			if((y+"-"+m+"-"+d)!=eval(element+".value")) 
				isDate=false;
		}
		if(isDate==false) {
			errorMsg+=argName+" 不是一个有效的日期,\n日期格式应为 yyyy-mm-dd！";
			focusToElement(eval(element));
		}
	}
	return checkReturn();
}

function validateCompareDateAfter(form,element1,element2,argName1,argName2) {
	if(validateDate(form,element1,argName1)==false)
		return false;
	if(validateDate(form,element2,argName2)==false)
		return false;
	with(checkFormArg(form)) {
		date1=eval(element1+".value");
		date2=eval(element2+".value");
		date1=date1.replace('/','');
		date1=date1.replace('-','/');
		date1=date1.replace('-','/');
		date2=date2.replace('/','');
		date2=date2.replace('-','/');
		date2=date2.replace('-','/');
		if(new Date(date1)>=new Date(date2)) {
			errorMsg = '"' + argName2+'" 必须在 "'+argName1+'" 之后！';
			focusToElement(eval(element2));
		}
	}
	return checkReturn();
}

function validateCompareDateBefore(form,element1,element2,argName1,argName2) {
	if(validateDate(form,element1,argName1)==false)
		return false;
	if(validateDate(form,element2,argName2)==false)
		return false;
	with(checkFormArg(form)) {
		date1=eval(element1+".value");
		date2=eval(element2+".value");
		date1=date1.replace('/','');
		date1=date1.replace('-','/');
		date1=date1.replace('-','/');
		date2=date2.replace('/','');
		date2=date2.replace('-','/');
		date2=date2.replace('-','/');
		if(new Date(date1)>=new Date(date2)) {
			errorMsg = '"' + argName1+'" 必须在 "'+argName2+'" 之前！';
			focusToElement(eval(element1));
		}
	}
	return checkReturn();
}


//input输入值正则表达式处理
function regInput(obj, reg, inputStr) {
  var docSel = document.selection.createRange();
  if (docSel.parentElement().tagName != "INPUT") return false;
  oSel = docSel.duplicate();
  oSel.text = "";
  var srcRange = obj.createTextRange();
  oSel.setEndPoint("StartToStart", srcRange);
  var str = oSel.text + inputStr + srcRange.text.substr(oSel.text.length);
  return reg.test(str);
}

//浮点数限制4位
function doOnKeyPress(obj) {
	return regInput(obj, /^\d*\.?\d{0,4}$/,  String.fromCharCode(event.keyCode));
}

function doOnPaste(obj) {
	return regInput(obj, /^\d*\.?\d{0,4}$/,  window.clipboardData.getData('Text'));
}

function doOnDrop(obj) {
	return regInput(obj, /^\d*\.?\d{0,4}$/,  event.dataTransfer.getData('Text'));
}
