layui.define(['jquery'],function(exports){
    var $ = layui.jquery;

    //  字母数组
    var zmArray = [
        {
            //  A-G
            list    :   ['A','B','C','D','E','F','G']
        },{
            //  H-K
            list    :   ['H','I','J','K']
        },{
            //  L-S
            list    :   ['L','M','N','O','P','Q','R','S']
        },{
            //  T-Z
            list    :   ['T','U','V','W','X','Y','Z']
        }
    ];

    //  加载省市区
    var loadAreaList = function(code,area){
        var url = "/common/area/getSubList/" + code;
        $.ajax({
            url     :   url,
            type    :   'GET',
            async   :   false,
            success :   function(result){
                var list = result.list;
                //  将省市区进行分类
                for (var i = 0; i < zmArray.length; i++){
                    var array = zmArray[i].list;
                    var j = 0;
                    list.forEach(function(item){
                        if (array.indexOf(item.firstLetter) !== -1) {
                            var html = '<li data="' + item.code + '">' + item.name + '</li>';
                            area.find('.zm-ctn').eq(i).append(html);
                            j++;
                        }
                    });
                    j > 0 ? area.find('.zm').eq(i).show():area.find('.zm').eq(i).hide();
                }
            }
        });
    };

    //  清空区域数据
    var clearAreaList = function(area){
        area.find('.zm-ctn li').each(function () {
            $(this).remove();
        });
    };

    //初始化清空图标及事件绑定
    var initTrash = function(options, trashFn){
        var $parent = document.querySelector(options.elem);
        var $div = document.createElement('div');
        $div.style.lineHeight = '40px';
        var $i = document.createElement('i');
        $i.className = 'trash layui-icon layui-icon-close';
        $i.style.position = 'absolute';
        $i.style.right = '6px';
        $i.style.top = '0';
        $i.style.cursor = 'pointer';
        $i.addEventListener('click',trashFn);
        $div.appendChild($i);
        $parent.appendChild($div);
    }

    //  下一步
    var nextStep = function($this,code,$node){
        var $ul = $this.closest('.type-main');
        //  获取上次选中的节点
        var oldNode = $ul.find('.zm-ctn .active').eq(0);
        if (oldNode && oldNode.length > 0){
            //  判断是否重复选中
            if (oldNode.attr('data') === code){
                return;
            }
            oldNode.removeClass('active');
        }
        //  清空市
        clearAreaList($node);
        //  加载市
        loadAreaList(code,$node);
        $this.addClass('active');
    };

    //  对外暴露接口
    var region = {
        //  初始化函数
        init    :   function(options){

            //  数据
            var data = {
                province    :   undefined,
                city        :   undefined,
                county      :   undefined
            };

            //  节点
            var $node = {
                region      :   $(options.elem + ' .address-drop'),
                //  省
                province    :   $(options.elem + ' .address-drop .province'),
                //  市
                city        :   $(options.elem + ' .address-drop .city'),
                //  区
                county      :   $(options.elem + ' .address-drop .county')
            };

            $(document).on('click',options.trigger,function () {
                $node.region.closest('.my_region').show();
            });

            //初始化清空图标以及事件绑定
            initTrash(options,trashFn);
            //清空处理
            function trashFn(){
                //清除选中
                $(options.elem + ' .address-drop li.active').each(function(){
                    $(this).removeClass('active');
                });
                $(options.elem + ' .address-drop .select-type li:first').click();
                //清空数据
                if (options.clearFn){
                    options.clearFn();
                }
            }
            //  初始化省份
            loadAreaList(100000,$node.province);

            //  选中省份事件
            $(document).on('click',options.elem + ' .address-drop .province .zm-ctn li',function () {
                var $this = $(this);
                data.province = {
                    id      :   $this.attr('data'),
                    text    :   $this.text()
                };
                data.city = undefined;
                data.county  = undefined;
                //  切换到市
                $(options.elem + ' .address-drop .select-type li').eq(1).click();
                //  下一步
                nextStep($this,data.province.id,$node.city);
                options.provinceCallbackFn(data);
            });

            //  选中市事件
            $(document).on('click',options.elem + ' .address-drop .city .zm-ctn li',function () {
                var $this = $(this);
                data.city = {
                    id      :   $this.attr('data'),
                    text    :   $this.text()
                };
                data.county  = undefined;
                //  切换到区域
                $(options.elem + ' .address-drop .select-type li').eq(2).click();
                //  下一步
                nextStep($this,data.city.id,$node.county);
                options.cityCallbackFn(data);
            });

            //  选中区县事件
            $(document).on('click',options.elem + ' .address-drop .county .zm-ctn li',function () {
                var $this = $(this);
                //  移除已选中的
                $this.closest('.type-main').find('.zm-ctn .active').eq(0).removeClass('active');
                $this.addClass('active');
                data.county = {
                    id      :   $this.attr('data'),
                    text    :   $this.text()
                };
                $node.region.closest('.my_region').hide();
                options.areaCallbackFn(data);
            });

            //  切换省市区
            $(document).on('click',options.elem + ' .address-drop .select-type li',function () {
                var index = $(this).index();
                if (index === 1){
                    //  选中市
                    if (!data.province){
                        layer.alert('请先选中省份');
                        return;
                    }
                } else if (index === 2) {
                    //  选中区
                    if (!data.city){
                        layer.alert('请先选中城市');
                        return;
                    }
                }
                $(this).addClass('active').siblings().removeClass('active');
                $(options.elem + ' .address-drop .type-main').eq($(this).index()).show().siblings().hide();
            });

            //  关闭省市区弹窗
            $(document).on('click',options.elem + ' .my_region .address-shade',function () {
                $node.region.closest('.my_region').hide();
                if (options.hideCallbackFn){
                    options.hideCallbackFn(data);
                }
            });

            //  初始化选中数据
            if (options['selectData']) {
                var selectData = options['selectData'];
                if (selectData.province) {
                    $(options.elem + ' .address-drop .province .zm-ctn li[data=' + selectData.province + ']').click();
                }
                if (selectData.city) {
                    $(options.elem + ' .address-drop .city .zm-ctn li[data=' + selectData.city + ']').click();
                }
                if (selectData.county) {
                    $(options.elem + ' .address-drop .county .zm-ctn li[data=' + selectData.county + ']').click();
                }
            }

        }
    };


    exports('region', region);
});