/**
 * jv共用信息
 */
var jv = {
	thiz : null,
	tip : {
		successHead : '<span style="color:green;padding-left:5px;" class="jv_success">',
		errorHead : '<span style="color:red;padding-left:5px;" class="jv_error">',
		dwrErrorHead : '<span style="color:red;padding-left:5px;" class="jv_dwr_error">',
		tipHead : '<span style="color:blue;padding-left:5px;" class="jv_tip">',
		foot : '</span>',
		success: '成功',
		error: '错误',
		tip : '请输入',
		successClass : 'class="jv_success"',
		errorClass : 'class="jv_error"',
		tipClass : 'class="jv_tip"',
		dwrErrorClass : 'class="jv_dwr_error"',
		required : '请输入',
		selected : '请选择',
		length : '长度为{0}-{1}位字符',
		equal : '输入相等值',
		email : '请输入邮箱',
		english : '请输入英文名',
		url : '请输入网址',
		chinese : '请输入纯中文',
		account : '首位为字母，5-16位字符',
		password : '6-22位字符',
		letter : '请输入字母',
		date : '请输入日期(1970-01-01)',
		time : '请输入时间(08:01:01)',
		time2 : '请输入时间(08:01)',
		number : '请输入数字',
		numberRange: '大小为{0}-{1}的数字',
		currency : '请输入货币格式',
		telphone : '请输入手机号',
		phone : '请输入座机号',
		id : '请输入身份证号'
	},
	error : {
		required : '不可为空',
		selected : '选择错误项',
		length : '长度为{0}-{1}位字符',
		equal : '内容不相等',
		email : '邮箱格式错误',
		english : '英文名称错误',
		url : '网址格式错误',
		chinese : '中文格式错误',
		account : '账号格式错误',
		password : '密码格式错误',
		letter : '字母格式错误',
		date : '日期格式错误',
		time : '时间格式错误',
		time2 : '时间格式错误',
		number : '数字格式错误',
		currency : '货币格式错误',
		telphone : '手机格式错误',
		phone : '座机格式错误',
		id : '身份证格式错误',
		rangeError : '没有设置jRange标签',
		equalError : 'jEqual标签少于2个',
		checkError : '检验方法错误 '
	},
	key : {
		rangeError : 'rangeError',
		equalError : 'equalError'
	},
	format : ['required','selected','length','equal','email','english','url','chinese','account','password','letter','date','time','time2','number','currency','telphone','phone','id']
};
/**
 * 追加聚焦提示信息
 */
function jFocus(thiz,id,format){
	content = jGetTip(thiz,format);
	jClearNextError(thiz,id);
	jAfterContent(thiz,id,content);
}

/**
 * 追加聚焦提示信息
 */
function jFocusContent(thiz,id,msg){
	var content = jv.tip.tipHead + msg + jv.tip.foot;
	jClearNextError(thiz,id);
	jAfterContent(thiz,id,content);
}

/**
 * 验证信息，追加验证结果
 */
function jValidate(thiz,id,format,checkNull,checkLength,message){
	jv.thiz = thiz;
	var content = jv.tip.successHead + jv.tip.success + jv.tip.foot;
	var value = jGetValue(thiz,format);
	var nullFlag = true;
	var lengthFlag = true;
	if(checkNull){
		var nullFlag = jVerifyRequired(value);
		if(nullFlag!=true)
		content = jGetError(thiz,'required',nullFlag);
	}
	if(checkLength&&nullFlag==true){
		var lengthFlag = jVerifyLength(value);
		if(lengthFlag!=true)
		content = jGetError(thiz,'length',lengthFlag);
	}
	if(format!=false&&nullFlag==true&&lengthFlag==true){
		var check = jGetCheck(format);
		value=value.replace(/(^\s*)|(\s*$)/g,"")
		var flag = false;
		if(check!=false){
			value = value.replace(/(^\s*)|(\s*$)|(\n)/g, "");
			flag = eval(check+'("'+value+'")');	
		}
		else 
			content = jv.tip.errorHead + jv.error.checkError + jv.tip.foot;;
		if(flag!=true)
			content = jGetError(thiz,format,flag);
	}
	jClearNextError(thiz,id);
	if(message!=null&&message!=''){
		content = message;
	}
	jAfterContent(thiz,id,content);
}

/**
 * 验证信息，提示验证结果
 */
