验证IDcard

创建时间:2016/3/28 13:59
更新时间:2016/3/28 14:05
来源:http://b2badmin.meiya.com/Scripts/base.js?v=20151001

/*
Copyright (c) 2008, Meiya! Inc. All rights reserved.
version: 1.0
created:songzm
date:2011-11-05
*/

/*浏览器判断*/
var 
gsAgent = navigator.userAgent.toLowerCase(),
gsAppVer = navigator.appVersion.toLowerCase(),
gsAppName = navigator.appName.toLowerCase(),

gbIsOpera = gsAgent.indexOf("opera") > -1,
gbIsWebKit = gsAgent.indexOf("applewebkit") > -1,
gbIsKHTML = gsAgent.indexOf("khtml") > -1
|| gsAgent.indexOf("konqueror") > -1 || gbIsWebKit,
gbIsChrome = gbIsWebKit && gsAgent.indexOf("chrome") > -1,
gbIsSafari = gbIsWebKit && !gbIsChrome,
gbIsIE = (gsAgent.indexOf("compatible") > -1 && !gbIsOpera)
|| gsAgent.indexOf("msie") > -1,
gbIsTT = gbIsIE ? (gsAppVer.indexOf("tencenttraveler") != -1 ? 1 : 0) : 0,
gbIsQBWebKit = gbIsWebKit ? (gsAppVer.indexOf("qqbrowser") != -1 ? 1 : 0) : 0,
gbIsQBIE = gbIsIE,
gbIsFF = gsAgent.indexOf("gecko") > -1 && !gbIsKHTML,
gbIsNS = !gbIsIE && !gbIsOpera && !gbIsKHTML && (gsAgent.indexOf("mozilla") == 0)
&& (gsAppName == "netscape"),
gbIsAgentErr = !(gbIsOpera || gbIsKHTML || gbIsSafari || gbIsIE || gbIsTT
|| gbIsFF || gbIsNS),
gbIsWin = gsAgent.indexOf("windows") > -1 || gsAgent.indexOf("win32") > -1,
gbIsVista = gbIsWin && (gsAgent.indexOf("nt 6.0") > -1 || gsAgent.indexOf("windows vista") > -1),
gbIsWin7 = gbIsWin && gsAgent.indexOf("nt 6.1") > -1,
gbIsMac = gsAgent.indexOf("macintosh") > -1 || gsAgent.indexOf("mac os x") > -1,
gbIsLinux = gsAgent.indexOf("linux") > -1,
gbIsAir = gsAgent.indexOf("adobeair") > -1;

