

function validatePrice(obj,alt){
  var rs=false;
  if(obj!=null){
  	var sum = obj.value;
	if(!isNaN(sum)) {
		var reg = new RegExp("^[0-9]+$");
			if(reg.test(sum)) return true;
		var reg = new RegExp("^[0-9]+.[0-9]{0,2}$");
  			if(reg.test(sum))return true;
	} 	
  }
  alert(alt);
  return rs;
}

function validateWeb(obj,alt,flag){
  var rs=false;
  if(obj!=null){
  	var sum = obj.value;
 // 	var reg=new RegExp("^[A-Za-z][A-Za-z0-9_]{1,19}$");
  	var reg=new RegExp("^[A-Za-z0-9]{0,20}$");
  	if(reg.test(sum))return true;
  }
  if(flag != undefined && flag != null){;}
  else   alert(alt);
  return rs;
}

function validateCheckInt(obj,alt){
  var rs=false;
  if(obj!=null){
  	var sum = obj.value;
  	var reg=new RegExp("^[0-9]{0,10}$");
  	if(reg.test(sum))return true;
  }
  alert(alt);
  return rs;
}

function CompareDate(fm){	
	var to = fm.toDate.value.replace(/^(\d+)-(\d+)-(\d+)/g, "$2/$3/$1");
	var dto = new Date(to);
	var from = fm.fromDate.value.replace(/^(\d+)-(\d+)-(\d+)/g, "$2/$3/$1");
	var dfrom = new Date(from);	
	var days = (dto - dfrom)/(24*3600*1000);
	if(days < 0)alert("截止日期必须晚于起始日期");
	else{
		days ++;
		if(days > 50 && fm.daily[0].checked){
			if(confirm("您选择的统计跨度有"+days+"天，并要求显示每一天的数据，这会使得统计结果表格非常庞大。\n如果您确定要这样统计，请点击确定"))return true;
		}
		else return true;
	}
	return false;
}

function formatDate(obj){
	obj.value = obj.value.replace("－","-").replace("－","-");
	var str;
	var mode = 1;
	if(obj.value.match(/^(\d+)-(\d+)-(\d+)/g)){
		str = obj.value.replace(/^(\d+)-(\d+)-(\d+)/g, "$2/$3/$1");
	}
	else if(obj.value.match(/^(\d+)-(\d+)/g)){
		mode = 2;
		str = obj.value.replace(/^(\d+)-(\d+)/g, "$2/1/$1");
	}
	var dt = new Date(str);
	var year = dt.getYear();
	if(year >= 80 && year < 2000)year = "19" + year;
	else if(year >= 10 && year < 80) year = "20" + year;
	else if(year < 10) year = "200" + year;
	var month = dt.getMonth() + 1;
	if(month < 10)month = "0" + month;
	var date = dt.getDate();
	if(date < 10) date = "0" + date;

	if(mode == 1)obj.value = obj.value.replace(/^(\d+)-(\d+)-(\d+)/g, year + "-" + month + "-" + date);
	else if(mode == 2)obj.value = obj.value.replace(/^(\d+)-(\d+)/g, year + "-" + month + "-" + date);
}

function getStringLength(str){
//	return str.length;//yingqun
  var endvalue=0;
  var sourcestr=new String(str);
  var tempstr;
  for (var strposition = 0; strposition < sourcestr.length; strposition ++) {
    tempstr=sourcestr.charAt(strposition);
    if (tempstr.charCodeAt(0)>255 || tempstr.charCodeAt(0)<0) {
      endvalue=endvalue+2;
    } else {
      endvalue=endvalue+1;
    }
  }
  return(endvalue);
}
function trim(str){
		return str.replace(/(^\s*)|(\s*$)/g, "");
}
function validateDateTime(date,format,alt){
  var time=trim(date.value);
  if(time=="") return true;
  var reg=format;
  reg=reg.replace(/yyyy/,"[0-9]{4}");
  reg=reg.replace(/yy/,"[0-9]{2}");
  reg=reg.replace(/MM/,"((0[1-9])|1[0-2])");
  reg=reg.replace(/M/,"(([0]?[1-9])|1[0-2])");
  reg=reg.replace(/dd/,"((0[1-9])|([1-2][0-9])|30|31)");
  reg=reg.replace(/d/,"(([0]?[1-9])|([1-2][0-9])|30|31)");
  
  var reg2=reg.replace(/HH/,"(([0-1][0-9])|20|21|22|23)");
  reg2=reg2.replace(/H/,"([0-9]|1[0-9]|20|21|22|23)");
  reg2=reg2.replace(/mm/,"([0-5][0-9])");
  reg2=reg2.replace(/m/,"([0-9]|([1-5][0-9]))");
  reg2=reg2.replace(/ss/,"([0-5][0-9])");
  reg2=reg2.replace(/s/,"([0-9]|([1-5][0-9]))");
  
  var reg3=reg.replace(/( .*)/,"");
  
  reg3 = new RegExp("^"+reg3+"$");
  reg2 = new RegExp("^"+reg2+"$");
  if(reg3.test(time)==false && reg2.test(time)== false){
    alert(alt);
    date.focus();
    return false;
  }
  return true;
}

