/******************************************************
	* jQuery plug-in
	* So So Social Activity Feed
	* Services accessed: Facebook, Delicious, Twitter, Last.FM, Flickr
	* Developed by J.P. Given (http://johnpatrickgiven.com)
	* Useage: anyone so long as credit is left alone
******************************************************/
var sss={};

sss.ACTIVITY_ARRAY=new Array();
sss.TWITTER_FINISHED=0;
sss.FACEBOOK_FINISHED=0;
sss.FLICKR_FINISHED=0;
sss.LASTFM_FINISHED=0;
sss.DELICIOUS_FINISHED=0;
sss.TUMBLR_FINISHED=0;
sss.WORDPRESS_FINISHED=0;
sss.POSTEROUS_FINISHED=0;
sss.CONTAINER=null;
sss.COUNT=0;
(function($){
    $.fn.soSoSocial=function(callback){
        sss.CONTAINER=$(this);
        if(sss.TWITTER_RSS!=""){
            $.getJSON("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20xml%20where%20url%3D%22"+encodeURIComponent(sss.TWITTER_RSS)+"%22&format=json&callback=?",function(d){
                if(d.query.results.rss){
                    $(d.query.results.rss.channel.item).each(function(){
                        var title=this.title;
                        var link=this.link;
                        var description=this.description;
                        var pubDate=this.pubDate;
                        pubDate=pubDate.replace(/\,/g,'');
                        var status=title.replace(/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g,function(url){
                            return'<a href="'+url+'">'+url+'</a>'
                            }).replace(/\B@([_a-z0-9]+)/ig,function(reply){
                            return reply.charAt(0)+'<a href="http://twitter.com/'+reply.substring(1)+'">'+reply.substring(1)+'</a>'
                            });
                        status='@'+status;
                        status=status.replace(/\B@([_a-z0-9]+):/ig,"");
                        sss.ACTIVITY_ARRAY[sss.COUNT]=new Array();
                        sss.ACTIVITY_ARRAY[sss.COUNT][0]='<li style="background: url(/assets/images/twitter.png) no-repeat left top !important;">'+status+' <a href="'+link+'" target="_blank">#</a>';
                        sss.ACTIVITY_ARRAY[sss.COUNT][1]=relative_time(pubDate);
                        sss.ACTIVITY_ARRAY[sss.COUNT][2]=get_delta(pubDate);
                        sss.COUNT++
                    });
                    sss.TWITTER_FINISHED=1
                    }else{
                    console.log('SoSoSocial ERROR: Twitter feed seems to be down.');
                    sss.TWITTER_FINISHED=1
                    }
                })
        }else{
        sss.TWITTER_FINISHED=1
        }
        if(sss.LASTFM_RSS!=''){
        $.getJSON("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20xml%20where%20url%3D%22"+encodeURIComponent(sss.LASTFM_RSS)+"%22&format=json&callback=?",function(d){
            if(d.query.results.rss){
                $(d.query.results.rss.channel.item).each(function(){
                    var title=this.title;
                    var link=this.link;
                    var description=this.description;
                    var pubDate=this.pubDate;
                    pubDate=pubDate.replace(/\,/g,'');
                    sss.ACTIVITY_ARRAY[sss.COUNT]=new Array();
                    sss.ACTIVITY_ARRAY[sss.COUNT][0]='<li style="background: url(http://farm5.static.flickr.com/4007/4495300744_5c8afb3149_o.png) no-repeat left center;">Listened to <a href="'+link+'" target="_blank">'+title+'</a>';
                    sss.ACTIVITY_ARRAY[sss.COUNT][1]=relative_time(pubDate);
                    sss.ACTIVITY_ARRAY[sss.COUNT][2]=get_delta(pubDate);
                    sss.COUNT++
                });
                sss.LASTFM_FINISHED=1
                }else{
                console.log('SoSoSocial ERROR: LastFM feed seems to be down.');
                sss.LASTFM_FINISHED=1
                }
            })
    }else{
    sss.LASTFM_FINISHED=1
    }
    if(sss.FACEBOOK_RSS!=''){
    $.getJSON("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20xml%20where%20url%3D%22"+encodeURIComponent(sss.FACEBOOK_RSS)+"%22&format=json&callback=?",function(d){
        if(d.query.results.rss){
            $(d.query.results.rss.channel.item).each(function(){
                var title=this.title;
                var link=this.link;
                var description=this.description;
                var pubDate=this.pubDate;
                pubDate=pubDate.replace(/\,/g,'');
                sss.ACTIVITY_ARRAY[sss.COUNT]=new Array();
                sss.ACTIVITY_ARRAY[sss.COUNT][0]='<li style="background: url(/assets/images/facebook.png) no-repeat left top !important;">Posted <a href="'+link+'" target="_blank">'+title+'</a>';
                sss.ACTIVITY_ARRAY[sss.COUNT][1]=relative_time(pubDate);
                sss.ACTIVITY_ARRAY[sss.COUNT][2]=get_delta(pubDate);
                sss.COUNT++
            });
            sss.FACEBOOK_FINISHED=1
            }else{
            console.log('SoSoSocial ERROR: Facebook feed seems to be down.');
            sss.FACEBOOK_FINISHED=1
            }
        })
}else{
    sss.FACEBOOK_FINISHED=1
    }
    if(sss.FLICKR_RSS!=''){
    $.getJSON("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20xml%20where%20url%3D%22"+encodeURIComponent(sss.FLICKR_RSS)+"%22&format=json&callback=?",function(d){
        if(d.query.results.rss){
            $(d.query.results.rss.channel.item).each(function(){
                var title=this.title;
                var link=this.link;
                var description=this.description;
                var pubDate=this.pubDate;
                pubDate=pubDate.replace(/\,/g,'');
                title=title.toString();
                title=title.split(",");
                title=title[0];
                sss.ACTIVITY_ARRAY[sss.COUNT]=new Array();
                sss.ACTIVITY_ARRAY[sss.COUNT][0]='<li style="background: url(http://farm3.static.flickr.com/2727/4494661413_0228be5f32_o.png) no-repeat left center;">Uploaded <a href="'+link+'" target="_blank">'+title+'</a>';
                sss.ACTIVITY_ARRAY[sss.COUNT][1]=relative_time(pubDate);
                sss.ACTIVITY_ARRAY[sss.COUNT][2]=get_delta(pubDate);
                sss.COUNT++
            });
            sss.FLICKR_FINISHED=1
            }else{
            console.log('SoSoSocial ERROR: Flickr feed seems to be down.');
            sss.FLICKR_FINISHED=1
            }
        })
}else{
    sss.FLICKR_FINISHED=1
    }
    if(sss.DELICIOUS_RSS!=''){
    $.getJSON("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20xml%20where%20url%3D%22"+encodeURIComponent(sss.DELICIOUS_RSS)+"%22&format=json&callback=?",function(d){
        if(d.query.results.rss){
            $(d.query.results.rss.channel.item).each(function(){
                var title=this.title;
                var link=this.link;
                var description=this.description;
                var pubDate=this.pubDate;
                pubDate=pubDate.replace(/\,/g,'');
                sss.ACTIVITY_ARRAY[sss.COUNT]=new Array();
                sss.ACTIVITY_ARRAY[sss.COUNT][0]='<li style="background: url(http://farm5.static.flickr.com/4064/4495300640_2a7cbbb922_o.png) no-repeat left center;">Saved <a href="'+link+'" target="_blank">'+title+'</a>.';
                sss.ACTIVITY_ARRAY[sss.COUNT][1]=relative_time(pubDate);
                sss.ACTIVITY_ARRAY[sss.COUNT][2]=get_delta(pubDate);
                sss.COUNT++
            });
            sss.DELICIOUS_FINISHED=1
            }else{
            console.log('SoSoSocial ERROR: Delicious feed seems to be down.');
            sss.DELICIOUS_FINISHED=1
            }
        })
}else{
    sss.DELICIOUS_FINISHED=1
    }
    print_array($(this));
if(typeof callback=='function'){
    callback.call(this)
    }
    if(sss.TUMBLR_RSS!=''){
    $.getJSON("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20xml%20where%20url%3D%22"+encodeURIComponent(sss.TUMBLR_RSS)+"%22&format=json&callback=?",function(d){
        if(d.query.results.rss){}else{
            console.log('SoSoSocial ERROR: Facebook feed seems to be down.');
            sss.FACEBOOK_FINISHED=1
            }
            $(d.query.results.rss.channel.item).each(function(){
            var title=this.title;
            var link=this.link;
            var description=this.description;
            var pubDate=this.pubDate;
            pubDate=pubDate.replace(/\,/g,'');
            sss.ACTIVITY_ARRAY[sss.COUNT]=new Array();
            sss.ACTIVITY_ARRAY[sss.COUNT][0]='<li style="background: url(http://farm5.static.flickr.com/4022/4494661551_3d68321873_o.png) no-repeat left center;">Posted <a href="'+link+'" target="_blank">'+title+'</a>.';
            sss.ACTIVITY_ARRAY[sss.COUNT][1]=relative_time(pubDate);
            sss.ACTIVITY_ARRAY[sss.COUNT][2]=get_delta(pubDate);
            sss.COUNT++
        });
        sss.TUMBLR_FINISHED=1
        })
    }else{
    sss.TUMBLR_FINISHED=1
    }
    print_array($(this));
if(typeof callback=='function'){
    callback.call(this)
    }
    if(sss.WORDPRESS_RSS!=''){
    $.getJSON("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20xml%20where%20url%3D%22"+encodeURIComponent(sss.WORDPRESS_RSS)+"%22&format=json&callback=?",function(d){
        if(d.query.results.rss){
            $(d.query.results.rss.channel.item).each(function(){
                var title=this.title;
                var link=this.link;
                var description=this.description;
                var pubDate=this.pubDate;
                pubDate=pubDate.replace(/\,/g,'');
                sss.ACTIVITY_ARRAY[sss.COUNT]=new Array();
                sss.ACTIVITY_ARRAY[sss.COUNT][0]='<li style="background: url(http://farm5.static.flickr.com/4060/4495300842_3f39a6b514_o.png) no-repeat left center;">Posted <a href="'+link+'" target="_blank">'+title+'</a> on Wordpress.';
                sss.ACTIVITY_ARRAY[sss.COUNT][1]=relative_time(pubDate);
                sss.ACTIVITY_ARRAY[sss.COUNT][2]=get_delta(pubDate);
                sss.COUNT++
            });
            sss.WORDPRESS_FINISHED=1
            }else{
            console.log('SoSoSocial ERROR: Wordpress feed seems to be down.');
            sss.WORDPRESS_FINISHED=1
            }
        })
}else{
    sss.WORDPRESS_FINISHED=1
    }
    print_array($(this));
if(typeof callback=='function'){
    callback.call(this)
    }
    if(sss.POSTEROUS_RSS!=''){
    $.getJSON("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20xml%20where%20url%3D%22"+encodeURIComponent(sss.POSTEROUS_RSS)+"%22&format=json&callback=?",function(d){
        if(d.query.results.rss){
            $(d.query.results.rss.channel.item).each(function(){
                var title=this.title;
                var link=this.link;
                var description=this.description;
                var pubDate=this.pubDate;
                pubDate=pubDate.replace(/\,/g,'');
                sss.ACTIVITY_ARRAY[sss.COUNT]=new Array();
                sss.ACTIVITY_ARRAY[sss.COUNT][0]='<li style="background: url(http://farm5.static.flickr.com/4152/4946030629_65fece60f2_o.png) no-repeat left center;">Posted <a href="'+link+'" target="_blank">'+title+'</a> on Posterous.';
                sss.ACTIVITY_ARRAY[sss.COUNT][1]=relative_time(pubDate);
                sss.ACTIVITY_ARRAY[sss.COUNT][2]=get_delta(pubDate);
                sss.COUNT++
            });
            sss.POSTEROUS_FINISHED=1
            }else{
            console.log('SoSoSocial ERROR: Wordpress feed seems to be down.');
            sss.POSTEROUS_FINISHED=1
            }
        })
}else{
    sss.POSTEROUS_FINISHED=1
    }
    print_array($(this));
if(typeof callback=='function'){
    callback.call(this)
    }
}
})(jQuery);
function print_array(obj){
    if((sss.FLICKR_FINISHED==1)&&(sss.TWITTER_FINISHED==1)&&(sss.FACEBOOK_FINISHED==1)&&(sss.LASTFM_FINISHED==1)&&(sss.DELICIOUS_FINISHED==1)&&(sss.TUMBLR_FINISHED==1)&&(sss.WORDPRESS_FINISHED==1)){
        if((sss.LIMIT==0)||(sss.ACTIVITY_ARRAY.length<sss.LIMIT)){
            sss.LIMIT=sss.ACTIVITY_ARRAY.length
            }
            sss.CONTAINER.html("");
        sss.ACTIVITY_ARRAY.sort(by(2,1));
        var html='<ul>';
        for(j=0;j<sss.LIMIT;j++){
            html+=sss.ACTIVITY_ARRAY[j][0]+' ('+sss.ACTIVITY_ARRAY[j][1]+')</li>'
            }
            html+='</ul>';
        sss.CONTAINER.append(html)
        }else{
        setTimeout("print_array()",1000)
        }
    }
