var randomArray = new Array(13,5,8,3,0,11,1,4,8,7,7,9);
var letters = new Array('A','B','C','D','E','F','G','H','J','K','L','M','N','P','R','S','T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9');


function pause(milliseconds)
{
      var now = new Date();
      var exitTime = now.getTime() + millisecondi;
      while(true)
      {
          now = new Date();
	  if(now.getTime() > exitTime) return;
      }
}




function createActivationCode() 
{	
	var now = new Date();
	var curTime = new String(now.getTime());
	var customer = curTime.substring(4);
	var customerId = new Number(customer);
//alert("customer = " + customer +" customerId = " + customerId);
	var chrAct = buildActivationCode(customerId);
	var encryptedCode = encryptActivation(chrAct);
//alert("activationCode = " + encryptedCode);
//var chrDec = decryptActivation(encryptedCode);
//getActivationCode(chrDec); 
	return encryptedCode;
}

function buildActivationCode(customerId)
{
	var chr1 = new Array((customerId >> 24) & 0xFF,(customerId >> 16) & 0xFF,(customerId >> 8) & 0xFF,customerId & 0xFF);
	var code = 30375;
	var chr2 = new Array((code >> 8) & 0xFF,code & 0xFF);
	var chr = new Array(chr1[0],chr1[1],chr1[2],chr1[3],chr2[0],chr2[1]);
	return chr;
}

function getActivationCode(chrDec)
{
        var customer1 = ((chrDec[0] << 24) & 0xFF000000);
        customer1 += ((chrDec[1] << 16) & 0xFF0000);
        customer1 += ((chrDec[2] << 8) & 0xFF00);
        customer1 += (chrDec[3] & 0xFF);
        var code1 = ((chrDec[4] << 8) & 0xFF00);
        code1 += (chrDec[5] & 0xFF);
//alert("customer=" + customer1 + " code=" + code1);
}

function encryptActivation(chr)
{
	var iBits = new Array(48);
        var eBits = new Array(48);
            var bitCount = 0;
            var work;
            for (i = 0; i < 6; i++) {
                work = chr[i];
                for (j = 0; j < 8; j++) {
                    if ((work & Math.pow(2, j)) != 0)
                        iBits[bitCount++] = 1;
                    else
                        iBits[bitCount++] = 0;
                }
            }
            eBits[0] = iBits[8];
            eBits[1] = iBits[5];
            eBits[2] = iBits[13];
            eBits[3] = iBits[17];
            eBits[4] = iBits[25];
            eBits[5] = iBits[2];
            eBits[6] = iBits[29];
            eBits[7] = iBits[19];
            eBits[8] = iBits[37];
            eBits[9] = iBits[23];
            eBits[10] = iBits[36];
            eBits[11] = iBits[31];
            eBits[12] = iBits[34];
            eBits[13] = iBits[0];
            eBits[14] = iBits[44];
            eBits[15] = iBits[40];
            eBits[16] = iBits[6];
            eBits[17] = iBits[12];
            eBits[18] = iBits[41];
            eBits[19] = iBits[28];
            eBits[20] = iBits[43];
            eBits[21] = iBits[30];
            eBits[22] = iBits[16];
            eBits[23] = iBits[1];
            eBits[24] = iBits[22];
            eBits[25] = iBits[46];
            eBits[26] = iBits[24];
            eBits[27] = iBits[38];
            eBits[28] = iBits[15];
            eBits[29] = iBits[7];
            eBits[30] = iBits[26];
            eBits[31] = iBits[35];
            eBits[32] = iBits[18];
            eBits[33] = iBits[11];
            eBits[34] = iBits[32];
            eBits[35] = iBits[9];
            eBits[36] = iBits[45];
            eBits[37] = iBits[4];
            eBits[38] = iBits[42];
            eBits[39] = iBits[47];
            eBits[40] = iBits[39];
            eBits[41] = iBits[3];
            eBits[42] = iBits[33];
            eBits[43] = iBits[27];
            eBits[44] = iBits[20];
            eBits[45] = iBits[10];
            eBits[46] = iBits[21];
            eBits[47] = iBits[14];

        var letter;
        var r;
	var decryptString = "";
        for (i = 0; i < 12; i++) {
                letter = 0;
                if (eBits[i * 4 ] != 0)
                    letter += 1;
                if (eBits[i * 4 + 1] != 0)
                    letter += 2;
                if (eBits[i * 4 + 2] != 0)
                    letter += 4;
                if (eBits[i * 4 + 3] != 0)
                    letter += 8;
                r = randomArray[i];
                decryptString += letters[letter + r];
                if (i == 3 || i ==7)
                    decryptString += '-';
        }
	return decryptString;
}


