// Twitter fallback in JavaScript
// for Half in Ten

// Evan Hensleigh 2011

(function( $ ){
	
	var $twitter = $("#twitter"), tweets;
	
	if( $twitter.children().length === 0 ) {
		// the twitter timeline plugin from EE has FAILED
		if( window.console ) console.log("Javascript to the rescue!");
		
		// from PPK: http://www.quirksmode.org/js/cookies.html
		function readCookie(name) {
			var nameEQ = name + "=";
			var ca = document.cookie.split(';');
			for(var i=0;i < ca.length;i++) {
				var c = ca[i];
				while (c.charAt(0)==' ') c = c.substring(1,c.length);
				if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
			}
			return null;
		}
		
		function parseTweets( tweets ) {
			
			for( var i = 0, l = tweets.length; i < l; ++i ) ( function( tweet ) {
				
				var $el = $("<div>").addClass("tweet").appendTo($twitter),
					text = tweet.text;
				
				// remove escapes
				text = text.replace(/\\/g, '');
				
				// make links work
				text = text.replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gi, "<a href='$1'>$1</a>");
				
				// make mentions into links
				text = text.replace(/@(\w{1,15})/g, "<a href='http://twitter.com/$1'>@$1</a>");
				
				// make hashtags into links
				text = text.replace(/#(\w+)/g, "<a href='http://twitter.com/search?q=%23$1'>#$1</a>");
				
				// and actually write it in
				$el.html(text);
				
			})( tweets[i] );
			
		}
		
		if( tweets = readCookie( 'twitter' ) ) {
			
			if(window.console) console.log("pulling from cookie");
			
			parseTweets( $.parseJSON( tweets ) );
			
		} else {
			
			if(window.console) console.log("bad twitter no cookie");
			
			// from PPK
			function createCookie(name,value,minutes) {
				if (minutes) {
					var date = new Date();
					date.setTime(date.getTime()+(minutes*60*1000));
					var expires = "; expires="+date.toGMTString();
				}
				else var expires = "";
				document.cookie = name+"="+value+expires+"; path=/";
			}
			
			// get a new one
			$.getJSON( 'http://api.twitter.com/1/statuses/user_timeline.json?screen_name=halfinten&count=3&callback=?',
				function( data ) {
					
					// we have to shorten the API return for the kookie monster
					var kookie = function( data ) {
						var a = [];
						for ( var i = 0, l = data.length; i < l; ++i ) a[i] = { 'text': data[i].text }
						return a;
					};
					
					createCookie( 'twitter', JSON.stringify( kookie( data ) ), 15 )
					
					parseTweets( data );
					
				}
			);
		
		}
		
	}
	
})( jQuery )
