/**
 * 
 * NUMERIC CONVERTER FUNCTIONS
 *
 * @author 	Claudio Magni
 * @date		2007/11/30
 * version 	1.0
 *
 */

function isNum(num)
{
	if (isNaN(parseInt(num))) {
		return false;
	}
	return true;
}

function isHexNum(num)
{
	args = num;
	last = args.substring(args.length-1,args.length) ;
	lc = last.toLowerCase()
	if ( isNum(last) || lc =='a' || lc =='b' || lc =='c' || lc =='d' || lc =='e' || lc =='f') {
		return true;
	}
	return false;
}

function getHexNum(num)
{
	ar = new Array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
	if (num > 15) {
		return num;
	}
	else {
		red = ar[num];
		return red;
	}
}

function deciToBin(arg)
{
	res = 999;
	args = arg;
	
	while (args > 1) {
		arg1 = parseInt(args / 2);
		arg2 = args % 2;
		args = arg1;

		if (res == 999) {
			res = arg2.toString();
		} else {
			res = arg2.toString() + res.toString();
		}
	}
	
	if (args == 1 && res != 999) {
		res = args.toString() + res.toString();
	} else if (args == 0 && res == 999) {
		res = 0;
	} else if (res == 999) {
		res = 1;
	}

	// Maybe I could also always convert in group of 4 digits

	return res;
}

function deciToHex(arg)
{
	res = 999;
	args = arg;
	
	while (args > 15) {
		arg1 = parseInt (args / 16);
		arg2 = args % 16;
		arg2 = getHexNum(arg2);
		args = arg1;

		if (res == 999) {
			res = arg2.toString();
		} else {
			res = arg2.toString() + res.toString();
		}
	}
	
	if (args < 16 && res != 999) {
		def = getHexNum(args);
		res = def + res.toString();
	} else if(res == 999) {
	
		if (args < 16) {
			res = getHexNum(args);
		} else {
			res = 1;
		}
	}

	return res;
}

function hexToDeci(num)
{
	res = 999;
	args = num;

	k = args.length - 1;
	
	for (var i=0; i<args.length; i++) {
	
	 	thisnum = args.substring(i, i+1);
	 	var resd = Math.pow(16, k);
	 	
		if (thisnum == 'a') thisnum = 10;
		else if(thisnum == 'b') thisnum = 11;
		else if(thisnum == 'c') thisnum = 12;
		else if(thisnum == 'd') thisnum = 13;
		else if(thisnum == 'e') thisnum = 14;
		else if(thisnum == 'f') thisnum = 15;
		
		resd = resd * thisnum;
		k = k - 1;
		
		if (res == 999) {
			res = resd.toString();
		}
		else {
			res = parseInt(res) + parseInt(resd);
		}
	}

	return res;
}

function binToDeci(num)
{
	res = 999;
	args = num;
	last = args.substring(args.length-1, args.length);
	field = document.getElementById("second");

	if (last != 0 && last != 1) {
		field.bin.value = args.substring(0, args.length-1);
		res = 1;
	} else {
		k = args.length - 1;
		
		for (var i=0; i<args.length; i++) {
			thisnum = args.substring(i, i+1);
			var resd = Math.pow(2, k);
			resd = resd * thisnum;
			k = k - 1;
			
		 	if (res == 999) {
				res = resd.toString();
			} else {
				res = parseInt(res) + parseInt(resd);
			}
		}
	}

	return res;
}

function change(name)
{
	var input = name.value;
	var form = document.getElementById("first");
	
	if (isNum(input)) {
	
		var result = deciToBin(input);
		form.deciBin.value = result;

		result = deciToHex(input);
		form.deciHex.value = result;
	} else {
		form.deci.value = input.substring(0, input.length - 1);
	}
}

function change2(name)
{
	var input = name.value;
	var form = document.getElementById("second");
	
	if (isNum(input)) {
		var result = binToDeci(input);
		form.binDeci.value = result;

		result = deciToHex(result);
		form.binHex.value = result;
	} else {
		form.bin.value = input.substring(0, input.length - 1);
	}
}

function change3(name)
{
	var input = name.value;
	var form = document.getElementById("third");
		
	if (isHexNum(input)) {
		input = input.toLowerCase();
		var result = hexToDeci(input);
		form.hexDeci.value = result;

		result = deciToBin(result);
		form.hexBin.value = result;
	} else {
		form.hex.value = input.substring(0, input.length - 1);
	}
}




