﻿

//maintained for backward compatibility
//please use FormatNumber
function FormatDecimal(value, decimalPlaces) {
	return FormatNumber(value, decimalPlaces, arguments[2], arguments[3], arguments[4]);
}

function FormatPercent(value, decimalPlaces) {
	var sOut = new String();
	var sPrefix = new String(GetNumericPrefix(value));
	var sSuffix = new String(GetNumericSuffix(value));
	var sTemp = value.toString().substring(sPrefix.length, value.toString().length - (sPrefix.length + sSuffix.length));
	sTemp = StripCommasFromNumericValue(sTemp);
	sTemp = StripDollarSignFromNumericValue(sTemp);
	var nTemp = parseFloat(sTemp);
	nTemp = nTemp * 100;
	sTemp = FormatNumber(nTemp, decimalPlaces, arguments[2], arguments[3], arguments[4]);
	sTemp = sPrefix + sTemp + sSuffix;
	sOut = sTemp + "%";
	return sOut;
}


function FormatCurrency(value, decimalPlaces) {
	var sTemp = new String(FormatNumber(value, decimalPlaces, arguments[2], arguments[3], arguments[4]));
	var sPrefix = new String(GetNumericPrefix(sTemp));
	var sOut = new String();
	
	sTemp = sTemp.substring(sPrefix.length, sTemp.length);
	
	if (sPrefix == "(") {
		sOut = sPrefix + "$" + sTemp;
	}	else if (sPrefix == "-") {
		sOut = "$" + sPrefix + sTemp;
	}	else {
		sOut = "$" + sPrefix + sTemp;
	}
	
	return sOut;
}


function FormatNumber(value, decimalPlaces) {
	
	var sValue = new String(value.toString());
	sValue = StripCommasFromNumericValue(sValue);
	sValue = StripDollarSignFromNumericValue(sValue);
	
	var bIncludeLeadingDigit = new Boolean(true);
	var bUseParensForNegativeNumbers = new Boolean(false);
	var bGroupDigits = new Boolean(false);
	
	if ((arguments.length >= 3) && (arguments[2] != null))
	{
		bIncludeLeadingDigit = (arguments[2] == true) ? true : false ;
	}
	if ((arguments.length >= 4) && (arguments[3] != null))
	{
		bUseParensForNegativeNumbers = (arguments[3] == true) ? true : false ;
	}
	if ((arguments.length >= 5) && (arguments[4] != null))
	{
		bGroupDigits = (arguments[4] == true) ? true : false ;
	}
	
	
	var sTemp = new String(sValue);
	var sPrefix = new String(GetNumericPrefix(sTemp));
	var sSuffix = new String(GetNumericSuffix(sTemp));
	var bValueIsNegative = new Boolean(false);
	
	sValue = StripParensFromNumericValue(sValue);
	if ((sPrefix == "(")&&(sSuffix == ")")) { bValueIsNegative = true; }
	else if (sPrefix == "-") { bValueIsNegative = true; }

	
	var nPos = new Number(sValue.toString().indexOf("."));
	var sInt = new String();
	var sDec = new String();
	
	var bRoundUpInt = new Boolean(false);
	var bRoundUpDec = new Boolean(false);

	if ((isNaN(sValue) != true)&&(sValue.length > 0))
	{
		if (nPos >= 0)
		{
			sInt = sValue.substring(0,nPos);
			sDec = sValue.substring(nPos + 1, sValue.length);
		}
		else
		{
			sInt = sValue;
		}
		
		//Addresses a bug found when entering ".5" instead of "0.5"
		if (sInt.length == 0) { sInt = "0"; }
		
		var nIntAbs = new Number();
		nIntAbs = parseInt(sInt, 10);
		bValueIsNegative = (nIntAbs < 0) ? true : bValueIsNegative ;
		nIntAbs = Math.abs(nIntAbs)
		sInt = nIntAbs;		
		
		if (sDec.length > decimalPlaces)
		{
			var sRemainder = new String();
			var nRemainder = new Number();
			sRemainder = sDec.substring(decimalPlaces, sDec.length);
			nRemainder = parseInt(sRemainder, 10);
			sDec = sDec.substring(0,decimalPlaces);
			
			if (nRemainder >= (Math.pow(10, sRemainder.length)) / 2)
			{
				bRoundUpDec = true;
			}
		}
		else
		{
			for (var i=sDec.length;i<decimalPlaces;i++)
			{
				sDec += "0";
			}
		}
		
		if (bRoundUpDec == true)
		{
		
			var sTemp = new String();
			sTemp = "1" + sDec;
			sTemp = (parseInt(sTemp, 10) + 1).toString();
			if (sTemp.substring(0,1) == "2")
			{
				bRoundUpInt = true;
			}
			else
			{
				sDec = sTemp.substring(1,sTemp.length);
			}
			
		
		}
		
		
		if (sInt.length == 0)
		{
			sInt = "0";
		}
		
		if (bRoundUpInt == true)
		{
			sInt = (parseInt(sInt, 10) + 1).toString();
			sDec = (parseInt(sDec, 10) + 1).toString();
			sDec = sDec.substring(1, sDec.length);
		}
		
		
	}
	else
	{
		sInt = "0";
		for (var i=sDec.length;i<decimalPlaces;i++)
		{
			sDec += "0";
		}
	}


	var sOut = new String();
	if (!((parseInt(sInt, 10) == 0)&&(bIncludeLeadingDigit == false)))
	{
		sOut = sInt;
	}
	
	if (decimalPlaces > 0)
	{
		sOut += ".";
		sOut += sDec;
	}
	

	if (bValueIsNegative == true)
	{
		if (bUseParensForNegativeNumbers == true)
		{
			sOut = "(" + sOut + ")";
		}
		else
		{
			sOut = "-" + sOut;
		}
	}
	
	if (bGroupDigits == true) {
		sOut = AddCommasToNumericValue(sOut);
	}
	
	return sOut;
	
}





