var ScrollGallery;

var Ivacy = Ivacy || {};

Ivacy.ScrollGallery = function(options) 
{
	this.settings =
    {
		container: null,
    	arrows: false,
		paginator: false,
		mode: "block",
		pagesCount: null,
		currentPage: 1,
		mousewheel: false,
		autoScroll: false,
		autoScrollPause: false,
		delta: 0,
		enabled: true
    };
	
	$.extend(this.settings, options);
	
	// vars
		   
	this._container = this.settings.container.find('.overflow');
	this._slider = this.settings.container.find('.slider');
	this._leftArrow = null;
	this._rightArrow = null;
	this._pagesCount = null;
	this._paginator = this.settings.container.find('.list');
	this._pagerBtns = null;

	this.init();
};

Ivacy.ScrollGallery.prototype = 
{
	/// PUBLIC
	
	init: function()
	{
		
		var me = this;
		
		if (this.settings.container.attr('rel'))
		{
			this.settings.delta = this.settings.container.attr('rel')*1;
		}
		
		this.settings.pagesCount = Math.ceil(this._slider.width()/(this._container.width()+this.settings.delta));
		
		if (this.settings.paginator)
		{
			this._paginatorInit();
			
			// Промотка ленты страницами
	
			this._pagerBtns.click(function()
			{
				if ( !$(this).hasClass('active') )
				{
					me._scrollToPage( $(this).attr('page') );
					me.settings.autoScrollPause = true;
				}
			});
		}
	
		if ( ( this.settings.autoScroll ) && ( this.settings.pagesCount > 1 ) )
		{
			this._autoScroll();
		}
		
		if ( this.settings.arrows )
		{
			this._leftArrow = this.settings.container.find('.left');
			this._rightArrow = this.settings.container.find('.right');
			
			this._leftArrow.filter('.js-scrollBack').click(function()
			{
					me._scrollToPage( me.settings.currentPage*1-1 );
					me.settings.autoScrollPause = true;
					
					return false;
			});
			
			this._rightArrow.filter('.js-scrollForward').click(function()
			{
					me._scrollToPage( me.settings.currentPage*1+1 );
					me.settings.autoScrollPause = true;
					
					return false;
			});
			
			this._checkArrows();
			
		}
		
		// Промотка ленты колесом мыши
		
		if ( this.settings.mousewheel )
		{
			
			
			this._container.mousewheel(function(event, delta ) {
				
				if ((delta > 0) && (!me._leftArrow.hasClass('hidden'))) {
					
					me._scrollToPage( me.settings.currentPage-1 );
					
				} 
				
				if ((delta < 0) && (!me._rightArrow.hasClass('hidden'))) {
					
					me._scrollToPage( me.settings.currentPage+1 );
					
				}
				
				return false;
						
			});
			
		}

	},
	
	/// PRIVATE
	
	// Инициализация пэйджинатора
	_paginatorInit: function()
	{
		
		//this._slider.width( this.settings.pagesCount*(this._container.width()+this.settings.delta) );
		
		for (i=1; i<= this.settings.pagesCount; i++) {
			this._paginator.append('<i class="item" page="' + i +  '">&nbsp;</i>');
		}
			   
		this._paginator.find('.item:first').addClass('active');
		this._pagerBtns = this._paginator.find('.item');
		
		if ( this.settings.pagesCount < 2 )
		{
			this._paginator.addClass('hidden');
		}
		
	},
	
	// Метод скрытия/показа стрелок прокрутки  
	_checkArrows: function()
	{
		
		if ( this.settings.currentPage == 1 ) {
			this._leftArrow.addClass('hidden');
		} else {
			this._leftArrow.removeClass('hidden');
		}
		
		if ( this.settings.currentPage == this.settings.pagesCount ) {
			this._rightArrow.addClass('hidden');
		} else {
			this._rightArrow.removeClass('hidden');
		}
		
   },
   
   // Скролить на страницу  
   _scrollToPage: function(page)
   {
		if (this.settings.enabled)
		{
			var me = this;  

			var newLeft = (-this.settings.delta - this._container.width())*( page - 1 );

			this._slider.animate({left: newLeft + "px"}, { duration: 800, easing: "easeInOutQuad", complete: function() { me.settings.enabled = true; } } );
			this.settings.enabled = false;
			this.settings.currentPage = page;

			if (this.settings.paginator)
			{
				this._pagerBtns.removeClass('active');
				$(this._pagerBtns[page-1]).addClass('active');
			}

			if ( this.settings.arrows )
			{
				this._checkArrows();
			}
		}
	
   },
   
   // Автоматическая цикличная прокрутка галлереи  
   _autoScroll: function()
   {
	   var me = this;
	   
	   setTimeout(function()
		{
			
			if ( !me.settings.autoScrollPause )
			{
				var curPage = me._paginator.find('.active');
				var nextPage = 1;
				
				if ( curPage.next().hasClass('item') )
				{
					
					nextPage = curPage.next();
					me._scrollToPage( nextPage.attr('page') );
					
				} else {
					
					me._scrollToPage(1);
					
				}
				
			} else {
				 setTimeout(function()
				{
					me.settings.autoScrollPause = false;
				}, 20000);
			}

			me._autoScroll();
		}, 20000);
   }
      
	
};

$.fn.ScrollGallery = function(options)
{
	this.each(function()
	{
		// options
		options = $.extend(options, {container: $(this)});
		
		// create
		ScrollGallery = new Ivacy.ScrollGallery(options);
	
	});
};

$(function()
{
	$('.js-slideShow').ScrollGallery({arrows: true, mousewheel: false, paginator: true, autoScroll: true});
});

