var org = {p3k: ({url:"http://www.enn.com/feeds/top_stories.rss", xml:"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<?xml-stylesheet type=\"text/xsl\" media=\"screen\" href=\"/~d/styles/rss2full.xsl\"?><?xml-stylesheet type=\"text/css\" media=\"screen\" href=\"http://feeds.feedburner.com/~d/styles/itemcontent.css\"?><rss xmlns:atom=\"http://www.w3.org/2005/Atom\" xmlns:feedburner=\"http://rssnamespace.org/feedburner/ext/1.0\" version=\"2.0\">\n<channel>\n\n<title>Environmental News Network</title>\n<link>http://www.enn.com/topics/top_stories</link>\n<image>\n<title>Environmental News Network</title>\n<url>http://www.enn.com/images/top_stories.gif</url>\n<link>http://www.enn.com/topics/top_stories</link>\n</image>\n<description>Environmental News Network</description>\n<language>en-us</language>\n<docs>http://enn.com/news/feeds/enn_top_stories2.xml</docs> \n<atom10:link xmlns:atom10=\"http://www.w3.org/2005/Atom\" rel=\"self\" type=\"application/rss+xml\" href=\"http://feeds.feedburner.com/EnvironmentalNewsNetwork\" /><feedburner:info uri=\"environmentalnewsnetwork\" /><atom10:link xmlns:atom10=\"http://www.w3.org/2005/Atom\" rel=\"hub\" href=\"http://pubsubhubbub.appspot.com/\" /><item>\n<title>Ecuador's tallest waterfall to be destroyed by Chinese dam</title>\n<link>http://feedproxy.google.com/~r/EnvironmentalNewsNetwork/~3/dASH0KGSFko/41748</link>\n<description>San Rafael Falls, Ecuador's tallest waterfall, is threatened by a Chinese-funded hydroelectric project, reports Save America's Forests, an environmental group. The 1,500 megawatt Coca-Codo Sinclair Hydroelectric Project will divert water flow away from the 480-foot San Rafael Falls, leaving it \"high and dry.\" Worse, the project, which is scheduled for completion in 2016, will put pressure on the Sumaco Biosphere Reserve, an area renowned for its biodiversity...&lt;img src=\"http://feeds.feedburner.com/~r/EnvironmentalNewsNetwork/~4/dASH0KGSFko\" height=\"1\" width=\"1\"/&gt;</description>\n<pubDate>Wed, 08 Sep 2010 08:59:00 EST</pubDate>\n<guid isPermaLink=\"false\">http://www.enn.com/environmental_policy/article/41748</guid>\n<author>Editor</author>\n<feedburner:origLink>http://www.enn.com/environmental_policy/article/41748</feedburner:origLink></item>\n<item>\n<title>How to save the reefs</title>\n<link>http://feedproxy.google.com/~r/EnvironmentalNewsNetwork/~3/uL2j118UGB4/41747</link>\n<description>The world should safeguard coral reefs with networks of small no-fishing zones to confront threats such as climate change, and shift from favoring single, big protected areas, a U.N. study showed.\n                        \n                        \"People have been creating marine protected areas for decades. Most of them are totally ineffective,\" Peter Sale, a leader of the study at the U.N. University's Institute for Water, Environment and Health, told Reuters.\n                        \n                        \"You need a network of protected areas that functions well,\" he said. \"It's important to get away from single protected areas which has been the common approach.\"\n                        \n                        Fish and larvae of marine creatures can swim or be carried large distances, even from large protected areas.&lt;img src=\"http://feeds.feedburner.com/~r/EnvironmentalNewsNetwork/~4/uL2j118UGB4\" height=\"1\" width=\"1\"/&gt;</description>\n<pubDate>Wed, 08 Sep 2010 07:01:00 EST</pubDate>\n<guid isPermaLink=\"false\">http://www.enn.com/environmental_policy/article/41747</guid>\n<author>Alister Doyle, Reuters</author>\n<feedburner:origLink>http://www.enn.com/environmental_policy/article/41747</feedburner:origLink></item>\n<item>\n<title>As Greenland Melts</title>\n<link>http://feedproxy.google.com/~r/EnvironmentalNewsNetwork/~3/em1Ab99Uze0/41746</link>\n<description>The Greenland ice sheet is a vast body of ice covering 660,235 square miles, roughly 80% of the surface of Greenland. It is the second largest ice body in the World, after the Antarctic Ice Sheet. The ice sheet  is almost 1,500 miles long in a north south direction, and its greatest width is 680 miles at a latitude of 77\xb0N, near its northern margin.  Scientists investigating the geophysical and hydrological conditions beneath the Greenland ice sheet say their analysis will be vital for helping understand how the massive ice sheet will respond to climate change.&lt;img src=\"http://feeds.feedburner.com/~r/EnvironmentalNewsNetwork/~4/em1Ab99Uze0\" height=\"1\" width=\"1\"/&gt;</description>\n<pubDate>Tue, 07 Sep 2010 15:11:00 EST</pubDate>\n<guid isPermaLink=\"false\">http://www.enn.com/enn_original_news/article/41746</guid>\n<author>Andy Soos, ENN</author>\n<feedburner:origLink>http://www.enn.com/enn_original_news/article/41746</feedburner:origLink></item>\n<item>\n<title>The Role of Clouds on Earth's Climate</title>\n<link>http://feedproxy.google.com/~r/EnvironmentalNewsNetwork/~3/jRzzy3YLw-4/41745</link>\n<description>Modeling for climate change is an extremely complex process because Earth's climate is so complex.  It is an interrelated system that involves the atmosphere, biosphere, land, and oceans.  A change in one can cause a chain reaction in all the others.  By studying ancient climate change patterns, scientists are better able to predict what might happen in future events.  However, one factor that remains far from understanding is the role of clouds \u2013 how they will react to and influence a changing climate.&lt;img src=\"http://feeds.feedburner.com/~r/EnvironmentalNewsNetwork/~4/jRzzy3YLw-4\" height=\"1\" width=\"1\"/&gt;</description>\n<pubDate>Tue, 07 Sep 2010 10:22:00 EST</pubDate>\n<guid isPermaLink=\"false\">http://www.enn.com/enn_original_news/article/41745</guid>\n<author>David A Gabel, ENN</author>\n<feedburner:origLink>http://www.enn.com/enn_original_news/article/41745</feedburner:origLink></item>\n<item>\n<title>Giant Greenland Iceberg -- Largest in the Northern Hemisphere -- Enters Nares Strait</title>\n<link>http://feedproxy.google.com/~r/EnvironmentalNewsNetwork/~3/-FMjwieHySY/41744</link>\n<description>ScienceDaily (Sep. 3, 2010) \u2014 ESA's (European Space Agency) Envisat satellite has been tracking the progression of the giant iceberg that calved from Greenland's Petermann glacier on 4 August 2010. A new animation shows that the iceberg, the largest in the northern hemisphere, is now entering Nares Strait -- a stretch of water that connects the Lincoln Sea and Arctic Ocean with Baffin Bay.&lt;img src=\"http://feeds.feedburner.com/~r/EnvironmentalNewsNetwork/~4/-FMjwieHySY\" height=\"1\" width=\"1\"/&gt;</description>\n<pubDate>Tue, 07 Sep 2010 08:58:00 EST</pubDate>\n<guid isPermaLink=\"false\">http://www.enn.com/climate/article/41744</guid>\n<author>Science Daily</author>\n<feedburner:origLink>http://www.enn.com/climate/article/41744</feedburner:origLink></item>\n<item>\n<title>4 Reasons To Eat Pomegranate During the Jewish New Year</title>\n<link>http://feedproxy.google.com/~r/EnvironmentalNewsNetwork/~3/eWnw21DHapY/41743</link>\n<description>With Jewish New Year (Rosh Hashana) around the corner, certain traditional foods are expected to appear at the table. There are many different recipes, but there are several which are universal, including honey cake and certain fruits. One of these fruits, originating in the Middle East, is the pomegranate.&lt;img src=\"http://feeds.feedburner.com/~r/EnvironmentalNewsNetwork/~4/eWnw21DHapY\" height=\"1\" width=\"1\"/&gt;</description>\n<pubDate>Tue, 07 Sep 2010 08:50:00 EST</pubDate>\n<guid isPermaLink=\"false\">http://www.enn.com/health/article/41743</guid>\n<author>Naomi Ben-David, Green Prophet</author>\n<feedburner:origLink>http://www.enn.com/health/article/41743</feedburner:origLink></item>\n<item>\n<title>Tropical Storm Hermine slams into far northeastern Mexico</title>\n<link>http://feedproxy.google.com/~r/EnvironmentalNewsNetwork/~3/xBQGspOF_Sg/41742</link>\n<description>Tropical Storm Hermine slammed into northeastern Mexico near the Texas border on Monday, dumping heavy rain on a region still recovering from Hurricane Alex's visit in June.\n\nHermine, the eighth named storm of the Atlantic hurricane season, was expected to weaken as it moved ashore but could trigger deadly flooding and tornadoes, the U.S. National Hurricane Center said.\n\nAuthorities in Tamaulipas state where the storm made landfall evacuated 3,000 people from high-risk areas but had no immediate reports of damage or injuries.\n\nThe storm's forecast path kept it away from major oil and natural gas installations in the Gulf of Mexico, and energy companies said there had been no affect on their operations.&lt;img src=\"http://feeds.feedburner.com/~r/EnvironmentalNewsNetwork/~4/xBQGspOF_Sg\" height=\"1\" width=\"1\"/&gt;</description>\n<pubDate>Tue, 07 Sep 2010 05:07:00 EST</pubDate>\n<guid isPermaLink=\"false\">http://www.enn.com/health/article/41742</guid>\n<author>Cyntia Barrera, Reuters</author>\n<feedburner:origLink>http://www.enn.com/health/article/41742</feedburner:origLink></item>\n</channel>\n</rss>\n", message:undefined, modified:(new Date(1284015674319)), baseUri:"http://p3k.org/rss/", query:"frameColor=white&textColor=#666666&_=1210853558534&titleBarColor=white&compact=&fontFace=Arial&align=left&showXmlButton=&maxItems=12&boxFillColor=white&undefined=&titleBarTextColor=#666666&width=550&url=http://www.enn.com/feeds/top_stories.rss&", param:{textColor:"#666666", width:"550", align:"left", fontFace:"Arial", url:"http://www.enn.com/feeds/top_stories.rss", compact:"", frameColor:"white", showXmlButton:"", undefined:"", boxFillColor:"white", _:"1210853558534", titleBarColor:"white", maxItems:"12", titleBarTextColor:"#666666"}, box:"<table class=\"rssBox\" width=\"${width}\" bgcolor=\"${frameColor}\" \n      style=\"table-layout: fixed; overflow: hidden; font-family: ${fontFace};\" \n      align=\"${align}\" cellspacing=\"1\" cellpadding=\"7\" border=\"0\">\n<tr bgcolor=\"${titleBarColor}\">\n<td>\n   ${xmlButton}\n   <strong>${title}</strong>\n   <div>\n      <small style=\"color: ${titleBarTextColor};\">${date}</small>\n   </div>\n</td>\n</tr>\n<tr bgcolor=\"${boxFillColor}\">\n<td class=\"rssBoxContent\" style=\"color: ${textColor};\">\n   ${image}\n   ${items}\n   ${input}\n   <div class=\"rssBoxPromo\" style=\"margin-top: 0px; text-align: left; \n         font: 9px verdana, sans-serif\">\n      RSS box by <a href=\"http://p3k.org/rss\">p3k.org</a>.\n   </div>\n</td>\n</tr>\n</table>\n\n", image:"<a href=\"${link}\"><img src=\"${source}\" width=\"${width}\" height=\"${height}\" \nalt=\"${title}\" title=\"${title}\" align=\"${align}\" valign=\"${valign}\" \nhspace=\"${hspace}\" vspace=\"${vspace}\" border=\"0\" /></a>\n\n", input:"<form method=\"get\" action=\"${link}\">\n${description}\n<input type=\"text\" name=\"${name}\" size=\"15\" /> <input type=\"submit\" \nvalue=\"${title}\" />\n</form>\n\n", item:"<div class=\"rssBoxItemContent\">\n${title}\n${break}\n${description}\n${buttons}\n</div><br />\n\n", date:"${year}-${month}-${day}, ${hours}:${minutes}h\n\n", link:"<a class=\"${class}\" href=\"${link}\" style=\"${style}\">${text}</a>\n", error:"<?xml version=\"1.0\"?>\n<rss version=\"error\">\n   <channel>\n      <title>RSS Box Error</title>\n      <link>${link}</link>\n      <description>This output was automatically generated to report an error \n      that occurred during a request to the JavaScript RSS Box Viewer.</description>\n      <item>\n         <title>Oops, something went wrong...</title>\n         <description>An error occurred while processing the request to the \n         JavaScript RSS Box Viewer.</description>\n      </item>\n      <item>\n         <title>An error message was returned by the server.</title>\n         <description>${message}</description>\n      </item>\n      <item>\n         <description>Most likely, this might have happened because of a \n         non-existent or invalid RSS feed URL. Please check and possibly correct \n         your input, then try again.</description>\n      </item>\n   </channel>\n</rss>\n\n"})};
function debug(str) {
   return document.write('<p><span style="background-color: yellow;">', 
         str, '</span><p>');
}

