/**
 * Fotoslider
 * *** narozdil od predchozi verze (ren. dealeri) umi i vice slideru na jedne strance ***
 * @author Michal Sobola <msobola@seznam.cz>
 * @revision 2010-11-10
 * @version 2.0.1
 **/

/**
 * ~changelog from 1.0 
 * 1.0.0 - je na dealerech, puvodni verze
 * 2.0.0 - je na anli, upgradovana verze
 * 2.0.1 - stejna funkcnost, jen jsem pridal changelog
 **/
function Photoslider(_cls, _cfg, _cnt){
	var cls = {
		pager  : {
			next : '.next',  // posouvaci odkaz : nasledujici
			prev : '.prev',  // posouvaci odkaz : predchazejici
			active : 'active' // tridy se pridavaji, kdyz slide dojede nakonec (bez tecek)
		},
		images : {
			small : '.slider .inner img', // male fotky
			big   : '.photos .big'        // jedna velka fotka
		},
		links  : '.slider .inner a', // odkazy nad malymi fotkami
		slider : '.slider .inner'    // slidovaci div [absolutni pozice]
	};
	var config = {
		sizes : {
			big   : { w : 301, h : 225 }, // velky obrazek velikost
			small : { w : 150, h : 110 }  // maly obrazek - natvrdo se musi resiznout v html
		},
		time : 1000,
		iwid : 151, // musi se natvrdo nastavit sirka kazdeho nesmyslu
		_count : 1, // po kolika fotkach se sliduje - 1 nebo 2
		visible : 7
	};
	var len;
	var wid;
	var bigImg;	
	var slider;
	var sliding = false;
	var left;
	var target = null;
	var that = this;
	
	/**
	 * funkce na slide
	 * nejdrive si spocita pozici, kam ma dojet, pak tam dojede
	 * @param int smer : 1 nebo -1
	 **/
	this.slideIt = function(smer){	
		var oleft = parseInt(slider.css('left'));
		if (isNaN(oleft)) { 
			oleft = 0;
		}
		
		var oneWid = config.iwid;
		var next = oleft + (oneWid * smer);
		
		if (smer < 1){
			if (Math.abs(next) >= slider.width()){
				return that.stopSlide();
			}
		} else {
			if (next > 0){
				return that.stopSlide();
			}
		}
		
		slider.animate({
			left : next+'px'
		}, config.time, null, function(){
			return that.stopSlide();
		});
	};
	
	/**
	 * vraceni hodnot na puvodni
	 * volano vzdy po dojeti slidu jako return funkce nad
	 **/
	this.stopSlide = function(){
		that.passivateLink();
		sliding = false;
		target = null;
		return false;
	};

	/**
	 * pokud jsme nakonci / nazacatku, prida se trida
	 * definovano nahore
	 **/
	this.passivateLink = function(){
		if (left >= 0) {
			$(cls.pager.prev).addClass(cls.pager.active);
		} else {
			$(cls.pager.prev).removeClass(cls.pager.active);
		}
		if (left <= -(wid-(2*config.iwid))) {
			$(cls.pager.next).addClass(cls.pager.active);
		} else {
			$(cls.pager.next).removeClass(cls.pager.active);
		}
	};

	this.__construct = function(_cls, _cfg, _cnt){
		for (i in _cls) {
			cls[i] = _cls[i];
		}
		for (i in _cfg) {
			config[i] = _cfg[i];
		}
		
		len = _cnt;
		wid = Math.ceil(len/config.visible) * config.iwid;
		
		bigImg = $(cls.images.big);
		slider = $(cls.slider);
		slider.css('width', wid);
		
		if (config._count > 1) {
			len = (len % 2 == 1) ? len+1 : len;
		} else {
			config._count = 1;
		}
		
		$(cls.pager.next).click(function(){
			if (!sliding) {
				sliding = true;
				that.slideIt(-1);
			}
			return false;
		});
		
		$(cls.pager.prev).click(function(){
			if (!sliding) {
				sliding = true;
				that.slideIt(1);
			}
			return false;
		});
		
		$(cls.images.small).hover(function(){
			var attrs = get($(this).parent().attr('href'));
			bigImg.css({ backgroundImage : "url('"+attrs.src+"')" });
			bigImg.attr('href', attrs.href);
		});
		
		$(cls.links).click(function(){
			return false;
		});
	};
	
	this.__construct(_cls, _cfg, _cnt);
}
