// JavaScript Document
function findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&d.forms&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function CheckItem(obj,vstr,form){
	var err = "";
	if(!obj)return "不能被识别！\r\n";
	switch(vstr[1]){
		case"text":
			if(obj.value.length<=vstr[2]||obj.value.length>vstr[3]){
				err=vstr[4];
				err+="\r\n";
			}
			break;
		case"string":
			var reg=/[\W]/g;
			if(reg.test(obj.value)||obj.value.length<=vstr[2]||obj.value.length>vstr[3]){
				err=vstr[4];
				err+="\r\n";
			}
			break;
		case"int":
			var reg = /[\D]/
			if(obj.value=="" || reg.test(obj.value)||parseInt(obj.value)<=parseInt(vstr[2])||parseInt(obj.value)>parseInt(vstr[3])){
				err=vstr[4];
				err+="\r\n";
			}
			break;
		case"date":
			if(isNaN(Date.parse(obj.value.replace("-","/")))){
				err=vstr[2];
				err+="\r\n";
			}
			break;
		case"datetime":
			var reg = /^\d{2,4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}$/
			if(!reg.test(obj.value)){
				err=vstr[2];
				err+="\r\n";
			}
			break;
		case"money":
			var m=parseFloat(obj.value);
			if(isNaN(m)||m<=parseFloat(vstr[2])||m>parseFloat(vstr[3])){
				err=vstr[4];
				err+="\r\n";
			}
			break;
		case"compare":
			var m = findObj(vstr[2],form);
			var re = false;
			if(m){
				switch(vstr[3]){
					case"=":
						if(obj.value==m.value)re=true;
						break;
					case"<":
						if(obj.value<m.value)re=true;
						break;
					case">":
						if(obj.value>m.value)re=true;
						break;
					case"<=":
						if(obj.value<=m.value)re=true;
						break;
					case">=":
						if(obj.value>=m.value)re=true;
						break;
					case"!=":
						if(obj.value!=m.value)re=true;
						break;
				}
			}
			if(!re){
				err=vstr[4];
				err+="\r\n";
			}
			break;
		case"require":
			if(obj.type.toLowerCase()=="checkbox"||obj.type.toLowerCase()=="radio"){
				if(!obj.checked){
					err=vstr[2];
					err+="\r\n";
				}
			}else{
				if(obj.value==""){
					err=vstr[2];
					err+="\r\n";
				}
			}
			break;
		case"reg":
			var reg = vstr[2];
			if(!reg.test(obj.value)){
				err=vstr[3];
				err+="\r\n";
			}
			break;
		case"email":
			var reg = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/g;
			if(!reg.test(obj.value)){
				err=vstr[2];
				err+="\r\n";
			}
			break;
		case"http":
		var a = obj.value.toLowerCase().substr(0,7);
			if(a!="http://"){
				err=vstr[2];
				err+="\r\n";
			}
			break;
		default:
			err=obj.name+"不能被识别！\r\n";
	}
	return err;
}
function CheckForm(form){
	var err="",obj,vstr,errObj,errIndex,validate,terr,val;
	errIndex=0;
	if(!form||!form.validate)return true;
	validate = form.validate.value.split(";");
	for(i=0;i<validate.length;i++){
		if(validate[i]==""||validate[i]==undefined)continue;
		val = validate[i].split(",")
		
		obj = findObj(val[0],form);
		if(!obj){
			errIndex++;
			err+=errIndex;
			err+=". ";
			err+=val[0]+"不存在！\r\n";
			continue;
		}
		if(obj.tagName==undefined){
			var ec=0;
			for(var j=0;j<obj.length;j++){
				terr=CheckItem(obj[j],val,form);
				if(terr!="")ec++;
			}
			if(ec==obj.length){
				if(!errObj&&obj[j])errObj=obj[j];
				errIndex++;
				err+=errIndex;
				err+=". ";
				err+=terr;
			}
		}else{
			terr=CheckItem(obj,val,form);
			if(terr!=""){
				if(!errObj&&obj)errObj=obj;
				errIndex++;
				err+=errIndex;
				err+=". ";
				err+=terr;
			}
		}
	}
	if(err==""){
		return true;
	}else{
		err = "检查时发现了"+errIndex+"处错误，请参考提示修改后重新提交：\r\n\r\n" + err;
		if(err.length>300){
			alert(err.substr(0,300)+" ...\r\n(错误太多，无法全部显示...)");
		}else{
			alert(err);
		}
		if(errObj&&errObj.type!="hidden")errObj.focus();
		return false;
	}
}
function isNumber(str)
{
	return/(^-?|^\+?|\d)\d+$/.test(str) || /(^-?|^\+?|^\d?)\d*\.\d+$/.test(str);
}
