// HashTable containing ASCII to Unicode mappings of an Armenian keyboard
var kHT = {};

/* Effects:	initializes the keyboard layout hashtable which maps ASCII values to Unicode characters
					of the Armenian language
	Modifies:	this
	Requires:	layout is member of { "hy_LB", "hy_AM" }
*/
function initializeKeyboardLayout(layout) {
	var wArmLo = "apctyzeu;=ilq/gh2.jm3n,o[b]-swdrxv'k0f";
	var wArmUp = "APCTYZEU:+ILQ?GH@>JM#N<O{B}_SWDRXV\"K)F";
	var eArmLow = "abcdyzeu;=ilq/kh2.jm3n,o[p]-svtrxw'g0f";
	var eArmUp = "ABCDYZEU:+ILQ?KH@>JM#N<O{P}_SVTRXW\"G)F";
	
	if (layout == "hy_LB")  {
		var encodingMapLo = wArmLo;
		var encodingMapUp = wArmUp;
	}
	else {
		var encodingMapLo = eArmLo;
		var encodingMapUp = eArmUp;
	}
	var offsetLo = 0x0561;  // unicode value of lowercase Aep in Armenian alphabet
	var offsetUp = 0x0531;  // unicode value of uppercase Aep in Armenian alphabet

	// Load hashtable entries for lowercase letters
	for (i=0; i<encodingMapLo.length; i++) {
		var key = encodingMapLo.charAt(i);
		var unicodeVal = String.fromCharCode(offsetLo+i);
		kHT[key] = unicodeVal;
	}
	// Load hashtable entries for uppercase letters
	for (i=0; i<encodingMapUp.length; i++) {
		var key = encodingMapUp.charAt(i);
		var unicodeVal = String.fromCharCode(offsetUp+i);
		kHT[key] = unicodeVal;
	}
}

/* Effects:	convert value of text box to Armenian
	Modifies:	this
*/
function processInput() {
	document.forms[0].query.value = convertToArmenian(document.forms[0].query.value);
}

function convertToArmenian(text) {
	var result = "";
	for(i=0; i<text.length; i++) {
		var curChar = text.charAt(i);
		var curCharVal = text.charCodeAt(i);
		var val = kHT[curChar];
		// keep all characters which have already been converted to Armenian
		if (curCharVal > 256) {
			result += curChar;
		}
		// keep the space character
		else if (curCharVal == 32) {
			result += curChar;
		}
		// if the ASCII character represents a valid Armenian letter, then convert it
		else if (val != null) {
			result += val;
		}
		// if not, then remove it
		else
			result += "";
	}
	return result;
}

/* Effects:	call processInput once more and return true.  (Meant to be used by onSubmit event handler)
*/
function validateInput() {
	processInput();
	return true;
}

document.onkeyup = processInput;
