function brstrip(d){
	var brs = document.getElementById(d).getElementsByTagName("br");
	for(var i=brs.length-1;i>=0;i--) {
		var elem = brs[i];
		elem.parentNode.removeChild(elem);
	}
}
function autoresizetextarea(txtBox)
{
	var nCols = txtBox.cols;
	var sVal = txtBox.value;
	var nVal = sVal.length;
	var nRowCnt = 1;
	var i = 0;
	for (i=0;i<nVal;i++)
		{ if (sVal.charAt(i).charCodeAt(0) == 13 || sVal.charAt(i).charCodeAt(0) == 10) { nRowCnt +=1; } }
	if (nRowCnt < (nVal / nCols)) 
		{ nRowCnt = 1 + (nVal / nCols); }
	if(nRowCnt < 10) 
		{ nRowCnt = 10; }
	txtBox.rows = nRowCnt;
} 
var ln;
ln = 0;
function showhideln(){  
	if(ln === 0){            
		document.getElementById('normaltext').style.display='none'; 
		document.getElementById('numlist').style.display = 'block';
		ln = 1;
	}
	else if(ln == 1){
		document.getElementById('normaltext').style.display='block'; 
		document.getElementById('numlist').style.display = 'none';
		ln = 0;
	}
}               
function de(sel){
        if(sel.value == "blowfishdec" ){
		document.getElementById('keybox').style.display = "block";
                document.getElementById('changedtext').style.display = "block";
                key = document.getElementById('keyf').value;
                if (window[sel.value](key,document.getElementById("normaltext").innerHTML,document.getElementById("normaltext").innerHTML))
                        {window[sel.value](key,document.getElementById("normaltext").innerHTML,document.getElementById("normaltext").innerHTML);}
        }               
        else {          
                document.getElementById('keybox').style.display = "none";
                document.getElementById('changedtext').style.display = "block";
                if (window[sel.value](document.getElementById("normaltext"), document.getElementById("normaltext")))
                        {window[sel.value](document.getElementById("normaltext"), document.getElementById("normaltext"));}
        }
}
function de2(sel){
        if(sel.value == "blowfishenc" ){
		document.getElementById('keybox').style.display = "block";
                document.getElementById('changedtextdiv').style.display = "block";
                key = document.getElementById('keyf').value;
                if (window[sel.value](key,document.getElementById("normaltext").innerHTML,document.getElementById("normaltext").innerHTML))
                        {window[sel.value](key,document.getElementById("normaltext").innerHTML,document.getElementById("normaltext").innerHTML);}
        }               
        else {
                document.getElementById('keybox').style.display = "none";
                document.getElementById('changedtextdiv').style.display = "none";
                if (window[sel.value](document.getElementById("normaltext"), document.getElementById("normaltext")))
                        {window[sel.value](document.getElementById("normaltext"), document.getElementById("normaltext"));}
        }
}
function stringtoascii(txt){
	var slen = txt.value.length;
	var s = "";
	var i = 0;
	for ( i = 0; i < slen; i++ ){
		s += txt.value.charAt(i).charCodeAt(0) + " ";	
	}
	document.getElementById("changedtext").value = s;
	autoresizetextarea(document.getElementById("changedtext"));
}

function asciitostring(txt){
	var rstr = "";
	vals = txt.value.split(' ')
	var vlen = vals.length;
	var i = 0;
	for(i = 0; i < vlen; i++){
		rstr += String.fromCharCode(vals[i]);
	}
	document.getElementById("changedtext").value = rstr;
	autoresizetextarea(document.getElementById("changedtext"));
}

function rot13(txt, paste){
	if(!paste){
		var slen=txt.value.length ;
		var s=new String('');
		var t=new String('');
		var b;
		if(slen > 0){
     			for(i=0; i<slen; i++){
       				b=txt.value.charCodeAt(i);
				if(((b>64) && (b<78)) || ((b>96) && (b<110))){
					b=b+13;
				}
				else {
					if(((b>77) && (b<91)) || ((b>109) && (b<123))){ 
						b=b-13;
					}
				}
				t=String.fromCharCode(b) ;
				s=s.concat(t) ;
			}
   		}
	}
	else {
		brstrip("normaltext");
		var slen=paste.innerHTML.length;
		var s=new String('');
		var t=new String('');
		var b;
		if(slen > 0){
     			for(i=0; i<slen; i++){
       				b=paste.innerHTML.charCodeAt(i);
				if(((b>64) && (b<78)) || ((b>96) && (b<110))){
					b=b+13;
				}
				else {
					if(((b>77) && (b<91)) || ((b>109) && (b<123))){ 
						b=b-13;
					}
				}
				t=String.fromCharCode(b) ;
				s=s.concat(t) ;
			}
   		}
	}
	document.getElementById("changedtext").value = s;
	autoresizetextarea(document.getElementById("changedtext"));
}

