// -*- ecmascript -*-

/**
 * Code to add a Google reader feed to index.php.
 *
 * Usage (adjust as necessary):
 *
 *  <script type="text/javascript" src="readerfeed.js"></script>
 *  <script type="text/javascript">
 *  new ReaderFeed('user/08634072165566464123/state/com.google/broadcast', 10);
 *  </script>
 *
 **/

function ReaderFeed (feed_id, item_count) {
    this.index = ReaderFeed._count++;
    var id = 'myreaderfeed' + this.index;
    document.write('<div id="' + id + '"></div>');
    this.div = document.getElementById(id);

    if (typeof window.readerfeeds == 'undefined') {
	window.readerfeeds = new Array();
    }
    window.readerfeeds[this.index] = this;

    this.feed_id = feed_id;
    this.item_count = item_count;

    var more = this.addLink("More Shared Articles...",
			    'http://www.google.com/reader/shared/'
			    + this.feed_id);
    more.style.fontStyle = 'italic';
    more.title = "Jeff's Google Reader Shared Items";

    var self = this;
    window.onload = function () { self.getFeed(); }
}

ReaderFeed._count = 0;

ReaderFeed.prototype = {
    getFeed: function () {
	var url = ( 'http://www.google.com/reader/public/javascript/'
		    + this.feed_id
		    + '?n=' + this.item_count
		    + '&callback=readerfeeds[' + this.index + '].addFeed' );
	var script = document.createElement('script');
	script.setAttribute('src', url);
	script.setAttribute('type', 'text/javascript');
	this.div.parentNode.appendChild(script);
    },


    addFeed: function (feed) {
        // Ensure feed doesn't get added twice.
        this.addFeed = function (feed) {};

        var tail = this.div.firstChild;

	for (var i = 0; i < feed.items.length; i++) {
	    if (i > 0) this.addSpace(tail);
	    this.addItem(feed.items[i], tail);
	}
	this.addBr(tail);
    },

    addLink: function (text, href, before) {
	var anchor = document.createElement('a')
	anchor.setAttribute('href', href);
	anchor.appendChild(document.createTextNode(text));
	return this.addNode(anchor, before);
    },

    addNode: function (node, before) {
	if (before) {
	    this.div.insertBefore(node, before);
	} else {
	    this.div.appendChild(node);
	}
	return node;
    },

    addItem: function (item, before) {
	var link = this.addLink(this.shortTitle(item.title),
				item.alternate.href, before);
	link.style.whiteSpace = 'nowrap';
	link.title = item.title;
    },

    shortTitle: function (title) {
	title = title.replace(/^Op-ed columnist:\s*/i, '');

	title = title.replace(/\s*[|-§].*/, '');

	// Truncate overly long titles...
	title = title.replace(/^(.{10,50})($|\b\s+\S.*)/, '$1');
	if (RegExp.$2) title = title + '...';

	return title;
    },

    addSpace: function (before) {
	return this.addNode(document.createTextNode(" "), before);
    },

    addBr: function (before) {
	return this.addNode(document.createElement('br'), before);
    }
};

