// ASCII, Binary, Hex, Unicode Converter/Generator/Translator (Javascript) is Copyright 2010 TextMechanic.com All Rights Reserved

String.prototype.bincvt = function(){
if(document.unicvt.zero.value != '') var zero = document.unicvt.zero.value; else {zero = '0'; document.unicvt.zero.value = '0';}
if(document.unicvt.one.value != '') var one = document.unicvt.one.value; else {one = '1'; document.unicvt.one.value = '1';}
var tobin = this;
tobin = tobin.split('');
tobinout = new Array();
tobinlen = tobin.length;
var sec = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%&*()-_+={}[]|:;<>?,."/\\\' ';
var rep = ['01000001','01000010','01000011','01000100','01000101','01000110','01000111','01001000','01001001','01001010','01001011','01001100','01001101','01001110','01001111','01010000','01010001','01010010','01010011','01010100','01010101','01010110','01010111','01011000','01011001','01011010',
'01100001','01100010','01100011','01100100','01100101','01100110','01100111','01101000','01101001','01101010','01101011','01101100','01101101','01101110','01101111','01110000','01110001','01110010','01110011','01110100','01110101','01110110','01110111','01111000','01111001','01111010',
'00110000','00110001','00110010','00110011','00110100','00110101','00110110','00110111','00111000','00111001',
'00100001','01000000','00100011','00100100','00100101','00100110','00101010','00101000','00101001','00101101','01011111','00101011','00111101','01111011','01111101','01011011','01011101','01111100','00111010','00111011','00111100','00111110','00111111','00101100','00101110','00100010','00101111','01011100','00100111','00100000'];
var bindelimiterleft = document.unicvt.bindelimiterleft.value;
var bindelimiterright = document.unicvt.bindelimiterright.value;
for (var y = 0; y < tobinlen; y++){
tobinout[y] = bindelimiterleft + rep[sec.indexOf(tobin[y])].replace(/0/g,zero).replace(/1/g,one) + bindelimiterright; if (tobinout[y] == bindelimiterleft + 'undefined' + bindelimiterright) tobinout[y] = '';}
tobinout = tobinout.join('');
return tobinout;}

function ascii2all(){
var text = document.unicvt.ascii.value;
var bindelimiterleft = document.unicvt.bindelimiterleft.value;
var bindelimiterright = document.unicvt.bindelimiterright.value;
var hexdelimiterleft = document.unicvt.hexdelimiterleft.value;
var hexdelimiterright = document.unicvt.hexdelimiterright.value;
var unidelimiterleft = document.unicvt.unidelimiterleft.value;
var unidelimiterright = document.unicvt.unidelimiterright.value;
text = text.replace(/\r/g,'');
text = text.split('\n');
var linecnt = text.length;
var btextout = new Array();
var htextout = new Array();
var utextout = new Array();
for (var b = 0; b < linecnt; b++){
btextout[b] = text[b].bincvt();
var subhexuni = text[b].split('');
var subuni = new Array();
var subhex = new Array();
for (var hu = 0; hu < subhexuni.length; hu++){
var uchar = subhexuni[hu].charCodeAt();
subuni[hu] = unidelimiterleft + uchar + unidelimiterright;
subhex[hu] = hexdelimiterleft + uchar.toString(16) + hexdelimiterright;}
utextout[b] = subuni.join('');
htextout[b] = subhex.join('');}
var zero = document.unicvt.zero.value;
var one = document.unicvt.one.value;
var nl = '00001010';
btextout = btextout.join(bindelimiterleft + nl.replace(/0/g,zero).replace(/1/g,one) + bindelimiterright);
document.unicvt.binary.value = btextout;
utextout = utextout.join(unidelimiterleft + '10' + unidelimiterright);
document.unicvt.unicode.value = utextout;
htextout = htextout.join(hexdelimiterleft + '0a' + hexdelimiterright);
document.unicvt.hex.value = htextout;}

String.prototype.chunk = function(n){
if (typeof n=='undefined') n=2;
return this.match(RegExp('.{1,'+n+'}','g'));}

