(function($){"use strict";

var tpl = '' +
    '<div class="sp-media sp-media-display">' +
        '<div class="sp-media-player-wrapper">' +
            '<div class="sp-media-next"><button class="sp-button sp-button-next"><span></span></button></div>' +
            '<div class="sp-media-previous"><button class="sp-button sp-button-previous"><span></span></button></div>' +
            '<div class="sp-media-player"></div>' +
        '</div>' +
        '<div class="sp-media-meta-wrapper">' +
            '<div class="sp-media-meta">' +
                '<div class="sp-media-see_more"><a>See More &rarr;</a></div>' +
            '</div>' +
        '</div>' +
    '</div>'
;

function formatField(field, value) {
    var str = value;

    switch (field) {
        case "created": str = "Added " + value; break;
        case "views": str = value + " views"; break;
    }

    return str;
}


window.shiftpress.modal_media = function(options) {
    var defaults = {
        data: null,
        selected: 0,
        id: null,
        type: null,
        fields: [ "title", "description", "views", "created" ]
    };

    options = $.extend(defaults, options);

    if (!options.data && (!options.id || !options.type)) {
        return;
    }

    var $modal = shiftpress.modal({
        id: "sp-modal-media",
        title: "Loading...",
        content: tpl,
        waitForReady: true,
        autoCenter: true
    });

    var $player = $('.sp-media-player', $modal);
    var $meta = $('.sp-media-meta', $modal);
    var $next = $('.sp-media-next', $modal);
    var $previous = $('.sp-media-previous', $modal);

    $next.click(function() {
        var selected = options.selected;

        if (++selected >= options.data.length) {
            selected = 0;
        }
        
        load(selected);
    });

    $previous.click(function() {
        var selected = options.selected;

        if (--selected < 0) {
            selected = options.data.length - 1;
        }

        load(selected);
    });

    function load(idx) {
        var selected = options.data[idx];

        if (!selected) {
            log("Tried to load invalid media!");
            return false;
        }

        if (selected.type == "photo" && !selected.hasFull) {
            shiftpress.api({
                url: 'media/' + selected.type + '/' + selected.id + '/thumbnail',
                data: {
                    thumbnail: [ 970, 664, "scaleto" ]
                },
                success: function(data) {
                    if (data.thumbnail) {
                        selected.thumbnail = data.thumbnail;
                        selected.hasFull = true;
                        show(selected);
                        options.selected = idx;
                        $modal.trigger('modalready');
                    } else {
                        shiftpress.message(data.error || "Unknown error occurred retrieving photo");
                    }
                }
            });
        } else {
            show(selected);
            $modal.trigger('modalready');
            options.selected = idx;
        }
    }

    function show(data) {
        $modal.trigger('modaltitle', [ data.title ]);

        $('.sp-modal-window-wrapper', $modal).addClass("sp-modal-media-" + data.type);

        // load fields
        for (var field in data) {
            if ($.inArray(field, options.fields) >= 0) {
                var $el = $('.sp-media-' + field, $meta);
                if ($el.length == 0) {
                    $el = $('<div class="sp-media-' + field + '">' + formatField(field, data[field]) + '</div>');
                    $meta.append($el);
                }

                $el.html(formatField(field, data[field]));
            }
        }

        $player.empty();

        var preview = data.url;
        if (data.type === "photo") {
            preview = data.thumbnail;

            shiftpress.api({
                url: '/media/photo/' + data.id + '/view',
                method: 'post'
            });
        }

        shiftpress.media_player($player, {
            url: preview,
            width: 640,
            height: 390,
            autoplay: true
        });

        // setup like button
        $('.fb_iframe_widget', $meta).remove();
        $meta.append('<fb:like href="' + shiftpress.siteurl + '/' + data.type + 's/' + data.id + '" send="false" layout="button_count" width="100" show_faces="false" colorscheme="dark" font="arial"></fb:like>');
        FB.XFBML.parse();

        $('.sp-button-like', $meta).attr('rel', '/media/' + data.type + '/' + data.id);

        var url = shiftpress.url + '/' + data.type + 's/' + data.id;

        // setup facebook button
        $('.sp-media-share-facebook', $meta).html('<iframe src="http://www.facebook.com/plugins/like.php?href=' + encodeURIComponent(url) + '&amp;send=false&amp;layout=button_count&amp;width=450&amp;show_faces=false&amp;action=like&amp;colorscheme=dark&amp;font=arial&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:21px;" allowTransparency="true"></iframe>');
    }

    if (!options.data) {
        var thumbnail = null;

        if (options.type == "photo") {
            thumbnail = [ 970, 644, "scaleto" ];
        }

        shiftpress.api({
            url: 'media/' + options.type + '/' + options.id,
            data: {
                thumbnail: thumbnail
            },
            success: function(data) {
                if (data[options.type]) {
                    options.data = [ data[options.type] ];
                    options.selected = 0;

                    options.data[0].hasFull = true;

                    load(options.selected);

                    $modal.trigger('modalready');
                }
            }
        });
    } else {
        var data = options.data;

        if (!data[0]) {
            data = [ data ];
            options.selected = 0;
        } else if (!data[options.selected]) {
            options.selected = 0;
        }

        load(options.selected);
    }
};

})(jQuery);

