    var ajaxStar = new Class(
  {
      initialize: function(id, article, link, stars){
        this.link = link;
        this.id =id;
        this.article =article;
        this.stars = stars;
        this.confirmation = new Element('span').addClass('ajax_success').setHTML('Thank you for voting.');
        this.errorMessage = new Element('span').addClass('ajax_success').setHTML('Your vote could not be counted. Please try again later.');
        for (i = 1; i <= stars; i++){
            a = new Element('a');
            a.addClass('active').addClass('active').setAttribute('href', '#none');
            a.addClass('ajax_star_button');
            a.setProperties({href: '#none',rel: i});
            a.addEvent('click', function(pass){this.submit(pass);}.pass(i, this));
            a.addEvent('mouseover', function(pass){
              while(pass.getPrevious()){
                pass.getPrevious().addClass('hovered');
                pass = pass.getPrevious();
              }
            }.pass(a));
            a.addEvent('mouseout', function(pass){ $$('a.ajax_star_button').each(function(el, i){ el.removeClass('hovered');})}.pass(i, this));
            a.injectInside($(this.id));
        }
      },
      submit: function(vote){
        ajax = new Ajax(this.link, {postBody: 'rating='+vote+'&article_id='+this.article, method: 'post'});
        try{
          test = ajax.request();
        }catch(err){
          this.errorMessage.injectAfter($(this.id));
          test = false;
        }
        finally{
          if (test){
              this.confirmation.injectAfter($(this.id));
          }
          $$('a.ajax_star_button').each(function(element, counter){
            if (counter < vote){
              element.addClass('voted');
            }
            element.removeEvents();
            element.removeClass('active').setStyle('cursor', 'default');
            counter++;
          });
        }
      }
  }
);