/* is empty? */
function isEmpty(value){
  if((value===null)||(value.length===0)){
    return(true);
  }
  else{
    return(false);
  }
}
/* at first,check int or real type */
function isBetween(value,lo,hi){
  if((value<lo)||(value>hi)){
    return(false);
  }
  else{
    return(true);
  }
}
/* is a digit? */
function isDigit(value){
  var theMask='0123456789';
  if(isEmpty(value)){
    return(false);
  }
  else if(theMask.indexOf(value)===-1){
    return(false);
  }
  return(true);
}

/* is a int number? */
function isInt(value){
  var flag=true;
  if(isEmpty(value)) flag=false;
  else{
    var index = value.indexOf('-');// 负号如果存在是否在首位
    var from = 0;
    if(index===0){
    //负数
      from = 1;
    }else if(index>0){
      return(false);
    }
    for(var i = from;i<value.length;i++)
      if(isDigit(value.substring(i,i+1))===false){
        flag=false;
        break;
      }
  }
  return(flag);
}

/* is a real? */
function isReal(value,decLen){
  var dot1st=value.indexOf('.');
  var dot2nd=value.lastIndexOf('.');
  var OK=true;
  if(isEmpty(value)) return(false);
  if(dot1st===-1){
    if(!isInt(value)) return(false);
    else return(true);
  }
  else if(dot1st!==dot2nd){
    return(false);
  }
  else{
    var intPart=value.substring(0,dot1st);
    var decPart=value.substring(dot2nd+1);
    if(decPart.length===0){
      return(false);
    }
    else if(decPart.length>decLen){
      return(false);
    }
    else if(!isInt(intPart)||!isInt(decPart)) return(false);
    else return(true);
  }
}

/* 以下6个function会被真正派上用场，它们均带alert信息 */
/* not null string，but its length not limited */
function inputMust(name,value){
  if(isEmpty(value)||value.length===0){
    alert(name+"不能为空 ！");
    return(false);
  }
  else return(true);
}

/* check mail address's validity? */
function validMail(name, value){
  var atIndex=value.indexOf('@');
  var dotIndex=value.indexOf('.',atIndex);
  var flag=true;
  var theSub=value.substring(0,dotIndex+1);
  if((atIndex<1)||(atIndex!==value.lastIndexOf('@'))||(dotIndex<atIndex+2)
    ||(value.length<=theSub.length)){
    flag=false;
    alert(name+"不是有效的Mail地址 ！");
  }
  else
    flag=true;
  return(flag);
}

/* check dir validity? */
function validDir(name,value){
  var flag=true;
  if(value.indexOf('\\')!==-1 || value.indexOf('/')!==-1 ||
    value.indexOf(':')!==-1 || value.indexOf('*')!==-1 ||
    value.indexOf('?')!==-1 || value.indexOf('"')!==-1 ||
    value.indexOf('<')!==-1 || value.indexOf('>')!==-1 ||
    value.indexOf('|')!==-1){
    alert(name+"中不能包含以下字符 :  \\ / : * ? \" < > |");
    flag=false;
  }
  return(flag);
}

/* is a date type? should be entered seperatedly */
function validDate(year_name,year_value,month_name,month_value,day_name,day_value){
  var maxDays=31;
  if(!isInt(year_value)||!isInt(month_value)||!isInt(day_value)){
    alert(year_name+"、"+month_name+"、"+day_name+"必须是整数。");
    return(false);
  }
  if(!(isBetween(year_value,1800,3000))){
    alert(year_name+"必须在1800与3000之间 ！");
    return(false);
  }
  if(!(isBetween(month_value,1,12))){
    alert(month_name+"必须在1与12之间 ！");
    return(false);
  }

  if(month_value===4||month_value===6||month_value===9||month_value===11){
    maxDays=30;
  }
  else if(month_value===2){
    if(year_value%4>0)  maxDays=28;
    else if(year_value%100===0&&year_value%400>0)  maxDays=28;
    else  maxDays=29;
  }
  if(!(isBetween(day_value,1,maxDays))){
    alert(day_name+"必须在1与"+maxDays+"之间 ！");
    return(false);
  }
  return(true);
}

