// DDS Lightbox Galéria

var idstohide=new Array(); //TODO!! flash tartalmu elemek id-i.

var imgpath="/galeria/thumb2/";
var thumbpath="/galeria/thumb1/";
var noimage="/images/sp.gif";
var viewthumb="/images/gallery/view_thumb.gif";
var viewfull="/images/gallery/view_full.gif";
var initsize=new Array(950,560);
var mode=2; // 1 képek, 2 thumbnailek
var TimeToFade = 250.0;

// --

var imagelist=new Array();
var images=new Array();
var tpages=new Array();
var textlist=new Array();

var cp=0; // mode 2 aktuális oldal
var curdir=''; //aktuális mappanév
var curimgdiv=1;
var slideshow=0;
var slideshowtime=5000;
var slideshowtimer;
var thumbsloaded=0;

function isArray(obj) {
    return obj.constructor == Array;
}

function array_chunk( input, size ) {
	for(var x, i = 0, c = -1, l = input.length, n = []; i < l; i++){
		(x = i % size) ? n[c][x] = input[i] : n[++c] = [input[i]];
	}
	return n;
}

function galImage(src,txt,pnr) {
	this.src = imgpath+src;
	this.thumb = thumbpath+src
	this.text = txt;
	this.nr = pnr;
	this.top = '';
	this.left = '';
	var galimg=this;
	this.loadImage = function() {
		galimg.preimg=new Image();
		galimg.preimg.onload=function(){
			galimg.top=65+(450-galimg.preimg.height)/2+'px';
        		galimg.left=30+(560-galimg.preimg.width)/2+'px';
        		galimg.loaded=1;
               	}
        	galimg.preimg.src=galimg.src;
	}
	this.loadThumb = function() {
		galimg.pretimg=new Image();
		galimg.pretimg.onload=function(){
        		galimg.tloaded=1;
        		thumbsloaded+=1;
        		if(thumbsloaded==images.length) {
        			
        			fade('box');
        		}
               	}
        	galimg.pretimg.src=galimg.thumb;
	}
}

function showGallery(gid){
	tpages=new Array();
	images=new Array();
	ajax_load('galleryload.php?g='+gid);
}

function galleryLoad() {
	
	dbox=document.getElementById('box');
        dbox.style.width=initsize[0]+'px';
	dbox.style.height=initsize[1]+'px';
	current=0;
	cp=0;
	mode=2;
	showItem('lbthumbs',0);
	setFadeState('lbthumbs',-2);
	//galleryReload();
	fade('lbthumbs');
	window.onresize=winResize;
	center('box',initsize[0],initsize[1]);
	showItem('overlay');
	//showItem('loading');
	setFadeState('box',-2);
        showItem('box','0');
        thumbsloaded=0;
        
	overlayReload();
	visSelectsAndFlash('hidden');
	
   	return false;
}

function galleryReload() {
	image=document.getElementById('lbimage1');
	image2=document.getElementById('lbimage2');
	image2.src=noimage;
        cntr=document.getElementById('counter');
        keptxt=document.getElementById('lbtext');
        thumbs=document.getElementById('lbthumbs');
        view=document.getElementById('lbview');
	
	
	for(var im=0;im<imagelist.length;im++) {
		if(!images[im]) images[im] = new galImage(imagelist[im],textlist[im],im);
		if(!images[im].loaded) images[im].loadImage();
		if(!images[im].tloaded) images[im].loadThumb();
	}
	
	//alert(images[current]);
        //
        
	if (mode==1) {
		thumbs.innerHTML='';
		
		showItem('lbimage1',0);
		loadImage(images[current].src);
		
		curimgdiv=1;
		setFadeState('lbimage1',-2);
		setFadeState('lbimage2',-2);
		
		
		//showItem('lbimage2',0);
		if(imagelist.length>1) {
		        showItem('prev',40);
		        showItem('next',40);
		} else {
			hideItem('prev');
			hideItem('next');
        	}
        	if(images[current].text) keptxt.innerHTML=images[current].text;
        	cntr.innerHTML=current+1+'/'+imagelist.length;
   	
        	view.src=viewthumb;
        	view.title="váltás indexkép nézetre";
        	
        } else {
        	
		tpages=array_chunk(imagelist,20);
		thumbs.innerHTML="";
		if(tpages[cp])	loadThumbs();
		if(tpages.length>1) {
		        showItem('prev',50);
		        showItem('next',50);
		} else {
			hideItem('prev');
			hideItem('next');
        	}
        	cntr.innerHTML=cp+1+'/'+tpages.length;
        	keptxt.innerHTML=curdir;
        	view.src=viewfull;
        	view.title="váltás teljes kép nézetre";
        }
}

