
var Overlay = {
	
	opacity: 70,
	width: 400,
	element: null,
	visible: false,
	background: '#000000',
	hideSelect: true,
	_zIndex: 3003,
	_id: 'overlay',
	
	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'
			};
			
			Overlay._id = id;

			// 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);
			
			var twidth = Overlay._calcWidth();
			if (twidth > 0) {
				$('#' + Overlay._id).css({ width: twidth + 'px' });
			}
			
			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();
		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;},
	
	// calculate the width of inner div 
	// this is to overcome an issue with ie where it sets the inner div to 100%
	// block the opacity area click to close
	_calcWidth: function() {
		
		var twidth = parseInt($('#' + Overlay._id).find('div:first').css('width'));
		var theight = parseInt($('#' + Overlay._id).find('div:first').height());
		var tpaddingleft = parseInt($('#' + Overlay._id).find('div:first').css('padding-left'));
		var tpaddingright = parseInt($('#' + Overlay._id).find('div:first').css('padding-right'));
		var twidthleft = parseInt($('#' + Overlay._id).find('div:first').css('width-left'));
		var twidthright = parseInt($('#' + Overlay._id).find('div:first').css('width-right'));
		var tborder = parseInt($('#' + Overlay._id).find('div:first').css('border-width'));
		
		var toffset = 0;
		
		if (!isNaN(twidth)) { toffset += twidth }
		if (!isNaN(tpaddingleft)) { toffset += tpaddingleft }
		if (!isNaN(tpaddingright)) { toffset += tpaddingright }
		if (!isNaN(twidthleft)) { toffset += twidthleft }
		if (!isNaN(twidthright)) { toffset += twidthright }
		if (!isNaN(tborder)) { toffset += (tborder*2) }

		return toffset;
	}
	
};


