(function(){
	// 所有表单List以及验证方法
	var optionTxt = {
		isNull:"必填",
		errorLetter:"含特殊字符或过长",
		errorLength:"40字符以内",
		errorFormat:"格式不对",
		lowLetter:"输入小写字母",
		errorEmail:"请输入48位以内的正确邮箱",
		errorNum:"输入数字",
		errorPwd:"仅支持数字，大小写字母，且至少包含其中2种，长度限制为6-18位",
		errorQQ :"请输入正确QQ号码",
		errorCrm :"两次密码不一致，请重新输入",
		errorCompany :"公司名称，支持48位内汉字或96位内字母数字",
		errorUsername :"您的姓名，支持16位内汉字或32位内字母数字",
		errorWechat :"6-20位数字，字母，下划线或中划线，须以数字或字母开头",
		errorUrl:"以http://或https://开头的合法url",
		errorName:"名称不合法或过长"
	};
	var fn=function(option){
		if(!option.val){
			return option.nullTxt || "必填";
		}
		var str=option.val.replace(/[^\x00-\xff]/g, '00');
		if((option.min && str.length<option.min) || (option.max && str.length>option.max)){
			return option.regTxt
		}else if(option.regFlag && option.reg.test(option.val)){
			return option.regTxt
		}else if(!option.regFlag && option.reg && !option.reg.test(option.val)){
			return option.regTxt
		}else{
			return "succ"
		}
	},
	obj={		
		isNull:function(option){
			var options={
				val:option.val,
				name:option.txt || optionTxt.isNull
			}
			return fn(options)
		},
		nameLen:function(option){
			var options={
				val:option.val,
				max:option.max || 40,
				min:option.min || 2,
				regTxt:option.txt || optionTxt.errorLength
			}
			return fn(options)
		},
		isMaxLen:function(option){
			var options={
				val:option.val,
				max:option.max || 40,
				min:option.min || 2,
				regTxt:option.txt
			}
			return fn(options);
		},
		name:function(option){
			var options={
				val:option.val,
				max:option.max || 40,
				min:option.min || 2,
				reg:/[`~!@#\$%\^\&\*\(\)\+<>\?:"\{\},\.\\\/;'\[\]]/im,
				regFlag:true,
				regTxt:option.txt || optionTxt.errorLetter
			}
			return fn(options)
		},
		nameFormat:function(option){
			var options={
				val:option.val,
				max:option.max || 40,
				min:option.min || 1,
				reg:/^[!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~\\！（\）《》？：·“ ”，。、；`‘’【】——……￥「」／a-zA-Z0-9\u4E00-\u9FA5]+$/,
				regFlag:false,
				regTxt:option.txt || optionTxt.errorName
			}
			return fn(options)
		},
		spcname:function(option){
			var options={
				val:option.val,
				max:option.max || 40,
				min:option.min || 1,
				reg:/^[a-zA-Z0-9_\-\u4E00-\u9FA5]+$/,
				regFlag:false,
				regTxt:option.txt || optionTxt.errorLetter
			}
			return fn(options)
		},
		spcname1:function(option){
			var options={
				val:option.val,
				max:option.max || 40,
				min:option.min || 1,
				reg:/^[a-zA-Z0-9_\-\·\u4E00-\u9FA5]+$/,
				regFlag:false,
				regTxt:option.txt || optionTxt.errorLetter
			}
			return fn(options)
		},
		spcname2:function(option){
			var options={
				val:option.val,
				max:option.max || 40,
				min:option.min || 1,
				reg:/^[a-zA-Z0-9_\u4E00-\u9FA5]+$/,
				regFlag:false,
				regTxt:option.txt || optionTxt.errorLetter
			}
			return fn(options)
		},
		keyword:function(option){
			var options={
				val:option.val,
				max:option.max || 40,
				min:option.min || 1,
				reg:/^[a-zA-Z0-9\.\-\u4E00-\u9FA5]+$/,
				regFlag:false,
				regTxt:option.txt || optionTxt.errorLetter
			}
			return fn(options)
		},
		companyname:function(option){
			var options={
				val:option.val,
				max:option.max || 96,
				reg:/^[a-zA-Z0-9_\-\u4E00-\u9FA5]+$/,
				regFlag:false,
				regTxt:option.txt || optionTxt.errorCompany
			}
			return fn(options)
		},
		username:function(option){
			var options={
				val:option.val,
				max:option.max || 32,
				reg:/^[a-zA-Z0-9_\-\u4E00-\u9FA5]+$/,
				regFlag:false,
				regTxt:option.txt || optionTxt.errorUsername
			}
			return fn(options)
		},
		numLetter:function(option){
			var options={
				val:option.val,
				max:option.max || 32,
				reg:/^[a-zA-Z0-9\u4E00-\u9FA5]+$/,
				regFlag:false,
				regTxt:option.txt || optionTxt.errorUsername,
				nullTxt:option.nullTxt
			}
			return fn(options)
		},
		onelink:function(option){
			var options={
				val:option.val,
				max:option.max || 40,
				reg:/^[a-zA-Z0-9_\_\-\u4E00-\u9FA5]+$/,
				regFlag:false,
				regTxt:option.txt || optionTxt.errorUsername
			}
			return fn(options)
		},
		wechat:function(option){
			var options={
				val:option.val,
				reg:/^[a-zA-Z0-9]{1}[a-zA-Z\d_\d-]{5,19}$/,
				regFlag:false,
				regTxt:option.txt || optionTxt.errorWechat,
				nullTxt:option.nullTxt
			}
			return fn(options)
		},
		email:function(option){
			var options={
				val:option.val,
				max:option.max || 48,
                reg: /^([a-zA-Z0-9]+[_|\_|\.|\-]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.|\-]?)*[a-zA-Z0-9]+\.[a-zA-Z]{1,63}$/,
				regFlag:false,
				regTxt:option.txt || optionTxt.errorEmail,
				nullTxt:option.nullTxt
			}
			return fn(options)
		},
		url:function(option){
			var options={
				val:option.val,
                reg: /(http|https):\/\/[^\s]+/,
				regFlag:false,
				regTxt:option.txt || optionTxt.errorUrl,
                nullTxt:option.nullTxt
            }
			return fn(options)
		},
		num:function(option){
			var options={
				val:option.val,
				reg:/\D/g,
				max:option.max || 64,
				min:option.min || 1,
				regFlag:true,
				regTxt:option.txt || optionTxt.errorNum,
				nullTxt:option.nullTxt
			}
			return fn(options)
		},
		qq:function(option){
			var options={
				val:option.val,
				reg:/\D/g,
				max:option.max || 12,
				min:option.min || 6,
				regFlag:true,
				regTxt:option.txt || optionTxt.errorQQ
			}
			return fn(options)
		},
		numFloat:function(option){
			var options={
				val:option.val,
				reg: /^\d+(\.\d{1,2})?$/,
				regFlag:false,
				regTxt:option.txt || optionTxt.errorFormat
			}
			return fn(options)
		},
		isLowLetter:function(option){
			var options={
				val:option.val,
				reg: /^[a-z]+$/,
				regFlag:false,
				regTxt:option.txt || optionTxt.lowLetter
			}
			return fn(options);
		},
		pwd:function(option){			
			var options={
				val:option.val,
				// min:6,
				// max:18,
				reg:/^(?![0-9]+$)(?![a-z]+$)(?![A-Z]+$)(?![\-_]+$)[0-9A-Za-z]{6,18}$/,
				regFlag:false,
				regTxt:option.txt || optionTxt.errorPwd
			}
			return fn(options);
		},
		cellphone: function(option){
			var options = {
				val : option.val,
				reg:/^((\d{3,4}-\d{7,14}))|(^1(3|4|5|7|8)\d{9})$/,
				regFlag:false,
				regTxt:option.txt || "号码有误"
			}
			return fn(options);
		},
		ipError:function(option){
			var options = {
				val : option.val,
				reg:/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/,
				regFlag:false,
				regTxt:option.txt || "支持数字和“.”"
			}
			return fn(options);
		}
	}
	// 表单验证方法
	return formJudge=function(par){
		var infoArr=[],infoObj={};
		for(x in par){
			var option=par[x];
				info=obj[par[x].key](option),
				status=false;
				if(info!="succ"){
					infoArr.push(info)
					status=true

					infoObj[x]={
						status:status,
						txt:info
					}
				}
		}
		if(infoArr.length>0){
			infoObj.succ=false;
			for(i in infoObj){
				if(infoObj[i].txt != "succ"){
					infoObj[i].status = true;
				}
				
				if(infoObj[i].status=="true"){
					document.getElementById(i).focus();
					var top=document.getElementById(i).offsetTop
					document.documentElement.scrollTop=top-70;
					break 
				}
			}
		}else{
			infoObj={
				succ:true
			}
		}
		return infoObj
	}
})();