
YAHOO.namespace("ksu.widget.RssViewer");

(function() {

// Shortcut YUI definitions
var Dom         = YAHOO.util.Dom;
var $           = Dom.get;
var setStyle    = Dom.setStyle;
var LOG;


/**
 * Constructor for the KSU.widget.RssViewer object.
 */
KSU.widget.RssViewer = function(url, el, attr) {
   attr = attr || {};

   this.el = $(el);
   this.url = url;

   LOG = new YAHOO.widget.LogWriter("RssViewer");
   LOG.log("Created new RssViewer");
};


////////////////////////////////////////////////
// Private static properties
////////////////////////////////////////////////

var pub = KSU.widget.RssViewer.prototype;

/**
 * Display retrieved RSS data.
 */
pub.displayRss = function(response, ctx) {
   var i;
   var item;
   var items;
   var title;

   items = response.responseXML.getElementsByTagName('item');
   html = "";
   displaycount = 5;  // TODO
   if (displaycount > items.length) {
      displaycount = items.length;
   }
   for (i = 0; i < displaycount; i++) {
      item = items[i];
      title = getValue(item, 'title');
      if (title) {
         link = getValue(item, 'link');
         if (link) {
            title = "<a href=\"" + link + "\">" + title + "</a>";
         }
         html += "<li>" + title + "</li>";
     }
   }
   this.el.innerHTML = "<ul class=\"news_feed\">" + html + "</ul>";
};

var getValue = function(el, tagname) {

   var result = "";

   try {
      result = el.getElementsByTagName(tagname)[0].firstChild.nodeValue;
   } catch (e) {
      /* nothing */
   }

   return result;
};


/**
 * Add a note about data not available.
 */
pub.warnNotAvailable = function(response, ctx) {
};

pub.render = function() {

   LOG.log("Rendering");
   this.transID = YAHOO.util.Connect.asyncRequest('GET',
                                         this.url,
                                         {
                                             success: pub.displayRss,
                                             failure: pub.warnNotAvailable,
                                             scope: this
                                         } );
};

})();

