// JScript File
Type.registerNamespace('ActiveBets');

ActiveBets.OddsConverter = function ()
{
	if (arguments.length != 0)
		this._ctor$0.apply(this, arguments);
}
ActiveBets.OddsConverter.prototype = {
	_ctor$0 : function() {
		//this.EventId = arguments[0];
	},

	_fract : function (decimalValue, IsDenumerator) {
		
		if (decimalValue == 0) {
			return !IsDenumerator ? 0 : 1;
		}
		
		if (decimalValue == Math.round(decimalValue - 0.5)) {
			return !IsDenumerator ? Math.round(decimalValue - 0.5) : 1;
		}

		var sign = decimalValue < 0 ? -1 : 1;	    
		var Z, diff, N, D0, D1, D2;

		decimalValue = Math.abs(decimalValue);
		Z = decimalValue;
		D1 = 0; D2 = 1;
		do {
			Z = 1 / (Z - Math.round(Z - 0.5));
			D0 = D2;
			D2 = D2 * Math.round(Z - 0.5) + D1;
			D1 = D0;
			N = Math.round((decimalValue * D2 + 0.5) - 0.5);
			diff = Math.abs(decimalValue - (N/D2));
		}
		while (diff > 0.001);
		N *= sign;
		
		return !IsDenumerator ? N : D2;
	},
	
	_d2a : function(decimalValue)
	{
		var americanValue = 100;
		if (decimalValue < 2.0)
			americanValue = 100.0 / (1 - decimalValue);
		else
			americanValue = (decimalValue - 1) * 100;
		return Math.round(americanValue);
	},
	
	_d2f : function(decimalValue)
	{
		var americanValue = this._d2a(decimalValue);
		
		return this._a2f(americanValue);
	},
	
	_a2f : function(americanValue)
	{
		var ratio = americanValue > 0.0 ? americanValue / 100.0 : 100.0 / Math.abs(americanValue);
		
		var numerator = this._fract(ratio, false);
		var denominator = this._fract(ratio, true);
		
		return String.format("{0}/{1}", numerator, denominator);
	},
	
	_a2d : function(americanValue)
	{
		var decimalValue = (americanValue >= 0) ? (americanValue / 100.0 + 1) : (1 + (100.0 / Math.abs(americanValue)));        
		return Math.round(decimalValue * Math.pow(10, 2)) / Math.pow(10, 2);
	},
	
	_f2d : function(fractionalValue)
	{
		if (fractionalValue.indexOf('/') == -1)
			return 0.0;
		
		var numerator = parseInt(fractionalValue.substr(0, fractionalValue.indexOf('/')));
		var denominator = parseInt(fractionalValue.substr(fractionalValue.indexOf('/') + 1));
		
		var decimalValue = (numerator * 1.0 / denominator) + 1;
		
		return Math.round(decimalValue * Math.pow(10, 2)) / Math.pow(10, 2);
	},
	
	_f2a : function(fractionalValue)
	{
		if (fractionalValue.indexOf('/') == -1)
			return 100;

		var numerator = parseInt(fractionalValue.substr(0, fractionalValue.indexOf('/')));
		var denominator = parseInt(fractionalValue.substr(fractionalValue.indexOf('/') + 1));

		return this._d2a((numerator * 1.0 / denominator) + 1);
	},

	toDecimal : function(value)
	{
		if (typeof(value) == "string")
			return this._f2d(value);
		else 
			return this._a2d(value);
	},

	toAmerican : function(value)
	{
		if (typeof(value) == "string")
			return this._d2a(value);
		else 
			return this._f2a(value);
	},

	toFractional : function(value)
	{
		if (parseInt(value) != value)
			return this._d2f(value);
		else 
			return this._a2f(value);
	}
}

//====================================================================
ActiveBets.OddsConverter.registerClass("ActiveBets.OddsConverter");

ActiveBets.OddsConverter = new ActiveBets.OddsConverter();