var Galeria = Class.create({
	initialize: function() {
		this.els = [];//elementy HTML z thumbsami
		this.galFotos = [];
		this.aktFoto = 0;//pozycja aktualnego obrazka w tablicy
		this.aktGal = 0;//id aktualnej galerii
		this.thumbsOn = true;
		this.thumbs = [];
		this.thumbsPos = 0;
		this.thumbsStep = 300;//odleglosc, o jaka przesuna sie miniatury
	},
	
	//inicjacja galerii na podstawie kliknietego elementu img (thmumbnail)
	initGal: function(thEl) {
		var galId = thEl.readAttribute('gal');
		if(galId!=this.aktGal) this.populateGal(galId);
		for(var i=0;i<this.els.length-1;i++) {
			if(thEl==this.els[i]) this.aktFoto = i;
		}
		this.startGal(thEl);
	},
	
	//inicjacja galerii na podstawie id, aktywne bedzie pierwsze zdjecie
	initGalNo: function(galId) {
		if(galId!=this.aktGal) this.populateGal(galId);
		this.aktFoto = 0;
		var thEl = this.els[0];
		this.startGal(thEl);
	},
	
	//star galerii na postawie jednego aktywnego elementu
	startGal: function(thEl) {
		$('bigFotoContainer').show();
		$('bigFotoTable').show();
		$('bigFotoImg').onclick = null;
		$('bigFotoImg').setStyle({cursor:'default'});
		$('bigFotoPrev').onclick = null;
		$('bigFotoPrev').stopObserving('click');
		$('bigFotoPrev').observe('click',this.prevFoto.bind(this));
		$('bigFotoNext').onclick = null;
		$('bigFotoNext').stopObserving('click');
		$('bigFotoNext').observe('click',this.nextFoto.bind(this));
		$('bigFotoClose').onclick = null;
		$('bigFotoClose').stopObserving('click');
		$('bigFotoClose').observe('click',this.closeGal.bind(this));
		this.boundHandlerMethod = this.keyHandler.bind(this);
		Event.observe(document, 'keypress', this.boundHandlerMethod);
		if(this.thumbsOn) this.showThumbs();
		this.showPhoto(thEl);
	},
	
	//pobranie danych wszystkich elementów z danej galerii
	populateGal: function(gId) {
		var els = $$('img[gal='+gId+']');
		this.els = els;
		this.aktGal = gId;
	},
	
	//przygotowuje zdjecie do wyswietlenia i uruchamia proces wyswietlania (onload)
	showPhoto: function(thEl) {
		var thSrc = thEl.readAttribute('src');
		var fileName = basename(thSrc);
		$('fotoWait').update('<img src="images/_konkurs_logo.gif" border="0" />');
		$('fotoWait').show();
		//$('fotoWait').setStyle({top:'0px'});
		//$('fotoWait').update('<img src="images/_konkurs_logo.gif" border="0" />');
		$('gal_logo').hide();
		this.img = new Element('img');
		this.img.id = 'theImage';
		this.img.observe('load', this.showImg.bind(this));
		this.img.observe('click',this.nextFoto.bind(this));
		this.img.setStyle({cursor:'pointer'});
		this.img.src = 'gala/'+fileName;
		$('bigFotoImg').show();
		this.fotoNav();
	},
	
	//pokazuje zdjecie po zaladowaniu
	showImg: function(evt) {
		$('fotoWait').update('');
		$('fotoWait').hide();
		//$('fotoWait').setStyle({top:'-100px'});
		//$('fotoWait').update('');
		$('gal_logo').show();
		$('bigFotoImg').hide();
		$('bigFotoImg').update(this.img);
		$('bigFotoImg').appear({duration:.5});
		var dim = viewportDims();
		var fotoDim = $('bigFotoImg').getDimensions();
		if(fotoDim.width>dim.width-200||fotoDim.height>dim.height-270) {
			var new_size = image_small_maker(fotoDim.width, fotoDim.height, dim.width-200, dim.height-270)
			this.img.setStyle({'width':new_size[0]+'px','height':new_size[1]+'px'});
		}
		var title = this.els[this.aktFoto].readAttribute('galTitle');
		if(title==null) title = '';
		$('gal_text').update(title);
	},
	
	//zamyka galerie
	closeGal: function(evt) {
		$('bigFotoContainer').hide();
		$('bigFotoImg').hide();
		document.stopObserving('keypress', this.boundHandlerMethod);
	},
	
	//ustawia nawigacje do zdjec - wlacza/wylacza strzalki lewo/prawo
	fotoNav: function() {
		if(this.aktFoto>0) $('bigFotoPrev').show();
		else $('bigFotoPrev').hide();
		if(this.aktFoto<this.els.length-1) $('bigFotoNext').show();
		else $('bigFotoNext').hide();
	},
	
	//wyswietla poprzednie zdjecie
	prevFoto: function() {
		if(this.aktFoto<=0) return;
		this.aktFoto--;
		this.showPhoto(this.els[this.aktFoto]);
	},
	
	//wyswietla nastepne zdjecie
	nextFoto: function() {
		if(this.aktFoto>this.els.length-1) return;
		this.aktFoto++;
		if(this.aktFoto>this.els.length-1) this.aktFoto = 0;
		this.showPhoto(this.els[this.aktFoto]);
	},
	
	//pokazuje miniatury
	showThumbs: function() {
		if(this.els.length<2) return;
		$('galThumbs').update('');
		var thumb;
		var thumbsW = 0;
		for(var i=0;i<this.els.length;i++) {
			thumb = new Element('img');
			thumb.id = 'thumb_'+i;
			//thumb.observe('load', this.f.bind(this));
			thumb.src = this.els[i].src;
			thumb.observe('click', this.thumbClicked.bind(this));
			thumb.setStyle({cursor:'pointer',marginRight:'6px',display:'block',float:'left'});
			this.thumbs.push(thumb);
			$('galThumbs').insert(thumb);
			thumbsW += thumb.width+6;
		}
		var dim = viewportDims();


		$('thumbsWrapperCont').setStyle({width:(dim.width-100)+'px'});
		$('thumbsWrapper').setStyle({width:(dim.width-100)+'px'});
		
		//$('thumbsWrapperCont').width = dim.width-100;		
		//$('thumbsWrapper').width = dim.width-100;
		
		$('galThumbs').setStyle({width:thumbsW+'px'});
		$('galThumbs').show();
		this.thumbNavSet();
	},
	
	//funkcja wywolana po kliknieciu miniatury
	thumbClicked: function(evt) {
		var fot = evt.findElement();
		var fotId = fot.id.substr(6);
		if(this.aktFoto==fotId) return;
		this.aktFoto = fotId;
		this.showPhoto(this.els[this.aktFoto]);
	},
	
	//inicjuje nawigacje miniatur
	thumbNavSet: function() {
		var tww = $('thumbsWrapper').getWidth();
		var thw = $('galThumbs').getWidth();
		if(tww>=thw) {
			$('thumbsLeft').hide();
			$('thumbsRight').hide();
			return;
		}
		$('thumbsLeft').show();
		$('thumbsLeft').stopObserving('click');
		$('thumbsLeft').observe('click',this.thumbsLeft.bind(this));
		$('thumbsRight').show();
		$('thumbsRight').stopObserving('click');
		$('thumbsRight').observe('click',this.thumbsRight.bind(this));
		this.thumbNavOnOff();
	},
	
	//ustawia nawigacje do miniatur - wlacza/wylacza strzalki lewo/prawo
	thumbNavOnOff: function() {
		var tww = $('thumbsWrapper').getWidth();
		var thw = $('galThumbs').getWidth();
		if(this.thumbsPos<0) $('thumbsLeft').show();
		else $('thumbsLeft').hide();
		if(this.thumbsPos>-(thw-tww)) $('thumbsRight').show();
		else $('thumbsRight').hide();
	},
	
	//przesuwa miniatury w prawo
	thumbsRight: function(evt) {
		var oldPos = this.thumbsPos;
		this.thumbsPos -= this.thumbsStep;
		var tww = $('thumbsWrapper').getWidth();
		var thw = $('galThumbs').getWidth();
		if(this.thumbsPos<-(thw-tww)) this.thumbsPos = -(thw-tww);
		//$('galThumbs').setStyle({left:this.thumbsPos+'px'});
		var actOffset = $('galThumbs').positionedOffset();
		new Effect.Move('galThumbs', { x: this.thumbsPos-actOffset[0], y: 0, mode: 'relative',duration: .6});
		this.thumbNavOnOff();
	},
	
	//przesuwa miniatury w lewo
	thumbsLeft: function(evt) {
		var oldPos = this.thumbsPos;
		this.thumbsPos += this.thumbsStep;
		if(this.thumbsPos>0) this.thumbsPos = 0;
		//$('galThumbs').setStyle({left:this.thumbsPos+'px'});
		var actOffset = $('galThumbs').positionedOffset();
		new Effect.Move('galThumbs', { x: this.thumbsPos-actOffset[0], y: 0, mode: 'relative',duration: .6});
		this.thumbNavOnOff();
	},
	
	//sprawdza przycisniety klawisz
	keyHandler: function(e) {
		var code;
		if (!e) var e = window.event;
		if (e.keyCode) code = e.keyCode;
		else if (e.which) code = e.which;
		if(code==37) this.prevFoto();
		if(code==39) this.nextFoto();
		if(code==27) this.closeGal();
	}
});

//nowa galeria
var aktGal;
function showGal(el) {
	if(aktGal==null) aktGal = new Galeria()
	aktGal.initGal(el);
}
function showGalNo(galId) {
	if(aktGal==null) aktGal = new Galeria()
	aktGal.initGalNo(galId);
}

