var gal = 0;
var pic = 0;
var gcat, gtitle, gdir;
var shownPic = 0;
var imgCount = 0;
var pics = new Array();
var op1;
var fader, shower, changer;
var loaderPauser;
var flipping = false;
var showing = false;
var fadeStep = 25;
var fadeDelay = 50;
var showDelay = 4000;
var nextImg = new Image();
var startSlide = -1;
var buf1, buf2, viewer, loader;
var firstLoaded = false;

function logtext(txt){
	current = document.getElementById('logger').innerHTML;
	document.getElementById('logger').innerHTML=txt+current;
}

function restoreState() {
	
	
	h = window.location.hash;
	h = h.substring(1);
	
	gal = parseInt(ggal);
	
	if (isNaN(gal)) {
		document.location.href="index.php";
		return;
	}
	
	pic = parseInt(h);
	galok = false;
	for (var i in gals) {
		if (gals[i][0]==gal) {
			gtitle = gals[i][2];
			imgCount  = gals[i][4];
			gdir = gals[i][5];
			gcat = gals[i][1];
			sc = gals[i][6];
			galok = true;
			break;	
		}
	}
	
	if (!galok) {
		document.location.href="index.php";
		return;
	}
	
	
	maxcol = getCol(imgCount-1)-1;
	if (maxcol<0) {
		maxcol = 0;
	}
	if (isNaN(pic) || pic > (imgCount-1)) {
		pic = 0;
	}
	document.getElementById('galTitle').innerHTML=gtitle;

	if (sc!='port') {
		scFragment ='_'+sc;
		document.getElementById('catlink').innerHTML=cats[gcat-1][0]+' '+sc;
	} else {
		scFragment = '';
		document.getElementById('catlink').innerHTML=cats[gcat-1][0];
	}
	
	document.getElementById('catlink').setAttribute('href','index.php#'+catnames[gcat]+scFragment);
	
	buf1 = document.getElementById('buffer1');
	buf2 = document.getElementById('buffer2');
	
	viewer = buf1;
	loader = buf2;	
	
	makeThumbs();
	goPic(pic);
	
	document.onkeyup = handleArrowKeys;
	
	if (window.addEventListener)
        window.addEventListener('DOMMouseScroll', handleWheel, false);
	window.onmousewheel = document.onmousewheel = handleWheel;
}

function handleWheel(event){
	var delta = 0;
	if (!event) /* For IE. */
		event = window.event;
	if (event.wheelDelta) { /* IE/Opera. */
		delta = event.wheelDelta/120;
	/** In Opera 9, delta differs in sign as compared to IE.
	 */
		if (window.opera)
			delta = -delta;
	} else if (event.detail) { /** Mozilla case. */
	/** In Mozilla, sign of delta is different than in IE.
	 * Also, delta is multiple of 3.
	 */
		delta = -event.detail/3;
	}
	/** If delta is nonzero, handle it.
	 * Basically, delta is now positive if wheel was scrolled up,
	 * and negative, if wheel was scrolled down.
	 */
	if (delta) {
		if (delta<0) {
			nextPic();
		} else {
			prevPic();
		}	
	}
	   
	/** Prevent default actions caused by mouse wheel.
	 * That might be ugly, but we handle scrolls somehow
	 * anyway, so don't bother here..
	 */
	if (event.preventDefault)
		event.preventDefault();
	event.returnValue = false;
}


function handleArrowKeys(event) {
	//evt = (evt) ? evt : ((window.event) ? event : null);
    
	if (!event) /* For IE. */
		event = window.event;
	
	if (event && (event.keyCode==37 || event.keyCode==32 || event.keyCode==39 || event.keyCode==34 || event.keyCode==33 || event.keyCode==35 || event.keyCode==36)) {
		switch (event.keyCode) {
		    case 37:
		        prevPic();
		        break;  
		    case 32:
		        nextPic();
		        break; 
			case 39:
		        nextPic();
		        break;
			case 34:
				goRight(1);
				break;
			case 33:
				goLeft(1);
				break;
			case 35:
				if (showing) {
					slideShow();
				}
				goPic(imgCount-1);
				break;
			case 36:
				if (showing) {
					slideShow();
				}				
				goPic(0);
				break;									   
		 }
		if (event.preventDefault)
			event.preventDefault();
		event.returnValue = false;	 
    }
}


