DietDog.PopUp = new Class({
    Implements : [ Events, Options ],
    options : {
        title : 'title',
        text : 'text',
        'z-index' : 1000,
        height : 200,
        width : 200,
		top : 50,
		left : 200
    },
    initialize : function( options ){
        this.setOptions( options );
    },
	getContentElement : function(){
		return this.content_element;
	},
    open : function(options){
		this.setOptions(options);
        var that = this;

		if(this.is_open)this.close();
		this.is_open=true;
		
        this.fireEvent('open#begin');

        var content = new Element('div',{
            'class' : 'p-main',
            text : this.options.text
        });
		this.content_element = content;
		
		if(this.options.content){
			content.empty();
			content.adopt(this.options.content);
		}
		
        var close_button = new Element('button',{
 //           text : 'Close',
            'class' : 'p-close_button'
        }).addEvent( 'click', function(){
            that.close();
        });
		close_button.adopt(new Element('div',{
			'class' : 'p-close_icon',
			text : ' '
		}));
		
        var title = new Element('div',{
            'class' : 'p-title',
            text : this.options.title
        }).adopt( close_button );

        var box = new Element('div',{
            'class' : 'p-box',
            styles : {
//                position : 'absolute',
                position : 'fixed',
                'z-index' : this.options['z-index'],
                overflow : 'hidden',
                width : this.options.width,
                height : this.options.height,
                top : this.options.top,
                left : this.options.left
            }
        }).adopt(
            title,
            content
        ).inject( document.body );

		box.position(); // pin after calculating content size fixes 
		
        this.box = box;

		var pos = content.getPosition(box);
		var sty = content.getStyles(
			'margin-top','margin-bottom',
			'padding-top','padding-bottom',
			'top'
		);
		content.setStyles({
			'height' : 
				box.getCoordinates().height - pos.y
				- sty['margin-top'].toInt() - sty['margin-bottom'].toInt()
				- sty['padding-top'].toInt() - sty['padding-bottom'].toInt()
				- 1
			,
			'overflow-y' : 'auto'
		});
		
		box.pin(); // must be done after resizing content for calculations to work
		
        this.fireEvent('open#finish');
    },
    close : function(){
        this.fireEvent('close#begin');

        if(this.box)this.box.dispose();
		this.is_open=false;
		
        this.fireEvent('close#finish');
    },
	openURL : function(options){
		var content = new Element('div',{
		}).set('load', {
			evalScripts : true,
			method : 'post',
			url : options.url,
			data : options.data || {},
			useSpinner : true,
			noCache : true
		});

		this.open({
			content : content
		});
		content.load();
		return this;
	}
});

DietDog.ModalPopUp = new Class({
    Extends : DietDog.PopUp,
    initialize : function(options){
        this.parent(options);

        var shim;
        this.addEvents({
            'open#begin' : function(){
                shim = new DietDog.ModalShim({
                    'z-index' : this.options['z-index']
                });
            },
            'close#finish' : function(){
                if(shim)shim.dispose();
            }
        });
    }
});
