(function( $ ){

	$.fn.netrCarousel = function( options ) {
		var self = this;
		var settings = {
			'itemWidth': 242,
			'transitionSpeed': 500,
			'waitTime': 5000,
			'hiddenClass': 'hidden',
			'clipClass': 'carousel-clip',
			'activeClass': 'carousel-active',
			'prevClass': 'prev',
			'prevTitle': 'Föregående',
			'prevAlt': 'Föregående',
			'prevImage': '/web/asset/image/carousel-arrow-left.png',
			'nextClass': 'next',
			'nextTitle': 'Nästa',
			'nextAlt': 'Nästa',
			'nextImage': '/web/asset/image/carousel-arrow-right.png'
		};
		var animating = false;
		var moveLeft = function(el) {
			if (!animating) {
				animating = true;
				el.find('> div').removeClass(settings.hiddenClass);
				el.parent().animate({
					scrollLeft: settings.itemWidth + 'px'
				}, settings.transitionSpeed, function () {
					el.find('> div').first().appendTo(el);
					el.parent().scrollLeft(0);
					el.find('> div:gt(3)').addClass(settings.hiddenClass);
					animating = false;
				});
			}
		};
		var moveRight = function(el) {
			if (!animating) {
				animating = true;
				el.find('> div').removeClass(settings.hiddenClass);
				el.find('> div').last().prependTo(el);
				el.parent().scrollLeft(settings.itemWidth);
				el.parent().animate({
					scrollLeft: '0'
				}, settings.transitionSpeed, function () {
					el.scrollLeft(0);
					el.find('> div:gt(3)').addClass(settings.hiddenClass);
					animating = false;
				});
			}
		};
		return this.each(function(){
			var $this = $(this);
			var paused = false;
			if ( options ) {
				$.extend( settings, options );
			}
			var itemCount = $this.find('> div').length;
			if (itemCount > 4) {
				$this.parent().bind('mouseenter', function () {
					paused = true;
				}).bind('mouseleave', function () {
					paused = false;
				}).attr('role', 'marquee');
				var $links = $this.find('a');
				$links.bind('focus', function () {
					paused = true;
				}).bind('blur', function () {
					paused = false;
				});
				$this.wrap('<div class="' + settings.clipClass + '"></div>');
				var $prev = $('<button class="' + settings.prevClass + '" type="button" title="' + settings.prevTitle + '"><img src="' + settings.prevImage + '" alt="' + settings.prevAlt + '" /></button>');
				var $next = $('<button class="' + settings.nextClass + '" type="button" title="' + settings.nextTitle + '"><img src="' + settings.nextImage + '" alt="' + settings.nextAlt + '" /></button>');
				$prev.click(function () {
					moveRight($this);
				});
				$next.click(function () {
					moveLeft($this);
				});
				var $carouselContainer = $this.parent().parent();
				$carouselContainer.append($prev, $next);
				$carouselContainer.addClass(settings.activeClass);
				$carouselContainer.find('> button').bind('focus', function () {
					paused = true;
				}).bind('blur', function () {
					paused = false;
				});
				var itemsWidth = itemCount * settings.itemWidth;
				$this.css('width', itemsWidth);
				$this.find('> div:gt(3)').addClass(settings.hiddenClass);
				setInterval(function () {
					if (!paused) {
						moveLeft($this);
					}
				}, settings.waitTime);
			}
		});
	};

})( jQuery );