String.prototype.asccvt = function(){
if(document.unicvt.zero.value != '') var zero = document.unicvt.zero.value; else {zero = '0'; document.unicvt.zero.value = '0';}
if(document.unicvt.one.value != '') var one = document.unicvt.one.value; else {one = '1'; document.unicvt.one.value = '1';}
var spch = '\!\@\#\$\%\^\&\*\(\)\-\_\=\+\[\{\]\}\|\;\:\'\"\,\<\.\>\/\?\\';
if (spch.indexOf(zero) != '-1') zero = '\\' + zero;
if (spch.indexOf(one) != '-1') one = '\\' + one;
var toasc = this;
toasc = '~~' + toasc.replace(new RegExp(zero,'g'),'0').replace(new RegExp(one,'g'),'1');
var sec = '~~01000001~~01000010~~01000011~~01000100~~01000101~~01000110~~01000111~~01001000~~01001001~~01001010~~01001011~~01001100~~01001101~~01001110~~01001111~~01010000~~01010001~~01010010~~01010011~~01010100~~01010101~~01010110~~01010111~~01011000~~01011001~~01011010~~01100001~~01100010~~01100011~~01100100~~01100101~~01100110~~01100111~~01101000~~01101001~~01101010~~01101011~~01101100~~01101101~~01101110~~01101111~~01110000~~01110001~~01110010~~01110011~~01110100~~01110101~~01110110~~01110111~~01111000~~01111001~~01111010~~00110000~~00110001~~00110010~~00110011~~00110100~~00110101~~00110110~~00110111~~00111000~~00111001~~00100001~~01000000~~00100011~~00100100~~00100101~~00100110~~00101010~~00101000~~00101001~~00101101~~01011111~~00101011~~00111101~~01111011~~01111101~~01011011~~01011101~~01111100~~00111010~~00111011~~00111100~~00111110~~00111111~~00101100~~00101110~~00100010~~00101111~~01011100~~00100111~~00100000~~00001010';
var rep = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9','!','@','#','$','%','&','*','(',')','-','_','+','=','{','}','[',']','|',':',';','<','>','?',',','.','"','/','\\','\'',' ','\n'];
var toascout = rep[sec.indexOf(toasc)/10];
return toascout;}

function binary2ascii(){
var text = document.unicvt.binary.value;
var bindelimiterleft = document.unicvt.bindelimiterleft.value;
var bindelimiterright = document.unicvt.bindelimiterright.value;
text = text.replace(/\r/g,'');
text = text.replace(/\n/g,'');
text = text.replace(bindelimiterleft,'');
text = text.split('').reverse().join('').replace(bindelimiterright,'').split('').reverse().join('');
var delimiter = bindelimiterright + bindelimiterleft;
if (delimiter == '') {text = text.chunk(8).join(' '); delimiter = ' ';}
text = text.split(delimiter);
var textout = new Array();
var cnt = text.length;
for (var x = 0; x < cnt; x++){
textout[x] = text[x].asccvt();}
textout = textout.join('');
document.unicvt.ascii.value = textout;
document.unicvt.hex.value = '';
document.unicvt.unicode.value = '';}

function hex2ascii(){
var text = document.unicvt.hex.value;
var hexdelimiterleft = document.unicvt.hexdelimiterleft.value;
var hexdelimiterright = document.unicvt.hexdelimiterright.value;
text = text.replace(/\r/g,'');
text = text.replace(/\n/g,'');
text = text.replace(hexdelimiterleft,'');
text = text.split('').reverse().join('').replace(hexdelimiterright,'').split('').reverse().join('');
var delimiter = hexdelimiterright + hexdelimiterleft;
if (delimiter == '') {text = text.chunk(2).join(' '); delimiter = ' ';}
text = text.split(delimiter);
var textout = new Array();
var cnt = text.length;
for (var x = 0; x < cnt; x++){
if ('%' + text[x] == '%0a') var hexc = '\n'; else hexc = unescape('%' + text[x]);
textout[x] = hexc;}
textout = textout.join('');
document.unicvt.ascii.value = textout;
document.unicvt.binary.value = '';
document.unicvt.unicode.value = '';}

function uni2ascii(){
var text = document.unicvt.unicode.value;
var unidelimiterleft = document.unicvt.unidelimiterleft.value;
var unidelimiterright = document.unicvt.unidelimiterright.value;
text = text.replace(/\r/g,'');
text = text.replace(/\n/g,'');
text = text.replace(unidelimiterleft,'');
text = text.split('').reverse().join('').replace(unidelimiterright,'').split('').reverse().join('');
var delimiter = unidelimiterright + unidelimiterleft;
text = text.split(delimiter);
var textout = new Array();
var cnt = text.length;
for (var x = 0; x < cnt; x++){
textout[x] = String.fromCharCode(parseInt(text[x]));}
textout = textout.join('');
document.unicvt.ascii.value = textout;
document.unicvt.binary.value = '';
document.unicvt.hex.value = '';}

function SelectAll(id) {
document.getElementById(id).focus();
document.getElementById(id).select();}