function jValidateAlert(thiz,id,format,checkNull,checkLength,message){
	jv.thiz = thiz;
	var content = jv.tip.successHead + jv.tip.success + jv.tip.foot;
	var value = jGetValue(thiz,format);
	var nullFlag = true;
	var lengthFlag = true;
	if(checkNull){
		var nullFlag = jVerifyRequired(value);
		if(nullFlag!=true)
		content = jGetError(thiz,'required',nullFlag);
	}
	if(checkLength&&nullFlag==true){
		var lengthFlag = jVerifyLength(value);
		if(lengthFlag!=true)
		content = jGetError(thiz,'length',lengthFlag);
	}
	if(format!=false&&nullFlag==true&&lengthFlag==true){
		var check = jGetCheck(format);
		var flag = false;
		if(check!=false){
			value = value.replace(/(^\s*)|(\s*$)|(\n)/g, "");
			flag = eval(check+'("'+value+'")');	
		}
		else 
			content = jv.tip.errorHead + jv.error.checkError + jv.tip.foot;;
		if(flag!=true)
			content = jGetError(thiz,format,flag);
	}
	content = $(content).html();
	if(content!='成功'){
		if(message!=null&&message!=''){
			content = message;
		}
		layer.msg(content,1,3);
	}
}

 /**
  * 执行dwr,验证信息，用于返回boolean的dwr
  **/
  function jValidateDwrBoolean(thiz,id,dwr,success,fail){
	if(jCheckNextError(thiz,id)==false){
		return false;
	}
	var value = jGetValue(thiz);
	if(success==false) success=jv.tip.success;
		eval(dwr+'("'+value+'",function(tip){' +
			'if(tip ==true || tip=="success"){' +
			'	var content = jv.tip.successHead + success + jv.tip.foot;' +
			'	jClearNextError(thiz,id);jAfterContent(thiz,id,content);' +
			'}else {' +
			'	var content = jv.tip.dwrErrorHead + fail + jv.tip.foot;' +
			'	jClearNextError(thiz,id);jAfterContent(thiz,id,content);' +
			'}' +
			'});'
	);
  }
  
  /**
   * 执行dwr,验证信息，用于返回msg的dwr
   */
  function jValidateDwrMsg(thiz,id,dwr,success){
		if(jCheckNextError(thiz,id)==false){
			return false;
		} 
		var value = jGetValue(thiz);
		if(success==false) success=jv.tip.success;
		eval(dwr+'("'+value+'",function(tip){' +
				'if(tip ==true || tip=="success"){' +
				'	var content = jv.tip.successHead + success + jv.tip.foot;' +
				'	jClearNextError(thiz,id);jAfterContent(thiz,id,content);' +
				'}else {' +
				'	var content = jv.tip.dwrErrorHead + tip + jv.tip.foot;' +
				'	jClearNextError(thiz,id);jAfterContent(thiz,id,content);' +
				'}' +
				'})');
  }

/**
 *	根据class，判断多个对象
 **/
function jValidateObjs(objs,format,errorId){
	var jv_flag = 0;
	if (objs.size() > 0) {
		objs.each(function() {
			jv.thiz = this;
			var value = jGetValue(this,format);
			value=value.replace(/(^\s*)|(\s*$)/g,"")
			var check = jGetCheck(format);
			var flag = false;
			if(check!=false){
				value = value.replace(/(^\s*)|(\s*$)|(\n)/g, "");
				flag = eval(check+'("'+value+'")');	
			}
			var content = jv.tip.successHead + jv.tip.success + jv.tip.foot;
			if(flag!=true) {
				content = jGetError(this,format,flag);
				jClearNextError(this,errorId);
				jAfterContent(this,errorId,content);
				jv_flag = 1;
			}else {
				jClearNextError(this,errorId);
				jAfterContent(this,errorId,content);
			}
		});
	}
	return jv_flag;
}

function jValidatePost(id,url,successCallback){
	if(jCheckAllError(id)==false){
		return false;
	}
	var form = $('#'+id);
	for(var i=0;i<jv.format.length;i++){
		var jv_objs = form.find('.jv_'+jv.format[i]);
		var jv_flag = jValidateObjs(jv_objs,jv.format[i]);
		if(jv_flag == 1) {
			layer.msg('数据验证失败,请先解决错误。',1,3);
			return false;
		}
	}
	var dataString = form.serialize();
	$.ajax({
	   	type: "post",
	   	url: url,
		data : dataString,
		dataType : 'json',
		success : successCallback,
		error : function(error){
			alert(error);
		}
	});
}

/**
 * 表单提交判断
 */
