( function() { 
   var trueName = '';
   for (var i = 0; i < 16; i++) { 
      trueName = "mylasttweets"; 
   }
   window[trueName] = {};
   var $ = window[trueName];
   $.d = document;
   $.f = function() {
      return {      
         init : function(target) {
            var k = $.d.getElementsByTagName('SCRIPT');
            var n = k.length;
            for (var i = 0; i < n; i++) {
               if (k[i].src.match(target)) {
                  $.a = {};
                  if (k[i].innerHTML) {
                     $.a = $.f.parseJson(k[i].innerHTML);
                  }
                  $.f.houseKeep();
                  $.s = $.d.createElement('DIV');
                  $.f.buildStructure();
                  $.f.buildPresentation();
                  $.f.buildBehavior();
                  k[i].parentNode.insertBefore($.s, k[i]);
                  k[i].parentNode.removeChild(k[i]);
                  break;
               }
            }         
         },
         parseJson : function(json) {
            this.parseJson.data = json;
            if ( typeof json !== 'string') {
               return {"err":"trying to parse a non-string JSON object"};
            }
            try {
               var f = Function(['var document,top,self,window,parent,Number,Date,Object,Function,',
                  'Array,String,Math,RegExp,Image,ActiveXObject;',
                  'return (' , json.replace(/<\!--.+-->/gim,'').replace(/\bfunction\b/g,'function­') , ');'].join(''));
               return f();
            } catch (e) {
               return {"err":"trouble parsing JSON object; running with defaults"};
            }
         },
         houseKeep : function() {
            var defaults = { 
               "count" : 10, //default count value
               "lang" : '' //default lang value
            };
            for (var d in defaults) { 
               if ($.a[d] === undefined) { 
                  $.a[d] = defaults[d]; 
               } 
            }
            $.p = [];
         },
         buildBehavior : function() {
            if ($.a.err) {
               alert($.a.err);
            } else {
               if ($.a.query) {
                  $.s.q.value = $.a.query;
                  $.f.runSearch();
               }
               setInterval($.f.runSearch, 1000000);
            }
         },
         buildPresentation : function () {
            var ns = $.d.createElement('style');
            $.d.getElementsByTagName('head')[0].appendChild(ns);
            if (!window.createPopup) {
               ns.appendChild($.d.createTextNode(''));
               ns.setAttribute("type", "text/css");
            }
            var s = $.d.styleSheets[$.d.styleSheets.length - 1];
            var rules = {
            };
            var ieRules = "";
            for (r in rules) {
               var selector = '.' + trueName + ' ' + r;
               var t = rules[r].replace(/;/g, '!important;');
               if (!window.createPopup) {
                  var theRule = $.d.createTextNode(selector + t);
                  ns.appendChild(theRule);
               } else {
                  ieRules += selector + t;
               }
            } 
            if (window.createPopup) { 
               s.cssText = ieRules; 
            }
         },
         buildStructure : function() {
            $.s.className = trueName;         
            $.s.q = $.d.createElement('INPUT');
            $.s.r = $.d.createElement('UL');
            $.s.r.className = 'hidden';
            $.s.appendChild($.s.r);
         },         
         runSearch : function() {
            if ($.s.q.value) {
               if ($.s.q.value !== $.lastQuery) {
                  var n = $.p.length;
                  var id = trueName + '.p[' + n + ']';
                  $.p[n] = function(r) {
                     delete($.p[n]);
                     $.f.removeScript(id);
                     $.f.renderSearch(r); 
                  };
                  var url = 'http://search.twitter.com/search.json?lang=' + $.a.lang + '&rpp=' + $.a.count + '&q=' + encodeURIComponent($.s.q.value) +'&callback=' + id;
                  $.f.runScript(url, id);
               }
            } else {
               if ($.lastQuery) {
                  $.lastQuery = '';
                  $.s.r.innerHTML = '';
               }
            }
         },
         stuffQuery : function(v, p) {
            if (p) {
            } else {
            }
         },
         renderSearch : function(z) {
            $.s.r.innerHTML = $.s.r.className = '';
            var r = z.results;
            if (r.length) {
               var n = r.length;
               for (var i = 0; i < n; i++) {
                  var li = $.d.createElement('LI');
                  var a = $.d.createElement('A');
                  a.href = 'http://twitter.com/' + r[i].from_user;
                  a.title = r[i].from_user + ' on Twitter';
                  a.target = '_twitter';
                  var img = $.d.createElement('IMG');
                  img.align = 'left';
                  img.src = r[i].profile_image_url;  
                  a.appendChild(img);
                  li.appendChild(a);                  
                  var cite = $.d.createElement('CITE');
                  var a = $.d.createElement('A');
                  a.innerHTML = r[i].from_user;
                  a.href = 'http://twitter.com/' + r[i].from_user;
                  a.title = r[i].from_user + ' on Twitter';
//                  a.onclick = function() {
//                  }
                  cite.appendChild(a);
                  li.appendChild(cite);
                  li.appendChild($.d.createTextNode(': '));
                  var span = $.d.createElement('SPAN');
                  var raw = r[i].text;
                  var cooked = raw.replace(/\/u([^ ]+)/gi, "&#$1;");
                  cooked = cooked.replace(/http:\/\/([^ ]+)/g, "<a href=\"http://$1\" target=\"_blank\">http://$1</a>");
                  var woo = '@<a onclick="' + trueName + '.f.stuffQuery(this.innerHTML, \'from:\');">$1</a>';
                  cooked = cooked.replace(/@([\w*]+)/g, woo);
                  var yay = '#<a onclick="' + trueName + '.f.stuffQuery(this.innerHTML);">$1</a>';
                  cooked = cooked.replace(/#([\w*]+)/g, yay)
                  span.innerHTML = cooked;
                  li.appendChild(span);
                  li.appendChild($.d.createTextNode(' '));
                  var date = $.d.createElement('DATE');
                  var a = $.d.createElement('A');
				  //timestamp fix
				  var twitt_created_at = new Date(r[i].created_at);
				  twitt_created_at = twitt_created_at.toString();
				  twitt_created_at = twitt_created_at.split(' GMT')[0];
				  twitt_created_at = twitt_created_at.split(' UTC')[0];
				  //timestamp fix end
                  a.innerHTML = twitt_created_at;
                  a.href = 'http://twitter.com/' + r[i].from_user + '/status/' + r[i].id;
                  a.target = '_twitter';
                  date.appendChild(a);
                  li.appendChild(date);
                  $.s.r.appendChild(li);
               }
            } else {
               var li = $.d.createElement('LI');
               li.innerHTML = 'Got nothing, sorry!';
               $.s.r.appendChild(li);
            }
         },
         runScript : function(url, id) {
            var s = $.d.createElement('script');
            s.id = id;
            s.type ='text/javascript';
            s.src = url;
            $.d.getElementsByTagName('body')[0].appendChild(s);
         },
         removeScript : function(id) {
            if ($.d.getElementById(id)) {
               var s = $.d.getElementById(id);
               s.parentNode.removeChild(s);
            }
         }         
      };
   }();
   var thisScript = /my_lat_tweets.js$/;
   if(typeof window.addEventListener !== 'undefined') {
      window.addEventListener('load', function() { 
         $.f.init(thisScript); 
      }, false);
   } else if(typeof window.attachEvent !== 'undefined') {
      window.attachEvent('onload', function() { 
         $.f.init(thisScript); 
      });
   }
})();
