﻿(function ($) {
    $.fn.extend({
        tomdevContentRotator: function (options) {
            var spriteDefaults = {
                url: '',
                width: 0,
                height: 0,
                cls: 'tomdevContentRotatorSprite',
                btnCls: 'tomdevContentRotatorBtn',
                spacing: 7,
                paddingTop: 0
            };
            var defaults = {
                visible: 6500,
                hide: 1500,
                height: 0
            };
            var cache = [];
            var sprite = $.extend(spriteDefaults, options.sprite);
            var options = $.extend(defaults, options);
            var tdcr = $(this);
            var items = $(this).children();
            var slideWidth = $(this).width();
            var buttons = null;
            var visible = 0;
            var length = items.length;
            var fadeInt = null;
            var tdinner = '';
            var tdslider = $("<div>");
            var __preload = function () {
                var args_len = arguments.length;
                for (var i = args_len; i--; ) {
                    var cacheImage = document.createElement('img');
                    cacheImage.src = arguments[i];
                    cache.push(cacheImage);
                }
            }
            var __sprite = function () {
                var _width = ((length * sprite.width) + ((length - 1) * sprite.spacing));
                var container = $("<div class=\"" + sprite.cls + "\" style=\"clear:both\"></div>");
                container.css({ 'width': _width.toString() + 'px', 'height': sprite.height.toString() + 'px' });
                if (sprite.paddingTop > 0) {
                    container.css('margin-top', sprite.paddingTop.toString() + 'px');
                }
                for (i = 0; i < length; i++) {
                    var btn = $("<div class=\"" + sprite.btnCls + "\" n=\"" + i + "\"></div>");
                    $(btn).click(function () {
                        clearInterval(fadeInt);
                        tdslider.clearQueue();
                        $(buttons[visible]).css('background-position', '-' + sprite.width.toString() + 'px 0px');
                        tdslider.animate({ 'left': '+=' + (slideWidth * visible).toString() + 'px' }, 0);
                        visible = parseInt($(this).attr('n'));
                        $(buttons[visible]).css('background-position', '0px 0px');
                        tdslider.animate({ 'left': '-=' + (slideWidth * visible).toString() + 'px' }, 0);
                        fadeInt = setInterval(function () { __hide(); }, options.visible);
                    });
                    $(btn).css({ 'background-image': 'url(\'' + sprite.url + '\')', 'background-position': (i == 0 ? '0' : '-' + sprite.width.toString()) + 'px 0px ', 'width': sprite.width.toString() + 'px', 'height': sprite.height.toString() + 'px' });

                    if ((i + 1) < length)
                        $(btn).css('margin-right', sprite.spacing.toString() + 'px');

                    container.append(btn);
                }
                buttons = container.children();
                return container;
            }
            var __exec = function () {
                tdslider.css({ 'display': 'block', 'position': 'relative', 'left': '0px', 'width': (slideWidth * (length + 1)).toString() + 'px', 'height': defaults.height.toString() + 'px' });
                for (i = 0; i < length; i++) {
                    tdinner += '<div style=\"float:left\">' + $(items[i]).html() + '</div>';
                }
                tdinner += '<div style=\"float:left\">' + $(items[0]).html() + '</div>';
                tdslider.append(tdinner);
                tdcr.prepend(tdslider);

                if (sprite.url != '') {
                    __preload(sprite.url);
                    tdcr.append(__sprite());
                }

                var _height = options.height + sprite.height;
                tdcr.css({'height': _height.toString() + 'px', 'width': slideWidth.toString() + 'px', 'overflow': 'hidden', 'position': 'relative'});

                $(window).load(function () {
                    fadeInt = setInterval(function () { __hide(); }, options.visible);
                });
            };
            var __hide = function () {
                clearInterval(fadeInt);
                tdslider.animate({ 'left': '-=' + slideWidth.toString() + 'px' }, options.hide);
                fadeInt = setInterval(function () { __show(); }, options.hide);
            }
            var __show = function () {
                clearInterval(fadeInt);
                $(buttons[visible]).css('background-position', '-' + sprite.width.toString() + 'px 0px');
                visible++;
                if (visible == length) {
                    visible = 0;
                    tdslider.animate({ 'left': '+=' + (slideWidth * length).toString() + 'px' }, 0);
                }
                $(buttons[visible]).css('background-position', '0px 0px');
                fadeInt = setInterval(function () { __hide(); }, options.visible);
            };
            __exec();
            return this;
        }
    });
})(jQuery);