function showImagePreview(source, title, width, height) {
	if ( title === undefined ) {
		title = '';
	} else {
		title = '<div id="previewTitle">'+title+'</div>';
	}
	$('body').prepend('<div id="previewOverlay"><div id="previewWindow"><img src="images/sitewide/closebox.png" id="closebox" /><img src="'+source+'" id="previewPic"  width="'+width+'" height="'+height+'" />'+title+'</div></div>');

	var loadimg = new Image();
	loadimg.src = 'images/sitewide/loader/gray-on-white.gif';
	var img = new Image();
	img.src = source;

	$('#previewWindow').css({
		'width': '0px',
		'height': '0px'
	});

	$('#previewWindow, #previewPic, #previewOverlay, #previewTitle, #closebox').hide();
	$('#previewWindow').center();
	$('#previewOverlay, #previewWindow').fadeIn(300);

	$("#previewPic").load(function (){
		if ($("#previewPic").height() >= ($(window).height() - 150) || $("#previewPic").width() >= ($(window).width() - 150)) {
			newsizes = getAspectSize($("#previewPic").height(), $("#previewPic").width(), ($(window).height() - 150), ($(window).width() - 150));
		} else {
			newsizes = [$('#previewPic').width(), $('#previewPic').height()];
		}

		$('#previewPic').css({
			'width': newsizes[0]+'px',
			'height': newsizes[1]+'px'
		});

		$('#previewWindow').css({
			'background-image': 'none'
		});

		$('#previewWindow').animate({
			'width': newsizes[0]+'px',
			'height': newsizes[1]+'px',
			'margin-left': '-'+(newsizes[0]/2)+'px',
			'margin-top': '-'+(newsizes[1]/2)+'px',
		}, 200, function() {
			$('#previewPic, #previewTitle, #closebox').fadeIn('medium');
			$('#previewWindow').center();
		});

		$(document).keydown(function(e) {
			if( e.which == 27) {  // escape, close box 
				$('#previewOverlay').fadeOut('fast', function() {
					$('#previewOverlay').html('').remove();
				});
			} 
		}); 

		$('#previewOverlay').click(function() {
			$('#previewOverlay').fadeOut('fast', function() {
				$('#previewOverlay').html('').remove();
			});
		});
	});
}

function getAspectSize(curH, curW, boxH, boxW) {
	if (curW/curH < boxW/boxH) {
		var newW = (curW / curH) * boxH;
		var newH = boxH;
	} else {
		var newH = (curH / curW) * boxW
		var newW = boxW;
	}

	newsizes = [newW, newH];
	return newsizes;
}
