<?xml version="1.0" encoding="UTF-8"?>
<Module>
	<ModulePrefs title="Twitter on Orkut" title_url="http://hypercast.info/" author="Líus Fontenelle Carneiro" author_email="liusfc@gmail.com"	thumbnail="http://hypercast.info/wp-content/uploads/2008/10/twitter.png" height="350" description="Mostra suas últimas atualizações no Twitter.com no perfil do Orkut e permite incluir seus posts nas atualizações dos amigos, possibilitando que seus amigos do Orkut vejam o que você está postando no Twitter.">
		<Require feature="opensocial-0.7"/>
		<Locale lang="pt_BR"/>
	</ModulePrefs>
	<Content type="html"><![CDATA[

<style>
.follow { font-size: 1.2em; font-family:'Verdana',sans-serif; }
.tweet { font-size: 1em; line-height:1.1; font-family:'Lucida Grande',sans-serif; color:#333333; }
.timestamp { font-size: 0.8em; color:#999999; font-family:georgia; font-style:italic; margin:3px 0 0 3px; }
.status { color:#444466; font-size:0.8em; font-style:italic; }
a { text-decoration: none; color: #0084b4; }
a:hover { text-decoration: underline; }
</style>

<div id="follow" class="follow"></div>
<div id="content"></div>
<div id="form"></div>
<div id="status" class="status"></div>

<script>

var _owner, _viewer;
var statusDiv = document.getElementById('status');
var env = 'dev'; // || 'prod'

function postActivity(text) {  
	var params = {};  
	params[opensocial.Activity.Field.TITLE] = text;
	var activity = opensocial.newActivity(params); 
	opensocial.requestCreateActivity(activity, opensocial.CreateActivityPriority.HIGH, callback);
};        

function callback(status) {
	statusDiv.innerHTML = (status.hadError()) ? "Erro ao criar atualização." : "Atualização adicionada com sucesso em "  + new Date().toString();
};

function makeCachedRequest(url, callback, params, refreshInterval) {
  var ts = new Date().getTime();
  var sep = "?";
  if (refreshInterval && refreshInterval > 0) {
    ts = Math.floor(ts / (refreshInterval * 1000));
  }
  if (url.indexOf("?") > -1) {
    sep = "&";
  }
  url = [ url, sep, "nocache=", ts ].join("");
  gadgets.io.makeRequest(url, callback, params);
}

function loadOwnerAndViewerData() {
	statusDiv.innerHTML = 'Carregando informações dos usuários...';
	if(env == 'prod'){
	    var req = opensocial.newDataRequest();
		req.add(req.newFetchPersonRequest(opensocial.DataRequest.PersonId.OWNER), "owner");
	    if (opensocial.hasPermission(opensocial.Permission.VIEWER))
			req.add(req.newFetchPersonRequest(opensocial.DataRequest.PersonId.VIEWER),"viewer");
		req.send(loadOwnerAndViewerDataComplete);
	} else {
		_owner = '0';
		_viewer = '0';
	}
};

function loadOwnerAndViewerDataComplete(data) {
    _owner = data.get("owner").getData();
    if(data.get("viewer"))
        _viewer = data.get("viewer").getData();
	statusDiv.innerHTML = 'Informações carregadas.';
    //alert("_owner="+_owner.getId()+"\n_viewer="+_viewer.getId());
};

function isOwner(){
	return (env == 'prod') ? ((_owner.getId() == _viewer.getId()) ? true : false) : ((_owner == _viewer) ? true : false);
};

function loadTwitterLogin() {
	statusDiv.innerHTML = 'Carregando informações da conta do twitter...';
	if(env == 'prod'){
		var params = {};
		params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.JSON;  
		var url = "http://twitterorkut.hypercast.info/users/check.json?orkut=" + _owner.getId();  
		makeCachedRequest(url, response, params, 0);
	} else {
		loadFollowDiv('liusfc');
		loadTweets('liusfc');
	}
};

function response(obj) {
	statusDiv.innerHTML = 'Informações da conta carregadas.';
	eval('var hs = ' + obj.text);
	if( hs['status'] == 'ok' ){
		loadTweets( hs['twitter'] );
		loadFollowDiv( hs['twitter'] );
	} else {
		if( _owner.getId() == _viewer.getId() ) {
			statusDiv.innerHTML = 'O cadastro do login do Twitter precisa ser feito.';
			var form_html = 'Informe o seu login do Twitter: <input type="text" id="twitter_login"/> <a href="javascript:void(0);" onclick="saveTwitterLogin();">Salvar</a>';
			document.getElementById('form').innerHTML += form_html;
		} else {
			document.getElementById('content').innerHTML += 'Este app ainda não está configurado.';
			statusDiv.innerHTML = '';
		}
	}
};

function loadFollowDiv(twitter_login){
	var url = 'http://twitter.com/' + twitter_login;
	document.getElementById('follow').innerHTML = 'Siga este usuário em <a target="new" href="' + url + '">' + url + '</a>';
};

function saveTwitterLogin(){
	var twitter_login = document.getElementById('twitter_login').value;
	var data = { 'user[twitter]' : twitter_login, 'user[orkut]' : _owner.getId() };
	makePOSTRequest("http://twitterorkut.hypercast.info/users", data); 
	statusDiv.innerHTML = 'Configuração feita com sucesso. Clique em Atualizar/Refresh em seu navegador.';
}

function makePOSTRequest(url, postdata) {
	var params = {};
	postdata = gadgets.io.encodeValues(postdata);
	params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST;
	params[gadgets.io.RequestParameters.POST_DATA]= postdata;
	gadgets.io.makeRequest(url, responsePOST, params); 
};

function responsePOST(obj) { /*alert(obj.text);*/ };

function loadTweets(twitter_login){
	statusDiv.innerHTML = 'Carregando posts do twitter...';
	if(env == 'prod'){
		var params = {};
		params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.JSON;  
		var url = "http://twitter.com/statuses/user_timeline/" + twitter_login + ".json?count=5";
		makeCachedRequest(url, tweets_response, params, 0);
	} else {
		tweets_response([{"user":{"description":"Aluno de Engenharia de Teleinform\u00e1tica (UFC).","followers_count":28,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/60965115\/lius-pb_normal.jpg","url":"http:\/\/hypercast.info\/","name":"L\u00edus Fontenelle","protected":false,"screen_name":"liusfc","location":"Brazil","id":9581162},"in_reply_to_user_id":null,"truncated":false,"in_reply_to_status_id":null,"id":946054621,"favorited":false,"source":"<a href=\"http:\/\/blip.fm\">Blip.fm<\/a>","created_at":"Sat Oct 04 11:59:10 +0000 2008","text":"Going to workout!! \u266b http:\/\/blip.fm\/~ci3x"},{"user":{"description":"Aluno de Engenharia de Teleinform\u00e1tica (UFC).","followers_count":28,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/60965115\/lius-pb_normal.jpg","url":"http:\/\/hypercast.info\/","name":"L\u00edus Fontenelle","protected":false,"screen_name":"liusfc","location":"Brazil","id":9581162},"in_reply_to_user_id":null,"truncated":false,"in_reply_to_status_id":null,"id":945282968,"favorited":false,"source":"<a href=\"http:\/\/www.naan.net\/trac\/wiki\/TwitterFox\">TwitterFox<\/a>","created_at":"Fri Oct 03 18:37:46 +0000 2008","text":"Preparando para o happy hour.. :P"},{"user":{"description":"Aluno de Engenharia de Teleinform\u00e1tica (UFC).","followers_count":28,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/60965115\/lius-pb_normal.jpg","url":"http:\/\/hypercast.info\/","name":"L\u00edus Fontenelle","protected":false,"screen_name":"liusfc","location":"Brazil","id":9581162},"in_reply_to_user_id":null,"truncated":false,"in_reply_to_status_id":null,"id":944749057,"favorited":false,"source":"<a href=\"http:\/\/blip.fm\">Blip.fm<\/a>","created_at":"Fri Oct 03 10:37:54 +0000 2008","text":"Agora Nothing Else Matters com a orquestra. Essa vai pro @alexbarros, que gostou dessa vers\u00e3o. \u266b http:\/\/blip.fm\/~c5ma"},{"user":{"description":"Aluno de Engenharia de Teleinform\u00e1tica (UFC).","followers_count":28,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/60965115\/lius-pb_normal.jpg","url":"http:\/\/hypercast.info\/","name":"L\u00edus Fontenelle","protected":false,"screen_name":"liusfc","location":"Brazil","id":9581162},"in_reply_to_user_id":null,"truncated":false,"in_reply_to_status_id":null,"id":943120378,"favorited":false,"source":"<a href=\"http:\/\/blip.fm\">Blip.fm<\/a>","created_at":"Thu Oct 02 11:09:56 +0000 2008","text":"Mais uma excelente do Metallica e Orquesta de S\u00e3o Franscisco, pra esquecer o dia de ontem... :PPP \u266b http:\/\/blip.fm\/~bsu9"},{"user":{"description":"Aluno de Engenharia de Teleinform\u00e1tica (UFC).","followers_count":28,"profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/60965115\/lius-pb_normal.jpg","url":"http:\/\/hypercast.info\/","name":"L\u00edus Fontenelle","protected":false,"screen_name":"liusfc","location":"Brazil","id":9581162},"in_reply_to_user_id":null,"truncated":false,"in_reply_to_status_id":null,"id":942690890,"favorited":false,"source":"<a href=\"http:\/\/www.naan.net\/trac\/wiki\/TwitterFox\">TwitterFox<\/a>","created_at":"Thu Oct 02 01:25:19 +0000 2008","text":"Viagem p\/ parna\u00edba adiada... :("}]);
	}
};

function tweets_response(obj){
	statusDiv.innerHTML = 'Posts carregados.';
	if(env == 'prod')
		eval('var hs = ' + obj.text);
	else
		var hs = obj;

	var html = '<p>';
	for(var i = 0; i < hs.length; i++){
		html += '<div class="tweet">';
		if(isOwner()) html += '<a href="javascript:void(0);" onclick="postActivity(\'diz: ' + hs[i]['text'] + '\')"><strong>+</strong></a> ';
		html += hs[i]['text'].replace(/(http:\/\/.*)\s*/gi, '<a target="new" href="$1">$1</a>'); + '</div>';
		html += '<div class="timestamp">Postado em ' + hs[i]['created_at'] + '</div></p>';
	}
	document.getElementById('content').innerHTML = html;
};

loadOwnerAndViewerData();
loadTwitterLogin();

</script>

	]]></Content>
</Module>