/* check a string's length,lowLength can be 0,means this strng can be empty,but when input,its length can't be more than highLength. */
function strLengthBetween(name,value,lowLength,highLength){
  if(lowLength===0){
    if(!isBetween(value.length,lowLength,highLength)){
      alert(name+"不能超过"+highLength+"个字符。");
      return(false);
    }
  }
  else{
    if(!isBetween(value.length,lowLength,highLength)){
      alert(name+"的字符个数必须在"+lowLength+"与"+highLength+"之间。");
      return(false);
    }
  }
  return(true);
}

/* check a int number's length */
function intValueBetween(name,value,lowLength,highLength){
  if(!isInt(value)){
    alert(name+"不是一个有效的整数 ！");
    return(false);
  }
  if(!isBetween(value,lowLength,highLength)){
    alert(name+"必须在"+lowLength+"与"+highLength+"之间。");
    return(false);
  }
  return(true);
}

/* check a real number's length */
function realValueBetween(name,value,lowLength,highLength,decLen){
  if(!isReal(value,decLen)){
    alert(name+"不是一个有效的实数（最多"+decLen+"位小数）！");
    return(false);
  }
  if(!isBetween(value,lowLength,highLength)){
    alert(name+"必须在"+lowLength+"与"+highLength+"之间。");
    return(false);
  }
  return(true);
}

function isTelephoneNumber(value){
  var theMask='0123456789*#,+';
  var flag = true;
  if(isEmpty(value)){
    return(true);
  }
  for(var i=0;i<value.length;i++){
    if(theMask.indexOf(value.substring(i,i+1))===-1){
      flag=false;
      break;
    }
  }
  return(flag);
}

function isLetters(value){
  if(isEmpty(value)){
    return(false);
  }
  var theMask="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  theMask = theMask + "abcdefghijklmnopqrstuvwxyz";
  theMask = theMask + "0123456789_";
  var flag = true;
  for(var i=0;i<value.length;i++){
    if(theMask.indexOf(value.substring(i,i+1))===-1){
      flag=false;
      break;
    }
  }
  return(flag);
}

function getRadioValue(radio) {
    if(radio===null||radio.length===null){
        return;
    }
    var value = null;
    for (var i=0; i<radio.length; i++) {
        if (radio[i].checked) {
            value = radio[i].value;
            break ;
        }
    }
    return value;
}

function clearRadio(radio){
    if(radio===null||radio.length===null){
        return;
    }
    for (var i=0; i < radio.length; i++) {
        radio[i].checked = false;
    }
}

function getSelectValue(select){
    if(select===null||select.length===null){
        return "";
    }
    var value = null;
    for (var i=0; i<select.length; i++) {
        if (select.options[i].selected) {
            value = select.options[i].value;
            break;
        }
    }
    return value;
}

function getSelectValues(select){
    if(select===null||select.length===null){
        return "";
    }
  var value = "";
  for (var i=0; i<select.length; i++) {
    if (select.options[i].selected) {
      value += select.options[i].value;
      value += ",";
      break;
    }
  }
  if(value.length>0){
    return value.substring(0, value.length-1);
  }
  return "";
}

function getSelectText(select){
    if(select===null||select.length===null){
        return;
    }
  var value = null;
  for (var i=0; i<select.length; i++) {
    if (select.options[i].selected) {
      value = select.options[i].text;
      break;
    }
  }
  return value;
}

/*建议改名为setSelectIndex*/
function setSelectIndex(select, index){
    if(select===null||select.length===null||index<0||index>=select.length){
        return;
    }
    select.options[index].selected = true;
}

function setSelectValue(select, value){
    if(select===null||select.length===null){
        return;
    }
    for(var i=0;i<select.length;i++){
        if(select.options[i].value===value){
            select.options[i].selected = true;
        }
    }
}

function setSelectText(select, text){
    if(select===null||select.length===null){
        return;
    }
    for(var i=0;i<select.length;i++){
        if(select.options[i].text===text){
            select.options[i].selected = true;
        }
    }
}

function isCardNumber(value){
  var theMask='0123456789';
  var flag = true;
  if(isEmpty(value))
    return(true);
  for(var i=0;i<value.length;i++){
    if(theMask.indexOf(value.substring(i,i+1))===-1){
      flag=false;
      break;
    }
  }
  return(flag);
}

/*检查字符串是否以字母开始*/
function isLetterStart(value){
  var theMask="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  theMask = theMask + "abcdefghijklmnopqrstuvwxyz";
  var flag = true;
  if(!isLetters(value)){
    flag = false;
  }else{
    if(theMask.indexOf(value.substring(0,1))===-1){
      flag=false;
    }
  }
  return(flag);
}

