﻿(function($) {
    $.fn.playerPopup = function(settings) {
        var defaultSettings =
		{
		    launcherCssClass: 'expander',
		    overlayCssClass: 'overlayContainer',
		    playerCssClass: 'playerContainer'
		};


        //Functions

        //Borrowed from JQuery LightBox
        function getViewportSize() {
            var windowWidth, windowHeight;
            if (self.innerHeight) {	// all except Explorer
                if (document.documentElement.clientWidth) {
                    windowWidth = document.documentElement.clientWidth;
                } else {
                    windowWidth = self.innerWidth;
                }
                windowHeight = self.innerHeight;
            } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
                windowWidth = document.documentElement.clientWidth;
                windowHeight = document.documentElement.clientHeight;
            } else if (document.body) { // other Explorers
                windowWidth = document.body.clientWidth;
                windowHeight = document.body.clientHeight;
            }
            var viewportSize = new Array(windowWidth, windowHeight);
            return viewportSize;
        };


        function repositionPlayer(playerContainer) {
            var viewportDimensions = getViewportSize();
            var playerTop = (viewportDimensions[1] - playerContainer.height()) / 2;
            var playerLeft = (viewportDimensions[0] - playerContainer.width()) / 2;

            playerContainer.css({ top: playerTop, left: playerLeft });
        }


        function _resizeHandler() {
            var playerContainer = $('.' + settings.overlayCssClass + ' .' + settings.playerCssClass + ":visible");



            if (playerContainer)
                repositionPlayer(playerContainer);
        }


        function showPopup() {
            var viewportDimensions = getViewportSize();
            var overlay = $(this).data("overlay");
            overlay.css('display', 'block');
            overlay.width(viewportDimensions[0]);
            overlay.height(viewportDimensions[1]);
            _resizeHandler();
        }

        function hidePopup() {
            $(this).css('display', 'none');
            // Stop the player from playing when hidden
            if (!$(this).find('object').get(0)) {
                return;
            }
            if (!$(this).find('object').get(0).content.MediaPlayer) {
                return;
            }
            $(this).find('object').get(0).content.MediaPlayer.Pause();
        }



        //Initialise each matched element 
        settings = $.extend(defaultSettings, settings);
        this.each(function() {
            var launcher = $('.' + settings.launcherCssClass, this);
            var overlay = $('.' + settings.overlayCssClass, this);
            var playerContainer = $('.' + settings.playerCssClass, this);

            if (!launcher || !overlay || !playerContainer) return;

            //remove a around play button
            var playerButton = launcher.find("a .playButtonOverlay");
            launcher.find("a").replaceWith(playerButton);

            //Move to "root" element...
            overlay.remove();
            overlay.prependTo($("form"));

            launcher.data("overlay", overlay);

            launcher.click(showPopup);
            overlay.click(hidePopup);
            playerContainer.unbind().bind('click', function() { return false; });
            playerContainer.find("a[rel='close']").data("overlay", overlay);
            playerContainer.find("a").click(function() {
                if ($(this).attr("rel") == "close") {
                    $(this).data("overlay").click();
                    return;
                }
                if ($(this).attr("target") == "_blank") {
                    window.open($(this).attr("href"));
                }
                else {
                    document.location.href = $(this).attr("href");
                }
            });

            // If window was resized, calculate the new overlay dimensions
            $(window).resize(_resizeHandler);
            playerContainer.resize(_resizeHandler);

        });

        $("form ." + settings.overlayCssClass).wrap("<div class='slPlayerHost'></div>");

        return this;
    };
})(jQuery);
