
// Definition de la classe 'ScriptCurrencyFormatter'
// NB: L'ordre des methodes est important
function ScriptCurrencyFormatter()
{
	var _this = this;

	// Placement du symbole monétaire. Exemple pour 1 dollar:
	// 0 => $1
	// 1 => 1$
	// 2 => $ 1
	// 3 => 1 $
	this.PositivePattern = eval("scf_PositivePattern");

	// Séparateur decimal
	this.DecimalSeparator = eval("scf_DecimalSeparator");
	
	// Séparateur de millier
	this.GroupSeparator	= eval("scf_GroupSeparator");
	
	// Symbole monétaire
	this.Symbol = eval("scf_Symbol");
	
	// Nombre de chiffres après la virgule
	this.DecimalDigit = eval("scf_DecimalDigit");

	var CheckParameters = function()
	{
		if (!_this.PositivePattern || _this.PositivePattern < 0 || _this.PositivePattern > 3)
			_this.PositivePattern = 3;
		
		if (!_this.DecimalSeparator || _this.DecimalSeparator == '')
			 _this.DecimalSeparator = '.';
			 
		if (!_this.GroupSeparator)
			 _this.GroupSeparator = ' ';
	
		if (!_this.Symbol)
			_this.Symbol = '€';
	
		if (_this.DecimalDigit == null || typeof (_this.DecimalDigit) == "undefined" || _this.DecimalDigit < 0)
			_this.DecimalDigit = 2;
	}

	// Formatte la partie décimale du prix
	// Séparateur décimale + décimales
	var GetRightPart = function(price)
	{
		if (_this.DecimalDigit < 1)
			return '';
		
		var parts = price.split('.');
		var decimals = (parts.length > 1) ? parts[1] : '';
			
		if (decimals == '')
		{
			// Pas de décimales => on rajoute des zéros
			for (var i = 0; i < _this.DecimalDigit; i++)
				decimals += '0';
		}
		else
		{
			if (_this.DecimalDigit > decimals.length)
			{
				// Pas assez de décimales => on rajoute des zéros
				var count = _this.DecimalDigit - decimals.length;
				for (var i = 0; i < count; i++)
					decimals += '0';
			}
			else
			{
				// Trop de décimales => on tronque sans arrondir
				decimals = decimals.substring(0, _this.DecimalDigit);
			}
		}

		// On ajoute le séparateur décimal et les décimales
		return _this.DecimalSeparator + decimals;
	}
	
	// Formatte la partie entière du prix
	// Insère le séparateur de milliers
	var GetLeftPart = function(price)
	{
		var parts = price.split('.');
		var leftPart = parts[0];
		
		if (_this.GroupSeparator == '')
			return leftPart;
			
		var remain = (leftPart.length % 3);
		if (remain > 0)
		{
			var count = 3 - remain;
			for (var i = 0; i < count; i++)
				leftPart = 'a' + leftPart;
		}
		
		var result = '';
		for (var i = 0; i < leftPart.length; i += 3)
		{
			result += leftPart.substr(i, 3);
			if (i + 3 < leftPart.length)
				result += _this.GroupSeparator;
		}
		result = result.replace(/a/g, '');
		
		return result;
	}
	
	// Insère le symbole monétaire au bon endroit
	var InsertSymbol = function(price)
	{
		switch (_this.PositivePattern)
		{
			case 0: return _this.Symbol + price;
			case 1: return price + _this.Symbol;
			case 2: return _this.Symbol + ' ' + price;
		}
		return price + ' ' + _this.Symbol;
	}

	// Formatte une valeur décimale en prix	en fonction
	// des paramètres fournies par les propriétés publiques
	this.Format = function(value)
	{
		CheckParameters();
	
		var price = Tools_Trim('' + (value ? value : 0));
		var leftPart = GetLeftPart(price);		// Partie entière
		var rightPart = GetRightPart(price);	// Séparateur décimal + partie décimale
		return InsertSymbol(leftPart + rightPart);
	}
}

