(function(j) {
	j.fn.sparrCarousel = function() {
		function sparrRepeat( str, num ) {
			return new Array( num + 1 ).join( str );
		};

		return this.each( function() {
			var carousel = $('#city_wrapper');
			var slider = carousel.find('> .sparr_carousel');
			var items = slider.find('> .sparr_cities');
			var single = items.filter(':first');
			var singleWidth = 150; //single.outerWidth();   <<-- can't use outerWidth on hidden element
			var visible = Math.floor( 480 / singleWidth ); //carousel.innerWidth() / singleWidth);  <<-- can't use innerWidth on hidden element
			var currentPage = 1;
			var pages = Math.ceil(items.length / visible);

			// pad pages with empty recs if necessary
			if ( ( items.length % visible ) != 0 ) {
				slider.append( sparrRepeat( '<div class="sparr_cities"></div>', visible - ( items.length % visible ) ) );
				items = slider.find( '> .sparr_cities' );
			}

			// create carousel padding on left and right
			items.filter( ':first' ).before( items.slice(-visible).clone().addClass( 'cloned' ) );
			items.filter( ':last' ).after( items.slice(0, visible).clone().addClass( 'cloned' ) );
			items = slider.find( '> .sparr_cities' );

			// paging functionality
			function sparrPage( page ) {
				var dir = ( page < currentPage ) ? -1 : 1;
				var n = Math.abs( currentPage - page );
				var left = singleWidth * dir * visible * n;

				carousel.filter( ':not(:animated)' ).animate({
					scrollLeft : '+=' + left
				}, 1000, function() {
					if ( page == 0 ) {
						carousel.scrollLeft( singleWidth * visible * pages );
						page = pages;
					} else if ( page > pages ) {
						carousel.scrollLeft( singleWidth * visible );
						page = 1;
					}

					currentPage = page;
					$( "#chart_pages" ).text( 'Page ' + currentPage + ' of ' + pages );
				});
	
				return false;
			}

			
			$('.prevArrow').click( function() {
				return sparrPage( currentPage - 1 );
			});

			$('.nextArrow').click( function() {
				return sparrPage( currentPage + 1 );
			});

			// reset scroll
			carousel.scrollLeft( singleWidth * visible );

			$( "#chart_pages" ).text( 'Page ' + currentPage + ' of ' + pages );
		});

		return false;
	};
})(jQuery);


