/*  Rating.js */

var _global = this;

(function () {//

  var MAX_RATING  = 5;

  // constructor
  function Rating (element, argsObject)
  {
    if (typeof element == "string") {
      element = document.getElementById(element);
    }

    // init
    this._element              = element;
    this._rating               = argsObject.rating;
    this._name                 = argsObject.name;
    this._contentId            = argsObject.contentId;
    this._imageActive          = argsObject.activeImage;
    this._imageInactive        = argsObject.inactiveImage;
    this._imageNoStarsActive   = argsObject.activeNoStarsImage;
    this._imageNoStarsInactive = argsObject.inactiveNoStarsImage;
    this._enabled              = argsObject.enabled;

    initImages.call(this);
  }

  // public interface
  Rating.prototype.setRating = function (rating)
  {
    // clamps rating between 0 and MAX_RATING
    rating  = rating < 0 ? 0 : (rating > MAX_RATING ? MAX_RATING : rating);

    this._rating    = rating;

    updateImages.call(this);
  };

  Rating.prototype.setActiveImage = function (url)
  {
    this._imageActive   = url;
  };

  Rating.prototype.setInactiveImage = function (url)
  {
    this._imageInactive = url;
  };

  Rating.prototype.setName = function (name)
  {
    this._name  = name;
  };

  Rating.prototype.setContentId = function (contentId)
  {
    this._contentId = contentId;
  };

  // private interface
  function initImages ()
  {
    var self        = this;
    this._images    = [];

    for (var i = 1; i <= MAX_RATING; ++i) {
      var ratingImage = document.createElement("img");

      // image element properties
      ratingImage.src             = this._imageInactive;
      ratingImage.alt             = this._name;
      if (this._enabled || this._enabled == undefined)  {
        ratingImage.style.cursor    = "pointer";

        // mouse handlers
        ratingImage.onmouseover = function () {
          this.src    = self._imageActive;
        };

        ratingImage.onmouseout  = function () {
          updateImages.call(self);
        };

        ratingImage.onclick     = function () {
          imageClickHandler.call(self, this);
        };
      }

      this._element.appendChild(ratingImage);
      this._images.push(ratingImage);
    }

    updateImages.call(this);
  }

  function updateImages ()
  {
    /*if (this._rating == "0" || this._rating == "0.0") {
    this._images[0].src = this._imageNoStarsActive
    } else {
    this._images[0].src = this._imageNoStarsInactive
    }*/
    for (var i = 0; i < MAX_RATING; i++) {
      if (i <= this._rating) {
        this._images[i].src = this._imageActive;
      }
      else {
        this._images[i].src = this._imageInactive;
      }
    }
  }

  function imageClickHandler (element)
  {
    // set the rating
    /*if (this._images[0] == element) {
    this.setRating(0);
    } else {*/
      for (var i = 0; i <= this._images.length; ++i) {
        if (this._images[i] == element) {
          this.setRating(i);
          break;
        }
      }
      //}

      //Element.show('spinner'); 
      new Ajax.Updater('', '/surveyor/rating?vid=' + this._contentId + '&rating=' + this._rating, {asynchronous:true});
      //,onSuccess:function(request){ Element.hide('spinner')};
    }

    // register the constructor
    _global.Rating  = Rating;

    })();