/**
 * 群讯通浙江铁通版电话号码
 * 固定电话需要区号，手机前不需加0。
 * 判断电话号码是否满足：固定电话需要区号，手机前不需加0。
 * 满足返回true，不满足返回false。
 * 建议将isZjcrcTelephone改一下，非通用名称
 */
function isZjcrcTelephone(value){
  if(isEmpty(value)){
    return (true);
  }
  if(isTelephoneNumber(value)){
    // 013
    if(value.indexOf("013")===0)
      return (false);
    // 非手机号码，首字符非13
    if(value.indexOf("13")!==0)
    //固定电话
      if(value.indexOf("0")!==0)
        //固定电话首位非0
        return (false);
    return (true);
  }
  return (false);
}
/*2004-10-22*/
function change2isZjcrcTelephone(value, area_code){
  if(!isTelephoneNumber(value)){
    return value;
  }
  if(value.indexOf("013")===0){
    alert("手机号码"+value+"前不需加0，自动去除。");
    var val = value.substring(1, value.length);
    return (val);
  }
  // 非手机号码，首字符非13
  if(value.indexOf("13")!==0){
    //固定电话
    if(value.indexOf("0")!==0){
      //固定电话首位非0
      if (confirm("固定电话需要区号，自动添加区号“"+area_code+"”?")){
        var val = area_code+value;
        return (val);
      }else{
        return ("");
      }
    }
  }
  return (true);
}
/*2004-10-22*/
function checkZjcrcTelephone(obj, area_code){
  if(!isZjcrcTelephone(obj.value)){
    if(!isTelephoneNumber(obj.value)){
      alert("不正确的号码（号码中包含非法字符）。");
      obj.focus();
      return (false);
    }
    value = change2isZjcrcTelephone(obj.value, area_code);
    if(value.length===0){
      obj.focus();
      return (false);
    }
    obj.value = value;
  }
  return (true);
}

function checkTelephoneNumber(obj){
  if(!isTelephoneNumber(obj.value)){
    obj.focus();
    alert("不正确的号码（号码中包含非法字符）。");
    return (false);
  }
  return (true);
}
/*中国大陆的邮政编码*/
function isChinaZip(value){
  if(isEmpty(value))
    return (true);
  var iLength = value.length;
  if(iLength !== 6)
    return (false);
  var theMask='0123456789';
  var flag = true;
  for(var i=0;i<iLength;i++)
    if(theMask.indexOf(value.substring(i,i+1))===-1){
      flag=false;
      break;
    }
  return (flag);
}
/*add token string*/
function addToken(url, token){
  if(url.indexOf("?")===-1){
    url += "?";
  }else if(url.indexOf("&")===-1){
    url += "&";
  }
  if((url.indexOf("?" + token + "=")===-1) //"?f="不存在
  || (url.indexOf("&" + token + "=")===-1)){//"&f="不存在
    url += token; //
    url += "=";
    url += Math.round(Math.random()*10000);
  }
  return url;
}

/*短时间，形如 (13:04:06)*/
function isTime(str){
    var a = str.match(/^(\d{1,2})(:)?(\d{1,2})\2(\d{1,2})$/);
    if (a === null) {
        return false;
    }
    if (a[1]>24 || a[3]>60 || a[4]>60){
        return false;
    }
    return true;
}

/*短时间，形如 (13:04)*/
function isTime2(str){
    var a = str.match(/^(\d{1,2})(:)?(\d{1,2})$/);
    if (a === null) {
        return false;
    }
    if (a[1]>24 || a[3]>60){
        return false;
    }
    return true;
}

/*短日期，形如 (2003-12-05)*/
function isDate(str){
    var r = str.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
    if(r===null)return false;
    var d= new Date(r[1], r[3]-1, r[4]);
    return (d.getFullYear()===r[1]&&(d.getMonth()+1)===r[3]&&d.getDate()===r[4]);
}

/*短日期，形如 (2003-12)*/
function isDate2(str){
    var r = str.match(/^(\d{1,4})(-|\/)(\d{1,2})$/);
    if(r===null)return false;
    var d= new Date(r[1], r[3]-1);
    return (d.getFullYear()===r[1]&&(d.getMonth()+1)===r[3]);
}

