function CategoryListing(vsIdCategoryListingObject, vsIdLabelDescription, vsIdDivDescription)
{
  var oLabelDescription;

  this._sIdLabelDescription = vsIdLabelDescription;
  this._sIdDivDescription = vsIdDivDescription;
  
  this._iTimeoutId;
  this._iTimeoutIdReset;
  this._sCurrentCategoryId;
  this._idObject = vsIdCategoryListingObject;
  
  oLabelDescription = document.getElementById(vsIdLabelDescription);
  if (oLabelDescription)
  {
    this._sDefaultDescription = oLabelDescription.innerHTML;
  }
  
  this._bInit = true;
}

CategoryListing.prototype.categoryDescriptionMouseMove = function (vsIdCategory)
{
  var sFunctionToCall;
  
  if (this._bInit)
  {
    clearTimeout(this._iTimeoutIdReset);
  
    if (this._sCurrentCategoryId != vsIdCategory)
    {
      clearTimeout(this._iTimeoutId);
      
      this._sCurrentCategoryId = vsIdCategory;
          
      sFunctionToCall = this._idObject + ".changeCategoryDescriptionFromList('" + this._sCurrentCategoryId + "','" + this._sIdLabelDescription + "','" + this._sIdDivDescription + "');"

      this._iTimeoutId = setTimeout(sFunctionToCall, 500);
    }
  }
}

CategoryListing.prototype.categoryDescriptionMouseOut = function ()
{
  var sFunctionToCall;

  clearTimeout(this._iTimeoutId);
  this._sCurrentCategoryId = "";
  
  sFunctionToCall = this._idObject + ".resetCategoryDescription('" + this._sIdLabelDescription + "','" + escape(this._sDefaultDescription) + "');"
  
  this._iTimeoutIdReset = setTimeout(sFunctionToCall, 2500);
}

CategoryListing.prototype.changeCategoryDescriptionFromList = function (vsIdCategory, vsIdLabelDescription, vsIdDivDescription)
{ 
  var oDivDescription = document.getElementById(vsIdDivDescription);
  var oLabelDescription = document.getElementById(vsIdLabelDescription);
  
  var sIdCategory;
  var oDivSource;

  for (var i = 0; i < oDivDescription.childNodes.length; i++)
  {
    if (oDivDescription.childNodes[i].getAttribute)
    {
      sIdCategory = oDivDescription.childNodes[i].getAttribute("idCategory");
    }
    else
    {
      sIdCategory = null;
    }
    
    if (sIdCategory != null && sIdCategory == vsIdCategory)
    {
      oDivSource = oDivDescription.childNodes[i];
      break;
    }
  }
  
  if (oDivSource)
  {
    oLabelDescription.innerHTML = oDivSource.innerHTML;
  }
  
  this._sCurrentCategoryId = "";
}

CategoryListing.prototype.resetCategoryDescription = function (vsIdLabelDescription, vsDefaultDescription)
{
  var oLabelDescription = document.getElementById(vsIdLabelDescription);
  
  if (vsDefaultDescription && oLabelDescription)
  {
    oLabelDescription.innerHTML = unescape(vsDefaultDescription);
    this._sCurrentCategoryId = "";
  }
}
