/*!
 *  Document   : table.js
 *  Author     : caiweiming <314013107@qq.com>
 *  Description: 表格构建器
 */
jQuery(document).ready(function() {
    if ($.fn.editable) {
        // 快速编辑的url提交地址
        $.fn.editable.defaults.url = dolphin.quick_edit_url;
        // 值为空时显示的信息
        $.fn.editable.defaults.emptytext = '空值';
        // 提交时的额外参数
        $.fn.editable.defaults.params = function (params) {
            params._t       = $(this).data('table') || '';
            params.type     = $(this).data('type') || '';
            params.validate = dolphin.validate;
            params.validate_fields = dolphin.validate_fields;
            return params;
        };
        // 提交成功时的回调函数
        $.fn.editable.defaults.success = function (res) {
            if (res.code) {
                Dolphin.notify(res.msg, 'success');
            } else {
                return res.msg;
            }
        };
        // 提交失败时的回调函数
        $.fn.editable.defaults.error = function(res) {
            if(res.status === 500) {
                return '服务器内部错误. 请稍后重试.';
            } else {
                return res.responseText;
            }
        };

        // 可编辑单行文本
        $('.text-edit').editable();

        // 可编辑多行文本
        $('.textarea-edit').editable({
            showbuttons: 'bottom'
        });

        // 下拉编辑
        $('.select-edit').editable();
        $('.select2-edit').editable({
            select2: {
                multiple: true,
                tokenSeparators: [',', ' ']
            }
        });

        // 日期时间
        $('.combodate-edit').editable({
            combodate: {
                maxYear: 2036,
                minuteStep: 1
            }
        });
    }

    // 跳转链接
    var goto = function (url, _curr_params, remove_page) {
        var params = {};

        if (remove_page && dolphin.curr_params['page'] !== undefined) {
            delete dolphin.curr_params['page'];
        }

        if ($.isEmptyObject(dolphin.curr_params)) {
            params = jQuery.param(_curr_params);
        } else {
            $.extend(dolphin.curr_params, _curr_params);
            params = jQuery.param(dolphin.curr_params);
        }

        location.href = url + '?'+ params;
    };

    // 初始化搜索
    var search_field = dolphin.search_field;
    var search_input_placeholder = $('#search-input').attr('placeholder');
    if (search_field !== '') {
        $('.search-bar .dropdown-menu a').each(function () {
            var self = $(this);
            if (self.data('field') === search_field) {
                $('#search-btn').html(self.text() + ' <span class="caret"></span>');
                if (self.text() === '不限') {
                    $('#search-input').attr('placeholder', search_input_placeholder);
                } else {
                    $('#search-input').attr('placeholder', '请输入'+self.text());
                }
            }
        })
    }

    // 搜索
    $('.search-bar .dropdown-menu a').click(function () {
        var field = $(this).data('field') || '';
        $('#search-field').val(field);
        $('#search-btn').html($(this).text() + ' <span class="caret"></span>');
        if ($(this).text() === '不限') {
            $('#search-input').attr('placeholder', search_input_placeholder);
        } else {
            $('#search-input').attr('placeholder', '请输入'+$(this).text());
        }
    });
    $('#search-input').on('keyup', function (e) {
        if (e.keyCode === 13) {
            var $url = $(this).data('url');
            var $filed = $('#search-field').val();
            var $keyword = $(this).val();
            var _curr_params = {
                'search_field': $filed || '',
                'keyword': $keyword || ''
            };

            goto($url, _curr_params, true);
        }
    });
    $('#search-submit-btn').click(function () {
        var $url = $('#search-input').data('url');
        var $filed = $('#search-field').val();
        var $keyword = $('#search-input').val();
        var _curr_params = {
            'search_field': $filed || '',
            'keyword': $keyword || ''
        };

        goto($url, _curr_params, true);
    });

    // 筛选
    $('.table-builder .field-filter').click(function () {
        var self             = $(this),
            $field_display   = self.data('field-display'), // 当前表格字段显示的字段名，未必是数据库字段名
            $filter          = self.data('filter'), // 要筛选的字段
            $_type           = self.data('type'), // 筛选方式
            $_filter         = dolphin._filter,
            $_filter_content = dolphin._filter_content,
            $_field_display  = dolphin._field_display,
            $data  = {
                token: self.data('token') || '', // Token
                map: self.data('map') || '', // 筛选条件
                options: self.data('options') || '', // 选项
                list: self.data('list') || ''
            };

        var width = $(window).width();
        if (width > 500) {
            width = 500;
        }

        layer.open({
            type: 1,
            title: '<i class="fa fa-filter"></i> 筛选',
            shadeClose: true,
            area: [width+'px', '530px'],
            btn:['确定', '取消'],
            content: '<div class="block-content" id="filter-check-content"><i class="fa fa-cog fa-spin"></i> 正在读取...</div>',
            success: function () {
                var $curr_filter_content = '';
                var $curr_filter = '';
                if ($_filter !== '') {
                    $curr_filter = $_filter.split('|');
                    var filed_index = $.inArray($filter, $curr_filter);
                    if (filed_index !== -1) {
                        $curr_filter_content = $_filter_content.split('|');
                        $curr_filter_content = $curr_filter_content[filed_index];
                        $curr_filter_content = $curr_filter_content.split(',');
                    }
                }
                // 获取数据
                $.post(dolphin.get_filter_list, $data).success(function(res) {
                    if (1 !== res.code) {
                        $('#filter-check-content').html(res.msg);
                        return false;
                    }

                    var list = '<div class="row push-10"><div class="col-sm-12"><div class="input-group"><div class="input-group-addon"><i class="fa fa-search"></i></div><input class="js-field-search form-control" type="text" placeholder="查找要筛选的字段"></div></div></div>';
                    if ($_type === 'checkbox') {
                        list += '<div class="row"><div class="col-sm-12"><label class="css-input css-checkbox css-checkbox-primary">';
                        list += '<input type="checkbox" id="filter-check-all"><span></span> 全选';
                        list += '</label></div></div>';
                    }
                    list += '<div class="filter-field-list">';
                    for(var key in res.list) {
                        // 如果不是该对象自身直接创建的属性（也就是该属//性是原型中的属性），则跳过显示
                        if (!res.list.hasOwnProperty(key)) {
                            continue;
                        }

                        list += '<div class="row" data-field="'+res.list[key]+'"><div class="col-sm-12">';
                        if ($_type === 'checkbox') {
                            list += '<label class="css-input css-checkbox css-checkbox-primary">';
                            list += '<input type="checkbox" ';
                            if ($curr_filter_content !== '' && $.inArray(key, $curr_filter_content) !== -1) {
                                list += 'checked ';
                            }
                            list += 'value="'+ key +'" class="check-item"><span></span> '+res.list[key];
                            list += '</label>';
                        } else {
                            list += '<label class="css-input css-radio css-radio-primary">';
                            list += '<input type="radio" name="_filter_'+$field_display+'" ';
                            if ($curr_filter_content !== '' && $curr_filter_content == key) {
                                list += 'checked ';
                            }
                            list += 'value="'+ key +'" class="check-item"><span></span> '+res.list[key];
                            list += '</label>';
                        }
                        list += '</div></div>';
                    }
                    list += '</div>';
                    $('#filter-check-content').html(list);

                    // 查找要筛选的字段
                    var $searchItems = jQuery('.filter-field-list > div');
                    var $searchValue = '';
                    var reg;
                    $('.js-field-search').on('keyup', function(){
                        $searchValue = $(this).val().toLowerCase();

                        if ($searchValue.length >= 1) {
                            $searchItems.hide().removeClass('field-show');

                            $($searchItems).each(function(){
                                reg = new RegExp($searchValue, 'i');
                                if ($(this).text().match(reg)) {
                                    $(this).show().addClass('field-show');
                                }
                            });
                        } else if ($searchValue.length === 0) {
                            $searchItems.show().removeClass('field-show');
                        }
                    });
                }).fail(function (res) {
                    Dolphin.notify($(res.responseText).find('h1').text() || '服务器内部错误~', 'danger');
                });
            },
            yes: function () {
                var filed_index = -1;
                if ($('#filter-check-content input[class=check-item]:checked').length == 0) {
                    // 没有选择筛选字段，则删除原先该字段的筛选
                    $_filter        = $_filter.split('|');
                    filed_index = $.inArray($filter, $_filter);
                    if (filed_index !== -1) {
                        $_filter.splice(filed_index, 1);
                        $filter         = $_filter.join('|');

                        $_field_display = $_field_display.split(',');
                        $_field_display.splice(filed_index, 1);
                        $field_display  = $_field_display.join(',');

                        $_filter_content = $_filter_content.split('|');
                        $_filter_content.splice(filed_index, 1);
                        $fields          = $_filter_content.join('|');
                    }
                } else {
                    // 当前要筛选字段内容
                    var $fields = [];
                    $('#filter-check-content input[class=check-item]:checked').each(function () {
                        if ($(this).val() !== '') {
                            $fields.push($(this).val())
                        }
                    });
                    $fields = $fields.join(',');

                    if ($_filter !== '') {
                        $_filter = $_filter.split('|');
                        filed_index = $.inArray($filter, $_filter);
                        $_filter = $_filter.join('|');

                        if (filed_index === -1) {
                            $filter = $_filter + '|' + $filter;
                            $fields = $_filter_content + '|' + $fields;
                            $field_display = $_field_display + ',' + $field_display;
                        } else {
                            $filter = $_filter;
                            $field_display = $_field_display;
                            $_filter_content = $_filter_content.split('|');
                            $_filter_content[filed_index] = $fields;
                            $fields = $_filter_content.join('|');
                        }
                    }
                }
                var _curr_params = {
                    _filter: $filter || '',
                    _filter_content: $fields || '',
                    _field_display: $field_display || ''
                };

                goto(dolphin.curr_url, _curr_params, true);
            }
        });
        return false;
    });

    // 筛选框全选或取消全选
    $('body').delegate('#filter-check-all', 'click', function () {
        var $checkStatus = $(this).prop('checked');
        if ($('.js-field-search').val()) {
            $('#filter-check-content .field-show .check-item').each(function () {
                $(this).prop('checked', $checkStatus);
            });
        } else {
            $('#filter-check-content .check-item').each(function () {
                $(this).prop('checked', $checkStatus);
            });
        }
    });

    // 开关
    $('.table-builder .switch input:checkbox').on('click', function () {
        var $switch = $(this);
        var $data = {
            value: $switch.prop('checked'),
            _t: $switch.data('table') || '',
            name: $switch.data('field') || '',
            type: 'switch',
            pk: $switch.data('id') || ''
        };

        // 发送ajax请求
        Dolphin.loading();
        $.post(dolphin.quick_edit_url, $data).success(function(res) {
            Dolphin.loading('hide');
            if (res.code) {
                Dolphin.notify(res.msg, 'success');
            } else {
                Dolphin.notify(res.msg, 'danger');
                $switch.prop('checked', !$data.value);
                return false;
            }
        }).fail(function (res) {
            Dolphin.loading('hide');
            Dolphin.notify($(res.responseText).find('h1').text() || '服务器内部错误~', 'danger');
        });
    });

    // 分页搜索
    $('.pagination-info input').click(function () {
        $(this).select();
    });
    $('#go-page').on('keyup', function (e) {
        if (e.keyCode === 13) {
            var _curr_params = {
                'page': $('#go-page').val(),
                'list_rows': $('#list-rows').val()
            };

            goto(dolphin.curr_url, _curr_params);
        }
    });
    $('#list-rows').on('keyup', function (e) {
        if (e.keyCode === 13) {
            var _curr_params = {
                'page': 1,
                'list_rows': $('#list-rows').val()
            };

            goto(dolphin.curr_url, _curr_params);
        }
    });

    // 时间段搜索
    $('#btn-filter-time').click(function () {
        var _curr_params = {
            '_filter_time_from': $('#_filter_time_from').val(),
            '_filter_time_to': $('#_filter_time_to').val(),
            '_filter_time': $('#_filter_time').val()
        };

        goto(dolphin.curr_url, _curr_params, true);
    });

    // 弹出框显示页面
    $('#page-container').delegate('a.pop', 'click', function () {
        var $url   = $(this).attr('href');
        var $title = $(this).attr('title') || $(this).data('original-title');
        var $layer = $(this).data('layer');

        // 把当前页面的过虑参数带到弹出POP中
        var locationUrlSearch = location.search.substring(1);
        if (locationUrlSearch) {
            if ($url.indexOf('?') !== -1) {
                $url += '&' + locationUrlSearch;
            } else {
                $url += '?' + locationUrlSearch;
            }
        }

        // 是否需要获取表格数据
        if ($(this).hasClass('js-get')) {
            var target_form = $(this).attr("target-form");
            var form        = jQuery('form[name=' + target_form + ']');
            var form_data   = form.serialize() || [];

            if (form.length === 0) {
                form = jQuery('.' + target_form + '[type=checkbox]:checked');
                form.each(function () {
                    form_data.push($(this).val());
                });
                form_data = form_data.join(',');
            }

            if (form_data === '') {
                Dolphin.notify('请选择要操作的数据', 'warning');
                return false;
            }

            if ($url.indexOf('?') !== -1) {
                $url += '&' + target_form + '=' + form_data;
            } else {
                $url += '?' + target_form + '=' + form_data;
            }
        }

        var $options = {
            title: $title,
            content: $url
        };

        // 处理各种回调方法
        dolphin.layer.success = dolphin.layer.success ? window[dolphin.layer.success] : null;
        dolphin.layer.yes     = dolphin.layer.yes ? window[dolphin.layer.yes] : null;
        dolphin.layer.cancel  = dolphin.layer.cancel ? window[dolphin.layer.cancel] : null;
        dolphin.layer.end     = dolphin.layer.end ? window[dolphin.layer.end] : null;
        dolphin.layer.full    = dolphin.layer.full ? window[dolphin.layer.full] : null;
        dolphin.layer.min     = dolphin.layer.min ? window[dolphin.layer.min] : null;
        dolphin.layer.max     = dolphin.layer.max ? window[dolphin.layer.max] : null;
        dolphin.layer.restore = dolphin.layer.restore ? window[dolphin.layer.restore] : null;

        if ($layer !== undefined) {
            // 处理各种回调方法
            $layer.success = $layer.success ? window[$layer.success] : dolphin.layer.success;
            $layer.yes     = $layer.yes ? window[$layer.yes] : dolphin.layer.yes;
            $layer.cancel  = $layer.cancel ? window[$layer.cancel] : dolphin.layer.cancel;
            $layer.end     = $layer.end ? window[$layer.end] : dolphin.layer.end;
            $layer.full    = $layer.full ? window[$layer.full] : dolphin.layer.full;
            $layer.min     = $layer.min ? window[$layer.min] : dolphin.layer.min;
            $layer.max     = $layer.max ? window[$layer.max] : dolphin.layer.max;
            $layer.restore = $layer.restore ? window[$layer.restore] : dolphin.layer.restore;

            $.extend($options, dolphin.layer, $layer);
        } else {
            $.extend($options, dolphin.layer);
        }

        if ($options.cancel === null && (typeof window.layer_cancel === "function")) {
            $options.cancel = window.layer_cancel;
        }
        if ($options.success === null && (typeof window.layer_success === "function")) {
            $options.success = window.layer_success;
        }
        if ($options.yes === null && (typeof window.layer_yes === "function")) {
            $options.yes = window.layer_yes;
        }
        if ($options.end === null && (typeof window.layer_end === "function")) {
            $options.end = window.layer_end;
        }
        if ($options.full === null && (typeof window.layer_full === "function")) {
            $options.full = window.layer_full;
        }
        if ($options.min === null && (typeof window.layer_min === "function")) {
            $options.min = window.layer_min;
        }
        if ($options.max === null && (typeof window.layer_max === "function")) {
            $options.max = window.layer_max;
        }
        if ($options.restore === null && (typeof window.layer_restore === "function")) {
            $options.restore = window.layer_restore;
        }

        layer.open($options);
        return false;
    });

    // 顶部下拉菜单
    $('.select-change').change(function(){
        var $url = $(this).find('option:selected').data('url');
        if ($url) {
            window.location.href = $url;
        }
    });

    // 搜索区域
    $('#search-area').submit(function () {
        var items = $('#search-area').serializeArray();
        var op  = $('#_o').val();
        var str = [];
        $.each(items, function (index, e) {
            str.push(e.name + '=' + e.value)
        });
        str = str.join('|');
        location.href = $(this).attr('action')+'?_s='+str+'&_o='+op;
        return false;
    });
});