function switchMode(imgnr) {
	image=document.getElementById('lbimage'+curimgdiv);
	if(!imgnr && imgnr!="0") imgnr=current;
	if(mode==1) {
		cp=Math.floor(imgnr/20);
		mode=2;
		setFadeState('lbthumbs',-2);
		showItem('lbthumbs',0);
		fade('lbthumbs');		
		fade('lbimage'+curimgdiv);
	} else {
		current=imgnr;
		mode=1;
		image.src=noimage;
	}
	/*hideItem('lbimage1',0);
	hideItem('lbimage2',0);*/
	galleryReload();
}



function winResize() {
	center('box',initsize[0],initsize[1]);
	overlayReload();
}

// elrejtés, alapbeállítások visszaállítása
function hideBox(){
	
	dbox=document.getElementById('box');
	olay=document.getElementById('overlay');
	image=document.getElementById('lbimage'+curimgdiv);
	thumbs=	document.getElementById('lbthumbs');
	thumbs.innerHTML="";
	tpages.length=0;
	hideItem('overlay');
	fade('box');
	//hideItem('box');
	hideItem('lbimage1',0);
	hideItem('lbimage2',0);
	//hideItem('lbthumbs',0);
	visSelectsAndFlash('visible');
	dbox.style.height=initsize[1]+'px';
	dbox.style.width=initsize[0]+'px';
	window.onresize='';
	return false;
}

function overlayReload()
{
	if (window.innerHeight && window.scrollMaxY>=0 || window.innerWidth && window.scrollMaxX>=0) {    
		yScroll = window.innerHeight + window.scrollMaxY;
		xScroll = window.innerWidth + window.scrollMaxX;
		var deff = document.documentElement;
		var wff = (deff&&deff.clientWidth) || document.body.clientWidth || window.innerWidth || self.innerWidth;
		var hff = (deff&&deff.clientHeight) || document.body.clientHeight || window.innerHeight || self.innerHeight;
		xScroll -= (window.innerWidth - wff);
		yScroll -= (window.innerHeight - hff);
		
	} else if (document.body.scrollHeight > document.body.offsetHeight || document.body.scrollWidth > document.body.offsetWidth){ // all but Explorer Mac
		yScroll = document.body.scrollHeight;
		xScroll = document.body.scrollWidth;
	} else { // Explorer Mac... Explorer 6 Strict, Mozilla, Safari
		yScroll = document.body.offsetHeight;
		xScroll = document.body.offsetWidth;
	}
	olay=document.getElementById('overlay');
	var pagesize = getPageSize(); 
	if(pagesize[1]>yScroll) yScroll=pagesize[1];
	if(pagesize[0]>xScroll) xScroll=pagesize[0];
	olay.style.height = yScroll +'px';
	olay.style.width = xScroll +'px';
}

function center(windowname, fwidth, fheight) {
	var successWin = document.getElementById(windowname);
	var pagesize = getPageSize();    
	var arrayPageScroll = getPageScrollTop();
	lbtop = (arrayPageScroll[1] + (pagesize[1] - fheight-60)/2);
	lbleft = (arrayPageScroll[0] + (pagesize[0] - fwidth)/2);
	successWin.style.top = (lbtop < 0) ? "0px" : lbtop + "px";
	successWin.style.left = (lbleft < 0) ? "0px" : lbleft + "px";
}

function getPageSize(){
	var de = document.documentElement;
	var w = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
	var h = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight
	arrayPageSize = new Array(w,h) 
	return arrayPageSize;
}

