	  
//    // public method for encoding
//    function Encrypt(input) {
//        var output = "";
//        var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
//        var i = 0;
//		//var KeyChar = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
//		var KeyChar = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
//	
//        input = utf8_encode(input);
//
//        while (i < input.length) {
//
//            chr1 = input.charCodeAt(i++);
//            chr2 = input.charCodeAt(i++);
//            chr3 = input.charCodeAt(i++);
//
//            enc1 = chr1 >> 2;
//            enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
//            enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
//            enc4 = chr3 & 63;
//
//            if (isNaN(chr2)) {
//                enc3 = enc4 = 64;
//            } else if (isNaN(chr3)) {
//                enc4 = 64;
//            }
//
//            output = output +
//            KeyChar.charAt(enc1) + KeyChar.charAt(enc2) +
//            KeyChar.charAt(enc3) + KeyChar.charAt(enc4);
//
//        }
//
//        return output;
//    }
//    
//     // private method for UTF-8 encoding
//     function utf8_encode(string) 
//     {
//        string = string.replace(/\r\n/g,"\n");
//        var utftext = "";
//
//        for (var n = 0; n < string.length; n++) {
//
//            var c = string.charCodeAt(n);
//
//            if (c < 128) {
//                utftext += String.fromCharCode(c);
//            }
//            else if((c > 127) && (c < 2048)) {
//                utftext += String.fromCharCode((c >> 6) | 192);
//                utftext += String.fromCharCode((c & 63) | 128);
//            }
//            else {
//                utftext += String.fromCharCode((c >> 12) | 224);
//                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
//                utftext += String.fromCharCode((c & 63) | 128);
//            }
//
//        }
//
//        return utftext;
//    }
    
    
var m_lOnBits=new Array(30);
var m_l2Power=new Array(30);
var m_bytOnBits=new Array(7);
var m_byt2Power=new Array(7);

var m_InCo=new Array(3);

var m_fbsub=new Array(255);
var m_rbsub=new Array(255);
var m_ptab=new Array(255);
var m_ltab=new Array(255);
var m_ftable=new Array(255);
var m_rtable=new Array(255);
var m_rco=new Array(29);

var m_Nk;
var m_Nb;
var m_Nr;
var m_fi=new Array(23);
var m_ri=new Array(23);
var m_fkey=new Array(119);
var m_rkey=new Array(119);

m_InCo[0] = 11;
m_InCo[1] = 13;
m_InCo[2] = 9;
m_InCo[3] = 14;
 
m_bytOnBits[0] = 1;
m_bytOnBits[1] = 3;
m_bytOnBits[2] = 7;
m_bytOnBits[3] = 15;
m_bytOnBits[4] = 31;
m_bytOnBits[5] = 63;
m_bytOnBits[6] = 127;
m_bytOnBits[7] = 255;
          
m_byt2Power[0] = 1;
m_byt2Power[1] = 2;
m_byt2Power[2] = 4;
m_byt2Power[3] = 8;
m_byt2Power[4] = 16;
m_byt2Power[5] = 32;
m_byt2Power[6] = 64;
m_byt2Power[7] = 128;
    
m_lOnBits[0] = 1;
m_lOnBits[1] = 3;
m_lOnBits[2] = 7;
m_lOnBits[3] = 15;
m_lOnBits[4] = 31;
m_lOnBits[5] = 63;
m_lOnBits[6] = 127;
m_lOnBits[7] = 255;
m_lOnBits[8] = 511;
m_lOnBits[9] = 1023;
m_lOnBits[10] = 2047;
m_lOnBits[11] = 4095;
m_lOnBits[12] = 8191;
m_lOnBits[13] = 16383;
m_lOnBits[14] = 32767;
m_lOnBits[15] = 65535;
m_lOnBits[16] = 131071;
m_lOnBits[17] = 262143;
m_lOnBits[18] = 524287;
m_lOnBits[19] = 1048575;
m_lOnBits[20] = 2097151;
m_lOnBits[21] = 4194303;
m_lOnBits[22] = 8388607;
m_lOnBits[23] = 16777215;
m_lOnBits[24] = 33554431;
m_lOnBits[25] = 67108863;
m_lOnBits[26] = 134217727;
m_lOnBits[27] = 268435455;
m_lOnBits[28] = 536870911;
m_lOnBits[29] = 1073741823;
m_lOnBits[30] = 2147483647;
         
