/**
 * 常用工具和方法 本js依赖jQuery
 *
 * @author 姜友瑶
 */
var MTools = {
    /**
     * 用逗号分开的存的id是否包含对应的id
     * 如比较 123,123,124 中是否包含12这个主键
     * 比对的方法是 字符串中是否包含"^12$" "^12,.*" 或者  ".+,12$"  或者  ".+,12,$"或者 ".+,12,.+" 字符串
     * */
    isContainId: function (ids, id) {
        var reg1 = new RegExp("^" + id + "$|^" + id + ",.*|.+," + id + "$|.+," + id + ",$|.+," + id + ",.+");
        if (reg1.test(ids)) {
            return true;
        } else {
            return false;
        }
    },
    /**
     * 对表格中单挑数据进行处理 请在url后添加参数 url: 远程地址 msg:提示信息 callbackfn:操作成功后回调函数
     */
    handleItem: function (url, msg, callbackfn) {
        layer.confirm(msg, function () {
            $.AjaxProxy().invoke(url, function (loj) {
                layer.msg(loj.getValue("info"), {icon: 1, time: 1000}, function () {
                    if (callbackfn) {
                        callbackfn();
                    }
                });
            });
        });
    },
    /** 返回一个随机数 */
    random: function () {
        return Math.floor(Math.random() * (1000000000 + 1));
    },
    /** 返回一个随机字符串 */
    randomStr: function () {
        return 'pp' + Math.floor(Math.random() * (1000000000 + 1));
    },
    /** 页面定向 */
    redirect: function (url) {
        window.location.href = url;
    },
    /** 页面定向 无视iframe */
    toPredirect: function (url) {
        window.top.location.href = url;
    },
    /** 在页面删除一个节点 */
    delThis: function (id) {
        $('#' + id).remove();
    },
    /** 在页面删除一个节点,带上滑效果 */
    delThisSlide: function (id) {
        $('#' + id).slideUp("fast", function () {
            $('#' + id).remove();
        });
    },
    changeValidateCode: function (id) {
        $("#" + id).attr("src",
            basePath + "/common/validateImg?rand=" + this.random())
    },
    getTime:function() {
        var date = new Date();
        return date.getFullYear() + "-" + setFomartZero((date.getMonth() + 1))
            + "-" + setFomartZero(date.getDate()) + " " + setFomartZero(date.getHours())
            + ":" + setFomartZero(date.getMinutes());
    },
    chooesFile : function(fileText) {
        $(fileText).trigger("click");
    },
    upFile : function(submitBtn) {
        $(submitBtn).trigger("click");
    },
    selectFile : function(node,fileTextId,submitNode) {
        var filePath = $(fileTextId).val()
        var fileName = filePath.substring(filePath.lastIndexOf("\\") + 1,
            filePath.length);
        $(node).val(fileName);
        $(submitNode).trigger("click");
    },
    /**
     * 根据autoFull的css类自动填充select框里面的option selecteder :选择器名 value: 默认值为id file:
     * 默认值name url: 请求路径 param:{type : ''} 对象 为查询条件属性 defaultValue: 默认值 by
     * luoyuanhong 2016-7-13
     */
    autoFullSelect: function (_initParam) {
        var initParam = {
            value: "id",// value默认值
            filed: "name",// filed默认值
            selecteder:".autoFull"
        }
        if(_initParam){
            initParam=$.extend(initParam,_initParam)
        }
        $(initParam.selecteder)
            .each(
                function () {
                    var _this = $(this);
                    var def = _this.data("def");
                    console.log("autoFull");
                    var param = eval("(" + _this.data("param") + ")");
                    var value = _this.data("value") == null ? initParam.value
                        : _this.data("value");
                    var filed = _this.data("filed") == null ? initParam.filed
                        : _this.data("filed");
                    var url = _this.data("url");
                    // 增加一个排除不显示的 值得,参数是数组如 jsp的input属性data-hidden=1,2
                    eval("var hidden = [" + _this.data("hidden") + "]");
                    // 取服务器请求数据
                    $
                        .AjaxProxy({
                            p: param,
                            c: true
                        })
                        .invoke(
                            url,
                            function (loj) {
                                var html = '';
                                /* html += '";*/
                                a: for (var i = 0; i < loj
                                    .getRowCount(); i++) {
                                    b: for (var j = 0; j < hidden.length; j++) {
                                        if (hidden[j]
                                            && hidden[j] == loj
                                                .getString(
                                                    i,
                                                    value)) {
                                            html += "";
                                            continue a;
                                        }
                                    }
                                    if (def) {
                                        def = def + "";
                                        var values = def.split(",");
                                        var isSelect = false;
                                        for (var k = 0; k < values.length; k++) {
                                            if ((values[k] + "") == loj.getString(i, value)) {
                                                html += '";
                                                isSelect = true;
                                            }
                                        }
                                        if (!isSelect) {
                                            html += '";
                                        }
                                    } else {
                                        html += '";
                                    }
                                }
                                _this.append(html);
                                if(initParam && initParam.callback){
                                    initParam.callback();
                                }
                            });
                });
    },
    /**
     * 初始化时间控件方法
     * @param _initParam:
     */
    ininDatetimepicker: function (_initParam) {
        var initParam = {
            format: "yyyy-mm-dd", //默认显示年与日,如果想显示十分秒:"yyyy-mm-dd hh:ii:ss"
            maxView: 4, //日期时间选择器最高能展示的选择范围视图。
            minView: "month", 	//"month",只显示年月日的选择,不会再跳转去选择时分秒;如果想要选择时分秒的:"hour"
            autoclose: true,	//true,选择完是否自动关闭,如果不关闭,改为:false
            minuteStep: 5,	//此数值被当做步进值用于构建小时视图。对于每个 minuteStep 都会生成一组预设时间(分钟)用于选择
            weekStart: 1, //一周从哪一天开始。0(星期日)到6(星期六)
            timeSelecter: ".datetimepicker",  //时间选择器的类名
            state: "none", //none,不做限制,beforeToday:只能选择当前日期之前,aferToday:只能选择当前日期之后
            listenBlur: false //由于validform当输入日期后还提示输入,因此 时间按控件当日期更改后,触发该类元素的blur事件,validfrom会验证
        }
        if (_initParam != null) {
            //把传过来的参数覆盖默认参数
            initParam = $.extend(initParam, _initParam);
        }
        if (initParam.state == "beforeToday") {
            initParam = $.extend(initParam, {endDate: new Date()});
            //日期只能选择当前日,及当前日之前的日期
        } else if (initParam.state == "aferToday") {
            //日期只能选择当前日,及当前日之后的日期
            initParam = $.extend(initParam, {startDate: new Date()});
        }
        //可以选择任意日期
        var dataObj = $(initParam.timeSelecter).datetimepicker(initParam);
        if (initParam.listenBlur) {
            dataObj.on('changeDate', function (e) {
                $(initParam.timeSelecter).trigger("blur");
            });
        }
    },
    /**
     * 结束时间不能小于开始时间
     * beginTimeId:开始时间控件的id,注意要传#
     * endTimeId:结束时间控件的id,注意要传#
     */
    limitStartEndTime: function (_initParam) {
        var initParam = {
            beginTimeId: "#beginTime",
            endTimeId: "#endTime"
        }
        if (_initParam != null) {
            initParam = $.extend(initParam, _initParam);
        }
        $(initParam.endTimeId).datetimepicker('setStartDate', $(initParam.beginTimeId).val());
        $(initParam.beginTimeId).datetimepicker('setEndDate', $(initParam.endTimeId).val());
        //限制结束时间不能大于开始时间
        $(initParam.beginTimeId).datetimepicker().on('changeDate', function (e) {
            var currentTime = e.date;
            $(initParam.endTimeId).datetimepicker('setStartDate', currentTime);
        });
        $(initParam.endTimeId).datetimepicker().on('changeDate', function (e) {
            var currentTime = e.date;
            $(initParam.beginTimeId).datetimepicker('setEndDate', currentTime);
        });
    },
    /* 关闭弹出的窗口 */
    closeForm: function () {
        var index = parent.layer.getFrameIndex(window.name); // 获取窗口索引
        parent.layer.close(index);
    },
    padLeftZero: function (str) {
        return ('00' + str).substr(str.length)
    },
    formatDate: function (date, fmt) {
        var date=new Date(date);
        if (/(y+)/.test(fmt)) {
            fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
        }
        let o = {
            'M+': date.getMonth() + 1,
            'd+': date.getDate(),
            'h+': date.getHours(),
            'm+': date.getMinutes(),
            's+': date.getSeconds()
        }
        for (let k in o) {
            if (new RegExp(`(${k})`).test(fmt)) {
                let str = o[k] + ''
                fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? str : this.padLeftZero(str))
            }
        }
        return fmt
    },
}