
var Overlay = {
	
	opacity: 70,
	width: 400,
	element: null,
	visible: false,
	background: '#000000',
	hideSelect: true,
	_zIndex: 9999,
	
	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, {
				opacity: '.' + Overlay.opacity, background: Overlay.background,
				position: 'absolute', filter: 'alpha(opacity=' + Overlay.opacity + ')', cursor: 'pointer' 
			}));
			
			// content css
			$(Overlay.element.find('div')[1]).css({
				display: 'none', position: 'absolute',
				zIndex: Overlay._zIndex + 1, 
				//width: Overlay.width + isNaN(Overlay.width) ? '' : 'px'
				width: 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, width) {
		
		if (Overlay.element) {
			
			if (typeof width != 'undefined') {
				Overlay.width = width;
			}
			
			$(Overlay.element.find('div')[1]).css({width: Overlay.width + 
				/*isNaN(Overlay.width) ? '' :*/ 'px'});
			
			var content = Overlay._content();
			Overlay.visible = true;
			content.css({display: 'none'}).html(text);
			
			if (Overlay.hideSelect) {
				$('select').css({visibility: 'hidden'});
			}

			Overlay.element.fadeIn('slow', function() {
				content.css({
					left: (Overlay.element.width() - content.width()) / 2, 
					top: ($.browser.safari ? window.pageYOffset : 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');
		if (Overlay.hideSelect) {
			$('select').css({visibility: 'visible'});
		}
		Overlay.onHide();
		Overlay.element.remove();
		Overlay.element = null;
		return false;
	},
	
	// loads a url into the overlay and shows it
	get: function(url, callback) {
		$.get(url, function(data) {
			data = data.split('<body')[1].split('>');
			data.shift();
			data = data.join('>');
			data = data.split('</body>')[0];
			Overlay.show(data, callback);
			
			$('.close').click(Overlay.hide);
		});
	},
	
	// overridable handler for overlay close event
	onHide: function() {return false;}
	
};


