(function( $ ){
$.fn.slider = function ( options ) {    
	return this.each(function () {
		var $wrapper = $('> div', this).css('overflow', 'hidden'),
            $slider = $wrapper.find('> ul'),
            $items = $slider.find('> li'),
            $single = $items.filter(':first');
		
		var settings = {
            singleWidth : $single.outerWidth(),
            visible : Math.ceil($wrapper.innerWidth() / $single.outerWidth()),
			pages : Math.ceil($items.length),
            currentPage : 0,
			left : '.left',
			right : '.right'
		};
		
		if ( options ) { 
			$.extend( settings, options );
		}

		reset();
		
		// 4. paging function
		function gotoPage( page ) {
            var dir = page < settings.currentPage ? -1 : 1,
                n = Math.abs(settings.currentPage - page),
                left = settings.singleWidth * dir * n;
			if (page >= 0 && page < settings.pages) {
				$wrapper.filter(':not(:animated)').animate({
					scrollLeft : '+=' + left
				}, 500, function () {
					settings.currentPage = page;
					// pagination
					settings.pageIndicator && $(settings.pageIndicator).text( settings.currentPage+1 );
					// navigational arrows
					// show by default
					$(settings.left+',' +settings.right).show();
					// hide left if at start of the list
					settings.currentPage == 0 && $(settings.left).hide();
					// hide right if at the end of the list
					settings.currentPage == (settings.pages-1) && $(settings.right).hide();
				});
			}
            return false;
        }
		
		function nextPage() {
			gotoPage( settings.currentPage + 1 );
		}
		function prevPage() {
			gotoPage( settings.currentPage - 1 );
		}
		window.Slider_gotoPage = gotoPage;
		window.Slider_nextPage = nextPage;
		window.Slider_prevPage = prevPage;
		window.Slider_reset = reset;
		
		// resset
		function reset() {
			$wrapper.scrollLeft( 0 );
            $items = $slider.find('> li');	
			settings.pages = Math.ceil($items.length);
			settings.currentPage = 0;
			
			// pagination
			settings.pagination && $(settings.pagination).text( settings.pages );
			settings.pageIndicator && $(settings.pageIndicator).text( settings.currentPage+1 );
			
			// navigational arrows
			// show by default
			$("#shopbottomnav span", settings.left+',' +settings.right).show();
			// hide if only one page
			settings.pages <= 1 && $(settings.left+',' +settings.right).hide();
			// hide left if at start of list
			settings.currentPage == 0 && $(settings.left).hide();
			
			// Hide pagination
			if( settings.pages == 0 ) {
				$("#shopbottomnav span").hide();
				$("#category-products .slideparent").html('<p class="note-msg">'+settings.emptyText+'</p>');
			}
		}
		
		// 5. Bind to the forward and back buttons
        $(settings.left).click(function () {
            return prevPage();
        });
        $(settings.right).click(function () {
            return nextPage();
        });
		
    });  
};
})( jQuery );
