var Popup = {
	body : null,
    container : null,
    overlay : null,
	popupWidth : 0,
	popupHeight : 0,
	url : null,
    
    init : function() {
        window.addEvent('load',Popup._init);
    },
    _init : function () {
		Popup.container = new Element('div').inject(document.body);
		Popup.container.setStyles({
			'position': 'absolute',
			'top' : '0px',
			'left': '0',
			'z-index' : '10000',
			'display' : 'none',
			'opacity' : 0,
			'overflow' : 'hidden'
		});
		Popup.container.addClass('popup');
		
		var btnClose = new Element('a',{
			'html' : 'x',
			'styles' : {
				'cursor' : 'pointer',
				'color' : '#fdfdf6',
				'font-weight' : 'bold',
				'font-size' : '14px',
				'position': 'absolute',
				'top' : '0px',
				'right': '5px'
			}
		}).inject(Popup.container);
		btnClose.addEvent('click',Popup.hide.bind(Popup));
		
		Popup.body = Element('div').inject(Popup.container);
		Popup.body.setStyles({
			'margin' : '0px',
			'padding' : '0px'
		});
		
        Popup.overlay = new Element('div').inject(document.body);
		Popup.overlay.setStyles({'position': 'absolute','left': '0','width': '100%','cursor': 'pointer','opacity' : '0','z-index' : '100'});
		Popup.overlay.addClass('overlay');
		
		Popup.overlay.addEvent('click',Popup.hide.bind(Popup));
		
		Popup.eventPosition = Popup.setPosition.bind(Popup);
    },
	open : function(url,options) {
		Popup.overlay.addEvent('click',Popup.hide.bindWithEvent(Popup));
		Popup.overlay.setStyles({top: '0px', height: Window.getScrollHeight()+'px'});
		
		Popup.popupWidth = options.width;
		Popup.popupHeight = options.height;
		Popup.url = url;
		
		Popup.setSize();
		Popup.setPosition();
		
		var nextEffect = Popup.displayContent.bind(Popup);
		
		var fx = new Fx.Morph(Popup.overlay,{duration: 500, transition: Fx.Transitions.Quart.easeIn});
		fx.addEvent('complete',nextEffect);
			
		fx.start({'opacity': .9});
		
		return false;
	},
	setSize : function() {
		Popup.container.setStyles({
			'width' : Popup.popupWidth + 'px',
			'height' : Popup.popupHeight + 'px'
		});
	},
	setPosition : function() {
		var scrollPosition = window.getScroll();
		var scrollSize = window.getScrollSize();
		var windowSize = window.getSize();

		var left = (windowSize.x - Popup.popupWidth)/2;
		var top = 0;
		
		if (Popup.popupHeight < windowSize.y) {
			top = scrollPosition.y + (windowSize.y - Popup.popupHeight)/2;
		} else {
			top = scrollPosition.y + 10;
		}
		
		if (top + Popup.popupHeight > scrollSize.y) {
			top = scrollSize.y - Popup.popupHeight - 10;
		}
		
		if (top < 0) top = 0;
		
		Popup.container.setStyles({
			'top' : top + 'px',
			'left' : left + 'px'
		});
	},
	displayContent : function() {
		window.addEvent('resize', Popup.eventPosition);
		window.addEvent('scroll', Popup.eventPosition);
		
		Popup.container.setStyles({'display' : 'block'});
		
		var nextEffect = Popup.loadContent.bind(Popup);
		
		var fx = new Fx.Morph(Popup.container,{duration: 1000, transition: Fx.Transitions.linear});
		fx.addEvent('complete',nextEffect);
		fx.start({'opacity': 1});
	},
	loadContent : function() {
		var width = Popup.popupWidth + 'px';
		var height = Popup.popupHeight  + 'px';
		
		var iframe = new IFrame({
			frameborder : 0,
			src : Popup.url,
			scrolling : 'auto',
			marginwidth : 0,
			marginheight : 0,
			styles : {
				'margin' : '0px',
				'width' : width,
				'height' : height
			}
		}).inject(Popup.body);
	},
	hide : function() {
		var nextEffect = Popup._hideOverlay.bind(Popup);
				
		var fx = new Fx.Morph(Popup.container,{duration: 1000, transition: Fx.Transitions.linear });
		fx.addEvent('complete',nextEffect);
		
		fx.start({'opacity': 0});
	},
	_hideOverlay : function() {
		Popup.body.empty();
		Popup.container.setStyles({'display' : 'none'});
		
		window.removeEvent('resize', Popup.eventPosition);
		window.removeEvent('scroll', Popup.eventPosition);
		
	    var fx = new Fx.Morph(Popup.overlay,{duration: 500, transition: Fx.Transitions.Quart.easeIn });
		fx.start({'opacity': 0});
	}
}

Popup.init();