( function( $ ) {
  $.fn.showTwitter = function( options ) {
    var defaults = {
      freq: 60000
    };
    var setting = $.extend( defaults, options );
    setting.id = Math.random().toString().replace( '.', '' );
    setting.innerId  = 'tw' + defaults.id;
    var method = {
      start: function( item ) {
        setting.target = $('<ul>').attr('id', setting.innerId );
        setting.target.appendTo( item );
        return;
      },
      show: function ( f ) {
        var d = new Date;
        //alert(asctime2rfc822( f.created_at ));
        //alert( f.created_at );
        d.setTime( Date.parse( asctime2rfc822( f.created_at ) ) );
        var datestrings = (
          d.getFullYear () + '/'
          + ( '0' + ( d.getMonth() + 1) ).slice(-2) + '/'
          + ( '0' + d.getDate   () ).slice(-2) + ' '
          + ( '0' + d.getHours  () ).slice(-2) + ':'
          + ( '0' + d.getMinutes() ).slice(-2) + ':'
          + ( '0' + d.getSeconds() ).slice(-2)
        );
        f.user.screen_name.replace('<', '&lt;');
        f.user.screen_name.replace('>', '&gt;');
        f.text.replace('<', '&lt;');
        f.text.replace('>', '&gt;');
        var s = $(
          '<li />',
          {
            css  : { display: 'none' },
            html :
                  '<a class="stream-item-wrapper" '
              //+   'href="http://twitter.com/#!/' + f.from_user
              +   'href="' + f.user.permalink
              +   '#twitterealtime" target="_blank">'
              +   '<img class="user-profile-link" '
              +     'width="48" height="48" src="'
              //+     f.profile_image_url + '" />'
              +     f.user.profile_image_url + '" />'
              +   '<span class="tweet-content">'
              +     '<span style="display: block;">'
              //+       '<span class="tweet-user-name">' + f.from_user
              +       '<span class="tweet-user-name">' + f.user.screen_name
              +       '</span>&nbsp;'
              +       '<span class="tweet-text">' + f.text + '</span>'
              +     '</span>'
              +     '<span class="tweet-date">' + datestrings + '</span>'
              +   '</span>'
              + '</a>'
          }
        ).addClass('stream-item').prependTo ( setting.target );
        s.slideDown('slow');
        $( setting.target ).children().slice( setting.data.rpp ).remove();
        return;
      },
      getJSONP: function ( f ) {
        var data = setting.data;
        if ( typeof f != 'undefined') {
          data.since_id = f;
        }
        $.ajax({
          type: 'GET',
          url : 'http://app.printjapan.com/twitter/twitter.cgi',
          data: data,
          dataType: 'jsonp',
          success : function( data, status ) {
            method.callback( data );
          }
        });
        return;
      },
      callback: function ( f ) {
        if ( typeof f.max_id_str != 'undefined' ) {
          setting.max_id = f.max_id_str;
        }
        if ( typeof f.results != 'undefined' ) {
          $.each( f.results.reverse(), function( i, item ) {
            method.show(item);
          });
        }
        return;
      }
    }
    this.each(function() {
      method.start(this);
      method.getJSONP();
      setting.timerId = setInterval(
        function() { method.getJSONP( setting.max_id ); },
        setting.freq
      );
    });
    return this;
  };
}) ( jQuery );

function asctime2rfc822(str) {
/*
       in  = 'Tue Nov 16 07:48:32 +0000 2010'
       out = 'Tue, 16 Nov 2010 07:48:32 +0000'

       asctime-date   = wkday SP date3 SP time SP 4DIGIT

       date3          = month SP ( 2DIGIT | ( SP 1DIGIT ))
                        ; month day (e.g., Jun  2)

       time           = 2DIGIT ":" 2DIGIT ":" 2DIGIT
                        ; 00:00:00 - 23:59:59

       wkday          = "Mon" | "Tue" | "Wed"
                      | "Thu" | "Fri" | "Sat" | "Sun"
*/
  str.replace(/^\s+/,'');
  str.replace(/\s+$/,'');
  var r = new RegExp('^(\\w\\w\\w)(\\s\\w\\w\\w)(\\s\\d{1,2})(\\s\\d{2}:\\d{2}:\\d{2}[\\s\\d+]*?)(\\s\\d{4})$');
  if ( str.match(r) ) {
    str = RegExp.$1 + "," + RegExp.$3 + RegExp.$2 + RegExp.$5 + RegExp.$4
  }
  return str;
}



