jQuery(function ($) {
  var baseUrl = "http://jira.atlassian.com";
  var projectId = 10470;
  var sortBy = "created";
  var classes = {
    "Bug": "red",
    "Support request": "red",
    "Improvement": "green",
    "New Feature": "blue",
    "Task": "yellow",
    "Sub-task": "yellow",
    "Blocker": "huge",
    "Critical": "large",
    "Major": "normal",
    "Minor": "small",
    "Trivial": "tiny"
  };
  
  function addIssue(issue) {
    if (!issue) return;
    $("#loading").remove();
    $issue = $(".issue.template").clone().removeClass("template").prependTo("#issues");
    $(".key", $issue).append(issue.key.content);
    $(".summary", $issue).append(issue.summary).attr("href", issue.link);
    $(".reporter", $issue).prepend(issue.reporter.username);
    if (issue.reporter.content.indexOf("[Atlassian]") < 0)
      $(".reporter img.atlassian", $issue).remove();
    var fields = ["type", "priority", "status"];
    for (var i=0; i<fields.length; i++) {
      var f = fields[i];
      if (issue[f].content in classes) {
        $issue.addClass(classes[issue[f].content]);
      }
    }
    if (issue.resolution.id > 0) $issue.addClass('resolved');
    $issue.css("left", (parseInt(Math.random() * 50, 10) - 25) + "px"); // slightly random positioning
    $issue.attr("id", "issue-" + issue.key.content);
    $issue.slideDown("slow");
  }
  function updateIssue($issue, issue) {
    if (issue.resolution.id > 0) $issue.addClass('resolved');
    else $issue.removeClass('resolved');
    $(".summary", $issue).text(issue.summary);
  }
  
  var queue = [];
  var refreshData = function () {
    $.getJSON("http://query.yahooapis.com/v1/public/yql?q=" + 
      escape("select * from xml where url = '" + baseUrl + 
        "/sr/jira.issueviews:searchrequest-xml/temp/SearchRequest.xml?pid=" + projectId + 
        "&sorter/field=" + sortBy + "&sorter/order=DESC&tempMax=20'") + 
      "&format=json&callback=?", function (data) {
      $.each(data.query.results.rss.channel.item, function () {
        var issue = this;
        if ($("#issue-" + issue.key.content).length)
          updateIssue($("#issue-" + issue.key.content), issue);
        else
          queue.push(issue);
      });
    });
  };
  
  refreshData();
  window.setInterval(refreshData, 60000);
  window.setInterval(function () {
    if ($("#issues li").length > 20)
      $("#issues li:gt(20):not(.template)").slideUp("slow", function () { $(this).remove(); });
    addIssue(queue.pop());
  }, 2000);
});
