﻿//校验字符型
function validateByte(field) {
	var bValid = true;
	if ((field.type == 'hidden' ||
		field.type == 'text' ||
		field.type == 'textarea' ||
		field.type == 'select-one' ||
		field.type == 'radio')) {//&& field.disabled == false
		
		var value = '';
		// get field's value
		if (field.type == "select-one") {
			var si = field.selectedIndex;
			if (si >= 0) {
			    value = field.options[si].value;
			}
		} else {
			value = field.value;
		}
		if (value.length > 0) {
			if (!isAllDigits(value)) {
				bValid = false;
			} else {			
				var iValue = parseInt(value);
				if (isNaN(iValue) || !(iValue >= -128 && iValue <= 127)) {
					bValid = false;
				}
			}
		}	
	}
	return bValid;
}
//校验日期
function validateDate(field, datePattern) {
   var bValid = true;

   var value = field.value;
   // try loose pattern
   if (datePattern == null)
       datePattern = "yyyy-MM-dd";//默认日期格式
   if ((field.type == 'hidden' ||
        field.type == 'text' ||
        field.type == 'textarea') &&
       (value.length > 0) && (datePattern.length > 0)//&& field.disabled == false
       ) {
         var MONTH = "MM";
         var DAY = "dd";
         var YEAR = "yyyy";
         var orderMonth = datePattern.indexOf(MONTH);
         var orderDay = datePattern.indexOf(DAY);
         var orderYear = datePattern.indexOf(YEAR);
         if ((orderDay < orderYear && orderDay > orderMonth)) {
             var iDelim1 = orderMonth + MONTH.length;
             var iDelim2 = orderDay + DAY.length;
             var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
             var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
             if (iDelim1 == orderDay && iDelim2 == orderYear) {
                dateRegexp = new RegExp("^(\\d{2})(\\d{1,2})(\\d{4})$");
             } else if (iDelim1 == orderDay) {
                dateRegexp = new RegExp("^(\\d{2})(\\d{1,2})[" + delim2 + "](\\d{4})$");
             } else if (iDelim2 == orderYear) {
                dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{1,2})(\\d{4})$");
             } else {
                dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{1,2})[" + delim2 + "](\\d{4})$");
             }
             var matched = dateRegexp.exec(value);
             if(matched != null) {
                if (!isValidDate(matched[2], matched[1], matched[3])) {                   
                   bValid =  false;
                }
             } else {
                bValid =  false;
             }
         } else if ((orderMonth < orderYear && orderMonth > orderDay)) {
             var iDelim1 = orderDay + DAY.length;
             var iDelim2 = orderMonth + MONTH.length;
             var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
             var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
             if (iDelim1 == orderMonth && iDelim2 == orderYear) {
                 dateRegexp = new RegExp("^(\\d{2})(\\d{1,2})(\\d{4})$");
             } else if (iDelim1 == orderMonth) {
                 dateRegexp = new RegExp("^(\\d{2})(\\d{1,2})[" + delim2 + "](\\d{4})$");
             } else if (iDelim2 == orderYear) {
                 dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{1,2})(\\d{4})$");
             } else {
                 dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{1,2})[" + delim2 + "](\\d{4})$");
             }
             var matched = dateRegexp.exec(value);
             if(matched != null) {
                 if (!isValidDate(matched[1], matched[2], matched[3])) {                     
                     bValid =  false;
                  }
             } else {
                 bValid =  false;
             }
         } else if ((orderMonth > orderYear && orderMonth < orderDay)) {
             var iDelim1 = orderYear + YEAR.length;
             var iDelim2 = orderMonth + MONTH.length;
             var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
             var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
             if (iDelim1 == orderMonth && iDelim2 == orderDay) {
                 dateRegexp = new RegExp("^(\\d{4})(\\d{1,2})(\\d{2})$");
             } else if (iDelim1 == orderMonth) {
                 dateRegexp = new RegExp("^(\\d{4})(\\d{1,2})[" + delim2 + "](\\d{2})$");
             } else if (iDelim2 == orderDay) {
                 dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{1,2})(\\d{2})$");
             } else {
                 dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{1,2})[" + delim2 + "](\\d{2})$");
             }
             var matched = dateRegexp.exec(value);
             if(matched != null) {
                 if (!isValidDate(matched[3], matched[2], matched[1])) {
                     bValid =  false;
                 }
             } else {
                  bValid =  false;
             }
         } else {
             bValid =  false;
         }   
   }
   return bValid;
}

