// alfabeto = 'ABCDEFGHIJKLMNOPQRSTUVXYZ';

function CreaTabella (chiave, tabella, alfabeto){
	chiave.value = chiave.value.toUpperCase();
	tabella.value  = '';
	for(var conta = 0; conta < chiave.value.length; conta++){
		ch= chiave.value.charAt(conta)
		if (tabella.value.indexOf (ch) < 0) {
			tabella.value += ch
		}
	}
	for(var conta = 0; conta < alfabeto.value.length; conta++){
		ch= alfabeto.value.charAt(conta)
		if (tabella.value.indexOf (ch) < 0) {
			tabella.value += ch
		}
	}
}

function RimescolaCollon(cifratox, cifratoy, blocco, cifrato){
	lenx = cifratox.value.length;
	leny = cifratoy.value.length;
	if (lenx > leny) { len = lenx} else { len = leny}
	cifrato.value = ""; 
	fine = parseInt(blocco.value);
	for(conta = 0; conta < len; conta += fine){
		next = conta + fine;
	    	chx = cifratox.value.slice(conta, next);
	    	chy = cifratoy.value.slice(conta, next);
		cifrato.value += chx + chy;
	}
}

function Collon1(chiaro, chiave, cifratox, cifratoy, matrice){
	CreaTabella(chiave, matrice);
	chiaro.value = chiaro.value.toUpperCase();
	cifratox.value = ""; 
	cifratoy.value = ""; 
	for(conta = 0; conta < chiaro.value.length; conta++){
	    	ch    = chiaro.value.charAt(conta);
		ord1  = matrice.value.indexOf(ch);
		riga  = Math.floor(ord1 / 5);
		col   = ord1 % 5;
		ordine = Math.floor(2*Math.random());
		if (ordine = 0){
			cifratox.value += matrice.value.charAt(5*riga); 
			cifratoy.value += matrice.value.charAt(20+col); 
		}else{
			cifratoy.value += matrice.value.charAt(5*riga); 
			cifratox.value += matrice.value.charAt(20+col); 
		}
	}
}

function Playfair(chiaro, chiave, cifrato, matrice, alfabeto){
	CreaTabella(chiave, matrice, alfabeto);
	chiaro.value = chiaro.value.toUpperCase();
	cifrato.value = ""; 
	for(conta = 0; conta < chiaro.value.length; conta=conta+2){
	    ch1   = chiaro.value.charAt(conta);
	    ch2   = chiaro.value.charAt(conta+1);
		ord1  = matrice.value.indexOf(ch1);
		riga1 = Math.floor(ord1 / 5);
		col1  = ord1 % 5;
		ord2  = matrice.value.indexOf(ch2);
		riga2 = Math.floor(ord2 / 5);
		col2  = ord2 % 5;
		if (riga1 == riga2) {
			cifrato.value += matrice.value.charAt(5*riga1 + (col1 + 1)%5);
			cifrato.value += matrice.value.charAt(5*riga2 + (col2 + 1)%5);
		} else if (col1 == col2) {
			cifrato.value += matrice.value.charAt(col1 + 5*((riga1+1)%5));
			cifrato.value += matrice.value.charAt(col2 + 5*((riga2+1)%5));
		} else {
			cifrato.value += matrice.value.charAt(5*riga1 + col2);
			cifrato.value += matrice.value.charAt(5*riga2 + col1);
		}
	}
/* matrice.value = tabella */
}

function CifraBlocco(blocco, tabella, cifrato)
{
	vettore = new Array(10);
	for(conta = 0; conta < 5; conta++){
		ord  = tabella.value.indexOf(blocco.charAt(conta));
		vettore[conta]   = Math.floor(ord / 5);
		vettore[conta+5] = ord % 5;
	}
	for(conta = 0; conta < 10; conta = conta + 2){
		cifrato.value +=
		tabella.value.charAt(5*vettore[conta] + vettore[conta+1]);
	}
	
}

function Delastelle(chiaro, chiave, cifrato, tabella, alfabeto)
{
	CreaTabella(chiave, tabella, alfabeto);
	chiaro.value = chiaro.value.toUpperCase();
	resto   = chiaro.value.length;
	blocs    = 1 + Math.floor(resto / 5);
	resto   = (5 - (resto % 5))%5;
	while (resto > 0) {
		chiaro.value += 'X';
		resto--;
	}
	cifrato.value = "";
	conto = 0;
 	while (blocs > 0) {
		blocco = chiaro.value.substr(conto, 5);
		CifraBlocco(blocco, tabella, cifrato);
		conto = conto + 5;
		blocs--;
	}
}

function Pulisci(chiaro, cifrato, chiave, tabella){
	chiaro.value  = "";
	cifrato.value = "";
	chiave.value  = "";
	tabella.value = "";
}
