/* Required modules */
dojo.require("dojo.io.script");

/* Class declaration */
var twitter = {
	initialize: function(node, twitterAccount) {
		console.log('Twitter.initialize() called');
		this.node = dojo.query(node).addClass('twitter-wrapper')[0];
		this.title = dojo.create('div', null, this.node);
		dojo.addClass(this.title, 'twitter-title clear');
		
		dojo.io.script.get({
			url: "http://api.twitter.com/1/statuses/user_timeline.json",
			content: {
				screen_name: twitterAccount
			},
			callbackParamName: 'callback'
		}).then(function(data){
			console.log("Data received, length "+data.length);
			twitter.receiveData(data);
		});
	},
	receiveData: function(data) {
		//console.log(data);
		if (data.length > 0) {
			//this.setTitle(data[0].user.name, data[0].user.profile_image_url, data[0].user.screen_name);
		}
		
		dojo.addClass(this.node, 'received');
		
		for (var i=0; i<data.length; ++i) {
			if (i >= this._maxTweetsShown)
				continue;
			this.createTweet(data[i]);
		}
	},
	showError: function(error) {
		dojo.empty(this.node);
		this.node.innerHTML(error);
	},
	createTweet: function(data) {
		if (!this.ul) {
			this.ul = dojo.create('ul', null, this.node);
			dojo.addClass(this.ul, 'twitter-list')
		}
		var li = dojo.create('li', null, this.ul), dateHTML = "?", textHTML = "?";
		
		/* Make DATE html */
		if (data.created_at) {
			dateHTML = '<span class="twitter-item-month">';
			dateHTML += data.created_at.slice(4,7);
			dateHTML += '</span><span class="twitter-item-day">';
			dateHTML += data.created_at.slice(8,10);
			dateHTML += '</span>'
		}
		
		/* Make TEXT html */
		if (data.text) {
			textHTML = data.text;
			
			//First check for hyperlinks
			var matchedArr = textHTML.match(this.findLinks) || [];
			for (var i = 0; i < matchedArr.length; ++i) {
				//var idx = textHTML.search(matchedArr[i]), length = matchedArr[i].length;
				var newSubstr = '<a target="_blank" class="twitter-link" href="'+matchedArr[i]+'">'+matchedArr[i]+'</a>';
				textHTML = textHTML.replace(matchedArr[i], newSubstr);
			}
			
			//Check for hashtags
			var hashArr = textHTML.match(this.findHash) || [], baseURL = "http://twitter.com/#!/search?q=%23";
			for (var j = 0; j < hashArr.length; ++j) {
				//var idx = textHTML.search(hashArr[j]), length = hashArr[j].length;
				var newHashStr = '<a target="_blank" class="twitter-link twitter-hash" href="'+baseURL+hashArr[j].slice(1)+'">'+hashArr[j]+'</a>';
				textHTML = textHTML.replace(hashArr[j], newHashStr);
			}
			
			//Check for other users
			var userArr = textHTML.match(this.findUser) || [];
			for (var k = 0; k < userArr.length; ++k) {
				var newUserStr = '<a target="_blank" class="twitter-link twitter-user" href="http://twitter.com/'+userArr[k].slice(1)+'">'+userArr[k]+'</a>';
				textHTML = textHTML.replace(userArr[k], newUserStr);
			}
		}
		
		var date = dojo.create('div', {innerHTML: dateHTML}, li);
		dojo.addClass(date, 'clear twitter-item-date');
		var text = dojo.create('div', {innerHTML: textHTML}, li);
		dojo.addClass(text, 'twitter-item-text');
		
		dojo.addClass(li, 'twitter-item clear');
	},
	setTitle: function(name, image, screenName) {
		this.title.innerHTML =
			'<a target="_blank" href="http://twitter.com/' + screenName + '">' +
			'<img class="twitter-title-image" src="' + image +
			'" /><span class="twitter-title-name">' + name +
			'</span>' +
			/*
			'<span class="twitter-title-screenname">@' + screenName +
			'</span>' + 
			*/
			'</a>' +
			'<iframe allowtransparency="true" frameborder="0" scrolling="no"' +
			  'src="//platform.twitter.com/widgets/follow_button.html?show_count=false&screen_name='+screenName +'"'+
			  'style="width:100px; height:20px; float: right"></iframe>';
	},
	
	/* OPTIONS / PARAMS / ETC */
	_maxTweetsShown: 4,
	
	/* REGEX */
	findLinks: new RegExp(/(http[^\s]+)/g),
	findHash: new RegExp(/#[^\s\.]+/g),
	findUser: new RegExp(/@[^\s\.]+/g)
};

/* Initialization call on page ready */
dojo.ready(function(){
	twitter.initialize(/* Dom Node */'#feed', /* Twitter Username */ '2wav');
});
