(function($){
    $.fn.junaRotator = function(options) {
        var defaults = {
            timeout : 5000,
            fadeInSpeed : 'fast',
            fadeOutSpeed : 'slow',
            width : 170,
            height : 100,
            navigationImageActive : 'images/dotactive.png',
            navigationImageInactive : 'images/dotinactive.png',
            navigationPosition : 'topLeft', // Possible: topLeft, topRight, bottomLeft, bottomRight
            navigationWidth : 50
        };
        
        var options = $.extend(defaults, options);
        
        return this.each(function() {
            var el = $(this);
            var timer;
            
            el.css({
                width : options.width + 'px',
                height : options.height + 'px'
            });
            
            var slides = el.html();
            el.html('<div class="rotator"></div>');
            var rotator = el.find('.rotator');
            rotator.html(slides);
            
            rotator.find('.slide').addClass('inactive');
            rotator.find('.slide:eq(0)').removeClass('inactive').addClass('active');
            
            var positionNavigation = function() {
                var navigation = el.find('.rotatorNavigation');
                var oEl = el.offset();
                
                if ( options.navigationPosition == 'topLeft' ) {
                    var xNavigation = oEl.left;
                    var yNavigation = oEl.top;
                }
                if ( options.navigationPosition == 'topRight' ) {
                    var xNavigation = ( oEl.left + options.width ) - options.navigationWidth;
                    var yNavigation = oEl.top;
                }
                if ( options.navigationPosition == 'bottomLeft' ) {
                    var xNavigation = oEl.left;
                    var yNavigation = ( oEl.top + options.height ) - navigation.height();
                }
                if ( options.navigationPosition == 'bottomRight' ) {
                    var xNavigation = ( oEl.left + options.width ) - options.navigationWidth;
                    var yNavigation = ( oEl.top + options.height ) - navigation.height();
                }
                
                navigation.css({
                    top : yNavigation + 'px',
                    left : xNavigation + 'px',
                    width : options.navigationWidth + 'px'
                });
            }
            
            var buildNavigation = function() {
                var slides = rotator.find('.slide');
                var navigation = '';
                
                navigation += '<div style="clear: both">&#160;</div><ul class="rotatorNavigation">';
                
                for (var i = 0; i < slides.length; i++) {
                    navigation += 
                    '<li' + (i == 0 ? ' class="current"' : '') + '>'
                    + '<a href="javascript:;" id="' + i + '">'
                    + '<img src="' + ( i == 0 ? options.navigationImageActive : options.navigationImageInactive ) + '" alt="" />'
                    + '</a>'
                    + '</li>';
                }
        
                navigation += '<div class="clear">&#160;</div></ul>';
                
                el.append(navigation);
                
                el.find('.rotatorNavigation a').click(function() {
                    var index = $(this).attr('id');
                    showSlide(index);
                });
                
                positionNavigation();
            }
            
            var showSlide = function(next) {
                clearTimeout(timer);
                var navigation = el.find('.rotatorNavigation');
                
                var activeSlide = rotator.find('.slide.active');
                var nextSlide = rotator.find('.slide:eq(' + next + ')');

                var navigationActive = navigation.find('li.current');
                var navigationNext = navigation.find('li:eq(' + next + ')');
        
                activeSlide.fadeOut(options.fadeOutSpeed, function () {
                    $(this).addClass('inactive').removeClass('active');
                    nextSlide.fadeIn(options.fadeInSpeed, function () {
                        $(this).removeClass('inactive').addClass('active');
        
                        navigationActive.removeClass('current').find('img').attr('src', options.navigationImageInactive);
                        navigationNext.addClass('current').find('img').attr('src', options.navigationImageActive);
                    });
                });
        
                playRotator(nextSlide);
            }
            
            var playRotator = function(current) {
                var next = current.next().length ? current.next() : rotator.find('.slide:eq(0)');
                var nextIndex = rotator.find('.slide').index(next);
                timer = setTimeout(function () { showSlide(nextIndex); }, options.timeout);
            }
            
            buildNavigation();
            playRotator(rotator.find('.slide:eq(0)'));
        });
    };
})(jQuery);