function jValidateSubmit(id, action) {
	if(jCheckAllError(id)==false){
		return false;
	}
	var form = $('#'+id);
	for(var i=0;i<jv.format.length;i++){
		var jv_objs = form.find('.jv_'+jv.format[i]);
		var jv_flag = jValidateObjs(jv_objs,jv.format[i]);
		if(jv_flag == 1)return false;
	}
	form.attr('action', action);
	form.submit();
}
/**
 * 表单验证不提交
 */
function jValidateSubmitCheck(id, errorId) {
	if(jCheckAllError(id)==false){
		return false;
	}
	var form = $('#'+id);
	for(var i=0;i<jv.format.length;i++){
		var jv_objs = form.find('.jv_'+jv.format[i]);
		var jv_flag = jValidateObjs(jv_objs,jv.format[i],errorId);
		if(jv_flag == 1)return false;
	}
}

/**
 * 获取验证内容
 */
function jGetValue(thiz,format){
	var obj = $(thiz);
	var value = '';
	if(format == 'selected'){
		value = obj.find('option:selected').val();		
	}else {
		value = obj.val();
		if(value == ''){
			value = obj.html();
		}
	}	
	return value;
}

/**
 * 获取验证方法
 **/
function jGetCheck(format){
	if(format=='required'){			//非空验证
		return 'jVerifyRequired';
	}else if(format=='selected'){	//选择验证
		return 'jVerifySelected';	
	}else if(format=='length'){		//长度验证
		return 'jVerifyLength';
	}else if(format=='equal'){		//相等验证
		return 'jVerifyEqual';
	}else if(format=='email'){		//邮箱验证
		return 'jVerifyEmail';		
	}else if(format=='english'){		//邮箱验证
		return 'jVerifyEnglish';		
	}else if(format=='url'){		//路径验证
		return 'jVerifyUrl';		
	}else if(format=='chinese'){	//中文验证
		return 'jVerifyChinese';
	}else if(format=='account'){	//账号验证
		return 'jVerifyAccount';
	}else if(format=='password'){	//密码验证
		return 'jVerifyPassword';
	}else if(format=='letter'){		//字母验证
		return 'jVerifyLetter';
	}else if(format=='date'){		//日志验证
		return 'jVerifyDate';
	}else if(format=='time'){		//时间验证
		return 'jVerifyTime';
	}else if(format=='time2'){		//时间验证2
		return 'jVerifyTime2';
	}else if(format=='number'){		//数字验证
		return 'jVerifyNumber';
	}else if(format=='currency'){	//货币验证
		return 'jVerifyCurrency';
	}else if(format=='telphone'){	//手机验证
		return 'jVerifyTelphone';
	}else if(format=='phone'){		//座机验证
		return 'jVerifyPhone';
	}else if(format=='id'){			//身份证验证
		return 'jVerifyId';
	}else {
		return false;
	}
}

/**
 * 获取提示消息
 */
function jGetTip(thiz,format){
	var obj = $(thiz);
	var content = jv.tip.tip;
	if(format=='required') 
		content = jv.tip.required;
	else if(format=='selected')
		content = jv.tip.selected;
	else if(format=='email')
		content = jv.tip.email;
	else if(format=='english')
		content = jv.tip.english;
	else if(format=='length'){
		var length = jv.tip.length;
		var range=obj.attr('jRange');
		if(typeof(range)=='undefined'){
			content = jv.error.rangeError;
		}
		range = range.split(',');
		var min = parseInt(range[0]);
		var max = parseInt(range[1]);
		if(min=='')min=0;
		if(max=='')max=100;
		content=length.replace('{0}',min).replace('{1}', max);
	}
	else if(format=='url')
		content = jv.tip.url;
	else if(format=='chinese')
		content = jv.tip.chinese;
	else if(format=='account')
		content = jv.tip.account;
	else if(format=='password')
		content = jv.tip.password;
	else if(format=='letter')
		content = jv.tip.letter;
	else if(format=='date')
		content = jv.tip.date;
	else if(format=='time')
		content = jv.tip.time;
	else if(format=='time2')
		content = jv.tip.time2;
	else if(format=='number')
		var number = jv.tip.number;
		var range=obj.attr('jNumberRange');
		if(typeof(range)!='undefined'){
			number=jv.tip.numberRange;
			range = range.split(',');
			var min = parseInt(range[0]);
			var max = parseInt(range[1]);
			if(min=='')min=0;
			if(max=='')max=100;
			content=number.replace('{0}',min).replace('{1}', max);
		}
	else if(format=='currency')
		content = jv.tip.currency;
	else if(format=='telphone')
		content = jv.tip.telphone;
	else if(format=='phone')
		content = jv.tip.phone;
	else if(format=='id')
		content = jv.tip.id;
		content = jv.tip.tipHead + content + jv.tip.foot;
	return content;
}

