/**
* JQuery后台表单扩展函数库
* 
*/
jQuery.extend({
	globalTimeoutHander : null,
	
	/**
	 * 增加表单验证错误信息
	 */
	addError : function(obj,title){
		if(jQuery(obj).next('div.formError').length>0){
			jQuery(obj).next('div.formError').attr('innerHTML',jQuery.getTitle(obj,title));
			return ;
		}
		//jQuery(obj).nextAll('span').hide();
		jQuery(obj).next('div.formSuccess').remove();
		var p = jQuery(obj).position();
		jQuery(obj).after('<div class="formError">'+jQuery.getTitle(obj,title)+'</div>');
		jQuery(obj).next('div.formError').css({top:(p.top-10)+"px",left:(p.left+jQuery(obj).width()+10)+"px"});
	},
	
	/**
	 * 表单域验证通过显示方式
	 */
	addSuccess : function(obj){
		if(jQuery(obj).next('div.formSuccess').length>0) return ;
		//jQuery(obj).nextAll('span').hide();
		jQuery(obj).next('div.formError').remove();
		var p = jQuery(obj).position();
		jQuery(obj).after('<div class="formSuccess">&nbsp;</div>');
		jQuery(obj).next('div.formSuccess').css({top:(p.top-10)+"px",left:(p.left+jQuery(obj).width()+10)+"px"});
	},
	
	/**
	 * 检查数值长度是否符合规定
	 */
	chkLength : function(classname,value){
		var reg = new RegExp(/^(min|max)_\d+$/i);
		var cls = classname.split('_');
		if(reg.test(classname)){
			var len = jQuery.int(cls[1]);
			if(cls[0]=='min'){
				if(len>value.length)
					return "长度必须大于"+cls[1];
			}else if(len<value.length)
				return "长度必须小于"+cls[1];
		}
		
		reg = new RegExp(/^eq_.+?$/i);
		if(reg.test(classname)){
			var $re = jQuery("input[name="+cls[1]+"]");
			var revalue = jQuery.trim($re.val());
			if(revalue!=value && revalue)
				return "同"+jQuery.getTitle($re,"不一致");
		}
	},
	
	/**
	 * 检查表单域
	 */
	chkInput : function(obj){
		var obj = jQuery(obj);
		var classes = jQuery.trim(obj[0].className.replace('text',''));
		if(!classes) return;
		var value = jQuery.trim(jQuery(obj).val());
		if(jQuery(obj).hasClass('require')&&value==''){
			jQuery.addError(obj);
			return false;
		}
		
		if(classes && value){
			classes = classes.split(' ');
			var len = classes.length;
			var formId = jQuery(obj).parentsUntil('form').attr("id");
			for(var i=0;i<len;i++){
				if(classes[i]=='require') continue;
				var lenmsg =jQuery.chkLength(classes[i],value); 
				if(lenmsg){
					jQuery.addError(obj,lenmsg);
					return false;
				}
				if(jQuery.regex[classes[i]]){
					if(!jQuery(obj).check(classes[i])){
						jQuery.addError(obj,'格式有误');
						return false;
					}
				}
			}
			if(jQuery.inArray('unique',classes)==-1){
				jQuery.addSuccess(obj);
			}else{//检查值是否在数据库中唯一
				jQuery.ajax({
					url : jQuery(obj).parentsUntil('form').action ? jQuery(obj).parentsUntil('form').action : location.href,
					data : 'field='+jQuery(obj).attr('name')+"&value="+value+"&unique=true",
					type : 'post',
					success : function(no){
						if(no > 0){
							jQuery.addError(obj,'在数据库表中已存在');
						}else
							jQuery.addSuccess(obj);
					}
				});
			}
		}else if(jQuery(obj).hasClass('require'))
			jQuery.addSuccess(obj);
	},
	
	/**
	 * 表单域获取焦点处理方式
	 * @param obj
	 * @return
	 */
	getFocus : function(obj){
		jQuery(obj).next('div.formError').remove();
		jQuery(obj).next('div.formSuccess').remove();
		jQuery(obj).nextAll('span').show();
	},
	
	/**
	 * 获取表单域对应的描述信息
	 * @param obj
	 * @param title
	 * @return
	 */
	getTitle : function(obj,title){
		if(!title){
			if(jQuery(obj).children('option').length>0 || jQuery(obj).attr('type')=='file')
				var title = "没有选择";
			else
				var title = "不能为空";
		}
		return jQuery.trim(jQuery(obj).parent('div').prev('div.addTitle').attr('innerHTML'))+title;
	},
	
	formBgRemove : function(autotime,href){
		autotime -= 1;
		if(autotime>0){
			jQuery("#msgbox .autoclose b").attr('innerHTML',autotime);
			jQuery.globalTimeoutHander = setTimeout('jQuery.formBgRemove('+autotime+',"'+href+'")',1000);
		}else{
			if(href){
				document.location.href = href;
			}else{
				if(jQuery.globalTimeoutHander) window.clearTimeout(jQuery.globalTimeoutHander);
				jQuery("#bodyContainer").show();
				jQuery("#formBack").remove();
			}
		}
	},
	
	bindBox : function(obj){
		jQuery(obj).bind('focus',function(){
			jQuery.getFocus(this);
		}).bind('blur',function(){
			jQuery.chkInput(this);
		});
	},
	
	checkAllInput : function(tag){
		jQuery(tag).each(function(){
			jQuery.chkInput(this);
		});
	},
	
	/**
	 * 提交表单时，自动验证所有数据是否合法
	 */
	submitForm :  function(form){
		jQuery.checkAllInput(form+" :text");
		jQuery.checkAllInput(form+" :file");
		jQuery.checkAllInput(form+" :password");
		jQuery.checkAllInput(form+" select");
		jQuery.checkAllInput(form+" textarea");
	},
	
	form : function(form){
		if(jQuery(form).attr('id')==''||jQuery(form).attr('id')==undefined){
			var name = new Date().getTime();
			name = "adminForm_"+name;
			jQuery(form).attr('id',name);
		}
		
		jQuery(form).bind("submit",function(){
			loading2();
			jQuery.submitForm('#'+this.id);
			//验证过程中无错误信息，则提交表单
			if(jQuery('.formError').length<=0){
				jQuery(":submit,:image").attr("disabled",true);
				jQuery(this).unbind('submit');
				jQuery(this).submit();
			}else{
				removeLoading();
			}
			return false;
		});
		var id = '#'+jQuery(form).attr('id');
		jQuery.bindBox(jQuery(id+' :text'));
		jQuery.bindBox(jQuery(id+' :file'));
		jQuery.bindBox(jQuery(id+' :password'));
		jQuery.bindBox(jQuery(id+' select'));
		jQuery.bindBox(jQuery(id+' textarea'));
	}
});
