var Voting = function() {
  this.setup();
}
Voting.prototype = {
  setup: function() {
    var self = this;
    $(".chart-table .chart-voting a").each(function() {
      this.songid = this.href.replace(/^.*?song_id=(\d+).*$/, "$1");
      this.value = this.href.replace(/^.*?value=(\-?\d+).*$/, "$1");
      this.href = '#';
      this.onclick = function() { return self.vote(this); };
    });
  },
  vote: function(a) {
    var self = this;
    $(document.body).addClass("loading");
    $.ajax({url: "/ajax/",
            dataType: "xml",
            type: "POST",
            data: {song_id: a.songid, value: a.value, iface: 'action/vote'},
            success: function(xml) { self.update(xml) },
            error: function() { $(document.body).removeClass("loading"); }});
    return false;
  },
  update: function(xml) {
    var self = this;
    $(document.body).removeClass("loading");
    var voteTag = xml.getElementsByTagName('vote')[0];
    if (voteTag) {
      var songid = textContent(xml.getElementsByTagName('song')[0]);
      var rating = textContent(xml.getElementsByTagName('rating')[0]);
      var vote = textContent(voteTag);

      var $vplus = $("#song-"+songid+" .vote-plus a");
      var $vminus = $("#song-"+songid+" .vote-minus a");
      if (vote == 1) {
        $vplus.addClass("checked");
        $vplus.get(0).value = 0;
        $vminus.removeClass("checked");
        $vminus.get(0).value = -1;
      } else if (vote == -1) {
        $vplus.removeClass("checked");
        $vplus.get(0).value = 1;
        $vminus.addClass("checked");
        $vminus.get(0).value = 0;
      } else if (vote == 0) {
        $vplus.removeClass("checked");
        $vplus.get(0).value = 1;
        $vminus.removeClass("checked");
        $vminus.get(0).value = -1;
      }
      if ($vplus.parents("table.ten-table").get(0)) $("#song-"+songid+" .chart-rating").html(rating);
    }
  }
}

var PVoting = function() {
  this.setup();
}
PVoting.prototype = {
  setup: function() {
    var self = this;
    $(".pcontest-part-icons a").each(function() {
      this.partid = this.href.replace(/^.*?part_id=(\d+).*$/, "$1");
      this.value = this.href.replace(/^.*?value=(\-?\d+).*$/, "$1");
      this.href = '#';
      this.onclick = function() { return self.vote(this); };
    });
  },
  vote: function(a) {
    var self = this;
    $(document.body).addClass("loading");
    $.ajax({url: "/ajax/",
            dataType: "xml",
            type: "POST",
            data: {part_id: a.partid, value: a.value, iface: 'action/pvote'},
            success: function(xml) { self.update(xml) },
            error: function() { $(document.body).removeClass("loading"); }});
    return false;
  },
  update: function(xml) {
    var self = this;
    $(document.body).removeClass("loading");
    var voteTag = xml.getElementsByTagName('vote')[0];
    if (voteTag) {
      var partid = textContent(xml.getElementsByTagName('part')[0]);
      var rating = textContent(xml.getElementsByTagName('rating')[0]);
      var vote = textContent(voteTag);

      var $part = $("#part-"+partid);
      var $vlink = $(".pcontest-part-icons a", $part);
      if (vote == 1) {
        $(".pcontest-part-icons", $part).addClass("disabled");
        $vlink.get(0).value = 0;
      } else if (vote == 0) {
        $(".pcontest-part-icons", $part).removeClass("disabled");
        $vlink.get(0).value = 1;
      }
      $(".pcontest-part-rating span", $part).html(rating);
    }
  }
}
