function createTwitterCallback(twitter_list_id) {
  var func = function(messages){
    var A=[];
    for(var D=0; D< messages.length; D++){
      var screen_name = messages[D].user.screen_name;
      var message_body = messages[D].text;
      message_body = replace_urls_with_links(message_body);
      message_body = replace_names_with_links(message_body);
      A.push("<li><span>" + message_body + '</span> <a style="font-size:85%" href="http://twitter.com/' + screen_name +"/statuses/"+ messages[D].id+'">'+relative_time( messages[D].created_at)+"</a></li>");
    }
    document.getElementById(twitter_list_id).innerHTML=A.join("");
  };

  function replace_urls_with_links(text) {
    return text.replace(/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g,function(F){return'<a href="'+F+'">'+F+"</a>";});
  }

  function replace_names_with_links(text) {
    return text.replace(/\B@([_a-z0-9]+)/ig,function(F){return F.charAt(0)+'<a href="http://www.twitter.com/'+F.substring(1)+'">'+F.substring(1)+"</a>";})
  }

  function relative_time(C){
    var B=C.split(" ");C=B[1]+" "+B[2]+", "+B[5]+" "+B[3];
    var A=Date.parse(C);
    var D=(arguments.length>1)?arguments[1]:new Date();
    var E=parseInt((D.getTime()-A)/1000);
    E=E+(D.getTimezoneOffset()*60);
    if(E<60){
      return "less than a minute ago";
    }else{
      if(E<120){
        return"about a minute ago";
      }else{
        if(E<(60*60)){
          return(parseInt(E/60)).toString()+" minutes ago";
        }else{
          if(E<(120*60)){
            return"about an hour ago";
          }else{
            if(E<(24*60*60)){
              return"about "+(parseInt(E/3600)).toString()+" hours ago";
            }else{
              if(E<(48*60*60)){
                return"1 day ago";
              }else{
                return(parseInt(E/86400)).toString()+" days ago";
              }
            }
          }
        }
      }
    }
  };
  return func;
}