function isValidDate(day, month, year) {
  if (month < 1 || month > 12) {
        return false;
    }
    if (day < 1 || day > 31) {
        return false;
    }
    if ((month == 4 || month == 6 || month == 9 || month == 11) &&
        (day == 31)) {
        return false;
    }
    if (month == 2) {
        var leap = (year % 4 == 0 &&
           (year % 100 != 0 || year % 400 == 0));
        if (day>29 || (day == 29 && !leap)) {
            return false;
        }
    }
    return true;
}
//校验Email
function validateEmail(field) {
    var bValid = true;

    if ((field.type == 'hidden' || 
         field.type == 'text' ||
         field.type == 'textarea') &&
        (field.value.length > 0)) {//&& field.disabled == false
        if (!checkEmail(field.value)) {            
            bValid = false;
        }
    }
    return bValid;
}

function checkEmail(emailStr) {
   if (emailStr.length == 0) {
       return true;
   }
   var emailPat=/^(.+)@(.+)$/;
   var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
   var validChars="\[^\\s" + specialChars + "\]";
   var quotedUser="(\"[^\"]*\")";
   var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
   var atom=validChars + '+';
   var word="(" + atom + "|" + quotedUser + ")";
   var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
   var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
   var matchArray=emailStr.match(emailPat);
   if (matchArray == null) {
       return false;
   }
   var user=matchArray[1];
   var domain=matchArray[2];
   if (user.match(userPat) == null) {
       return false;
   }
   var IPArray = domain.match(ipDomainPat);
   if (IPArray != null) {
       for (var i = 1; i <= 4; i++) {
          if (IPArray[i] > 255) {
             return false;
          }
       }
       return true;
   }
   var domainArray=domain.match(domainPat);
   if (domainArray == null) {
       return false;
   }
   var atomPat=new RegExp(atom,"g");
   var domArr=domain.match(atomPat);
   var len=domArr.length;
   if ((domArr[domArr.length-1].length < 2) ||
       (domArr[domArr.length-1].length > 3)) {
       return false;
   }
   if (len < 2) {
       return false;
   }
   return true;
}
//校验浮点型数据
function validateFloat(field)
{
    var bValid = true;
    if ((field.type == 'hidden' ||
		field.type == 'text' ||
        field.type == 'textarea' ||
        field.type == 'select-one' ||
        field.type == 'radio') &&
        (field.value.length > 0)) {//&& field.disabled == false
        var value = '';
        // get field's value
        if (field.type == "select-one") {
            var si = field.selectedIndex;
            if (si >= 0) {
               value = field.options[si].value;
            }
        }else{
            value = field.value;
        }
        var partrn=/^[-\+]?\d+(\.\d+)?$/;
        if (!partrn.test(value)) {
            bValid = false;
        }
    }
	return bValid;
}

function validateFloatRange(field, fMin, fMax) {
    var bValid = true;
    if(!fMin){
    	fMin =Number.NEGATIVE_INFINITY;
    }
    if(!fMax){
    	fMax =Number.POSITIVE_INFINITY;
    }
    if ((field.type == 'hidden' ||
        field.type == 'text' ||
        field.type == 'textarea' ||
        field.type == 'select-one' ||
        field.type == 'radio') &&
        (field.value.length > 0)) {//&& field.disabled == false
        var value = '';
        // get field's value
        if (field.type == "select-one") {
            var si = field.selectedIndex;
            if (si >= 0) {
               value = field.options[si].value;
            }
        }else{
            value = field.value;
        }       
        var fValue = parseFloat(value);
        if(isNaN(fValue)){
        	  bValid = false;
        }
        else if (!(fValue >= fMin && fValue <= fMax)) {            
            bValid = false;
        }
    }
    return bValid;
}
//校验整型数据
function validateInteger(field)
{
	var bValid = true;
	if ((field.type == 'hidden' ||
		field.type == 'text' ||
        field.type == 'textarea' ||
        field.type == 'select-one' ||
        field.type == 'radio') &&
        (field.value.length > 0)) {//&& field.disabled == false
        var value = '';
        // get field's value
        if (field.type == "select-one") {
            var si = field.selectedIndex;
            if (si >= 0) {
               value = field.options[si].value;
            }
        }else{
            value = field.value;
        }
        if (!isAllDigits(value)) {
            bValid = false;
        }else{
        	var iValue = parseInt(value);
			bValid = !(isNaN(parseInt(value))|| iValue < -2147483648 || iValue > 2147483647);
		}
    }
    return bValid;
}

