﻿/*
* vertical news ticker
* Tadas Juozapaitis ( kasp3rito@gmail.com )
* http://plugins.jquery.com/project/vTicker
*/
(function($) {
    $.fn.vTicker = function(options) {
        var defaults = {
            speed: 700,
            pause: 4000,
            showItems: 3,
            animation: '',
            mousePause: true,
            isPaused: false,
            direction: 'up',
            height: 0
        };

        var options = $.extend(defaults, options);

        calcHeightDiff = function(el) {
            var marginbottom = el.css('margin-bottom').toLowerCase().replace("px", "").replace("auto", "0");
            var margintop = el.css('margin-top').toLowerCase().replace("px", "").replace("auto", "0");
            var paddingbottom = el.css('padding-bottom').toLowerCase().replace("px", "").replace("auto", "0");
            var paddingtop = el.css('padding-top').toLowerCase().replace("px", "").replace("auto", "0");

            var heightdiff = parseInt(marginbottom) + parseInt(margintop) + parseInt(paddingbottom) + parseInt(paddingtop) + 1;
            return heightdiff;
        }

        moveUp = function(obj2, height, options) {
            if (options.isPaused)
                return;

            var obj = obj2.children('ul');

            var clone = obj.children('li:first').clone(true);

            if (parseInt(obj2.height()) > 0) {
                height = parseInt(obj.children('li:first').height()) + calcHeightDiff(obj.children('li:first'));
            }

            obj.animate({ top: '-=' + height + 'px' }, options.speed, function() {
                $(this).children('li:first').remove();
                $(this).css('top', '0px');
            });

            if (options.animation == 'fade') {
                obj.children('li:first').fadeOut(options.speed);
                if (options.height == 0) {
                    obj.children('li:eq(' + options.showItems + ')').hide().fadeIn(options.speed);
                }
            }

            clone.appendTo(obj);
        };

        moveDown = function(obj2, height, options) {
            if (options.isPaused)
                return;

            var obj = obj2.children('ul');

            var clone = obj.children('li:last').clone(true);

            if (parseInt(obj2.height()) > 0) {
                height = parseInt(obj.children('li:first').height()) + calcHeightDiff(obj.children('li:first'));
            }

            obj.css('top', '-' + height + 'px')
			.prepend(clone);

            obj.animate({ top: 0 }, options.speed, function() {
                $(this).children('li:last').remove();
            });

            if (options.animation == 'fade') {
                if (options.height == 0) {
                    obj.children('li:eq(' + options.showItems + ')').fadeOut(options.speed);
                }
                obj.children('li:first').hide().fadeIn(options.speed);
            }
        };

        return this.each(function() {
            var obj = $(this);
            var maxHeight = 0;

            obj.css({ overflow: 'hidden', position: 'relative' })
            .children('ul').css({ margin: 0, padding: 0 });

            if (options.height == 0) {
                obj.children('ul').children('li').each(function() {
                    if ($(this).height() > maxHeight) {
                        maxHeight = $(this).height();
                    }
                });

                obj.children('ul').children('li').each(function() {
                    $(this).height(maxHeight);
                });

                //obj.height(maxHeight * options.showItems);
            }
            else {
                obj.height(options.height);
            }

            var interval = setInterval(function() {
                if (options.direction == 'up') {
                    moveUp(obj, maxHeight, options);
                }
                else {
                    moveDown(obj, maxHeight, options);
                }
            }, options.pause);

            if (options.mousePause) {
                obj.bind("mouseenter", function() {
                    options.isPaused = true;
                }).bind("mouseleave", function() {
                    options.isPaused = false;
                });
            }
        });
    };
})(jQuery);
