Overlay = {
	hide: function() {
		new Effect.Opacity('overlay-blanket', {
			afterFinish: function() { $('overlay-blanket').hide() },
			duration: 0.5,
			from: 0.75,
			to: 0
		});
		new Effect.Opacity('overlay-message', {
			afterFinish: function() { $('overlay-message').hide() },
			duration: 0.8,
			from: 0.95,
			to: 0
		});
	},
	
	init: function() {
		$('overlay-blanket').hide();
		$('overlay-blanket').removeClassName('hide');
		$('overlay-message').hide();
		$('overlay-message').removeClassName('hide');

		document.observe('click', function(e) {
			if($('overlay-message').visible()) {
				if(!Event.findElement(e, '#overlay-content')) {
					Overlay.hide();
				}
			}
		});

		document.observe('keyup', function(e) {
			var keyCode = (e.charCode || e.keyCode || e.which);
			if(keyCode == Event.KEY_ESC) {
				Overlay.hide();
			}
		});

		Overlay.initLinks();
	},

	initLinks: function() {
		$$('a.overlay-link').each(function(el) {
			el.observe('click', function(e) {
				if(Overlay.pop(el.href)) Event.stop(e);
			});
		});
	},

	pop: function(url) {
		return new Ajax.Updater('overlay-content', url, {
			evalScripts: true,
			onComplete: function() {
				Tweetworks.init();
				Overlay.show();
			}
		});
	},

	show: function() {
		if(!$('overlay-blanket').visible()) {
			new Effect.Opacity('overlay-blanket', {
				afterUpdate: function() { $('overlay-blanket').show() },
				duration: 0.5,
				from: 0,
				to :0.75
			});
			new Effect.Opacity('overlay-message', {
				afterUpdate: function() { $('overlay-message').show() },
				duration: 0.8,
				from: 0,
				to: 0.95
			});
		}

		// Expand blanket to cover all below
		var docY = parseInt($(document.body).getHeight());
		if(docY > parseInt($('overlay-message').getHeight())) {
			$('overlay-blanket').setStyle({
				height: docY+'px'
			});
		};
		
		// Move to viewport location
		var top = document.viewport.getScrollOffsets().top;
		$('overlay-message').setStyle({ top: (top) + 'px' });
	},
	
	update: function(html) {
		$('overlay-content').innerHTML = html;
		Overlay.show();
	}
}

document.observe('dom:loaded', Overlay.init);