function validateIntRange(field, fMin, fMax) {
    var bValid = true;
    if(!fMin){
    	fMin =-2147483648;
    }
    if(!fMax){
    	fMax =2147483647;
    }
    if ((field.type == 'hidden' ||
        field.type == 'text' || field.type == 'textarea') &&
        (field.value.length > 0)) {//&& field.disabled == false        
        var fValue = parseInt(field.value);
        if(isNaN(fValue)){
        	  bValid = false;
        }
        else if (!(fValue >= fMin && fValue <= fMax)) {            
            bValid = false;
        }
    }
    return bValid;
}
function isAllDigits(argvalue) {
    argvalue = argvalue.toString();
    var validChars = "0123456789";
    var startFrom = 0;
    if (argvalue.substring(0, 2) == "0x") {
       validChars = "0123456789abcdefABCDEF";
       startFrom = 2;
    } else if (argvalue.charAt(0) == "O") {
       validChars = "01234567";
       startFrom = 1;
    } else if (argvalue.charAt(0) == "-") {
        startFrom = 1;
    }

    for (var n = startFrom; n < argvalue.length; n++) {
        if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) return false;
    }
    return true;
}
//校验短整型
function validateShort(field) {
    var bValid = true;
    
    if ((field.type == 'hidden' ||
        field.type == 'text' ||
        field.type == 'textarea' ||
        field.type == 'select-one' ||
        field.type == 'radio')) {//&& field.disabled == false

        var value = '';
        // get field's value
        if (field.type == "select-one") {
            var si = field.selectedIndex;
            if (si >= 0) {
                value = field.options[si].value;
            }
        } else {
            value = field.value;
        }

        if (value.length > 0) {
            if (!isAllDigits(value)) {
                bValid = false;
            } else {
                var iValue = parseInt(value);
                if (isNaN(iValue) || !(iValue >= -32768 && iValue <= 32767)) {
                    bValid = false;
                }
           }
       }
    }
    return bValid;
}
//模式匹配
function validateMask(field, maskstr) {
    var bValid = true;
    
    if ((field.type == 'hidden' ||
        field.type == 'text' ||
        field.type == 'textarea' ||
		    field.type == 'file') &&
        (field.value.length > 0)) {//&& field.disabled == false
		var mask = new RegExp(maskstr, "i");
        if (!matchPattern(field.value, mask)) {
            bValid = false;
        }
    }
    return bValid;
}

