var Status = new Class({
    display_title: false,
    display_message: false,
    cover_element: document.body,
    display_buttons: false,
    pop_shown: false,
    
    Implements: [Events, Options],

    options: {
        onStatusShown: $empty,
        onStatusHide: $empty
    },
    
    initialize: function(){
        this.setOptions();
    },
    
    title: function(title){
        this.display_title = title;
        
        if(this.pop_shown){
            this.pop_title.set('html', this.display_title);
        }
        
        return this;
    },
    
    message: function(message){
        this.display_message = message;
        
        if(this.pop_shown){
            this.pop_message.set('html', this.display_message);
        }
        
        return this;
    },
    
    messageDynamic: function(message){
                
        if(this.pop_shown){
            this.pop_message.empty().adopt(message);
        }
        
        return this;
    },
    
    show: function(){
        if(!this.pop_shown){
            if(!this.display_buttons){
                this.buttons({
                    'close': {
                        'type': 'close'
                    }
                });
            }
        
            this._build();
        }
        
        this._resizeControl();

        this.fireEvent('StatusShown');
        
        return this;
    },
    
    buttons: function(buttons){
        var buttons_defined = [];
        
        $H(buttons).each(function(button, key){
            var func;
            var href    = button.href || '#';
            var image   = '';
            var a_class = '';
            var text    = 'asdf';
            
            switch(button['type']){
                case 'location':
                    image = 'arrow';
                    break;
                case 'close':
                    image = 'x';
                    break;   
                case 'refresh':
                    image = 'x';
                    break;   
            }
                        
            var a = new Element('a', {
                'href' : href,
                'events' : {
                    'click' : function(e){
                        if(!button.href) e.stop();
                        
                        switch(button['type']){
                            case 'location':
                                Window.locaton = button['action'];
                                break;
                            case 'close':
                                this.clear();
                                break;
                            case 'refresh':
                                history.go();
                                break;
                        }
                    }.bind(this)
                },
                'class' : 'button right'
            });
            
            var button_text_span = new Element('span', {
                'class' : image,
                'html' : key
            });
                        
            a.adopt(button_text_span);
            
            buttons_defined.push(a);
            
        }.bind(this));
        
        buttons_defined.push(new Element('div', {
            'class': 'clear'
        }));
        
        this.display_buttons = buttons_defined;
        
        if(this.pop_shown){
            this.pop_buttons.set('html', '').adopt(this.display_buttons);
        }

        return this;
    },
    
    _build: function(){        
        var clear           = new Element('div', {'class': 'clear'});        
        this.pop_buttons    = new Element('div', {'class': 'pop_buttons'}).adopt(this.display_buttons);
        this.pop_title      = new Element('h3').set('html', this.display_title || '');
        this.header_content = new Element('div', {'class': 'header_content'}).adopt(this.pop_title, clear.clone());
        this.header         = new Element('div', {'class': 'header'}).adopt(this.header_content);
        this.pop_message    = new Element('p').set('html', this.display_message);
        this.pop_buttons    = new Element('div', {'class' : 'box_buttons'}).adopt(this.display_buttons);
        var header          = new Element('div', {'class': 'header'}).adopt(this.header_content);    
        var content         = new Element('div', {'class': 'box_content'}).adopt(this.pop_message, this.pop_buttons, clear);
        var box             = new Element('div', {'class': 'status_box'}).adopt(header, content);
        var size            = $(document.body).getSize();
        
        this.popup          = new Element('div', {
            'styles': {
                'left': (size.x - 400) / 2
            },
            'class' : 'lightbox_container'
        }).adopt(box).inject($(document.body));
        
        this._applyCover().pop_shown = true;
        
        return this;
    },
    
    _applyCover: function(){
        var size = window.getScrollSize();
        
        this.cover = new Element('div', {
            'styles' : {
                'opacity'           : .7
            },
            'class' : 'page_cover'
        }).inject(document.body);
        
        return this;
    },
    
    clear: function(){
        this.pop_shown = false;
		this.buttons({
            'close': {
                'type': 'close'
            }
        });
		
        this.popup.dispose();

        if(this.cover) this.cover.dispose();
		
        this.fireEvent('StatusHide');
        
        return this;
    },
    
    _resizeControl: function(){
        window.addEvent('resize', function(){
            if(this.pop_shown){
                var w_size = window.getSize();
                
                this.popup.setStyles({
                    'left': (w_size.x - 400) / 2
                });
            }
        }.bind(this));

		return this;
    }
});