// Добавляет голос через Ajax
// data:
//   obj    - тип объекта
//   id     - id объекта
//   bar_id - id контейнера голосовалки, в которой кликнули
//   rating - числовое значение добавляемого голоса от 1 до 10

function rate(data){
  $.ajax({
    url: rate.url,
    data: data,
    dataType: 'json',
    success: rate.success,
    error: rate.error,

    cfg: data
  });
}

rate.url = '/rate.fcgi';

rate.errorMessages = {
    error: 'Произошла ошибка',
    internal: 'Произошла ошибка',
    voted_before: 'Вы уже голосовали'
};

rate.error = function(msg){
  if (!msg || typeof msg != 'string') msg = rate.errorMessages.error;

  $("#rating-bar-" + this.cfg.bar_id + " .result")
    .removeClass('ok')
    .addClass('error')
    .text(msg);
};

rate.success = function(result){
  if (result.success)
  {
    $("#rating-bar-" + this.cfg.bar_id + " a.v" + this.cfg.rating).addClass('voted');

    $("#rating-bar-" + this.cfg.bar_id + " .result")
      .removeClass('error')
      .addClass('ok')
      .text('Ваш голос принят!');
  }
  else
  {
    var msg = result.error
              ? rate.errorMessages[result.error]
              : $.map(result.errors, function (item) {
                  return rate.errorMessages[item] || null;
                }).join(". ");

    this.error(msg);
  }
}