/**
 * jquery全局函数封装
 */
(function ($) {
    /**
     * Jquery类方法
     */
    $.fn.extend({

        superForm: function (option) {
            // 默认选项
            var options = $.extend(true, {}, {
                buildData: $.noop,
                validation: $.noop,
                success: $.noop
            }, option);
            // 表单元素
            var $form = $(this), $btnSubmit = $('.j-submit');
            $form.validator({
                onValid: function (validity) {
                    $(validity.field).next('.am-alert').hide();
                },
                /**
                 * 显示错误信息
                 * @param validity
                 */
                onInValid: function (validity) {
                    var $field = $(validity.field)
                        , $group = $field.parent()
                        , $alert = $group.find('.am-alert');
                    if ($field.data('validationMessage') !== undefined) {
                        // 使用自定义的提示信息 或 插件内置的提示信息
                        var msg = $field.data('validationMessage') || this.getValidationMessage(validity);
                        if (!$alert.length) {
                            $alert = $('<div class="am-alert am-alert-danger"></div>').hide().appendTo($group);
                        }
                        $alert.html(msg).show();
                    }
                },
                submit: function () {
                    if (this.isFormValid() === true) {
                        // 自定义验证
                        if (options.validation.call(true) === false) {
                            return false;
                        }
                        // 禁用按钮, 防止二次提交
                        $btnSubmit.attr('disabled', true);
                        // 表单提交
                        $form.ajaxSubmit({
                            type: 'post',
                            dataType: 'json',
                            data: options.buildData.call(true),
                            success: function (result) {
                                if (options.success === $.noop) {
                                    result.code === 1 ? $.show_success(result.msg, result.url)
                                        : $.show_error(result.msg);
                                } else {
                                    options.success.call(true, result);
                                }
                                $btnSubmit.attr('disabled', false);
                            }
                        });
                    }
                    return false;
                }
            });
        },

        /**
         * 删除元素
         */
        delete: function (index, url, msg) {
            $(this).click(function () {
                var param = {};
                param[index] = $(this).attr('data-id');
                layer.confirm(msg ? msg : '确定要删除吗？', {title: '友情提示'}
                    , function (index) {
                        $.post(url, param, function (result) {
                            result.code === 1 ? $.show_success(result.msg, result.url)
                                : $.show_error(result.msg);
                        });
                        layer.close(index);
                    }
                );
            });
        },

        /**
         * 选择图片文件
         * @param option
         */
        selectImages: function (option) {
            var $this = this
                // 配置项
                , defaults = {
                    name: 'iFile'            // input name
                    , imagesList: '.uploader-list'    // 图片列表容器
                    , imagesItem: '.file-item'       // 图片元素容器
                    , imageDelete: '.file-item-delete'  // 删除按钮元素
                    , multiple: false    // 是否多选
                    , limit: null        // 图片数量 (如果存在done回调函数则无效)
                    , done: null  // 选择完成后的回调函数
                }
                , options = $.extend({}, defaults, option);
            // 显示文件库 选择文件
            $this.fileLibrary({
                type: 'image'
                , done: function (data, $touch) {
                    // 判断回调参数是否存在, 否则执行默认
                    if (typeof options.done === 'function') {
                        return options.done(data, $touch);
                    }
                    // 新增图片列表
                    var list = options.multiple ? data : [data[0]];
                    var $html = $(template('tpl-file-item', {list: list, name: options.name}))
                        , $imagesList = $this.next(options.imagesList);
                    if (
                        options.limit > 0
                        && $imagesList.find(options.imagesItem).length + list.length > options.limit
                    ) {
                        layer.msg('图片数量不能大于' + options.limit + '张', {anim: 6});
                        return false;
                    }
                    // 注册删除事件
                    $html.find(options.imageDelete).click(function () {
                        $(this).parent().remove();
                    });
                    // 渲染html
                    options.multiple ? $imagesList.append($html) : $imagesList.html($html);
                }
            });
        },

        /**
         * 封装：ajaxSubmit
         * @param option
         */
        myAjaxSubmit: function (option) {
            var $this = this;
            var options = $.extend({}, {
                type: 'post'
                , dataType: 'json'
                , url: ''
                , data: {}
                , success: $.noop
            }, option);
            $this.ajaxSubmit({
                type: options.type,
                dataType: options.dataType,
                url: options.url,
                data: options.data,
                success: function (result) {
                    result.code === 1 ? $.show_success(result.msg, result.url)
                        : $.show_error(result.msg);
                }
            });
        }
    });

    /**
     * Jquery全局函数
     */
    $.extend({

        /**
         * 对象转URL
         */
        urlEncode: function (data) {
            var _result = [];
            for (var key in data) {
                var value = null;
                if (data.hasOwnProperty(key)) value = data[key];
                if (value.constructor === Array) {
                    value.forEach(function (_value) {
                        _result.push(key + "=" + _value);
                    });
                } else {
                    _result.push(key + '=' + value);
                }
            }
            return _result.join('&');
        },

        /**
         * 操作成功弹框提示
         * @param msg
         * @param url
         */
        show_success: function (msg, url) {
            layer.msg(msg, {
                icon: 1
                , time: 1200
                // , anim: 1
                , shade: 0.5
                , end: function () {
                    (url !== undefined && url.length > 0) ? window.location = url : window.location.reload();
                }
            });
        },

        /**
         * 操作失败弹框提示
         * @param msg
         * @param reload
         */
        show_error: function (msg, reload) {
            var time = reload ? 1200 : 0;
            layer.alert(msg, {
                title: '提示'
                , icon: 2
                , time: time
                , anim: 6
                , end: function () {
                    reload && window.location.reload();
                }
            });
        },

        /**
         * 文件上传 (单文件)
         * 支持同一页面多个上传元素
         *  $.uploadImage({
         *   pick: '.upload-file',  // 上传按钮
         *   list: '.uploader-list' // 缩略图容器
         * });
         */
        uploadImage: function (option) {
            // 文件大小
            var maxSize = option.maxSize !== undefined ? option.maxSize : 2
                // 初始化Web Uploader
                , uploader = WebUploader.create({
                    // 选完文件后，是否自动上传。
                    auto: true,
                    // 允许重复上传
                    duplicate: true,
                    // 文件接收服务端。
                    server: STORE_URL + '/upload/image',
                    // 选择文件的按钮。可选。
                    // 内部根据当前运行是创建，可能是input元素，也可能是flash.
                    pick: {
                        id: option.pick,
                        multiple: false
                    },
                    // 文件上传域的name
                    fileVal: 'iFile',
                    // 图片上传前不进行压缩
                    compress: false,
                    // 文件总数量
                    // fileNumLimit: 1,
                    // 文件大小2m => 2097152
                    fileSingleSizeLimit: maxSize * 1024 * 1024,
                    // 只允许选择图片文件。
                    accept: {
                        title: 'Images',
                        extensions: 'gif,jpg,jpeg,bmp,png',
                        mimeTypes: 'image/*'
                    },
                    // 缩略图配置
                    thumb: {
                        quality: 100,
                        crop: false,
                        allowMagnify: false
                    },
                    // 文件上传header扩展
                    headers: {
                        'Accept': 'application/json, text/javascript, */*; q=0.01',
                        'X-Requested-With': 'XMLHttpRequest'
                    }
                });
            //  验证大小
            uploader.on('error', function (type) {
                // console.log(type);
                if (type === "F_DUPLICATE") {
                    // console.log("请不要重复选择文件！");
                } else if (type === "F_EXCEED_SIZE") {
                    alert("文件大小不可超过" + maxSize + "m 哦！换个小点的文件吧！");
                }
            });

            // 当有文件添加进来的时候
            uploader.on('fileQueued', function (file) {
                var $uploadFile = $('#rt_' + file.source.ruid).parent()
                    , $list = $uploadFile.next(option.list)
                    , $li = $(
                    '<div id="' + file.id + '" class="file-item thumbnail">' +
                    '<img>' +
                    '<input type="hidden" name="' + $uploadFile.data('name') + '" value="">' +
                    '<i class="iconfont icon-shanchu file-item-delete"></i>' +
                    '</div>'
                    ),
                    $img = $li.find('img'),
                    $delete = $li.find('.file-item-delete');
                // 删除文件
                $delete.on('click', function () {
                    uploader.removeFile(file);
                    $delete.parent().remove();
                });
                // $list为容器jQuery实例
                $list.empty().append($li);
                // 创建缩略图
                // 如果为非图片文件，可以不用调用此方法。
                // thumbnailWidth x thumbnailHeight 为 100 x 100
                uploader.makeThumb(file, function (error, src) {
                    if (error) {
                        $img.replaceWith('<span>不能预览</span>');
                        return;
                    }
                    $img.attr('src', src);
                }, 1, 1);
            });
            // 文件上传成功，给item添加成功class, 用样式标记上传成功。
            uploader.on('uploadSuccess', function (file, response) {
                if (response.code === 1) {
                    var $item = $('#' + file.id);
                    $item.addClass('upload-state-done')
                        .children('input[type=hidden]').val(response.data.path);
                } else
                    uploader.uploadError(file);
            });
            // 文件上传失败
            uploader.on('uploadError', function (file) {
                uploader.uploadError(file);
            });
            // 显示上传出错信息
            uploader.uploadError = function (file) {
                var $li = $('#' + file.id),
                    $error = $li.find('div.error');
                // 避免重复创建
                if (!$error.length) {
                    $error = $('<div class="error"></div>').appendTo($li);
                }
                $error.text('上传失败');
            };
        },

        /**
         * 显示模态对话框
         * @param option
         */
        showModal: function (option) {
            var options = $.extend({}, {
                title: ''
                , area: '340px'
                , closeBtn: 1
                , content: ''
                , btn: ['确定', '取消']
                , btnAlign: 'r'
                , success: $.noop
                , yes: $.noop
                , uCheck: false
            }, option);

            var $content;
            layer.open({
                type: 1
                , title: options.title
                , closeBtn: options.closeBtn
                , area: options.area
                , offset: 'auto'
                , anim: 1
                , shade: 0.3
                , btn: options.btn
                , btnAlign: options.btnAlign
                , content: options.content
                , success: function (layero) {
                    $content = layero.find('.layui-layer-content');
                    if (options.uCheck) {
                        $content.find("input[type='checkbox'],input[type='radio']").uCheck();
                    }
                    options.success.call(true, $content);
                }
                , yes: function (index) {
                    if (options.yes.call(true, $content)) {
                        layer.close(index);
                    }
                }
            });

        },

        /**
         * 获取指定天数的日期
         * @param day
         * @returns {string}
         */
        getDay: function (day) {
            var today = new Date();
            var targetdaySeconds = today.getTime() + 1000 * 60 * 60 * 24 * day;
            today.setTime(targetdaySeconds); //注意，这行是关键代码
            return today.getFullYear() + "-" + $.doHandleMonth(today.getMonth() + 1) + "-" + $.doHandleMonth(today.getDate());
        },

        /**
         * 月份补0
         * @param month
         * @returns {*}
         */
        doHandleMonth: function (month) {
            return (month.toString().length === 1) ? ("0" + month) : month;
        },

        /**
         * 二维数据查找
         * @param array
         * @param key
         * @param value
         * @returns {*}
         */
        arrayFilterMultiple: function (array, key, value) {
            for (var index in array) {
                if (array[index][key] == value) return index;
            }
            return false;
        }


    });

})(jQuery);

/**
 * app.js
 */
$(function () {

    /**
     * 点击侧边开关 (一级)
     */
    $('.switch-button').on('click', function () {
        var header = $('.tpl-header'), wrapper = $('.tpl-content-wrapper'), leftSidebar = $('.left-sidebar');
        if (leftSidebar.css('left') !== "0px") {
            header.removeClass('active') && wrapper.removeClass('active') && leftSidebar.css('left', 0);
        } else {
            header.addClass('active') && wrapper.addClass('active') && leftSidebar.css('left', -280);
        }
    });

    /**
     * 侧边栏开关 (二级)
     */
    $('.sidebar-nav-sub-title').click(function () {
        $(this).toggleClass('active');
    });

    // 刷新按钮
    $('.refresh-button').click(function () {
        window.location.reload();
    });

    // 删除图片 (数据库已有的)
    $('.file-item-delete').click(function () {
        var $this = $(this)
            , noClick = $this.data('noClick')
            , name = $this.data('name');

        if (noClick) {
            return false;
        }
        layer.confirm('您确定要删除该' + (name ? name : '图片') + '吗？', {
            title: '友情提示'
        }, function (index) {
            $this.parent().remove();
            layer.close(index);
        });
    });

});
