var Popup = {
	header : null,
	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');
		
		Popup.header = new Element('div').inject(Popup.container);
		Popup.header.setStyles({
			'margin' : '0px',
			'padding' : '0px',
			'text-align' : 'right',
			'width' : '100%',
			'height' : '15px',
			'overflow' : 'hidden'
		});
		
		var btnClose = new Element('img',{
			'src' : 'images/blank.gif',
			'styles' : {
				'width' : '39px',
				'height' : '19px',
				'cursor' : 'pointer'
			}
		}).inject(Popup.header);
		btnClose.addEvent('click',Popup.hide.bind(Popup));
		
		if (!Browser.Engine.trident4) {
			btnClose.setStyles({
				'background' : 'transparent url(images/close.png) left top no-repeat'
			});
		}	
		else {
			btnClose.setStyles({
				'filter' : 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'images/close.png\',sizingMethod=\'crop\');'
			});
		}
		
		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': .8});
		
		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 - 15  + '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();