//Twitter namespace
var Twitter = {};

//location of ajax processing page
Twitter.AjaxPage = "twitter.asp";


//user profile
Twitter.UserProfile = {};

Twitter.UserTimeline = function(params) {
	if(typeof params.update == "string") {
		params.update = document.getElementById(params.update);
	}
	var user = params.user;
	var update = params.update;
	var limit = params.limit;
	var currentContents = update.innerHTML;
	var url = Twitter.AjaxPage + "?user_timeline=" + user;
	if(params.count){url += "&count=" + params.count;}else{url += "&count="+limit;}
	var parameters = {
		onComplete:function(response) {
			update.innerHTML = currentContents;
			var json = eval(response.text);
			for(var i=0;i<json.length;i++) {
				var twitter = json[i];
				var image = '<img src="' + twitter.user.profile_image_url + '" alt="" style="float:left"/>';
				var userlink = '<span class="TwitterUser"><a href="http://www.twitter.com/' + user + '">' + user + '</a></span> ';
				var time = Twitter.TimePhrase((new Date().getTime() - Twitter.CreatedOn(twitter.created_at)));
				time = 	' <div class="about">' + time + '</div>';
				var from = ' <span class="TwitterSource">from ' + twitter.source + '</span>';

				var html = '<div class="post">';
				if(limit) {
					html +=  retornComLink(twitter.text) + time;
				}
				else {
					html += image + userlink + twitter.text + time;
				}
				html += '<div class="rodapePost"><a href="http://twitter.com/staemilia" class="siganos"></a></div></div>';
				update.innerHTML += html;
			}
		}
	};
	new Twitter.Ajax(url,parameters).request();
};

function retornComLink(texto){
	var produzido = "produzido pela inoltz"
	var txt = texto;	
	var posIn = txt.indexOf("http://", 0);
	var posFim = txt.indexOf(" ", posIn);
	var tamanhoTxt = txt.length;
	var txtFinal = "";	
	if(posFim==-1){
		posFim = tamanhoTxt;
	}
	linkTwitter = txt.slice(posIn, posFim);
	txtFinal = txt.replace(linkTwitter,"<a href='"+linkTwitter+"' target='_blank'>"+linkTwitter+"</a>");
	if(produzido=="produzido pela inoltz"){
		return	txtFinal;
	}
}

Twitter.CreatedOn = function(createdOn) {
	var parts = createdOn.split(" ");
	parts[4] = "UTC" + parts[4];
	return (new Date(parts.join(" "))).getTime();
};

Twitter.TimePhrase = function(ms) {
	var seconds = ms/1000;
	//correct seconds if less than 1
	//for pc clocks slower than twitter server
	if(seconds < 1) {
		seconds = 1;
	}
	//less than 1 minute
	if(seconds < 60) {
		return "less than " + seconds + " seconds ago";
	}
	//less than 1 hour
	else if(seconds < 3600) {
		var minutes = Math.round(seconds/60);
		if(minutes == 1) {
			return minutes + " minute ago";
		}
		else {
			return minutes + " minutes ago";
		}
	}
	//less than 1 day ago
	else if(seconds < 86400) {
		var hours = Math.round(seconds/3600);
		if(hours == 1) {
			return hours + " hour ago";
		}
		else {
			return hours + " hours ago";
		}
	}
	//more than 1 day ago
	else {
		var days = Math.round(seconds/86400);
		if(days == 1) {
			return days + " day ago";
		}
		else {
			return days + " days ago";
		}
	}
};

Twitter.Ajax = function(sender,parameters) {
	this.request = function() {
		var http = null;
		var method = (parameters.method == null) ? "get" : parameters.method;
		var async = (parameters.async == null) ? true : parameters.async;
		//Firefox,Opera 8.0+,Safari
		try{http = new XMLHttpRequest();}
		catch(e) {
			//Internet Explorer
			try{http = new ActiveXObject("Msxml2.XMLHTTP");}
			catch(e) {
				try{http = new ActiveXObject("Microsoft.XMLHTTP");}
				catch(e) {
					alert("Your browser does not support Ajax!");
					return false;
				}
			}
		}
		http.onreadystatechange = function(){_OnComplete(parameters.onComplete,parameters.onFailure,parameters.update,http)};
		if(typeof sender == "string") {
			http.open(method,sender,async);
			http.send(null);
		}
		else {
			var action = (sender.action == null) ? parameters.action : sender.action;
			var args = this.toQueryString(sender);
			http.open(method,action,async);
			http.setRequestHeader("Content-type","application/x-www-form-urlencoded");
			http.setRequestHeader("Content-length",parameters.length);
			if(!document.all){http.setRequestHeader("Connection","close");}
			http.send(args);
		}
	}
	
	this.toQueryString = function(object) {
		var str = "";
		var count = 0;
		if(object.length) {
			for(var i=0;i<object.length;i++) {
				//filter out ASP.Net system elements
				var sysElem = (	object[i].name == null ||
								object[i].name == "__EVENTTARGET" ||
								object[i].name == "__EVENTARGUMENT" ||
								object[i].name == "__VIEWSTATE");
				if(!sysElem) {
					if(count == 0) {
						str += object[i].name + "=" + encodeURIComponent(object[i].value);
					}
					else {
						str += "&" + object[i].name + "=" + encodeURIComponent(object[i].value);
					}
					count++;
				}
			}
		}
		else {
			for(key in object) {
				if(count == 0) {
					str += key + "=" + encodeURIComponent(object[key]);
				}
				else {
					str += "&" + key + "=" + encodeURIComponent(object[key]);
				}
				count++;
			}
		}
		return str;
	}
}

function _OnComplete(fnComplete,fnFailure,update,http) {
	if(http.readyState == 4) {
		if(http.status == 200) {
			if(fnComplete){fnComplete({text:http.responseText});}
			if(update) {
				if(typeof update == "string")
					update = document.getElementById(update);
				update.innerHTML = http.responseText;
			}
		}
		else {
			if(fnFailure){fnFailure({text:http.responseText,status:http.status});}
		}
	}
}
