﻿var LightBox = {
    Show: function( attachedEle ) {
        LightBox.__LIT_ELEMENT = attachedEle;
        var ele = LightBox.GetInstance(ele);
        ele.Show();
    },
    Hide: function() {
        var ele = LightBox.GetInstance();
        ele.Hide();
    },
    IsHidden: function() {
        var ele = LightBox.GetInstance();
        return ele.IsHidden();
    },
    GetInstance: function() {
        var ele = $('lightbox');
        if( ! ele ) {
            $(document.body).adopt(
                ele = new Element('div',{'id':'lightbox','class':'lightboxContainer hidden','styles':{'opacity':'0.8'}})
            );
            
            ele.addEvent('click', function() {
                if( LightBox.__LIT_ELEMENT ) {
                    if( $type( LightBox.__LIT_ELEMENT.LightBoxClosed ) == "function" ) {
                        LightBox.__LIT_ELEMENT.LightBoxClosed();
                    } else {
                        LightBox.Hide();
                    };
                } else {
                    LightBox.Hide();
                }
                return false;
            });
            
            var resizeLightbox = function() {
                if( ! LightBox.IsHidden() ) {
                    var size = window.getScrollSize();
                    pageHeight = size.y;
                    
                    if( LightBox.__LIT_ELEMENT ) {
                        size = LightBox.__LIT_ELEMENT.getCoordinates();
                        if( size.height + size.top > pageHeight ) {
                            pageHeight = size.top + size.height;
                            
                        }
                    }
                    LightBox.GetInstance().setStyles({
                        height: pageHeight,
                        width: window.getSize().x
                    });
                } else {
                    LightBox.GetInstance().setStyle('height','0');
                }
            };
            resizeLightbox();
            resizeLightbox.periodical( 100 );           
        }
                
        return ele;
    }
};

Element.implement({
    Show: function() {
        return this.removeClass('hidden');
    },
    Hide: function() {
        return this.addClass('hidden');
    },
    IsHidden: function() {
        return this.hasClass('hidden');
    },
    FadeIn: function(callback) {
        if( ! callback ) {
            callback = Void;
        }
        var myFx = new Fx.Tween(this,{
            duration: 500,
            onComplete: function() {
                callback;
            }
        });
        this.setStyle('opacity',0);
        this.removeClass('hidden');
        myFx.start('opacity','0','1');
        
    },
    FadeOut: function( callback ) {
        if( ! callback ) {
            callback = Void;
        }
        var myFx = new Fx.Tween(this,{
            duration: 500,
            onComplete: function() { 
                callback();
            }
        }).start('opacity','1','0');
    }
});