function getPageScrollTop(){
	var yScrolltop;
	var xScrollleft;
	if (self.pageYOffset || self.pageXOffset) {
		yScrolltop = self.pageYOffset;
		xScrollleft = self.pageXOffset;
	} else if (document.documentElement && document.documentElement.scrollTop || document.documentElement.scrollLeft ){     // Explorer 6 Strict
		yScrolltop = document.documentElement.scrollTop;
		xScrollleft = document.documentElement.scrollLeft;
	} else if (document.body) {// all other Explorers
		yScrolltop = document.body.scrollTop;
		xScrollleft = document.body.scrollLeft;
	}
	arrayPageScroll = new Array(xScrollleft,yScrolltop) 
	return arrayPageScroll;
}

// elrejtendő elemek (select, flash, stb)
function visSelectsAndFlash(visibility){
	selects = document.getElementsByTagName('select');
	for(i = 0; i < selects.length; i++) {
		selects[i].style.visibility = visibility;
	}
	for(i = 0; i < idstohide.length; i++) {
		currentid=document.getElementById(idstohide[i]);
		if(currentid)
			currentid.style.visibility = visibility;
	}
}

function prevImage(){
	
	if(curimgdiv==1) curimgdiv=2;
	else curimgdiv=1;
	image=document.getElementById('lbimage'+curimgdiv);
	changeOpacity(0,'lbimage'+curimgdiv);
	cntr=document.getElementById('counter');
	keptxt=document.getElementById('lbtext');
	
	if(mode==1) {
		current--;
		if(current<0) current=images.length-1;
		image.src=images[current].src;
		image.style.top=images[current].top;
		image.style.left=images[current].left;
		fade('lbimage1');
		fade('lbimage2');
		cntr.innerHTML=current+1+'/'+images.length;
		if(images[current].text) keptxt.innerHTML=images[current].text;
	} else {
		cp--;
		if(cp<0) cp=tpages.length-1;
		thumbs.innerHTML='';
		loadThumbs();
		cntr.innerHTML=cp+1+'/'+tpages.length;
	}
	if(slideshow==1) {
		clearTimeout(slideshowtimer);
		slideshowtimer=setTimeout("nextImage()",slideshowtime);
	}

}

function nextImage(){
	if(curimgdiv==1) curimgdiv=2;
	else curimgdiv=1;
	image=document.getElementById('lbimage'+curimgdiv);
	changeOpacity(0,'lbimage'+curimgdiv);
	cntr=document.getElementById('counter');
	keptxt=document.getElementById('lbtext');
	
	
	if(mode==1){
		current++;
		if(current==images.length) current=0;
		image.src=images[current].src;
		image.style.top=images[current].top;
		image.style.left=images[current].left;
		fade('lbimage1');
		fade('lbimage2');
		cntr.innerHTML=current+1+'/'+images.length;
		if(images[current].text) keptxt.innerHTML=images[current].text;
	} else {
		cp++;
		if(cp==tpages.length) cp=0;
		thumbs.innerHTML='';
		loadThumbs();
		cntr.innerHTML=cp+1+'/'+tpages.length;
	}
	if(slideshow==1) {
		clearTimeout(slideshowtimer);
		slideshowtimer=setTimeout("nextImage()",slideshowtime);
	}
}

function resizeImage(img){
 	pagesize=getPageSize();
 	arany=img.width/img.height;
 	if(img.height>pagesize[1]) {
 		img.height=pagesize[1]-80;
 		img.width=img.height*arany;
 	}
	if(img.width>pagesize[0]) {
 		img.width=pagesize[0]-80;
 		img.height=img.width/arany;
 	}
 	return img;
}

function showItem(item,opc) {
	obj=document.getElementById(item);
	if (opc || opc==0) {
		changeOpacity(opc,item);
	}
	obj.style.display='block';
	
}

function hideItem(item,opc) {
	obj=document.getElementById(item);
	obj.style.display='none';
	if (opc || opc==0) {
		changeOpacity(opc,item);
	}
}

