jQuery.fn.rotator = function(options) {
    var settings = jQuery.extend({
        width: 0,
        effect: "fade",
        delay: 5000,
        auto: false,
        effectDelday: 1500,
        elements: null,
        navigator: null,
        previous: null,
        next: null,
        offsetTop: 0
    }, options);

    var currentIndex = 0;

    var obj = this;
    var elements = settings.elements;
    var navigator = settings.navigator?settings.navigator:null;
    var container;

    //console.log(elements.length);
    if (!elements.length) return false;
    if (elements.length == 1) return false;

    $(this).css({ position: 'relative' });

    if (settings.effect == "fade") {
        elements.each(function(index) {
            $(this).css({ position: 'absolute', top: settings.offsetTop, left: 0 });

            if (index > 0) {
                $(this).fadeOut(0);
            }
        });
    } else if (settings.effect == "scroll") {
        container = $('<div/>').css({ position: 'relative' });
        var parent = $(elements[0]).parent();
        var elementWidth = settings.width ? settings.width : $(elements[0]).width();
        //console.log(elementWidth);

        parent.css({ width: elementWidth, position: 'relative' });
        
        elements.each(function(index) {
            $(this).css({ width: elementWidth, overflow: 'hidden' });
            container.append($(this));
        });
        container.css({ width: elementWidth * elements.length });

        parent.append(container);
    } else {
        alert('Only fade and scrool allow for effect');
        return false;
    }

    var auto = function() {
		if (navigator)
	        $(navigator[currentIndex]).parent().removeClass('active');

        if (settings.effect == "fade") {
            $(elements[currentIndex]).fadeOut(settings.effectDelday);
        }

        currentIndex++;
        if (currentIndex >= elements.length) currentIndex = 0;
        
		if (navigator)
	        $(navigator[currentIndex]).parent().addClass('active');
			
        if (settings.effect == "fade") {
            $(elements[currentIndex]).fadeIn(settings.effectDelday);
        } else if (settings.effect == "scroll") {
            var target = -1 * currentIndex * settings.width;
            $(container).animate({ marginLeft: target }, settings.effectDelday);
        }
    }

    var cancelAuto = function() {
        $(obj).stopTime();
    }

	if (navigator) {	        
	    if (navigator.length) {
	        navigator.each(function(index) {
	            $(this).click(function() {
	                cancelAuto();
	                $(navigator[currentIndex]).parent().removeClass('active');
	
	                $(this).parent().addClass('active');
	                if (settings.effect == "fade") {
	                    $(elements[currentIndex]).fadeOut(settings.effectDelday);
	                } else if (settings.effect == "scroll") {
	                }
	
	                currentIndex = index;
	
	                if (settings.effect == "fade") {
	                    $(elements[currentIndex]).fadeIn(settings.effectDelday);
	                } else if (settings.effect == "scroll") {
	                    var target = -1 * currentIndex * settings.width;
	                    $(container).animate({ marginLeft: target }, settings.effectDelday);
	                }
	
	                return false;
	            });
	        });
	    }
	}
	
    if (settings.previous) {
        settings.previous.click(function() {
            cancelAuto();

            $(navigator[currentIndex]).parent().removeClass('active');
            if (settings.effect == "fade") {
                $(elements[currentIndex]).fadeOut(settings.effectDelday);
            } else if (settings.effect == "scroll") {
            }

            currentIndex--;
            if (currentIndex < 0) currentIndex = 0;

            $(navigator[currentIndex]).parent().addClass('active');
            if (settings.effect == "fade") {
                $(elements[currentIndex]).fadeIn(settings.effectDelday);
            } else if (settings.effect == "scroll") {
                var target = -1 * currentIndex * settings.width;
                $(container).animate({ marginLeft: target }, settings.effectDelday);
            }

            return false;
        });
    }

    if (settings.next) {
        settings.next.click(function() {
            cancelAuto();

            $(navigator[currentIndex]).parent().removeClass('active');
            if (settings.effect == "fade") {
                $(elements[currentIndex]).fadeOut(settings.effectDelday);
            } else if (settings.effect == "scroll") {
            }

            currentIndex++;
            if (currentIndex >= elements.length) currentIndex = 0;

            $(navigator[currentIndex]).parent().addClass('active');
            if (settings.effect == "fade") {
                $(elements[currentIndex]).fadeIn(settings.effectDelday);
            } else if (settings.effect == "scroll") {
                var target = -1 * currentIndex * settings.width;
                $(container).animate({ marginLeft: target }, settings.effectDelday);
            }


            return false;
        });
    }
	
	if (settings.auto)
	    this.everyTime(settings.delay, "autoplay", auto);
}