var abc = abcalpha+abcalpha;

function cipherletter ( plainletter, keyletter ) {
// determine the ciphertext letter from the plaintext letter and keyword letter
// all letters must be in caps

  return abc.charAt(abc.indexOf(keyletter)+abc.indexOf(plainletter));

}

function plainletter ( cipherletter, keyletter ) {
// determine the plaintext letter from the ciphertext letter and keyword letter
// all letters must be in caps

  var start = abc.indexOf(keyletter);
  return abc.charAt(abc.indexOf(cipherletter,start)-start);

}

function keyletter ( cipherletter, plainletter ) {
// determine the keyword letter from the ciphertext letter and plaintext letter
// all letters must be in caps

  var start = abc.indexOf(plainletter);
  return abc.charAt(abc.indexOf(cipherletter,start)-start);

}

function resetPlaintext ( ciphertext, plaintext, keyword ) {

  ciphertext = strip(ciphertext.toUpperCase(),abcalpha);
  plaintext = strip(plaintext.toUpperCase(),abcalpha+"-");
  keyword = strip(keyword.toUpperCase(),abcalpha+"-");

  var output = "";

  var keyi = 0;
  for ( var i = 0 ; i < ciphertext.length ; 
        i++, keyi = (keyi+1)%keyword.length ) {
    if ( keyword.charAt(keyi) == "-" || keyword.charAt(keyi) == "*" ) { 
      output += "-"; 
    } else {
      output += plainletter(ciphertext.charAt(i),keyword.charAt(keyi));
    }
  }

  display(ciphertext,output,keyword);
}

function updatePlaintext ( ciphertext, plaintext, keyword ) {

  ciphertext = strip(ciphertext.toUpperCase(),abcalpha);
  plaintext = strip(plaintext.toUpperCase(),abcalpha+"-");
  keyword = strip(keyword.toUpperCase(),abcalpha+"-");

  var output = "";

  var keyi = 0;
  for ( var i = 0 ; i < ciphertext.length ; 
        i++, keyi = (keyi+1)%keyword.length ) {
    if ( keyword.charAt(keyi) == "-" || keyword.charAt(keyi) == "*" ) { 
      output += plaintext.charAt(i); 
    } else {
      output += plainletter(ciphertext.charAt(i),keyword.charAt(keyi));
    }
  }

  display(ciphertext,output,keyword);
}

function resetKeyword ( ciphertext, plaintext, keyword ) {

  ciphertext = strip(ciphertext.toUpperCase(),abcalpha);
  plaintext = strip(plaintext.toUpperCase(),abcalpha+"-");
  keyword = strip(keyword.toUpperCase(),abcalpha+"-");

  var keylen = keyword.length;
  keyword = "";
  for ( var i = 0 ; i < keylen ; i++ ) { keyword += "-"; }

  var keyi = 0;
  for ( var i = 0 ; i < ciphertext.length ; 
        i++, keyi = (keyi+1)%keyword.length ) {
    if ( plaintext.charAt(i) != "-" ) {
      var keyltr = keyletter(ciphertext.charAt(i),plaintext.charAt(i));
      if ( keyword.charAt(keyi) == "-" ) { 
        keyword = keyword.substring(0,keyi)+keyltr+
	          keyword.substring(keyi+1,keyword.length);
      } else if ( keyword.charAt(keyi) != keyltr ) {
        keyword = keyword.substring(0,keyi)+"*"+
	          keyword.substring(keyi+1,keyword.length);
      }
    }
  }

  display(ciphertext,plaintext,keyword);
}

function updateKeyword ( ciphertext, plaintext, keyword ) {

  ciphertext = strip(ciphertext.toUpperCase(),abcalpha);
  plaintext = strip(plaintext.toUpperCase(),abcalpha+"-");
  keyword = strip(keyword.toUpperCase(),abcalpha+"-");

  var keyi = 0;
  for ( var i = 0 ; i < ciphertext.length ; 
        i++, keyi = (keyi+1)%keyword.length ) {
    if ( plaintext.charAt(i) != "-" ) {
      var keyltr = keyletter(ciphertext.charAt(i),plaintext.charAt(i));
      if ( keyword.charAt(keyi) == "-" ) { 
        keyword = keyword.substring(0,keyi)+keyltr+
	          keyword.substring(keyi+1,keyword.length);
      } else if ( keyword.charAt(keyi) != keyltr ) {
        if ( i < keyword.length ) {
          keyword = keyword.substring(0,keyi)+keyltr+
	            keyword.substring(keyi+1,keyword.length);
        } else {
          keyword = keyword.substring(0,keyi)+"*"+
	            keyword.substring(keyi+1,keyword.length);
        }
      }
    }
  }

  display(ciphertext,plaintext,keyword);
}

