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 {
			var sign = (s.substring(0,1) ==  '-' ? -1 : 1);
			var denominator = Math.pow(2, Math.abs(uc) + 2);
			var fracsize = String(denominator).length;
			var numerstart = s.length - fracsize;
			var wholeend = numerstart;
			var whole = 0;
			if (s.length >= fracsize + 1) {
				if (s.substring(wholeend - 1, wholeend) == '-')
					wholeend--;
				whole = (s.substring(0, wholeend)) * 1;
			}
			var numerator = (s.substring(numerstart, s.length)) * 1;
			return whole + ((numerator / denominator)*sign);
		}
	}
};
