/*
   Class that defines a standard ratings component.
*/

// Messages for display above the individual ratings units. The length of the
// array also defines how many units to include in the component.
yg_Ratings.Msgs = new Array
(
   "Poor",
   "Fair",
   "Good",
   "Very Good",
   "Excellent"
);

// Path for all images.
var path = "images/";

// Image for set units.
yg_Ratings.UnitY = path + "star_red16.gif";

// Image for set units <= the mouse over point.
yg_Ratings.UnitYMouseOver = path + "star_g_r16.gif";

// Image for set units > the mouse over point.
yg_Ratings.UnitYMouseLess = path + "star_brdr_red16.gif";

// Image for unset units.
yg_Ratings.UnitN = path + "star_brdr_g16.gif";

// Image for unset units <= the mouse over point.
yg_Ratings.UnitNMouseOver = path + "star_g16.gif";

function yg_Ratings(id)
{
   // The id parameter is the name (a string) of the variable to which the
   // instance is assigned. (The variable is sent along to event handlers,
   // so it must be in the global scope.)
   var i, t;
   var attributes;
   var h1, h2;
   var d = document;

   this.rating = 0;

   attributes = 'class="ygrtngs" id="' + id + '"';
   h1 = 'onMouseOut="return yg_Ratings_mouseOut(' + id + ');"';

   d.write('<div ' + attributes + ' ' + h1 + '>');
   d.write('<div class="message">&nbsp;</div>');

   for (i = 1; i <= yg_Ratings.Msgs.length; i++)
   {
      h1 = 'onMouseOver="return yg_Ratings_mouseOver(' + id + ', ' + i + ');"';
      h2 = 'onClick="return yg_Ratings_click(' + id + ', ' + i + ');"';
      d.write('<span class="unit "' + h1 + ' ' + h2 + '>');
      d.write('<img src="' + yg_Ratings.UnitN + '" />');
      d.write('<input type="hidden" name="' + id + i +'" value="n" />');
      d.write('</span>');

   }

   d.write('</div>');

   this.parent = document.getElementById(id);
   this.images = this.parent.getElementsByTagName("img");
   this.inputs = this.parent.getElementsByTagName("input");
   this.msg = this.parent.getElementsByTagName("div")[0];
}

function yg_Ratings_set(n, oflag)
{
   // The n parameter is the unit to set (starting at 1). Set oflag to true
   // when the mouse is outside of the ratings component, or you're not sure.
   if (arguments.length < 2)
      oflag = true;

   this.rating = n;
   this.update(n, oflag);
}

function yg_Ratings_setMsg(m)
{
   var children = this.msg.childNodes;
   var node;

   for (var i = 0; i <  children.length; i++)
   {
      node = children[i];

      if (node.nodeType == 3)
      {
         // Using 0xA0 prevents the browser from collapsing empty messages.
         if (m == "")
            node.nodeValue = unescape("%A0");
         else
            node.nodeValue = m;
      }
   }
}

function yg_Ratings_get()
{
   return this.rating;
}

function yg_Ratings_update(n, oflag)
{
   // The oflag parameter is true when the mouse is outside of the ratings
   // component. The n parameter is the 
   if (oflag)
      this.setMsg("");
   else
      this.setMsg(yg_Ratings.Msgs[n - 1]);

   for (i = 1; i <= yg_Ratings.Msgs.length; i++)
   {
      if (i == this.rating)
         this.inputs[i - 1].setAttribute("value", "y");
      else
         this.inputs[i - 1].setAttribute("value", "n");

      if (oflag)
      {
         if (i <= this.rating)
            this.images[i - 1].src = yg_Ratings.UnitY;
         else
            this.images[i - 1].src = yg_Ratings.UnitN;
      }
      else
      {
         if (i <= n)
         {
            if (i <= this.rating)
               this.images[i - 1].src = yg_Ratings.UnitYMouseOver;
            else
               this.images[i - 1].src = yg_Ratings.UnitNMouseOver;
         }
         else
         {
            if (i <= this.rating)
               this.images[i - 1].src = yg_Ratings.UnitYMouseLess;
            else
               this.images[i - 1].src = yg_Ratings.UnitN;
         }
      }
   }

   return true;
}

function yg_Ratings_click(obj, n)
{
   obj.set(n, false);
   return true;
}

function yg_Ratings_mouseOver(obj, n)
{
   obj.update(n, false);
   return true;
}

function yg_Ratings_mouseOut(obj)
{
   obj.update(0, true);
   return true;
}

yg_Ratings.prototype.set = yg_Ratings_set;
yg_Ratings.prototype.setMsg = yg_Ratings_setMsg;
yg_Ratings.prototype.get = yg_Ratings_get;
yg_Ratings.prototype.update = yg_Ratings_update;

