Date.prototype.setISO8601=function(dString){var regexp=/(\d\d\d\d)(-)?(\d\d)(-)?(\d\d)(T)?(\d\d)(:)?(\d\d)(:)?(\d\d)(\.\d+)?(Z|([+-])(\d\d)(:)?(\d\d))/;if(dString.toString().match(new RegExp(regexp))){var d=dString.match(new RegExp(regexp));var offset=0;this.setUTCDate(1);this.setUTCFullYear(parseInt(d[1],10));this.setUTCMonth(parseInt(d[3],10)-1);this.setUTCDate(parseInt(d[5],10));this.setUTCHours(parseInt(d[7],10));this.setUTCMinutes(parseInt(d[9],10));this.setUTCSeconds(parseInt(d[11],10));if(d[12]) this.setUTCMilliseconds(parseFloat(d[12])*1000);else this.setUTCMilliseconds(0);if(d[13]!='Z'){offset=(d[15]*60)+parseInt(d[17],10);offset*=((d[14]=='-')?-1:1);this.setTime(this.getTime()-offset*60*1000);}} else{this.setTime(Date.parse(dString));} return this;};

function parse_date(date_str) {
  // The non-search twitter APIs return inconsistently-formatted dates, which Date.parse
  // cannot handle in IE. We therefore perform the following transformation:
  // "Wed Apr 29 08:53:31 +0000 2009" => "Wed, Apr 29 2009 08:53:31 +0000"
  return Date.parse(date_str.replace(/^([a-z]{3})( [a-z]{3} \d\d?)(.*)( \d{4})$/i, '$1,$2$4$3'));
}

function relative_time(time_value, locale, facebook) {
    var parsed_date,
        relative_to = new Date(),
        delta,
        r = '';

    if(facebook) {
        var today = new Date();
        today.setISO8601(time_value);
        parsed_date = today;
    }
    else {
        parsed_date = parse_date(time_value);
    }
    delta = parseInt((relative_to.getTime() - parsed_date) / 1000);

    if (delta < 60) {
        r = locale.secAgo.replace('%t', delta);
    } else if(delta < 120) {
        r = locale.oneMinAgo;
    } else if(delta < (45*60)) {
        r = locale.minAgo.replace('%t', (parseInt(delta / 60, 10)).toString());
    } else if(delta < (2*60*60)) {
        r = locale.oneHouAgo;
    } else if(delta < (24*60*60)) {
        r = locale.houAgo.replace('%t', (parseInt(delta / 3600, 10)).toString());
    } else if(delta < (48*60*60)) {
        r = locale.oneDayAgo;
    } else {
        r = locale.dayAgo.replace('%t', (parseInt(delta / 86400, 10)).toString());
    }
    return r;
};

/*
 * jGFeed 1.0 - Google Feed API abstraction plugin for jQuery
 * http://jquery-howto.blogspot.com
 */
(function($){$.extend({jGFeed:function(url,fnk,num,key){if(url==null){return false;}var gurl="http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&callback=?&q="+url;if(num!=null){gurl+="&num="+num;}if(key!=null){gurl+="&key="+key;}$.getJSON(gurl,function(data){if(typeof fnk=="function"){fnk.call(this,data.responseData.feed);}else{return false;}});}});})(jQuery);

/*
 * jTweet
 * IMPORTANT: DO NOT UPDATE, HIGLY CUSTOMIZED
 * http://tweet.seaofclouds.com/
 */
