$.fn.serializeObject = function(){    
        var o = {};    
        var a = this.serializeArray();  
        $.each(a, function() {    
            if (o[this.name]) {    
                if (!o[this.name].push) {    
                    o[this.name] = [ o[this.name] ];    
                }    
                o[this.name].push(jQuery.trim(this.value) || '');    
            } else {    
                o[this.name] = jQuery.trim(this.value) || '';    
            }    
        });    
        return o;    
	};

/**判断是否为正整数,零,小数
 * @author
 * @param {} number
 * @return {Boolean}
 */
function checkNumber(number){
	if(!number){
		return true;
	}
	if (/^[0-9]+\.{0,1}[0-9]{0,2}$/.test(number)) {
		return true;
	} else {
		return false;
	}
}	

/**
 * 验证qq号
 * @param {} qq
 * @return {Boolean}
 */
function checkQQ(qq){
	if(!qq){
		return true;
	}
	if(/^[1-9]\d{4,15}$/.test(qq)){
		return true;
	}else{
		return false;
	}
}

/**
 * 判断是否为11位手机号码
 * @param {} moblie
 * @return {Boolean}
 */
function checkMobile(moblie){
	if(!moblie){
		return true;
	}
	if (/^[1][0-9]{10}$/.test(moblie)) {
		return true;
	} else {
		return false;
	}
}

/**
 * 判断是否为Email地址
 * @param {} email
 * @return {Boolean}
 */
function checkEmail(email){
	if(!email){
		return true;
	}
	if(email.indexOf("@")<0){
		return false;
	}
	return true;
}

/**
 * 判断是否倍数
 * @param {} num
 * @param {} baseNum
 */
function checkMultiples(num,baseNum){
	if(!num && !baseNum){
		return true;
	}
	num = Number(num);
	if(isNaN(num)){
		return false;
	}
	baseNum = Number(baseNum);
	if(isNaN(baseNum)){
		return false;
	}
	var res = parseInt(num*1000) % parseInt(baseNum*1000);
	if(res == 0){
		return true;
	}else{
		return false;
	}
}

/**
 * 获取字符串的长度，一个汉字为两个字符
 * @param {} str
 * @return {}
 */
function getStrLength(str) {
	var re = /^[a-zA-Z0-9\u4E00-\u9FA5_]*$/;
	var len = str.length;
	var num = 0;
	for (i = 0; i <= len; i++) {
		var v = escape(str.charAt(i));
		if (v.indexOf('%') == 0) {
			num = num + 2;
		}
   }
	var a = len - num / 2;
	var b = num + a;
	return b;
}

/**
 * 封装Ajax
 * @param {} ajaxArgs
 */
function doAjax(ajaxArgs){
	if($.isFunction(ajaxArgs.error)){
		var oldErrFn = ajaxArgs.error; 
	}
	var ajaxData = new Object();
	if(ajaxArgs.data){
		ajaxData = ajaxArgs.data;
		if(typeof(ajaxArgs.data) == "string"){
			if(jQuery.trim(ajaxArgs.data) != "" ){
				ajaxData = ajaxData+"&checkLogin=true";
			}else{
				ajaxData = "checkLogin=true";
			}
		}else{
			ajaxData.checkLogin = "true";		
		}
	}else{
		ajaxData.checkLogin = "true";
	}
	ajaxArgs.data = ajaxData;
	ajaxArgs.type = 'post';
	ajaxArgs.error = function (XMLHttpRequest, textStatus, errorThrown){
			if(XMLHttpRequest.status == 403){
				redirectToLogin();
			}else if(oldErrFn){
				oldErrFn(XMLHttpRequest, textStatus, errorThrown);
			}
	}
	$.ajax(ajaxArgs);
}

/**
 * 将文本框值步进相加
 * @param {} domId
 * @param {} step
 * @param {} max
 */