/**
 * 获取返回错误信息
 */
function jGetError(thiz,format,flag){
	var obj = $(thiz);
	var content = jv.tip.error;
	if(flag==false){
		if(format=='required') 
			content = jv.error.required;
		else if(format=='selected')
			content = jv.error.selected;
		else if(format=='email')
			content = jv.error.email;
		else if(format=='english')
			content = jv.error.english;
		else if(format=='length'){
			var length = jv.error.length;
			var range=obj.attr('jRange');
			range = range.split(',');
			var min = parseInt(range[0]);
			var max = parseInt(range[1]);
			if(min=='')min=0;
			if(max=='')max=100;
			content=length.replace('{0}',min).replace('{1}', max);
		}
		else if(format=='equal')
			content = jv.error.equal;
		else if(format=='url')
			content = jv.error.url;
		else if(format=='chinese')
			content = jv.error.chinese;
		else if(format=='account')
			content = jv.error.account;
		else if(format=='password')
			content = jv.error.password;
		else if(format=='letter')
			content = jv.error.letter;
		else if(format=='date')
			content = jv.error.date;
		else if(format=='time')
			content = jv.error.time;
		else if(format=='time2')
			content = jv.error.time2;
		else if(format=='number')
			content = jv.error.number;
		else if(format=='currency')
			content = jv.error.currency;
		else if(format=='telphone')
			content = jv.error.telphone;
		else if(format=='phone')
			content = jv.error.phone;
		else if(format=='id')
			content = jv.error.id;
	}else if(format=='length'){
		if(flag==jv.key.rangeError){
			content = jv.error.rangeError;
		}
	}else if(format=='equal'){
		if(flag==jv.key.equalError){
			content = jv.error.equalError;
		}
	}
	content = jv.tip.errorHead + content + jv.tip.foot;
	return content;
}

/**
 * 获取验证内容
 */
function jAfterContent(thiz,id,content){
	var obj;
	if(id==false||id==''||id==null){
		obj = $(thiz);
	}else {
		obj = $('#'+id);
	}
	if(content!=''){
		obj.after(content);
	}
}

/**
 *  检测是否有错误标签
 **/
function jCheckAllError(id){
	if($('#'+id).find('.jv_error').size()!=0||$('#'+id).find('.jv_dwr_error').size()!=0){
		layer.msg('数据验证失败,请先解决错误。',1,3);
		return false;
	}else {
		return true;
	}
}

/**
 * 检测下一个是否有javascript错误验证标签
 */
function jCheckNextError(thiz,id){
	var obj;
	if(id==false||id==''||id==null){
		obj = $(thiz);
	}else {
		obj = $('#'+id);
	}
	if(obj.next('.jv_error').size()!=0){
		return false;
	}else {
		return true;
	}
}

/**
 * 删除所有标签
 */
function jClearAllError(){
	//删除老的标签
	$('.jv_success').remove();
	$('.jv_error').remove();
	$('.jv_tip').remove();
	$('.jv_dwr_error').remove();
}

/**
 * 删除标签
 */
function jClearNextError(thiz,id){
	var obj;
	if(id==false||id==''||id==null){
		obj = $(thiz);
	}else {
		obj = $('#'+id);
	}
	obj.next('.jv_success').remove();
	obj.next('.jv_error').remove();
	obj.next('.jv_tip').remove();
	obj.next('.jv_dwr_error').remove();
}

/**
 * 验证非空
 **/
function jVerifyRequired(value){
	if(value==''){
		return false;
	}
	return true;
}

/**
 * 验证选择
 **/
function jVerifySelected(value){
	if(value==''){
		return false;
	}
	return true;
}

/**
 * 验证内容长度,验证的位置需要range标签
 **/
function jVerifyLength(value){
	var obj = $(jv.thiz);
	var range=obj.attr('jRange');
	if(typeof(range)=='undefined'){
		return jv.key.rangeError;
	}
	range = range.split(',');
	var min = parseInt(range[0]);
	var max = parseInt(range[1]);
	if(value.length<min||value.length>max){
		return false;
	}
	return true;
}

/**
 * 验证内容相等，验证的位置需要equal标签
 */
