
(function($) {

	$.listSlider = function(el, options) {

		var base = this;


		base.init = function(){
			base.options = $.extend({}, $.listSlider.defaults, options);

			base.currentPage = 0;

			base.$el = $(el).wrap('<div class="listSlider"><div class="windowSlider" /></div>');
			base.$container = $(el).parent().parent();
			base.$window = $(el).parent();
			base.$back = $('<span class="arrow back"><a href="#"></a></span>');
			base.$forward = $('<span class="arrow forward"><a href="#"></a></span>');

			base.$container.prepend(base.$back );
			base.$container.prepend(base.$forward);
			base.$window.css ({
				'overflow' : 'hidden',
				'position' : 'relative'
			})
			
			var w = 0;

			base.$el.children().each (function (i) {
				w += $(this).outerWidth(true);
			});
			
			base.$el.width(w);
			base.$el.css ({
				'position' : 'absolute'
			});

			base.nbPages = Math.ceil(w / base.$window.width());

			if (base.nbPages == 1) {
				base.$el.find('.arrow').hide();
			}

			base.$back.bind ('click', function (e) {
				base.previousPage();
				e.preventDefault();
			});

			base.$forward.bind ('click', function (e) {
				base.nextPage();
				e.preventDefault();
			})
			
			base.checkArrows ();

		};

		base.gotoPage = function (page) {

			base.$el.animate ({
				'left' : - (page) * base.$window.width()
			});
			base.currentPage = page;
			base.checkArrows();
		}

		base.nextPage = function () {
			
			if (base.currentPage == base.nbPages - 1) {
				return;
			}

			base.gotoPage (base.currentPage + 1);
		}


		base.previousPage = function () {

			if (base.currentPage == 0) {
				return;
			}

			base.gotoPage (base.currentPage - 1);

		}

		base.checkArrows = function () {
			if (base.currentPage == 0) {
				base.$back.hide();
			} else {
				base.$back.show();
			}

			if (base.currentPage == base.nbPages - 1) {
				base.$forward.hide();
			} else {
				base.$forward.show();
			}
		}

		base.init();
	}

	$.listSlider.defaults = {};

	$.fn.listSlider = function(options) {

		return this.each(function(i){
			new $.listSlider(this, options);
		});
	};

})(jQuery);
