/* global redux_change, wp */


// Add a file via the wp.media function
function redux_add_file(event, selector) {
    event.preventDefault();

    var frame;
    var jQueryel = jQuery(this);

    // If the media frame already exists, reopen it.
    if (frame) {
        frame.open();
        return;
    }

    // Create the media frame.
    frame = wp.media({
        multiple: false,
        library: {
            //type: 'image' //Only allow images
        },

        // Set the title of the modal.
        title: jQueryel.data('choose'),

        // Customize the submit button.
        button: {
            // Set the text of the button.
            text: jQueryel.data('update')
            // Tell the button not to close the modal, since we're
            // going to refresh the page when the image is selected.
        }
    });

    // When an image is selected, run a callback.
    frame.on('select', function() {

        // Grab the selected attachment.
        var attachment = frame.state().get('selection').first();
        frame.close();
        if (typeof redux.media === 'undefined') {
            redux.media = {};
        }
        if (typeof redux.media[jQuery(selector).attr('data-id')] === 'undefined') {
            redux.media[jQuery(selector).attr('data-id')] = {};
            redux.media[jQuery(selector).attr('data-id')].mode = "image";
        }

        if (redux.media[jQuery(selector).attr('data-id')].mode !== false && attachment.attributes.type !== redux.media[jQuery(selector).attr('data-id')].mode) {
            return;
        }

        selector.find('.upload').val(attachment.attributes.url);
        selector.find('.upload-id').val(attachment.attributes.id);
        selector.find('.upload-height').val(attachment.attributes.height);
        selector.find('.upload-width').val(attachment.attributes.width);
        redux_change(jQuery(selector).find('.upload-id'));
        var thumbSrc = attachment.attributes.url;
        if (typeof attachment.attributes.sizes !== 'undefined' && typeof attachment.attributes.sizes.thumbnail !== 'undefined') {
            thumbSrc = attachment.attributes.sizes.thumbnail.url;
        } else if (typeof attachment.attributes.sizes !== 'undefined') {
            var height = attachment.attributes.height;
            for (var key in attachment.attributes.sizes) {
                var object = attachment.attributes.sizes[key];
                if (object.height < height) {
                    height = object.height;
                    thumbSrc = object.url;
                }
            }
        } else {
            thumbSrc = attachment.attributes.icon;
        }
        selector.find('.upload-thumbnail').val(thumbSrc);
        if (!selector.find('.upload').hasClass('noPreview')) {
            selector.find('.screenshot').empty().hide().append('<img class="redux-option-image" src="' + thumbSrc + '">').slideDown('fast');
        }
        //selector.find('.media_upload_button').unbind();
        selector.find('.remove-image').removeClass('hide');//show "Remove" button
        selector.find('.redux-background-properties').slideDown();
    });

    // Finally, open the modal.
    frame.open();
}


// Function to remove the image on click. Still requires a save
function redux_remove_file(selector) {

    // This shouldn't have been run...
    if (!selector.find('.remove-image').addClass('hide')) {
        return;
    }
    selector.find('.remove-image').addClass('hide');//hide "Remove" button
    selector.find('.upload').val('');
    selector.find('.upload-id').val('');
    selector.find('.upload-height').val('');
    selector.find('.upload-width').val('');
    selector.find('.upload-thumbnail').val('');
    redux_change(jQuery(selector).find('.upload-id'));
    selector.find('.redux-background-properties').hide();
    var screenshot = selector.find('.screenshot');

    // Hide the screenshot
    screenshot.slideUp();

    selector.find('.remove-file').unbind();
    // We don't display the upload button if .upload-notice is present
    // This means the user doesn't have the WordPress 3.5 Media Library Support
    if (jQuery('.section-upload .upload-notice').length > 0) {
        jQuery('.media_upload_button').remove();
    }

}

(function($) {
    "use strict";

    $.redux = $.redux || {};

    $(document).ready(function() {
        $.redux.media();
    });

    /**
     * Media Uploader
     * Dependencies		: jquery, wp media uploader
     * Feature added by	: Smartik - http://smartik.ws/
     * Date				: 05.28.2013
     */
    $.redux.media = function() {
        // Remove the image button
        $('.remove-image, .remove-file').unbind('click').on('click', function() {
            redux_remove_file($(this).parents('fieldset.redux-field:first'));
        });

        // Upload media button
        $('.media_upload_button').unbind().on('click', function(event) {
            redux_add_file(event, $(this).parents('fieldset.redux-field:first'));
        });
    };

})(jQuery);
