/**
 * 后台公共JS封装(依赖JQuery)
 * 古辰创智
 * 献
 */

/**
 * Ajax请求封装
 * @param type              请求方式：GET、POST
 * @param uri               请求URI
 * @param data              请求数据
 * @param success_Callback  请求成功时的回调地址
 * @param faild_callback    请求失败时的回调地址
 * @param async             是否发起异步请求
 */
function ajax(type, uri, data, success_Callback, faild_callback, async) {
    if (!async) {
        async = true;
    }
    type = type || "POST";
    var index = null;
    $.ajax({
        type: type,
        url: root_path + uri,
        data: data,
        dataType: "json",
        async:async,
        traditional: true,
        beforeSend: function () {
            /* AJAX请求前，展示加载层 */
            index = layer.load(0, {zIndex:1989101500, isOutAnim:true, shade: [0.8,'#fff']});
        },
        success: function(data){
            /* 请求成功 判断是否触发服务器逻辑的错误 */
            if (data.error) {
                /* 如果触发错误，则不会回调成功方法 */
                var info = (data.error == "auth_error") ? "[权限有误] 请联系管理员分配对应权限!" : "[服务器错误]" + data.error_msg;
                layer.msg(info,{icon: 1,time:1700});
                return;
            }
            /* 回调成功的方法 */
            success_Callback(data);
        },
        complete: function (xhr) {
            /* 请求结束后 关闭加载层 */
            layer.close(index);
        },
        error: function (xhr) {
            /* 此处需要将错误，传递会服务器，以便以后分析处理 */
            /*new Image().src = root_path + "/html_error/" + encodeURI(xhr.statusText);
            layer.msg('请求失败，请重试!',{icon: 1,time:1000});*/
            try {
                var data = JSON.parse(xhr.responseText);
                var info = (data.error == "auth_error") ? "[权限有误] 请联系管理员分配对应权限!" : "[服务器错误]" + data.error_msg;
                layer.msg(info,{icon: 1,time:1700});
            } catch (e) {
                new Image().src = root_path + "/html_error/" + encodeURI(xhr.statusText);
                layer.msg('请求失败，请重试!',{icon: 1,time:1000});
            }
            faild_callback(xhr);
        }
    });
}

/**
 * 格式化时间日期
 * @param date              时间对象/时间戳
 * @param format            格式化的格式
 * @returns {XML|string|void|*}
 */
function formatDate(date, format) {
    if (!date) {
        if (date !== 0) {
            return;
        }
    }
    if (!format) format = "yyyy-MM-dd";
    switch(typeof date) {
        case "string":
            date = new Date(date.replace(/-/, "/"));
            break;
        case "number":
            date = new Date(date);
            break;
    }
    if (!date instanceof Date) return;
    var dict = {
        "yyyy": date.getFullYear(),
        "M": date.getMonth() + 1,
        "d": date.getDate(),
        "H": date.getHours(),
        "m": date.getMinutes(),
        "s": date.getSeconds(),
        "MM": ("" + (date.getMonth() + 101)).substr(1),
        "dd": ("" + (date.getDate() + 100)).substr(1),
        "HH": ("" + (date.getHours() + 100)).substr(1),
        "mm": ("" + (date.getMinutes() + 100)).substr(1),
        "ss": ("" + (date.getSeconds() + 100)).substr(1)
    };
    return format.replace(/(yyyy|MM?|dd?|HH?|ss?|mm?)/g, function() {
        return dict[arguments[0]];
    });
}
/*判断数据是否为空*/
function isEmpty(obj) {
    if (obj == null || obj === "" || typeof(obj) === "undefined") {
        return true;
    }
    return false;
}
/**
 * 校验身份证信息,函数参数必须是字符串，因为二代身份证号码是十八位，而在javascript中，十八位的数值会超出计算范围，造成不精确的结果，导致最后两位和计算的值不一致，从而该函数出现错误。
 * @param idcode
 * @returns {boolean}
 */
function checkIDCard(idcode){
    // 加权因子
    var weight_factor = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];
    // 校验码
    var check_code = ['1', '0', 'X' , '9', '8', '7', '6', '5', '4', '3', '2'];
    var code = idcode + "";
    //最后一个
    var last = idcode[17];
    var seventeen = code.substring(0,17);
    // ISO 7064:1983.MOD 11-2
    // 判断最后一位校验码是否正确
    var arr = seventeen.split("");
    var len = arr.length;
    var num = 0;
    for(var i = 0; i < len; i++){
        num = num + arr[i] * weight_factor[i];
    }
    // 获取余数
    var resisue = num%11;
    var last_no = check_code[resisue];
    // 格式的正则
    // 正则思路
    /*
    第一位不可能是0
    第二位到第六位可以是0-9
    第七位到第十位是年份，所以七八位为19或者20
    十一位和十二位是月份，这两位是01-12之间的数值
    十三位和十四位是日期，是从01-31之间的数值
    十五，十六，十七都是数字0-9
    十八位可能是数字0-9，也可能是X
    */
    var idcard_patter = /^[1-9][0-9]{5}([1][9][0-9]{2}|[2][0][0|1][0-9])([0][1-9]|[1][0|1|2])([0][1-9]|[1|2][0-9]|[3][0|1])[0-9]{3}([0-9]|[X])$/;
    // 判断格式是否正确
    var format = idcard_patter.test(idcode);
    // 返回验证结果，校验码和格式同时正确才算是合法的身份证号码
    return !!(last === last_no && format);
}
/* 为每个页面，增加刷新方法，便于iframe调用 */
function refresh() {
    location.replace(location.href);
}
/* 校验对象 */
var vaild = {};
vaild.money = function(m) {
    //return /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/.test(m);
    return /(^([-]?)[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^([-]?)(0){1}$)|(^([-]?)[0-9]\.[0-9]([0-9])?$)/.test(m);
};
vaild.number = function(n) {
    return /^([1-9][0-9]*)$/.test(n);
};