function showImg(iItem, thId){
	var aImagesList = eval('a' + iItem + 'ImagesList');
	var aImagesPreviewList = eval('a' + iItem + 'ImagesPreviewList');

	for(var i = 0; i < aImagesList.length; i++){
		if(oDiv = document.getElementById('div_' + aImagesList[i])){
			oThumb = document.getElementById('small_' + aImagesList[i]);
			oPreview = document.getElementById('preview_' + aImagesList[i]);
			if(aImagesList[i] == thId){
				oDiv.style.display = '';
				oThumb.className = 'selected';
				oPreview.src = aImagesPreviewList[i];
			}else{
				oDiv.style.display = 'none';
				oThumb.className = '';
			}
		}
	}
	if(oThumbs){
		checkSelectedPosition(iItem);
		resizeThumbs(iItem);
	}
}

function preloadImg(iItem, iSmallID){
	var aImagesList = eval('a' + iItem + 'ImagesList');
	var aImagesPreviewList = eval('a' + iItem + 'ImagesPreviewList');

	for(var i = 0; i < aImagesList.length; i++){
		if(oPreview = document.getElementById('preview_'  + aImagesList[i])){
			oSmall = document.getElementById('small_'  + aImagesList[i]);
			if(aImagesList[i] == iSmallID && oSmall.className != 'selected'){
				oPreview.src = aImagesPreviewList[i];
			}
		}
	}
}

function showPreview(iThumbId, aIds, sNewSrc){
	var oThumb;
	var oPreview;
	for(var i = 0; i < aIds.length; i++){
		if(oThumb = document.getElementById('ph_thumb' + aIds[i])){
			if(aIds[i] == iThumbId){
				if(oPreview = document.getElementById('ph_preview')){
					oPreview.src = sNewSrc;
				}
				oThumb.className = 'sel';
			}else{
				oThumb.className = '';
			}
		}
	}
}

var bSS = false;
var iScrollTimeout = 1;
var iTimeOut = window.addEventListener ? iScrollTimeout * 2 : iScrollTimeout;
var iScrollKoef = 15;
var iCW, iTW, iTL, iTR, iDiff;
var oContainer = null;
var oThumbs = null;
var oLeftArr = null;
var oRightArr = null;


function initScrollVars(iItem){
	var oObjects = getItemObjects(iItem);

	oContainer = oObjects.oContainer;
	oThumbs = oObjects.oThumbs;
	oLeftArr = oObjects.oLeftArr;
	oRightArr = oObjects.oRightArr;

	iCW = oContainer.offsetWidth;
	iTW = oThumbs.offsetWidth;
	iTL = oThumbs.offsetLeft;
	iDiff = iTW - iCW;
	iTR = -(iTL + iDiff);
}

function scrollInit(aItems){
	oCachedObjects = {};

	for(var i = 0; i < aItems.length; i++){
		var iItem = aItems[i];

		var oObjects = getItemObjects(iItem);

		if(oObjects.oContainer){
			var oContainer = oObjects.oContainer;
			var oThumbs = oObjects.oThumbs;
			var oLeftArr = oObjects.oLeftArr;
			var oRightArr = oObjects.oRightArr;

			if(oContainer.attachEvent){
				oContainer.attachEvent("onmousewheel", mouseScrollThumbs);
			}else{
				oContainer.addEventListener("DOMMouseScroll", mouseScrollThumbs, true);
			}
			if(window.addEventListener){
				window.addEventListener('resize', resizeThumbs, false);
			}else{
				window.attachEvent('onresize', resizeThumbs);
			}

			checkScrollButtons(iItem);
			checkSelectedPosition(iItem);
			resizeThumbs(iItem);
		}
	}
}

function getItemObjects(iItem){
	var oItemObjects = oCachedObjects[iItem];
	if(!oItemObjects){
		var oResult = {};

		oResult.oContainer = document.getElementById('gn_container_' + iItem);
		oResult.oThumbs = document.getElementById('gn_thumbs_' + iItem);
		oResult.oLeftArr = document.getElementById('gn_arr_left_' + iItem);
		oResult.oRightArr = document.getElementById('gn_arr_right_' + iItem);

		oItemObjects = oResult;
	}else{
		oResult = oItemObjects;
	}

	return oResult;
}