function matchPattern(value, mask) {
   return mask.exec(value);
}
//电话号码
function validateTelephone(field){
	var a = validateMask(field, "^0(\\d{2})[-](\\d{8})$");
	if(a){
		a = validateMask(field, "^0(\\d{3})[-](\\d{7})$");
	}
	var bValid = !a;
	return bValid;
}
//手机号码
function validateMobile(field){
	var a = validateMask(field, "^[1-9](\\d{10})$");
	var bValid = !a;
	return bValid;
}
//校验必输项
function validateRequired(field) {
    var bValid = true;    
    if ((field.type == 'hidden' ||
        field.type == 'text' ||
        field.type == 'textarea' ||
        field.type == 'file' ||
        field.type == 'checkbox' ||
        field.type == 'select-one' ||
        field.type == 'password') &&
        field.disabled == false) {

        var value = '';
        // get field's value
        if (field.type == "select-one") {
            var si = field.selectedIndex;
            if (si >= 0) {
                value = field.options[si].value;
            }
        } else if (field.type == 'checkbox') {
            if (field.checked) {
                value = field.value;
            }
        } else {
            value = field.value;
        }

        if (trim(value).length == 0) {
            bValid = false;
        }
    } else if (field.type == "select-multiple") { 
        var numOptions = field.options.length;
        lastSelected=-1;
        for(loop=numOptions-1;loop>=0;loop--) {
            if(field.options[loop].selected) {
                lastSelected = loop;
                value = field.options[loop].value;
                break;
            }
        }
        if(lastSelected < 0 || trim(value).length == 0) {            
            bValid=false;
        }
    } else if ((field.length > 0) && (field[0].type == 'radio' || field[0].type == 'checkbox')) {
        isChecked=-1;
        for (loop=0;loop < field.length;loop++) {
            if (field[loop].checked) {
                isChecked=loop;
                break; // only one needs to be checked
            }
        }
        if (isChecked < 0) {            
            bValid=false;
        }
    }
    return bValid;
}
function trim(s) {
    return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );
}
//校验长度
function validateLength(field, minLength, maxLength) {
    var bValid = true;
    if(isNaN(parseInt(minLength))){
    	  minLength=0;
    }
    if(isNaN(parseInt(maxLength))){
    	  maxLength=2000;
    }
    if ((field.type == 'hidden' ||
        field.type == 'text' ||
        field.type == 'password' ||
        field.type == 'textarea') &&field.value.length>0) {//&& field.disabled == false
        var value=trim(field.value);
        if ((value.length < minLength) || (value.length > maxLength)) {            
            bValid = false;
        }
    }
    return bValid;
}
//取得一个输入框中的数字，返回float
function getFloat(obj){
  if (!obj){
    return (new float(0));
  }
  if (!obj.value){
    return (new float(0));
  }
  if (isNaN(obj.value)){
    return (new float(0));
  }
  var sObj = new String(obj.value);
  if (sObj.length<=0){
    return (new float(0));
  }
  return parseFloat(obj.value);
}

function getInt(obj){
  if (!obj){
    return 0;
  }
  if (!obj.value){
    return 0;
  }
  if (isNaN(obj.value)){
    return 0;
  }
  var sObj = new String(obj.value);
  if (sObj.length<=0){
    return 0;
  }
  return parseFloat(obj.value);
}

function checkEmpty(obj)
{
    if((obj.value==null)||(obj.value.length)==0||trim(obj.value)=="")
    {
      return (false);
    }
    return (true);
}
//比较数字
function compareNumber(value1, op, value2)
{
    switch (operator) {
		case "ne":
			return (value1 != value2);
		case "gt":
			return (value1 > value2);
		case "ge":
			return (value1 >= value2);
		case "lt":
			return (value1 < value2);
		case "le":
			return (value1 <= value2);
		default:
			return (value1 == value2);            
	}
}

function comparedate(objstartdate,objenddate)
{
   if (objstartdate.value!="" && objenddate.value!="") {
        var startyear;
        var endyear;
        var startmonth;
        var endmonth;
        var startday;
        var endday;
        var temp;
        var strlen;
        temp=objstartdate.value;
        strlen=temp.length;
        startyear=temp.substring(0,4);
        temp=temp.substring(5,strlen);
        var temp1;
        temp1=temp.indexOf("-");
        startmonth=temp.substring(0,temp1);
        var temp2;
        temp2=temp.indexOf("-");
        startday=temp.substring(temp2+1,strlen);
        var firdate=new Date(startyear,startmonth,startday);
        temp=objenddate.value;
        strlen=temp.length;
        endyear=temp.substring(0,4);
        temp=temp.substring(5,strlen);
        temp1=temp.indexOf("-");
        endmonth=temp.substring(0,temp1);
        temp2=temp.indexOf("-");
        endday=temp.substring(temp2+1,strlen);
        var seconddate=new Date(endyear,endmonth,endday);
        if(seconddate<firdate){
          return false;
        }else{
          return true;
        }
    }else{
       return true;
    }
 }
 