OnlineHub = Class.create();

OnlineHub.Overlay = Class.create();
OnlineHub.Overlay.prototype = 
{
    initialize: function(opts)
    {
        this.cl = opts.class;
        this.on_hide = opts.onClick;
        
        this.hide_on_click = false;
        if(opts.hideOnClick != undefined)
        {
            this.hide_on_click = opts.hideOnClick;
        }
        
        this.container = opts.container || document.body;
        this.overlay = new Element('div', { 'class': this.cl}).hide();
        
        if(this.hide_on_click)
        {
           this.overlay.observe('click', this.hide.bindAsEventListener(this));
        }
        
        this.container.insert(this.overlay);
        
    },
    
    show: function()
    {
        var oh = OnlineHub.Utilities.get_max_height() + 'px';
        this.overlay.setStyle({'height': oh});
        this.overlay.setStyle({'zIndex': OnlineHub.Utilities.get_max_z_index()});
        new Effect.Appear(this.overlay, { duration: 0.5,  to: 0.9 });
        this.overlay.show();
        this.overlay.absolutize();
    },
    
    hide: function(e)
    {
        this.overlay.relativize();
        this.overlay.hide();
        this.overlay.setStyle({'zIndex': 0});
        if((this.on_hide != undefined) && (e != undefined))
        {
            this.on_hide();
        }
    },
    
    remove: function()
    {
        this.overlay.remove();
    },
    
    get_z_index: function()
    {
        return parseInt(this.overlay.getStyle('zIndex'));
    }
};

OnlineHub.Utilities = Class.create();
OnlineHub.Utilities.get_max_z_index = function(element)
{
    var el = element;
    if(el == undefined)
    {
        el = document.body;
    }
    el = $(el);
    var all = el.descendants();
    var all_z = all.collect( function(s){ return s.getStyle('zIndex'); })
    return parseInt(all_z.max()) + 1;
}

OnlineHub.Utilities.get_max_height = function (element)
{
    var el = $(element);
    
    if(el == undefined)
    {
        el = $('site_wrapper');
    }
    
    if(el == undefined)
    {
        el = document.body;
        el = $(el);
    }
    
    return Math.max(el.getHeight(), document.viewport.getHeight());
}

OnlineHub.Utilities.get_max_width = function (element)
{
    var el = element;
    if(el == undefined)
    {
        el = document.body;
    }
    el = $(el);
    return Math.max(el.getWidth(), document.viewport.getWidth());
}
