/**
 * Rating plugin
 *
 * @author Patrick Beser<p@hopeglory.com>
 * @author Steve Sinnwell<s@hopeglory.com>
 * @backend connection Christoph Kettelhoit <ckettelhoit@3pc.de>
 */
(function($) {

  $.fn.rating = function(settings) {
    var config = {'foo': 'bar'};

    if (settings) $.extend(config, settings);

    this.each(function(a, b) {
      // voting blocked, disable interactions
      if ($(b).hasClass('voting_blocked')) {
        return this;
      }

      $(b).data('default_class_name', $(b).attr('class'));

      $(b).find('li a').each(function(c, d) {

        // mouseover + focus
        $(d).bind('mouseover focus', function(e) {
          $(b).removeClass('current-stars-0 current-stars-1 current-stars-2 current-stars-3 current-stars-4 current-stars-5').addClass('current-stars-'+(c+1));
        });

        // mouseout + blur
        $(d).bind('mouseout blur', function(e) {
          $(b).removeClass('current-stars-0 current-stars-1 current-stars-2 current-stars-3 current-stars-4 current-stars-5').attr('class', $(b).data('default_class_name'));
        });

        // click
        $(d).click(function(e) {
          e.preventDefault();

          $(b).data('default_class_name', 'rating-stars current-stars-'+(c+1));

          //definition of the async parameter for seperating ajax calls to backend
          var asyncParam = "async=true";
          $('#ratingFeedback').hide();
          $('#ratingError').hide();

          if ($(this).attr('href') != '#') {
            $.ajax({
              cache : false,
              type : "GET",
              url : $(this).attr('href') + "&" + asyncParam,
              async: "true",
              // success(data, textStatus, XMLHttpRequest)
              // complete(XMLHttpRequest, textStatus)
              // error(XMLHttpRequest, textStatus, errorThrown)                                        data.
              /*complete: function(request, status) {

              },*/
              error : function(request, status, error) {
                //alert("error - status: " + status + " - error: " + error);
                $('#ratingError').show();
              },
              success: function(data, status, request) {
                //data.averageRating , data.totalRatings
                // getAverageRating (data.averageRating) and update the stars
                $(b).removeClass('current-stars-0 current-stars-1 current-stars-2 current-stars-3 current-stars-4 current-stars-5').addClass('current-stars-'+Math.round(data.averageRating));
                $(b).data('default_class_name', $(b).attr('class'));
                // disable interactions
//                $(b).find('li a').each(function(c, d) {
//                  $(d).unbind('mouseover focus');
//                  $(d).unbind('mouseout blur');
//                  $(d).unbind('click');
//                  $(d).removeAttr('href');
//                  $(d).removeAttr('title');
//                });
                // show feedback text
                $('#ratingFeedback').show();
              }
            });
          }

        });

      });
    });

    return this;
  };

})(jQuery);
