var PopperWindow = new Class({

	initialize: function()
	{
		
	},
	
	pop: function(options)
	{
		this.dimensions = options.dimensions.split('x');
		this.flutter = options.flutter || 50;
		this.flash = options.flash || false;
		this.popcontent = options.content || false;
		this.onclose = options.onclose || false;
		
		this.overlay = new Element('div').setProperty('class','popperoverlay').setOpacity(0).injectInside(window.document.body);
		this.overlay.addEvent("click",this.unpop.bind(this));
		this.overlay.setStyle("height",$(window.document.body).getSize().size.y);
		
		this.popper = new Element('div').setProperty('class','popper').setStyle('width','0px').setStyle('height','0px').injectInside(window.document.body);
		this.stabilize();
		this.stabilizer = setInterval(this.stabilize.bind(this),1);
		var obj = this;
		
		this.toggleFlash('off');
		this.overlay.effects({duration:300}).start({
			'opacity':				'0.75'
		}).chain(function(){
			
			obj.popper.effects({wait:false, duration: 300, transition:Fx.Transitions.Sine.easeIn}).start({
				'width':	obj.dimensions[0]+'px',
				'height':	obj.dimensions[1]+'px'
			}).chain(function(){
				obj.popper.effects({wait:false, duration: 100, transition:Fx.Transitions.Sine.easeOut}).start({
					'width':	(obj.dimensions[0]-obj.flutter)+'px',
					'height':	(obj.dimensions[1]-obj.flutter)+'px'
				}).chain(function(){
					this.transition = Fx.Transitions.Sine.easeIn;
					this.start({
						'width':	obj.dimensions[0]+'px',
						'height':	obj.dimensions[1]+'px'
					});
				})
				this.start({});
			}).chain(function(){
				clearInterval(obj.stabilizer);
				obj.display();
			});
		});
	},
	
	unpop: function() 
	{
		if (this.overlay) 
		{
			this.junk(this.popper);
			var obj = this;
			var ol = this.overlay;
			this.overlay.effects({
				duration:			400,
				transition:			Fx.Transitions.Quart.easeInOut
			}).start({
				'opacity':			'0'
			}).chain(function(){
				obj.junk(ol);
				this.start({});
			}).chain(function(){
				if(obj.onclose)
					obj.onclose();
				obj.toggleFlash('on');
			});
		} else {
			if(obj.onclose)
				obj.onclose();
			this.toggleFlash('on');
		}
	},
	
	display: function() 
	{
		var inpop = this.popper.innerHTML;
		this.popper.innerHTML = this.popcontent.innerHTML;
		new Element('div').setProperty('class','controls').injectInside(this.popper);
		new Element('a').setProperty('href','javascript:;').setHTML('Close').addEvent('click',this.unpop.bind(this)).injectInside(this.popper.getElement('div.controls'));
		this.popper.getElement('div.popcontent').setStyle('height',(this.dimensions[1]-30)+'px');
		this.popper.getElement('div.popcontent').setStyle('width',(this.dimensions[0]-12)+'px');
	},
	
	junk: function(obj) 
	{
		obj.remove();
	},
	
	stabilize: function() 
	{
		var wsize = window.getSize();
		var left = (wsize.size.x.toInt() - this.popper.getSize().size.x.toInt()) / 2;
		this.popper.setStyle('left',left);
	},
	
	toggleFlash: function(onoff)
	{
		if ($(this.flash))
			$(this.flash).setStyle('visibility',((onoff == 'on') ? 'visible' : 'hidden'));
	}

});