/*
* 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: 'http://blogs.atalayasec.org/atalaya/?feed=rss2',
            items: 10,
            descLength: 30
        }
        if (!options.targeturl) return false;
        var opts = $.extend(defaults, options);

        $(this).each(function() {
            var container = this;

            var i = 0;

            $.get(opts.targeturl, function(xml) {
                var posts = [];
                $("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);

            });


            if (i == 0) { $(container).html('<center>No Posts</center>') };

        });

    };

    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 = '<marquee direction=up speed=20 scrollamount=2>';
        for (var k in posts) {
            html += format(posts[k]);
            alert(posts[k]);
        }
        html += '</marquee>';
        $(container).append(html);
    }

    function format(post) {
        var html = '<b><a href="' + post.link + '">' + post.title + '</a></b><br /><div class="date" style="font-size:11px;">' + (post.date) + '</div><br />';
        html += '<div style="text-align:center;">' + post.desc + '</div><br /><br /><a href="' + post.link + '">Read more</a><hr>'
        return html;
    }

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

})(jQuery);
