var org = {p3k: ({url:"http://news.thomasnet.com/conewsxml/422518", xml:"<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n<!-- generator=\"FeedCreator 1.7.1\" -->\n<rss version=\"2.0\">\n    <channel>\n        <title>RSS Feed for Barden Corp., The</title>\n        <description>ThomasNet News is a service of ThomasNet.com</description>\n        <link>http://news.thomasnet.com</link>\n        <lastBuildDate>Thu, 02 Sep 2010 10:41:45 -0400</lastBuildDate>\n        <generator>FeedCreator 1.7.1</generator>\n        <image>\n            <url>http://news.thomasnet.com/images/header/TN_News_footer.gif</url>\n            <title>Powered by ThomasNet News</title>\n            <link>http://news.thomasnet.com</link>\n            <width>129</width>\n            <height>38</height>\n        </image>\n        <item>\n            <title>\nPrecision Bearings on Nuclear Fusion Equipment Run for 16 Hours a Day for More than 25 Years\n </title>\n            <link>http://news.thomasnet.com/companystory/Precision-Bearings-on-Nuclear-Fusion-Equipment-Run-for-16-Hours-a-Day-for-More-than-25-Years-828406</link>\n            <description>\nPrecision deep groove ball bearings from the Barden Corporation have been operating continuously for more than 25 years on critical nuclear fusion diagnostics equipment at the world's largest nuclear fusion facility.\n\nDeep groove ball bearings are about to be replaced on critical diagnostics equipment at the world's largest nuclear fusion centre based in Culham, Oxfordshire. The bearings have been running for 16 hours a day for more than 25 years without any cleaning or ...&lt;br&gt;&lt;br&gt;&lt;b&gt;This story is related to the following:&lt;/b&gt;&lt;br&gt;&lt;a href='http://news.thomasnet.com/news/mechanical-power-transmission' target='_blank''&gt;Mechanical Power Transmission&lt;/a&gt;&lt;br&gt;&lt;br&gt;Search for suppliers of: &lt;a href='http://www.thomasnet.com/products/deep-groove-ball-bearings-3882008-1.html' target='_blank''&gt;Deep Groove Ball Bearings&lt;/a&gt;  |  &lt;a href='http://www.thomasnet.com/products/precision-ball-bearings-3930401-1.html' target='_blank''&gt;Precision Ball Bearings&lt;/a&gt;  |  &lt;a href='http://www.thomasnet.com/products/lubrication-bearings-7589-1.html' target='_blank''&gt;Lubrication Bearings&lt;/a&gt;&lt;br&gt;</description>\n            <author>info@productnews.com (ThomasNet News)</author>\n            <pubDate>Wed, 22 Jul 2009 08:30:53 -0400</pubDate>\n        </item>\n        <item>\n            <title>\nBarden's UK Plant Now Certified as a Diagnosis and Repair Facility for Aerospace-Approved ...</title>\n            <link>http://news.thomasnet.com/companystory/Barden-s-UK-Plant-Now-Certified-as-a-Diagnosis-and-Repair-Facility-for-Aerospace-Approved-Bearings-828263</link>\n            <description>\nThe Barden Corporation (UK) Limited's manufacturing plant in Plymouth is now an authorised diagnosis and repair facility for aerospace-approved bearings, providing fast turn around times for customers.\n\nThe Civil Aviation Authority (CAA) has now approved The Barden Corporation's manufacturing plant in Plymouth as an authorised diagnosis and repair facility for aerospace-approved bearings.\n\nThe plant's new EASA (European Aviation Safety Agency) Part-145 approval means that Barden can offer ...</description>\n            <author>info@productnews.com (ThomasNet News)</author>\n            <pubDate>Mon, 13 Jul 2009 08:35:14 -0400</pubDate>\n        </item>\n        <item>\n            <title>\nSuper Precision Bearings Guarantee Accuracy and Flexibility of Surgical and Robot Articulated ...</title>\n            <link>http://news.thomasnet.com/companystory/Super-Precision-Bearings-Guarantee-Accuracy-and-Flexibility-of-Surgical-and-Robot-Articulated-Arms-827204</link>\n            <description>\nTrevor Morris, Product Engineering Manager at The Barden Corporation (UK) Limited, discusses how super precision bearings are helping to guarantee the accuracy and flexibility of the latest articulated arms used in surgical and industrial robotics.\n\nA wide range of measurement and inspection systems, industrial robots and medical equipment now use flexible arms to provide the degree of movement these systems require to carry out specific tasks such as handling, assembly, welding, measurement ...&lt;br&gt;&lt;br&gt;&lt;b&gt;This story is related to the following:&lt;/b&gt;&lt;br&gt;&lt;a href='http://news.thomasnet.com/news/mechanical-power-transmission' target='_blank''&gt;Mechanical Power Transmission&lt;/a&gt;&lt;br&gt;&lt;br&gt;Search for suppliers of: &lt;a href='http://www.thomasnet.com/products/angular-contact-bearings-3720711-1.html' target='_blank''&gt;Angular Contact Bearings&lt;/a&gt;  |  &lt;a href='http://www.thomasnet.com/products/ball-bearings-3740800-1.html' target='_blank''&gt;Ball Bearings&lt;/a&gt;  |  &lt;a href='http://www.thomasnet.com/products/super-precision-bearings-95944617-1.html' target='_blank''&gt;Super Precision Bearings&lt;/a&gt;  |  &lt;a href='http://www.thomasnet.com/products/medical-equipment-bearings-97004164-1.html' target='_blank''&gt;Medical Equipment Bearings&lt;/a&gt;&lt;br&gt;</description>\n            <author>info@productnews.com (ThomasNet News)</author>\n            <pubDate>Wed, 03 Jun 2009 08:29:12 -0400</pubDate>\n        </item>\n        <item>\n            <title>\nNew Cylindrical Roller Bearing Capability from Barden\n </title>\n            <link>http://news.thomasnet.com/companystory/New-Cylindrical-Roller-Bearing-Capability-from-Barden-562780</link>\n            <description>\nFollowing significant investment in new grinding and superfinishing machines, Barden's manufacturing plant in Plymouth is now able to offer customers small batch, custom engineered cylindrical roller bearings manufactured to super precision standards.\n\nThe Barden Corporation, a UK-based manufacturer of super-precision ball bearings, now has the added capability to manufacture a range of cylindrical roller bearings up to 150mm outside diameter. Depending on the configuration of the bearing ...</description>\n            <author>info@productnews.com (ThomasNet News)</author>\n            <pubDate>Fri, 10 Jul 2009 08:34:00 -0400</pubDate>\n        </item>\n        <item>\n            <title>Bearing Grease offers extreme thermal stability.</title>\n            <link>http://news.thomasnet.com/fullstory/Bearing-Grease-offers-extreme-thermal-stability-14547</link>\n            <description>Type G-75 grease is designed for high speed machine tool spindle bearings. It combines fully synthetic base oil with Polyurea thickener instead of barium complex soap thickener. G-75 operates at 1.5 M dN continously and is standard on all sealed angular contact bearings. It is available in 30 cc dispenser.&lt;br&gt;&lt;br&gt;&lt;b&gt;This story is related to the following:&lt;/b&gt;&lt;br&gt;&lt;a href='http://news.thomasnet.com/news/lubricants' target='_blank''&gt;Lubricants&lt;/a&gt;&lt;br&gt;&lt;br&gt;Search for suppliers of: &lt;a href='http://www.thomasnet.com/products/grease-35682004-1.html' target='_blank''&gt;Grease&lt;/a&gt;  |  &lt;a href='http://www.thomasnet.com/products/synthetic-grease-35730704-1.html' target='_blank''&gt;Synthetic Grease&lt;/a&gt;&lt;br&gt;</description>\n            <author>info@productnews.com (ThomasNet News)</author>\n            <pubDate>Mon, 30 Sep 2002 07:52:34 -0400</pubDate>\n        </item>\n        <item>\n            <title>Support Bearings come in inch and metric sizes.</title>\n            <link>http://news.thomasnet.com/fullstory/Support-Bearings-come-in-inch-and-metric-sizes-14546</link>\n            <description>BSB Series (metric) and L-Series (inch) Ball Screw Support Bearings provide axial rigidity, coupled with low friction characteristics, to allow attainment of extreme accuracy during rapid position changes at high speeds. Rigidity is achieved through internal design and built-in universal preload. Cage options include reinforced phenolic (L-Series), or molded nylon, glass fiber reinforced polyamide (BSB-Series). Bearings come in standard duplex or quadruplex sets.&lt;br&gt;&lt;br&gt;&lt;b&gt;This story is related to the following:&lt;/b&gt;&lt;br&gt;&lt;a href='http://news.thomasnet.com/news/mechanical-power-transmission' target='_blank''&gt;Mechanical Power Transmission&lt;/a&gt;&lt;br&gt;&lt;br&gt;Search for suppliers of: &lt;a href='http://www.thomasnet.com/products/ball-screw-support-bearings-3947009-1.html' target='_blank''&gt;Ball Screw Support Bearings&lt;/a&gt;&lt;br&gt;</description>\n            <author>info@productnews.com (ThomasNet News)</author>\n            <pubDate>Mon, 30 Sep 2002 07:52:34 -0400</pubDate>\n        </item>\n        <item>\n            <title>Roller Bearings feature optimized roller crown design.</title>\n            <link>http://news.thomasnet.com/fullstory/Roller-Bearings-feature-optimized-roller-crown-design-14544</link>\n            <description>Cylindrical roller bearings are single and double row spindle bearings with crown profile for optimized load distribution. Typically used in combination with double direction angular contact thrust bearings, they are suited for applications where combination of radial stiffness, high radial capacity and high precision support are required. Hybrid Ceramic (HCN) single row cylindrical roller bearing suits high speed floating bearing arrangement in milling spindle applications.&lt;br&gt;&lt;br&gt;&lt;b&gt;This story is related to the following:&lt;/b&gt;&lt;br&gt;&lt;a href='http://news.thomasnet.com/news/mechanical-power-transmission' target='_blank''&gt;Mechanical Power Transmission&lt;/a&gt;&lt;br&gt;&lt;br&gt;Search for suppliers of: &lt;a href='http://www.thomasnet.com/products/radial-roller-bearings-4291803-1.html' target='_blank''&gt;Radial Roller Bearings&lt;/a&gt;  |  &lt;a href='http://www.thomasnet.com/products/cylindrical-roller-bearings-4271201-1.html' target='_blank''&gt;Cylindrical Roller Bearings&lt;/a&gt;&lt;br&gt;</description>\n            <author>info@productnews.com (ThomasNet News)</author>\n            <pubDate>Mon, 30 Sep 2002 07:52:34 -0400</pubDate>\n        </item>\n        <item>\n            <title>Spindle Bearings feature non-contacting seal.</title>\n            <link>http://news.thomasnet.com/fullstory/Spindle-Bearings-feature-non-contacting-seal-14543</link>\n            <description>Sealed angular contact spindle bearings have non-contacting seal that helps retain lubricant and protects against premature failure caused by infiltration of contaminants. Non-contacting nature of design allows bearings to operate at running speeds up to 1.5 M dN without any impedance normally caused by seal interference. Bearings are offered in high speed (small ball) and standard (large ball) versions with 15&amp;#176; or 25&amp;#176; contact angle.\n&lt;br&gt;&lt;br&gt;&lt;b&gt;This story is related to the following:&lt;/b&gt;&lt;br&gt;&lt;a href='http://news.thomasnet.com/news/mechanical-power-transmission' target='_blank''&gt;Mechanical Power Transmission&lt;/a&gt;&lt;br&gt;&lt;br&gt;Search for suppliers of: &lt;a href='http://www.thomasnet.com/products/radial-ball-bearings-3940202-1.html' target='_blank''&gt;Radial Ball Bearings&lt;/a&gt;&lt;br&gt;</description>\n            <author>info@productnews.com (ThomasNet News)</author>\n            <pubDate>Mon, 30 Sep 2002 07:52:33 -0400</pubDate>\n        </item>\n        <item>\n            <title>Machine-Tool Bearing provides high corrosion resistance.</title>\n            <link>http://news.thomasnet.com/fullstory/Machine-Tool-Bearing-provides-high-corrosion-resistance-14542</link>\n            <description>X-Life Ultra utilizes rings made from Cronidur 30 low-nitrogen steel, ceramic (silicon nitride) balls with phenolic cage, thermally stable grease, and integral seal options. Bearing provides 10x longer life when compared to conventional 52100 and 440 hybrid ceramic bearings. Standard bore diameters range from 20 to 120 mm.&lt;br&gt;&lt;br&gt;&lt;b&gt;This story is related to the following:&lt;/b&gt;&lt;br&gt;&lt;a href='http://news.thomasnet.com/news/mechanical-power-transmission' target='_blank''&gt;Mechanical Power Transmission&lt;/a&gt;&lt;br&gt;&lt;br&gt;Search for suppliers of: &lt;a href='http://www.thomasnet.com/products/radial-ball-bearings-3940202-1.html' target='_blank''&gt;Radial Ball Bearings&lt;/a&gt;&lt;br&gt;</description>\n            <author>info@productnews.com (ThomasNet News)</author>\n            <pubDate>Wed, 25 Sep 2002 09:12:10 -0400</pubDate>\n        </item>\n    </channel>\n</rss>\n", message:undefined, modified:(new Date(1283438505548)), baseUri:"http://p3k.org/rss/", query:"textColor=#000000&width=500&align=&fontFace=&url=http://news.thomasnet.com/conewsxml/422518&frameColor=black&compact=&showXmlButton=&setup=true&boxFillColor=white&_=1266197731216&titleBarColor=orange&maxItems=7&titleBarTextColor=black&", param:{textColor:"#000000", align:"", width:"500", fontFace:"", url:"http://news.thomasnet.com/conewsxml/422518", compact:"", frameColor:"black", showXmlButton:"", setup:"true", boxFillColor:"white", _:"1266197731216", titleBarColor:"orange", maxItems:"7", titleBarTextColor:"black"}, 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();

