jQuery(function() {
    var $ = jQuery;    // just in case. Make sure it's not an other libaray.
    if( !window.webuploader ){
        console.log("请配置好window.webuploader");
        $('#dndArea p').html('请配置好window.webuploader');
        return false;
    }
    if( !window.webuploader.config || !window.webuploader.config.wrapId){
        console.log("请配置好window.webuploader.config.wrapId");
        $('#dndArea p').html('请配置好window.webuploader.config.wrapId');
        return false;
    }
    if( !window.webuploader.uploadUrl ){
        console.log("请配置好window.webuploader.uploadUrl");
        $('#dndArea p').html('请配置好window.webuploader.uploadUrl');
        return false;
    }
    if( !window.webuploader.updateUrl ){
        console.log("请配置好window.webuploader.updateUrl");
        $('#dndArea p').html('请配置好window.webuploader.updateUrl');
        return false;
    }
    if( !window.webuploader.removeUrl ){
        console.log("请配置好window.webuploader.removeUrl");
        $('#dndArea p').html('请配置好window.webuploader.removeUrl');
        return false;
    }
    var $ = jQuery;
    if( !window.webuploader ){
        console.log("请配置好window.webuploader");
        $('#dndArea p').html('请配置好window.webuploader');
        return false;
    }
    if( !window.webuploader.config || !window.webuploader.config.wrapId){
        console.log("请配置好window.webuploader.config.wrapId");
        $('#dndArea p').html('请配置好window.webuploader.config.wrapId');
        return false;
    }
    if( !window.webuploader.uploadUrl ){
        console.log("请配置好window.webuploader.uploadUrl");
        $('#dndArea p').html('请配置好window.webuploader.uploadUrl');
        return false;
    }
    if( !window.webuploader.updateUrl ){
        console.log("请配置好window.webuploader.updateUrl");
        $('#dndArea p').html('请配置好window.webuploader.updateUrl');
        return false;
    }
    if( !window.webuploader.removeUrl ){
        console.log("请配置好window.webuploader.removeUrl");
        $('#dndArea p').html('请配置好window.webuploader.removeUrl');
        return false;
    }
    var uploadNum = 0;
    var origin;
    var is_moveing = false;
    var $wrap = $('#' + window.webuploader.config.wrapId);
    var $statusBar = $wrap.find('.statusBar');
    var $info = $statusBar.find('.info');
    var $upload = $wrap.find('.uploadBtn');
    var $reset = $wrap.find('.resetBtn');
    var $placeHolder = $wrap.find('.placeholder');
    var $progress = $statusBar.find('.progress').hide();
    var fileCount = 0;
    var fileSize = 0;
    var state = 'pedding';
    var percentages = {};
    var supportTransition = (function(){
        var s = document.createElement('p').style,
            r = 'transition' in s ||
                'WebkitTransition' in s ||
                'MozTransition' in s ||
                'msTransition' in s ||
                'OTransition' in s;
        s = null;
        return r;
    })();
    // 优化retina, 在retina下这个值是2
    var ratio = window.devicePixelRatio || 1;
    // 缩略图大小
    var thumbnailWidth = window.webuploader.config.thumbWidth || 110;
    thumbnailWidth *= ratio;
    var thumbnailHeight = window.webuploader.config.thumbHeight || 110;
    thumbnailHeight *= ratio;
    var uploader = WebUploader.create({
        swf: "../lib/webuploader/0.1.5/Uploader.swf",
        server: window.webuploader.uploadUrl,
        auto: true, //选择完文件 自动上传
        pick: '.pick',
        dnd: '.queueList',
        paste: document.body,
        accept:{
            title: 'Images',
            extensions: 'jpg,jpeg,png,bmp,svg',
            mimeTypes: 'images/*'
        },
        formData: window.webuploader.formData, //参数
        resize: false,//尺寸不改变
        compress: false,//不启用压缩
        chunked: true,
        duplicate: true,
        disableGlobalDnd: true, //[可选] [默认值：false]是否禁掉整个页面的拖拽功能，如果不禁用，图片拖进来的时候会默认被浏览器打开。
        prepareNextFile: true,
        chunkSize: 4000 * 1024,
        chunkRetry: 2,    //[可选] [默认值：2]如果某个分片由于网络问题出错，允许自动重传多少次？
        threads: 1,      //[可选] [默认值：3] 上传并发数。允许同时最大上传进程数。
        fileSizeLimit: 100 * 1024 * 1024, //限制上传所有文件大小
        fileNumLimit: window.webuploader.param.num, //上传数量限制
        fileSingleSizeLimit: window.webuploader.param.upload_size, //限制上传单个文件大小
        thumb:{
            // 图片质量，只有type为`image/jpeg`的时候才有效。
            quality: 100,
            // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.
            allowMagnify: true,
            // 为空的话则保留原有图片格式。
            // 否则强制转换成指定的类型。
            type: ''
        }
    });

    // 添加“添加文件”的按钮，
    uploader.addButton({
        id: '#filePicker2',
        label: '继续添加'
    });

    // 当有文件添加进来时执行，负责view的创建
    function addFile( file ) {
            showError = function( code ) {
                switch( code ) {
                    case 'exceed_size':
                        text = '文件大小超出';
                        break;

                    case 'interrupt':
                        text = '上传暂停';
                        break;

                    default:
                        text = '上传失败，请重试';
                        break;
                }
            };

        if ( file.getStatus() === 'invalid' ) {
            showError( file.statusText );
        } else {
            uploader.makeThumb( file, function( error, src ) {
                let uplaval = $('#updateselect').attr('value');
                if(uplaval=='1'){
                }else{
                    const addimg = '<li id="'+file.id+'" data-key="'+file.key+'" lay-data="" class="fl"><div><img atl="'+file.name+'" class="sc_img" src="'+src+'"></div><p class="remove-btn"><i class="iconfont">&#xe617;</i></p><p class="progress"><span class="percentage" style="width: 100%; display: inline;"></span></p></li>';
                    $('#updateselect ul.gundongtiao').prepend(addimg);
                }
                if ( error ) {
                    return;
                }
            }, -2, -2);

            percentages[ file.id ] = [ file.size, 0 ];
            file.rotation = 0;
        }

        file.on('statuschange', function( cur, prev ) {
            if ( prev === 'progress' ) {
            } else if ( prev === 'queued' ) {
            }

            // 成功
            if ( cur === 'error' || cur === 'invalid' ) {
                showError( file.statusText );
                percentages[ file.id ][ 1 ] = 1;
            } else if ( cur === 'interrupt' ) {
                showError( 'interrupt' );
            } else if ( cur === 'queued' ) {
                percentages[ file.id ][ 1 ] = 0;
            } else if ( cur === 'progress' ) {
            } else if ( cur === 'complete' ) {
            }

        });

    }

    // 负责view的销毁
    function removeFile( file ) {
        var $li = $('#'+file.id);

        delete percentages[ file.id ];
        updateTotalProgress();
        $li.off().find('.file-panel').off().end().remove();
    }

    function updateTotalProgress() {
        var loaded = 0,
            total = 0,
            spans = $progress.children(),
            percent;

        $.each( percentages, function( k, v ) {
            total += v[ 0 ];
            loaded += v[ 0 ] * v[ 1 ];
        } );

        percent = total ? loaded / total : 0;

        spans.eq( 0 ).text( Math.round( percent * 100 ) + '%' );
        spans.eq( 1 ).css( 'width', Math.round( percent * 100 ) + '%' );
        updateStatus();
    }

    function updateStatus() {
        var text = '', stats;

        if ( state === 'ready' ) {
            text = '选中' + fileCount + '张图片，共' +
                WebUploader.formatSize( fileSize ) + '。';
        } else if ( state === 'confirm' ) {
            stats = uploader.getStats();
            if ( stats.uploadFailNum ) {
                text = '已成功上传' + stats.successNum+ '张照片至XX相册，'+
                    stats.uploadFailNum + '张照片上传失败，<a class="retry" href="#">重新上传</a>失败图片或<a class="ignore" href="#">忽略</a>'
            }

        } else {
            stats = uploader.getStats();
            text = '共' + fileCount + '张（' +
                WebUploader.formatSize( fileSize )  +
                '），已上传' + stats.successNum + '张';

            if ( stats.uploadFailNum ) {
                text += '，失败' + stats.uploadFailNum + '张';
            }
        }

    }

    function setState( val ) {
        var file, stats;

        if ( val === state ) {
            return;
        }

        $upload.removeClass( 'state-' + state );
        $upload.addClass( 'state-' + val );
        state = val;

        switch ( state ) {
            case 'pedding':
                $placeHolder.removeClass( 'element-invisible' );
                $statusBar.addClass( 'element-invisible' );
                uploader.refresh();
                break;

            case 'ready':
                $placeHolder.addClass( 'element-invisible' );
                $( '#filePicker2' ).removeClass( 'element-invisible');
                $statusBar.removeClass('element-invisible');
                uploader.refresh();
                break;

            case 'uploading':
                $( '#filePicker2' ).addClass( 'element-invisible' );
                $progress.show();
                $upload.text( '暂停上传' );
                break;

            case 'paused':
                $progress.show();
                $upload.text( '继续上传' );
                break;

            case 'confirm':
                $progress.hide();
                $upload.text( '开始上传' ).addClass( 'disabled' );

                stats = uploader.getStats();
                if ( stats.successNum && !stats.uploadFailNum ) {
                    setState( 'finish' );
                    return;
                }
                break;
            case 'finish':
                stats = uploader.getStats();
                if ( stats.successNum ) {
                    // alert( '上传成功' );
                    // console.log(stats)
                    // layer.msg('上传成功');
                } else {
                    // 没有成功的图片，重设
                    state = 'done';
                    location.reload();
                }
                break;
        }

        updateStatus();
    }

    //错误回调
    uploader.on('error', function(handler) {
        if (handler == "Q_EXCEED_NUM_LIMIT") {
            var title;
            title = '单次最多上传6张图片';
            layer.confirm(title, {
                btn: ['确定','取消'] //按钮
            }, function(index){
                layer.close(index);
            }, function(){});

        }else if (handler == "Q_EXCEED_SIZE_LIMIT") {
            layer.confirm("图片总大小不能超过100M", {
                btn: ['确定','取消'] //按钮
            }, function(index){
                layer.close(index);
            }, function(){});
        }else if (handler == "Q_TYPE_DENIED") {
            layer.confirm("请上传jpg、jpeg、png、bmp,svg格式文件", {
                btn: ['确定','取消'] //按钮
            }, function(index){
                layer.close(index);
            }, function(){});
        }else if(handler == 'F_EXCEED_SIZE'){
            layer.confirm("图片大小超出限制，请升级会员，升级后最大可支持50M", {
                btn: ['去升级','取消'] //按钮
            }, function(index){
                layer.close(index);
                var a = $("<a href='/price' target='_blank'>充值详情</a>").get(0);
                var e = document.createEvent('MouseEvents');
                e.initEvent( 'click', true, true );
                a.dispatchEvent(e);
            }, function(){});
        }else {
            layer.confirm("上传出错！请检查后重新上传！错误代码"+handler, {
                btn: ['确定','取消'] //按钮
            }, function(index){
                layer.close(index);
            }, function(){});
        }
    });


    // 添加上传滚动条
    uploader.onUploadProgress = function( file, percentage ) {
        WaitLoading(5);

            let uplaval = $('#updateselect').attr('value');
            if(uplaval=='1'){
            }else{
                var num = (percentage * 100).toFixed(2);
                $("#updateselect ul.gundongtiao li[id='"+file.id+"'] p.progress").css('width', num+ '%' );
            }




        updateTotalProgress();
    };

    uploader.onFileQueued = function( file ) {

        fileCount++;
        fileSize += file.size;

        if ( fileCount === 1 ) {
            $placeHolder.addClass( 'element-invisible' );
            $statusBar.show();
        }

        addFile( file );
        setState( 'ready' );
        updateTotalProgress();
    };

    uploader.onFileDequeued = function( file ) {
        fileCount--;
        fileSize -= file.size;

        if ( !fileCount ) {
            setState( 'pedding' );
        }

        removeFile( file );
        updateTotalProgress();

    };

    //上传完成
    uploader.on('uploadSuccess', function(file,data){
        StopWaitLoading();
        if(data.status == 1){
            var uplaval = $('#updateselect').attr('value');
            if(uplaval=='1'){
                $('#updateselect').attr('value','0');
                int_ztuploadPic(data);
            }else{
                $("#updateselect ul.gundongtiao li[id='"+file.id+"']").attr('data-key',data.md5);
                $("#updateselect ul.gundongtiao li[id='"+file.id+"']").attr('data-height',data.height);
                $("#updateselect ul.gundongtiao li[id='"+file.id+"']").attr('data-width',data.width);
                $("#updateselect ul.gundongtiao li[id='"+file.id+"']").attr('data-src',data.path);
                $("#updateselect ul.gundongtiao li[id='"+file.id+"'] img").attr('src',data.thumbpath+'?timestamp='+ new Date().getTime());
                $("#updateselect ul.gundongtiao li[id='"+file.id+"'] p.progress").remove();

                if(uplaval!="0"){
                    data.now_id = uplaval;
                    init_change_image(data);
                }
                $('#updateselect').attr('value','0');
            }

        }
    });



    uploader.on( 'all', function( type ) {
        var stats;
        switch( type ) {
            case 'uploadFinished':
                setState( 'confirm' );
                break;
            case 'startUpload':
                setState( 'uploading' );
                break;

            case 'stopUpload':
                setState( 'paused' );
                break;

        }
    });

    uploader.onError = function( code ) {
        // alert( 'Eroor: ' + code );
    };

    $upload.on('click', function() {
        if ( $(this).hasClass( 'disabled' ) ) {
            return false;
        }

        if ( state === 'ready' ) {
            uploader.upload();
        } else if ( state === 'paused' ) {
            uploader.upload();
        } else if ( state === 'uploading' ) {
            uploader.stop();
        }
    });

    $info.on( 'click', '.retry', function() {
        uploader.retry();
    } );


    $upload.addClass( 'state-' + state );
    updateTotalProgress();
});