/****** studiato e realizzato da Massimo Andreotti max@webjoy.it 				******/
/****** copyright 2008-2009, vietato l'utilizzo senza un'autorizzazione scritta	******/

function imgViewer(
	thisObjVarName, 
	photoDir, 
	aLsImg, 
	aLsLabel,
	ext_obj_label,
	N, 
	width1, 
	width2,
	widthBig,
	offsetX, 
	offsetY, 
	tblContainer, 
	divThumbs, 
	containerImgBig, 
	imgBig, 
	fCallBack
)
{
	var o = this;
	var m_ie = (navigator.userAgent.indexOf("MSIE") != -1);

	var aw = new Array()
	aw[0] = new Array(1680,1440,1280,1024);
	aw[1] = new Array(1140,970,860,680);
	var sw = screen.width;
	var i;
	for (i=0; i<aw[0].length; i++) {
		if (aw[0][i] <= sw) {
			widthBig = (widthBig) ? Math.min(aw[1][i], widthBig) : aw[1][i];
			break;
		}
	}
	if (widthBig == 0)
		widthBig = 680;
		
	if (widthBig == 680) {
		width1 *= 0.8;
		width2 *= 0.8;
	}
	
	var m_widthBig;
	var m_heightBig;

// impostazioni visualizzazione img
	var m_timeoutShowImgBig = 15; // n grandi -> ritardo elevato
	var m_bDelayWidth = false;
	var m_bDelayHeight = false;
	var m_startOpacityImgBig = 0; // %
	var m_stepOpacityImgBig  = 5;
	var m_bThumbsSizeDelay = true;
	var m_timeoutThumbsStartOpacity = 1000;
	var m_endThumbsOpacity = 30; // %
	var m_vReduce = 0.66;

	var m_moveYThumbResize = parseInt((width2-width1)/((m_ie) ? 5 : 5));
	if (m_moveYThumbResize==0) m_moveYThumbResize=1;
////

	var m_iCurrImg = 0;
	var m_bLoading = true;

	var m_currBigImg;
	var m_currBigImgWidth;
	var m_currBigImgHeight;
	var m_currBigImgXStep;
	var m_currBigImgYStep;

	o.m_timerLoadImg = -1;
	o.m_timerThumbsOpacity = -1;
	
	// preload gif attesa caricamento
	var img_wait = new Image();
	img_wait.src = "img/wait.gif";
	var obj_wait;
	
	var obj_thumbs;
	var obj_thumb;
	var obj_thumbsAction;
	var btn_hide_show_thumbs;
	
	// preload miniature
	var m_aImgPreload = new Array();
	var t;
	for (t=0;t<aLsImg.length;t++) {
		m_aImgPreload[t] = new Image();
		m_aImgPreload[t].src = photoDir + "/" + aLsImg[t];
	}

	var m_xoffset = ((m_ie) ? offsetX : offsetX + 8);

	var obj_container = document.getElementById(tblContainer);
	
	var img_big = document.getElementById(imgBig);
	img_big.style.display = "none";
	
	var m_bShowBig = false;

	if (aLsImg.length < N)
		N = aLsImg.length;
	var N_ = parseInt(N/2);
	
	var m_imgBg;
	
	function setLabel(i)
	{
		if (ext_obj_label != null) {
			if (aLsLabel != null) {
				ext_obj_label.innerHTML = aLsLabel[i];
				ext_obj_label.style.display = "";
				ext_obj_label.style.width = m_widthBig - 6; // per il padding
			}
			else
				ext_obj_label.style.display = "none";
		}
	}
	
	function setImgSize1()
	{
		// setLabel(m_iCurrImg);
		//if (parseInt(this.style.height) != width1)
			setTimeout(thisObjVarName + ".setImgSize1Delayed('" + this.id + "'," + ((m_bThumbsSizeDelay) ? width2 : width1) + ")", 20);
	}
	
	function setImgSize2()
	{
		// setLabel(this.flag);
		this.style.cursor="pointer";
		this.style.width = width2;
	}
	
	o.setImgSize1Delayed = function setImgSize1Delayed(id, v)
	{
		var obj = document.getElementById(id);
		if (v<width1)
			v = width1;
		else
			setTimeout(thisObjVarName + ".setImgSize1Delayed('" + id + "'," + (v-m_moveYThumbResize) + ")", 20);

		obj.style.width = v;
	}
	
	function setImg(i,dir)
	{
		
		if (this.src) {
			var f = this.flag;
			if (m_iCurrImg == f)
				return;
//			dir = ((f > m_iCurrImg) ? 1 : 2);
			dir = ((this.n > N_) ? 1 : 2);
			m_iCurrImg = f;
		}
		else
			m_iCurrImg = i;
		
		if (aLsImg.length>1)
			document.getElementById("ivTbCountThumbs").innerHTML = 
				"foto <b>" + (m_iCurrImg+1) + "</b> di <b>"+ aLsImg.length + "</b>";	

		m_currBigImg = new Image();
		m_currBigImg.src = photoDir + "/" + widthBig + "/" + aLsImg[m_iCurrImg];
		
		if (!m_currBigImg.complete && obj_wait)
			obj_wait.style.display = "";

		o.setImgBig();
		
		if (aLsImg.length>1)
			setThumbs(dir);
		
		if (fCallBack)
			eval(fCallBack + "(" + m_iCurrImg + ")");
	}

	o.setImgBig = function setImgBig()
	{
		if (o.m_timerLoadImg != -1)
			clearTimeout(o.m_timerLoadImg);
			
		if (m_currBigImg.complete) {
			img_big.src = ((m_bDelayWidth) ? "img/dot_brown.gif" : "img/trasp.gif");
			img_big.className = "ivImgBigBorderStart";
			img_big.style.display = "";
			
			// riduzione percentuale della dimensione delle immagini verticali
			m_widthBig = ((m_currBigImg.src.indexOf("_V.") != -1) ? parseInt(widthBig*m_vReduce) : widthBig);
			
			setLabel(m_iCurrImg);
			
			img_big.style.width = m_currBigImgWidth = ((m_bDelayWidth) ? 1 : m_widthBig);
			m_currBigImgXStep = parseInt(m_widthBig / 20);
			
			obj_container.style.height =
			m_heightBig = parseInt(m_currBigImg.height * m_widthBig / m_currBigImg.width);
			img_big.style.height = m_currBigImgHeight =  ((m_bDelayHeight) ? 2 : m_heightBig);
			m_currBigImgYStep = parseInt(m_heightBig / 4);
			
			if (m_startOpacityImgBig != 100)
				setOpacity(img_big, m_startOpacityImgBig);
			document.getElementById(containerImgBig).style.height = m_heightBig+10;
			
			if (obj_wait)
				obj_wait.style.display = "none";
			
			o.m_timerLoadImg = setTimeout(thisObjVarName + ".setImgBigWidthDelayed()", m_timeoutShowImgBig);
//			o.setImgBigWidthDelayed();
		}
		else
			o.m_timerLoadImg = setTimeout(thisObjVarName + ".setImgBig()", 30);
	}
	
	o.setImgBigWidthDelayed = function setImgBigWidthDelayed()
	{
		m_currBigImgWidth += m_currBigImgXStep;
		if (m_currBigImgWidth < m_widthBig) {
			img_big.style.width = m_currBigImgWidth;
			o.m_timerLoadImg = setTimeout(thisObjVarName + ".setImgBigWidthDelayed()", m_timeoutShowImgBig);
		}
		else {
			img_big.style.width = m_widthBig;
			img_big.src = m_currBigImg.src;
			o.m_timerLoadImg = setTimeout(thisObjVarName + ".setImgBigHeightDelayed()", m_timeoutShowImgBig);
//			o.setImgBigHeightDelayed();
		}
	}

	o.setImgBigHeightDelayed = function setImgBigHeightDelayed()
	{
		m_currBigImgHeight += m_currBigImgYStep;
		if (m_currBigImgHeight < m_heightBig) {
			img_big.style.height = m_currBigImgHeight;
			o.m_timerLoadImg = setTimeout(thisObjVarName + ".setImgBigHeightDelayed()", m_timeoutShowImgBig);
		}
		else {
			img_big.className = "ivImgBigBorderEnd";
			img_big.style.height = m_heightBig;
			o.m_timerLoadImg = setTimeout(thisObjVarName + ".setImgBigOpacity(" + m_startOpacityImgBig + ")", m_timeoutShowImgBig);
//			o.setImgBigOpacity(m_startOpacityImgBig);
		}
	}

	function setOpacity(obj, v)
	{
		if (m_ie)
			obj.style.filter = "alpha (opacity=" + v + ")";	
		else
			obj.style.opacity = v/100;
	}

	o.setImgBigOpacity = function setImgBigOpacity(v)
	{
		var inc = parseInt((100-m_startOpacityImgBig)/m_stepOpacityImgBig);
		if (inc < 1)
			inc = 1;
		v += inc;
		if (v < 100) {
			setOpacity(img_big, v);
			o.m_timerLoadImg = setTimeout(thisObjVarName + ".setImgBigOpacity(" + v + ")", m_timeoutShowImgBig);
		}
		else {
			if (m_startOpacityImgBig != 100)
				setOpacity(img_big, 100);
			o.m_timerLoadImg = -1;

			var bord = 50;
			if (!m_imgBg) {
				m_imgBg = document.createElement("img");
				//setOpacity(m_imgBg, 50);
				m_imgBg.className = "ivImgBigBorderEnd";
				m_imgBg.style.position = "absolute";
				m_imgBg.style.zIndex = -1;
				m_imgBg.style.top  = obj_container.offsetTop + img_big.offsetTop;
				document.body.appendChild(m_imgBg);
			}

			m_imgBg.src = img_big.src;
			m_imgBg.style.width= img_big.style.width;
			m_imgBg.style.height= img_big.style.height;
			m_imgBg.style.left = obj_container.offsetLeft + img_big.offsetLeft;
	
			if (m_bLoading) {
				setThumbsOpacity(2000);
				m_bLoading = false;
			}
		}
	}	
	
	function setThumbsOpacity(n)
	{
		if(aLsImg.length>1)
			o.m_timerThumbsOpacity = setTimeout(thisObjVarName + ".setThumbsOpacityDelayed(100)",((parseInt(n)) ? n : m_timeoutThumbsStartOpacity));
	}

	o.setThumbsOpacityDelayed = function setThumbsOpacityDelayed(v)
	{
		v -= 3;
		if (v > m_endThumbsOpacity) {
			thumbsOpacity(v);
			o.m_timerThumbsOpacity = setTimeout(thisObjVarName + ".setThumbsOpacityDelayed("+v+")",30);
		}
		else
			thumbsOpacity(m_endThumbsOpacity);
	}
	
	o.delThumbsOpacity = function delThumbsOpacity()
	{
		if (o.m_timerThumbsOpacity != -1) clearTimeout(o.m_timerThumbsOpacity);
		thumbsOpacity(100);
	}
	
	function thumbsOpacity(v)
	{
		if (m_ie) {
			var s =  ((v == 100)
				? ""
				: "alpha (opacity=" + v + ")"
			);
			
			obj_thumbsAction.style.filter = s;
			
			if(obj_thumb) {
				var i;
				for (i=0; i<N; i++)
					obj_thumb[i].style.filter = s;
			}
		}
		else
			obj_thumbs.style.opacity = v/100;
	}
	
	// dir: 1 -> direzione dx, 2 -> sx
	function setThumbs(dir)
	{
		if (m_iCurrImg <= N_ && obj_thumb[0].flag == 0 || N == aLsImg.length) {
			setThumbs_();
		}
		else
			setTimeout(thisObjVarName + ".setThumbsDelayed(" + dir + ",100)", 100);
	}
	
	function setThumbs_()
	{
		var i,j;
		var thumb;
		var k = aLsImg.length - 
			(((m_iCurrImg >= N_ || obj_thumb[0].flag != 0) && N != aLsImg.length) 
			? N_
			: m_iCurrImg // no scorrimento
		);
		for (i=0; i<N; i++) {
			thumb = obj_thumb[i];
			j = (m_iCurrImg+i+k) % aLsImg.length;
			thumb.src =  m_aImgPreload[j].src;
			thumb.flag = j;
			thumb.className = ((j == m_iCurrImg) ? "ivThumbSelected" : "ivThumb");
			thumb.style.width = width1;
		}

		o.posThumbs();
	}
	
	o.setThumbsDelayed = function setThumbsDelayed(dir, v)
	{
		var m = ((m_ie) ? 40 : 20);
		v -= m;
		var thumb = obj_thumb[((dir == 1) ? 0 : N-1)];
		var moveY = parseInt(thumb.height) / (100/m);
		var i;
		if (v > 0) {
			if (dir == 1) {
				for (i=1; i<N; i++)
					obj_thumb[i].style.top = parseInt(obj_thumb[i].style.top) - moveY;
			}
			else if (dir == 2) {
				for (i=0; i<N-1; i++)
					obj_thumb[i].style.top = parseInt(obj_thumb[i].style.top) + moveY;
			}
				
			// setOpacity(thumb, 0);
			thumb.style.visibility = "hidden";
			setTimeout(thisObjVarName + ".setThumbsDelayed(" + dir + "," + v + ")", 100);
		}
		else {
			// setOpacity(thumb, 100);
			thumb.style.visibility = "visible";
			setThumbs_()
		}
	}
	
	o.prevImg = function prevImg()
	{
		m_iCurrImg = (--m_iCurrImg + aLsImg.length) % aLsImg.length;
		setImg(m_iCurrImg, 2);
		this.blur();
	}

	o.nextImg = function nextImg()
	{
		m_iCurrImg = ++m_iCurrImg % aLsImg.length;
		setImg(m_iCurrImg, 1);
		this.blur();
	}

	loadThumbs = function loadThumbs()
	{
		var i;
		var s = "";
		
		// barra thumbs action
		s += "<table id='ivTblThumbsAction' border=0 cellpadding=0 cellspacing=0><tr style='height:17px'><td class=ivNull>&nbsp;</td>" +
			 "<td style='width:21px' class=ivLink valign=top align=right id='ivPrevImg' nowrap><img width=21 height=17 src='img/left_.gif' border=0></td>" +
			 "<td style='width:" + (width1-40) + "px' class=ivCount align=center id='ivTbCountThumbs' nowrap></td>" +
			 "<td style='width:21px' class=ivLink valign=top align=left id='ivNextImg' nowrap><img width=21 height=17 src='img/right_.gif' border=0></td>" +
			 "<td class=ivNull>&nbsp;</td></tr></table>"; 
			 
		// thumbs
		for (i=0; i<N; i++)
			s += "<img style='z-index:"+(N-i)+";position:absolute;width:" + width1 + "px;' id='ivThumb" + i + "'>";

		obj_thumbs = document.getElementById(divThumbs);
		obj_thumbs.style.top =  obj_container.offsetTop + offsetY;
		m_xoffset = offsetX; // per reload firefox

		obj_thumbs.innerHTML = aLsImg.length>1 ? s : "";
		
		if (m_ie)
			obj_thumbs.innerHTML += "<div id='ivDivWait'></div>";
		else {
			var divWait = document.createElement("div");
			divWait.id = "ivDivWait";
			obj_container.appendChild(divWait);
		}

		obj_wait = document.getElementById("ivDivWait");
		obj_wait.style.position = "absolute";
		obj_wait.innerHTML = "<img src='" + img_wait.src  + "'>";
		obj_wait.style.left = parseInt(obj_container.offsetLeft + obj_container.offsetWidth/2 -18);
		obj_wait.style.top  = parseInt(obj_container.offsetTop + 100);
		
		if (aLsImg.length>1) {
			obj_thumbs.onmouseover = o.delThumbsOpacity;
			obj_thumbs.onmouseout  = setThumbsOpacity;
			obj_thumbs.style.left = m_xoffset;
	
			obj_thumbsAction = document.getElementById("ivTblThumbsAction");
	
			// elimina la trasparenza
			thumbsOpacity(100);
	
			var prev_img = document.getElementById('ivPrevImg');
			prev_img.onclick = o.prevImg;
	
			var next_img = document.getElementById('ivNextImg');
			next_img.onclick = o.nextImg;
	
			obj_thumb = new Array();
			for (i=0; i<N; i++) {
				obj_thumb[i] = document.getElementById("ivThumb" + i);
				obj_thumb[i].onmouseout  = setImgSize1;
				obj_thumb[i].onmouseover = setImgSize2;
				obj_thumb[i].flag = i;
				obj_thumb[i].n = i;
				obj_thumb[i].onclick = setImg;
			}
	
			o.posThumbs();
		}
		setImg(0);

//		setTimeout(thisObjVarName + ".posThumbs()", 50);
	}
	

////////////// metodi per cambiare i valori di default
	o.setThumbsDelay = function setThumbsDelay()
	{
		m_bThumbsSizeDelay = !m_bThumbsSizeDelay;
		loadThumbs();
	}

	o.setThumbsWidth = function setThumbsWidth(v1,v2,n)
	{
		width1 = v1;
		width2 = v2;
		N = n;		
		loadThumbs();
	}
	o.setVReduce = function(v)
	{
		m_vReduce = v;	
	}
///////////////

	o.posThumbs = function posThumbs()
	{
		hiddenThumbs(true);
		
		var fromTop = obj_thumbsAction.offsetHeight + 4;
		var thumb, h, w, hTot;
		var i;
		obj_thumb[0].style.top  = fromTop;
		for (i=0, hTot=fromTop; i<N; i++) {

			thumb = obj_thumb[i];
			thumb.style.left = 0;
		
			if(thumb.flag == -1)
				continue;

			if (m_aImgPreload[(m_iCurrImg+i)%N].complete) {

				h = ((thumb.width == width1) ? thumb.height : parseInt(thumb.width / thumb.height * width1));
				hTot += h + 6;
				
				if (i == N-1)
					break;

				obj_thumb[i+1].style.top = hTot;
			}
			else {
				setTimeout(thisObjVarName + ".posThumbs()", 50);
				return;	
			}
		}

		hiddenThumbs(false);
	}
	
	function hiddenThumbs(b)
	{	
		var i, v = ((b) ? "hidden" : "visible");
		obj_thumbsAction.style.visibility = v;
		for (i=0; i<N; i++)
			obj_thumb[i].style.visibility = v;
	}
	
	function OnResize_Window()
	{
		if (m_imgBg)
			m_imgBg.style.left = obj_container.offsetLeft + img_big.offsetLeft;
	}
	
	
	o.getCurrIndex = function getCurrIndex()
	{
		return m_iCurrImg;
	}

	if (aLsImg.length>1){
		img_big.style.cursor = "pointer";
		img_big.onclick = o.nextImg;
	}
	if (m_ie)
		window.attachEvent("onresize", OnResize_Window);
	else
		window.addEventListener("resize", OnResize_Window, false);
	
	loadThumbs();
}