// NYSIISEncode computes a surname's NYSIIS code.
function NYSIISOriginal()
{
	surname = document.source.input.value.toUpperCase();

	// ignore input strings with digits in it
	if(/\d/.test(surname)) {
		document.encodedOriginal.output.value = "No numerics allowed!";
		return;
	}

	// trim whitespace from right of string
	surname = surname.replace(/\s+$/, "");
	
	// remove "JR", "SR", or Roman Numerals from the end of the name
	// (where "Roman Numerals" can be a malformed run of 'I' and 'V' chars)
	if((suffix = /\s+[JS]R$/.exec(surname)) != null || (suffix = /\s+[VI]+$/.exec(surname)) != null)
		surname = surname.substr(0, surname.length - suffix[0].length);

	// remove all non-alpha characters
	surname = surname.replace(/[^A-Z]+/g, "");

	// BEGIN ALGORITHM *******************************************

	// Transcode first characters of name:
	//	   MAC -> MCC
	//	    KN -> NN
	//	     K -> C
	//	PH, PF -> FF
	//	   SCH -> SSS
	if(/^MAC/.test(surname))
		surname = surname.replace(/^MAC/, "MCC");
	else if(/^KN/.test(surname))
		surname = surname.replace(/^KN/, "NN");
	else if(/^K/.test(surname))
		surname = surname.replace(/^K/, "C");
	else if(/^PH|^PF/.test(surname))
		surname = surname.replace(/^PH|^PF/, "FF");
	else if(/^SCH/.test(surname))
		surname = surname.replace(/^SCH/, "SSS");
	document.original01.output.value = surname;

	// Transcode two-character suffix as follows,
	//	            EE, IE -> Y
	//	DT, RT, RD, NT, ND -> D
	if(/EE$|IE$/.test(surname))
		surname = surname.replace(/EE$|IE$/, "Y");
	else if(/DT$|RT$|RD$|NT$|ND$/.test(surname))
		surname = surname.replace(/DT$|RT$|RD$|NT$|ND$/, "D");
	document.original02.output.value = surname;

	// Save first char for later, to be used as first char of key
	firstChar = surname.charAt(0);
	surname = surname.substr(1);
	document.original03.output.value = firstChar;

	// Translate remaining characters by following these rules, incrementing by one character each time:
	//	EV	->	AF 	else A,E,I,O,U	->	A 	                                 
	if(/EV/.test(surname))
		surname = surname.replace(/EV/g, "AF");
	surname = surname.replace(/[AEIOU]+/g, "A");
	//	Q	->	G 	  	  	  	  	 
	surname = surname.replace(/Q/g, "G");
	//	Z	->	S 	  	  	  	  	 
	surname = surname.replace(/Z/g, "S");
	//	M	->	N 	  	  	  	  	 
	surname = surname.replace(/M/g, "N");
	//	KN	->	N, else K	->	C 	 
	surname = surname.replace(/KN/g, "N");
	surname = surname.replace(/K/g, "C");
	//	SCH	->	SSS 	  	  	  	  	 
	surname = surname.replace(/SCH/g, "SSS");
	//	PH	->	FF 	  	  	  	  	 
	surname = surname.replace(/PH/g, "FF");
	//	H	->	If previous or next is nonvowel, previous
	surname = surname.replace(/([^AEIOU])H/g, "$1");
	surname = surname.replace(/(.)H[^AEIOU]/g, "$1");
	//	W 	->	If previous is vowel, previous
	surname = surname.replace(/[AEIOU]W/g, "A");
	document.original04.output.value = surname;

	// If last character is S, remove it
	surname = surname.replace(/S$/, "");
	document.original05.output.value = surname;

	// If last characters are AY, replace with Y
	surname = surname.replace(/AY$/, "Y");
	document.original06.output.value = surname;

	// If last character is A, remove it 
	surname = surname.replace(/A$/, "");
	document.original07.output.value = surname;

	// Collapse all strings of repeated characters
	// This is more brute force that it needs to be
	surname = surname.replace(/[AEIOU]+/g, "A");
	surname = surname.replace(/B+/g, "B");
	surname = surname.replace(/C+/g, "C");
	surname = surname.replace(/D+/g, "D");
	surname = surname.replace(/F+/g, "F");
	surname = surname.replace(/G+/g, "G");
	surname = surname.replace(/H+/g, "H");
	surname = surname.replace(/J+/g, "J");
	surname = surname.replace(/K+/g, "K");
	surname = surname.replace(/L+/g, "L");
	surname = surname.replace(/M+/g, "M");
	surname = surname.replace(/N+/g, "N");
	surname = surname.replace(/P+/g, "P");
	surname = surname.replace(/Q+/g, "Q");
	surname = surname.replace(/R+/g, "R");
	surname = surname.replace(/S+/g, "S");
	surname = surname.replace(/T+/g, "T");
	surname = surname.replace(/V+/g, "V");
	surname = surname.replace(/W+/g, "W");
	surname = surname.replace(/X+/g, "X");
	surname = surname.replace(/Y+/g, "Y");
	surname = surname.replace(/Z+/g, "Z");
	document.original08.output.value = surname;

	// Use original first char of surname as first char of key
	surname = firstChar + surname;
	document.original09.output.value = surname;

	// Technically, the NYSIIS code is only 6 chars long, but curious
	// people want to see the rest of the resulting transcoding
	if (surname.length > 6) {
		surname = surname.substr(0, 6) + "[" + surname.substr(6) + "]";
	}

	document.encodedOriginal.output.value = surname;
}
