function ShowModalOverlay(overlay_container, overlay_html, options)
{
	// Overlay query.
	var overlay_query = "#" + $(overlay_html).attr("id");

	// Don't show if it already exists.
	if ($(overlay_query).length)
	{
		return false;
	}

	// Append overlay html to its container.
	overlay_container.append(overlay_html);
	
	// Overlay.
	var overlay = $(overlay_query);
	
	// Mask id. There can be only one mask at a time.
	var mask_id = "prosper_overlay_mask";
	
	// Default options.
	var default_options = {
		load: true,
		closeOnClick: true,
		closeOnEsc: true,
		close: '.close',
		top: '20%',
		//speed: 0,
		
		onBeforeLoad: function(e) {
			if ($.browser.msie && $.browser.version < 8)
			{
				return;
			}
			
			// Give this overlay a z-index higher than the mask.
			overlay.css("z-index",9999);
			
			// Create and show mask if it doesn't yet exist.
			if ($.mask.getMask() === undefined)
			{
				$(document).mask({
					maskId: mask_id,
					color: '#ebecff',
					loadSpeed: 200,
					opacity: 0.8,
					closeOnEsc: false,
					onBeforeClose: function() {

						// Get shown overlays.
						var overlays = this.getMask().data("overlays");

						// Close oldest overlay.
						var oldest_overlay = overlays.shift();
						oldest_overlay.fadeOut(200, function() {
							$(this).remove();
						});

						// If there are still overlays shown, don't close the mask.
						if (overlays.length > 0)
						{
							return false;
						}
					}
				});

				// Store shown overlays in mask's data.
				$.mask.getMask().data("overlays", []);
			}
			// Just show it if it already exists and it is not yet shown.
			else if ($.mask.getMask().data("overlays").length == 0)
			{
				$.mask.load();
			}
			
			// Add the latest overlay to the list of shown overlays.
			$.mask.getMask().data("overlays").push(overlay);
		},
		
		onClose: function(e) {
			$.mask.close();
			
			if ($.browser.msie && $.browser.version < 8)
			{
				this.getOverlay().fadeOut(200, function() {
					$(this).remove();
				});
			}
		}
	};
	
	// Combine default options and given options. Given options override default options.
	options = $.extend(default_options, options);
	
	// Create and show overlay.
	overlay.overlay(options);
}

function ShowFadingOverlay(overlay_html)
{
	if ($("#fading_overlay_wrapper").length == 0)
	{
		var fading_overlay_wrapper = "<div id='fading_overlay_wrapper'></div>";
		$(fading_overlay_wrapper).appendTo("body").css({
			position: "fixed",
			width: "100%",
			top: "0px",
			left: "0px"
		});
	}
	$(overlay_html).hide().appendTo("#fading_overlay_wrapper").fadeIn().delay(2000).slideUp().fadeOut(function () {
		$(this).remove();
	});
}

