/* return a string represent the base10 value in base2 
   return : rType = VDW_STRING : string
                    VDW_BITARRAY : array
 */

VDW_STRING = 0;
VDW_BITARRAY = 1;

function B10ToB2(num,rType) 
{
	var bit16=0, bit15=0, bit14=0, bit13=0, bit12=0, bit11=0, bit10=0, bit9=0, bit8=0, bit7=0, bit6=0, bit5=0, bit4=0, bit3=0, bit2=0, bit1=0;
   if (num > 65535) 
   { 
      return ("overflow!") 
   }
	if (num & 32768) { bit16 = 1 }
	if (num & 16384) { bit15 = 1 }
	if (num & 8192) { bit14 = 1 }
	if (num & 4096) { bit13 = 1 }
	if (num & 2048) { bit12 = 1 }
	if (num & 1024) { bit11 = 1 }
	if (num & 512) { bit10 = 1 }
	if (num & 256) { bit9 = 1 }
	if (num & 128) { bit8 = 1 }
	if (num & 64) { bit7 = 1 }
	if (num & 32) { bit6 = 1 }
	if (num & 16) { bit5 = 1 }
	if (num & 8) { bit4 = 1 }
	if (num & 4) { bit3 = 1 }
	if (num & 2) { bit2 = 1 }
	if (num & 1) { bit1 = 1 }
   
   if(rType && rType==VDW_BITARRAY)
   {
      return new Array(bit1,bit2,bit3,bit4,bit5,bit6,bit7,bit8,bit9,bit10,bit11,bit12,bit13,bit14,bit15,bit16);
   }
   else
   	return (""+bit16+bit15+bit14+bit13+bit12+bit11+bit10+bit9+bit8+bit7+bit6+bit5+bit4+bit3+bit2+bit1);
}


/* return a string represent the base16 value in base10 */
function B16ToB10(num) 
{
	while (num.length < 4) 
   {
		num = "0" + num;
	}
   
   return (eval(getnum(num.substring(3,4))) + eval(getnum(num.substring(2,3))) * 16 + eval(getnum(num.substring(1,2))) * 256 + eval(getnum(num.substring(0,1))) * 4096);
}

/* return a string represent the base2 value in base10 */
function B2ToB10(num)
{
	var decimal = 0;
	while (num.length < 16) 
   {
	 	num = "0" + num;
	}
   
	if (num.substring(15,16) == "1")  { decimal = decimal + 1     ;}
	if (num.substring(14,15) == "1")  { decimal = decimal + 2     ;}
	if (num.substring(13,14) == "1")  { decimal = decimal + 4     ;}
	if (num.substring(12,13) == "1")  { decimal = decimal + 8     ;}
	if (num.substring(11,12) == "1")  { decimal = decimal + 16    ;}
	if (num.substring(10,11) == "1")  { decimal = decimal + 32    ;}
	if (num.substring(9,10) == "1")   { decimal = decimal + 64    ;}
	if (num.substring(8,9) == "1")    { decimal = decimal + 128   ;}
	if (num.substring(7,8) == "1")    { decimal = decimal + 256   ;}
	if (num.substring(6,7) == "1")    { decimal = decimal + 512   ;}
	if (num.substring(5,6) == "1")    { decimal = decimal + 1024  ;}
	if (num.substring(4,5) == "1")    { decimal = decimal + 2048  ;}
	if (num.substring(3,4) == "1")    { decimal = decimal + 4096  ;}
	if (num.substring(2,3) == "1")    { decimal = decimal + 8192  ;}
	if (num.substring(1,2) == "1")    { decimal = decimal + 16384 ;}
	if (num.substring(0,1) == "1")    { decimal = decimal + 32768 ;}
   return(decimal);
}

function B10ToB16(num)
{
   var b10 = new VDWDecimal(num);
   return b10.toHex()
}

function VDWDecimal(dec)
{
	this._dec=dec;
	this.toBinary=function() { return this._dec.toString(2); }
	this.toHex=function() { return this._dec.toString(16).toUpperCase(); }
	this.toOctal=function() { return this._dec.toString(8); }
   
   this._typeName = "VDWDecimal";
}

function VDWBinary(bin)
{
	this._bin=bin;
	this.toDecimal=function() { return parseInt(this._bin, 2); }
	this.toHex=function() { return this.toDecimal().toString(16).toUpperCase(); }
	this.toOctal=function() { return this.toDecimal().toString(8); }

   this._typeName = "VDWBinary";
   
}

function VDWHexadecimal(hex)
{
	this._hex=hex;
	this.toDecimal=function() { return parseInt(this._hex, 16); }
	this.toBinary=function() { return this.toDecimal().toString(2); }
	this.toOctal=function() { return this.toDecimal().toString(8); }

   this._typeName = "VDWHexadecimal";
   
}

function VDWDOctal(oct)
{
	this._oct=oct;
	this.toDecimal=function() { return parseInt(this._oct, 8); }
	this.toBinary=function() { return this.toDecimal().toString(2); }
	this.toHex=function() { return this.toDecimal().toString(16).toUpperCase(); }

   this._typeName = "VDWOctal";
   
}

function getnum(letter) 
{
	if (letter <= "9") 
   {
		return letter;
	} 
	else
	{
		if ((letter == "a") || (letter == "A")) { return 10; }
		if ((letter == "b") || (letter == "B")) { return 11; }
		if ((letter == "c") || (letter == "C")) { return 12; }
		if ((letter == "d") || (letter == "D")) { return 13; }
		if ((letter == "e") || (letter == "E")) { return 14; }
		if ((letter == "f") || (letter == "F")) { return 15; }
		return 0;
	}
}


