var inlineFavorite = function(favoritesSaveMode, identifier, urn, nRank, nFavoriteId)
{
  /* Add a spinny and progress message */
  var oSelectorDiv = document.getElementById('UserFavoriteRankControl'+identifier);
  var spinner = document.createElement('img');
  spinner.id = 'spinner_'+ identifier;
  spinner.src = '/images/loading.gif';
  spinner.align = 'absbottom';
  oSelectorDiv.appendChild(spinner);
  
  var oActionMessage = document.createElement("span");
  oActionMessage.id = 'ActionMessage_'+ identifier;
  if (favoritesSaveMode == 'SET_RANK')
  {
    oActionMessage.innerHTML = "&nbsp;Ranking favorite...";
  }
  else if (favoritesSaveMode == 'DELETE')
  {
    oActionMessage.innerHTML = "&nbsp;Removing favorite...";
  }
  else
  {
    oActionMessage.innerHTML = "&nbsp;Adding favorite...";
  }    
  oSelectorDiv.appendChild(oActionMessage);
        
  document.getElementById('removeFavorite'+identifier).style.display = 'none';
  document.getElementById('addFavorite'+identifier).style.display = 'none';
  
  var manageFavoritesForm = document.getElementById('manageFavoritesForm');
  
  manageFavoritesForm.favoritesSaveMode.value = favoritesSaveMode;
  manageFavoritesForm.identifier.value = identifier;
  manageFavoritesForm.urn.value = urn;
  
  // Why are we checking for null?
  if (manageFavoritesForm.nRank != null)
  {
    manageFavoritesForm.nRank.value = nRank;
  }
  manageFavoritesForm.nFavoriteId.value = nFavoriteId;
    
  var local_favoritesSaveMode = favoritesSaveMode;
  $( manageFavoritesForm ).ajaxSubmit( {
    dataType: 'json',
    success: function( returnObj )
    {
      if( (typeof returnObj === 'object') && (typeof returnObj.bIsSuccess === 'boolean') )
      {
        if(returnObj.bIsSuccess==true)
        {
          oSelectorDiv.removeChild(document.getElementById('ActionMessage_' + identifier));
          oSelectorDiv.removeChild(document.getElementById('spinner_' + identifier));
          if(returnObj.sMode === 'DELETE')
          {
            document.getElementById('addFavorite'+returnObj.identifier).style.display = 'block';
            document.getElementById('removeFavorite'+returnObj.identifier).style.display = 'none';
          }
          else // if(returnObj.sMode === 'ADD')
          {
            document.getElementById('addFavorite'+returnObj.identifier).style.display = 'none';
            document.getElementById('removeFavorite'+returnObj.identifier).style.display = 'block';
          }
          if(local_favoritesSaveMode == 'SET_RANK')
          {
            favoriteRank[identifier] = nRank;
            document.getElementById('removeFavorite'+identifier).style.display = 'block';
            highlightBars('UserFavoriteRankControl'+identifier, 'imgBar'+identifier+nRank);
          }
        }
        else
        {
          alert('Error occurred during attempt to manage favorites:\n' + returnObj.sMessage);
        }
      }
      else
      {
        alert('Server returned unknown status on attempt to manage favorites.');
      }
    },
    error: function()
    {
      alert('An error occured during processing.');
    }
  } );
}

var aBarOnImages = Array('/images/menuicon/add.gif',
                         '/images/intness/intness_clear_hover.gif',
                         '/images/intness/intness_20_hover.gif',
                         '/images/intness/intness_40_hover.gif',
                         '/images/intness/intness_60_hover.gif',
                         '/images/intness/intness_80_hover.gif',
                         '/images/intness/intness_100_hover.gif');                         

var aBarOffImages = Array('/images/menuicon/add.gif',
                          '/images/intness/intness_clear.gif',
                          '/images/intness/intness_20.gif',
                          '/images/intness/intness_40.gif',
                          '/images/intness/intness_60.gif',
                          '/images/intness/intness_80.gif',
                          '/images/intness/intness_100.gif');                       

function highlightBars( sContainerId, iUpToIdx )
{
  var oRankDiv = document.getElementById( sContainerId );
  if( oRankDiv )
  {
    var aBarsCollection  = oRankDiv.getElementsByTagName( 'img' );
    var oCurrentBarImage;
    var iCntr;

    /* First turn them all off */
    for( iCntr = 0; iCntr < aBarsCollection.length; iCntr++ )
    {
      oCurrentBarImage = aBarsCollection[iCntr];
      if( oCurrentBarImage && ( oCurrentBarImage.id.indexOf( 'Bar' ) > 0 ))
      {
        oCurrentBarImage.src = aBarOffImages[iCntr];
      }
    }
    if( iUpToIdx != 'None' )
    {
      /* Now turn turn on those that should be highlighted */
      for( iCntr = 0; iCntr < aBarsCollection.length; iCntr++ )
      {
        oCurrentBarImage = aBarsCollection[iCntr];
        if( oCurrentBarImage && ( oCurrentBarImage.id.indexOf( 'Bar' ) > 0 ))
        {
          oCurrentBarImage.src = aBarOnImages[iCntr];
          if( oCurrentBarImage.id == iUpToIdx )
          {
            break;
          }
        }
      }
    }
  }
}
function resetControl(sContainerId, iRank)
{
  //i know this looks a lot like the method below, but i can only get the code to work if a call 2 seperate methods for the 2 seperate events??? 
  //you are more than welcome to fix it
  highlightBars(sContainerId, iRank );
}
function resetBars(sContainerId, iRank)
{
  highlightBars(sContainerId, iRank );
}