( function ($) {
	var Rotator = {
		init: function (elem) {
			var elem = $(elem);
			
			this.prev = $('<a href="#" class="prevnext prev" data-action="prev">Forrige</a>').hide();
			this.next = $('<a href="#" class="prevnext next" data-action="next">Neste</a>');
			this.nav = elem.find('div.project_nav');
			this.navElems = this.nav.find('a');
			this.slider = elem.find('div.projects');
			this.slides = elem.find('div.project');
			this.slideWidth = this.slides.eq(0).outerWidth();
			
			this.currentScroll = 0;
			this.currentSlide = 0;
			this.maxSlides = this.slides.length;
			this.intervalTime = 7000;
			this.stopSlide = false;
			
			this.autoSlide = function () {
				var goto = Rotator.currentSlide === Rotator.maxSlides - 1 ? 0 : Rotator.currentSlide + 1;
				
				Rotator.goToSlide( goto );
			};
			
			this.interval = setTimeout(this.autoSlide, this.intervalTime);
			
			this.nav.delegate('a', 'click', function (e) {
				if ($(this).hasClass('nogo')) {
					return true;
				}
				
				e.preventDefault();
				
				var slideId = $(this).attr('data-id-ref');
				
				Rotator.goToSlide( slideId );
			});
			
			elem.delegate('a.prevnext', 'click', function (e) {
				e.preventDefault();
				
				var action = $(this).attr('data-action'),
					goTo = action === 'next' ? Rotator.currentSlide + 1 : Rotator.currentSlide - 1;
				
				Rotator.setActiveNavItem( goTo );
				Rotator.goToSlide( goTo );
			}).hover( function () {
				Rotator.stopSlide = true;
				clearTimeout(Rotator.interval);
			}, function () {
				Rotator.stopSlide = false;
				Rotator.interval = setTimeout(Rotator.autoSlide, Rotator.intervalTime);
			});
			
			this.prev.prependTo( elem );
			this.next.appendTo( elem );
			
			this.setActiveNavItem( 0 );
		},
		
		goToSlide: function (slide_id) {
			clearTimeout(this.interval);
			
			slide_id = parseInt(slide_id, 10);
			
			this.setActiveNavItem( slide_id );
			
			this.currentScroll = parseInt(Rotator.slideWidth, 10) * slide_id;
			this.currentSlide = slide_id;
						
			this.next[parseInt(slide_id, 10) === this.maxSlides - 1 ? 'hide' : 'show']();
			this.prev[parseInt(slide_id, 10) === 0 ? 'hide' : 'show']();
			
			this.slider.stop().animate({
				scrollLeft: Rotator.currentScroll
			}, 0, 'easeOutQuart', function () {
				if (Rotator.stopSlide) {
					return;
				}
				Rotator.interval = setTimeout(Rotator.autoSlide, Rotator.intervalTime);
			});
		},
		
		setActiveNavItem: function (slide_id) {
			this.navElems.removeClass('selected').filter('[data-id-ref="' + slide_id + '"]').addClass('selected');
		}
	};

	$.fn.rotator = function () {
		return this.each( function () {
			return Rotator.init(this);
		});
	}	
})(jQuery);
