CLOUD_TUMBLR = 'http://tumblr.eromante.com';

CLOUD_MIN_FONT = 80;
CLOUD_MAX_FONT = 170;
CLOUD_UNIT_FONT = '%';
CLOUD_MIN_OPACITY = 0.5;
CLOUD_MAX_OPACITY = 1;
CLOUD_JSON_NUM = 50; // Number of items to retrieve at a time, max 50
CLOUD_JSON_MAX = 150; // Maximum number of items to retrieve, increments of CLOUD_JSON_NUM, 0=all
CLOUD_JSON_URL = CLOUD_TUMBLR + '/api/read/json';
CLOUD_POST_URL = CLOUD_TUMBLR + '/post';

var cloud_has_links = true;
var cloud_tags = new Array();
var cloud_count = new Array();
var cloud_posts = new Array();
var cloud_text = new Array();
var cloud_total = 0;
var cloud_done = 0;
var cloud_html = '';
var cloud_max = 0;
var cloud_request;

function buildCloud() {
  var url = CLOUD_JSON_URL + '?callback=tumblrCallback&start='+cloud_done+'&num='+CLOUD_JSON_NUM;
  cloud_request = new JSONscriptRequest(url);
  cloud_request.buildScriptTag();
  cloud_request.addScriptTag();
}

function tumblrCallback(obj) {
  cloud_total = obj['posts-total'];
  var curr = obj['posts'].length;

  for(var i=0; i<curr; ++i) {
    var tid = parseInt(obj['posts'][i]['id']);
    var turl = obj['posts'][i]['url'];
    var ttext = obj['posts'][i]['regular-title'];

    if(typeof(obj['posts'][i]['tags']) != 'undefined') {
      for(var j=0; j<obj['posts'][i]['tags'].length;++j) {
        var tname = obj['posts'][i]['tags'][j];
        var safetag = tname.replace(/'/, '');

        if(typeof(cloud_count[safetag]) == 'undefined') {
          cloud_count[safetag] = 0;
          cloud_tags.push(tname);
          cloud_posts[safetag] = new Array();
        }

        cloud_posts[safetag].push( new Array(turl, ttext) );
        cloud_count[safetag]++;
        if(cloud_count[safetag] > cloud_max) 
          cloud_max = cloud_count[safetag];
      }
    }
  }
  cloud_done += curr;

  msg('<span class="reading">Leídos ' + cloud_done + ' de '  + cloud_total + '</span>');

  if((cloud_done < cloud_total) && (CLOUD_JSON_MAX == 0 || cloud_done < CLOUD_JSON_MAX)) {
    cloud_request.removeScriptTag();
    buildCloud();
  } else {
    renderCloud();
  }
}

function renderCloud() {
  var sorted = cloud_tags.sort();
  for(var i=0; i<sorted.length; ++i) {
    var safetag = cloud_tags[i].replace(/'/, '');
    var item = cloud_count[safetag];
    var ratio = Math.log(item) / Math.log(cloud_max);
	var fontsize = (CLOUD_MAX_FONT-CLOUD_MIN_FONT) * ratio + CLOUD_MIN_FONT;
	var opacity = (CLOUD_MAX_OPACITY-CLOUD_MIN_OPACITY) * ratio + CLOUD_MIN_OPACITY;
	cloud_tags[i] = cloud_tags[i].replace(/ /g, '&nbsp;');
    if (cloud_has_links)
      cloud_html += '<span style="font-size:' + fontsize + CLOUD_UNIT_FONT + ';filter: alpha(opacity=' + Math.round(ratio*100) + ');opacity:' + opacity + '"><a href="'+ CLOUD_TUMBLR + '/tagged/' + safetag + '">' + cloud_tags[i] + '&nbsp;</a></span> ';
    else
      cloud_html += '<span style="font-size:' + fontsize + CLOUD_UNIT_FONT + ';filter: alpha(opacity=' + Math.round(ratio*100) + ');opacity:' + opacity + '">'+cloud_tags[i]+'&nbsp;</a></span> ';
  }
  var tc = document.getElementById('tagcloud');
  tc.innerHTML = cloud_html;

  cloud_request.removeScriptTag();
}

function msg(str) {
 document.getElementById('tagcloud').innerHTML = str;
}