/**
* Star Rating - jQuery plugin
* Modified by Aaron (http://hypercas.com)
**/
/**
* Star Rating - jQuery plugin
*
* Copyright (c) 2007 Wil Stuckey
* Modified by John Resig
*
* Dual licensed under the MIT and GPL licenses:
*   http://www.opensource.org/licenses/mit-license.php
*   http://www.gnu.org/licenses/gpl.html
*
*/

/**
* Create a degradeable star rating interface out of a simple form structure.
* Returns a modified jQuery object containing the new interface.
*
* @example jQuery('form.rating').rating();
* @cat plugin
* @type jQuery
*
*/
jQuery.fn.rating = function()
{

  var $entity;
  $entity = jQuery(this).find('select');

  return this.each(function()
  {
    var div = jQuery("<div/>").attr({
      title: this.title,
      className: "rating"
    }).insertAfter(this);

    jQuery(this).find("select option").each(function()
    {
      div.append(this.value == "" ? "" : "<div class='star'><a href='#" + this.value + "'>&nbsp;</a></div>");
    });

    //left overs from old plugin
    var averageRating = $entity.val(),
            url = this.action,
            averageIndex = $entity.val(),
            averagePercent = 0;


    // hover events and focus events added
    var stars = div.find("div.star")
            .mouseover(drainFill).focus(drainFill)
            .mouseout(drainReset).blur(drainReset)
            .click(click);

    // cancel button events
    div.find("div.cancel")
            .mouseover(drainAdd).focus(drainAdd)
            .mouseout(resetRemove).blur(resetRemove)
            .click(click);

    reset();

    function drainFill() { drain(); fill(this); }
    function drainReset() { drain(); reset(); }
    function resetRemove() { reset(); jQuery(this).removeClass('star_on'); }
    function drainAdd() { drain(); jQuery(this).addClass('star_on'); }

    function click()
    {
      averageIndex = stars.index(this) + 1;
      averagePercent = 0;
      $entity.val(averageIndex);

      if (averageIndex == 0)
        drain();

      Rating_Click(jQuery(this).find('a')[0].href.slice(1));

      return false;
    }

    // fill to the current mouse position.
    function fill(elem)
    {
      stars.find("a").css("width", "100%");
      stars.slice(0, stars.index(elem) + 1).addClass("star_hover");
    }

    // drain all the stars.
    function drain()
    {
      stars.removeClass("star_on star_hover");
    }

    // Reset the stars to the default index.
    function reset()
    {
      stars.slice(0, averageIndex).addClass("star_on");

      var percent = averagePercent ? averagePercent * 10 : 0;
      if (percent > 0)
        stars.eq(averageIndex).addClass("star_on").children("a").css("width", percent + "%");
    }
  }).hide();
};

// fix ie6 background flicker problem.
if (jQuery.browser.msie == true)
  document.execCommand('BackgroundImageCache', false, true);