/*长时间，形如 (2003-12-05 13)*/
function isDateTime3(str){
    var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2})$/;
    var r = str.match(reg);
    if(r===null)return false;
    var d= new Date(r[1], r[3]-1,r[4],r[5]);
    return (d.getFullYear()===r[1]&&(d.getMonth()+1)===r[3]&&d.getDate()===r[4]&&d.getHours()===r[5]);
}

/*长时间，形如 (2003-12-05 13:4)*/
function isDateTime2(str){
    var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2})$/;
    var r = str.match(reg);
    if(r===null)return false;
    var d= new Date(r[1], r[3]-1,r[4],r[5],r[6]);
    return (d.getFullYear()===r[1]&&(d.getMonth()+1)===r[3]&&d.getDate()===r[4]&&d.getHours()===r[5]&&d.getMinutes()===r[6]);
}

/*长时间，形如 (2003-12-05 13:04:06)*/
function isDateTime1(str){
    var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/;
    var r = str.match(reg);
    if(r===null)return false;
    var d= new Date(r[1], r[3]-1,r[4],r[5],r[6],r[7]);
    return (d.getFullYear()===r[1]&&(d.getMonth()+1)===r[3]&&d.getDate()===r[4]&&d.getHours()===r[5]&&d.getMinutes()===r[6]&&d.getSeconds()===r[7]);
}

/*长时间，形如 (2003-12-05 13:04:06)*/
function isDateTime(str){
    return (isDateTimeString(str, "yyyy-mm-dd hh:mi:ss") ||
        isDateTimeString(str, "yyyy-mm-dd hh:mi"));
}

/**
 * 检查时间日期格式，支持以下格式化字母串
 * "yyyy-mm-dd hh:mi:ss"
 * "yyyy-mm-dd hh:mi"
 * "yyyy-mm-dd hh"
 * "yyyy-mm-dd"
 * "yyyy-mm"
 * "hh:mi:ss"
 * "hh:mi"
 */
function isDateTimeString(str, format){
    var f = format.toLowerCase();
    if(f==="yyyy-mm-dd hh:mi:ss"){
        return isDateTime1(str);
    }else if(f==="yyyy-mm-dd hh:mi"){
        return isDateTime2(str);
    }else if(f==="yyyy-mm-dd hh"){
        return isDateTime3(str);
    }else if(f==="yyyy-mm-dd"){
        return isDate(str);
    }else if(f==="yyyy-mm"){
        return isDate2(str);
    }else if(f==="hh:mi:ss"){
        return isTime(str);
    }else if(f==="hh:mi"){
        return isTime2(str);
    }
}

/*截去前导、尾随空格*/
function trim(str){
   return str.replace(/^\s*|\s*$/g,"");
}
/*截去前导、尾随空格后是否为空*/
function isTrimEmpty(value){
  if(value!==null){
    value = trim( value);
  }
  if((value===null)||(value.length===0))
    return(true);
  else
    return(false);
}
//2007-1-17
function isCheck(value,str){
  var a = value.match(str);
  if (a == null) {
    return false;
  }
  return true;
}
function getColTypeName(typeId){
  var s = null;
//   if(typeId == 1) {s = "文本格式";}
   if(typeId == 2) {s = "数字格式";}
   if(typeId == 3) {s = "字符格式";}
   if(typeId == 4) {s = "字符+数字格式";}
   if(typeId == 5) {s = "数值格式";}
   if(typeId == 6) {s = "日期格式(形如 2005-10-10)";}
   if(typeId == 7) {s = "金额格式(可包含小数点)";}
   if(typeId == 8) {s = "电话号码格式";}
   if(typeId == 9) {s = "时间格式";}
   return s;
}
function getColType(typeId){
  var s;
//   if(typeId == 1) s = null;
   if(typeId == 2) s = /^(-?\d+)(\.\d+)?$/;
   if(typeId == 3) s = /^[A-Za-z]+$/;
   if(typeId == 4) s = /^[A-Za-z0-9]+$/;
   if(typeId == 5) s = /^([1-9]\d+|[1-9])(\.\d\d?)*$/;
   if(typeId == 6) s = /^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$/;
   if(typeId == 7) s = /^\-?[0-9]+\.?[0-9]{0,2}$/;
   if(typeId == 8) s = /^[0-9]{3,20}$/;
   if(typeId == 9) s = /^(20|21|22|23|[0-1]?\d):[0-5]?\d(|:[0-5]?\d)$/;
   return s;
}