(function($){$.fn.tweet=function(o,locale){var s={username:["seaofclouds"],list:null,avatar_size:null,count:3,intro_text:null,outro_text:null,loading_text:locale.loading,query:null,refresh_interval:null};if(o)$.extend(s,o);$.fn.extend({linkUrl:function(){var returning=[];var regexp=/((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi;this.each(function(){returning.push(this.replace(regexp,"<a href=\"$1\">$1</a>"));});return $(returning);},linkUser:function(){var returning=[];var regexp=/[\@]+([A-Za-z0-9-_]+)/gi;this.each(function(){returning.push(this.replace(regexp,"<a href=\"http://twitter.com/$1\">@$1</a>"));});return $(returning);},linkHash:function(){var returning=[];var regexp=/(?:^| )[\#]+([A-Za-z0-9-_]+)/gi;this.each(function(){returning.push(this.replace(regexp,' <a href="http://search.twitter.com/search?q=&tag=$1&lang=all&from='+s.username.join("%2BOR%2B")+'">#$1</a>'));});return $(returning);},capAwesome:function(){var returning=[];this.each(function(){returning.push(this.replace(/\b(awesome)\b/gi,'<span class="awesome">$1</span>'));});return $(returning);},capEpic:function(){var returning=[];this.each(function(){returning.push(this.replace(/\b(epic)\b/gi,'<span class="epic">$1</span>'));});return $(returning);},makeHeart:function(){var returning=[];this.each(function(){returning.push(this.replace(/(<)+[3]/gi,"<tt class='heart'>♥</tt>"));});return $(returning);}});function build_url(){var proto=('https:'==document.location.protocol?'https:':'http:');if(s.list){return proto+"//api.twitter.com/1/"+s.username[0]+"/lists/"+s.list+"/statuses.json?per_page="+s.count+"&callback=?";}else if(s.query==null&&s.username.length==1){return proto+'//api.twitter.com/1/statuses/user_timeline.json?screen_name='+s.username[0]+'&count='+s.count+'&include_rts=1&callback=?';}else{var query=(s.query||'from:'+s.username.join(' OR from:'));return proto+'//search.twitter.com/search.json?&q='+encodeURIComponent(query)+'&rpp='+s.count+'&callback=?';}} return this.each(function(i,widget){var list=$('<ul class="tweet_list">').appendTo(widget);var intro='<p class="tweet_intro">'+s.intro_text+'</p>';var outro='<p class="tweet_outro">'+s.outro_text+'</p>';var loading=$('<p class="loading">'+s.loading_text+'</p>');if(typeof(s.username)=="string"){s.username=[s.username];} if(s.loading_text)$(widget).append(loading);$(widget).bind("load",function(){$.getJSON(build_url(),function(data){if(s.loading_text)loading.remove();if(s.intro_text)list.before(intro);list.empty();var tweets=(data.results||data);$.each(tweets,function(i,item){if(s.join_text=="auto"){if(item.text.match(/^(@([A-Za-z0-9-_]+)) .*/i)){var join_text=s.auto_join_text_reply;}else if(item.text.match(/(^\w+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+) .*/i)){var join_text=s.auto_join_text_url;}else if(item.text.match(/^((\w+ed)|just) .*/im)){var join_text=s.auto_join_text_ed;}else if(item.text.match(/^(\w*ing) .*/i)){var join_text=s.auto_join_text_ing;}else{var join_text=s.auto_join_text_default;}}else{var join_text=s.join_text;};var from_user=item.from_user||item.user.screen_name;var profile_image_url=item.profile_image_url||item.user.profile_image_url;var avatar_template='<a class="tweet_avatar" href="http://twitter.com/'+from_user+'"><img src="'+profile_image_url+'" height="'+s.avatar_size+'" width="'+s.avatar_size+'" alt="'+from_user+'\'s avatar" title="'+from_user+'\'s avatar" border="0"/></a>';var avatar=(s.avatar_size?avatar_template:'');var date='<p class="time"><a href="http://twitter.com/'+from_user+'/statuses/'+item.id+'" rel="external" title="'+locale.viewTweet+'">'+relative_time(item.created_at,locale)+'</a></p>';var text='<p class="tweet-text">'+$([item.text]).linkUrl().linkUser().linkHash().makeHeart().capAwesome().capEpic()[0]+'</p>';list.append('<li>'+avatar+text+date+'</li>');list.children('li:first').addClass('tweet_first');list.children('li:odd').addClass('tweet_even');list.children('li:even').addClass('tweet_odd');});if(s.outro_text)list.after(outro);$(widget).trigger("loaded").trigger((tweets.length==0?"empty":"full"));if(s.refresh_interval){window.setTimeout(function(){$(widget).trigger("load");},1000*s.refresh_interval);};});}).trigger("load");});};})(jQuery);


/*
* jFlickrFeed - Copyright (C) 2009 Joel Sutherland
* http://www.newmediacampaigns.com/page/jquery-flickr-plugin
*/
(function($){$.fn.jflickrfeed=function(settings,callback){settings=$.extend(true,{flickrbase:'http://api.flickr.com/services/feeds/',feedapi:'photos_public.gne',limit:20,qstrings:{lang:'en-us',format:'json',jsoncallback:'?'},cleanDescription:true,useTemplate:true,itemTemplate:'',itemCallback:function(){}},settings);var url=settings.flickrbase+settings.feedapi+'?';var first=true;for(var key in settings.qstrings){if(!first)
url+='&';url+=key+'='+settings.qstrings[key];first=false;} return $(this).each(function(){var $container=$(this);var container=this;$.getJSON(url,function(data){$.each(data.items,function(i,item){if(i<settings.limit){if(settings.cleanDescription){var regex=/<p>(.*?)<\/p>/g;var input=item.description;if(regex.test(input)){item.description=input.match(regex)[2]
if(item.description!=undefined) item.description=item.description.replace('<p>','').replace('</p>','');}} item['image_s']=item.media.m.replace('_m','_s');item['image_t']=item.media.m.replace('_m','_t');item['image_m']=item.media.m.replace('_m','_m');item['image']=item.media.m.replace('_m','');item['image_b']=item.media.m.replace('_m','_b');delete item.media;if(settings.useTemplate){var template=settings.itemTemplate;for(var key in item){var rgx=new RegExp('{{'+key+'}}','g');template=template.replace(rgx,item[key]);} $container.append(template)} settings.itemCallback.call(container,item);}});if($.isFunction(callback)){callback.call(container,data);}});});}})(jQuery);


/*
 * jYoutube 1.0 - YouTube video image getter plugin for jQuery
 * http://jquery-howto.blogspot.com
 */
(function($){$.extend({jYoutube:function(url,size){if(url===null){return"";} size=(size===null)?"big":size;var vid;var results;results=url.match("[\\?&]v=([^&#]*)");vid=(results===null)?url:results[1];if(size=="small"){return"http://img.youtube.com/vi/"+vid+"/2.jpg";}else{return"http://img.youtube.com/vi/"+vid+"/0.jpg";}}})})(jQuery);

var social = (function(){
    var s = {},
        locale = {
            fr: {
                secAgo:       'Il y a %t secondes',
                oneMinAgo:    'Il y a une minute',
                minAgo:       'Il y a %t minutes',
                oneHouAgo:    'Il y a une heure',
                houAgo:       'Il y a %t heures',
                oneDayAgo:    'Il y a un jour',
                dayAgo:       'Il y a %t jours',
                viewTweet:    'Voir le tweet sur twitter',
                loading:      'Chargement...',
                viewFacebook: 'Voir sur facebook'
            },
            en: {
                secAgo:       '%t seconds ago',
                oneMinAgo:    'one minute ago',
                minAgo:       '%t minutes ago',
                oneHouAgo:    'one hour ago',
                houAgo:       '%t hours ago',
                oneDayAgo:    'one day ago',
                dayAgo:       '%t days ago',
                viewTweet:    'View the tweet on twitter',
                loading:      'Loading...',
                viewFacebook: 'View on Facebook'
            }
        },
        network;
    
    // Set the array for the animation of the color
    function setColorAnimationArray(colorBorder, colorText) {
        if ( !colorText ) colorText = colorBorder
        return {borderTopColor: colorBorder, borderLeftColor: colorBorder, borderRightColor: colorBorder, borderBottomColor: colorBorder, color: colorText};
    }
    
    // Facebook feed
    function addFacebookTo(dom) {
        $.getJSON("http://graph.facebook.com/meetsidlee/feed?limit=2&callback=?",function(json){
            var html = "<ul>";
            $.each(json.data,function(i,fb){
                html += '<li>'+
                        '<p class="message">'+(fb.message||fb.name)+'<br /><a href="'+fb.link+'">'+locale.viewFacebook+'</a></p>'+
                        '<p class="time">'+relative_time(fb.created_time, locale, true)+'</p>'+
                        '</li>';
            });
            html += "</ul>";
            $(dom).html(html);
        });        
    }    
    
    // Twitter feed
    function addTwitterTo(dom) {
        $(dom).tweet({
            username: "sidlee",
            join_text: "auto",
            count: 2
        }, locale);
    }
    
    // Youtube feed
    function addYoutubeTo(dom) {
        $.jGFeed('http://gdata.youtube.com/feeds/base/users/Sidleetv/uploads?alt=rss&amp;v=2&amp;orderby=published&amp;client=ytapi-youtube-profile',
            function(feeds){
                if(!feeds) return false;
        
                var html = '',
                    max = (feeds.entries.length > 2) ? 2 : feeds.entries.length;
        
                // do whatever you want with feeds here
                for(var i=0; i<max; i++) {
                    var entry = feeds.entries[i];
                    html += '<li>'+
                            '<a href="' + entry.link + '" title="' + entry.title + '" class="image-link"><img src="' + $.jYoutube(entry.link, 'small') + '" class="thumb left"></a>'+
                            '<h4><a href="' + entry.link + '" title="' + entry.title + '" class="image-link">' +entry.title+ '</a>  </h4>'+
                            '<span class="time">' +relative_time(entry.publishedDate, locale)+ '</span>'+
                            '</li>';
                }
        
                $(dom).html('<ul>'+html+'</ul>');
        }, 4);
    }

    // Flickr feed
    function addFlickrTo(dom) {
        $(dom).jflickrfeed({
        	limit: 2,
        	qstrings: {
        		id: '42673854@N04'
        	},
        	itemTemplate: 
        	'<li>' +
        		'<a href="{{image_b}}" rel="external"><img src="{{image_m}}" alt="{{title}}" /></a>' +
        	'</li>'
        });
    }
    
    function displaySocialBox(netw) {
        $('.socialBox').hide();
        $('.socialBox.'+netw).show();
        
        var boxHeight = $('.socialBox.'+netw).height(),
            boxTop = $('.socialBox.'+netw).offset().top,
            linkTop = $('.socialList .'+netw).offset().top,
            margin = linkTop - boxTop - 4;
        
        $('.socialBox.'+netw+' .arrow').css('marginTop', margin+'px');
    }
    
    s.init = function() {
        if($('body').hasClass('fr')) locale = locale.fr;
        else locale = locale.en;
        
        addFacebookTo(".facebook-feed");
        addTwitterTo(".tweet-feed");
        addFlickrTo(".flickr-feed");
        addYoutubeTo(".youtube-feed");
        
        // Pulse effect on the follow link
        $('.socialBox .title-follow a').hover(
            function() {
                $(this).animate(setColorAnimationArray("#f7f7f7"), 600);
            },
            function() {
                $(this).animate(setColorAnimationArray("#808080"), 600);
            });
        
        // Tooltip
        $('.socialList a').click(function(){}).hover(
               function() {
                    if( $(this).hasClass('facebook') ) displaySocialBox('facebook');
                    if( $(this).hasClass('twitter') ) displaySocialBox('twitter');
                    if( $(this).hasClass('flickr') ) displaySocialBox('flickr');
                    if( $(this).hasClass('youtube') ) displaySocialBox('youtube');
               },
               function() {
                   var cancel = false,
                       network = $(this).attr('class').slice(5);
            
                   $('.socialBox.'+network).mouseenter(function() {
                       cancel = true;
                   });
                   
                   var timeout = setTimeout(function() {
                       if(cancel) return false;
                       $('.socialBox.'+network).hide();
                   }, 200);
                   
                   
                   
                   
               });
        $('.socialBox').mouseleave(function() {
            $(this).hide()
        })
    };
    
    return s;
}());
