$(document).ready(function() {
  
  $('#news').feedreader({
    targeturl: "news.xml",
    items: 3,
    descLength: 140
  });
});

$.fn.feedreader = function(options) {
  var defaults = {
    targeturl: 'news.xml',
    items: 3,
    descLength: 140
  }
  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() {
          post.title=getNodeText(this);
        });
        $(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);          
    })
  });
};

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 = '';
  for(var k in posts){
    html+=format(posts[k])
  }
  $(container).append(html);
}

function format(post) {
  var html='<a href="'+post.link+'"><span class="postTitle">'+post.title+'</span></a><br/><span class="postDate">'+post.date+'</span><br/>';
  html+='<span class="postDesc">'+post.desc+'</span><p/>';
  return html;
}

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

