jQuery(document).ready(function($) {
    var $embedurl = $('#awsm-url'),
        $shortcode = $('#shortcode'),
        $message = $('#embed-message p'),
        $ActionPanel = $('.mceActionPanel'),
        $container = $('.ead-container'),
        fileurl = "",
        newprovider = "",
        frame,
        msextension = emebeder.msextension,
        drextension = emebeder.drextension;
    //Opens Embed popup
    $('body').on('click', '.awsm-embed', function(e) {
        ead_reset();
        e.preventDefault();
        $('body').addClass('ead-popup-on');
        tb_show("Embed Any Document", "#TB_inline?inlineId=embed-popup-wrap&amp;width=1030&amp;modal=true", null);
        ead_tb_position();
        $("#upload-doc").focus();
        return;
    });
    
    //Update shortcode on change
    $(".ead-usc").change(function() {
        newprovider = "";
        ead_updateshortcode($(this).attr('id'));
        ead_customize_popup();
    });
    $('.embedval').keyup(function() {
        ead_updateshortcode($(this).attr('id'));
    });
    //Wordpress Uploader
    $('#upload-doc').click(ead_open_media_window);

    //Add url
    $('#ead-add-url').click(ead_embded_url);

    //insert Shortcode
    $('#insert-doc').click(ead_shortcode);
    // Add from URL support
    $('#add-ead-document').on('click', function(e) {
        e.preventDefault();
        $('.addurl-box').fadeIn();
        $('.ead-options').hide();
    });
    //Add fromrom URL cancel handler
    $('.go-back').on('click', function(e) {
        e.preventDefault();
        $('.addurl-box').hide();
        $('.ead-options').fadeIn();
    });
     // Close embed dialog
    $('#embed-popup').on('click', '.cancel-embed,.ead-close', function(e) {
        // Prevent default action
        e.preventDefault();
        ead_remove_pop();
    });
    //Insert Media window
    function ead_open_media_window() {
        var uClass = 'upload';
        if (frame) {
            frame.open();
            return;
        }
        frame = wp.media({
            title: 'Embed Any Document',
            multiple: false,
            library: {
                type: emebeder.validtypes,
            },
            button: {
                text: emebeder.select_button
            }
        });
        frame.on('select', function() {
            var file = frame.state().get('selection').first().toJSON();
            ead_updateprovider(file, uClass);
        });
        frame.open();
    }
    

    //update provider
    function ead_updateprovider(file, uClass) {
        fileurl = file.url;
        ead_valid_viewer(file, uClass);
        ead_updateshortcode();
        ead_uploaddetails(file, uClass);
    }
    //sanitize width and height
    function ead_sanitize(dim) {
        if (dim.indexOf("%") == -1) {
            dim = dim.replace(/[^0-9]/g, '');
            dim += "px";
        } else {
            dim = dim.replace(/[^0-9]/g, '');
            dim += "%";
        }
        return dim;
    }
    //Thickbox Handler
    function ead_tb_position() {
            var tbWindow = $('#TB_window');
            var width = $(window).width();
            var H = $(window).height();
            var W = ( 1080 < width ) ? 1080 : width;

            if ( tbWindow.size() ) {
                tbWindow.width( W - 50 ).height( H - 45 );
                //$('#TB_iframeContent').width( W - 50 ).height( H - 75 );
                $('#TB_ajaxContent').css({'width':'100%','height':'100%','padding':'0'});
                tbWindow.css({'margin-left': '-' + parseInt((( W - 50 ) / 2),10) + 'px'});
                if ( typeof document.body.style.maxWidth != 'undefined' )
                    tbWindow.css({'top':'20px','margin-top':'0'});
                $('#TB_title').css({'background-color':'#fff','color':'#cfcfcf'});
            };
    };
    $(window).resize( function() { ead_tb_position() } );
    //to getshortcode
    function getshortcode(url, item) {
        var height = ead_sanitize($('#ead-height').val()),
            width = ead_sanitize($('#ead-width').val()),
            download = $('#ead-download').val(),
            provider = $('#ead-provider').val(),
            text = $('#ead-text').val(),
            cache = $('#ead-cache').is(':checked'),
            heightstr = "",
            widthstr = "",
            downloadstr = "",
            providerstr = "",
            textstr="",
            cachestr="",
            drivestr = "";
        if (ead_itemcheck('height', item)) {
            heightstr = ' height="' + height + '"';
        }
        if (ead_itemcheck('width', item)) {
            widthstr = ' width="' + width + '"';
        }
        if (ead_itemcheck('download', item)) {
            downloadstr = ' download="' + download + '"';

        }
        if (ead_itemcheck('provider', item)) {
            providerstr = ' viewer="' + provider + '"';
        }
        if (ead_itemcheck('text', item) && download!='none' ) {
            textstr = ' text="' + text + '"';
        }

        if (provider == 'google') {
            $('#eadcachemain').show();
            if (cache) {
                cachestr = ' cache="off"';
            }
        } else {
            $('#eadcachemain').hide();
        }

        if (provider === 'browser') {
            $('.ead-browser-viewer-note').show();
        } else {
            $('.ead-browser-viewer-note').hide();
        }

        return '[embeddoc url="' + url + '"' + widthstr + heightstr + downloadstr + providerstr + cachestr + drivestr + textstr +']';
    }
    // Checks with default setting value
    function ead_itemcheck(item, dataitem) {
        var check = $('#ead-' + item).val();
        if(!check) return false;
        var datacheck = 'ead-' + item;
        if (datacheck == dataitem) {
            return true;
        } else if (check != emebeder[item]) {
            return true;
        }
        return false;
    }
    //Print uploaded file details
    function ead_uploaddetails(file, uClass) {
        $('#insert-doc').removeAttr('disabled');
        $('#ead-filename').html(file.filename);
        if (file.filesizeHumanReadable) {
            $('#ead-filesize').html(file.filesizeHumanReadable);
        } else {
            $('#ead-filesize').html('&nbsp;');
        }
        $('.upload-success').fadeIn();
        $container.hide();
        ead_upload_class(uClass);
    }
   

    function ead_embded_url() {
        var checkurl = $embedurl.val();
        if (checkurl !== '') {
            ead_validateurl(checkurl);
        } else {
            $embedurl.addClass('urlerror');
            ead_updateshortcode();
        }
    }
    function ead_is_valid_url(url) {
        return /^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(url);
    }
    //Validate file url
    function ead_validateurl(url) {
        var uClass = 'link';
        $('#embed-message').hide();
        if(ead_is_valid_url(url)) {
            fileurl = url;
            var filename = url.split('/').pop();
            if (!filename) filename = emebeder.from_url;
            var file = {
                url: fileurl,
                filename: filename
            };
            $('#insert-doc').removeAttr('disabled');
            $('#ead-filename').html(emebeder.from_url);
            $('#ead-filesize').html('&nbsp;');
            $('.upload-success').fadeIn();
            $container.hide();
            ead_upload_class(uClass);
            ead_valid_viewer(file, uClass);
            ead_updateshortcode();
        }else{
            ead_showmsg(emebeder.invalidurl);
        }
    }
    //Show Message
    function ead_showmsg(msg) {
        $('#embed-message').fadeIn();
        $message.text(msg);
    }
    

    function ead_shortcode() {
        if (fileurl) {
            // @rel: document guten-block
            var ins_shortcode = true;
            if(typeof wp.blocks !== 'undefined') {
                var document_block = wp.blocks.getBlockType('embed-any-document/document');
                if(typeof document_block !== 'undefined') {
                    ins_shortcode = false;
                }
            }
            if(ins_shortcode) {
                wp.media.editor.insert($shortcode.text());
            }
            ead_remove_pop();
        } else {
            showmsg(emebeder.nocontent);
        }
    }
    
    //Update ShortCode
    function ead_updateshortcode(item) {
        item = typeof item !== 'undefined' ? item : false;
        if (fileurl) {
            $shortcode.text(getshortcode(fileurl, item));
        } else {
            $shortcode.text('');
        }
    }
   
    //UploadClass
    function ead_upload_class(uPclass) {
        $(".uploaded-doccument").removeClass("ead-link ead-upload ead-dropbox ead-drive ead-box");
        $('.uploaded-doccument').addClass('ead-' + uPclass);
    }
    //close popup
    function ead_remove_pop(){
        // Close popup
        tb_remove();
        setTimeout(function() {
           $('body').removeClass('ead-popup-on');
        }, 800);
    }
    //Convert Filesize to human Readable filesize
    function ead_human_file_size(bytes) {
        var thresh = 1024;
        if (bytes < thresh) return bytes + ' B';
        var units = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
        var u = -1;
        do {
            bytes /= thresh;
            ++u;
        } while (bytes >= thresh);
        return bytes.toFixed(1) + ' ' + units[u];
    }
    // Viewer Check
    function ead_valid_viewer(file, provider) {
        var cprovider = ["link", "upload"];

        var validext = msextension.split(',');
        var checkitem = file.filename;
        if (provider == 'link') {
            checkitem = file.url;
        }
        var ext = '.' + checkitem.split('.').pop();

        var flexible_viewers = ['built-in', 'browser', 'microsoft'];
        $.each(flexible_viewers, function(i, value) {
            $("#new-provider option[value='" + value + "']").attr({
                'disabled': false,
                'hidden': false
            });
        });
        $('.ead-browser-viewer-note').hide();

        if ($.inArray(provider, cprovider) !== -1) {
            if ($.inArray(ext, validext) === -1) {
                newprovider = "google";
                $("#new-provider option[value='google']").attr("selected", "selected");
                $("#new-provider option[value='microsoft']").attr({
                    'disabled': true,
                    'hidden': true
                });
            } else {
                newprovider = "microsoft";
                $("#new-provider option[value='microsoft']").attr("selected", "selected");
            }

            // Hide the Browser viewer and built-in viewer if the extension is not pdf and also if the provider is not in the supported providers list.
            if (ext !== '.pdf'){
                $("#new-provider option[value='browser']").attr({
                    'disabled': true,
                    'hidden': true
                });
            }

            if (ext !== '.pdf' || (provider === 'link' && checkitem.indexOf(emebeder.site_url) === -1)) {
                $("#new-provider option[value='built-in']").attr({
                    'disabled': true,
                    'hidden': true
                });
            }
        }
    }
    //Download text show
    function ead_customize_popup(){
        if($('#ead-download').val()=="none"){
            $('#ead-download-text').hide();    
        }else{
            $('#ead-download-text').show();  
        }
        
    }
    //Reset form data
    function ead_reset() {
        $container.show();
        $embedurl.val('');
        $('.ead-options').fadeIn();
        $('.addurl-box').hide();
        $('.upload-success').hide();
        $('#embed-message').hide();
        $('#insert-doc').attr('disabled', 'disabled');
        $('#new-provider').show();
        $('#ead-pseudo').hide();
        newprovider = "";
        $("#new-provider  option[value='microsoft']").attr('disabled', false);
        $('#ead-downloadc').show();
        ead_customize_popup();
    }   
});