﻿var RssValueGetters = (function() {
    function Class() { }

    Class.prototype = {
        feed: {},
        item: {},
        getFeedGetter: function(key) { return this.feed[key]; },
        addFeedGetter: function(key, func) { this.feed[key] = func; return this; },
        removeFeedGetter: function(key, func) { delete this.feed[key]; return this; },
        getItemGetter: function(key) { return this.item[key]; },
        addItemGetter: function(key, func) { this.item[key] = func; return this; },
        removeItemGetter: function(key) { delete this.item[key]; return this; },

        clone: function() {
            var clone = new Class();
            for (var key in this.feed) { clone.addFeedGetter(key, this.getFeedGetter(key)); }
            for (var key in this.item) { clone.addItemGetter(key, this.getItemGetter(key)); }
            return clone;
        }
    }

    return Class;
})();

var defaultRssValueGetters = new RssValueGetters()
    .addFeedGetter("feedTitle", function(feedJson) { return feedJson.title; })
    .addFeedGetter("feedLink", function(feedJson) { return feedJson.link; })
    .addFeedGetter("feedDescription", function(feedJson) { return feedJson.description; })
    .addFeedGetter("feedAuthor", function(feedJson) { return feedJson.author; })
    .addItemGetter("index", function(itemJson) { return itemJson.index; })
    .addItemGetter("title", function(itemJson) { return itemJson.title; })
    .addItemGetter("link", function(itemJson) { return itemJson.link; })
    .addItemGetter("content", function(itemJson) { return itemJson.content; })
    .addItemGetter("contentSnippet", function(itemJson) { return itemJson.contentSnippet; })
    .addItemGetter("publishedDate", function(itemJson) { return itemJson.publishedDate; });



