highlightsObj = null;

var Highlights = Class.create({
	type: null,
	elements: [],
	currentElement: 0,
	pe: null,
	duration: .8,

	initialize: function() {
		if ($('highlights_toolbar') != undefined) {	// lejátszó eszköztár esetén
			this.setType('toolbar');
			$('highlights_box').observe('mouseenter', function(){
				new Effect.Appear('highlights_toolbar', { duration: .3 });
			});
			$('highlights_box').observe('mouseleave', function(){
				new Effect.Fade('highlights_toolbar', { duration: .3 });
			});
			$('highlights_pause').observe('click', function(event){
				event.stop();
				highlightsObj.pause();
			});
			$('highlights_start').observe('click', function(event){
				event.stop();
				highlightsObj.start();
			});
			$('highlights_prev').observe('click', function(event){
				event.stop();
				highlightsObj.showPrevious();
			});
			$('highlights_next').observe('click', function(event){
				event.stop();
				highlightsObj.showNext();
			});
		} else if ($('highlights_titles') != undefined) {	// oldalcímek esetén
			this.setType('titles');
			$$('#highlights_titles a').each(function(element){
				element.observe('click', function(event){
					event.stop();
					event.target.addClassName('active');
					event.target.blur();
					event.target.up('li').siblings().each(function(item){
						item.down('a').removeClassName('active');
					});
					highlightsObj.goTo(event.target.id.split('_')[2]);
				});
			});
		} else if ($('highlights_pages') != undefined) {	// oldalszámok esetén
			this.setType('pages');
			$$('#highlights_titles a').each(function(element){
				element.observe('click', function(event){
					event.stop();
					highlightsObj.goTo(event.target.id.split('_')[2]);
				});
			});
		}

		this.elements = $$('#highlights_box div.highlights_item');
		if (this.elements.size() > 1) {
			this.start();
		}
	},
	setType: function(type) {
		this.type = type || 'toolbar';
	},
	start: function() {
		if (this.type == 'toolbar') {
			$('highlights_start').hide();
			$('highlights_pause').show();
		}
		this.pe = new PeriodicalExecuter(function(pe) {
			var next = this.currentElement + 1;
			if (this.elements[next] == undefined) {
				next = 0;
			}

			if ($('highlights_titles') != undefined) {
				$$('#highlights_titles a').each(function(element){
					element.removeClassName('active');
				});
				$$('#highlights_titles li:nth-child(' + (next + 1) + ') a').each(function(element){
					element.addClassName('active');
				});
			} else if ($('highlights_pages') != undefined) {
				$$('#highlights_pages a').each(function(element){
					element.removeClassName('active');
				});
			}

			new Effect.Parallel([
				new Effect.Fade(this.elements[this.currentElement], { sync: true }),
				new Effect.Appear(this.elements[next], { sync: true })
			], {
				duration: this.duration
			});
			this.currentElement = next;
		}.bind(this), 4);
	},
	pause: function() {
		this.pe.stop();
		if (this.type == 'toolbar') {
			$('highlights_pause').hide();
			$('highlights_start').show();
		}
	},
	showPrevious: function() {
		this.pe.stop();
		var next = this.currentElement - 1;
		if (this.elements[next] == undefined) {
			next = this.elements.size() - 1;
		}
		new Effect.Parallel([
			new Effect.Fade(this.elements[this.currentElement], { sync: true }),
			new Effect.Appear(this.elements[next], { sync: true })
		], {
			duration: this.duration
		});
		this.currentElement = next;
		this.start();
	},
	showNext: function() {
		this.pe.stop();
		var next = this.currentElement + 1;
		if (this.elements[next] == undefined) {
			next = 0;
		}
		new Effect.Parallel([
			new Effect.Fade(this.elements[this.currentElement], { sync: true }),
			new Effect.Appear(this.elements[next], { sync: true })
		], {
			duration: this.duration
		});
		this.currentElement = next;
		this.start();
	},
	goTo: function(id) {
		this.pause();
		new Effect.Parallel([
			new Effect.Fade(this.elements[this.currentElement], { sync: true }),
			new Effect.Appear($('highlights_page_' + id), { sync: true })
		], {
			duration: this.duration,
			afterFinish: function() {
				this.elements.each(function(element, index){
					if (element.visible()) {
						this.currentElement = index;
					}
				}.bind(this));
			}.bind(this)
		});
	}
});

document.observe('dom:loaded', function(){
	highlightsObj = new Highlights();
});