function sha1(txt){
	document.getElementById("changedtext").value = hex_sha1(txt.value);
	autoresizetextarea(document.getElementById("changedtext"));
}
function hmacsha1(key,txt){
	document.getElementById("changedtext").value = hex_hmac_sha1(key,txt.value);
	autoresizetextarea(document.getElementById("changedtext"));
}

function md5(txt){
	document.getElementById("changedtext").value = hex_md5(txt.value);
	autoresizetextarea(document.getElementById("changedtext"));
}
function hmacmd5(key,txt){
	document.getElementById("changedtext").value = hex_hmac_md5(key,txt.value);
	autoresizetextarea(document.getElementById("changedtext"));
}

function md4(txt){
	document.getElementById("changedtext").value = hex_md4(txt.value);
	autoresizetextarea(document.getElementById("changedtext"));
}
function hmacmd4(key,txt){
	document.getElementById("changedtext").value = hex_hmac_md4(key,txt.value);
	autoresizetextarea(document.getElementById("changedtext"));
}
function reversetext(txt,paste){
	if(!paste){
		document.getElementById("changedtext").value = txt.value.split('').reverse().join('');
		autoresizetextarea(document.getElementById("changedtext"));
	}
	else {
		brstrip("normaltext");
		document.getElementById("changedtext").value = paste.innerHTML.split('').reverse().join('');
		autoresizetextarea(document.getElementById("changedtext"));
	}
}
function stripfirstword(txt){
	vals = txt.value.split("\n");
	var slen = vals.length;
	rstr = "";
	for(i=0; i<slen; i++){
		valsb = vals[i].split(' ');
		var slenb = valsb.length;
		for(y=1; y<slenb; y++){
			rstr += valsb[y];
			rstr += " ";
		}
		rstr += "\n";
	}
	document.getElementById("changedtext").value = rstr;
	autoresizetextarea(document.getElementById("changedtext"));
}
function stripnewlines(txt){
	vals = txt.value.split("\n");
	var slen = vals.length;
	rstr = "";
	for(i=0; i<slen; i++){
		if(vals[i] != "\n" && vals[i] != " "){
			rstr += vals[i];
			rstr += " ";
		}
	}
	document.getElementById("changedtext").value = rstr;
	autoresizetextarea(document.getElementById("changedtext"));
}
function stripblanklines(txt){
	vals = txt.value.split("\n");
	var slen = vals.length;
	rstr = "";
	for(i=0; i<slen; i++){
		if(vals[i] != "" && vals[i] != "\n" && vals[i] != " "){
			rstr += vals[i];
			rstr += "\n";
		}
	}
	document.getElementById("changedtext").value = rstr;
	autoresizetextarea(document.getElementById("changedtext"));
}
function numberlist(txt){
	vals = txt.value.split("\n");
	var slen = vals.length;
	rstr = "";
	for(i=0; i<slen; i++){
		rstr += (i + 1) + " ";
		rstr += vals[i];
		rstr += "\n";
	}
	document.getElementById("changedtext").value = rstr;
	autoresizetextarea(document.getElementById("changedtext"));
}
function urlencode(txt){
	var unreserved = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_.!~*'()";
	var reserved = ";/?:@&=+$,";
	var escape = "%";
	var hex = "0123456789ABCDEFabcdef";
	var slen = txt.value.length;
	var rstr = "";
	var i = 0;
	for(i = 0; i < slen; i++){
		var c = txt.value.charAt(i);
		if(c == " ") 
			{ rstr += "+"; } //not %20, damn javascript functions
		else if(unreserved.indexOf(c) != -1){
			rstr += c;
		}
		else {
			var encchar = c.charCodeAt(0);
			if(encchar > 255){
				document.getElementById("changedtext").value = "Error encoding '"+ c +"' (8 bit only encoding - Punycode / IDN encoding coming soon)";
				return;
			}
			else {
				rstr += escape;
				rstr += hex.charAt((encchar >> 4) & 0xF);
				rstr += hex.charAt(encchar & 0xF);
			}
		}
	}
	document.getElementById("changedtext").value = rstr;
	autoresizetextarea(document.getElementById("changedtext"));
}

