var quotelib = {
	BaseCode2UnitCode : function(bc) {
		switch(bc) {
			case '2': return -1;
			case '3': return -2;
			case '4': return -3;
			case '5': return -4;
			case '6': return -5;
			case '7': return -6;
			case '8': return 0;
			case '9': return 1;
			case 'A': return 2;
			case 'B': return 3;
			case 'C': return 4;
			case 'D': return 5;
			case 'E': return 6;
			case 'F': return 7;
			default: return 0;
		}
	},

	Decimal2String : function(val, bc, display) {
		var uc = quotelib.BaseCode2UnitCode(bc);

		var sign = '';
		if (val < 0)
			sign = '-';

		if (uc >= 0) {			
			var s = (new Number(val)).toFixed(uc);

			if (display.search(/INTEGER/) > -1) {
				s = s.replace(/[^0-9]/g, '');
				s = s.replace(/^0+/g, '');
				if (s.length == 0)
					s = '0';
				s = sign + s;
			}
	
			return s;
		}


		if (display.search(/DECIMAL/) > -1) {
			var n = new Number(val);

			switch (bc) {
				case '2': return n.toFixed(3);
				case '3': return n.toFixed(4);
				case '4': return n.toFixed(5);
				case '5': return n.toFixed(6);
				case '6': return n.toFixed(7);
				case '7': return n.toFixed(8);
				default: return n;
			}
		}



		val = Math.abs(val);
		var whole = Math.floor(val);
		var numerator = val - whole;

		var digits = 0;

		if (uc == -1) {
			numerator *= 8;
			digits = 1;
		}
		else if (uc == -2) {
			numerator *= 16;
			digits = 2;
		}
		else if (uc == -3) {
			numerator *= 32;
			digits = 2;
		}
		else if (uc == -4) {
			if (display.substring(display.length - 2, display.length) == '64') {
				numerator *= 320;
				digits = 3;
			}
			else {
				numerator *= 64;
				digits = 2;
			}
		}
		else if (uc == -5) {
			numerator *= 320;
			digits = 3;
		}
		else if (uc == -6) {
			numerator *= 256;
			digits = 3;
		}


		var s = 'xx0000000000' + numerator;				
		var sfract = s.substring(s.length - digits, s.length);

		if (display.search(/INTEGER/) > -1) {
			if (whole == 0)
				return (new String()).concat(sign, sfract);
			else
				return (new String()).concat(sign, whole, sfract);

		}
		else
			return (new String()).concat(sign, whole, '-', sfract);
	},

	FormatPrice : function(s, bc, display) {
		if (!bc)
			return s;

		var d = quotelib.String2Decimal(s, bc);
		return quotelib.Decimal2String(d, bc, display);
	},

	String2Decimal : function(s, bc) {
		s = s.replace(/,/, '');
		var uc = quotelib.BaseCode2UnitCode(bc);
		if (uc >= 0) {
			var ival = s * 1;
			return ival / Math.pow(10, uc);
		} else {
			// Rewrote to simplify conditional logic and accept prices with '-' separator
			// already in the price 
			// JJ - 2/8/08
			var sign = 1;
			var divisor = Math.pow(2, Math.abs(uc) + 2);
			var fracsize = String(divisor).length;
			var denomstart = s.length - fracsize;
			var numerend = denomstart;
			if (s.substring(numerend - 1, numerend) == '-')
				numerend--;
			var numerator = (s.substring(0, numerend));
			if (numerator.substring(0,1) ==  '-')
				sign = -1;
			numerator = numerator * 1;
			var denominator = (s.substring(denomstart, s.length)) * 1;
			return numerator + ((denominator / divisor)*sign);
		}
	}
};
