/*************************************************
*
*    EXPANDING OVERLAY OBJECT
*
*    DEPENDANCY:
*    *	JQuery 1.6.2
*    
*    TODO
*    *	In "bringOverlayToFront()":
*		Position overlay at documents highest z-index + 1
*    *	Refactor
*
*************************************************/
var overlayObject = function(content, width, modal, openCallback, closeCallback)
{
    var _root = this,
        $overlay,
        $backdrop,
        width = width ? width : $(document).width(),
        modal = modal ? true : false,
        createOverlay = function()
        {
            $overlay = $("<div/>");
            $overlay.addClass("dynamicOverlay");
            $overlay.attr("id", "overlay_" + new Date().getTime());
            $overlay.hide();
            $("body").prepend($overlay);
        },
        configureOverlay = function()
        {
            $overlay.css(
            {
                "width" : width,
                "position" : "fixed",
                "top" : "0",
                "z-index" : 9999
            });
            $contentContainer = $("<div/>");
            $contentContainer.addClass("contentContainer");
            $contentContainer.css(
            {
                "position" : "relative"
            });
            $contentContainer.html(content);
            $contentContainer.detach();
        },
        createBackdrop = function()
        {
            $backdrop = $("<div />");
            $backdrop.addClass("overlay-backdrop");
            $overlay.prepend($backdrop);
        },
        configureBackdrop = function()
        {
            $backdrop.css(
            {
                "width" : "100%",
                "height" : "100%",
                "position" : "fixed",
                "left" : 0,
                "top" : 0
            });
            if(modal)
            {
                $backdrop.click(function(event)
                {
                    event.stopPropagation();
                });
            }
            else
            {
                $backdrop.click(function(event)
                {
                    event.stopPropagation();
                    _root.hideOverlay();
                });
            }
        },
        positionOverlay = function()
        {
            var windowWidth = $(window).width(),
                documentWidth = $(document).width(),
                overlayWidth = $overlay.width(),
                caseVariableViewportWidth = windowWidth < documentWidth ? windowWidth < overlayWidth ? overlayWidth : windowWidth : documentWidth,
                leftAlignementOfFlashBackground = ( caseVariableViewportWidth / 2 ) - ( overlayWidth / 2 );
            $overlay.css("left", leftAlignementOfFlashBackground);
        },
        bringOverlayToFront = function()
        {
            var zIndexInt = parseInt($overlay.css("z-index")),
                maxSafeZIndex = 2147483647;
            
            if(zIndexInt < maxSafeZIndex)
            {
                zIndexInt++;
                $overlay.css("z-index", zIndexInt);
            }
        },
        ini = function()
        {
            $(document).ready(function()
            {   
                createOverlay();
                configureOverlay();
                createBackdrop();
                configureBackdrop();
                positionOverlay();
                $(window).resize(function()
                {
                    positionOverlay();
                });
            });
        };
    this.showOverlay = function()
    {
    	if(typeof(openCallback) == "function")
    	{
    		openCallback();
    	}
    	$overlay.append($contentContainer);
        bringOverlayToFront();
        $overlay.show();
    };
    this.hideOverlay = function()
    {
    	if(typeof(closeCallback) == "function")
    	{    		
    		closeCallback();
    	}
    	$contentContainer.detach();
        $overlay.hide();
    };
    this.setContent = function(content)
    {
    	_root.content = content;
    	$contentContainer.html(content)
    };
    this.clearContent = function()
    {
    	_root.content = "";
    	$contentContainer.empty();
    }
    ini();
}
