
function EncryptPlain(plain, key, algo, keysize, iv)
{
	if (algo == "AES")
	{
		alert("AES is not currently supported");
		//return encodeBase64(AESEncryptCtr(plain, key, keysize)); 
	}
	else if (algo == "DES" || algo == "3DES")
	{
		return stringToHex2(des(key, C2E(plain), 1, iv ? 1 : 0, iv));
	}
	
	return "";
}

function DecryptCipher(cipher, key, algo, keysize, iv)
{
	if (algo == "AES")
	{
		alert("AES is not currently supported");
		//return AESDecryptCtr(decodeBase64(cipher), key, keysize); 
	}
	else if (algo == "DES" || algo == "3DES")
	{
		return E2C(des(key, hexToString(cipher), 0, iv ? 1 : 0, iv));
	}
	
	return "";
}


function stringToHex2 (s) {
  var r = ""; //"0x";
  var hexes = new Array ("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f");
  for (var i=0; i<s.length; i++) {r += hexes [s.charCodeAt(i) >> 4] + hexes [s.charCodeAt(i) & 0xf];}
  return r;
}

function C2E (str) {
    str = str.replace(/&/g, '&#38;');
    str = str.replace(/'/g, '&#39;');
    str = str.replace(/"/g, '&#34;');
    str = str.replace(/\\/g, '&#92;');
    var acc = '';
    for (var i = 0; i < str.length; i++) {
        if (str.charCodeAt(i) > 31 && str.charCodeAt(i) < 127) acc += str.charAt(i) 
        else acc += '&#' + str.charCodeAt(i) + ';';
    }
    return acc;
}

function E2C (str) {
    str = str.replace(/(&#[0-9]+;)/g, '\n$1\n');
    str = str.replace(/\n\n/g, '\n');
    spl = str.split('\n');
    for (var i = 0; i < spl.length; i++) {
        if (spl[i].charAt(0) == '&') {
            spl[i] = spl[i].replace(/&#([0-9]+);/g, '$1');
            spl[i] = String.fromCharCode(spl[i]);
        }
    } 
    str = spl.join('');
    return str;
}