m_l2Power[0] = 1;
m_l2Power[1] = 2;
m_l2Power[2] = 4;
m_l2Power[3] = 8;
m_l2Power[4] = 16;
m_l2Power[5] = 32;
m_l2Power[6] = 64;
m_l2Power[7] = 128;
m_l2Power[8] = 256;
m_l2Power[9] = 512;
m_l2Power[10] = 1024;
m_l2Power[11] = 2048;
m_l2Power[12] = 4096;
m_l2Power[13] = 8192;
m_l2Power[14] = 16384;
m_l2Power[15] = 32768;
m_l2Power[16] = 65536;
m_l2Power[17] = 131072;
m_l2Power[18] = 262144;
m_l2Power[19] = 524288;
m_l2Power[20] = 1048576;
m_l2Power[21] = 2097152;
m_l2Power[22] = 4194304;
m_l2Power[23] = 8388608;
m_l2Power[24] = 16777216;
m_l2Power[25] = 33554432;
m_l2Power[26] = 67108864;
m_l2Power[27] = 134217728;
m_l2Power[28] = 268435456;
m_l2Power[29] = 536870912;
m_l2Power[30] = 1073741824;

function ToHex(dec)
{
	var hexDigits =new Array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
	return( hexDigits[ dec >> 4 ] + hexDigits[ dec & 15 ] );
}

function ToDec(hex)
{
	return( parseInt( hex, 16 ) )
}

function LShift(lValue, iShiftBits)
{    
	if (iShiftBits == 0)
    {
    	    return lValue;
    	}
    else if (iShiftBits == 31)
    {
    	    if( lValue & 1 )
        {
        	    return -2147483648;
        }
        else
        {
        	    return 0;
        }
    }    
    //else if (iShiftBits < 0 || iShiftBits > 31)
    //    Err.Raise 6
    //End If
    
    if (lValue & m_l2Power[31 - iShiftBits]) 
    {
        return ((lValue & m_lOnBits[31 - (iShiftBits + 1)]) * m_l2Power[iShiftBits]) | -2147483648;
    }
    else
    {
    	    return ((lValue & m_lOnBits[31 - iShiftBits]) * m_l2Power[iShiftBits]);
    }
}

function RShift(lValue, iShiftBits)
{
	var result;
	
    if( iShiftBits == 0 )
    {
    	    return lValue;
    }
    else if (iShiftBits == 31 )
    	{
        if( lValue & -2147483648 )
        {
            return 1;
        }
        else
        {
        	    return 0;
        }
    }
   // ElseIf iShiftBits < 0 Or iShiftBits > 31 Then
     //   Err.Raise 6
   // End If
    
    result = parseInt(lValue & 0x7ffffffe) / m_l2Power[iShiftBits];
    
    if (lValue & -2147483648) 
     {
     	result = (result | parseInt(0x40000000 / m_l2Power[iShiftBits - 1]));
    }
    return result;
}

function LShiftByte(bytValue, bytShiftBits)
{
    if (bytShiftBits == 0)
    {
    	    return bytValue;
    }
    else if( bytShiftBits == 7 )
    	{
        if (bytValue & 1 )
        {
        	    return  0x80;
        }
        else
        {
        	    return 0;
        }
        return;
    }
    else if( bytShiftBits < 0 | bytShiftBits > 7)
    	{
        
    }
    
    return((bytValue & m_bytOnBits[7 - bytShiftBits]) * m_byt2Power[bytShiftBits])
}

function RShiftByte(bytValue, bytShiftBits)
 {
 	if( bytShiftBits == 0 )
     {
     	   return bytValue;
     }
    else if( bytShiftBits = 7 )
    	{
    		var returnVal;
        if( bytValue & 0x80 )
        {
            returnVal = 1;
        }
        else
        {
        	    returnVal = 0;
        }
        return returnVal;
    }
    else if( bytShiftBits < 0 | bytShiftBits > 7 )
    {    
    		alert("Error ");
  	}
   
   return parseInt(bytValue / m_byt2Power[bytShiftBits]);
    
}

function RotateLeft(lValue, iShiftBits)
{
   return LShift(lValue, iShiftBits) | RShift(lValue, (32 - iShiftBits));
}

function RotateLeftByte(bytValue, bytShiftBits)
{
    return LShiftByte(bytValue, bytShiftBits) | RShiftByte(bytValue, (8 - bytShiftBits));
}

function Pack(b)
{
    var lCount;
    var lTemp;
    var result;
    
    for( lCount = 0; lCount< 4; lCount++)
    {
        lTemp = b[lCount];
         result |= LShift(lTemp, (lCount * 8))
    }
    return result;
}

