//ajan_laskenta_alkoi_ms on merkin kirjoittamishetki millisekunteina 1.1.1970 alusta

function kello_kayntiin()
{
ajan_alkuhetki=new Date();t1=ajan_alkuhetki.getTime();
}

function nollaukset_alussa()
{
//Tee merkkiarray salattavan tekstin merkeistä
//Sijoita sinne alkuarvoksi tavalliset merkit ja lue ne arrayhin. Muut merkit esitetään sellaisenaan

merkkiarray= new Array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
salaamaton_array= new Array(); //tähän luetaan salattava viesti
salasana_array=new Array(); //tähän luetaan salasana kentästä, jonne se ilmestyy
salattu_array= new Array(); //tähän sijoitetaan salasanalla salattu viesti
toiminto=0; //alkuarvo=0: salataan viesti, 1 on avaus. Käytetään kolmen suuren kentän yhteydessä
erilaisten_vaihtoehtojen_maara=0; //erilaisten salasanojen lukumäärä=26^sen pituus
document.forms.salaus.salasanamaara.value=0;

document.forms.salaus.kulunut_aika.value=0;
document.forms.salaus.merkki.value="";
document.forms.salaus.kirjoita.value=""; //Tähän kirjoitetaan merkkejä
document.forms.salaus.koodi.value=""; //Kirjoitetun merkin ASCII-koodi
salasanan_kopio=""; //salasanaa säilötään tässä kentän muutosten varalta
document.forms.salaus.salasana.value=""; //Kirjoituksen tuottama salasana
document.forms.salaus.salasanan_pituus.value=0;
//viestiä ei voi hävittää, koska sillä pitää olla alkuarvo. Annettava tässä, jotta nollausta voi käyttää?
document.forms.salaus.salattava_viesti.value=""; 

//document.forms.salaus.salattava_viesti.value="ABCDEFGHIJKLMNOPQRSTUÜVWXYZÅÄÖabcdefghijklmnopqrstuüvwxyzåäö; 1234567890"; //Korvataan salattava viesti tällä

document.forms.salaus.salattu_viesti.value=""; //Hävitetään salattu viesti
avainviesti=""; //avainta tehdessä kirjoitettu merkkien jono, jonka voi halutessaan sijoittaa viestiksi
kello_kayntiin(); //aivan alussa painetaan näppäintä automaattisesti
document.forms.salaus.kirjoita.focus();
}

function nappainta_painettiin() //Lasketaan aika edellisen merkin kirjoittamisesta
{
ajan_loppuhetki=new Date(); //Lähtöaika päivämäärämuodossa
t2=ajan_loppuhetki.getTime(); //millisekunteina 1.1.1970 alusta
Dt=t2-t1; //kulunut aika Delta t
document.forms.salaus.kulunut_aika.value=Dt;


if(Dt>312) //if(Dt>312) Merkki 313 on A eli edellinen luku 312 on jaollinen merkkien määrällä A...Z (26)
{
tee_salasanan_merkki(); //salasanan merkki aikojen perusteella
koodin_kopio=document.forms.salaus.koodi.value;
}
document.forms.salaus.kirjoita.value='';

kello_kayntiin(); //aletaan pyörittää laskuria heti kun edellinen merkki on valmis
}

function tee_salasanan_merkki()
{
salasanan_merkin_koodi=Dt%26; //ASCII-65
if(merkkiarray[salasanan_merkin_koodi]) //ei ole siis -1 tai undefined
{
lisattu_merkki=merkkiarray[salasanan_merkin_koodi];

kirjoitettu_merkki=document.forms.salaus.kirjoita.value;

avainviesti=avainviesti+kirjoitettu_merkki; //voidaan tehdä viesti kirjoitetuista merkeistä haluttaessa. avainviesti on tämä merkkijono. 
//viimeinen merkki jää pois

salasanan_kopio=salasanan_kopio+lisattu_merkki;
document.forms.salaus.salasanan_pituus.value=salasanan_kopio.length;

erilaisten_vaihtoehtojen_maara=Math.pow(26,salasanan_kopio.length);

//erilaisten salasanojen lukumäärä kun merkkejä on 26 ja salasana on juuri näin pitkä
//laitetaan erilaisten salasanojen kokonaismäärä esille:
document.forms.salaus.salasanamaara.value=erilaisten_vaihtoehtojen_maara;

//document.forms.salaus.salasana.value=salasanan_kopio;
//Näytetään lisätyn merkin ASCII-koodi:
document.forms.salaus.koodi.value=merkkiarray[salasanan_merkin_koodi].charCodeAt(0); 
//Lisätyn merkin näyttö
document.forms.salaus.merkki.value=lisattu_merkki;

}

} 

function lue_salattava_viesti() //luetaan muutettu viestikenttä arrayhin salaamaton_array[i]
{
salaamaton_array= new Array(); //TYHJENNETÄÄN JA LYHENNETÄÄN ARRAY VARMASTI
document.forms.salaus.salattu_viesti.value=""; //KOE
for (var i=0;i<document.forms.salaus.salattava_viesti.value.length;i++)
{
salaamaton_array[i]=document.forms.salaus.salattava_viesti.value.substring(i,i+1); 
}
}