function jVerifyEqual(value){
	var obj = $(jv.thiz);
	var objValue = jGetValue(jv.thiz);
	var equal = obj.attr('jEqual');
	var objs = $('[jEqual='+equal+']');
	var flag = true;
	if(objs.size()<2){
		return jv.key.equalError;
	}
	objs.each(function(){
		var value = jGetValue(this);
		if(objValue != value) flag = false;
	});
	return flag;
}

/**
 * 验证邮箱
 **/
function jVerifyEmail(value){
	var jv_reg_email = /^([a-zA-Z0-9_\-|\.])+@([a-zA-Z0-9_\-])+((\.{1}[a-zA-Z0-9_\-]+)+)$/;
	return jv_reg_email.test(value);
}

/**
 * 验证邮箱
 **/
function jVerifyEnglish(value){
	var jv_reg_english = /^([A-Za-z]+\s?)*[A-Za-z]$/;
	return jv_reg_english.test(value);
}

/**
 * 验证网站路径
 **/
function jVerifyUrl(value){
	var jv_reg_url = /^((http|https|ftp):\/\/)?(\w(\:\w)?@)?([0-9a-z_-]+\.)*?([a-z0-9-]+\.[a-z]{2,6}(\.[a-z]{2})?(\:[0-9]{2,6})?)((\/[^?#<>\/\\*":]*)+(\?[^#]*)?(#.*)?)?$/i;
	return jv_reg_url.test(value);
}

/**
 * 验证中文（只能包含中文）
 **/
function jVerifyChinese(value){
	var jv_reg_chinese = /^[\u0391-\uFFE5]*$/;
	return jv_reg_chinese.test(value);
}

/**
 * 验证账户(首位为字母，长度为5-16，包含字母数字下划线)
 **/
function jVerifyAccount(value){
	var jv_reg_account = /^[a-zA-Z][a-zA-Z0-9_]{4,15}$/g;
	return jv_reg_account.test(value);
}

/**
 * 验证密码(字母、数字、字符任意组合，6-22位)
 **/
function jVerifyPassword(value){
	var jv_reg_password = /^[\@A-Za-z0-9\!\#\$\%\^\&\*\.\~]{6,22}$/;
	return jv_reg_password.test(value);
}

/**
 * 验证字母数字
 **/
function jVerifyLetter(value){
	var jv_reg_letter = /^[a-zA-Z]*$/gi;
	return jv_reg_letter.test(value);
}

/**
 * 验证日期(1990-02-10)
 **/
function jVerifyDate(value){
	var jv_reg_date = /^(?:(?!0000)[0-9]{4}[-:\/](?:(?:0[1-9]|1[0-2])[-:\/](?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])[-:\/](?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/;
	return jv_reg_date.test(value);
}

/**
 * 验证时分秒(20:15:17)
 **/
function jVerifyTime(value){
	var jv_reg_date = /^([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/;
	return jv_reg_date.test(value);
}

/**
 * 验证时分(20:15)
 **/
function jVerifyTime2(value){
	var jv_reg_date = /^([0-1]?[0-9]|2[0-3]):([0-5][0-9])$/;
	return jv_reg_date.test(value);
}

/**
 * 验证数字
 **/
function jVerifyNumber(value){
	var valueTemp = parseInt(value);
	var key = isNaN(value);
	if(key){
		return false;
	}else {
		var obj = $(jv.thiz);
		var range=obj.attr('jNumberRange');
		if(typeof(range)!='undefined'){
			range = range.split(',');
			var min = parseInt(range[0]);
			var max = parseInt(range[1]);
			if(valueTemp<min||valueTemp>max){
				return false;
			}
		}
		return true;
	}
}

/**
 * 验证货币格式
 **/
function jVerifyCurrency(value){
	var jv_reg_currency = /^\d+(,\d{3})*(\.\d+)?$/g;
	return jv_reg_currency.test(value);
}

/**
 * 验证手机号
 **/
function jVerifyTelphone(value){
	var jv_reg_telphone = /^1[3|4|5|8][0-9]\d{4,8}$/;
	return jv_reg_telphone.test(value);
}

/**
 * 验证座机号
 **/
function jVerifyPhone(value){
	var jv_reg_phone = /(^[0-9]{3,4}\-[0-9]{7,8}$)|(^[0-9]{7,8}$)|(^\([0-9]{3,4}\)[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$)/;
	return jv_reg_phone.test(value);
}

/**
 * 验证身份证
 **/
function jVerifyId(value){
	var jv_reg_id = /^(\d{14}|\d{17})(\d|[xX])$/;
	return jv_reg_id.test(value);
}