function PackFrom(b, k)
{
	var lCount;
    var lTemp;
    var result;
    
    for( lCount = 0; lCount< 4; lCount++)
    {
    	    lTemp = b[lCount + k];
        result |= LShift(lTemp, (lCount * 8))
    }
    
    return result;
}

function Unpack(a, b)
{
    b[0] = a & m_lOnBits[7];
    b[1] = RShift(a, 8) & m_lOnBits[7];
    b[2] = RShift(a, 16) & m_lOnBits[7];
    b[3] = RShift(a, 24)  & m_lOnBits[7];
    
    return b;
}

function UnpackFrom(a, b, k)
{
    b[0 + k] = a & m_lOnBits[7];
    b[1 + k] = RShift(a, 8)  & m_lOnBits[7];
    b[2 + k] = RShift(a, 16)  & m_lOnBits[7];
    b[3 + k] = RShift(a, 24)  & m_lOnBits[7];
     
    return b;
}

function xtime(a)
{
    var b;
    var c;
    if (a & 0x80) 
    {
    	    b = 0x1b;
    }
    else
    	{
        b = 0;
    }
    
    c = LShiftByte(a, 1);
    return c ^ b;
}

function bmul(x, y)
{
    if( x != 0 && y != 0 )
    {
        return m_ptab[(parseInt(m_ltab[x]) + parseInt(m_ltab[y])) % 255];
    }
    else
    {
    	   return 0;
    }
}

function SubByte(a)
 {
 	   var b=new Array(3);
    
    b=Unpack( a, b);
  
    b[0] = m_fbsub[b[0]];
    b[1] = m_fbsub[b[1]];
    b[2] = m_fbsub[b[2]];
    b[3] = m_fbsub[b[3]];
    
    return Pack(b);
}

function product(x, y)
{
    var xb=new Array(3);
    var yb=new Array(3);
    
    xb=Unpack( x, xb);
    yb=Unpack( y, yb);
    return bmul(xb[0], yb[0]) ^ bmul(xb[1], yb[1]) ^ bmul(xb[2], yb[2]) ^ bmul(xb[3], yb[3]);
}

function InvMixCol(x)
{
    var y;
    var m;
    var b=new Array(3);
    
    m = Pack(m_InCo);
    b[3] = product(m, x);
    m = RotateLeft(m, 24);
    b[2] = product(m, x);
    m = RotateLeft(m, 24);
    b[1] = product(m, x);
    m = RotateLeft(m, 24);
    b[0] = product(m, x);
    y = Pack(b);
    
    return y;
}

function ByteSub(x)
{
	var y;
    var z;
    
    z = x;
    y = m_ptab[255 - m_ltab[z]];
    z = y;
    z = RotateLeftByte(z, 1);
    y = y ^ z;
    z = RotateLeftByte(z, 1);
    y = y ^ z;
    z = RotateLeftByte(z, 1);
    y = y ^ z;
    z = RotateLeftByte(z, 1);
    y = y ^ z;
    y = y ^ 0x63;
    
    return y;
}


function gentables()
{
    var i;
    var y;
    var b= new Array(3);
    var ib;
    
    m_ltab[0] = 0;
    m_ptab[0] = 1;
    m_ltab[1] = 0;
    m_ptab[1] = 3;
    m_ltab[3] = 1;
    
    for( i = 2 ;i< 256;i++)
    {	
         m_ptab[i] = m_ptab[i - 1] ^ xtime(m_ptab[i - 1]);
        m_ltab[m_ptab[i]] = i;
    }
    
    m_fbsub[0] = 0x63;
    m_rbsub[0x63] = 0;
    
    for( i = 1;i< 256; i++)
     {
     	ib = i;
        y = ByteSub(ib);
        m_fbsub[i] = y;
        m_rbsub[y] = i;
    }
    
    y = 1;
    for( i = 0; i < 30; i++)
    {
    	    m_rco[i] = y;
        y = xtime(y);
    }
    
    for( i = 0 ; i< 256 ; i++)
    {
        y = m_fbsub[i];
       
        b[3] = y ^ xtime(y);
        b[2] = y;
        b[1] = y;
        b[0] = xtime(y);
        m_ftable[i] = Pack(b);
        
        y = m_rbsub[i];
        b[3] = bmul(m_InCo[0], y);
        b[2] = bmul(m_InCo[1], y);
        b[1] = bmul(m_InCo[2], y);
        b[0] = bmul(m_InCo[3], y);
        m_rtable[i] = Pack(b);
        
    }
}