function checkSelectedPosition(iItem){
	var aImagesList = eval('a' + iItem + 'ImagesList');
	var oThumbs = getItemObjects(iItem).oThumbs;

	if(oThumbs){
		var i = 0;
		var num = 0;
		oSelThumb = null;
		for (i = 0; i < aImagesList.length; i++){
			if(oThumb = document.getElementById('small_' + aImagesList[i])){
				if(oThumb.className == 'selected'){
					oSelThumb = oThumb;
					num = i;
				}
			}
		}
		iLeft = Math.round(iCW / 2 - (iTW / aImagesList.length) * (num + 1/2));
		iLeft = iLeft + iTW < iCW ? iCW - iTW : iLeft;
		iLeft = iLeft > 0 ? 0 : iLeft;
		oThumbs.style.left = iLeft + 'px';
	}
}

function checkScrollButtons(iItem){
	initScrollVars(iItem);

	if(iDiff > 0){
		bRA = iTR < 0 ? true : false;
		bLA = iTL < 0 ? true : false;
	}else{
		bLA = false; bRA = false;
	}

	oLeftArr.style.visibility = bLA ? '' : 'hidden';
	oRightArr.style.visibility = bRA ? '' : 'hidden';
}

function resizeThumbs(iItem){
	if(iItem == null){
		if(window.event){
			oItem = window.event.srcElement;
		}else{
			oItem = oEvt.target;
		}
		iItem = oItem.id;
	}

	var oThumbs = getItemObjects(iItem).oThumbs;

	if(oThumbs){
		initScrollVars(iItem);

		if(iTL < 0){
			if(iDiff < 0){
				oThumbs.style.left = '0px';
			} else if(iDiff > 0){
				if(iTR >= 0){
					oThumbs.style.left = -iDiff  + 'px';
				}
			}
		}else{
			oThumbs.style.left = '0px';
		}

		checkScrollButtons(iItem);
	}
}

function scrollThumbs(iItem, sSS, sDirection){
	bSS = sSS == 'start' ? true : false;
	iDirection = sDirection == 'left' ? -1 : 1;
	_scroll(iItem, iDirection);
}

function mouseScrollThumbs(oEvt){
	if(!oEvt){
		if(window.event){
			var oEvt = window.event;
		}
	}

	if(window.event){
		var oItem = oEvt.srcElement;
	}else{
		var oItem = oEvt.currentTarget;
	}

	var iItem = getRightEventElement(oItem).id.substring(13);

	if(oEvt.wheelDelta){
		delta = oEvt.wheelDelta / 120;
		if(window.opera) delta = -delta;
	}else if(oEvt.detail){
		delta = -oEvt.detail / 3;
	}

	iDirection = delta > 0 ? -1 : 1;

	_scroll(iItem, iDirection, delta * 5);

	if (oEvt.preventDefault) oEvt.preventDefault();
	oEvt.returnValue = false;

	return false;
}

function getRightEventElement(oNode){
	if(oNode.id.indexOf('gn_container_') == -1){
		var oParentNode = oNode.parentNode;
		if(oParentNode && oParentNode.id.indexOf('gn_container_') > -1){
			return oParentNode;
		}else{
			return getRightEventElement(oParentNode);
		}
	}else{
		return oNode;
	}
}

function _scroll(iItem, iDirection, iKoef){
	var iMultiplier = !isNaN(iKoef) ? Math.abs(iKoef) : 1;
	var iShift = iScrollKoef * iMultiplier * iDirection;

	var oThumbs = getItemObjects(iItem).oThumbs;

	initScrollVars(iItem);

	if(oThumbs && iCW > 0){
		if(iDiff > 0){
			if(iTL > iShift){
				oThumbs.style.left = '0px';
			}else{
				if((iDiff + iTL) < iShift){
					oThumbs.style.left = -iDiff + 'px';
				}else{
					oThumbs.style.left = (iTL - iShift) + 'px';
					if(bSS){
						setTimeout('_scroll(' + iItem + ',' + iDirection + ')', iTimeOut);
					}
				}
			}
		}
	}

	checkScrollButtons(iItem);
}