function stepPlus(domId,step,max){
	if(typeof(domId) == "undefined"){
		return ;
	}
	step = Number(step);
	if(isNaN(step)){
		step = 1 ;
	}
	var cuNum = Number(jQuery.trim($("#"+domId).val()));
	var num = step;
	if(!isNaN(cuNum)){
		num = cuNum.valueOf() + step.valueOf();
	}
	if(!isNaN(Number(max)) && num > max){
		num = max;
	}
	num = commonShrink(Number(num).toFixed(2));
	$("#"+domId).val(num);
}

/**
 * 将文本框值步进相减
 * @param {} domId
 * @param {} step
 * @param {} min
 */
function stepMinus(domId,step,min){
	if(typeof(domId) == "undefined"){
		return ;
	}
	step = Number(step);
	if(isNaN(step)){
		step = 1 ;
	}
	var cuNum = Number(jQuery.trim($("#"+domId).val()));
	var num = step;
	if(!isNaN(cuNum)){
		num = cuNum.valueOf() - step.valueOf();
	}
	var minNum = 1;
	if(!isNaN(Number(min))){
		minNum = min;
	}
	if(num < minNum){
		num = minNum;
	}
	num = commonShrink(Number(num).toFixed(2));
	$("#"+domId).val(num);
}

/**
 * 用ajax的方式将请求后的页面填充到指定DIV，如果DIV下有节点，则不填充
 * @param {} id
 * @param {} url
 * @param {} data
 */
function getDivContent(id,url,data){
	if(typeof(data)=="undefined"){
		data = new Object();
	}
	if($("#"+id+":has(*)").length==0){
		$.ajax({
			url:url,
			type:'post',
			data:data,
			success:function(data){
				$("#"+id).html(data);
			}
		});
	}
}

/**
 * 用Ajax的方式将请求后的页面填充到指定DIV
 * @param {} id
 * @param {} url
 * @param {} data
 */
function refreshDivContent(id,url,data){
	if(typeof(data)=="undefined"){
		data = new Object();
	}
	$.ajax({
		url:url,
		type:'post',
		data:data,
		success:function(data){
			$("#"+id).empty().html(data);
		}
	});
}

/**
 * 保留2位小数
 */
function toDecimal(x) {   
    var f = parseFloat(x);   
    if (isNaN(f)) {   
        return;   
    }   
    f = Math.round(x*100)/100;   
    return f;   
}

/**
 * 公共警告框
 @param {} content
 * @param {} title
 * @param {} fn：回调函数，会回传一个参数：action
 * action为两个值：ok,close,分别对应 确定，关闭两个按钮
 * 如需阻止窗口关闭，请在判断 action 值内加入 return false
 */
function showAlert(content,title,fn){
	if(!content){
		content = "";
	}
	if(!title){
		title = "信息提示";
	}
	if(!jQuery.isFunction(fn)){
		fn = function(action,val){}
	}
	
	asyncbox.alert(content,title,fn);
	$("#asyncbox_alert").bgiframe();
}

/**
 * 公共输入确认框
 * @param {} title：标题
 * @param {} tips：输入框上的小提示
 * @param {} content:默认内容
 * @param {} textType：输入框类型，支持 text || textarea || password
 * @param {} fn：回调函数，会回传两个参数：action,val
 * action为三个值：ok,cancel,close，分别对应 确定，取消，关闭三个按钮
 * val为输入的值
 * 如需阻止窗口关闭，请在判断 action 值内加入 return false
 */
function showPromte(title,tips,content,textType,fn){
	if(!title){
		title = "提示";
	}
	if(!tips){
		tips = "请输入";
	}
	if(!content){
		content = "";
	}
	if(!textType){
		textType = "text";
	}
	if(!jQuery.isFunction(fn)){
		fn = function(action,val){}
	}
	asyncbox.prompt(title,tips,content,textType,fn);
}

