/*
 *  Plugin Name : News Ticker
 *  Author      : Ibrahim Guncicekleri (MilSOFT ICT)
 *  Created On  : 11.07.2009
 */
(function($) {
    var $container = null;
    var defaults = {
        actionButton: null,
        delay:5000,
        language:0,
        pauseLabel:'Pause',
        pausePicture:'pause.png',
        resumeLabel:'Resume',
        resumePicture:'resume.png',
        url: 'announces.txt'
    };
    var sliderIntervalId;
    $.fn.newsTicker = function(options) {
        $container = this;
        if (options.language) { options.language -= 1; }
        options.actionButton = $(options.actionButton);
        var opts = $.extend(defaults, options);
        getData();
        if (!$container.ERROR_STATUS) {
            createLayout();
            initializeActionButton();
        }
    }
    function getData() {
        $.ajax({
            url:defaults.url,
            dataType:'json',
            async:false,
            success:function(json) {
                $container.ERROR_STATUS = false;
                $container.data('jsonData', json);
            },
            error:function() {
                $container.ERROR_STATUS = true;
            }
        });
    }
    function createLayout() {
        $container.append('<ul/>')
        var $newsHolder = $container.find('ul');
        $.each($container.data('jsonData').announces, function() {
            $newsHolder.append('<li>' + this.announce[defaults.language] + '</li>');
        });
    }
    function initializeActionButton() {
        setActionButtonToPause();
        defaults.actionButton.click(function() {
            setActionButtonToResume();
        }).css('cursor', 'pointer');
    }
    function setActionButtonToPause() {
        defaults.actionButton.attr({
            alt: defaults.pauseLabel,
            src: defaults.pausePicture,
            title: defaults.pauseLabel
        }).unbind('click').click(function() {
            setActionButtonToResume();
        });
        resume();
    }
    function setActionButtonToResume() {
        defaults.actionButton.attr({
            alt: defaults.resumeLabel,
            src: defaults.resumePicture,
            title: defaults.resumeLabel
        }).unbind('click').click(function() {
            setActionButtonToPause();
        });
        pause();
    }
    function resume() {
        doSlide();
        sliderIntervalId = setInterval(function() {
            doSlide();
        }, defaults.delay);
    }
    function pause() {
        clearInterval(sliderIntervalId);
    }
    function doSlide() {
        var tooFar = $container.height() + 50 + 'px';
        var slides = $container.find('ul > li');
        var currSlide, nextSlide;
        slides.each(function(index) {
            if (this.className == "active") {
                currSlide = $(this);
                currSlide.removeClass('active');
                nextSlide = $(slides[(index + 1) % slides.length]);
            }
        });
        if (currSlide) {
            currSlide.animate({top: '-' + tooFar}, 'slow', function() {
                nextSlide.animate({top: '5px', opacity: 1.0}, 'slow');
            });
            currSlide.css('top', tooFar);
        } else {
            nextSlide = $(slides[0]);
            nextSlide.animate({top: '5px', opacity: 1.0}, 'slow');
        }
        nextSlide.addClass('active');
        nextSlide.css('top', tooFar);
    }
})(jQuery);