//
var KepGaleria = new Class
({
	// optionok
	Implements: Options,
	options: {
		repeatPager:true,
		img_cell_plus_wid:30,
		slideShow_interval:1800,
		slideShow_autostart:true,
		slideShow_autostart_delay:1800
	},


	// init
	initialize: function(options)
	{
		this.setOptions(options);

		// galeria elem bent van a html-ben
		this.galeria = $('pop_galeria');
		// merete
		this.galeria_wid = this.galeria.getStyle('width').toInt();
		this.galeria_hei = this.galeria.getStyle('height').toInt();

		// aktualis kep
		this.actual_pic = $('pop_glaria_actual_pic');

		// kep adatok ket tombben lesznek : nagy kepek forrasa + a kep meret stringek
		this.img_A = new Array();
		this.img_size_A = new Array();

		// a galeriaThumbArea classu tablazat a thumnail terulet (ha efolott van a kurzor, megjelenik a thumb sor)
		this.thumb_area = this.galeria.getElement('table.galeriaThumbArea');

		// a thumb sor egy masik tablzatban van, ezt fogjuk mozgatni a thumbnail sor lapozasakor (a tablazat szelesseget is kiszamitjuk es taroljuk)
		this.thumb_table = this.thumb_area.getElement('table');
		this.thumb_table_wid = 0;

		// thumbnail tarto terulet szelessege is kell
		this.thumb_container_wid = this.thumb_area.getElement('div.galeria_thumb_cont').getStyle('width').toInt();

		// ciklus a thumbnail kepeken: felepul a ket tomb + a teljes thumbnail sor selessege
		var i = 0;
		this.thumb_table.getElements('td.thumbCell').each
		(
		function(td)
		{
			// kep adatok
			var img = td.getElement('img');
			this.img_A[i] = img.get('src').replace('_t.jpg', '.jpg');
			this.img_size_A[i] = img.get('id');

			// thumb kep szelessege a meret string 2. eleme, ehhez hozzaadjuk a padding es border cuccot a cellara (ez optionban johet)
			var spl = this.img_size_A[i].split('.');
			this.thumb_table_wid+= spl[1].toInt() + this.options.img_cell_plus_wid;

			// eventre nem jo a ciklusvaltozo: a kulcsot a tomb hossza alapjan allapitjuk meg
			var k = this.img_A.length-1;
			var a = td.getElement('a');
			a.addEvent('click', function(e)
			{
				e.stop();
				this.updateGal(k, 0);
				this.slideShowControl('stop')
			}.bind(this));

			//
			i++;
		}.bind(this)
		);

		// ha a thumb sor szelessege nagyobb, mint a kontener, akkor foglalkozunk vele
		if (this.thumb_table_wid>this.thumb_container_wid)
		{
			// thumb sor alapbeallitasok: pozicio 0, eltolas 0
			this.thumb_table_pos = 0;
			this.thumb_table_margin = 0;

			// gombokat bindoljuk
			this.galeria.getElement('a.galeria_thumb_elozo').addEvent('click', function(e){e.stop();this.thumbRowPager('prev')}.bind(this));
			this.galeria.getElement('a.galeria_thumb_kov').addEvent('click', function(e){e.stop();this.thumbRowPager('next')}.bind(this));
		}
		// ha nem, akkor nincs lapozonyil
		else
		{
			this.galeria.getElement('a.galeria_thumb_elozo').set('styles',{'visibility':'hidden'});
			this.galeria.getElement('a.galeria_thumb_kov').set('styles',{'visibility':'hidden'});
		}

		// kepek szama
		this.picNum = this.img_A.length;

		// bezaras gomb event
		this.galeria.getElement('a.galeria_bezar').addEvent('click', function(e){e.stop();this.closeGal()}.bind(this));

		// elzo gomb event
		this.galeria.getElements('a.galeria_elozo').addEvent('click', function(e){e.stop();this.turnPage('prev');this.slideShowControl('stop')}.bind(this));
		// kovetkezo gomb event
		this.galeria.getElements('a.galeria_kov').addEvent('click', function(e){e.stop();this.turnPage('next');this.slideShowControl('stop')}.bind(this));

		// nagykepre lapozas event
		this.actual_pic.addEvent('click', function(e){e.stop();this.turnPage('next');this.slideShowControl('stop')}.bind(this));

		// thumb terulet folott a kurzor : thumbnail sor megjelenik
		this.thumb_area.addEvents({
			'mouseenter': function()
			{
				this.thumb_area.getElement('div.galeria_thumb_bg').set('styles',{'visibility':'visible'});
				this.thumb_area.getElement('div.galeria_thumb').set('styles',{'visibility':'visible'});
			}.bind(this),
			'mouseleave': function()
			{
				this.thumb_area.getElement('div.galeria_thumb_bg').set('styles',{'visibility':'hidden'});
				this.thumb_area.getElement('div.galeria_thumb').set('styles',{'visibility':'hidden'});
			}.bind(this)
		});

		// slideshow gomb es event
		this.slideShow_control = this.galeria.getElement('div.slideShowControl');
		this.slideShow_control.addEvent('click', function(e){e.stop();this.slideShowControl('start')}.bind(this));

		// a 'popGaleriaOpener' classu "a" tagekre kattintva a galeria megjelenese
		$$('a.popGaleriaOpener').each
		(
		function(op)
		{
			op.addEvent('click', function(e)
			{
				e.stop();
				this.openGal();

			// autostart van, akkor kesleltetett elinditas is kell
			if (this.options.slideShow_autostart)
			{
				(
				function()
				{
					this.slideShowControl('start');
				}.bind(this)
				).delay(this.options.slideShow_autostart_delay);
			}

			}.bind(this));
		}.bind(this)
		);

		// 
		this.thumb_area.getElement('div.galeria_thumb_bg').set('styles',{'visibility':'hidden'});
		this.thumb_area.getElement('div.galeria_thumb').set('styles',{'visibility':'hidden'});
	},
	// END init


	// galeria kinyitas
	openGal: function()
	{
		// galeria pozicio beallitas
		this.galeria_x = 95;
		this.galeria_y = window.getScroll().y + 10;
		this.galeria.setStyle('top', this.galeria_y);

		// opener kep: ez az adatlapon levo kep, kell a pozicio is
		this.opener_img = $('opener_img');
		this.opener_img_pos = this.opener_img.getPosition();

		// aktualis kep megallpitas (az adatlap kep valami_a.jpg, a nagykep valami.jpg): az adatlapon levo kepnek opener_img az id-ja
		var actual_img_src = this.opener_img.get('src').replace('_a.jpg', '.jpg');

		// aktualis kep helye a kep tombben (ha nem talalja, akkor az elso lesz)
		this.actual_img_key = this.img_A.indexOf(actual_img_src);
		if (this.actual_img_key<0)
			this.actual_img_key = 0;

		// tartalom beallitas
		this.updateGal(this.actual_img_key, 1);

		// anim kep kezdo es vegso merete az opener kep merete a tomb alajan(meret string 6./7. es 4/.5. eleme), ezt class valtozoba tesszuk, mert kell a bezarashoz is
		var spl = this.img_size_A[this.actual_img_key].split('.');
		this.morph_start_wid = spl[5].toInt();
		this.morph_start_hei = spl[6].toInt();
		this.morph_end_wid = spl[3].toInt();
		this.morph_end_hei = spl[4].toInt();

		// morph kep: ez fog animalodni (ez az aktualis kep galeria verzioja, bent van a html-ben)
		this.morph_img = $('popGaleriaMorphImg');

		// morph kep vegso pozicioja (a galeriahaoz vizszintesen kozepre, fuggolegesen a tetejetol 36 pixelre)
		var morph_end_x = this.galeria_x + ((this.galeria_wid-this.morph_end_wid)/2) - 4;
		var morph_end_y = this.galeria_y + 36;

		// kirakja (kesleltetve, a kesleltetes a morph idovel azonos)
		(
		function()
		{
			this.morph_img.set('styles',{'display':'none'});
			this.galeria.set('styles',{'display':'block'})
		}.bind(this)
		).delay(250);

		// morf cucc: odatesszuk a kepet az opener helyere
		this.morph_img.set('styles',
		{
			'left':this.opener_img_pos.x + 5,
			'top':this.opener_img_pos.y + 5,
			'width':this.morph_start_wid,
			'height':this.morph_start_hei,
			'display':'block'
		});

		// morf start
		var morph = new Fx.Morph(this.morph_img, {duration:250, transition: Fx.Transitions.Circ.easeInOut});
		morph.start({
			'left':morph_end_x,
			'top': morph_end_y,
			'width':this.morph_end_wid,
			'height':this.morph_end_hei
		});
	},
	// END galeria kinyitas


	// galeria bezaras
	closeGal: function()
	{
		// slideshow stop
		this.slideShowControl('stop');

		// visszatesszuk a nagy morph kepet, galeriat eltuntetjuk
		this.morph_img.set('styles',{'display':'block'});
		this.galeria.set('styles',{'display':'none'});

		// majd kesleltetve eltunik, a kesleltetes a morph idovel azonos
		(function()
		{
			this.morph_img.set('styles',{'display':'none'});
		}.bind(this)).delay(200);

		// morf start
		var morph = new Fx.Morph(this.morph_img, {duration:200, transition: Fx.Transitions.Circ.easeInOut});
		morph.start({
			'left':this.opener_img_pos.x + 5,
			'top':this.opener_img_pos.y + 5,
			'width':this.morph_start_wid,
			'height':this.morph_start_hei
		});
	},
	// END galeria bezaras


	// thumb sor lapozas
	thumbRowPager: function(direction)
	{
		if ( direction=='next')
		{
			// ez a thumb sor szelessege minusz az eltolas
			var pw = this.thumb_table_wid+this.thumb_table_margin;
			if (pw>this.thumb_container_wid)
			{
				// eltolas kiszamitasa: thumb meret(meret string 2.elem) + cella cuccok
				var spl = this.img_size_A[this.thumb_table_pos].split('.');
				var pix = spl[1].toInt() + this.options.img_cell_plus_wid;

				// margint atallitjuk
				this.thumb_table_margin = this.thumb_table_margin - pix;

				// poziciot is be alltjuk
				this.thumb_table_pos++;

				// eltoljuk a thumb tarto tablazatot
				//this.thumb_table.set('styles',{'marginLeft':this.thumb_table_margin});
				// csusztatja
				var myFx = new Fx.Tween(this.thumb_table, {duration:200});
				myFx.start('marginLeft', this.thumb_table_margin);

			}
		}

		if (direction=='prev' && this.thumb_table_pos>0)
		{
			// eltolas kiszamitasa: thumb meret(meret string 2.elem) + cella cuccok
			var spl = this.img_size_A[this.thumb_table_pos-1].split('.');
			var pix = spl[1].toInt() + this.options.img_cell_plus_wid;

			// margint atallitjuk
			this.thumb_table_margin = this.thumb_table_margin + pix;

			// poziciot is be alltjuk
			this.thumb_table_pos--;

			// eltoljuk a thumb tarto tablazatot
			//this.thumb_table.set('styles',{'marginLeft':this.thumb_table_margin});
			// csusztatja
			var myFx = new Fx.Tween(this.thumb_table, {duration:200});
			myFx.start('marginLeft', this.thumb_table_margin);
		}
	},
	// END thumb sor lapozas


	// nagykep lapozas
	turnPage: function(direction)
	{
		// elozo/kovetkezo kulcs
		var nextKey = this.actual_img_key+1;
		var prevKey = this.actual_img_key-1;

		// ha repeat van es kilog a sorszam, akkor korbejaratjuk
		if (this.options.repeatPager)
		{
			if (nextKey>=this.picNum)
				nextKey = 0;
			if (prevKey<0)
				prevKey = this.picNum-1;
		}

		// lapoz
		if (direction=='prev')
			this.updateGal(prevKey, 0);
		else
			this.updateGal(nextKey, 0);
	},
	// END nagykep lapozas


	// slideshow vezerles
	slideShowControl: function(control)
	{
		// elinditas
		if(control=='start')
		{
			// ha van futo slideshow, azt lallijuk
			if (this.slideShowId)
				$clear(this.slideShowId);

			// eloszor gyorsan lapozunk egyet
			this.turnPage('next');

			// control atallitas
			this.slideShow_control.removeEvents('click');
			this.slideShow_control.addEvent('click', function(e){e.stop();this.slideShowControl('stop')}.bind(this));
			this.slideShow_control.removeClass('galeria_play');
			this.slideShow_control.addClass('galeria_stop');
			this.slideShow_control.getElement('a').set('text', 'STOP');

			//debughoz
			var slideShow = function()
			{
				this.turnPage('next');
			};
			this.slideShowId = slideShow.periodical(this.options.slideShow_interval, this);
		}

		// leallitas
		if (control=='stop')
		{
			if (this.slideShowId)
				$clear(this.slideShowId);

			// control atallitas
			this.slideShow_control.removeEvents('click');
			this.slideShow_control.addEvent('click', function(e){e.stop();this.slideShowControl('start')}.bind(this));
			this.slideShow_control.removeClass('galeria_stop');
			this.slideShow_control.addClass('galeria_play');
			this.slideShow_control.getElement('a').set('text', 'START');
		}

	},
	// END slideshow vezerles


	// galeria tartalom beallitas
	updateGal: function(key, isfirst)
	{
		if (this.img_A[key])
		{
			// ez az aktualis
			this.actual_img_key = key;

			// betesszuk a nagykepet
			if (isfirst==1)
				this.actual_pic.set('src', this.img_A[key]);
			else
			{
//				this.actual_pic.setStyle('visibility', 'hidden');
				this.actual_pic.setStyle('opacity', 0);
				this.actual_pic.set('src', this.img_A[key]);
				this.actual_pic.fade('in');
			}

			// ha nem korbejaros: elozo/kovetkezo kep nyilak: kell/nemkell
			if (this.options.repeatPager==false)
			{
				var prevDisp = (this.img_A[key-1]) ? 'visible' : 'hidden';
				this.galeria.getElements('a.galeria_elozo').setStyle('visibility',prevDisp);
				var nextDisp = (this.img_A[key+1]) ? 'visible' : 'hidden';
				this.galeria.getElements('a.galeria_kov').setStyle('visibility',nextDisp);
			}

			// kep/oldal beallitas
			this.galeria.getElements('div.galeria_oldal').set('text', (key+1)+'/'+this.picNum);
		}
	},
	// END galeria tartalom beallitas


	// debug
	debug: function(msg)
	{
		$('gui_debug').set('html', msg);
	}
});


// domreadyre letrejon a peldany
window.addEvent('domready', function()
{
	if($('pop_galeria'))
	{
	 	var KepGaleria_ = new KepGaleria
	 	({
	 		repeatPager:true, /*default: true */
			slideShow_interval:1000, /*default: 1800*/
			slideShow_autostart:false, /*default: true */
			slideShow_autostart_delay:1000 /*default: 1800*/ /*!!!!!!!!! ezt nem szabad nullara allitani !!!!!!!!*/
	 	});
	}
});