function lue_salasana_kokonaan() //luetaan koko salasana arrayhin salasana_array[i]
{
salasana_array=new Array(); //tehdään arrayn kooksi varmasti nolla, TÄRKEÄ
//elementit nollaksi tai tyhjäksi merkitsemällä ne jäisivät jäljelle mutta nyt ne hävitetään
for (var i=0;i<document.forms.salaus.salasana.value.length;i++)
{
salasana_array[i]=document.forms.salaus.salasana.value.substring(i,i+1); //luetaan salasana arrayhin
}
}

function siirra_salasana_paikoilleen()
{
document.forms.salaus.salasana.value=salasanan_kopio;
}


function salaa_viestin_merkki() //salataan viesti
{

document.forms.salaus.salattu_viesti.value=''; 

//alert('document.forms.salaus.salattava_viesti.value='+document.forms.salaus.salattava_viesti.value+' salaamaton_array.length='+salaamaton_array.length+'  document.forms.salaus.salasanan_pituus.value='+document.forms.salaus.salasanan_pituus.value);

if(salaamaton_array.length<document.forms.salaus.salasanan_pituus.value)
{imin=salaamaton_array.length;}
else{imin=document.forms.salaus.salasanan_pituus.value;}

//for (var i=0;i<imin;i++) //Seuraavassa poistetaan rajoitus ja käytetään salasanaa monta kertaa

//var koe=0; //TESTI

for (var i=0;i<salaamaton_array.length;i++)
{

//merkkien koodit yksitellen. Kaikki ensin isoiksi merkeiksi
salaamattoman_merkin_koodi=salaamaton_array[i].toUpperCase().charCodeAt(0); 

//Muutetaan ainoastaan kirjaimet A-Z (ja a-z, joista tehtiin edellä isoja A-Z)
//Muita merkkejä ei muuteta
salattu_merkki=salaamaton_array[i].toUpperCase(); //Merkki, jota ei muuteta, vaikka sanotaan tässä salatuksi, otetaan kuitenkin iso kirjain pienestä

if(salaamattoman_merkin_koodi<91 && salaamattoman_merkin_koodi>64)
//Tutki seuraava mahdollisuus: kasvata A..Z-arrayta
//if(salaamattoman_merkin_koodi<500 && salaamattoman_merkin_koodi>0)
{
//seuraavassa käytetään lyhyttä salasanaa moneen kertaan

//koe=koe+i; //(i%salasana_array.length);

salasanan_merkin_koodi=salasana_array[i%salasana_array.length].charCodeAt(0);

if(toiminto==0) //Salaus
{salatun_merkin_koodi=salaamattoman_merkin_koodi+salasanan_merkin_koodi;}
if(toiminto===1) //Avaus
{salatun_merkin_koodi=salaamattoman_merkin_koodi-salasanan_merkin_koodi;}

salatun_merkin_arrayindeksi=salatun_merkin_koodi%26; 
//palataan modulolaskennalla A...Z:aan,  mod tuottaa negatiivisiakin arvoja, seuraavassa huomioidaan tämä
//Salaus/avaus tuottaa vielä saman tuloksen, pitääkö tuottaakin?

if(salatun_merkin_arrayindeksi<0)
{
salatun_merkin_arrayindeksi=salatun_merkin_arrayindeksi+merkkiarray.length;
}
salattu_merkki=merkkiarray[salatun_merkin_arrayindeksi]; //arrayn alku on 0 esim 65+65 mod 26=0
}

document.forms.salaus.salattu_viesti.value+=salattu_merkki;

var a=salatun_merkin_koodi;
var b=salatun_merkin_arrayindeksi;
//if(salattu_merkki==undefined){alert('salattu_merkki='+salattu_merkki+' a='+a+' b='+b)}//KOE

}

//alert("koe="+koe+' salasana_array.length='+salasana_array.length);

}

function salaa_kaikki() //Salataan koko teksti näkyvällä salasanalla
{
//Vaaditaan, että viesti ja salasana ovat olemassa paikoillaan
if(document.forms.salaus.salasana.value && document.forms.salaus.salattava_viesti.value)
{
lue_salattava_viesti();
lue_salasana_kokonaan();
salaa_viestin_merkki();
}

viestin_alert='Kirjoita salattava tai avattava viesti tai sijoita avainta luotaessa muodostunut kirjoitus paikoilleen painikkeella';
//Kehotus kirjoittaa viesti. Jos viesti on tämä huomautus, estetään salaus toisaalla.

salasanan_alert='Kirjoita avain tai tee se sivun alussa';
//Kehotus kirjoittaa salasana. Jos salasana on tämä kehotus, estetään salaus toisaalla.

if(!document.forms.salaus.salattava_viesti.value){document.forms.salaus.salattava_viesti.value=viestin_alert}

if(!document.forms.salaus.salasana.value){document.forms.salaus.salasana.value=salasanan_alert}

}

function tee_avainnappailysta_viesti()
{
document.forms.salaus.salattava_viesti.value=avainviesti;
//Tämä näppäiltiin avainta tehtäessä
}

function piilota_kaikki()
{
}

function nayta_kaikki()
{
}

function havita_kaikki()
{
nollaukset_alussa();
}

//Copyright 2003 anttalainen.com
