// JavaScript Document
// @author istvan.sztraczinszki@gmail.com

var Portfolio = new Class({
	Implements: [Options],
	options: {
		className: 'portfolio',
		path: 'media/pictures/',
		zoomPath: 'media/pictures/',
		picPrefix: 'works_',
		autoPlay: true,
		autoPlayInterval: 5000,
		autoPlayDelay: 10000
	},
	getNextIterator: function() {
		if (this.actual==null) {
			return 0;
		}
		else if (this.actual==this.portfolioItems.length-1) {
			return 0;
		}
		else {
			return this.actual+1;
		}
	},
	autoPlay: function() {
		this.portfolioItems[this.getNextIterator()].show( true );	
	},
	startAutoPlay: function() {
		this.autoPlayIntervalID = this.autoPlay.periodical(this.options.autoPlayInterval, this);
	},
	stopAutoPlay: function() {
		$clear(this.autoPlayIntervalID);
	},
	initialize: function(el, holderEl, options) {
		this.el = el;
		this.holderEl = holderEl;
		this.setOptions(options);
		this.actual = null;
	
		// gomb befoglalo
		this.buttonHolder = new Element( 'div', {
			'class': this.options.className+'ButtonHolder'
		})
		.injectInside(this.holderEl);
		// kep befoglalo
		this.picHolder = new Element( 'div', {
			'class': this.options.className+'PicHolder'
		})
		.injectInside(this.holderEl);
		// leiras befoglalo
		this.descrHolder = new Element( 'div', {
			'class': this.options.className+'DescrHolder'
		})
		.injectInside(this.holderEl);
		// leiras slider
		this.descrSlider = new Element( 'div', {
			'class': this.options.className+'DescrSlider'
		})
		.injectInside(this.descrHolder);
		// portfolio elemek
		this.portfolioItems = Array();
		var counter = 0;
		$each( this.el.getElements('div'), function(el) {
			this.portfolioItems.push( new PortfolioItem(el, this, counter) ); 
			counter++;
		}, this);
		// elso elem mutatasa
		this.portfolioItems[0].show( true );
		// autoplay
		if (this.options.autoPlay==true) this.startAutoPlay();
	}
});


var PortfolioItem = new Class({
	initialize: function(el, parent, iterator) {
		this.el = el;
		this.imgEl = $$(this.el).getElement( 'img' );
		this.parent = parent;
		this.iterator = iterator;
		this.button = this.createButton();
		this.pic = this.createPic();
		this.descr = this.createDescr();
		
	},
	/**
	 * portfolio gombok generalasa
	 */
	createButton: function() {
		var el = new Element( 'a', {
			'class': this.parent.options.className+'Button'
		})
		.set('title', this.el.getElement('h2').innerHTML )
		.addEvent('click', function() {
			this.show();
		}.bind(this))
		.injectInside(this.parent.buttonHolder);
		return el;
	},
	/**
	 * portfolio kepek generalasa
	 */
	createPic: function() {
		var el = new Element( 'div', {
			'class': this.parent.options.className+'Pic'
		})
		.fade('hide')
		.addEvent('click', function() {
			this.zoom();
		}.bind(this))
		.injectInside(this.parent.picHolder);
		this.imgEl.injectInside( el );
		return el;
	},
	/**
	 * portfolio leirasok generalasa
	 */
	createDescr: function() {
		var el = new Element( 'div', {
			'class': this.parent.options.className+'Descr'
		})
		.set('html', this.el.innerHTML)
		.injectInside(this.parent.descrSlider);
		return el;
	},
	show: function( isAutoPlay ) {
		if (this.parent.actual == this.iterator) return;
		// ha van autoplay, akkor azt ideiglenesen felfuggesztjuk
		if (isAutoPlay!==true) {
			this.parent.stopAutoPlay();
			// ujrainditjuk az autoplayt
			this.parent.startAutoPlay.delay(this.parent.autoPlayDelay, this.parent);
		}
		// gomb allapotanak beallitasa
		$$('a[class$="actual"]').removeClass('actual');
		this.button.addClass('actual');
		// foto megjelenitese
		this.pic.fade('in');
		if (this.parent.actual!=null) this.parent.portfolioItems[this.parent.actual].pic.fade('out');
		// leiras effekt
		var slideFx = new Fx.Tween(this.parent.descrSlider, {
			transition: 'sine:in:out',
			duration: 600,
			fps: 60
		});
		slideFx.start('margin-left', -( this.iterator*this.descr.offsetWidth )+'px');
		this.parent.actual = this.iterator;
	},
	zoom: function() {
		Slimbox.open(this.parent.options.zoomPath+this.el.id+'.jpg', '', {
			initialHeight: 0,
			initialWidth: 610,
			captionAnimationDuration: 400,
			resizeDuration: 400
		});
	}
})