(function(sk, $){

	/*
		Vytvořil:
		26.09.2011 | Michal Matuška
		
		Změny:
		-
		
		Opravené bugy:
		-
		
		Vyžaduje:
		-
		
		Popis:
		Vytovří automaticky scrollované panorama
		
		TODO:
		asix Y
	*/
	
	
	sk.widgets.Panorama = function(element, options)
	{	
		this.options = $.extend({
			panorama: '>*',			
			auto: true,
			pager: true,
			speedCoef: 50,
			axis: 'x'			
			
		}, options)
		
		var o = this.options;
		var props = {
			'x': {
				width: 'width'
			},
			'y': {
				width: 'height'
			}
		}
		
		this.$element = element.jquery ? element : $(element);
		this.$panorama = this.$element.find(o.panorama).css({'position':'relative'});
		this.$element.wrapInner('<div class="sk-panorama-clip"></div>');
		this.$clip = this.$element.find('.panorama-clip');
		
		this.width = this.$element[props[o.axis].width]();
		this.widthPanorama = this.$panorama[props[o.axis].width]();
		this.delta = this.widthPanorama - this.width;
	
		return this;
	};
	
	
	// PROTOTYPE
	var _fn = sk.widgets.Panorama.prototype;
	
	_fn.init = function()
	{
		if(!this.$element.length || !this.$panorama.length || this.delta < 1){
			return this;
		}
		
		var o = this.options;
		
		if(o.pager)
		{
			this.createPager();
			this.$prev
				.bind('mousedown', $.proxy(this.handlePrev, this))	
				.bind('click', $.proxy(this.handleClick, this))	
			this.$next
				.bind('mousedown', $.proxy(this.handleNext, this))	
				.bind('click', $.proxy(this.handleClick, this))		
		}
		
		if(o.auto)
		{
			this.left();
		}
		
		return this;
	};
	
	_fn.destroy = function()
	{
		var o = this.options;
		
		this.$control.unbind(this.options.eventName, this.handle);
		o.preventClickEvent && this.$control.unbind('click', this.handleClick);	
		o.closeSelector && this.$box.undelegate(o.closeSelector, o.closeEventName, this.handle);
		o.closeSelector && o.closePreventClickEvent && this.$box.undelegate(o.closeSelector, 'click', this.handleClick);
	};
	
	_fn.createPager = function(e)
	{ 
		this.$element.append('<span class="pager"><a class="prev" href="#"><span class="out">předchozí</span></a> <a class="next" href="#"><span class="out">další</span></a></span>')
		this.$pager = this.$element.find('.pager');
		this.$prev = this.$pager.find('.prev');
		this.$next = this.$pager.find('.next');
	};
	
	_fn.right = function(e)
	{ 
		
		var o = this.options;
		
		if(o.pager)
		{
			this.$prev.addClass('prev-disable');
			this.$next.removeClass('next-disable');
		}
		
		var left = parseInt( this.$panorama.css('left') );
			left = isNaN(left) ? 0 : left;
		var time = left * -1 * o.speedCoef;
		
		this.$panorama
			.animate({
				'left': 0
			}, time, 'linear', $.proxy(function(){  this.left() }, this));	
	};
	
	_fn.left = function(e)
	{ 
		
		var o = this.options;
		
		
		
		if(o.pager)
		{
			this.$next.addClass('next-disable');
			this.$prev.removeClass('prev-disable');
		}
		
		var left = parseInt( this.$panorama.css('left') );
			left = isNaN(left) ? 0 : left;
		var time = ( this.delta + left ) * o.speedCoef;
		
		this.$panorama
			.animate({
				'left': -this.delta
			}, time, 'linear', $.proxy(function(){ this.right() }, this));
	};
	
	_fn.handleNext = function(e)
	{ 
		this.$panorama.stop();
		this.left();
	};
	
	_fn.handlePrev = function(e)
	{ 
		this.$panorama.stop();
		this.right();
	};
	
	_fn.handleClick = function(e)
	{ 
		e.preventDefault() 
	};

})(sk, jQuery);