org.p3k.RssBox = function() {
   var ref;
   var ISOPATTERN = /([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9:]+).*$/;
   
   var data = org.p3k;
   data.defaults = {
      url: "http://blog.p3k.org/rss",
      maxItems: 7,
      width: 200,
      align: "",
      frameColor: "black",
      titleBarColor: "lightblue",
      titleBarTextColor: "black",
      boxFillColor: "white",
      textColor: "black",
      showXmlButton: "",
      compact: ""
   };
   
   var baseUri = data.baseUri;
    
   var getColor = function(str) {
      if (str.length === 6 && parseInt(str, 16) && str.indexOf("#") !== 0) {
         str = "#" + str;
      }
      return str.toLowerCase();
   }

   var value;
   for (var i in data.defaults) {
      value = data.param[i];
      if (!value || value.length === 0) {
         data.param[i] = data.defaults[i];
      } else if (i.indexOf("Color") > 0) {
         data.param[i] = getColor(value);
      }
   }

   // FIXME: Ugly work-around for many boxes using too small width 
   // values because the former version did not show the exact output.
   if (data.param.javascript && data.param.width < 200) {
      data.param.width = 200;
   }
   // Remove obsolete parameters from param and query
   delete data.param.javascript;
   data.query = data.query.replace("javascript=true", "");   

   var NAMESPACES = {
      dc: "http://purl.org/dc/elements/1.1/",
      rdf: "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   };

   var getUrl = function(url) {
      url = baseUri + "proxy.r?" + encodeURIComponent(url);
   
      var HttpRequest = function() {
         return (typeof XMLHttpRequest !== "undefined") ?
            new XMLHttpRequest() : new ActiveXObject("Msxml2.XMLHTTP");
      }
   
      var request = new HttpRequest();
      request.open("GET", url, false);
      request.send(null);   
      if (!request.getResponseHeader("Date")) {
         var cached = request;
         var ifModifiedSince = cached.getResponseHeader("Last-Modified") || 
               new Date(0); // January 1, 1970
         request = new HttpRequest();
         request.open("GET", url, false);
         request.setRequestHeader("If-Modified-Since", ifModifiedSince);
         request.send("");
         if (request.status === 304) {
            request = cached; 
         }
      }
      return request;
   }
   
   var getDocument = function(source) {
      if (source) {
         if (document.implementation.createDocument) {
            var parser = new DOMParser();
            var doc = parser.parseFromString(source, "text/xml");
            return doc;
         } else if (window.ActiveXObject) {
            var doc = new ActiveXObject("Microsoft.XMLDOM");
            doc.async = "false";
            doc.loadXML(source);
            return doc;
         }
      }
      return null;
   }
   
   var getError = function() {
      var msg = null, root;
      if (!xml || data.message) {
         msg = data.message || "Unknown error.";
      } else if (xml.parseError && xml.parseError.errorCode) {
         msg = xml.parseError.reason; // IExplore
      } else if (root = xml.documentElement) {
         var errorNode;
         if (root.nodeName === "parsererror") {
            msg = xml.documentElement.textContent; // Mozilla
         } else if ((errorNode = root.childNodes[0]) && 
               errorNode.nodeName === "parsererror") {
            msg = errorNode.textContent; // Safari
         } else if (!/rss|rdf|scriptingNews/i.test(xml.documentElement.nodeName)) {
            msg = "Incompatible data format. Are you sure this is an RSS feed?";
         }
      }
      return msg;
   }
   
   var getNode = function(parent, name, namespace) {
      if (namespace) {
         if (typeof parent.getElementsByTagNameNS === "undefined") {
            var elements = parent.getElementsByTagName(namespace + ":" + name);
         } else {
            var elements = parent.getElementsByTagNameNS(NAMESPACES[namespace], name);
         }
      } else {
         var elements = parent.getElementsByTagName(name);
      }
      if (elements && elements[0]) {
         return elements[0];
      }
      return null;
   }
   
   var getText = function(node) {
      if (node && node.childNodes && node.childNodes.length > 0) {
         return node.childNodes[0].nodeValue || "";
      }
      return "";
   }
   
   var trim = function(str) {
      if (str) {
         return str.replace(/^\s*(\S*)\s*$/, "$1");
      }
      return "";
   }
   
   var padZero = function(n) {
      if (n < 10) {
         return "0" + n
      }
      return n;
   }

   var encodeXml = function(str) {
      if (!str) {
         return "";
      }
      return str.replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/&/g, "&amp;");
   }
      
   var render = function(template, param) {
      if (!template || !param) {
         return template;
      }
      template = template.replace(/\$\{([^}]+)\}/g, function() {
         var key = arguments[1];
         return param[key] || "";
      });
      return template;
   }
   
   var renderDate = function(date) {
      if (date.constructor !== Date) {
         var str = String(date);
         var millis = Date.parse(str.replace(ISOPATTERN, "$1/$2/$3 $4"));
         if (millis) {
            date = new Date(millis);
         } else {
            date = new Date;
         }
      }

      return render(data.date, {
         year: date.getFullYear(),
         month: padZero(date.getMonth() + 1),
         day: padZero(date.getDate()),
         hours: padZero(date.getHours()),
         minutes: padZero(date.getMinutes()),
         seconds: padZero(date.getSeconds()),
         timeZone: "" // date.getTimezoneOffset()
      });
   }
   
   var renderButtons = function(enclosure, source) {
      var result = "";
      if (enclosure && enclosure.link) {
         result += render(data.image, {
            source: baseUri + "enclosure.gif",
            title: enclosure.type,
            link: encodeURI(enclosure.link),
            width: 13,
            height: 16
         });
      }
      if (source && source.link) {
         result += render(data.image, {
            source: baseUri + "source.gif",
            title: source.title,
            link: encodeURI(source.link),
            width: 15,
            height: 15
         });
      }
      return result;         
   }
   
   var param = data.param;
   var rss = data.rss = {items: []};
   var xml = getDocument(data.xml);

   rss.error = getError();
   if (rss.error !== null) {
      xml = getDocument(render(data.error, {
         link: baseUri + "?" + encodeXml(data.query),
         message: encodeXml(rss.error)
      }));
      param.compact = 0;
      param.showXmlButton = 1;
   }

   var root = xml.documentElement;
   var type = root.nodeName;

   if (type === "scriptingNews") {
      var channel = getNode(xml, "header");
      rss.format = "Scripting News";
      rss.version = getText(getNode(channel, "scriptingNewsVersion"));
      rss.title = getText(getNode(channel, "channelTitle"));
      rss.description = getText(getNode(channel, "channelDescription"));
      rss.link = getText(getNode(channel, "channelLink"));
      if (ref = getText(getNode(channel, "imageUrl"))) {
         ref = rss.image = {source: ref};
         ref.title = getText(getNode(channel, "imageTitle"));
         ref.link = getText(getNode(channel, "imageLink"));
         ref.width = getText(getNode(channel, "imageWidth"));
         ref.height = getText(getNode(channel, "imageHeight"));
         ref.description = getText(getNode(channel, "imageCaption"));
      }
   } else {
      var channel = getNode(xml, "channel");
      rss.format = "RSS";
      rss.version = (type === "rdf:RDF") ? "1.0" : 
            root.getAttribute("version");
      rss.title = getText(getNode(channel, "title"));
      rss.description = getText(getNode(channel, "description"));
      rss.link = getText(getNode(channel, "link"));
      var image = getNode(xml, "image");
      if (image) {
         ref = rss.image = {};
         ref.source = getText(getNode(image, "url"));
         ref.title = getText(getNode(image, "title"));
         ref.link = getText(getNode(image, "link"));
         ref.width = getText(getNode(image, "width"));
         ref.height = getText(getNode(image, "height"));
         ref.description = getText(getNode(image, "description"));
      }
   }
   
   if (type === "rdf:RDF") {
      rss.date = renderDate(getText(getNode(channel, "date", "dc")) || data.modified);
      rss.rights = getText(getNode(channel, "creator", "dc"));
      var input = getNode(root, "textinput");
      if (input && !getNode(input, "link")) {
         input = root.getElementsByTagName("textinput")[1];
      }
      if (input) {
         ref = rss.input = {};
         ref.link = getText(getNode(input, "link"));
         ref.description = getText(getNode(input, "description"));
         ref.name = getText(getNode(input, "name"));
         ref.title = getText(getNode(input, "title"));
      }
   } else {
      rss.date = renderDate(getText(getNode(channel, "lastBuildDate") || getText(getNode(channel, "pubDate"))) || data.modified);
      rss.rights = getText(getNode(channel, "copyright"));
   }
   
   var item, text, node;
   var items = xml.getElementsByTagName("item");

   for (var i=0; i<Math.min(items.length, param.maxItems); i+=1) {
      item = items[i];

      if (type === "scriptingNews") {
         ref = {title: ""};
         ref.description = getText(getNode(item, "text")).replace(/\n/g, " ");
         ref.link = getText(getNode(item, "link"));
         if (text = trim(getText(getNode(item, "linetext")).replace(/\n/g, " "))) {
            ref.description = ref.description.replace(new RegExp(text), 
                  '<a href="' + getText(getNode(item, "url")) + '">' + text + '</a>');
         }
      } else {
         ref = {
            title: getText(getNode(item, "title")),
            description: getText(getNode(item, "description")),
            link: getText(getNode(item, "link") || getNode(item, "guid"))
         };
     }

     if (node = getNode(item, "source")) {
        ref.source = {
           link: node.getAttribute("url"),
           title: getText(node)
        }
     }
     
     if (node = getNode(item, "enclosure")) {
        ref.enclosure = {
           link: node.getAttribute("url"),
           length: node.getAttribute("length"),
           type: node.getAttribute("type")
        }
     }
     
     if (node = getNode(item, "category")) {
        ref.category = {
           domain: node.getAttribute("domain") || "",
           content: getText(node)
        }
     }
     
     rss.items.push(ref);
   }
   
   var item, items = "";
   for (var i=0; i<rss.items.length; i+=1) {
      item = rss.items[i];
      items += render(data.item, {
         title: new function() {
            var title = (!param.compact ? "<strong>" : "");
            if (item.link) {
               title += render(data.link, {
                  link: encodeURI(item.link),
                  text: item.title,
                  'class': "rssBoxItemTitle"
               });
            } else {
               title += item.title;
            }
            !param.compact && (title += "</strong>");
            return new String(title); // FIXME: Funny, title alone will be rendered as [object]
         }(),
         'break': item.title && item.description ? "<br />" : "",
         description: (!param.compact || !item.title) && item.description,
         buttons: renderButtons(item.enclosure, item.source)
      });
   }
   
   var box = render(data.box, {
      title: rss.link ? render(data.link, {
         link: encodeURI(rss.link),
         text: rss.title,
         'class': "rssBoxTitle",
         style: "color: " + param.titleBarTextColor
      }) : rss.title,
      description: rss.description,
      items: items,

      xmlButton: param.showXmlButton && render(data.image, {
         link: param.url,
         source: baseUri + "rss.png",
         title: rss.format + " " + rss.version,
         width: 16,
         height: 16,
         align: "right",
         hspace: 3
      }),
      
      image: !param.compact && rss.image && render(data.image, {
         link: encodeURI(rss.image.link),
         source: rss.image.source,
         width: rss.image.width,
         height: rss.image.height,
         title: rss.image.title,
         align: "right",
         valign: "baseline",
         hspace: 5,
         vspace: 5
      }),
      
      input: !param.compact && rss.input && render(data.input, {
         link: encodeURI(rss.input.link),
         description: rss.input.description,
         name: rss.input.name,
         title: rss.input.title
      }),
      
      date: rss.date,
      width: param.width,
      frameColor: param.frameColor,
      fontFace: param.fontFace,
      align: param.align,
      titleBarColor: param.titleBarColor,
      titleBarTextColor: param.titleBarTextColor,
      boxFillColor: param.boxFillColor,
      textColor: param.textColor
   });

   if (!window.rssBoxSetup) {
      document.write(box);
   }
   
   return box;
};

org.p3k.RssBox();

