(function($){
	$.fn.rotateMe = function(options){
		var defaults = {
			elemWidth : 366,
			showNumbers : true,
			slideAuto : true,
			slideTimer : 5
		};
		var settings = $.extend({},defaults,options);
		return this.each(function(){
			
			var mainObj = $(this);
			var subMainObj = mainObj.children("div");
			var slideObjs = mainObj.children("div").children("div");
			var slideNumber = subMainObj.children("div").length;
			var currNum = 0, pauseBtn; 
			var btnhover = "btnOn";
			
			// set main containers width
			subMainObj.css('width',(settings.elemWidth)+"px");
			
			// if slideAuto is True start interval
			function startInterval(){
				var slideTime = settings.slideTimer*1000;
				scSBInterval = setInterval(processAuto,slideTime);
			}
			
			// scrolling function
			function processBtn(_btnnum){
				var numberBtns = numberContainer.children("a");
				numberBtns.removeClass(btnhover);
				numberBtns.eq(_btnnum).addClass(btnhover);
				currNum=_btnnum; 
			}
			
			// auto scroll process
			function processAuto(){
				(currNum==(slideNumber-1)) ? currNum = 0 : currNum += 1;
				(settings.showNumbers) ? processBtn(currNum) : ''; 
				processTransition(currNum); 
			}
	
			// transition function
			function processTransition(_btnnum){
				subMainObj.children().eq(_btnnum).animate({opacity:1},300).css('z-index',1);
				subMainObj.children().not(slideObjs.eq(_btnnum)).animate({opacity:0},300).css('z-index',0);				
			}
			
			// show number buttons
			function showNumbers(){
				numberContainer = $(document.createElement("div")).addClass("navbuttons").css("bottom", 10).css("left", 10);
				slideObjs.each(function(i){
					numberContainer.append($(document.createElement("a")).click(function(e){processBtn(i); processTransition(i); (settings.slideAuto) ? clearInterval(scSBInterval) : ''; e.preventDefault();}).addClass("numbtn").text(i+1));
				});
				mainObj.append(numberContainer);
				numberContainer.children("a").eq(0).addClass(btnhover);
			}
			
			$.fn.opacity = function(_value) {
				return $(this).css('opacity',_value);
			};
			// feature initialization
			$.fn.initialize = function(){
				slideObjs.each(function(){
					slide = $(this);
					slide.width(settings.elemWidth).height(mainObj.height());
					slide.not(slideObjs.eq(0)).opacity(0).css('z-index',0);
					slideObjs.eq(0).opacity(1).css('z-index',1)
				});
				(settings.showNumbers) ? showNumbers() : '';
				if(settings.slideAuto){
					//mainObj.hover(function(){clearInterval(scSBInterval);},function(){startInterval(); });
					startInterval();
					pauseBtn = $(document.createElement("div")).addClass("pause");
					numberContainer.append(pauseBtn);
					pauseBtn.click(function(){
						if ($(this).hasClass("pauseOn")){
							startInterval();
							$(this).removeClass("pauseOn");
						} else {
							$(this).addClass("pauseOn");
							clearInterval(scSBInterval);
						}
					});
				}
			}
			mainObj.initialize();
		});
	}
})(jQuery);