function decryptActivation(encryptedText) {
        var len = encryptedText.length;
        if (len != 14)
            return encryptedText;
        else {
	    var chr =  new Array(14);
	    for (i = 0; i < len; i++) {
		chr[i] = encryptedText.charAt(i)
	    }
            if (chr[4] != '-' || chr[9] != '-')
                return encryptedText;
            else {
                var workText = encryptedText.substring(0, 4) + encryptedText.substring(5, 9) + encryptedText.substring(10, 14);
		len = workText.length;
		chr = new Array(len);
		for (i = 0; i < len; i++) {
			chr[i] = workText.charAt(i)
		}
                var iBits = new Array(48);
                var eBits = new Array(48);
                var letter = 0;
                var r;
                for (i = 0; i < 48; i++)
                    eBits[i] = 0;
                for (i = 0; i < 12; i++) {
                    for (j = 0; j < letters.length; j++) {
                        if (chr[i] == letters[j]) {
                            letter = j;
                            break;
                        }
                    }
                    r = randomArray[i];
                    letter -= r;
                    if ((letter & 1) != 0)
                        eBits[i * 4] = 1;
                    if ((letter & 2) != 0)
                        eBits[i * 4 + 1] = 1;
                    if ((letter & 4) != 0)
                        eBits[i * 4 + 2] = 1;
                    if ((letter & 8) != 0)
                        eBits[i * 4 + 3] = 1;
                }

                iBits[8] = eBits[0];
                iBits[5] = eBits[1];
                iBits[13] = eBits[2];
                iBits[17] = eBits[3];
                iBits[25] = eBits[4];
                iBits[2] = eBits[5];
                iBits[29] = eBits[6];
                iBits[19] = eBits[7];
                iBits[37] = eBits[8];
                iBits[23] = eBits[9];
                iBits[36] = eBits[10];
                iBits[31] = eBits[11];
                iBits[34] = eBits[12];
                iBits[0] = eBits[13];
                iBits[44] = eBits[14];
                iBits[40] = eBits[15];
                iBits[6] = eBits[16];
                iBits[12] = eBits[17];
                iBits[41] = eBits[18];
                iBits[28] = eBits[19];
                iBits[43] = eBits[20];
                iBits[30] = eBits[21];
                iBits[16] = eBits[22];
                iBits[1] = eBits[23];
                iBits[22] = eBits[24];
                iBits[46] = eBits[25];
                iBits[24] = eBits[26];
                iBits[38] = eBits[27];
                iBits[15] = eBits[28];
                iBits[7] = eBits[29];
                iBits[26] = eBits[30];
                iBits[35] = eBits[31];
                iBits[18] = eBits[32];
                iBits[11] = eBits[33];
                iBits[32] = eBits[34];
                iBits[9] = eBits[35];
                iBits[45] = eBits[36];
                iBits[4] = eBits[37];
                iBits[42] = eBits[38];
                iBits[47] = eBits[39];
                iBits[39] = eBits[40];
                iBits[3] = eBits[41];
                iBits[33] = eBits[42];
                iBits[27] = eBits[43];
                iBits[20] = eBits[44];
                iBits[10] = eBits[45];
                iBits[21] = eBits[46];
                iBits[14] = eBits[47];

                var chr1 = new Array(6);
                var work;
                for (i = 0; i < 6; i++) {
                    work = 0;
                    for (j = 0; j < 8; j++) {
                        if (iBits[i * 8 + j] != 0)
                            work += Math.pow(2, j);
                    }
                    chr1[i] = work;
                }
                return chr1;
            }
	}
     }
