/*** Furcadia Utilities by IceDragon of QuickFox.org ***/
var base95  = new Object;
var base220 = new Object;

/** Base95 Numeric Conversion **/
base95.atoi = function( b95num )
{
	var b10num = 0;
	var mult = 1;

	for( var i = b95num.length; i > 0; i-- )
	{
		b10num += ( b95num.charCodeAt( i-1 ) - 32 ) * mult;
		mult *= 95;
	}
	
	return b10num;
}


base95.itoa = function( b10num, size )
{
	var b95num = '';

	if( typeof(size) == 'undefined' )
		size = 0;

	while( b10num > 0 )
	{
		b95num = String.fromCharCode( ( b10num % 95 ) + 32 ) + b95num;
		b10num = Math.floor( b10num / 95 );
	}
	
	if( size > 0 )
	{
		var fillWith = ( b95num.length < size ) ? ' ' : '~';
		var fillSize = size - b95num.length;
		
		if( fillSize < 0 )
		{
			b95num = '';
			fillSize = size;
		}
		
		while( fillSize > 0 )
		{
			b95num = fillWith + b95num;
			fillSize--;
		}
	}
	
	return b95num;
}


base95.valid = function( b95num )
{
	var chr;
	
	for( var i = 0; i < b95num.length; i++ )
	{
		chr = b95num.charCodeAt( i );
		if( chr < 32 || chr > 126 )
			return false;
	}
	
	return ( b95num.length < 1 ) ? false : true;
}


/** Base220 Numeric Conversion **/
base220.atoi = function( b220num )
{
	var b10num = 0;
	var mult = 1;
	
	for( var i = 0; i < b220num.length; i++ )
	{
		b10num += ( b220num.charCodeAt( i ) - 35 ) * mult;
		mult *= 220;
	}
	
	return b10num;
}


base220.itoa = function( b10num, size )
{
	var b220num = '';
	
	if( typeof(size) == 'undefined' )
		size = 0;
	
	while( b10num > 0 )
	{
		b220num += String.fromCharCode( ( b10num % 220 ) + 35 );
		b10num = Math.floor( b10num / 220 );
	}
	
	if( size > 0 )
	{
		var fillWith = ( b220num.length < size ) ? '#' : String.fromCharCode( 254 );
		var fillSize = size - b220num.length;
		
		if( fillSize < 0 )
		{
			b220num = '';
			fillSize = size;
		}
		
		while( fillSize > 0 )
		{
			b220num += fillWith;
			fillSize -= 1;
		}
	}
	
	return b220num;
}


base220.valid = function( b220num )
{
	var chr;
	
	for( var i = 0; i < b220num.length; i++ )
	{
		chr = b220num.charCodeAt( i );
		if( chr < 35 || chr > 254 )
			return false;
	}
	
	return ( b220num.length < 1 ) ? false : true;
}
