
var Overlay = {
	
	opacity: 70,
	width: 400,
	element: null,
	visible: false,
	_zIndex: 3000,
	
	setStyle: function(id) {
		if (!Overlay.element) {

			var height = Math.max(Overlay._doc().clientHeight, 
				Overlay._doc().scrollHeight);

			var css = {
				width: '100%', height: (height + 10) + 'px',
				top: '0px', left: '0px', bottom: '0px', zIndex: Overlay._zIndex,
				padding: '0px', margin: '0px', marginTop: '-10px'
			};

			// construct overlay elements
			Overlay.element = String(Math.random()).replace('.', '');
			$('body').append('<div id="' + Overlay.element + 
				'"><div></div><div id="' + id + '"></div></div>');
			Overlay.element = $('#' + Overlay.element);
				
			// container css
			Overlay.element.css($.extend({}, css, {
				position: 'absolute', display: 'none'
			}));

			// overlay css
			$(Overlay.element.find('div')[0]).css($.extend({}, css, {
				filter: 'alpha(opacity=' + Overlay.opacity + ')',
				opacity: '.' + Overlay.opacity, background: '#000',
				position: 'absolute'
			}));
			
			// content css
			$(Overlay.element.find('div')[1]).css({
				display: 'none', position: 'absolute',
				zIndex: Overlay._zIndex + 1, 
				width: Overlay.width + isNaN(Overlay.width) ? '' : 'px'
			});
			
			// add close click to entire overlay
			$(Overlay.element.find('div')[0]).click(Overlay.hide);
			
		
		}
	},
	
	// returns correct doc object to use
	_doc: function() {
		var doc = document.documentElement;
		if (!doc) {doc = document.body};
		return doc;
	},
	
	// returns the content div
	_content: function() {
		return $(Overlay.element.find('div')[1]);
	},
	
	// shows the overlay using text as the content
	show: function(text, callback) {
		if (Overlay.element) {
			
			var content = Overlay._content();
			Overlay.visible = true;
			content.css({display: 'none'}).html(text);
			
			$('select').css({visibility: 'hidden'});

			Overlay.element.fadeIn('slow', function() {
				content.css({
					left: (Overlay.element.width() - content.width()) / 2, 
					top: ($.browser.safari ? 0 : Overlay._doc().scrollTop) + 
						((Overlay._doc().clientHeight - content.height()) / 2),
					display: 'block'
				});
				if (callback) {
					callback();
				}
			});
			
		}
		return false;
	},
	
	// hides the overlay
	hide: function() {
		Overlay.visible = false;
		Overlay.element.fadeOut('fast');
		$('select').css({visibility: 'visible'});
		Overlay.onHide();
		return false;
	},
	
	// loads a url into the overlay and shows it
	get: function(url, callback) {
		$.get(url, function(data) {
			Overlay.show(data.split('<body>')[1].split('</body>')[0], callback);
		});
	},
	
	// overridable handler for overlay close event
	onHide: function() {return false;}
	
};

