
//string number_format  (  float $number  ,  int $decimals  ,  string $dec_point  ,  string $thousands_sep  )
function number_format()
{
   var decimals      = 0;
   var dec_point     = ".";
   var thousands_sep = ",";
   var numberString  = "";
   var number = parseFloat(arguments[0]);
   
   switch(arguments.length)
   {
      // No decimals, comma between thousands
      case 1:
         break;
      case 2:
         decimals = parseInt(arguments[1]);
         break;
      case 4:
         decimals = parseInt(arguments[1]);
         dec_point     = arguments[2].toString();
         thousands_sep = arguments[3].toString();
         break;
      default:
         alert("Invalid number of arguments for function \"number_format\"");
         return number;
         break;
   }
   
   // Adjust precision
   shift = Math.pow(10,decimals);
   number = number*shift;
   number = Math.round(number);
   number = number/shift;

   
   // Add thousands separator.
   number = number.toString();
   number_array= new Array();
   number_array = number.split(".");

   whole = number_array[0];
   if(number_array.length == 2)
      dec   = number_array[1];
   else
      dec = "";

   if(parseInt(whole) > 999)
   {
      counter = 0;
      wholeStr = "";
      
      for(a = whole.length-1; a >= 0; a--)
      {
         
         thisPart = whole.substr(a,1);
         wholeStr= thisPart + wholeStr;
         counter++;
         
         if(counter == 3 && a != 0)
         {
            wholeStr= thousands_sep + wholeStr;
            counter = 0;
         }
      }
      
      whole = wholeStr;
   }

   // Replace decimal point
   // Add post-decimal zeros if needed.
   while(dec.length < decimals)
      dec = dec + "0";

   if(dec.length > 0)
      number = whole + dec_point + dec;
   else
      number = whole;
   
   return number;
}
