
with({ $:jQuery, init:null }) {
    init = function() {

	function formatter(entryTitleLen, blogTitleLen) {
	    function trim(str, len) {
		if(str.length <= len) {
		    return str;
		}
		return str.substr(0, len) + "...";
	    }

	    return function (entry, feed) {
		var entryTitle = $('<span />').addClass('entry').text(trim(entry.title, entryTitleLen));
		var blogTitle = $('<span />').addClass('blog').text("["+ trim(feed.title, blogTitleLen) +"]");
		var date = this.formatDate(entry.publishedDate);

		var link = $('<a />').
		    attr({href: entry.link, title: entry.title +" | "+ feed.title}).
		    append(entryTitle).append(blogTitle);
		return $('<li />').append(link).append(date);
	    }
	}

	function formatDatex(str) {
	    var date = new Date(str);
	    return $('<span />').addClass('date')
		.text(date.getFullYear() +"年"+ (date.getMonth()+1) +"月"+ date.getDate() +"日");
	}

	function outputter(total) {
	    return function (container, all, completed) {
		//if(!completed) {
		//    return;
		//}
		if(all.length >= total) {
		    all = all.slice(0, total);
		}
		container.empty();
		$.each(all, function() { container.append(this); });
	    }
	}

	var container = $('#blog-feeds');
	var opts = {};
	opts.formatDate = formatDatex;
	opts.urls = String(container.attr('title')).replace(/^\s+|\s+$/, '').split(/\s+/);
	container.attr('title', '');

	var className = container.attr('class');
	var match,
	totalEntries = 50,
	entryTitleLen = 150,
	blogTitleLen = 150;

	if(match = /num-entries-(\d+)/.exec(className)) {
	    opts.numEntries = parseInt(match[1]);
	}
	if(match = /entry-title-len-(\d+)/.exec(className)) {
	    entryTitleLen = parseInt(match[1]);
	}
	if(match = /blog-title-len-(\d+)/.exec(className)) {
	    blogTitleLen = parseInt(match[1]);
	}
	if(match = /total-entries-(\d+)/.exec(className)) {
	    totalEntries = parseInt(match[1]);
	}

	opts.format = formatter(entryTitleLen, blogTitleLen);
	opts.output = outputter(totalEntries);
	container.googleMultiFeed(opts);
    };

    google.setOnLoadCallback(init);
}

