
    var rss_feeds = Array(), rss_display = Array(), rss_done = Array(), rss_num = Array(), 
        rss_container, rss_entry, rss_entry_html, rss_html;

     function rss_container_tag(tag) {
      switch (tag.toUpperCase()) {
       case "%LINK%": return rss_container.link;
       case "%TITLE%": return rss_container.title; 
       case "%DESCRIPTION%": return rss_container.description;
       case "%AUTHOR%": return rss_container.author;
       case "%ENTRIES%": return rss_entry_html;
       default: break;
      }
       return '';
     }

     function rss_entry_tag(tag) {
      switch (tag.toUpperCase()) {
       case "%LINK%": return rss_entry.link.indexOf('://') == -1 ? rss_container.link + rss_entry.link : rss_entry.link;
       case "%TITLE%": return rss_entry.title;
       case "%CATEGORIES%": return rss_entry.categories.join(", ");
       case "%SNIPPET%": return rss_entry.contentSnippet;
       case "%CONTENT%": return rss_entry.content;
       case "%DATE%": dt = new Date(rss_entry.publishedDate); return (Array('January','February','March','April','May','June','July','August','September','October','November','December')[dt.getMonth()] + ' ' + ordinal(dt.getDate()) + ', ' + dt.getFullYear());
       default: break;
      }
      return '';
     }

     function rss_feed_load(url, target, collection_format, entry_format, num) {
      var now = new Date();
      var update_interval = 5; // in minutes
      var mins = (Math.floor(now.getMinutes() / update_interval) * update_interval) % 60;
      var ts = new Date(now.getFullYear(), now.getMonth(), now.getHours(), mins, 0, 0).getTime();
    
      var ts_str =  (url.indexOf('?') > 0) ? '&'+ts : ts_str = '?'+ts;
    
      var feed = new google.feeds.Feed(url+ts_str), tmp = new String();

      feed.setNumEntries(num);
      rss_entry_html = '';

     feed.load(function(result) {
      if (!result.error) {

        rss_container = result.feed;

       for (var i = 0; i < result.feed.entries.length; i++) {
         rss_entry = result.feed.entries[i];
         tmp = entry_format;
         rss_entry_html += tmp.replace(/%[a-zA-Z]*%/gi, rss_entry_tag);
       }

        tmp = collection_format; 
        //"<div id=\"rss\">%ENTRIES%<p><a href=\"%LINK%\">Source &raquo; %TITLE%</a><p></div>";
        rss_html = tmp.replace(/%[a-zA-z]*%/gi, rss_container_tag);


      } else rss_html = "Feed is currently unavailable.";
     
       var container = document.getElementById(target);
         container.innerHTML = rss_html;

         setTimeout("rss_feed_init()", 50);
          // Google's shit seems to break if we load them simultaneously.  This provides chain loading w/o a retry loop + dirty flag.
      });

    }

   function rss_feed_init() {
    var entry_display_formats = Array(), collection_display_formats = Array();

      entry_display_formats['detailed'] = "<div id=\"rss-entry\"> <h3><a href=\"%LINK%\">%TITLE%</a></h3><p>%CATEGORIES%</p><p>%CONTENT%</p></div><div style=\"clear: both\"> &nbsp; </div>";
      entry_display_formats['snippet'] = "<div id=\"rss-entry\"><h3><a href=\"%LINK%\">%TITLE%</a></h3><p>%SNIPPET% <br /><a href=\"%LINK%\">Read More</a></p></div>";
      entry_display_formats['headline'] = "<div id=\"rss-entry\"><h3><a href=\"%LINK%\">%TITLE%</a></h3></div>";
      entry_display_formats['dl'] = "<dt>%DATE%</dt><dd><a href=\"%LINK%\" target=\"_blank\">%TITLE%</a></dd>";
      entry_display_formats['ul'] = "<li><h5>%DATE%</h5><p><a href=\"%LINK%\" target=\"_blank\">%TITLE%</a></p></li>";

      collection_display_formats['detailed'] = collection_display_formats['snippet'] = collection_display_formats['headline'] = "<div id=\"rss\">%ENTRIES%<p><a href=\"%LINK%\">Source &raquo; %TITLE%</a><p></div>";
      collection_display_formats['dl'] = "<dl>%ENTRIES%</dl>";
      collection_display_formats['ul'] = "<ul class=\"news\">%ENTRIES%</ul>";

    for (var id in rss_feeds) {
     if (!rss_done[id]) {
       //$("#feed" + id).html("<img src=\"images/ajax2.gif\" style=\"float: left\" />");
       rss_done[id] = 1;
       rss_feed_load(rss_feeds[id], "feed" + id, collection_display_formats[rss_display[id]], entry_display_formats[rss_display[id]], rss_num[id]);
       break;
     }
    }

   }


 // This will load the latest 1.x of the API.  Which should always be OK, since nothing new, breath-taking and code-breaking should appear until 2.X
    google.load("feeds", "1"); 
    google.setOnLoadCallback(rss_feed_init);