function makeThumbs() {
	thumbTable = "<table width='1' cellspacing='6' cellpadding='0' border='0'";
	curImg = 0;
	for (i in images) {
		if (images[i][0]==gal) {
			otherpath = (typeof(images[i][3])=='undefined')?'':images[i][3];
			pics[curImg] = new Array (images[i][1], images[i][2], otherpath);
			curImg++;
		}
	}
	
	ttrows = (imgCount<8)?imgCount:8;
	ttcols = Math.floor(imgCount / 8)+1;
	if (ttcols==0) {
		ttcols = 1;
	}
	//alert(imgCount+":"+ttrows+":"+ttcols);
	for (i=0; i<ttrows; i++) {
		thumbTable += "<tr>";
		for (j=0; j<ttcols; j++) {
			imgPos = j*8 + i;
			//alert(i+":"+j+":"+imgPos);
			//alert(pics[imgPos][0]);
			if (imgPos < imgCount) {
				picpath = (pics[imgPos][2]!='')?pics[imgPos][2]:gdir;
				thumbTable += "<td id='tmb"+imgPos+"' class='preLink' onclick='stopShow();goPic("+imgPos+")' onmouseover='hilite3("+imgPos+")' onmouseout='lolite3("+imgPos+")'>";
				thumbTable += "<img src='images/"+picpath+"/thumbs/"+pics[imgPos][0]+"' border='0'/></td>";
			} else {
				thumbTable += "<td></td>";	
			}
		}
		thumbTable += "</tr>";
	}
	thumbTable += "<tr>";
	for (j=0; j<ttcols; j++) {
		thumbTable += "<td><img src='img/shim.gif' width='77'/></td>"		
	}
	thumbTable += "</tr>";
	//alert(thumbTable); 
	thumbTable += "</table>"
	document.getElementById('tcols').innerHTML = thumbTable;
}

function goPic(newpic) {
	if (flipping) {
		return;
	}
	logtext("gopic:"+newpic+"<br>");
	clearTimeout(changer);
	
	document.getElementById('tmb'+pic).className='preLink';
	piccol = getCol(newpic);
	if (piccol!=col && piccol!=(col+1)) {
		goColumn(piccol);
	}
	doColLinks();
	pic = newpic;
	document.getElementById('tmb'+newpic).className='preLinkActive';
	changer = setTimeout("changePic("+newpic+")", 200);
}

function changePic(newpic) {
	if (flipping) {
		return;
	}
	shownPic = newpic;
	logtext("changepic:"+newpic+"<br>");

	loaderPauser = setTimeout("showLoader()",50);
	firstLoaded = true;
	
	//check if that picture is already there (for Opera)
	// TODO: fix for pic from other dir
	curSrc = loader.getAttribute("src");
	npos = curSrc.lastIndexOf("/");
	fname = curSrc.substr(npos+1);
	logtext(fname+":"+pics[newpic][0]+"<br>");
	
	picpath = (pics[newpic][2]!='')?pics[newpic][2]:gdir;
	
	if (fname==pics[newpic][0]) {
		loadComplete();
	} else {
		loader.setAttribute("src",'images/'+picpath+'/'+pics[newpic][0]);
	}
}

function imgLoaded(limg) {
	logtext("loaded1: "+limg.src + "<br>");
	if (!firstLoaded) {
		return;
	}
	if (limg == loader) {
		logtext("loaded2: "+limg.src + "<br>");
		loadComplete();
	}
}


function loadComplete() {
	flipping=true;
	op1 = 100;
	clearTimeout(loaderPauser);
	hideLoader();
	logtext("loaded3: "+loader.src + "<br>");
	logtext("complete: "+loader.complete + "<br>");
	logtext("setting up fadeout<br/>");
	fader = setInterval("fadeOut()", fadeDelay);
}


function fadeOut() {
	if (op1 > 0) {
		op1 -= fadeStep;
		setOpacity(viewer, op1);
	} else {
		clearInterval(fader);			
		viewer.style.display="none";
		op1 = 0;
		setOpacity(loader, op1);
		loader.style.display="block";
		logtext("setting up fadein<br/>");
		fader = setInterval("fadeIn()", fadeDelay);
	}
}

