(function($){  
    $.fn.lb_feed = function(options) {  

        var defaults = {  
            feeds       : [{}],
            max_results : 4
        };
        
        var items   = new Array();
        
        var format  = '<div class="news-item">[%img%]<a href="[%url%]" target="_blank">[%description%]</a><span class="news-date">[%date%]</span></div>';
        
        var feeds   = 0;
        var processed_feeds = 0;
        
        var obj = '';

        options     = $.extend(defaults, options);
        
        function add_to_items(object) {
            items.push(object);
        }
        
        function return_html() {

            if( feeds == processed_feeds ) {

                html = '';

                var total_length = items.length < options.max_results ? items.length : options.max_results;
                
                var newest = -1;
                var order  = new Array();

                for( var j = 0; j < items.length; j++) {
                    newest = j;
                    for( var i = 0; i < items.length; i++) {
                        if( jQuery.inArray(i, order) < 0 ){
                            var date = new Date(items[i].date);
//                            alert('newest ' + newest)
                            var current_newest =  new Date(items[newest].date);
    
                            if( (date - current_newest) > 0 )
                                newest = i;
                        }
                    }
                    
                    order.push(newest);
                }

                /**/

                /*for( var i = 0; i < items.length; i++) {        // re order array
                    var date = new Date(items[i].date)
                    today = new Date();
                    difference = date - today;
                    minutes = Math.round(difference/(1000));
                    
                    alert(days)
                }/**/

                var item_html = '';

                for ( var h = 0; h < order.length && h < 4; h++) {
                    item_html = format.replace('[%title%]', items[order[h]].title);
                    item_html = item_html.replace('[%date%]', items[order[h]].date);
                    item_html = item_html.replace('[%url%]', items[order[h]].link);
                    item_html = item_html.replace('[%description%]', items[order[h]].description);
                    
                    if( items[order[h]].img ) {
                        item_html = item_html.replace('[%img%]', '<img src="' + items[order[h]].img + '" alt="" />');
                    } else {
                        item_html = item_html.replace('[%img%]', '');
                    }

                    html += item_html;
                }

                return html;
            } else {
                return false;
            }
        }
        
        function parse_rss($feed) {
            feeds ++;

            $.ajax({
                url     : $feed.url,
                success : function(d) {
                    //find each 'item' in the file and parse it
                    $(d).find('item').each(function() {
                        var $new_item = new Object;
                        //name the current found item this for this particular loop run
                        var $item = $(this);

                        $new_item.title         = $item.find('title').text();
                        $new_item.link          = $item.find('link').text();
                        $new_item.description   = $item.find('description').text();
                        $new_item.date          = $item.find('pubDate').text();
    
                        add_to_items($new_item);

                    });

                    processed_feeds ++;

                    if( return_html() ) {
                        obj.append(return_html());
                    }
                }
            })

        }   // end parse rss

        function parse_external_rss($feed) {
            // external RSS feed
            
            feeds ++;

            var $url = 'http://query.yahooapis.com/v1/public/yql?q=';
                $url += escape('SELECT * FROM xml WHERE url="' + $feed.url + '"');
                $url += '&format=json';

            $.ajax(
                {
                    type        : 'get',
                    url         : $url,
                    async       : false,
                    dataType    : 'jsonp',
                    success: function(data, textStatus) {
                        
                        
                        var post_length = 0;
                        if ('item' in data.query.results.rss.channel) {
                          post_length = data.query.results.rss.channel.item.length;
                        }
                        
                        for (var i=0; i < post_length && i < options.max_results; i++) {

                            var $new_item = new Object;

                            var item = data.query.results.rss.channel.item[i];
                            

                            $new_item.title         = item.title;
                            $new_item.link          = item.link;
                            $new_item.description   = item.description;
                            $new_item.date          = item.pubDate;

                            if( typeof($new_item.link) != 'undefined' && $new_item.link.indexOf('twitter.com') > -1 )
                                $new_item.img           = '/img/twitter.png';

                            add_to_items($new_item);
                        }

                        processed_feeds ++;
                        
                        if( return_html() ) { obj.append(return_html()); }

                    }
                    

                }
            );

        }   // end external rss

        function parse_json($feed) {
            // json feed

            feeds ++;

            $.ajax(
                {
                    type        : 'get',
                    url         : $feed.url,
                    async       : false,
                    dataType    : 'jsonp',
                    success: function(data, textStatus) {

                        for (var i=0; i < data.length && i < options.max_results; i++) {

                            var $new_item = new Object;

                            item = data[i];

                            $new_item.title         = item.user.screen_name;
                            $new_item.link          = item.link;
                            $new_item.description   = item.text;
                            $new_item.date          = item.created_at;

                            $new_item.img           = item.user.profile_image_url;

                            add_to_items($new_item);
                        }

                        processed_feeds ++;
                        
                        if( return_html() ) { obj.append(return_html()); }

                    }
                    

                }
            );

        }   // end json parse

        function parse_fb_page($feed) {
            // facebook
            
            feeds ++;

            var $url = 'http://query.yahooapis.com/v1/public/yql?q=';
                $url += escape('SELECT * FROM html WHERE url="' + $feed.url + '"');
                $url += escape(' AND xpath="//div[@class=\'minifeedwall\']"');
                $url += '&format=json';

            $.ajax(
                {
                    type        : 'get',
                    url         : $url,
                    async       : false,
                    dataType    : 'jsonp',
                    success: function(data, textStatus) {
                        for (var i=0; i < data.query.results.div.div.length; i++) {

                            var $new_item = new Object;

                            div = data.query.results.div.div[i];
                            
                            if( typeof(div.div[1].form) != 'undefined' ) {
                                $new_item.title         = div.a.title;
                                $new_item.link          = div.a.href;
                                $new_item.description   = div.div[0].h3.span[1].content;
                                $new_item.date          = div.div[1].form.span.span.span.a.content;

                                $new_item.img           = '/img/facebook.png'; //div.a.img.src
    
                                add_to_items($new_item);
                            }

                        }

                        processed_feeds ++;
                        
                        if( return_html() ) {
                            obj.html(return_html());
                        }
                    }
                    

                }
            );

        }   // end parse yql
        
        function parse($feed) {
            if( $feed.url.indexOf('http://facebook.com') === 0 || $feed.url.indexOf('http://www.facebook.com') === 0 ) {
                parse_fb_page($feed);
            } else if( typeof($feed.type) != 'undefined' && $feed.type == 'json' ) {
                parse_json($feed);
            } else {
                parse_external_rss($feed);
            }
        }

        return this.each(function() {
            obj = $(this);  
            var body = obj.html();

            jQuery.each( options.feeds, function(count) {
                //alert(options.feeds[count].url);
                parse(options.feeds[count]);
            });

        });
    };  
})(jQuery);
