var $opacity = {
    settings: {
        bg_color: '#000',     
        opacity: 0.5
    },

    init: function (){
        var $self = this;
                

        $self.overlay = $('<div id="jquery-overlay-div"></div>');
        $self.content = $('<div id="jquery-overlay-content"></div>');
        
        $('body').append($self.overlay);
        $('body').append($self.content);

         $self.overlay.css({
            backgroundColor:    $self.settings.bg_color,
            opacity:            $self.settings.opacity
        });

        // If window was resized, calculate the new overlay dimensions
        $(window).resize(function() {
            $self._recalc_size();
        });
    },

    start: function (content_obj){
        var $self = this;

        $('embed, object, select').hide();

        if (content_obj){
            $self.content_content = content_obj.show();
            $self.content.append($self.content_content);
        }

        $self._recalc_size();

        $self.overlay.show();
        $self.content.show();

    },

    stop: function (){
        var $self = this;
        
        $self.content.hide();
        if ($self.content_content){
            $self.content_content.remove();
        }
        $self.overlay.hide();
        $('embed, object, select').show();
    },

    _recalc_size: function () {
        var $self = this;
        
        var arrPageSizes = $self._getPageSize();

        $self.overlay.css({
            width:              arrPageSizes[0],
            height:             arrPageSizes[1]
        });

        var arrPageScroll = $self._getPageScroll();
   
        $self.content.css({
            top:    arrPageScroll[1] + (arrPageSizes[3] / 3),
            left:   arrPageScroll[0]
        });
    },

    _getPageSize: function () {
        var xScroll, yScroll;
        if (window.innerHeight && window.scrollMaxY) {
            xScroll = window.innerWidth + window.scrollMaxX;
            yScroll = window.innerHeight + window.scrollMaxY;
        } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
            xScroll = document.body.scrollWidth;
            yScroll = document.body.scrollHeight;
        } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
            xScroll = document.body.offsetWidth;
            yScroll = document.body.offsetHeight;
        }
        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;
        }
        // for small pages with total height less then height of the viewport
        if(yScroll < windowHeight){
            pageHeight = windowHeight;
        } else {
            pageHeight = yScroll;
        }
        // for small pages with total width less then width of the viewport
        if(xScroll < windowWidth){
            pageWidth = xScroll;
        } else {
            pageWidth = windowWidth;
        }
        arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight);
        return arrayPageSize;
    },
        
    _getPageScroll: function () {
        var xScroll, yScroll;
        if (self.pageYOffset) {
            yScroll = self.pageYOffset;
            xScroll = self.pageXOffset;
        } else if (document.documentElement && document.documentElement.scrollTop) {     // Explorer 6 Strict
            yScroll = document.documentElement.scrollTop;
            xScroll = document.documentElement.scrollLeft;
        } else if (document.body) {// all other Explorers
            yScroll = document.body.scrollTop;
            xScroll = document.body.scrollLeft;
        }
        arrayPageScroll = new Array(xScroll,yScroll);
        return arrayPageScroll;
    }
    
};

$(document).ready(function (){
    $opacity.init();
});

