/*
 * Used for Sorting based on a propertyName. Uses objComparator to compare values.
 * The objectComparator, when passed two values, should return -1,0,1 based on whether
 * first value is less, equal or greater than the second
 */
var ObjectSorter = function(strPropertyName, objComparator)
{
  this.propertyName = strPropertyName;

  // If positive, objects are sorted in ascending order. Negative means they are sorted in descending order
  this.sortOrder = 1;

  /*
   * Reverses the Sort Order
   */
  this.reverseSortOrder = function()
  {
    this.sortOrder = -1 * this.sortOrder;
  };

  /*
   * Sets the sort order
   */
  this.setSortOrder = function(order)
  {
    var newOrder = parseInt(order);

    if (!isNaN(newOrder) && (newOrder == 1 || newOrder == -1))
    {
      this.sortOrder = newOrder;
    }
  };

  /*
   * Sorts object using Selection Sorting
   */
  this.sort = function(objectList)
  {
    var sortedList = [];
    for (var i in objectList)
    {
      sortedList[i] = objectList[i];
    }

    for (var i = 0; i < sortedList.length - 1; i++) 
    {
      sortedList[i] = sortedList[i];
      for (var j = i + 1; j < sortedList.length; j++)
      {
        if (this.sortOrder * objComparator(sortedList[i][this.propertyName], sortedList[j][this.propertyName]) > 0)
        {
          temp = sortedList[i];
          sortedList[i] = sortedList[j];
          sortedList[j] = temp;
        }
      }
    }

    return sortedList;
  };
};

/*
 * A simple comparator to compare values based on natural ordering
 */
function simpleComparator(val1, val2)
{
  if (val1 == val2)
  {
    return 0;
  }
  else if(val1 < val2)
  {
    return -1;
  }
  else
  {
    return 1;
  }
}
