var template = '<p><a href="#link" target="_blank">#title</a></p>';
template    += '<p><img src="http://b.hatena.ne.jp/entry/image/#link">';
template    += '&nbsp;<a href="http://b.hatena.ne.jp/entry/#link"><img src="style/images/b_entry.gif" width="16" height="12" style="border: none;" alt="このエントリーを含むはてなブックマーク" title="このエントリーを含むはてなブックマーク"></a>';
var template_no_use_author = template;

var feeds = new Array();
feeds[0] = {id : "feed0" , entries : 10, url : ["http://b.hatena.ne.jp/entrylist?mode=rss&url=http%3A%2F%2Fwww.ark-web.jp%2F&sort=eid&threshold=3"]};


// FeedControlクラス
var FeedControl = Class.create();
FeedControl.prototype = {
    initialize: function(id, entries, urlList) {
        this._id = id;
        this._entries = entries;
        this._urlList = urlList;
        this._urlListLen = urlList.length;
        this._currentLen = 0;
        this._feeds = new Array();
    },
    draw: function() {
        for (var i = 0 ; i < this._urlList.length ; i++) {
            var feed = new google.feeds.Feed(this._urlList[i]);
            feed.setNumEntries(this._entries);
            var oFeedControl = this;
            feed.load(function(result){ oFeedControl.loaded(result, oFeedControl); });
        }
    },
    loaded: function(result, oFeedControl) {
        if (result.error) return;
        for (var i = 0; i < result.feed.entries.length; i++) {
            var entry = result.feed.entries[i];
            var date  = parseDate(entry.publishedDate);
            // あとでtimestampで並べ替えるために二重配列にしておく
            oFeedControl._feeds.push([date.timestamp, render(entry)]);
        }
        oFeedControl._currentLen++;
        if (oFeedControl._currentLen == oFeedControl._urlListLen)
            oFeedControl.loadFinish();
    },
    loadFinish: function() {
//        this._feeds.sort(byFirstMemberDesc);
        
        var container = document.getElementById(this._id);
        container.innerHTML = '';
        for (var i = 0 ; i < this._entries ; i++) {
            container.innerHTML += this._feeds[i][1];
        }
    }
};

// main
google.load("feeds", "1");
google.setOnLoadCallback(OnLoad);

function OnLoad() {
    for (var i = 0 ; i < feeds.length ; i++) {
        var oFeedControl = new FeedControl(feeds[i].id, feeds[i].entries, feeds[i].url);
        oFeedControl.draw();
    }
}


// subroutine
function parseDate(date) {
    var obj = new Date(date);
    var retval = new Array();
    retval['year']  = obj.getFullYear();
    retval['month'] = obj.getMonth() + 1;
    retval['date']  = obj.getDate();
    retval['timestamp'] = obj.getTime();
    return retval;
}

function render(entry) {
    var date = parseDate(entry.publishedDate);
    var str = template;
    if (entry.author == '') {
        str = template_no_use_author;
    }
    str = str.replace(/#year/g, date.year);
    str = str.replace(/#month/g, date.month);
    str = str.replace(/#date/g, date.date);
    str = str.replace(/#link/g, entry.link);
    str = str.replace(/#title/g, entry.title);
    str = str.replace(/#content/g, entry.contentSnippet);
    str = str.replace(/#author/g, entry.author);
    return str;
}

function byFirstMemberDesc(a, b) {
    return b[0] - a[0];
}

