Немного разобрался, но до конца не могу понять, подскажите пожалуйста.
Упростил код, всё работает, но:
1. одна и та же картинка два раза подряд не открывается.
2. курсор мыши при наводе на превью изображения на странице не меняется.
<html>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<head>
<script type="text/javascript" src="/js/jquery.js"></script>
</head>
<body>
<div id="imgroll"></div>
<script type="text/javascript">
$(document).ready(function(){
$('#imgroll').append('<div><img class="tumb" src="\/img\/preview\/img_0_s.jpg" onclick="$.imagepreload(\'\/img\/preview\/img_0.jpg\')" border="0" \/><\/div>')
$('#imgroll').append('<div><img class="tumb" src="\/img\/preview\/img_1_s.jpg" onclick="$.imagepreload(\'\/img\/preview\/img_1.jpg\')" border="0" \/><\/div>')
$('#imgroll').append('<div><img class="tumb" src="\/img\/preview\/img_2_s.jpg" onclick="$.imagepreload(\'\/img\/preview\/img_2.jpg\')" border="0" \/><\/div>')
$('.tumb').hover(function(){ $(this).stop().animate({ opacity : '1' }, 200) }, function(){ $(this).stop().animate({ opacity : '.7' }, 200) }).stop().animate({ opacity : '.7' }, 0)
$('body').append('<div id="imgloader"><\/div>')
$('#preview img').css('cursor','pointer')
$('body').append('<div id="backgroundloader"><\/div>')
$('#imgloader').css({
'position':'absolute',
'display':'none',
'z-index': 1000,
'cursor' : 'pointer',
}).append('<img />')
$.imagepreload = function(src){
$('#imgloader').hide(function(){
$('#imgloader img').load(function(){
$('#backgroundloader').css({
'width' : '100%',
'height' : $('body').outerHeight(),
'position' : 'absolute',
'top' : '0',
'left' : '0',
'opacity' : '.8',
'background' : '#000',
'z-index' : '0',
})
$('#imgloader').css({
"top" : Math.max(0, (($(window).height() - $('#imgloader').outerHeight())/2) + $(window).scrollTop()) + "px",
"left" : Math.max(0, (($(window).width() - $('#imgloader').outerWidth()) / 2) + $(window).scrollLeft()) + "px",
})
$(document).mousedown(function(){
$('#imgloader').fadeOut('fast')
$('#backgroundloader').hide()
})
$(document).keydown(function(e){
if(e.which==27) {
$('#imgloader').fadeOut('fast')
$('#backgroundloader').hide()
}
})
$('#backgroundloader').show()
$('#imgloader').fadeIn('fast')
}).attr('src', src)
})
}
})
</script>
</body>
</html>