/*
* 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
*/
(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: '/latest/all',
      items: 8,
      descLength: 8,
      titleLength: 17
    }
    if(!options.targeturl)	return false;
    var opts = $.extend(defaults, options);
    $(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(){
            var tempTitle = getNodeText(this);
            post.title = trimText(tempTitle, opts.titleLength)
          });
          $(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,options.targeturl);					
        
      })
    });	
    
  };
  
  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-1;i++){
      ret+=words[i]+' ';
    }
    ret += words[length-1];
    return ret + '...';
  }
  
  function trimText(text,length){
    var t = text.replace(/\s/g,' ');
    if(t.length<=length){
      return text;
    }
    else{
      return t.substr(0, length-2) + '...';
    }
  }
  
  function writeposts(container,posts,feedUrl){
    $(container).empty();
    var html = '';
    for (var k=0;k<posts.length;k++){
      if (k == 0){
        html+='<div id="left_feed_items">';
        html+=formatLeft(posts[k]);
        if (posts[k+1] != null){
          k++
          html+=formatLeft(posts[k])
        }
        html+='</div><div id="right_feed_items"><ol>'
      }
      else{
        html+=formatRight(posts[k])
      }
    }
    html += '</ol></div><div id="feedlink_block">';
    html += '<a href="' + feedUrl + '" class="feedlink" title="Get free updates.">Get free updates.</a></div>';
    $(container).append(html);
  }
  
  function formatRight(post){
    var html='<li><a href="'+post.link+'">'+post.title+'</a></li>';
    return html;	
  }
  function formatLeft(post){
    var html='<div id="left_feed_item"><a href="'+post.link+'">'+post.title+'</a>';
    html+= '<p>' + post.desc + '</p></div>'
    return html;	
  }
  
  function getNodeText(node){
    var text = "";
    if(node.text) text = node.text;
    if(node.firstChild) text = node.firstChild.nodeValue;
    return text;
  }
  
})(jQuery);