function loadImage(src) {
	if(src.indexOf('.jpg')==-1) src=noimage;
	showItem('loading');
	//changeOpacity(40,'lbimage'+curimgdiv);
	//fade('lbimage');
	//fadeItem(100,40,'lbimage',500);
	image=document.getElementById('lbimage1');
	preimg=new Image();
	preimg.onload=function(){
		image.src=src;  //imgpath+imagelist[current];
		image.style.top=65+(450-preimg.height)/2+'px';
        	image.style.left=30+(560-preimg.width)/2+'px';
        	changeOpacity(0,'lbimage1');
        	fade('lbimage1');
        	hideItem('loading');
        	//fadeItem(0,100,'lbimage',500);
        	
        }
        preimg.src=src;
}
function loadThumbs() {
	for (var x=0; x<tpages[cp].length; x++) {
		if(!tpages[cp][x]) {
			thumbs.innerHTML='<div class="b c m10">Kérjük válasszon egy képtár mappát!</div>'; 
			return;
		}
		var i=cp*20+x;
		var node = document.createElement('img');
		node.setAttribute('id', 'thmb'+i+Math.round(Math.random()*1000));
		node.setAttribute('class', 'thumb');
		node.setAttribute('onmouseover', 'changeOpacity(70,this.id);');
		node.setAttribute('onmouseout', 'changeOpacity(100,this.id);');
		node.setAttribute('onclick', 'switchMode('+i+');');
		node.setAttribute('alt', images[i].text);
		node.setAttribute('title', images[i].text);
		node.setAttribute('width', '100');
		node.setAttribute('height', '100');
		node.setAttribute('src', images[i].thumb);//thumbpath+tpages[cp][x]);
		thumbs.appendChild(node);
		//thumbs.innerHTML+='<img id="thmb'+i+'" class="thumb" src="'+thumbpath+tpages[cp][x]+'" onmouseover="changeOpacity(70,this.id);" onmouseout="changeOpacity(100,this.id);" alt="'+textlist[i]+'" title="'+textlist[i]+'" onclick="switchMode('+i+');" width="100" height="100" />';
	}
	
	
}

function changeOpacity(opacity, id) {
	var object = document.getElementById(id).style;
	object.opacity = (opacity / 100);
	object.MozOpacity = (opacity / 100);
	object.KhtmlOpacity = (opacity / 100);
	object.filter = "alpha(opacity=" + opacity + ")";
}

function slideShow() {
	if(slideshow==0) {
		slideshow=1;
		slideshowtimer=setTimeout("nextImage()",slideshowtime);
	} else {
		slideshow=0;
		clearTimeout(slideshowtimer);
	}
}



function fade(eid) {
	var element = document.getElementById(eid);
	if(element == null)
		return;
	if(element.FadeState == null) {
		if(element.style.opacity == null || element.style.opacity == '' || element.style.opacity == '1') {
			element.FadeState = 2;
		} else {
			element.FadeState = -2;
		}
	}

	if(element.FadeState == 1 || element.FadeState == -1) {
		element.FadeState = element.FadeState == 1 ? -1 : 1;
		element.FadeTimeLeft = TimeToFade - element.FadeTimeLeft;
	} else {
		element.FadeState = element.FadeState == 2 ? -1 : 1;
		element.FadeTimeLeft = TimeToFade;
		element.style.display = 'block';
		setTimeout("animateFade(" + new Date().getTime() + ",'" + eid + "')", 33);
	}
}

function setFadeState(eid,state) {
	var element = document.getElementById(eid);
	element.FadeState = state;
}

function animateFade(lastTick, eid) { 
	var curTick = new Date().getTime();
	var elapsedTicks = curTick - lastTick;
	var element = document.getElementById(eid);
 
	if(element.FadeTimeLeft <= elapsedTicks) {
		element.style.opacity = element.FadeState == 1 ? '1' : '0';
		element.style.filter = 'alpha(opacity = ' + (element.FadeState == 1 ? '100' : '0') + ')';
		element.FadeState = element.FadeState == 1 ? 2 : -2;
		if (element.FadeState == -2) element.style.display = 'none';
		return;
	}

	element.FadeTimeLeft -= elapsedTicks;
	var newOpVal = element.FadeTimeLeft/TimeToFade;
	if(element.FadeState == 1)
		newOpVal = 1 - newOpVal;

	element.style.opacity = newOpVal;
	element.style.MozOpacity = newOpVal;
	element.style.filter = 'alpha(opacity = ' + (newOpVal*100) + ')';
	setTimeout("animateFade(" + curTick + ",'" + eid + "')", 33);
}

