<!DOCTYPE html>
<html>

<head>
  <link rel="stylesheet" href="style.css">
  <script src="script.js"></script>
</head>

<body>
  <div id="parameters">
    <label>Keyword</label>
    <input type="text" value="abc" name="keyword" oninput="propChange()" size="20">
    <br>
    <label>Position 1</label>
    <input type="number" value="1" name="pos1" oninput="propChange()" min="1">
    <br>
    <label>Position 2</label>
    <input type="number" value="3" name="pos2" oninput="propChange()" min="1">
    <br>
    <label>Message</label>
    <input type="text" value="a message goes here" name="plaintext" oninput="propChange()" size="40">
    <br>
    <br>
    <label>Function output</label>
    <p id="functionOutput"></p>
  </div>
  <h3>cipher result using keyword and two position numbers</h3>
  <input type="text" name="result" value="default result" size="40">
  <script>
    propChange();

    function propChange() {
      var keyword = document.querySelector('[name="keyword"]').value;
      var char1 = keyword.charAt(Number(document.querySelector('[name="pos1"]').value - 1));
      var char2 = keyword.charAt(Number(document.querySelector('[name="pos2"]').value - 1));
      var plaintext = document.querySelector('[name="plaintext"]').value;
      var getVal = keywordCipher( char1, char2, plaintext);
      setFunctionOutput(getVal.error + ", " + getVal.message);
      if (getVal.error != -1) {
        setCipher(getVal.value);
      } else {
        setCipher(getVal.message);
      }
        
    }

    function setFunctionOutput(val) {
      document.getElementById("functionOutput").innerHTML = val;
    }

    function setCipher(val) {
      document.querySelector('[name="result"]').value = val;
    }
  </script>
</body>

</html>
var keywordCipher = function(char1, char2, plaintext) {
  console.log("got ", char1, char2, plaintext);
  var comp1 = "abcdefghijklmnopqrstuvwxyz";
  var diff = comp1.indexOf(char2) - comp1.indexOf(char1);

  var msg = {
    value: plaintext,
    error: 0,
    message: "diff: " + diff
  };
  
  var trans = "";
  for(var i =0; i < plaintext.length; i++) {
    var plainChar = plaintext.charAt(i);
    if(plainChar == " ") {
      trans = trans.concat(" ");
    } else {
      var transCharPos = (comp1.indexOf(plainChar) + diff)%comp1.length;
      var transChar = comp1.charAt(transCharPos);
      trans = trans.concat(transChar);
    }
  }

  msg.value = trans;
  
  console.log("msg.value: " + msg.value);
  
  return msg;
}
Exercises from the book:
# CODES,  
_CIPHERS, SECRETS AND CRYPTIC COMMUNICATION_

\- Fred B. Wrixon
body {
  font-family: "Arial";
}

h4, h3 {
  color: lightgray;
}

label {
  padding-right: 1em;
}

input[name="pos1"],
input[name="pos2"] {
  width: 4em;
}

input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button {
  opacity: 1;
}

#parameters {
  border: 1px solid gray;
  padding: 1em;
}

#functionOutput{
  background-color: lightgray;
  padding: 0.25em;
  margin: 0.25em 0 0 0;
}