/**
 * @category    Workbox jQuery
 * @package     wbRotate
 * @copyright   Copyright (c) 2009-2010 Workbox AB (http://www.workbox.se)
 * @license     http://www.opensource.org/licenses/bsd-license.php
 * @version     1.0.1
 * @date        2010-04-17 19:23:57
 */

(function($)
{

    $.fn.extend({

        wbRotate:function(options)
        {

            var defaults = {
                rotateInterval:8000,
                rotateIntervalClick:5000,
                shortName:'img'
            };
            var o = $.extend(defaults, options);
            var obj = $(this);
            var intervalHolder = 0;
            var objWidth = obj.width();

            return this.each(function()
            {
                if ($('ul li', obj).length > 1) {
                    $('ul li', obj).css({left:objWidth + 'px'});
                    $('ul li:first', obj).css({left:'0'});
                    $('.modRotatorControlsPrev', obj).bind('click', goToPrev);
                    $('.modRotatorControlsNext', obj).bind('click', goToNext);
                    var unique = 1;
                    $('ul li', obj).each(function()
                    {
                        $(this).attr('rel', o.shortName + unique);
                        $('#' + o.shortName + 'Navigation').append('<a href="#" rel="' + o.shortName + unique
                                                                 + '" class="' + o.shortName + 'Button wbButton wbButtonInactive">'
                                                                 + unique + '</a>');
                        unique++;
                    });
                    $('a:first', '#' + o.shortName + 'Navigation').removeClass('wbButtonInactive').addClass('wbButtonActive');
                    $('a.' + o.shortName + 'Button').bind('click', goToImg);
                    intervalHolder = setInterval(goToNext, o.rotateInterval);
                }
            });

            function goToPrev()
            {
                clearInterval(intervalHolder);
                var current = ($('ul li.show', obj)
                               ? $('ul li.show', obj)
                               : $('ul li:first', obj)),
                    prev = ((current.prev().length)
                            ? ((current.prev().hasClass('show'))
                               ? $('ul li:last', obj)
                               : current.prev())
                            : $('ul li:last', obj));
                var relCurrent = current.attr('rel');
                var relPrev = prev.attr('rel');
                $('a.' + o.shortName + 'Button[rel="' + relCurrent + '"]').removeClass('wbButtonActive').addClass('wbButtonInactive');
                $('a.' + o.shortName + 'Button[rel="' + relPrev + '"]').removeClass('wbButtonInactive').addClass('wbButtonActive');
                prev.css({left:'-' + objWidth + 'px'})
                    .addClass('show')
                    .stop()
                    .animate({left:'0'}, 300);
                current.stop()
                       .animate({left:objWidth + 'px'}, 300, function()
                       {
                           $(this).removeClass('show')
                       });
                intervalHolder = setInterval(goToNext, o.rotateInterval);
            }

            function goToNext()
            {
                clearInterval(intervalHolder);
                var current = ($('ul li.show', obj)
                               ? $('ul li.show', obj)
                               : $('ul li:first', obj)),
                    next = ((current.next().length)
                            ? ((current.next().hasClass('show'))
                               ? $('ul li:first', obj)
                               : current.next())
                            : $('ul li:first', obj));
                var relCurrent = current.attr('rel');
                var relNext = next.attr('rel');
                $('a.' + o.shortName + 'Button[rel="' + relCurrent + '"]').removeClass('wbButtonActive').addClass('wbButtonInactive');
                $('a.' + o.shortName + 'Button[rel="' + relNext + '"]').removeClass('wbButtonInactive').addClass('wbButtonActive');
                next.addClass('show')
                    .stop()
                    .animate({left:'0'}, 300);
                current.stop()
                       .animate({left:'-' + objWidth + 'px'}, 300, function()
                       {
                           $(this).css({left:objWidth + 'px'}).removeClass('show')
                       });
                intervalHolder = setInterval(goToNext, o.rotateInterval);
            };

            function goToImg(event)
            {
                event.preventDefault();
                clearInterval(intervalHolder);
                var clickRel = $(this).attr('rel');
                $('ul li.show', obj).stop()
                                    .animate({left:'-' + objWidth + 'px'}, 300, function()
                                    {
                                        $(this).css({left:objWidth + 'px'}).removeClass('show')
                                    });
                $('ul li[rel="' + clickRel + '"]', obj).addClass('show')
                                                       .stop()
                                                       .animate({left:'0'}, 300);
                $('a.' + o.shortName + 'Button').removeClass('wbButtonActive').addClass('wbButtonInactive');
                $('a.' + o.shortName + 'Button[rel="' + clickRel + '"]').removeClass('wbButtonInactive').addClass('wbButtonActive');
                intervalHolder = setInterval(resetInterval, o.rotateIntervalClick);
            };

            function resetInterval()
            {
                clearInterval(intervalHolder);
                intervalHolder = setInterval(goToNext, o.rotateInterval);
                goToNext();
            };

        }

    });

})(jQuery);

