/*
  @author: remy sharp / http://remysharp.com
  @url: http://remysharp.com/2007/05/add-twitter-to-your-blog
  @usage: getTwitters(cssIdOfContainer, { id: myTwitterId, count: n, prefix: string, clearContents: bool });
  @params:
    cssIdOfContainer: e.g. twitters
    id: the ID from twitter.com (see URL above on how to extract this)
    count: number of twitters you want, defaults to 1.
    prefix: if you want to prefix each twitter, add here, e.g. 'Remy said'
    clearContents: if you have content in the container you may want to clear it (see URL above for example)
  @example: getTwitters('twitters', { id: 648873, count: 5, prefix: 'Remy said', clearContents: true });
  @license: Creative Commons License - ShareAlike http://creativecommons.org/licenses/by-sa/3.0/
  @version: 1.2 - added enableLinks variable
*/

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);
  
  var r = '';
  if (delta < 60) {
    r = 'less than a minute ago';
  } else if(delta < 120) {
    r = 'about a minute ago';
  } else if(delta < (45*60)) {
    r = (parseInt(delta / 60)).toString() + ' minutes ago';
  } else if(delta < (90*60)) {
    r = 'about an hour ago';
  } else if(delta < (24*60*60)) {
    r = 'about ' + (parseInt(delta / 3600)).toString() + ' hours ago';
  } else if(delta < (48*60*60)) {
    r = '1 day ago';
  } else {
    r = (parseInt(delta / 86400)).toString() + ' days ago';
  }
  
  return r;
}

String.prototype.linkify = function() {
  return this.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+/, function(m) {
    return m.link(m);
  });
};

function twitterCallback(obj) {
  
  // private shortcuts
  function ce(e) {
    return document.createElement(e);
  }
  
  function ctn(t) {
    return document.createTextNode(t);
  }
  
  var target = document.getElementById(_twitterTarget);
  var ul = ce('ul');
  
  for (var i = 0; i < obj.length; i++) {
    var li = ce('li');
  	var statusSpan = ce('span');
  	var timeSpan = ce('span');
  	statusSpan.appendChild(ctn(obj[i].text));
  	
  	if (_twitterOptions.enableLinks == true) {
  	  statusSpan.innerHTML = statusSpan.innerHTML.linkify();
  	}
  	
  	timeSpan.appendChild(ctn(relative_time(obj[i].created_at)));
  	
  	if (_twitterOptions.prefix) {
  	  li.appendChild(ce('span').appendChild(ctn(_twitterOptions.prefix)));
  	  li.appendChild(ctn(' '));
  	}
  	
  	li.appendChild(statusSpan);
  	li.appendChild(ctn(' '));
  	li.appendChild(timeSpan);
  	ul.appendChild(li);
  }
  
  if (_twitterOptions.clearContents) {
    while (target.firstChild) {
      target.removeChild(target.firstChild);
    }
  }
  
  target.appendChild(ul);
}

function getTwitters(target, id, count, options) {
  if (typeof id == 'object') {
    options = id;
    id = options.id;
    count = options.count;
  }
  
  // need to make these global since we can't pass in to the twitter callback
  _twitterTarget = target;
  _twitterOptions = options;
  
  if (!count) count = 1;
  ready(function() {
    var url = 'http://www.twitter.com/statuses/user_timeline/' + id + '.json?callback=twitterCallback&count=' + count;
    
    var script = document.createElement('script');
    script.setAttribute('src', url);
    document.body.appendChild(script);
  });
}

// ready and browser adapted from John Resig's jQuery library (http://jquery.com)
function ready(callback) {
  if ( browser.mozilla || browser.opera ) {
    document.addEventListener( "DOMContentLoaded", callback, false );
  }	else if ( browser.msie ) {
    // If IE is used, use the excellent hack by Matthias Miller
  	// http://www.outofhanwell.com/blog/index.php?title=the_window_onload_problem_revisited

		// Only works if you document.write() it
		document.write("<scr" + "ipt id=__ie_init defer=true src=//:><\/script>");

		// Use the defer script hack
		var script = document.getElementById("__ie_init");

		// script does not exist if jQuery is loaded dynamically
		if ( script ) 
			script.onreadystatechange = function() {
				if ( this.readyState != "complete" ) return;
				this.parentNode.removeChild( this );
				callback.call();
			};

		// Clear from memory
		script = null;

	// If Safari  is used
	} else if ( browser.safari )
		// Continually check to see if the document.readyState is valid
		var safariTimer = setInterval(function(){
			// loaded and complete are both valid states
			if ( document.readyState == "loaded" || 
				document.readyState == "complete" ) {

				// If either one are found, remove the timer
				clearInterval( safariTimer );
				safariTimer = null;

				// and execute any waiting functions
				callback.call();
			}
		}, 10);
}

var browser = (function() {
	var b = navigator.userAgent.toLowerCase();

	// Figure out what browser is being used
	return {
		safari: /webkit/.test(b),
		opera: /opera/.test(b),
		msie: /msie/.test(b) && !/opera/.test(b),
		mozilla: /mozilla/.test(b) && !/(compatible|webkit)/.test(b)
	};
})();


var _twitterTarget = null;
var _twitterOptions = {};