String.prototype.trim = function () { return this.replace(/(^\s*)|(\s*$)/g, ""); }
String.prototype.isInt = function () { return new RegExp('^[\\d]+$').test(this) ? true : false; }
String.prototype.toNumber = function () { return Number(this); }
String.prototype.isChar = function () { return new RegExp('^[A-Za-z]+$').test(this) ? true : false; }
String.prototype.isPhone = function () { return new RegExp('^0[1-9]{1,2}[0-9]{1}-[1-9]{1}[0-9]{6,7}$').test(this) ? true : false; }
String.prototype.isMobile = function () { return new RegExp('^1[358]{1}[0-9]{1}[0-9]{8}$').test(this) ? true : false; }
String.prototype.getLength = function () {
    var len = 0;
    for (var i = 0; i < this.length; i++) {
        if (this.charCodeAt(i) > 256)
            len += 2;
        else
            len++;
    }
    return len;
}
String.prototype.isIdcard = function () {
    var Errors = new Array("true", "身份证号码位数不对!", "身份证号码出生日期超出范围或含有非法字符!", "身份证号码校验码错误!", "身份证地区非法!");
    var area = { 11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "内蒙古", 21: "辽宁", 22: "吉林", 23: "黑龙江", 31: "上海", 32: "江苏", 33: "浙江", 34: "安徽", 35: "福建", 36: "江西", 37: "山东", 41: "河南", 42: "湖北", 43: "湖南", 44: "广东", 45: "广西", 46: "海南", 50: "重庆", 51: "四川", 52: "贵州", 53: "云南", 54: "西藏", 61: "陕西", 62: "甘肃", 63: "青海", 64: "宁夏", 65: "新疆", 71: "台湾", 81: "香港", 82: "澳门", 91: "国外" }
    var idcard = this, Y, JYM;
    var S, M;
    var idcard_array = new Array();
    idcard_array = idcard.split("");
    //地区检验
    if (area[parseInt(idcard.substr(0, 2))] == null) return Errors[4];
    //身份号码位数及格式检验
    switch (idcard.length) {
        case 15:
            if ((parseInt(idcard.substr(6, 2)) + 1900) % 4 == 0 || ((parseInt(idcard.substr(6, 2)) + 1900) % 100 == 0 && (parseInt(idcard.substr(6, 2)) + 1900) % 4 == 0)) {
                ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;
                //测试出生日期的合法性
            } else {
                ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;
                //测试出生日期的合法性
            }
            if (ereg.test(idcard)) return Errors[0];
            else return Errors[2];
            break;
        case 18:
            //18位身份号码检测
            //出生日期的合法性检查
            //闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))
            //平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))
            if (parseInt(idcard.substr(6, 4)) % 4 == 0 || (parseInt(idcard.substr(6, 4)) % 100 == 0 && parseInt(idcard.substr(6, 4)) % 4 == 0)) {
                ereg = /^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;
                //闰年出生日期的合法性正则表达式
            } else {
                ereg = /^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;
                //平年出生日期的合法性正则表达式
            }
            if (ereg.test(idcard)) {//测试出生日期的合法性
                //计算校验位
                S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7
                        + (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9
                        + (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10
                        + (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5
                        + (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8
                        + (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4
                        + (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2
                        + parseInt(idcard_array[7]) * 1
                        + parseInt(idcard_array[8]) * 6
                        + parseInt(idcard_array[9]) * 3;
                Y = S % 11;
                M = "F";
                JYM = "10X98765432";
                M = JYM.substr(Y, 1);
                //判断校验位
                if (M == idcard_array[17].toUpperCase()) return Errors[0]; //检测ID的校验位
                else return Errors[3];
            }
            else return Errors[2];
            break;
        default:
            return Errors[1];
            break;
    }
}

jQuery.extend(
 {
     /**
     * @see  将javascript数据类型转换为json字符串
     * @param 待转换对象,支持object,array,string,function,number,boolean,regexp
     * @return 返回json字符串
     */
     toJSON: function (object) {
         var type = typeof object;
         if ('object' == type) {
             if (Array == object.constructor)
                 type = 'array';
             else if (RegExp == object.constructor)
                 type = 'regexp';
             else
                 type = 'object';
         }
         switch (type) {
             case 'undefined':
             case 'unknown':
                 return;
                 break;
             case 'function':
             case 'boolean':
             case 'regexp':
                 return object.toString();
                 break;
             case 'number':
                 return isFinite(object) ? object.toString() : 'null';
                 break;
             case 'string':
                 return '"' + object.replace(/(\\|\")/g, "\\$1").replace(/\n|\r|\t/g,
       function () {
           var a = arguments[0];
           return (a == '\n') ? '\\n' :
                       (a == '\r') ? '\\r' :
                       (a == '\t') ? '\\t' : ""
       }) + '"';
                 break;
             case 'object':
                 if (object === null) return 'null';
                 var results = [];
                 for (var property in object) {
                     var value = jQuery.toJSON(object[property]);
                     if (value !== undefined)
                         results.push(jQuery.toJSON(property) + ':' + value);
                 }
                 return '{' + results.join(',') + '}';
                 break;
             case 'array':
                 var results = [];
                 for (var i = 0; i < object.length; i++) {
                     var value = jQuery.toJSON(object[i]);
                     if (value !== undefined) results.push(value);
                 }
                 return '[' + results.join(',') + ']';
                 break;
         }
     }
 });


var Meiya = {};
Meiya.PlugIn = {};

/*遮罩使用方式:
显示:Meiya.PlugIn.Mask.show();
关闭: Meiya.PlugIn.Mash.hide();
*/
Meiya.PlugIn.Mask = {
    show: function () {
        if (!document.getElementById('mask_layer')) {
            var div = document.createElement('div');
            div.id = 'mask_layer';
            div.style.backgroundColor = "#FFFF00";
            div.style.display = "none";
            div.innerHTML = "<iframe id='maskBgfrm' frameborder='1' style='z-index:10;position: absolute;left:0px;top:-1px;width:100%;height:100px;filter:Alpha(Opacity=30);-moz-opacity:0.4;opacity:0.4' scrolling='no' src=''></iframe>";
            document.body.appendChild(div);
            //$('#mask_layer').addClass("maskbg");
            $("#mask_layer").css({ "background": "#000000 none repeat scroll 0 0", "height": "100%", "left": "0", "opacity": "0.2", "position": "absolute", "top": "0", "width": "100%", "z-index": "11" });
        }

        $('#mask_layer').height($(document).height());
        $('#maskBgfrm').height($(document).height());
        $('#mask_layer').css("filter", "Alpha(Opacity=30)");
        $('#mask_layer').css("-moz-opacity", "0.3");
        $('#mask_layer').css("opacity", "0.3");
        $('#mask_layer').show();
    },
    hide: function () {
        if (document.getElementById('mask_layer'))
            $('#mask_layer').hide();
    }
}

/*
弹出提示框调用方式:
打开:
Meiya.PlugIn.Pop.show(params);
params参数格式为:
{
title:"温馨提示",//提示标题
Content:"内容",//提示内容
IsClose:false,//是否有关闭按钮
IsEnter:false,//是否有确定按钮
IsCancel:false,//是否有取消按钮
Data:'sssss',//传递到按钮事件中的数据参数
CallBack:{
Close:function(){},//绑定到关闭按钮上的事件
Enter:function(){},//绑定到确定按钮上的事件
Cancel:function(){}//绑定到取消按钮上的事件
}
}

关闭:
Meiya.PlugIn.Pop.hide();
*/
Meiya.PlugIn.Pop = {
    HTML: function (params) {
        var html = [];
        html.push('<div class="popUp">');
        html.push('     <h2>{0}{1}<span title="最小化后点击右下角还原按钮可恢复" onclick=\'$(".popUp").hide();$("#mini").show()\'>最小化</span></h2>');
        html.push('     <div class="tipsinfo">');
        html.push('             <p >{2}</p>');
        html.push('             <p class="caozuo">');
        html.push('                     {3}'); //<input type="button" value="确 定" name="" />
        html.push('                     {4}'); //<input type="button" value="取 消" name="" />
        html.push('                     {5}'); //<input type="button" value="关 闭" name="" />
        html.push('             </p>');
        html.push('     </div>');
        html.push('</div>');

        if (params.title) html[1] = html[1].replace("{1}", params.title);
        if (params.Content) html[3] = html[3].replace("{2}", params.Content);

        var btnEnterText = "确 定", btnCancelText = "取 消", btnCloseText = "关 闭";
        if (params.BtnEnterText && params.BtnEnterText.length > 0) {
            btnEnterText = params.BtnEnterText;
        }
        if (params.BtnCancelText && params.BtnCancelText.length > 0) {
            btnCancelText = params.BtnCancelText;
        }
        if (params.BtnCloseText && params.BtnCloseText.length > 0) {
            btnCloseText = params.BtnCloseText;
        }

        if (params.IsClose) {
            html[1] = html[1].replace("{0}", '<a href="javascript:void(0)" id="aClose" title="关闭"></a>');
            html[7] = html[7].replace("{5}", '<input type="button" id="btnClose" value="' + btnCloseText + '" name="" />');
        }
        else {
            html[1] = html[1].replace("{0}", '');
            html[7] = html[7].replace("{5}", '');
        }
        if (params.IsEnter) {
            html[5] = html[5].replace("{3}", '<input type="button" id="btnEnter" value="' + btnEnterText + '" name="" />');
        }
        else {
            html[5] = html[5].replace("{3}", '');
        }
        if (params.IsCancel) {
            html[6] = html[6].replace("{4}", '<input type="button" id="btnCancel" value="' + btnCancelText + '" name="" />');
        }
        else {
            html[6] = html[6].replace("{4}", '');
        }

        return html.join("");
    },
    show: function (params) {
        if (!params) {
            params = {};
        }

        params.title = params.title ? params.title : "温馨提示";
        params.IsClose = params.IsClose ? params.IsClose : false;
        params.IsEnter = params.IsEnter ? params.IsEnter : false;
        params.IsCancel = params.IsCancel ? params.IsCancel : false;
        params.Content = params.Content ? params.Content : "......";
        params.CallBack = params.CallBack ? params.CallBack : false;
        params.Data = params.Data ? params.Data : "";

        if ($(".popUp").length > 0) $("div").remove(".popUp");

        $(document.body).append(Meiya.PlugIn.Pop.HTML(params));

        $(".popUp").css("top", ($(document).scrollTop() + 260) + "px");
        $(".popUp").css("left", ($("body").width() - $(".popUp").width()) / 2);

        if (params.IsClose) {
            $("#aClose,#btnClose").bind("click", params.Data, params.CallBack.Close);
        }

        if (params.IsCancel) {
            $("#btnCancel").bind("click", params.Data, params.CallBack.Cancel);
        }

        if (params.IsEnter) {
            $("#btnEnter").bind("click", params.Data, params.CallBack.Enter);
        }

        $(".popUp").show();
    },
    hide: function () {
        $(".popUp").hide();

        if ($("#btnEnter").length > 0)
            $("#btnEnter").unbind();

        if ($("#btnCancel").length > 0)
            $("#btnCancel").unbind();

        if ($("#btnClose").length > 0)
            $("#btnClose,#aClose").unbind();
    },
    SetTips: function (msg) {
        $(".tipsinfo > p:first-child").html(msg);
    },
    Reset: function (params) {
        $("div").remove(".popUp");
        Meiya.PlugIn.Pop.show(params);
    }
}

//登录弹出框调用方式:Meiya.PlugIn.Login.show({ CallBack: 回调函数名 });
Meiya.PlugIn.Login = {
    HTML: function () {
        var html = [];
        html.push('<div class="popLoginBox">');
        html.push('     <h2></h2>');
        html.push('     <div class="popLogin">');
        html.push('             <ul>');
        html.push('               <li>');
        html.push('                     <span>用户名:</span>');
        html.push('                     <input type="text" value="" id="txtLoginName" class="right_color"  maxlength=20/>');
        html.push('               </li>');
        html.push('               <li>');
        html.push('                     <span>密 码:</span>');
        html.push('                     <input type="password" value="" id="txtLoginPwd" class="" maxlength=20/>');
        html.push('               </li>');
        html.push('               <li>');
        html.push('                     <span>验证码:</span>');
        html.push('                     <input type="text" maxlength=5 id="txtValidCode" class="validate" />');
        html.push('                 <span class="validateImg"><img id="imgvcode" src="/code.aspx?r=' + new Date().getTime() + '" /></span>');
        html.push('                 <a href="javascript:void(0)" onclick="$(\'#imgvcode\').attr(\'src\',\'/code.aspx?r=\' + new Date().getTime());return false;" class="change">换一张</a>');
        html.push('       </li>');
        html.push('       <li>');
        html.push('             <span>&nbsp;</span>');
        html.push('             <input type="button" id="btnPopLogin" value="" class="login_icon" />');
        html.push('       </li>');
        html.push('     </ul>');
        html.push('  </div>');
        html.push('</div>');

        return html.join("");
    },
    show: function (params) {
        Meiya.PlugIn.Mask.show();

        if ($(".popLoginBox").length == 0) {
            $(document.body).append(Meiya.PlugIn.Login.HTML());
        }

        $(".popLoginBox").css("top", ($(document).scrollTop() + 200) + "px");
        $(".popLoginBox").css("left", ($("body").width() - $(".popLoginBox").width()) / 2);

        $("#btnPopLogin").bind("click", { CallBack: params.CallBack }, Meiya.PlugIn.Login.login);

        $(".popLoginBox").show();
    },
    hide: function () {
        $(".popLoginBox").hide();
    },
    login: function (d) {
        var data = {
            name: $("#txtLoginName").val(),
            pwd: $("#txtLoginPwd").val(),
            code: $.trim($("#txtValidCode").val())
        }

        if (data.name == "") {
            alert("请输入用户名。"); $("#txtLoginName").select(); return;
        }

        if (data.pwd == "") {
            alert("请输入登录密码。"); $("#txtLoginPwd").select(); return;
        }

        if (data.code == "") {
            alert("请输入验证码。"); $("#txtValidCode").select(); return;
        }

        $.ajax({
            type: 'POST',
            url: "/Login.aspx",
            //contentType: "application/json",
            dataType: 'json',
            data: "name=" + data.name + "&pwd=" + data.pwd + "&code=" + data.code,
            success: function (json) {
                if (json.Success) {
                    Meiya.PlugIn.Login.hide();
                    d.data.CallBack(false); //回调后续的操作
                }
                else {
                    alert(json.Info);
                }
            },
            error: function (e) {
                alert(e.responseText);
            }
        });
    }
}

//获取CheckBox的所选值
function getCheckBoxVal(name) {
    var rValue = '';
    $("input[name='" + name + "']").each(function () {
        if ($(this).attr("checked")) {
            rValue += "," + $(this).attr("value");
        }
    })
    return rValue.substr(1);
}

//CheckBox全选
function checkAll(ojb, name, isReverse) {
    var checked = $(ojb).attr("checked");
    $("input[name='" + name + "']").each(function () {
        if (isReverse) {
            if ($(this).attr("checked"))
                $(this).attr("checked", false);
            else
                $(this).attr("checked", true);
            $(ojb).parent().find("input").eq(0).attr("checked", false);
        }
        else {
            $(this).attr("checked", checked);
        }
    })
}


//日期校验
function validateCNDate(date,time) {
    var strDate = date;
    var result = strDate.match(/((^((1[8-9]\d{2})|([2-9]\d{3}))(-)(10|12|0?[13578])(-)(3[01]|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))(-)(11|0?[469])(-)(30|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))(-)(0?2)(-)(2[0-8]|1[0-9]|0?[1-9])$)|(^([2468][048]00)(-)(0?2)(-)(29)$)|(^([3579][26]00)(-)(0?2)(-)(29)$)|(^([1][89][0][48])(-)(0?2)(-)(29)$)|(^([2-9][0-9][0][48])(-)(0?2)(-)(29)$)|(^([1][89][2468][048])(-)(0?2)(-)(29)$)|(^([2-9][0-9][2468][048])(-)(0?2)(-)(29)$)|(^([1][89][13579][26])(-)(0?2)(-)(29)$)|(^([2-9][0-9][13579][26])(-)(0?2)(-)(29)$))/);
    if (time)
        result = strDate.match(/^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29))\s+([0-1]?[0-9]|2[0-3]):([0-5][0-9])$/); //:([0-5][0-9])
    if (result == null) {
        return false;
    }
    return true;
}

//保留两位小数           
//功能:将浮点数四舍五入,取小数点后2位         
function toDecimal(x) {
    var f = parseFloat(x);
    if (isNaN(f)) {
        return 0;
    }
    f = Math.round(x * 100) / 100;
    return f;
}


//正则表达式判断 yyyy-MM-dd HH:mm 时间格式
function checkDate(obj) {
    var str = obj
    var re = /^(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2})$/
    if (!re.test(str))
        return false;
    var strYear = RegExp.$1;
    var strMonth = RegExp.$2;
    strMonth = parseInt(strMonth, 10) - 1
    var strDate = RegExp.$3;
    strDate = parseInt(strDate, 10)
    var strHour = RegExp.$4;
    strHour = parseInt(strHour, 10)
    var strMinute = RegExp.$5;
    strMinute = parseInt(strMinute, 10)
    var tempDate = new Date(strYear, strMonth, strDate, strHour, strMinute, 0)
    if ((tempDate.getFullYear() == strYear) && (tempDate.getMonth() == strMonth) && (tempDate.getDate() == strDate) && (tempDate.getHours() == strHour) && (tempDate.getMinutes() == strMinute) == true) {
        return true;
    }
    return false;
}

function compareDate(begainDate, endDate) {
    var re = /^(\d{4})-(\d{1,2})-(\d{1,2})(\s(\d{1,2}):(\d{1,2})(:(\d{1,2}))?)?$/
    if (!re.test(begainDate)) return -1;
    var bYear = RegExp.$1;
    var bMonth = parseInt(RegExp.$2, 10) - 1;
    var bDay = parseInt(RegExp.$3, 10);
    var bHour = isNaN(parseInt(RegExp.$5, 10)) ? "0" : parseInt(RegExp.$5, 10);
    var bMinute = isNaN(parseInt(RegExp.$6, 10)) ? "0" : parseInt(RegExp.$6, 10);
    var bSecond = isNaN(parseInt(RegExp.$8, 10)) ? "0" : parseInt(RegExp.$8, 10);

    var bDate = new Date(bYear, bMonth, bDay, bHour, bMinute, bSecond);

    if (!re.test(endDate)) return -2;
    var eYear = RegExp.$1;
    var eMonth = parseInt(RegExp.$2, 10) - 1;
    var eDay = parseInt(RegExp.$3, 10);
    var eHour = isNaN(parseInt(RegExp.$5, 10)) ? "0" : parseInt(RegExp.$5, 10);
    var eMinute = isNaN(parseInt(RegExp.$6, 10)) ? "0" : parseInt(RegExp.$6, 10);
    var eSecond = isNaN(parseInt(RegExp.$8, 10)) ? "0" : parseInt(RegExp.$8, 10);

    var eDate = new Date(eYear, eMonth, eDay, eHour, eMinute, eSecond);

    return eDate - bDate;
}

$(function () {
    var $f_tr = $("table.f_info > tbody > tr");
    var $p_tr = $("table.p_info > tbody > tr");
    $("table.f_info > tbody > tr:odd").addClass("odd");
    $f_tr.mouseover(function () {
        $(this).addClass("bgcolor");
    }).mouseout(function () {
        $(this).removeClass("bgcolor");
    });

    $("table.p_info > tbody > tr:odd").addClass("odd");
    $p_tr.mouseover(function () {
        $(this).addClass("bgcolor");
    }).mouseout(function () {
        $(this).removeClass("bgcolor");
    });
});

function openNewPage(subtitle, url) {
    window.parent.openPage(subtitle, url, "_blank");
}

function openInSelfPage(subtitle, url) {
    window.parent.openPage(subtitle, url);
}

function closeCurrentTab() {
    window.parent.closeCurrentTab();
}


//获取url参数值
function getQueryString(name) {
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
    var r = window.location.search.substr(1).match(reg);
    if (r != null) {
        // return unescape(r[2]);
        return decodeURI(r[2]);
    }
    return null;
}


function isTel(s) {
    var patrn = /^[0-9\-]+$/;
    if (patrn.exec(s) == null) return false;
    return true;
}

function isLetter(s) {
    var patrn = /^[a-z\sA-Z]+$/;
    if (patrn.exec(s) == null) return false;
    return true;
}
function isMobile(s) {
    var patrn = /^0?1[0-9]{10}$/;
    if (patrn.exec(s) == null) return false;
    return true;
}
function isEmail(s) {
    var patrn = /^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$/;
    if (patrn.exec(s) == null) return false;
    return true;
}
function isDigit(s) {
    var patrn = /^\d+$/;
    if (patrn.exec(s) == null) return false;
    return true;
}

function isAirline(s) {
    var patrn = /^[0-9a-zA-Z]{2}$/;
    if (patrn.exec(s) == null) return false;
    return true;
}

function isTime(s) {
    var patrn = /^(([0-1][0-9])|([2][0-3])):?([0-5][0-9])$/;
    if (patrn.exec(s) == null) return false;
    return true;
}

//设置cookie
function setCookie(name, value, expires, path, domain, secure) {
    var today = new Date();
    today.setTime(today.getTime());
    if (expires) {
        expires = expires * 1000 * 60 * 60 * 24;
    }
    var expires_date = new Date(today.getTime() + (expires));
    document.cookie = name + "=" + escape(value) + ((expires) ? ";expires=" +
            expires_date.toGMTString() : "") + ((path) ? ";path=" +
            path : "") + ((domain) ? ";domain=" + domain : "") +
            ((secure) ? ";secure" : "");
}

//获取cookie
function getCookie(name) {
    var start = document.cookie.indexOf(name + "=");
    var len = start + name.length + 1;
    if ((!start) && (name != document.cookie.substring(0, name.length))) {
        return null;
    }
    if (start == -1) {
        return null;
    }
    var end = document.cookie.indexOf(";", len);
    if (end == -1) {
        end = document.cookie.length;
    }
    return unescape(document.cookie.substring(len, end));
}

//删除cookie
function deleteCookie(name, path, domain) {
    var self = this;
    if (self.getCookie(name)) {
        document.cookie = name + "=" + ((path) ? ";path=" + path : "") +
                ((domain) ? ";domain=" + domain : "") +
                ";expires=Thu,01-Jan-1970 00:00:01 GMT";
    }
}

//日期格式化
Date.prototype.format = function (format) //author: meizz
{
    var o = {
        "M+": this.getMonth() + 1, //month
        "d+": this.getDate(), //day
        "h+": this.getHours(), //hour
        "m+": this.getMinutes(), //minute
        "s+": this.getSeconds(), //second
        "q+": Math.floor((this.getMonth() + 3) / 3), //quarter
        "S": this.getMilliseconds() //millisecond
    }
    if (/(y+)/.test(format)) format = format.replace(RegExp.$1,
    (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o) if (new RegExp("(" + k + ")").test(format))
        format = format.replace(RegExp.$1,
      RegExp.$1.length == 1 ? o[k] :
        ("00" + o[k]).substr(("" + o[k]).length));
    return format;
}

//精确加法
function accAdd(arg1, arg2) {
    arg1 = $.trim(arg1);
    arg2 = $.trim(arg2);
    var r1, r2, m, c;
    try {
        r1 = arg1.toString().split(".")[1].length;
    }
    catch (e) {
        r1 = 0;
    }
    try {
        r2 = arg2.toString().split(".")[1].length;
    }
    catch (e) {
        r2 = 0;
    }
    c = Math.abs(r1 - r2);
    m = Math.pow(10, Math.max(r1, r2));
    if (c > 0) {
        var cm = Math.pow(10, c);
        if (r1 > r2) {
            arg1 = Number(arg1.toString().replace(".", ""));
            arg2 = Number(arg2.toString().replace(".", "")) * cm;
        } else {
            arg1 = Number(arg1.toString().replace(".", "")) * cm;
            arg2 = Number(arg2.toString().replace(".", ""));
        }
    } else {
        arg1 = Number(arg1.toString().replace(".", ""));
        arg2 = Number(arg2.toString().replace(".", ""));
    }
    return (arg1 + arg2) / m;
}

//精确减法
function accSub(arg1, arg2) {
    arg1 = $.trim(arg1);
    arg2 = $.trim(arg2);
    var r1, r2, m, n;
    try {
        r1 = arg1.toString().split(".")[1].length;
    }
    catch (e) {
        r1 = 0;
    }
    try {
        r2 = arg2.toString().split(".")[1].length;
    }
    catch (e) {
        r2 = 0;
    }
    m = Math.pow(10, Math.max(r1, r2)); //last modify by deeka //动态控制精度长度
    n = (r1 >= r2) ? r1 : r2;
    return ((arg1 * m - arg2 * m) / m).toFixed(n);
}

//精确乘法
function accMul(arg1, arg2) {
    arg1 = $.trim(arg1);
    arg2 = $.trim(arg2);
    var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
    try { m += s1.split(".")[1].length } catch (e) { }
    try { m += s2.split(".")[1].length } catch (e) { }
    return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m)
}

//精确除法
function accDiv(arg1, arg2) {
    arg1 = $.trim(arg1);
    arg2 = $.trim(arg2);
    var t1 = 0, t2 = 0, r1, r2;
    try { t1 = arg1.toString().split(".")[1].length } catch (e) { }
    try { t2 = arg2.toString().split(".")[1].length } catch (e) { }
    with (Math) {
        r1 = Number(arg1.toString().replace(".", ""));
        r2 = Number(arg2.toString().replace(".", ""));
        return (r1 / r2) * pow(10, t2 - t1);
    }
}

/*
保留两位小数,第三位直接舍去 
*/
function keepTwoDecimal(num) {
    if (num > 0) {
        return accDiv(parseInt(accMul(accAdd(num, 0.00999999), 100)), 100);
    }
    else {
        return accDiv(parseInt(accMul(num, 100)), 100);
    }
}

/*
保留两位小数,第三位四舍五入
*/
function mathRound(num) {
    return Math.round(num * 100) / 100;
}

/*
返回值:返回大于或等于x,并且与之最接近的整数。
注:如果x是正数,则把小数“入”;如果x是负数,则把小数“舍”。
*/
function mathCeil(num) {
    return Math.ceil(num * 100) / 100;
}

/*
返回值:返回小于或等于x,并且与之最接近的整数。
注:如果x是正数,则把小数“舍”;如果x是负数,则把小数“入”。
*/
function mathFloor(num) {
    return Math.floor(num * 100) / 100;
}



function closeCurrentTabAndrefreshTab(refreshTabTitle) {
    //刷新列表页面
    window.parent.refreshTab(refreshTabTitle);
    //关闭当前页面
    window.parent.closeCurrentTab();
}

/*
保留整数,小数位进1 
*/
function keepInt(num) {
    if (num > 0) {
        return parseInt(accAdd(num, 0.99999999));
    }
    else {
        return parseInt(num);
    }
}

function meiya_alert(content, callback) {
    Meiya.PlugIn.Mask.show();
    Meiya.PlugIn.Pop.Reset({ title: "", Content: content, IsEnter: true, CallBack: { Enter: function () {
        if (typeof (callback) == "function") {
            callback();
        }
        Meiya.PlugIn.Mask.hide();
        Meiya.PlugIn.Pop.hide();
    }
    }
    });
}

function jsonDateFormat(jsonDate) {//json日期格式转换为正常格式
    try {//出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢!
        var date = new Date(parseInt(jsonDate.replace("/Date(", "").replace(")/", ""), 10));
        var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
        var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
        //        var hours = date.getHours();
        //        var minutes = date.getMinutes();
        //        var seconds = date.getSeconds();
        //        var milliseconds = date.getMilliseconds();
        return date.getFullYear() + "-" + month + "-" + day;
        //return date.getFullYear() + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds + "." + milliseconds;
    } catch (ex) {//出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢!
        return "";
    }
}