function get_delta(time_value){
    var values=time_value.split(" ");
    time_value=values[2]+" "+values[1]+", "+values[3]+" "+values[4];
    var parsed_date=Date.parse(time_value);
    var relative_to=(arguments.length>1)?arguments[1]:new Date();
    var delta=parseInt((relative_to.getTime()-parsed_date)/1000);
    if(values[5]=="+0000"){
        delta=delta+(relative_to.getTimezoneOffset()*60)
        }else{
        delta=delta+relative_to.getTimezoneOffset()
        }
        return delta
    }
    function relative_time(time_value){
    var delta=get_delta(time_value);
    if(delta<60){
        return'less than a minute ago'
        }else if(delta<120){
        return'about a minute ago'
        }else if(delta<(60*60)){
        return(parseInt(delta/60)).toString()+' minutes ago'
        }else if(delta<(120*60)){
        return'about an hour ago'
        }else if(delta<(24*60*60)){
        return'about '+(parseInt(delta/3600)).toString()+' hours ago'
        }else if(delta<(48*60*60)){
        return'1 day ago'
        }else{
        return(parseInt(delta/86400)).toString()+' days ago'
        }
    }
function by(i,dir){
    return function(a,b){
        a=a[i];
        b=b[i];
        return a==b?0:(a<b?-1*dir:dir)
        }
    }
