(function($) {

    $.fn.dsnewsscroll = function(options) {
        var opts = $.extend({}, $.fn.dsnewsscroll.defaults, options);
        
        this.each(function() {
            var clipArea = $(this);
            var cntArea = clipArea.children(':first');
            var hoverElement = $(opts.hoverElement);            

            if (!hoverElement) {
                hoverElement = clipArea;
            }

            if (!cntArea) {
                return;
            }
            
            var timer = null;
            var speed = 0;
            var top = 0;
            var clipHeight = clipArea.height();
            var cntHeight = cntArea.height();
            var hoverHeight = hoverElement.height();
            var hoverOffset = hoverElement.offset();
            

            hoverElement.hover(
                function() {
                    scrollStart();
                },
                function() {
                    scrollStop();
                }
            );
            
            hoverElement.mousemove(function(e) {
                var pos = (e.pageY - hoverOffset.top)
                if (pos < opts.hoverArea || pos > (hoverHeight - opts.hoverArea)) {
                    speed = (pos / hoverHeight - 0.5) * 2 * opts.maxSpeed;
                } else {
                    speed = 0;
                }
                
            })
            
            function scrollStart() {
                timer = setInterval(scroll, 10);
            }
            
            function scrollStop() {                
                clearInterval(timer);
            }
                                    
            function scroll() {
                var diff = cntHeight - clipHeight;
                if (diff < 0) {
                    return;
                }
                
                top -= speed;
                if (top > 0) {
                    top = 0;
                }
                
                if (top < -diff) {
                    top = -diff;
                }
                
                cntArea.css('top', top + 'px');
            }

        });
        return this;
    };
    
    $.fn.dsnewsscroll.defaults = {
        'maxSpeed': 5,
        'hoverArea': 170
    };

})(jQuery);