/*
 * 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: 3,
            descLength: 15,
            duration: 4000
        }
        if(!options.targeturl)	return false;
        var opts = $.extend(defaults, options);
        $(this).each(function(){
            var container = this;
            $.get(opts.targeturl,function(xml){
                xml = parseXML(xml);
                var posts=[];
                var i=0;
                opts.items = $("item", xml).length;
                $("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)+'[...]';
                        post.desc = "";
                    });
                    posts[i++]=post;
                });
                writeposts(container,posts);
                var ticker = $(container).find("#ticker");
                //var $news = $('#news-ticker');//we'll re use it a lot, so better save it to a var.
                ticker.serialScroll({
                    interval:1,
                    cycle: true,
                    items:'div',
                    duration:2000,
                    axis:'y',
                    target: ticker,
                    easing:'linear',
                    lazy:true,// NOTE: it's set to true, meaning you can add/remove/reorder items and the changes are taken into account.
                    // yeah! I now added auto-scrolling
                    step:1 // scroll 1 news each time
                });
                ticker.mouseover(function(){
                    ticker.trigger( 'stop' );
                });
                ticker.mouseout(function(){
                    ticker.trigger( 'start' );
                });
                $(".prev").click(function(){
                    ticker.trigger( 'stop' );
                    ticker.trigger( 'prev' );
                    setTimeout('$("#ticker").trigger( \'start\' )', 10000);

                });
                $(".next").click(function(){
                    ticker.trigger( 'stop' );
                    ticker.trigger( 'next' );
                    setTimeout('$("#ticker").trigger( \'start\' )', 10000);

                });
            })
        });
	
    };

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

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

    function getNodeText(node)
    {
        var text = "";
        if(node.text) text = node.text;
        if(node.firstChild) text = node.firstChild.nodeValue;
        return text;
    }
    function parseXML(xml) {
        if( window.ActiveXObject && window.GetObject ) {
            var dom = new ActiveXObject( 'Microsoft.XMLDOM' );
            dom.loadXML( xml );
            return dom;
        }
        if( window.DOMParser ) {
            return new DOMParser().parseFromString( xml, 'text/xml' );
        }
        throw new Error( 'No XML parser available' );
    }
})(jQuery);
