/*
 * A simple JQuery plugin for an RSS-fed news box
 *
 * @author Francesco Vivoli <f.vivoli@gmail.com> - http://atalayasec.org
 * Based on code found on the JQuery mailing list
 * 
 * Modified by piem for aubio.org
 */
(function($) {
 /**
  * Configure the news box container with url, maximum number of posts
  * to be fetched and their text length.
  * @example $('#newsbox').feedreader({
  *    targeturl: 'http://blogs.atalayasec.org/atalaya/?feed=rss2',
  *    items: 3,
  *    descLength: 15
  *  });
  * @desc fill the #newsbox element with at most 3 posts taken from the above url, and showig
  * a teaser of at most 15 words.
  *  
  */  
 $.fn.feedreader = function(options) {
 var defaults = {
targeturl: 'http://aubio.org/news/index.xml',
items: 3,
descLength: 15,
hackDate: false
}
if(!options.targeturl)  return false;
var opts = $.extend(defaults, options);

$('img').remove();

$(this).each(function(){
    var container = this;
    $.get(opts.targeturl,function(xml){
      var posts=[];
      var i=0;
      $("item", xml).each(function(){
        if(i>opts.items-1)  return;
        var post={};
        $(this).find("link").each(function(){
          post.link=getNodeText(this);
          });
        $(this).find("title").each(function(){
          post.title=getNodeText(this);
          });
      if (opts.hackDate) {
        $(this).find("guid").each(function(){
          var t=getNodeText(this);
          post.date=t.substring(0,8);
          });
      } else {
        $(this).find("pubDate").each(function(){
          post.date=getNodeText(this);
          });
      }
        $(this).find("description").each(function(){
          var t=getNodeText(this);
          post.desc=trimtext(t,opts.descLength);
          });
        posts[i++]=post;
        });
      writeposts(container,posts);          
      $('.figure').remove();
    })
});  

};

function trimtext(text,length){
  var t = text.replace(/\s/g,' ');
  var words = t.split(' ');
  if(words.length<=length) return text;
  var ret='';
  for(var i=0;i<length;i++){
    ret+=words[i]+' ';
  }
  return ret;
}

function writeposts(container,posts){
  $(container).empty();
  var html = '<dl>';
  for(var k in posts){
    html+=format(posts[k])
  }
  html += '</dl>';
  $(container).append(html);
}

function format(post){
  var html='<dt> <a href="'+post.link+'">'+post.title+'</a> <span class="date">('+post.date+')</span></dt>';
  if (post.desc.length > 0) {
  html+='<dd>'+post.desc+'<a href="'+post.link+'">+</a></dd>'
  }
  return html;  
}

function getNodeText(node)
{
  var text = "";
  if(node.text) text = node.text;
  if(node.firstChild) text = node.firstChild.nodeValue;
  return text;
}

})(jQuery);

