/* global tinyMCE */
/* global wp */

/* exported WPEditorWidget */
var WPEditorWidget = {

    /**
     * @var string
     */
    currentContentId: '',

    /**
     * @var int
     */
    wpFullOverlayOriginalZIndex: 0,

    /**
     * @var bool
     */
    isVisible: false,

    /**
     *
     */
    toggleEditor: function (contentId) {
        if (this.isVisible === true ) {
            this.hideEditor();
        } else {
            this.showEditor(contentId);
        }
    },

    /**
     * Show the editor
     *
     * @param string contentId
     */
    showEditor: function (contentId) {
        this.isVisible = true;
        var overlay = jQuery('.wp-full-overlay');
        
        jQuery('body.wp-customizer #wp-editor-widget-container').fadeIn(100).animate({'bottom':'0'});

        this.currentContentId = contentId;
        this.wpFullOverlayOriginalZIndex = parseInt(overlay.css('zIndex'));
        overlay.css({ zIndex: 49000 });

        this.setEditorContent(contentId);
    },

    /**
     * Hide editor
     */
    hideEditor: function () {
        this.isVisible = false;
        jQuery('body.wp-customizer #wp-editor-widget-container').animate({'bottom':'-650px'}).fadeOut();
        jQuery('.wp-full-overlay').css({ zIndex: this.wpFullOverlayOriginalZIndex });
    },

    /**
     * Set editor content
     */
    setEditorContent: function (contentId) {
        var editor = tinyMCE.EditorManager.get('wpeditorwidget');
        var content = jQuery('#'+ contentId).val();

        if (typeof editor === 'object' && editor !== null) {
            editor.setContent(content);
        }
        jQuery('#wpeditorwidget').val(content);
    },

    /**
     * Update widget and close the editor
     */
    updateWidgetAndCloseEditor: function () {

        jQuery('#wpeditorwidget-tmce').trigger('click');
        var editor = tinyMCE.EditorManager.get('wpeditorwidget');
        var content = editor.getContent();

        if (typeof editor === 'undefined' || editor === null || editor.isHidden()) {
            content = jQuery('#wpeditorwidget').val();
        }

        var contentId = jQuery('#'+ this.currentContentId);
        contentId.val(content);


        if (contentId.attr('class') === 'editorfield') {
            var controlid = contentId.data('customize-setting-link');
            setTimeout(
                function () {
                    wp.customize(
                        controlid, function (obj) {
                            obj.set(editor.getContent());
                        } 
                    );
                }, 1000
            );
        }

        this.hideEditor();
    }

};

jQuery(document).ready(
    function () {
        jQuery('.customize-section-back').on(
            'click',function () {
                WPEditorWidget.hideEditor();
            }
        );

        var customize = wp.customize;
        customize.previewer.bind(
            'trigger-close-editor', function ( data ) {
                if(data === true ) {
                    WPEditorWidget.hideEditor();
                }
            }
        );

    }
);