function PhotoGallery03(listHolderId, overlayId, bigImageHolderId)
{
	var listHolder;
	var photoList;
	var overlay = document.getElementById(overlayId);
	var bigImageHolder = document.getElementById(bigImageHolderId);
	var bigImageCont;
	var int1;
	var curOverlayAlpha;
	var curImageAlpha;
	var imageHolder;
	var testIMG;
	var curSRC;
	var fps = 30;
	var curTestTime;
	var curDelay = 0;
	var easyMode = false;
	var titleTag;
	var prevLink;
	var prev;
	var nextLink;
	var next;
	var w;
	var h;
	var imageW;
	var imageH;
	var marginHor = 50;
	var paddingHor = 20;
	var paddingBttm = 20;
	var topPanelHeight = 86;
	var maxW = 840;
	var maxH = 600+20+86;

	listHolder = document.getElementById(listHolderId);
	if(listHolder == null)
	{
		return false;
	}
	
	init();
	
	function init()
	{
		var i;
		var closeBtn;
		imageHolder = getElementsByClass(bigImageHolder, "PGImageHolder")[0];
		bigImageCont = getElementsByClass(bigImageHolder, "PGBigImageContent")[0];
		closeBtn = getElementsByClass(bigImageHolder, "Close")[0];
		titleTag = getElementsByClass(bigImageHolder, "Title")[0];
		prevLink = getElementsByClass(bigImageHolder, "Prev")[0];
		nextLink = getElementsByClass(bigImageHolder, "Next")[0];
		closeBtn.onclick = _closeClickHandler;
		prevLink.onclick = _prevClickHandler;
		nextLink.onclick = _nextClickHandler;
		photoList = getElementsByAttr(listHolder, "rel", "lnk");
		
		for(i = 0; i<photoList.length; i++)
		{
			photoList[i].prev = null;
			if(i>0)
			{
				photoList[i].prev = photoList[Number(i-1)];
			}
			photoList[i].onclick = _itemClickHandler;
			photoList[i].next = null;
			if(i<photoList.length-1)
			{
				photoList[i].next = photoList[Number(i+1)];
			}
		}
		
	}
	function _itemClickHandler(obj)
	{	
		var ths;
		var date;
		var title;
		var overlayHeight = (window.scrollMaxY+window.innerHeight) || document.body.scrollHeight;
		var sels;
		sels = getElementsByAttr(document, "tagName", "SELECT");
		for(i in sels)
		{
			sels[i].style.visibility = "hidden";
		}
		ths = this;
		if(obj === "prev")
		{
			easyMode = true;
			ths = prev;
		}
		if(obj === "next")
		{
			easyMode = true;
			ths = next;
		}
		prev = ths.prev;
		next = ths.next;
		prevLink.className = "";
		prevLink.onclick = _prevClickHandler;
		if(prev === null)
		{
			prevLink.className = "Passive";
			prevLink.onclick = function (){return false};
		}
		nextLink.className = "";
		nextLink.onclick = _nextClickHandler;
		if(next === null)
		{
			nextLink.className = "Passive";
			nextLink.onclick = function (){return false};
		}
		if((next === null) && (prev === null))
		{
			prevLink.parentNode.style.display = "none";
		}
		title = getElementsByTagName(ths, "IMG")[0].alt;
		titleTag.innerHTML = title;
		overlay.style.display = "block";
		overlay.style.height = overlayHeight+"px";
		curOverlayAlpha = 0;
		calcSize();
		testIMG = new Image();
		testIMG.onload = _bigImageLoadHandler;
		curSRC = "/thumbnails/w"+imageW+"h"+imageH+ths.rev;
		date = new Date();
		curTestTime = date.getTime();
		showOverlay();
		if(!easyMode)
		{
			int1 = setInterval(showOverlay, fps);
		}
		return false;
	}
	function showOverlay()
	{
		var val;
		var date;
		if(easyMode)
		{
			clearInterval(int1);
			testIMG.src = curSRC;
			showBigImageHolder();
			return false;
		}
		date = new Date();
		curDelay = date.getTime()-curTestTime;
		if(curDelay>60)
		{
			easyMode = true;
		}
		curTestTime = date.getTime();
		curOverlayAlpha += 0.25;
		
		if(curOverlayAlpha > 0.8)
		{
			clearInterval(int1);
			testIMG.src = curSRC;
			showBigImageHolder();
			return false;
		}
		
		setOpacity(overlay, curOverlayAlpha);
	}
	function calcSize()
	{
		if(window.innerWidth){
			width = window.innerWidth;
			height = window.innerHeight;
		} else if(document.body && document.body.clientWidth){
			width = document.body.clientWidth;
			height = document.documentElement.clientHeight;
		}
		w = width-marginHor*2;
		if(w>maxW)
		{
			w = maxW;
		}
		h = height-100;
		if(h>maxH)
		{
			h = maxH;
		}
		imageW = w-paddingHor*2;
		imageH = h-topPanelHeight-paddingBttm;
		
		
	}
	function showBigImageHolder()
	{
		var scrollY = window.scrollY || document.documentElement.scrollTop;
		var topPos;
		var bigImageTable = getElementsByClass(bigImageHolder, "PGImageTable")[0];
		bigImageCont.style.width = w+"px";
		bigImageCont.style.height = h+"px";
		imageHolder.style.width = imageW+"px";
		imageHolder.style.height = imageH+"px";
		bigImageTable.style.height = imageH+"px";
		bigImageHolder.style.display = "block";
		topPos = height/2 - bigImageHolder.scrollHeight/2;
		topPos += scrollY;
		if(topPos<0)
		{
			topPos = 0;
		}
		
		bigImageHolder.style.top = topPos+"px";
	}
	function _bigImageLoadHandler()
	{
		imageHolder.appendChild(testIMG);
		setOpacity(testIMG, 0);
		curImageAlpha = 0;
		int1 = setInterval(showImage, fps);
	}
	function showImage()
	{
		var val;
		curImageAlpha += 0.25;
		if(curImageAlpha > 1)
		{
			clearInterval(int1);
			curImageAlpha = 1;
		}
		setOpacity(testIMG, curImageAlpha);
	}
	function _closeClickHandler()
	{
		var sels;
		sels = getElementsByAttr(document, "tagName", "SELECT");
		for(i in sels)
		{
			sels[i].style.visibility = "visible";
		}
		clearInterval(int1);
		overlay.style.display = "none";
		bigImageHolder.style.display = "none";
		imageHolder.innerHTML = "";
	}
	function _prevClickHandler()
	{
		imageHolder.innerHTML = "";
		_itemClickHandler("prev");
		return false;
	}
	function _nextClickHandler()
	{
		imageHolder.innerHTML = "";
		_itemClickHandler("next");
		return false;
	}
}
