(function($) {
	$.fn.panview = function(o)
	{
		var opts = $.extend({}, $.fn.panview.defaults, o);
		return $(this).each(function(){
			new $.panview(this, opts);
		});
	};
	
	$.fn.panview.defaults = {
		rootClass: 'panview',
		listClass: 'panview-list',
		slideClass: 'panview-slide',
		controlsClass: 'panview-controls',
		prevClass: 'panview-left',
		nextClass: 'panview-right',
		activeClass: 'panview-active',
		cycle: false,
		duration: 250,
		start: 0
	};

        $.panview = function(el, o)
	{
		$.data(el, 'panview', this);
		
		var self = this;
		
		this.o = o;
		this.root = $(el);
		this.list = $('.' + this.o.listClass, this.root);
		this.list.css('overflow', 'hidden');
		this.slides = this.list.children('.' + this.o.slideClass);
		this.prev = $('.' + this.o.prevClass, this.root);
		this.next = $('.' + this.o.nextClass, this.root);
		
		if(!this.slides.filter('.' + this.o.activeClass).length)
			this.slides.eq(0).addClass(this.o.activeClass);
		
		this.active = self.slides.filter('.' + this.o.activeClass);
		
		this.prev.click(function(){
			self.prevClick();
		});
		
		this.next.click(function(){
			self.nextClick();
		});
	};

        $.extend($.panview.prototype, {
		nextClick: function()
		{
			var next = this.active.next();
			
			if(!next.length)
				next = this.slides.eq(0);
			
			this.active.fadeOut(this.o.duration).removeClass(this.o.activeClass);
			next.fadeIn(this.o.duration).addClass(this.o.activeClass);
			this.active = next;
			
			this.next.blur();
		},
		
		prevClick: function()
		{
			var prev = this.active.prev();
			
			if(!prev.length)
				prev = this.slides.eq(this.slides.length - 1);
			
			this.active.fadeOut(this.o.duration).removeClass(this.o.activeClass);
			prev.fadeIn(this.o.duration).addClass(this.o.activeClass);
			this.active = prev;
			
			this.prev.blur();
		}
	});
})(jQuery);

