var Consensus = {};

Consensus.API_BASE_URL = "/api/";

Consensus.makeUrl = function makeUrl(xmlResource, realm, name) {
  return (this.API_BASE_URL + xmlResource + ".xml?r=" + escape(realm) +
          "&n=" + escape(name));
};

Consensus.Toon = function Toon(xmlNode) {
  this.alts = [];
  this.altOf = null;
  this.avatar = '&nbsp;';
  this.toHtmlString = function toHtmlString() {
    var name = xmlNode.attr('name');
    var html = '';
    if (this.link)
      html += '<a href="' + this.link + '">' +  name + '</a>';
    else
      html += name;
    return (html + ', level ' +
            xmlNode.attr('level') + ' ' +
            xmlNode.attr('race') + ' ' +
            xmlNode.attr('class'));
  };
};

Consensus.onGuildInfoXml = function onGuildInfoXml(data, textStatus) {
  var toons = {};
  jQuery(data).find("character").each(
    function(i) {
      var name = $(this).attr('name');
      toons[name] = new Consensus.Toon($(this));
    }
  );

  jQuery(".toon-info").each(
    function(i) {
      var name = $(".name", this).text();

      if (name in toons) {
        var toon = toons[name];
        var title = $(".title", this).html();
        var alts = $(".alts", this).text();
        var avatar = $(".avatar a", this).html();
        var link = $(".user a", this).attr("href");

        toon.title = title;
        if (avatar)
          toon.avatar = avatar;
        toon.link = link;
        if (alts) {
          alts = alts.split(",");
          for (i = 0; i < alts.length; i++) {
            var altName = Consensus.trim(alts[i]);
            if (altName in toons) {
              toon.alts.push(toons[altName]);
              delete toons[altName];
            }
          }
        }
      }
    }
  );

  var toonNames = [];
  for (name in toons) {
    toonNames.push(name);
  }

  //toonNames = toonNames.sort();

  for (var j = 0; j < toonNames.length; j++) {
    var name = toonNames[j];
    var toon = toons[name];

    var html = '<div class="toon">';

    html += '<div class="avatar">' + toon.avatar + '</div>';
    html += '<div class="toon-info">'

    html += toon.toHtmlString();
    if (toon.title)
      html += '<div class="title">' + toon.title + '</div>';
    if (toon.alts.length) {
      html += '<div class="toon-alts">';
      if (toon.alts.length == 1)
        html += 'Alt:';
      else
        html += 'Alts:';
      for (var i = 0; i < toon.alts.length; i++) {
        var alt = toon.alts[i];
        html += '<div class="toon-alt">' + alt.toHtmlString() + '</div>';
      }
      html += '</div>';
    }
    html += '</div></div>';
    $("#guild-roster").append(html);
  }
  $("#please-wait").remove();
  $("#guild-roster").fadeIn();
};

Consensus.trim = function trim(str) {
  return str.replace(/^\s+|\s+$/g,"");
};

$(window).ready(
  function onReady() {
    if (!$("#guild-roster").length)
      return;
    $("#guild-roster").hide();
    $("#guild-roster").after('<div id="please-wait">' +
			     'Please wait, loading roster...</div>');
    var realm = $("#guild-roster .realm").text();
    var name = $("#guild-roster .name").text();
    jQuery.get(Consensus.makeUrl("guild-info", realm, name),
               Consensus.onGuildInfoXml,
               "xml");
  }
);
