function SteumaNewsListing(current_id,listingElement,prevElement,nextElement)
{
    this.current_id = current_id;
    this.currentPageIndex = false;
    this.listing = listingElement;
    this.prev = prevElement;
    this.next = nextElement;
    this.messages = Array();
    this.pages = Array();

    this.setup = function()
    {
        var items = this.listing.getElements("dd");

        var currentPage = 0;
        this.pages[currentPage] = Array();

        for( var i = 0; i < items.length; i++ )
        {
            var id = items[i].getAttribute("itemid");
            var url = items[i].getElement("a").getAttribute("href");
            var title = items[i].getElement("a").innerHTML;
            var posted = items[i].getElement("div.posted span").innerHTML;
            
            this.messages[this.messages.length] = Array(id,title,posted,url);

            if( this.pages[currentPage].length == 3 )
            {
                currentPage++;
                this.pages[currentPage] = Array();
            }
            this.pages[currentPage][this.pages[currentPage].length] = id;
        }

        this.currentPageIndex = this.getPageById(this.current_id);

        if( this.currentPageIndex === false )
        {
            alert("Could not determine news page for " + this.current_id);
            return;
        }

        this.listing.empty();
        this.prev.setStyle("visibility","hidden");
        this.prev.instance = this;
        this.prev.addEvent("click",function(){
            this.instance.previousPage();
            return false;
        });
        this.next.setStyle("visibility","hidden");
        this.next.instance = this;
        this.next.addEvent("click",function(){
            this.instance.nextPage();
            return false;
        });

        this.renderView();

        this.listing.setStyle("height",this.listing.offsetHeight);
    }

    this.previousPage = function()
    {
        if( this.currentPageIndex > 0 )
        {
            this.currentPageIndex--;
            this.renderView();
        }
    }

    this.nextPage = function()
    {
        if( this.currentPageIndex < this.pages.length-1 )
        {
            this.currentPageIndex++;
            this.renderView();
        }
    }

    this.getPageById = function(id)
    {
        for( var i = 0; i < this.pages.length; i++ )
        {
            for( var j = 0; j < this.pages[i].length; j++ )
            {
                if( this.pages[i][j] == id )
                {
                    return i;
                }
            }
        }
        return false;
    }

    this.getMessageById = function(id)
    {
        for( var i = 0; i < this.messages.length; i++ )
        {
            if( this.messages[i][0] == id )
            {
                return this.messages[i];
            }
        }
        return false;
    }

    this.renderView = function()
    {
        this.listing.empty();

        // Render items
        for( var i = 0; i < this.pages[this.currentPageIndex].length; i++ )
        {
            var message = this.getMessageById(this.pages[this.currentPageIndex][i]);
            if( message === false )
            {
                alert("Could not get message " + this.pages[this.currentPageIndex][i]);
                return;
            }

            this.renderMessage(message[0],message[1],message[2],message[3]);
        }

        // Navigation
        if( this.currentPageIndex > 0 )
        {
            this.prev.setStyle("visibility","visible");
        }
        else
        {
            this.prev.setStyle("visibility","hidden");
        }
        if( this.currentPageIndex < this.pages.length-1 )
        {
            this.next.setStyle("visibility","visible");
        }
        else
        {
            this.next.setStyle("visibility","hidden");
        }
    }

    this.renderMessage = function(id,title,posted,url)
    {
        var item = new Element("dd");
        item.set("itemid",id);

        var anchor = new Element("a");
        anchor.set("text",title);
        anchor.set("title",title);
        anchor.set("href",url);
        anchor.inject(item);

        var published = new Element("div");
        published.addClass("posted");
        published.set("text","[Posted: " + posted + "]");
        published.inject(item);

        item.inject(this.listing);
    }
}