﻿/** result.feed.entries :
author
categories
content
contentSnippet
link
publishedDate
title
*/

GoogleFeed_ItemBuilder = {
    TextDecode: function(str) {
        return str.replace(/&#39;/ig, "'").replace(/&quot;/ig, '"');
    },
    BuildAuthorAndPublishDate: function(author, pubDate) {
        if (author.length + pubDate.length == 0) { return ""; }
        else if (author.length != 0 && pubDate.length != 0) { return " [" + author + ", " + pubDate + "]"; }
        else { return " [" + author + pubDate + "]"; }
    },
    SimpleBuilder: function(container, item, hasAlt) {
        var a = document.createElement("A");
        a.setAttribute("target", "_blank");
        a.setAttribute("href", item.link);
        a.appendChild(document.createTextNode(GoogleFeed_ItemBuilder.TextDecode(item.title)));
        if (hasAlt) { a.setAttribute("title", item.contentSnippet); }
        container.appendChild(a);
        return a;
    },
    SimpleTitleBuilder: function(container, item, hasAlt) {
        var _title = item.title;
        item.title = item.title + GoogleFeed_ItemBuilder.BuildAuthorAndPublishDate(item.author, item.publishedDate);
        var _retVal = GoogleFeed_ItemBuilder.SimpleBuilder(container, item, hasAlt);
        item.title = _title;
        return _retVal;
    },
    AuthorAndTitleBuilder: function(container, item, hasAlt) {
        var a = document.createElement("A");
        a.appendChild(document.createTextNode(GoogleFeed_ItemBuilder.BuildAuthorAndPublishDate(item.author, item.publishedDate)));
        container.appendChild(a);

        GoogleFeed_ItemBuilder.SimpleBuilder(container, item, hasAlt);
        return a;
    },
    TitleAndContentBuilder: function(container, item) {
        GoogleFeed_ItemBuilder.SimpleBuilder(container, item, false);

        var div = document.createElement("Div");
        div.appendChild(document.createTextNode(item.contentSnippet));
        container.appendChild(div);
    },
    TitleAndPictureAndContentBuilder: function(container, item, hasAlt) {
        GoogleFeed_ItemBuilder.SimpleTitleBuilder(container, item, false);

        if (false) {
            var img = document.createElement("IMG");
            img.setAttribute("target", "_blank");
            img.setAttribute("href", item.link);
            container.appendChild(img);
        }

        var div = document.createElement("Div");
        div.appendChild(document.createTextNode(item.contentSnippet));
        container.appendChild(div);
    },
    TitleAndHTMLContentBuilder: function(container, item, hasAlt) {
        GoogleFeed_ItemBuilder.SimpleTitleBuilder(container, item, false);

        var div = document.createElement("Div");
        div.innerHTML = GoogleFeed_ItemBuilder.TextDecode(item.contentSnippet);
        container.appendChild(div);
    },
    GetBuilder: function(builderType) {
        switch (builderType) {
            case 0:
                return GoogleFeed_ItemBuilder.SimpleBuilder;
                break;
            case 1:
                return GoogleFeed_ItemBuilder.SimpleTitleBuilder;
                break;
            case 2:
                return GoogleFeed_ItemBuilder.AuthorAndTitleBuilder;
                break;
            case 3:
                return GoogleFeed_ItemBuilder.TitleAndContentBuilder;
                break;
            case 4:
                return GoogleFeed_ItemBuilder.TitleAndPictureAndContentBuilder;
                break;
            case 5:
                return GoogleFeed_ItemBuilder.TitleAndHTMLContentBuilder;
                break;
            default:
                return GoogleFeed_ItemBuilder.SimpleBuilder;
                break;
        }
    }
};

function GetParentByTagName(element, tagName) { var tag = element; tagName = tagName.toUpperCase(); while (tag.tagName.toUpperCase() != tagName) { tag = tag.parentNode; if (tag == null || tag.tagName == window.undefined) { return null; } } return tag; };

function GoogleFeed_HideEmptyInstance(container) {
    var dragPanel = GetParentByTagName(container, "dl");
    if (dragPanel != null) {
        dragPanel.style.display = "none";
    }
}

function GoogleFeed_Initialize(listid, rss, num, btype) {
    var feed = new google.feeds.Feed(rss);
    feed.setNumEntries(num);
    //feed.setResultFormat(google.feeds.Feed.JSON_FORMAT); //google.feeds.Feed.XML_FORMAT // google.feeds.Feed.MIXED_FORMAT

    var google_receive = function(result) {
        if (!result.error) {
            var container = document.getElementById(listid);
            if (container == null) {
                return;
            }

            //if (fun.length==0)
            //{
            //    fnHandler = function(item){return item.title;}
            //}
            //else
            //{
            //    eval("fnHandler = " + fun);
            //}
            //for (var i = 0; i < result.feed.entries.length; i++)
            //{
            //    var data = result.feed.entries[i];
            //    var li = document.createElement("li");
            //    container.appendChild(li);

            //    var a = document.createElement("A");
            //    a.appendChild(document.createTextNode(fnHandler(data)));
            //    a.setAttribute("target", "_blank");
            //    a.setAttribute("href", data.link);
            //    a.setAttribute("title", data.contentSnippet);
            //    li.appendChild(a);
            //}

            if (result.feed.entries.length == 0) {
                GoogleFeed_HideEmptyInstance(container);
                return;
            }

            var fnHandler = GoogleFeed_ItemBuilder.GetBuilder(btype);
            for (var i = 0; i < result.feed.entries.length; i++) {
                var data = result.feed.entries[i];
                var li = document.createElement("li");
                container.appendChild(li);

                fnHandler(li, data, true);
            }
        }
    }

    feed.load(google_receive);
}

function GoogleFeed_SetOnLoadCallback(listid, rss, num, btype) {
    google.setOnLoadCallback(function() { GoogleFeed_Initialize(listid, rss, num, btype) });
}