function gkey(nb, nk, key)     
{           
    var i;
    var j;
    var k;
    var m;
    var N;
    var C1;
    var C2;
    var C3;
    var CipherKey=new Array(7);
    m_Nb = nb;
    m_Nk = nk;
    
    if (m_Nb >= m_Nk )
    {
        m_Nr = 6 + m_Nb;
    }
    else
    {
    	    m_Nr = 6 + m_Nk;
    }
    
    C1 = 1;
    if (m_Nb < 8)
    {
        C2 = 2;
        C3 = 3;
    }
    else
    {
    	    C2 = 3;
        C3 = 4;
    }
    
    for( j = 0; j< nb ; j++)
    {
    	    m = j * 3;
        
        m_fi[m] = (j + C1) % nb;
        m_fi[m + 1] = (j + C2) % nb;
        m_fi[m + 2] = (j + C3) % nb;
        m_ri[m] = (nb + j - C1) % nb;
        m_ri[m + 1] = (nb + j - C2) % nb;
        m_ri[m + 2] = (nb + j - C3) % nb;
    }
   
    N = m_Nb * (m_Nr + 1);
    
    for( i = 0 ; i <  m_Nk ; i++)
    {
    	    j = i * 4;
        CipherKey[i] = PackFrom(key, j);
    }
    
    for( i = 0 ; i < m_Nk ; i++)
    {
        m_fkey[i] = CipherKey[i];
    }
    
    j = m_Nk;
    k = 0;
    
    while( j < N)
    {
        m_fkey[j] = m_fkey[j - m_Nk] ^ SubByte(RotateLeft(m_fkey[j - 1], 24)) ^ m_rco[k];
 
        if( m_Nk <= 6 )
        {
            i = 1;
            while (i < m_Nk & (i + j) < N)
            {
                m_fkey[i + j] = m_fkey[i + j - m_Nk] ^ m_fkey[i + j - 1];
 
                i ++;
            }
        }
        else
        {
            i = 1;
            while (i < 4 & (i + j) < N)
            {
                m_fkey[i + j] = m_fkey[i + j - m_Nk] ^ m_fkey[i + j - 1];
                i ++;
            }
            
            if( j + 4 < N )
            {
                m_fkey[j + 4] = m_fkey[j + 4 - m_Nk] ^ SubByte(m_fkey[j + 3]);
            }
            
            i = 5;
            while (i < m_Nk & (i + j) < N)
            {
                m_fkey[i + j] = m_fkey[i + j - m_Nk] ^  m_fkey[i + j - 1];
               i ++;
            }
        }
        
        j +=  m_Nk;
        k ++ ;
    }
    
    for( j = 0 ; j < m_Nb ; j++)
    {
        m_rkey[j + N - nb] = m_fkey[j];
    }
    
    i = m_Nb;
    while (i < N - m_Nb)
    {
        k = N - m_Nb - i;
        
        for( j = 0 ; j <  m_Nb ; j++)
        {
            m_rkey[k + j] = InvMixCol(m_fkey[i + j]);
        }
        i += m_Nb;
    }
    
    j = N - m_Nb;
    while( j < N)
    {
        m_rkey[j - N + m_Nb] = m_fkey[j];
        j ++;
    }
}

function encryptCore(buff)
{
    var i;
    var j;
    var k;
    var m;
    var a= new Array(7);
    var b=new Array(7);
    var x;
    var y;
    var t;
    for( i = 0 ; i< m_Nb ; i++)
    {
        j = i * 4;
        
        a[i] = PackFrom(buff, j);
        a[i] = a[i] ^ m_fkey[i];
    }
   
    k = m_Nb;
    x = a;
    y = b;
    
    for (i = 1 ; i< m_Nr ; i++)
    {
        for( j = 0 ; j < m_Nb ; j++)
        {
            m = j * 3;
            y[j] = m_fkey[k] ^ m_ftable[x[j] & m_lOnBits[7]] ^ 
            	RotateLeft(m_ftable[RShift(x[m_fi[m]], 8) & m_lOnBits[7]], 8) ^ 
            	RotateLeft(m_ftable[RShift(x[m_fi[m + 1]], 16) & m_lOnBits[7]], 16) ^ 
            	RotateLeft(m_ftable[RShift(x[m_fi[m + 2]], 24)  & m_lOnBits[7]], 24);
            k ++;
        }
        t = x;
        x = y;
        y = t;
    }
    
    for( j = 0 ; j< m_Nb ; j++)
    {
        m = j * 3
    		  
         y[j] = m_fkey[k] ^ m_fbsub[x[j] & m_lOnBits[7]] ^ 
            	RotateLeft(m_fbsub[RShift(x[m_fi[m]], 8) & m_lOnBits[7]], 8) ^ 
            	RotateLeft(m_fbsub[RShift(x[m_fi[m + 1]], 16) & m_lOnBits[7]], 16) ^ 
            	RotateLeft(m_fbsub[RShift(x[m_fi[m + 2]], 24) & m_lOnBits[7]], 24);
         
        k++;
    }
    
    for(i = 0 ; i < m_Nb ; i++)
    {
        j = i * 4;
        buff= UnpackFrom( y[i], buff, j);
        
        x[i] = 0;
        y[i] = 0;
    }
    
    return buff;
}