/**
 * 公共确认框
 * @param {} content:默认内容
 * @param {} title：标题
 * @param {} fn：回调函数，会回传一个参数：action
 * action为三个值：ok,cancel,close，分别对应 确定，取消，关闭三个按钮
 * 如需阻止窗口关闭，请在判断 action 值内加入 return false
 */
function showConfirm(content,title,fn){
	if(!content){
		content = "";
	}
	if(!title){
		title = "请确认";
	}
	if(!jQuery.isFunction(fn)){
		fn = function(action,val){}
	}
	asyncbox.confirm(content,title,fn);
}

/**
 * 公共显示成功对话框
 * @param {} content
 * @param {} title
 * @param {} fn：回调函数，会回传一个参数：action
 * action为两个值：ok,close，分别对应 确定，关闭两个按钮
 * 如需阻止窗口关闭，请在判断 action 值内加入 return false
 */
function showSuccess(content,title,fn){
	if(!content){
		content = "";
	}
	if(!title){
		title = "成功";
	}
	if(!jQuery.isFunction(fn)){
		fn = function(action){}
	}
	asyncbox.success(content,title,fn);
}

/**
 * 公共显示失败对话框
 * @param {} content
 * @param {} title
 * @param {} fn：回调函数，会回传一个参数：action
 * action为两个值：ok,close，分别对应 确定，关闭两个按钮
 * 如需阻止窗口关闭，请在判断 action 值内加入 return false
 */
function showError(content,title,fn){
	if(!content){
		content = "";
	}
	if(!title){
		title = "失败";
	}
	if(!jQuery.isFunction(fn)){
		fn = function(action,val){}
	}
	asyncbox.error(content,title,fn);
}

/**
 * 公共显示提醒对话框
 * @param {} content
 * @param {} title
 * @param {} fn：回调函数，会回传一个参数：action
 * action为四个值：yes,no,cancel,close,分别对应 是，否，关闭，关闭四个按钮
 * 如需阻止窗口关闭，请在判断 action 值内加入 return false
 */
function showWarning(content,title,fn){
	if(!content){
		content = "";
	}
	if(!title){
		title = "提醒";
	}
	if(!jQuery.isFunction(fn)){
		fn = function(action,val){}
	}
	asyncbox.warning(content,title,fn);
}

/**
 * 公共显示标签框
 * @param {} content
 * @param {} type 提示类型。alert、success、error 默认 alert
 * @param {} timer 自动关闭毫秒数。默认 1.5 秒。
 */
function showTips(content,type,timer){
	if(!content){
		content = "";
	}
	if(!type){
		type = "alert";
	}
	if(typeof(timer) != "number"){
		timer = 1.5;
	}
	asyncbox.tips(content,type,timer);
}

/**
 * 图片出错处理
 * 例：onError="dealwithErrImg(event)"
 * @param {} event
 * dfPic:想设定的图片路径
 * 需限定图片大小，以免影响页面布局
 */
function dealwithErrImg(e,dfPic){
	var img = e.srcElement || e.target;
	if(dfPic){
		img.src = dfPic;		
	}else{
		img.src = appPath+"/images/default/imgLoadError.gif";	
	}
	img.onError = null;
}

/**
 * 给回车键绑定事件
 * @param {} e
 * @param {} fn
 */
function bindEnter(e,fn){
	if(!jQuery.isFunction(fn)){
		return ;
	}
	var keynum;
    if(window.event){//IE
		keynum = e.keyCode;
	}else if(e.which){// Netscape/Firefox/Opera
		keynum = e.which;
	}
	if(keynum == 13){
		fn();	
	}
}

/**
 * 去除数值尾部0
 * @param {} value
 * @return {}
 */
function commonShrink(value){
	var n = parseFloat(value).toFixed(1);
	var nn = parseFloat(value).toFixed(2);
	var f = nn - n;
	
	if(f == 0){
		var m = parseFloat(n).toFixed(0);
		var t = m - n;
		if(t == 0){
			return Number(m);
		}else{
			return Number(n);
		}
	}else{
		return Number(nn);
	}
}