function urldecode(txt){
	var unreserved = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_.!~*'()";
	var reserved = ";/?:@&=+$,";
	var escape = "%";
	var hex = "0123456789ABCDEFabcdef";
	var slen = txt.value.length;
	var rstr = "";
	var i = 0;
	for(i = 0; i < slen; i++){
		var c = txt.value.charAt(i);
		if(c == "+"){
			rstr += " ";
		} else if (c == "%") {
			rstr += unescape(txt.value.substr(i,3));
			i = i + 2;
		} else {
			rstr += c;
		}
	}
	document.getElementById("changedtext").value = rstr;
	autoresizetextarea(document.getElementById("changedtext"));
}

function blowfishenc(key,txt){
	var bf = new Blowfish(key);
	var ciphertext = bf.encrypt(txt.value);
	document.getElementById("changedtext").value = ciphertext;
	autoresizetextarea(document.getElementById("changedtext"));
	delete ciphertext;
	delete bf;
}

function blowfishdec(key,txt,paste){
	if(!paste){
		var bf = new Blowfish(key);
		var plaintext = bf.decrypt(txt.value);
		document.getElementById("changedtext").value = plaintext;
		autoresizetextarea(document.getElementById("changedtext"));
		delete bf;
		delete plaintext;
	}
	else {
		brstrip("normaltext");
		var bf = new Blowfish(key);
		var plaintext = bf.decrypt(paste);
		document.getElementById("changedtext").value = plaintext;
		autoresizetextarea(document.getElementById("changedtext"));
		delete bf;
		delete plaintext;
	}
}

function base64encode(txt){
	document.getElementById("changedtext").value = encode64(txt.value);
	autoresizetextarea(document.getElementById("changedtext"));
}

function base64decode(txt){
	document.getElementById("changedtext").value = decode64(txt.value);
	autoresizetextarea(document.getElementById("changedtext"));
}
function alphasortnewline(txt){
	vals = txt.value.split("\n");
	vals.sort();
	var slen = vals.length;
	rstr = '';
	for(i=0; i<slen; i++){
		rstr += vals[i];
		rstr += "\n";
	}
	document.getElementById("changedtext").value = rstr;
	autoresizetextarea(document.getElementById("changedtext"));
}
function alphasortcomma(txt){
	vals = txt.value.split(",");
	vals.sort();
	var slen = vals.length;
	rstr = '';
	for(i=0; i<slen; i++){
		rstr += vals[i];
		rstr += ",";
	}
	document.getElementById("changedtext").value = rstr;
	autoresizetextarea(document.getElementById("changedtext"));
}

Array.prototype.getUniqueValues = function () {
	var hash = new Object();
	for (j = 0; j < this.length; j++) 
		{ hash[this[j]] = true; }
	var array = new Array();
	for (value in hash) 
		{ array.push(value); }
	return array;
}

function uniquewords(txt){
	words = txt.value.replace(new RegExp(/[^a-z0-9]+/ig), ' ');
	vals = words.split(" ");
	vals.sort();
	valsb = vals.getUniqueValues();
	var slen = valsb.length;
	rstr = '';
	for(i=0; i<slen; i++){
		rstr += valsb[i];
		rstr += "\n";
	}
	document.getElementById("changedtext").value = rstr
	autoresizetextarea(document.getElementById("changedtext"));
}

function uniquewordsnocase(txt){
	words = txt.value.replace(new RegExp(/[^a-z0-9]+/ig), ' ');
	vals = words.split(" ");
	valsa = vals.getUniqueValues();
	var slen = valsa.length;
	for(i=0; i<slen; i++){
		valsa[i] = String(valsa[i]).toLowerCase();
	}
	valsb = valsa.getUniqueValues();
	var slen = valsb.length;
	rstr = '';
	for(i=0; i<slen; i++){
		rstr += valsb[i];
		rstr += "\n";
	}
	document.getElementById("changedtext").value = rstr
	autoresizetextarea(document.getElementById("changedtext"));
}