function StripCommasFromNumericValue(value)
{
	var sOut = new String(value.toString());
	
	sOut = sOut.replace(/\,/gi, "");
	
	return sOut;
}

function StripParensFromNumericValue(value)
{
	var sOut = new String(value.toString());
	
	sOut = sOut.replace(/\(|\)/gi, "");
	
	return sOut;
}

function StripDollarSignFromNumericValue(value)
{
	var sOut = new String(value.toString());
	
	sOut = sOut.replace(/\$/gi, "");
	
	return sOut;
}


function AddCommasToNumericValue(value)
{
	var sTemp = new String(StripCommasFromNumericValue(value.toString()));
	var sOut = new String();
	
	if (sTemp.length == 0) { return sOut; }
	
	var sDec = new String();
	var sInt = new String();
	var sPrefix = new String(GetNumericPrefix(sTemp));
	var sSuffix = new String(GetNumericSuffix(sTemp));
	
	
	if (sPrefix.length > 0) {
		sTemp = sTemp.substring(sPrefix.length, sTemp.length);
	}
	
	if (sSuffix.length > 0) {
		sTemp = sTemp.substring(0, sTemp.length - sSuffix.length);
	}
	
	if (sTemp.length == 0) { return sPrefix + sSuffix; }
	
	
	
	if (sTemp.indexOf(".") >= 0)
	{
		sInt = sTemp.substring(0, sTemp.indexOf("."))
		sDec = sTemp.substring(sTemp.indexOf(".") + 1, sTemp.length);
	}
	else
	{
		sInt = sTemp;
	}
	
	try
	{
		sInt = parseInt(sInt).toString();
	}
	catch (e)
	{
		return value;
	}
	
	var i = new Number();
	var j = new Number();
	var l = new Number();
	j = sInt.length % 3;
	l = sInt.length - j;
	
	if (j > 0) {
		sOut = sInt.substring(0,j);
	}
	
	//Modified: October 21, 2005 (RDM)
	//Corrected bug where 3-digit integer parts were
	//getting commas (i.e.: 400.02 --> ",400.02")
	if ((j > 0)||(l>3)) {
		for (i=0;i<l;i+=3)
		{
			if (((j>0)&&(i==0))||(i>0)) {
				sOut += ",";
			}
			sOut += sInt.substring(i+j,(i+j+3));
		}
	} else {
		sOut += sInt;
	}
	
	if (sDec.length > 0)
	{
		sOut += ".";
		sOut += sDec;
	}
	
	if (sPrefix.length > 0) {
		sOut = sPrefix + sOut;
	}
	
	if (sSuffix.length > 0) {
		sOut += sSuffix;
	}
	
	return sOut;	
}

function GetNumericPrefix(value)
{
	var sTemp = new String(value.toString());
	if (sTemp.length == 0) { return ""; }
	var sPrefix = new String();
	var i = new Number(0);
	var bNumberFound = new Boolean(false);

	while (bNumberFound == false)
	{
		var nAsc = new Number();
		nAsc = sTemp.charCodeAt(i);
		
		if ((nAsc >= 48)&&(nAsc <= 57))
		{
			bNumberFound = true;
			if (i > 0)
			{
				sPrefix = sTemp.substring(0,i);
			}
			break;
		}
	
		i++;
		if (i > sTemp.length) {
			break;
		}
	}
	
	return sPrefix;
}


function GetNumericSuffix(value)
{
	var sTemp = new String(value.toString());
	if (sTemp.length == 0) { return ""; }
	var sSuffix = new String();
	var i = new Number(sTemp.length);
	var bNumberFound = new Boolean(false);

	bNumberFound = false;
	
	while (bNumberFound == false)
	{
		var nAsc = new Number();
		nAsc = sTemp.charCodeAt(i-1);
		
		if ((nAsc >= 48)&&(nAsc <= 57))
		{
			bNumberFound = true;
			if (i < (sTemp.length))
			{
				sSuffix = sTemp.substring(i, sTemp.length);
			}
			break;
		}
	
		i--;
		if (i == 0) {
			break;
		}
	}
	
	return sSuffix;
}

