(function () {
    "use strict";

    var templates = travi.templates,

        TEMPLATE_NAME = 'announcementItem',

        formatDate = function (date) {
            var formattedDate = new Date();
            formattedDate.setTime(date * 1000);
            formattedDate = formattedDate.format("l, F j, Y");

            return formattedDate;
        },

        updateLinks = function (prev, next, offset, found) {
            var $moreLink = $("a.more"),
                $prevLink = $("a.prev"),
                $divider = $("ul.pagination li.pipeDivider");

            $prevLink.attr('href', '/announcements/?offset=' + prev);
            $moreLink.attr('href', '/announcements/?offset=' + next);

            $divider.removeClass("outOfRange");
            if (offset <= 0) {
                $prevLink.parent().addClass("outOfRange");
                $divider.addClass("outOfRange");
            } else {
                $prevLink.parent().removeClass("outOfRange");
            }
            if (found > next) {
                $moreLink.parent().removeClass("outOfRange");
            } else {
                $moreLink.parent().addClass("outOfRange");
                $divider.addClass("outOfRange");
            }
        },

        getAnnouncements = function () {

            $.getJSON($(this).attr('href'), function (json) {
                $('#announcementsList dl').hide('blind', function () {
                    var $this = $(this);

                    $this.empty();

                    templates.get(TEMPLATE_NAME).then(function () {
                        $(json.updates).each(function () {
                            $('#announcementsList dl').append(
                                templates.render(TEMPLATE_NAME, this)
                            );
                        });
                    });

                    $this.show('blind', function () {
                        $this.trigger('announce-update');
                    });
                });

                updateLinks(json.prevOff, json.nextOff, json.offset, json.rowsFound);
            });

            return false;
        },

        init = function () {
            $.views.registerHelpers({
                formatDate: formatDate
            });

            $("ul.pagination a").click(getAnnouncements);
        };

    $(document).ready(init);

    travi.namespace('announcements', {
        init        : init,
        formatDate  : formatDate
    });
}());

