﻿(function ($)
{
    $.fn.boxAnimation = function (options)
    {
        $.fn.boxAnimation.defaults = {
            init: true,
            intTime: 5000,
            animSpeed: 1500,
            speedMooving: 1,
            waitTime: 5000
        };
        var settings = $.extend({}, $.fn.boxAnimation.defaults, options);

        return this.each(function ()
        {
            if (options)
            {
                $.extend(settings, options);
            }

            var ctnLink = $('<div class="ctn-link"></div>');
            $(this).append(ctnLink);

            var item = {
                $slider: $(this).find('.ctn-animation'),
                $box: $(this).find('.ctn-animation .animation'),
                $btn: $(this).find('.ctn-link')
            };

            var $boxSettings = { n: item.$box.length, w: item.$box.width() };
            var css;
            var timeId;
            var goToElement;
            var slideTime = settings.intTime;

            for (i = 0; i < item.$box.length; i++) { item.$btn.append('<a href="#' + i + '" rel="' + i + '"><span>Vai alla slide ' + i + '</span></a>'); }
            item.$btn.find('a:first').addClass('on');
            css = { width: ($boxSettings.w * $boxSettings.n) + 'px' };
            item.$slider.css(css);

            if (settings.init)
            {
                timeId = setTimeout(function ()
                {
                    loopSlide(1);
                }, slideTime);
            }

            function loopSlide(pos)
            {
                settings.init = false;
                var l = -$boxSettings.w;
                css = { left: l };
                if (pos == $boxSettings.n)
                {
                    pos = 0;
                }
                item.$slider.animate(css, settings.animSpeed, function ()
                {
                    item.$btn.find('a').removeClass('on');
                    item.$btn.find('a').eq(pos).addClass('on');
                    item.$slider.append(item.$slider.find('div:first'));
                    css = { left: 0 };
                    item.$slider.css(css);
                });
                timeId = setTimeout(function () { loopSlide(pos + 1); }, slideTime);
            }

            function goToSlide(pos, inc)
            {
                var l = -$boxSettings.w;
                css = { left: l };
                if (pos == $boxSettings.n)
                {
                    pos = 0;
                }

                item.$slider.find("li").hide();
                item.$slider.css(css);

                item.$slider.append(item.$slider.find('div:first'));
                css = { left: 0 };
                item.$slider.css(css);
                if (inc == pos)
                {
                    item.$slider.find("li").show();
                    item.$btn.find('a').removeClass('on');
                    item.$btn.find('a').eq(inc).addClass('on');
                }
                if (inc != pos)
                {
                    goToSlide(pos + 1, inc);
                }
                else
                {
                    timeId = setTimeout(function () { loopSlide(pos + 1, false); }, settings.waitTime);
                }
            }

            item.$btn.children().click(function ()
            {
                clearTimeout(timeId);
                clearTimeout(goToElement);
                item.$slider.stop(true, true);
                var pos = parseInt(item.$btn.find('a.on').attr('rel'));
                var inc = parseInt($(this).attr('rel'));
                if (pos != inc)
                    goToSlide(pos + 1, inc);
                return false;
            });
        });
    };
})(jQuery);