function IsInitialized(vArray)
 {
 	 return isNAN(vArray.length);
}

function CopyBytesASP(bytDest, lDestStart, bytSource, lSourceStart, lLength)
{
    var lCount;
    for(lCount=0; lCount < lLength ; lCount++)
   {
        bytDest[lDestStart + lCount] = bytSource[lSourceStart + lCount];
    }
    
    return bytDest;
}

function EncryptData(bytMessage, bytPassword)
{
    var bytKey = new Array(31);
    var bytIn;
    var bytOut;
    var bytTemp= new Array(31);
    var lCount;
    var lLength;
    var lEncodedLength;
    var bytLen=new Array(3);
    var lPosition;
 
    if(bytMessage.length <= 0 )
        return;
    
    if(bytPassword.length <= 0 )
        return;
    
    for( lCount = 0 ; lCount < bytPassword.length; lCount++)
    {
        bytKey[lCount] = bytPassword[lCount];
        
        if (lCount ==31 )
        {
        	    break;
        }
    }
    gentables();

    gkey(8, 8, bytKey);
         
    lLength = bytMessage.length;	// + 1;
    lEncodedLength = lLength + 4;
    
    if(lEncodedLength % 32 != 0)
    {
        lEncodedLength = lEncodedLength + 32 - (lEncodedLength % 32);
    }
    
    bytIn=new Array(lEncodedLength - 1);
    bytOut=new Array(lEncodedLength - 1);
    
    bytIn=Unpack(lLength, bytIn);
    bytIn=CopyBytesASP( bytIn, 4, bytMessage, 0, lLength);
    
	lCount=0;
 	while(lCount < lEncodedLength)
    {   
		bytTemp= CopyBytesASP(bytTemp, 0, bytIn, lCount, 32);
		bytTemp= encryptCore(bytTemp);
		// document.getElementById("decryptedJS").value+=bytTemp + ", \n";
		bytOut=CopyBytesASP( bytOut, lCount, bytTemp, 0, 32);
	 
      	lCount +=32
    }
   
    return bytOut;
    
}

function doEncrypt(sPlain, sPassword)
{
    var bytIn;
    var bytOut;
    var bytPassword;
    var lCount;
    var lLength;
	var sTemp;
	
	sTemp = ""
	  
    lLength = sPlain.length;
    
    bytIn=new Array(lLength-1);
    
    for( lCount = 0 ; lCount < sPlain.length; lCount++)
    {
    		bytIn[lCount] =sPlain.charCodeAt(lCount);
    }
    
    lLength = sPassword.length;
    bytPassword=new Array(lLength-1);
    
    for( lCount = 0 ; lCount < sPassword.length ; lCount++)
    {
        bytPassword[lCount] = sPassword.charCodeAt(lCount);
    }

    bytOut = EncryptData(bytIn, bytPassword);

	for (lCount = 0; lCount < bytOut.length ;lCount++)
    {        
    		if( bytOut[lCount] !=undefined)
		{	
			var tempChar="0" +ToHex(bytOut[lCount]);
   		    sTemp+=tempChar.substring(tempChar.length -2, tempChar.length);
   		    //sTemp += right("0" + ToHex(bytOut[lCount]), 2);
   		}
    }

    return sTemp;
}

function Encrypt(strIn)
{
	//var key=GetCookie("ek").replace("+", " ").replace("+", " ").replace("+", " ");
	var key="incruit corporation presentation key";
	return doEncrypt(strIn, key);
}

function EncryptForDatabase(strin)
{
	var key="incruit corporation database key";
	return doEncrypt(strin, key);	
}