twitterbadge = function(){
  var config = {
    countDefault:3,
    badgeID:'twitterbadge',
    userID:'twitterbadgeuser',
    tweetsID:'twitterbadgetweets',
    userinfo:'userinfo',
    stylesmatch:/skin-(w+)/,
    amountmatch:/amount-(d+)/,
    styles:{
      'grey':'twitterbadge.css',
      'blue':'twitterbadgeblue.css'
    }
  };
  var badge = document.getElementById(config.badgeID);
  if(badge){
    var link = badge.getElementsByTagName('a')[0];
    if(link){
      var classdata = badge.className;
      var head = document.getElementsByTagName('head')[0];
      var amount = config.amountmatch.exec(classdata);
      var amount = amount ? amount[1] : config.countDefault;
      var skin = config.stylesmatch.exec(classdata);
      if(skin && skin[1]){
        var style = document.createElement('link');
        style.setAttribute('rel','stylesheet');
        style.setAttribute('type','text/css');
        style.setAttribute('href',config.styles[skin[1]]);
        head.insertBefore(style,head.firstChild);
      }
      var name = link.href.split('/');
      var resturl = 'http://twitter.com/statuses/user_timeline/' +
                    name[name.length-1] + '.json?callback=' +
                    'twitterbadge.show&count=' + amount;
      var script = document.createElement('script');
      script.src = resturl;
      script.type = 'text/javascript';
      function show(result){
        if(classdata.indexOf(config.userinfo) != -1){
          var user = document.createElement('p');
          user.id = config.userID;
          var img = document.createElement('img');
          img.src = result[0].user.profile_image_url;
          img.alt = result[0].user.name;
          user.appendChild(img);
          var ul = document.createElement('ul');
          var data = ['screen_name','name','location'];
          for(var i=0;data[i];i++){
            if(result[0].user[data[i]]){
              var li = document.createElement('li');
              li.appendChild(document.createTextNode(result[0].user[data[i]]));
              ul.appendChild(li);
            }
          }
          user.appendChild(ul);
          badge.appendChild(user);
        }
        var tweets = document.createElement('ul');
        tweets.id = config.tweetsID;
        for(var i=0,j=result.length;i<j;i++){
          var username = result[i].user.screen_name;
          var li = document.createElement('li');
          var span = document.createElement('span');
          span.innerHTML = result[i].text+' ';
          li.appendChild(span);
          var link = document.createElement('a');
          link.setAttribute('href','http://twitter.com/' + username + 
                                   '/statuses/'+result[i].id);
          link.appendChild(document.createTextNode(relative_time(result[i].created_at)));
          li.appendChild(link);
          tweets.appendChild(li);
        }
        badge.appendChild(tweets);
      }
      function relative_time(time_value) {
        var values = time_value.split(" ");
        time_value = values[1] + " " + values[2] + ", " + values[5] + " " + values[3];
        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);
        delta = delta + (relative_to.getTimezoneOffset() * 60);
        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';
        }
      }
    }
  }
  return {
    show:show,
    init:function(){
      head.appendChild(script);
    }
  };
}();
twitterbadge.init();