﻿var tickerSettings = {};

function initTicker(id, numberToShow, duration, startRightAway, stopOnMouseOver) {
    $(id).attr('numberToShow', numberToShow);
    $(id + ' li').slice(numberToShow).hide();

    tickerSettings[id] = {
        duration: duration,
        intervalId: null,
        isEnabled: false,
        inTransition: false,
    };

    if (startRightAway !== false)
        startTicker(id);

    if (stopOnMouseOver !== false) {
        $(id).mouseover(function () { if (tickerSettings[id].isEnabled) pauseTicker(id) });
        $(id).mouseout(function () { if (tickerSettings[id].isEnabled) startTicker(id) });
    } 
}

function startTicker(id, advanceToNextHeadline) {
    if (tickerSettings[id].intervalId == null) {
        tickerSettings[id].intervalId = setInterval('advanceTicker("' + id + '")', tickerSettings[id].duration);
        tickerSettings[id].isEnabled = true;

        if (advanceToNextHeadline === true)
            advanceTicker(id);
    }
}

function pauseTicker(id) {
    if (tickerSettings[id].intervalId != null) {
        clearInterval(tickerSettings[id].intervalId);
        tickerSettings[id].intervalId = null;
    }
}

function stopTicker(id) {
    pauseTicker(id);
    tickerSettings[id].isEnabled = false;
}

function advanceTicker(id) {
    var numberToShow, firstItem, firstItemMarkup, tickerWasRunning;

    if (tickerSettings[id].inTransition === false) {
        tickerSettings[id].inTransition = true;

        if (tickerSettings[id].isEnabled === true)
            pauseTicker(id);

        numberToShow = parseInt($(id).attr('numberToShow'));

        firstItem = $(id + ' li:first');
        firstItemMarkup = firstItem.html();

        firstItem.fadeOut(999, function () {
            $(this).remove();

            $(id).append('<li style="display:none">' + firstItemMarkup + '</li>');
            $(id + ' li').slice(0, numberToShow).show();
            $(id + ' li').slice(numberToShow).hide();

            tickerSettings[id].inTransition = false;

            if (tickerSettings[id].isEnabled === true)
                startTicker(id);
        });
    }
}
