// API-powered mybloglog badge, case-hardened
// copyright Kent Brewster, 2008
// see http://kentbrewster.com/first-steps-with-the-mybloglog-api for details
// now with most recent Twitter tweet and last five Flickr photos

( function() {
   var trueName = '';
   for (var i = 0; i < 16; i++) { trueName += String.fromCharCode(Math.floor(Math.random() * 26) + 97); }
   window[trueName] = {};
   var $ = window[trueName];
   $.f = function() {
      return {
         init : function(el) {
            $.f.getDetails = [];
            $.f.svcUrl = {
               "30 boxes":"~",
               "bebo":"http://bebo.com/Profile.jsp?MemberId=~",
               "blogger":"http://www.blogger.com/profile/~",
               "del.icio.us":"http://delicious.com/~",
               "digg":"http://www.digg.com/users/~",
               "ebay":"http://myworld.ebay.com/~",
               "facebook":"http://www.facebook.com/profile.php?id=~",
               "flickr":" http://www.flickr.com/photos/~/",
               "friendster":"http://~.blogs.friendster.com/",
               "google calendar":"http://~.jaiku.com/",
               "jaiku":"http://~.jaiku.com/",
               "jumpcut":"http://www.jumpcut.com/~",
               "kiva":"http://www.kiva.org/lender/~",
               "last.fm":"http://www.last.fm/user/~",
               "linkedin":"http://www.linkedin.com/in/~",
               "livejournal":"http://~.livejournal.com/",
               "myspace":"http://myspace.com/~",
               "netflix":"http://rss.netflix.com/QueueRSS?id=~",
               "openid":"~",
               "plaxo":"~",
               "pownce":"http://www.pownce.com/~",
               "second life":"~",
               "shelfari":"http://www.shelfari.com/~",
               "stumbleupon":"http://~.stumbleupon.com",
               "technorati":"http://www.technorati.com/people/technorati/~",
               "textamerica":"http://~.textamerica.com/",
               "the dj list":"http://www.thedjlist.com/djs/~",
               "twitter":"http://www.twitter.com/~",
               "typekey":"http://profile.typekey.com/~",
               "upcoming":"http://upcoming.yahoo.com/user/~",
               "wakoopa":"http://www.wakoopa.com/~",
               "wink":"http://wink.com/profile/~",
               "yelp":"http://www.yelp.com/user_details?userid=~",
               "youtube":"http://youtube.com/user/~",
               "zorpia":"http://www.zorpia.com/~"
            };
            if (document.getElementById(el)) {
               $.w = document.getElementById(el);
               $.w.innerHTML = '';
               $.f.communityId = '2006111118253377';
               $.f.callback = trueName + '.f.getUsers';
               $.f.appid = '1PTzi8zIkY0bJMwA7lTIUNzdKbPm6gHSJPAmEQk-';
               $.f.count = 10;
               $.f.getUsers = function(r) {
                  delete $.f.getUsers;
                  $.f.removeScript($.f.callback);
                  var max = r.users.user.length;
                  for (var i = 0; i < max; i++) {
                     var t = i;
                     var li = document.createElement('LI');
                     li.id = r.users.user[t].id;
                     var img = document.createElement('IMG');
                     img.src = r.users.user[t].pict;
                     img.height = '48';
                     img.width = '48';
                     img.alt = r.users.user[t].nickname;
                     img.title = r.users.user[t].nickname;
                     img.align = 'absmiddle';
                     li.appendChild(img);
                     li.appendChild(document.createTextNode(' '));
                     var a = document.createElement('A');
                     a.href = r.users.user[t].url;
                     a.target = '_blank';
                     a.innerHTML = r.users.user[t].nickname.replace(/<em>/, '').replace(/<\/em>/, '');
                     li.appendChild(a);
                     $.w.appendChild(li);
                     $.f.getReaderDetails(li.id);
                  }
               };
               var url = 'http://mybloglog.yahooapis.com/v1/community/';
               url += $.f.communityId;
               url += '/readers?format=json&callback=' + trueName + '.f.getUsers';
               url += '&count=' + $.f.count;
               url += '&appid=' + $.f.appid;
               $.f.runScript(url, $.f.callback);
            }
         },
         getReaderDetails : function(id) {
            var n = $.f.getDetails.length;
            $.f.getDetails[n] = function(r) {
               delete $.f.getDetails[n];
               $.f.removeScript(trueName + '.f.getDetails[' + n + ']');
               var p = document.createElement('P');
               if (r.tags && r.tags.tag && r.tags.tag.length) {
                  p.appendChild(document.createTextNode('Tags: '));
                  var t = r.tags.tag.length;
                  for (var i = 0; i < t; i++) {
                     var a = document.createElement('A');
                     a.href = r.tags.tag[i].url;
                     if (i) {
                        p.appendChild(document.createTextNode(', '));
                     }
                     a.innerHTML = r.tags.tag[i].name.toLowerCase();
                     a.title = 'Tagged "' + r.tags.tag[i].name + '" by '  + r.tags.tag[i].count + ' user';
                     if (r.tags.tag[i].count > 1) {
                        a.title += 's';
                     }
                     a.title += '.';
                     a.alt = a.title;
                     p.appendChild(a);
                  }
                  p.appendChild(document.createTextNode('. Know this person? '));
                  var a = document.createElement('A');
                  a.innerHTML = 'Add some tags.';
                  a.target = '_blank';
                  a.href = 'http://www.mybloglog.com/buzz/members/' + r.screen_name;
                  p.appendChild(a);
               } else  {
                  p.appendChild(document.createTextNode('No tags found. Go '));
                  var a = document.createElement('A');
                  a.innerHTML = 'create some!';
                  a.target = '_blank';
                  a.href = 'http://www.mybloglog.com/buzz/members/' + r.screen_name;
                  p.appendChild(a);
               }
               document.getElementById(r.id).appendChild(p);
               var p = document.createElement('P');
               document.getElementById(r.id).appendChild(p);
               if (r.profile.services && r.profile.services.service && r.profile.services.service.length) {
                  p.appendChild(document.createTextNode('Meet Me On: '));
                  for (var i = 0; i < r.profile.services.service.length; i++) {
                     if (i) {
                        p.appendChild(document.createTextNode(', '));
                     }
                     var a = document.createElement('A');
                     a.innerHTML = r.profile.services.service[i].name;
                     if ($.f.svcUrl[r.profile.services.service[i].name]) {
                        a.href = $.f.svcUrl[r.profile.services.service[i].name].replace(/~/,r.profile.services.service[i].id);
                     }
                     a.target = '_blank';
                     p.appendChild(a);
                     if (r.profile.services.service[i].name == 'twitter') {
                        $.f.getTweet(r.id, r.profile.services.service[i].id);
                     }
                     if (r.profile.services.service[i].name == 'flickr') {
                        $.f.getFlickr(r.id, r.profile.services.service[i].nsid);
                     }
                  }
                  p.appendChild(document.createTextNode('. '));
               } else {
                  p.innerHTML = 'No social sites found.  If this is you, go <a href="http://www.mybloglog.com/buzz/e_profile_serv.php" target="_blank">add some</a> now!';
               }
            };
            var callback = trueName + '.f.getDetails[' + n + ']';
            var url = 'http://mybloglog.yahooapis.com/v1/user/';
            url += id;
            url += '?format=json&callback=' + callback;
            url += '&count=' + $.f.count;
            url += '&appid=' + $.f.appid;
            $.f.runScript(url, callback);
         },
         getTweet : function(id, nick) {
            var p = document.createElement('P');
            p.id = 'twitterStatus_' + nick;
            p.innerHTML = '';
            document.getElementById(id).appendChild(p);
            var callback = trueName + '.f.pingTweet';
            var url = 'http://twitter.com/statuses/user_timeline/' + nick + '.json?callback=' + callback;
            $.f.runScript(url, 'tweet_' + nick);
         },
         pingTweet : function(r) {
            if (r.error) {
            } else {
               var nick = r[0].user.screen_name;
               document.getElementById('twitterStatus_' + nick).innerHTML = 'Twittering: ' + r[0].text;
            }
            $.f.removeScript('tweet_' + nick);
         },
         getFlickr : function(id, nick) {
            var p = document.createElement('P');
            p.id = 'flickrStream_' + nick;
            p.innerHTML = '';
            document.getElementById(id).appendChild(p);
            var callback = trueName + '.f.pingFlickr';
            var url = 'http://api.flickr.com/services/feeds/photos_public.gne?id=' + nick + '&en-us&format=json&jsoncallback=' + callback;
            $.f.runScript(url, callback + '_' + nick);
         },
         pingFlickr : function(r) {
            var nick = r.title.split('from ')[1];
            var nsid = r.items[0].author_id;
            var p = document.getElementById('flickrStream_' + nsid)
            p.innerHTML = 'Flickr Photos:<br />';
            var max = r.items.length;
            if (max > 5) { max = 5; }
            for (var i = 0; i < max; i++) {
               var a = document.createElement('A');
               a.href = r.items[i].link;
               a.title = r.items[i].title;
               a.target = '_blank';
               var img = document.createElement('IMG');
               img.src = r.items[i].media.m.replace(/m.jpg/, 's.jpg');
               img.style.marginRight = '5px';
               a.appendChild(img);
               p.appendChild(a);
            }
            var scriptId = trueName + '.f.pingFlickr_' + nsid;
            $.f.removeScript(scriptId);
         },
         runScript : function(url, id) {
            var s = document.createElement('script');
            s.id = id;
            s.type ='text/javascript';
            s.src = url;
            document.getElementsByTagName('body')[0].appendChild(s);
         },
         removeScript : function(id) {
            if (document.getElementById(id)) {
               var s = document.getElementById(id);
               s.parentNode.removeChild(s);
            }
         }
      };
   }();
   var init = function() { $.f.init('mbl'); };
   if(typeof window.addEventListener !== 'undefined') {
      window.addEventListener('load', init, false);
   } else if(typeof window.attachEvent !== 'undefined') {
      window.attachEvent('onload', init);
   }
} )();
