(function($){
	$.fn.rollSM = function( applyStyles ){
		//Begin Customize
		var timeInterval = 7000;		//transition time in milliseconds
		
		//Customize Styles
		var boxPadding = "0.6em 0.8em";
		var opacity = 0.6;
		var textColor = "#fff";
		//End Customize
		
		//Lets get started
		var element = this;
		var numListElements = $(element).children("li").size();
		var currentListElement = 0;
		
		//Apply styles if applyStyles true
		var imageHeight = $(element).children("li").children("img").height();
		var imageWidth = $(element).children("li").children("img").width();
		mainStyles();
		
		//Hide all list elements,  setup WAI-ARIA
		$(element).children("li").hide();
		$(element).attr("role","marquee");
		$(element).children("li").attr("aria-live","polite");
		$(element).children("li").attr("aria-hidden","true");
		
		//call rotate initially to show first element, and set interval
		rotate();
		var intervalID = setInterval( function(){rotate();}, timeInterval );
		handleMouse();

		function rotate(){
			var previousListElement = currentListElement - 1;
			if( previousListElement == -1 ){
				previousListElement = numListElements - 1;
			}
			
			$(element).children("li").eq(previousListElement).hide();
			$(element).children("li").eq(previousListElement).attr("aria-hidden","true");
			$(element).children("li").eq(currentListElement).show();
			$(element).children("li").eq(currentListElement).attr("aria-hidden","false");
		
			currentListElement++;
			if( currentListElement == numListElements ){
				currentListElement = 0;
			}
		}
		
		function mainStyles(){
			if( applyStyles ){
				$(element).css("height", imageHeight);
				$(element).children("li").children("img").css("position", "absolute");
				$(element).children("li").children("div").css({
					"background" : "#000",
					"left" : "0",
					"opacity" : opacity,
					"position" : "relative",
					"top" : "0",
					"width" : imageWidth
				});
				$(element).children("li").children("div").children("p").css({
					"color" : textColor,
					"padding" : boxPadding
				});
			}
		}
		
		function handleMouse(){
			$(element).mouseenter(function(){
				clearInterval( intervalID );
			}).mouseleave(function(){
				intervalID = setInterval( function(){rotate();}, timeInterval );
			});
		}
	};
})(jQuery);