;(function($) {

    $.newsTicker = function(el, options) {

        var defaults = {
            duration: 'auto',
            distanceToMove: null,
            originalEl: null,
            timeout: null,
            timer: null,
            elaspedTime: 0
        }

        var plugin = this;

        plugin.settings = {}

        var init = function() {
            plugin.settings = $.extend({}, defaults, options);
            plugin.el = el;
            plugin.settings.originalEl = el.clone();


            plugin.durationSpeed();

            plugin.scrollContainer();

            plugin.el.bind('mouseover', plugin.mouseOver);
            plugin.el.bind('mouseout', plugin.mouseOut);
        }

        plugin.scrollContainer = function() {
            var parent = plugin.el;
            var distance = 0;

            parent.html(parent.html() + parent.html());
            $(parent.children()).each(function(i, el) {
                $(this).css('float', "left");
                distance += $(this).outerWidth(true);
            });
            plugin.settings.distanceToMove = distance;

            $mask = $('<div class="mask"></div>');
            parent.wrap($mask);
            parent.css({ 'position': "relative" });
            $mask.css({ 'width': parent.width(), 'overflow': 'hidden' });
            parent.width(distance);

            plugin.elaspedTime();
            plugin.loopAnimation();
        }

        plugin.mouseOver = function(e) {
            clearInterval(plugin.settings.timer);
            $(this).stop();
        }

        plugin.mouseOut = function(e) {
            plugin.el.animate({ 'left': -(plugin.settings.distanceToMove / 2) }, plugin.settings.duration - (plugin.settings.elaspedTime * 1000), "linear", function() { plugin.loopAnimation(); });
            plugin.elaspedTime();
        }

        plugin.loopAnimation = function() {
            plugin.settings.elaspedTime = 0;
            plugin.el.css('left', '0px');
            plugin.el.animate({ 'left': -(plugin.settings.distanceToMove / 2) }, plugin.settings.duration, 'linear', function() { plugin.loopAnimation(); });
        }

        plugin.durationSpeed = function() {
            var parent = plugin.el;
            var time = 0;
            $(parent.children()).each(function(i, el) {
                if (plugin.settings.duration == 'auto') {
                    var width = $(this).outerWidth()*20
                    time += width;
                } else {
                    time += plugin.settings.duration;
                }
            });
            plugin.settings.duration = time;
        }

        plugin.elaspedTime = function() {
            plugin.settings.timer = setInterval(function() { plugin.settings.elaspedTime += 0.1; }, 100)
        }


        init();

    }

})(jQuery);