function validateBirthday(date, alt){
  var time=trim(date.value);
  if(time=="") return;
  var reg1 = "(([0-9]{4}))";
  reg1=new RegExp("^"+reg1+"$");
  var reg2 = "(([0-9]{4})-(([0]?[1-9])|1[0-2]))";
  reg2=new RegExp("^"+reg2+"$");
  var reg3 = "(([0-9]{4})-(([0]?[1-9])|1[0-2])-(([0]?[1-9])|([1-2][0-9])|30|31))";
  reg3=new RegExp("^"+reg3+"$");
  if(reg1.test(time)==false && reg2.test(time)==false && reg3.test(time)==false){
    alert(alt);
    date.focus();
    return false;
  }
  return true;
}


function validateDate(date,format,alt){
  var time=trim(date.value);
  if(time=="") return;
  var reg=format;
  var reg=reg.replace(/yyyy/,"[0-9]{4}");
  var reg=reg.replace(/yy/,"[0-9]{2}");
  var reg=reg.replace(/MM/,"((0[1-9])|1[0-2])");
  var reg=reg.replace(/M/,"(([0]?[1-9])|1[0-2])");
  var reg=reg.replace(/dd/,"((0[1-9])|([1-2][0-9])|30|31)");
  var reg=reg.replace(/d/,"(([0]?[1-9])|([1-2][0-9])|30|31)");
  var reg=reg.replace(/HH/,"(([0-1][0-9])|20|21|22|23)");
  var reg=reg.replace(/H/,"([0-9]|1[0-9]|20|21|22|23)");
  var reg=reg.replace(/mm/,"([0-5][0-9])");
  var reg=reg.replace(/m/,"([0-9]|([1-5][0-9]))");
  var reg=reg.replace(/ss/,"([0-5][0-9])");
  var reg=reg.replace(/s/,"([0-9]|([1-5][0-9]))");
  reg=new RegExp("^"+reg+"$");
  if(reg.test(time)==false){
    alert(alt);
    date.focus();
    return false;
  }
  return true;
}

function validateDateGroup(year,month,day,alt){
  var array=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
  var y=parseInt(year.value);
  var m=parseInt(month.value);
  var d=parseInt(day.value);
  var maxday=array[m-1];
  if(m==2){
    if((y%4==0&&y%100!=0)||y%400==0){
      maxday=29;
    }
  }
  if(d>maxday){
    alert(alt);
    return false;
  }
  return true;
}
function validateCheckbox(obj,alt){
  var rs=false;
  if(obj!=null){
    if(obj.length==null){
      return obj.checked;
    }
    for(i=0;i<obj.length;i++){
      if(obj[i].checked==true){
        return true;
      }
    }
  }
  alert(alt);
  return rs;
}

function validateChecksum(obj,alt){
  var rs=false;
  if(obj!=null){
  	var sum = obj.value;
  	var reg=new RegExp("^[0-9]{4,4}$");
  	if(reg.test(sum))return true;
  }
  alert(alt);
  return rs;
}

function validateMobile(obj,alt){
  var rs=false;
  if(obj!=null){
  	var sum = obj.value;
  	var reg=new RegExp("^[0-9]{0,15}$");
  	if(reg.test(sum))return true;
  }
  alert(alt);
  return rs;
}

function validatePhone(obj,alt){
  var rs=false;
  if(obj!=null){
  	var sum = obj.value;
  	var reg=new RegExp("[^a-zA-Z]{6,}");
  	if(reg.test(sum))return true;
  }
  alert(alt);
  return rs;
}

function validateIDcard(obj,alt){
  var rs=false;
  if(obj!=null){
  	var sum = obj.value;
  	var reg=new RegExp("^[0-9]{17}[0-9xX]{1}$|^[0-9]{15}$");
  	if(reg.test(sum))return true;
  }
  alert(alt);
  return rs;
}

function validateUsername(obj,alt,dispID){
  var rs=false;
  if(obj!=null){
  	var sum = obj.value;
  	var reg=new RegExp("^[A-Za-z][A-Za-z0-9_]{5,19}$");
  	if(reg.test(sum))return true;
  }
  if(dispID == null || dispID == undefined)alert(alt);
	else  Object(dispID).innerHTML = alt;
  return rs;
}

function validateRadio(obj,alt){
  var rs=false;
  if(obj!=null){
    if(obj.length==null){
     	if(obj.checked)return true;
    }
    else{
      for(i=0;i<obj.length;i++){
        if(obj[i].checked==true){
          return true;
        }
      }
    }
  }
  alert(alt);
  return rs;
}