function fadeIn() {
	if (op1 < 100) {
		op1 += fadeStep;
		setOpacity(loader, op1);
	} else {
		clearInterval(fader);
		
		if (loader==buf1) {
			loader = buf2;
			viewer = buf1;
		} else {
			loader = buf1;
			viewer = buf2;
		}
		if (shownPic != pic) {
			//document.getElementById('caption').innerHTML="Sp: " + shownPic + ", P: " + pic;
			document.getElementById('tmb'+pic).className='preLink';
			document.getElementById('tmb'+shownPic).className='preLinkActive';
			pic = shownPic;
			piccol = getCol(pic);
			if (piccol!=col && piccol!=(col+1)) {
				goColumn(piccol);
			}
			doColLinks();
		}
		doImgLinks();
		logtext("<br/><br/>all done8<br/>");
		flipping = false;
		if (pic!=0) {
			//window.location.hash=pic;
		}
		if (showing) {
			if (pic==startSlide) {
				slideShow();	
			} else {
				shower = setTimeout("goPic("+prepNextPic()+")", showDelay);
			}
		}	
	}	
}

function prevPic() {
	
	if (showing) {
		slideShow();
	}
	
	if (pic==0) {
		return;	
	} else {
		logtext("prev gopic:"+(pic-1)+"<br>");
		goPic(pic-1);
	}
}

function nextPic() {

	if (showing) {
		slideShow();
	}

	if (pic>imgCount-2) {
		return;	
	} else {
		logtext("next gopic:"+(pic+1)+"<br>");
		goPic(pic+1);
	}
}

function slideShow() {
	if (imgCount==1) {
		return;
	}
	if (!showing) {
		document.getElementById('btnShow').className="btnPauseEnabled";
		startSlide = pic;
		shower = setTimeout("goPic("+prepNextPic()+")", showDelay);
		showing = true;	
	} else {
		document.getElementById('btnShow').className="btnShowEnabled";
		startSlide = -1;
		clearTimeout(shower);
		showing = false;			
	}
}


function stopShow() {
	if (showing) {
		slideShow();
	}
}

function prepNextPic() {
	nextpic = pic + 1;
	if (nextpic == imgCount) {
		nextpic = 0;
	}
	if (navigator.userAgent.indexOf('Opera') == -1) {
		// no preload for Opera because Opera is stupid (or I am lazy)
		nextImg.src='images/'+gdir+'/'+pics[nextpic][0];
	}
	return nextpic;	
}

function goColumn(column) {
	if (column > maxcol) {
		column = maxcol;
	} 
	colmargin = -(column * 83);
	colmargin -= 6;
	document.getElementById('tcols').style.marginLeft=colmargin+'px';
	col = column;
}



function doImgLinks() {
	if (pic==0) {
		document.getElementById("btnPrev").className="btnPrevDisabled";	
	} else {
		document.getElementById("btnPrev").className="btnPrevEnabled";	
	}

	if (pic==(imgCount-1)) {
		document.getElementById("btnNext").className="btnNextDisabled";	
	} else {
		document.getElementById("btnNext").className="btnNextEnabled";		
	}
	
	if (showing) {
		document.getElementById("btnShow").className="btnPauseEnabled";	
	} else {
		document.getElementById("btnShow").className=(imgCount==1)?"btnShowDisabled":"btnShowEnabled";
	}
	//document.getElementById("caption").innerHTML=getCaption(pic);
	//link = "http://newton.tqhq.ee/gallery.html#"+gal+"_"+pic;
	//document.getElementById("dirlink").innerHTML="otselink sellele pildile: <a href='"+link+"'>"+link+"</a>";
	
}

function getCaption(picnum) {
	if (picnum==2) {
		return "";
	}
	if (picnum==4) {
		return "Pontiac Firebird polnud kõige esimene poniauto ja õnneks või õnnetuseks pole ta ka kõige viimane poniauto, kuid oma 35-aastase ajaloo jooksul olid sageli just Firebirdid omasuguste seas kõige kõrgema lennuga.";
	}
	return "pilt nr. " + picnum;
}

function setOpacity(elem, op) {
	elem.style.opacity = op /100;
	elem.style.filter = "alpha(opacity="+op+")";
}

function showLoader() {
	document.getElementById('loaderimg').style.visibility='visible';	
}

function hideLoader() {
	document.getElementById('loaderimg').style.visibility='hidden';		
}

function showHelp() {
	document.getElementById('help1').style.display='block';	
}

function hideHelp() {
	document.getElementById('help1').style.display='none';	
}