function validateSelect(obj,alt){
  var rs=false;
  if(obj!=null){
    for(i=0;i<obj.options.length;i++){
      if(obj.options[i].selected==true){
        return true;
      }
    }
  }
  alert(alt);
  return rs;
}
function validateEmail(email,alt,separator){
  var mail=trim(email.value);
  if(mail=="") return;
  var em;
  var myReg = /^[\-_a-z0-9A-Z.]+@([\-_a-z0-9A-Z]+.)+[a-z0-9A-Z]{2,3}$/;
  if(separator==null){
    if(myReg.test(email.value)==false){
      alert(alt); 
      email.focus();
      return false;
    }
  }
  else{
    em=email.value.split(separator);
    for(i=0;i<em.length;i++){
      em[i]=em[i].trim();
      if(em[i].length>0&&myReg.test(em[i])==false){
        alert(alt);
        email.focus();
        return false;
      }
    }
  }
  return true;
}
function validateForm(theForm){
  var disableList=new Array();
  var field = theForm.elements;
 	var vali=theForm.validate;
	if(vali!=null){
		if(vali.value=="0"){
			var fun=vali.functionName;
			if(fun!=null){
				return eval(fun+"()");
			}
			else{
				return true;
			}
		}
	}
  for(var i = 0; i < field.length; i++){
    var empty=false;
    var value=trim(field[i].value);
    if(value.length==0){
      empty=true;
    }
    var emptyInfo=field[i].getAttribute("emptyInfo");
    if(emptyInfo!=null&&empty==true){
      alert(emptyInfo);
      field[i].focus();
      return false;
    }
    var lengthInfo=field[i].getAttribute("lengthInfo");
    if(lengthInfo!=null&&getStringLength(value)>field[i].maxLength){
      alert(lengthInfo);
      field[i].focus();
      return false;
    }
	var minLength=field[i].getAttribute("minLength");
    if(minLength!=null&&getStringLength(value)<field[i].maxLength){
      alert(minLength);
      field[i].focus();
      return false;
    }
    var validatorType=field[i].getAttribute("validatorType");
    if(validatorType!=null){
      var rs=true;
      if(validatorType=="javascript"){
        eval("rs="+field[i].functionName+"()");
        if(rs==false){
          return false;
        }
        else{
          continue;
        }
      }
      else if(validatorType=="disable"){
        disableList.length++;
        disableList[disableList.length-1]=field[i];
        continue;
      }
      else if(validatorType=="Date"){
        rs=validateDate(field[i].fieldName,field[i].format,field[i].getAttribute("errorInfo"));
      }
      else if(validatorType=="Birthday"){
        rs=validateBirthday(field[i].fieldName,field[i].getAttribute("errorInfo"));
      }
      else if(validatorType=="DateTime"){
        rs=validateDateTime(field[i].fieldName,field[i].format,field[i].getAttribute("errorInfo"));
      }
      else if(validatorType=="DateGroup"){
        rs=validateDateGroup(field[i].year,theForm.elements(field[i].month),theForm.elements(field[i].day),field[i].getAttribute("errorInfo"));
      }
      else if(validatorType=="Checkbox"){
        rs=validateCheckbox(field[i],field[i].getAttribute("errorInfo"));
      }
      else if(validatorType=="Radio"){
        rs=validateRadio(field[i],field[i].getAttribute("errorInfo"));
      }
      else if(validatorType=="Select"){
        rs=validateSelect(field[i],field[i].getAttribute("errorInfo"));
      }
      else if(validatorType=="Email"){
        rs=validateEmail(field[i],field[i].getAttribute("errorInfo"));
      }
      else if(validatorType=="Mobile"){
        rs=validateMobile(field[i],field[i].getAttribute("errorInfo"));
      }
      else if(validatorType == "checksum"){
        rs=validateChecksum(field[i],field[i].getAttribute("errorInfo"));      	
      }
	  else if(validatorType == "IDcard"){
        rs=validateIDcard(field[i],field[i].getAttribute("errorInfo"));      	
      }
	  else if(validatorType == "Phone"){
		//  alert(field[i]);
        rs=validatePhone(field[i],field[i].getAttribute("errorInfo"));      	
      }
	  else if(validatorType == "Price"){
		//  alert(field[i]);
        rs=validatePrice(field[i],field[i].getAttribute("errorInfo"));    
      }
	  else if(validatorType == "Web"){
		//  alert(field[i]);
        rs=validateWeb(field[i],field[i].getAttribute("errorInfo"));    
      }
	  else if(validatorType == "Int"){
		//  alert(field[i]);
        rs=validateCheckInt(field[i],field[i].getAttribute("errorInfo"));      	
      }
      else{
        alert("验证类型不被支持:"+field[i].name);
        return false;
      }
      if(rs==false){
        return false;
      }
    }
    else{
      if(empty==false){
        var v = field[i].validator;
        if(!v) continue;
        var reg=new RegExp(v);
        if(reg.test(field[i].value)==false){
          alert(field[i].getAttribute("errorInfo"));
          field[i].focus();
          return false;
        }
      }
    }
  }
  for(i=0;i<disableList.length;i++){
    disableList[i].disabled=true;
  }
  return true;
}
