

////////////////////

var newSegmentIndex = 0;
var newMoraIndex = 0;

var alphabet = "";

function initApp(alph) {

	alphabet = alph || "APAU";

	var alpha = alph.substring(0,3);
	var font  = alph.substring(3,4);
	setAlphabet(alpha,font);


	if(inputs[0]) inputs[0] = unescape(inputs[0]);
	
	if(inputs.length>0) {
		var parts    = inputs[0].split(":");
		var segments = parts[0];
		var moras    = parts[1];
		var root     = parts[2];
		inputs[0] = new link(segments,moras,root);
	} else {
		inputs[0] = new link();
	}

	var segArr = []
	var indexArr = []
	if (segments) segArr = segments.split(",")
	for(i in segArr) {
		indexArr[indexArr.length] = parseInt(segArr[i].substring(segArr[i].indexOf("(")+1,segArr[i].indexOf(")")))
	}
	for (i in indexArr) if (indexArr[i]>newSegmentIndex) newSegmentIndex = indexArr[i];
	newSegmentIndex++


	var moraArr = []
	indexArr = []
	if (moras) moraArr = moras.split(",")
	for(i in moraArr) {
		indexArr[indexArr.length] = parseInt(moraArr[i].substring(0,moraArr[i].indexOf("(")));
	}
	for (i in indexArr) if (indexArr[i]>newMoraIndex) newMoraIndex = indexArr[i];
	newMoraIndex++

	/// fill in value for global variable "alphabet"

	drawKeyboard(alphabet);
	drawToolTips();

	(location.search == "?morphology") ? showTab("morphology") : showTab("phonology");


	updateInput(inputs.length-1)
}


/////////////////////




function drawKeyboard() {

	var nbsp = "&nbsp;";
	var htmlStr = "";

	htmlStr += "<TABLE CELLPADDING=3 CELLSPACING=0 BORDER=0>";
	htmlStr += "<TR VALIGN='top'><TD>" + makeLink("p") +                        "<BR>" + makeLink("b")                        + "</TD><TD>" + makeLink("t") +                        "<BR>" + makeLink("d")                        + "</TD><TD>" + makeLink("ch")+ "<BR>" + makeLink("j") + "</TD><TD>" + makeLink("k")     + nbsp + makeLink("q") + "<BR>" + makeLink("g")     + nbsp + makeLink("G") + "</TD><TD>" + makeLink("glot")                              + "</TD></TR>";
	htmlStr += "<TR VALIGN='top'><TD>" + makeLink("F") + nbsp + makeLink("f") + "<BR>" + makeLink("V") + nbsp + makeLink("v") + "</TD><TD>" + makeLink("T") + nbsp + makeLink("s") + "<BR>" + makeLink("D") + nbsp + makeLink("z") + "</TD><TD>" + makeLink("sh")+ "<BR>" + makeLink("zh")+ "</TD><TD>" + makeLink("x")     + nbsp + makeLink("X") + "<BR>" + makeLink("gamma") + nbsp + makeLink("R") + "</TD><TD>" + makeLink("h") + "<BR>" + makeLink("voicedh")  + "</TD></TR>";
	htmlStr += "<TR VALIGN='top'><TD>" + makeLink("m")                                                                        + "</TD><TD>" + makeLink("n")                                                                        + "</TD><TD>" + makeLink("ny")                         + "</TD><TD>" + makeLink("engma") + nbsp + makeLink("N")                                                     + "</TD><TD>" + nbsp                                          + "</TD></TR>";
	htmlStr += "<TR VALIGN='top'><TD>" + nbsp                                                                                 + "</TD><TD>" + makeLink("l")                                                                        + "</TD><TD>" + makeLink("ly")                         + "</TD><TD>" + nbsp                                                                                         + "</TD><TD>" + nbsp                                          + "</TD></TR>";
	htmlStr += "<TR VALIGN='top'><TD>" + nbsp                                                                                 + "</TD><TD>" + makeLink("r")                                                                        + "</TD><TD>" + nbsp                                   + "</TD><TD>" + nbsp                                                                                         + "</TD><TD>" + nbsp                                          + "</TD></TR>";
	htmlStr += "<TR VALIGN='top'><TD>" + makeLink("w")                                                                        + "</TD><TD>" + nbsp                                                                                 + "</TD><TD>" + makeLink("y")                          + "</TD><TD>" + nbsp                                                                                         + "</TD><TD>" + nbsp                                          + "</TD></TR>";
	htmlStr += "</TABLE>";

	document.getElementById("keyboardConsonants").innerHTML = htmlStr

	htmlStr = "";

	htmlStr += "<TABLE CELLPADDING=3 CELLSPACING=0 BORDER=0>";
	htmlStr += "<TR><TD                >" + makeLink("i") + nbsp + makeLink("uumlaut") + "<BR>" + makeLink("I")  + nbsp + makeLink("Uumlaut")     + "</TD><TD>" + makeLink("reversem") + nbsp + makeLink("u") + "<BR>" + makeLink("barredi") + nbsp + makeLink("U")      + "</TD></TR>";
	htmlStr += "<TR><TD                >" + makeLink("e") + nbsp + makeLink("oumlaut") + "<BR>" + makeLink("E")  + nbsp + makeLink("Oumlaut")     + "</TD><TD>" + makeLink("horns")    + nbsp + makeLink("o") + "<BR>" + makeLink("schwa")   + nbsp + makeLink("O")      + "</TD></TR>";
	htmlStr += "<TR><TD VALIGN='bottom'>" +                 nbsp +                       "<BR>" + makeLink("ae") + nbsp + makeLink("roundaumlaut")+ "</TD><TD>" + makeLink("caret")    + nbsp                 + "<BR>" + makeLink("a")       + nbsp + makeLink("rounda") + "</TD></TR>";
	htmlStr += "</TABLE>";

	document.getElementById("keyboardVowels").innerHTML = htmlStr


}

function makeLink(phonemeName) {

	var symbol = seg[phonemeName].symbol;
	var features = ""
	if (seg[phonemeName].place) features += "[" + seg[phonemeName].place + "]\n";
	features += "sonority level: " + seg[phonemeName].sonor + "/16\n"; 
	features += seg[phonemeName].high + "high\t";
	features += seg[phonemeName].low + "low\t";
	features += seg[phonemeName].back + "back\t";
	features += seg[phonemeName].round + "round\t";
	features += seg[phonemeName].ATR + "ATR\n";
	features += seg[phonemeName].cont + "cont\t";
	features += seg[phonemeName].son + "son\t";
	features += seg[phonemeName].voice + "voice\t";
	features += seg[phonemeName].strid + "strident\n";
	if (seg[phonemeName].ant  ) features += seg[phonemeName].ant + "ant\t";
	if (seg[phonemeName].dist ) features += seg[phonemeName].dist + "dist\t";
	if (seg[phonemeName].lat  ) features += seg[phonemeName].lat  + "lat\t";
	if (seg[phonemeName].cg   ) features += seg[phonemeName].cg + "c.g.\t";
	if (seg[phonemeName].sg   ) features += seg[phonemeName].sg + "s.g.\t";

	while (features.indexOf("-")!=-1) {
		features = features.substring(0,features.indexOf("-")) + "&ndash;" + features.substring(features.indexOf("-")+1,features.length)
	}
	
	var htmlStr = "<INPUT TITLE='" + features + "'  TYPE=button onClick='addSegment(0,\"" + phonemeName + "\")' VALUE='" + symbol + "' ";
	if (symbol.length==2 && (symbol.charAt(1)=="_" || symbol.charAt(1)=="à")) {
		htmlStr += (alphabet.indexOf("U")>-1) ? "CLASS='complexSegmentButtonU'>" : "CLASS='complexSegmentButton'>";
	} else {
		htmlStr += (alphabet.indexOf("U")>-1) ? "CLASS='segmentButtonU'>" : "CLASS='segmentButton'>";
	}
	return htmlStr
}


function drawToolTips() {
/*
	var htmlStr = "";
	for (var i in seg) {
		htmlStr += "<DIV CLASS='segmenttooltip' ID='seg"+ i +"'>";
		htmlStr += i;
		htmlStr += "</DIV>";
	}

	document.getElementById("tooltips").innerHTML = htmlStr;
*/	
}




function deleteAll(inputIndex) {
	inputs[inputIndex].segments = "";
	inputs[inputIndex].moras = "";
	inputs[inputIndex].root = "";
	newSegmentIndex = 1;
	newMoraIndex = 1;
	updateInput(inputIndex);
}


function addMora(inputIndex) {

	if (inputs[0].segments.length > 0) {

		var segArr = []
		if (inputs[0].segments) segArr = inputs[0].segments.split(",")
		var lastSegIndex     = segArr[segArr.length-1].substring(segArr[segArr.length-1].indexOf("(")+1,segArr[segArr.length-1].indexOf(")"))
		var lastSegmentMoras = inputs[0].moras.countInstances("("+lastSegIndex+")")

		var lastSegPhoneme   = segArr[segArr.length-1].substring(0,segArr[segArr.length-1].indexOf("("))
		var lastSegmentCons  = seg[lastSegPhoneme].cons

		if ((lastSegmentCons=="V" && lastSegmentMoras<3) || (lastSegmentCons=="C" && lastSegmentMoras<2)) {
			var moraArray = []
			if (inputs[0].moras) moraArray = inputs[0].moras.split(",")
			moraArray[moraArray.length] = newMoraIndex + "(" + lastSegIndex + ")"
			inputs[0].moras = moraArray.join(",")
			newMoraIndex++
	
			updateInput(inputIndex)
		}
	}
}

function removeMora(inputIndex) {

	if (inputs[inputIndex].moras.length > 0) {

		var segArr = []
		if (inputs[0].segments) segArr = inputs[0].segments.split(",")
		var lastSegIndex     = segArr[segArr.length-1].substring(segArr[segArr.length-1].indexOf("(")+1,segArr[segArr.length-1].indexOf(")"))
		var lastSegmentMoras = inputs[0].moras.countInstances("("+lastSegIndex+")")

		var lastSegPhoneme   = segArr[segArr.length-1].substring(0,segArr[segArr.length-1].indexOf("("))
		var lastSegmentCons  = seg[lastSegPhoneme].cons

		if ((lastSegmentCons=="C" && lastSegmentMoras>0) || (lastSegmentCons=="V" && lastSegmentMoras>1)) {
			var moraArray = inputs[inputIndex].moras.split(",")
			moraArray.length --
			inputs[inputIndex].moras = moraArray.join(",")
			newMoraIndex--
			updateInput(inputIndex)
		}
	}
}


function addUmlaut(inputIndex) {
	
	/// check if last segment is in root
	var segArr  = []
	if (inputs[inputIndex].segments) segArr = inputs[inputIndex].segments.split(",")
	if (segArr) {
		var lastPhoneme = segArr[segArr.length-1].substring(0,segArr[segArr.length-1].indexOf("("));
		var lastIndex = segArr[segArr.length-1].substring(segArr[segArr.length-1].indexOf("(")+1,segArr[segArr.length-1].indexOf(")"));
		if (lastPhoneme == "u" ||
		    lastPhoneme == "U" ||
		    lastPhoneme == "o" || 
		    lastPhoneme == "O" || 
		    lastPhoneme == "rounda") {
			segArr[segArr.length-1] = lastPhoneme+"umlaut(" + lastIndex + ")";
			inputs[inputIndex].segments = segArr.join(",");
			updateInput(inputIndex)
		}
	}
}


function addSegment(inputIndex,phonemeName) {

	if (inputs[inputIndex].segments.length > 0) inputs[inputIndex].segments += ","
	inputs[inputIndex].segments += phonemeName + "(" + newSegmentIndex + ")"

	/// check if last segment is in root
	var segArr  = []
	var inRoot = false
	if (inputs[inputIndex].segments) segArr = inputs[inputIndex].segments.split(",")
	if (segArr.length>1) {
		var penultSegIndex = segArr[segArr.length-2].substring(segArr[segArr.length-2].indexOf("(")+1,segArr[segArr.length-2].indexOf(")"))
		var root = "," + inputs[inputIndex].root + ",";
		if (root.indexOf(","+penultSegIndex+",")!=-1) inRoot = true
	}
	if (inRoot || segArr.length==1) {
		if (inputs[inputIndex].root.length > 0) inputs[inputIndex].root += ","
		inputs[inputIndex].root += newSegmentIndex;
	}
	


	if (seg[phonemeName].cons == "V") {
		if (inputs[inputIndex].moras.length > 0) inputs[inputIndex].moras += ","
		inputs[inputIndex].moras += newMoraIndex + "(" + newSegmentIndex + ")"
		newMoraIndex++
	}
	newSegmentIndex++

	updateInput(inputIndex)
}

function removeSegment(inputIndex) {

	if (inputs[0].segments.length > 0) {

		var segArr = inputs[0].segments.split(",");
		var lastSegIndex     = segArr[segArr.length-1].substring(segArr[segArr.length-1].indexOf("(")+1,segArr[segArr.length-1].indexOf(")"))
 		var lastSegmentMoras = inputs[inputIndex].moras.countInstances("("+lastSegIndex+")")

		var rootArr = inputs[0].root.split(",");
		if (rootArr.length ==1 && segArr.length>1) {
			alert ("You can't leave an input without a root.\nClick ''clear All'' or make other segments a part of the root.");
		} else {

			segArr.length--;
			inputs[inputIndex].segments = segArr.join(",")
			newSegmentIndex--;
	
			if (rootArr[rootArr.length-1] == lastSegIndex) {
				rootArr.length--;
				inputs[0].root = rootArr.join(",")
			}
	
			
			if (inputs[0].moras) {
				var moraArray = inputs[0].moras.split(",")
				moraArray.length -= lastSegmentMoras 
				inputs[0].moras = moraArray.join(",")
				newMoraIndex -= lastSegmentMoras;
			}
	
			updateInput(inputIndex);

		}
	}
}



function updateInput() {

	//alert("Segments: " + inputs[0].segments + "\n\nMoras: " + inputs[0].moras + "\n\nNew segment: " + newSegmentIndex + "\n\nNew mora: " + newMoraIndex);
	if (inputs[0].segments.length > 0) {

		document.forms["inputEditor"].deleteall.disabled = false;
		document.forms["inputEditor"].backspace.disabled = false;

		var segArr = inputs[0].segments.split(",")
		var lastSegIndex     = segArr[segArr.length-1].substring(segArr[segArr.length-1].indexOf("(")+1,segArr[segArr.length-1].indexOf(")"))
 		var lastSegmentMoras = inputs[0].moras.countInstances("("+lastSegIndex+")")

		var lastSegPhoneme   = segArr[segArr.length-1].substring(0,segArr[segArr.length-1].indexOf("("))
		var lastSegmentCons  = seg[lastSegPhoneme].cons

		var moraPlus;
		var moraMinus;
		if (lastSegmentCons == "C") {
			moraPlus =  (lastSegmentMoras > 1) ? true : false;
			moraMinus = (lastSegmentMoras < 1) ? true : false;	
		}
		if (lastSegmentCons == "V") {
			moraPlus =  (lastSegmentMoras > 2) ? true : false;
			moraMinus = (lastSegmentMoras < 2) ? true : false;	
		}
		document.forms["inputEditor"].plusmora.disabled = moraPlus;
		document.forms["inputEditor"].minusmora.disabled = moraMinus;


		document.getElementById("newInput").innerHTML = "<SPAN STYLE='font-size:150%;'>" + candHTML(inputs[0]) +  "</SPAN>"; // &nbsp; <A HREF='tableau.cgi'>Tableau</A> &nbsp; <A HREF='save.cgi?input'>Save</A>";
		
		var myInput = inputs[0].segments + ":" + inputs[0].moras + ":" + inputs[0].root;
		document.cookie = "inputs=" + myInput;
		
		
		
		//// make Morphology
		var morphHTML = "<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=6>";
		var segRow = "<TD CLASS='tableau2' STYLE='height:2em;'>&nbsp;</TD>";
		var rootRow = "<TD CLASS='tableau4'>Root:</TD>";
		var affRow  = "<TD CLASS='tableau4'>Affix:</TD>";

		var segArray  = inputs[0].segments.split(",")
		var rootArray = [];
		if (inputs[0].root) rootArray = inputs[0].root.split(",");

		for (var i=0; i<segArray.length;i++) {
			var currIndex = segArray[i].substring(segArray[i].indexOf("(")+1,segArray[i].indexOf(")"));
			var currSegInRoot = false;
			for (var j in rootArray) if (rootArray[j]==currIndex) currSegInRoot = true;
			var checkRoot = (currSegInRoot)? " CHECKED " : " ";
			var checkAff  = (currSegInRoot)? " " : " CHECKED ";
			
			segRow += "<TD CLASS='tableau5' STYLE='font-size:150%; text-align:center;'>" + segmentHTML(inputs[0],i,0) + "</TD>";
			
			rootRow += "<TD CLASS='tableau2'><INPUT TYPE='radio' name='r"+i+"' "+ checkRoot +" onClick='updateMorph("+i+",1)'></TD>";
			affRow  += "<TD CLASS='tableau2'><INPUT TYPE='radio' name='r"+i+"' "+ checkAff  +" onClick='updateMorph("+i+",0)'></TD>";
		}
		morphHTML += "<TR>" + segRow + "</TR><TR>" + rootRow + "</TR><TR>" + affRow + "</TR>";
		morphHTML += "</TABLE><BR><BR>";
		morphHTML += "Root segments must be contiguous in the input.<BR>At least one segment must belong to the root."
		document.getElementById("inputMorph").innerHTML = morphHTML;
		

	} else {

		document.forms["inputEditor"].deleteall.disabled = true;
		document.forms["inputEditor"].backspace.disabled = true;
		document.forms["inputEditor"].plusmora.disabled = true;
		document.forms["inputEditor"].minusmora.disabled = true;
		document.getElementById("newInput").innerHTML = "use the mouse or the keyboard to add segments";
		document.cookie = "inputs=::";
		

		var morphHTML = "<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=6>";
		var segRow = "<TD CLASS='tableau3' STYLE='height:2em;'>&nbsp;</TD>";
		var rootRow = "<TD CLASS='tableau4'>Root:</TD>";
		var affRow  = "<TD CLASS='tableau4'>Affix:</TD>";
		morphHTML += "<TR>" + segRow + "</TR><TR>" + rootRow + "</TR><TR>" + affRow + "</TR>";
		morphHTML += "</TABLE><BR><BR>Your input must contain segments before you can specify its morphological structure.<BR>You can use the keyboard to add segments.<BR>";
		document.getElementById("inputMorph").innerHTML = morphHTML;
	}
}

function updateMorph(position,inRoot){
	
	var rootFirst = -1;
	var rootLast = -1;

	var segArray  = []
	if (inputs[0].segments) segArray = inputs[0].segments.split(",")

	for (var i=0; i<segArray.length ; i++) {
		if (document.forms.morphEditor["r"+i][0].checked && rootFirst==-1) rootFirst = i;
		if (document.forms.morphEditor["r"+i][0].checked) rootLast = i;
	}

	/// check root for contiguity
	var rootContig = true;
	for (var i=rootFirst ; i < rootLast ; i++) {
		if (document.forms.morphEditor["r"+i][1].checked) rootContig = false
	}
	if (!rootContig) {
		document.forms.morphEditor["r"+position][inRoot].checked = true;
		alert("The root must be contiguous in the input.");
	}

	/// make sure root has something in it
	if (rootFirst == -1) {
		document.forms.morphEditor["r"+position][0].checked = true;
		alert("The root must contain at least one segment.");
	}
	
	/// update root;
	var root = []
	for (var i=0; i<segArray.length ; i++) {
		var currSegIndex = segArray[i].substring(segArray[i].indexOf("(")+1,segArray[i].indexOf(")"));
		if (document.forms.morphEditor["r"+i][0].checked) root[root.length] = currSegIndex;
	}
	inputs[0].root = root.join(",");
	updateInput();
	
}


function checkIndex(position){
	var currIndex = parseInt(document.forms["corrEditor"]["seg"+position].value) || 0;

	var segArray  = []
	if (inputs[0].segments) segArray = inputs[0].segments.split(",")
	if (position<segArray.length) {
		var currSegment = segArray[position];
		var currSegPhoneme = currSegment.substring(0,currSegment.indexOf("("))
		segArray[position] = currSegPhoneme + "(" + currIndex + ")";
		inputs[0].segments = segArray.join(",");
	}

	var rootArray = [];
	if (inputs[0].root) rootArray = inputs[0].root.split(",");

	/// update root segments
	


	updateInput();
	
}

///////////////////


function countMoras(candidate,segmentPos) {

	var segArray = []
	if (candidate.segments) segArray = candidate.segments.split(",")

	var currSegment    = segArray[segmentPos]
	var currSegPhoneme = currSegment.substring(0,currSegment.indexOf("("))
	var currSegIndex   = currSegment.substring(currSegment.indexOf("(")+1,currSegment.indexOf(")"))

	var moras = candidate.moras.countInstances("("+currSegIndex+")")

	return moras; 
}



function segmentHTML(candidate,segmentPos,showIndex) {

	var segStr = ""
	var segArray  = []
	if (candidate.segments) segArray = candidate.segments.split(",")
	
	var currSegment = segArray[segmentPos]
	var currSegPhoneme = currSegment.substring(0,currSegment.indexOf("("))
	var currSegIndex   = currSegment.substring(currSegment.indexOf("(")+1,currSegment.indexOf(")"))

	var moraPreHTML = ""
	var moraPostHTML = ""
	var moraCount =  countMoras(candidate,segmentPos)

	if (seg[currSegPhoneme].cons == "C" && moraCount == 1) {
		moraPostHTML += "<SPAN CLASS='mora'>µ</SPAN>"
	}
	if (seg[currSegPhoneme].cons == "C" && moraCount == 2) {
		moraPostHTML += "<SPAN CLASS='mora'>µµ</SPAN>"
	}
	if (seg[currSegPhoneme].cons == "V" && moraCount == 2) {
		moraPostHTML += (alphabet.indexOf("U")>-1) ? "&#720;" : "&#249;"				
	}
	if (seg[currSegPhoneme].cons == "V" && moraCount == 3) {
		moraPostHTML += (alphabet.indexOf("U")>-1) ? "&#720;&#720;" : "&#249;&#249;"				
	}

 	segStr += (alphabet.indexOf("U")>-1) ? "<SPAN CLASS='segmentU'>" : "<SPAN CLASS='segment'>";
	segStr += seg[currSegPhoneme].symbol + moraPostHTML + "</SPAN>"  
	if (showIndex && currSegIndex) segStr +=  "<SUB>" + currSegIndex + "</SUB> "

 
	return segStr
}


function candHTML(candidate,showIndex){

	var candStr = ""
	if (showIndex == null) showIndex = false

	var segArray  = []
	if (candidate.segments) segArray = candidate.segments.split(",")


	var rootFirst = -1;
	var rootLast = -1;
	var root = "," + candidate.root + ",";
	
	for (var i=0 ; i<segArray.length ; i++) {
		var currSegIndex   = segArray[i].substring(segArray[i].indexOf("(")+1,segArray[i].indexOf(")"))
		if (root.indexOf(","+currSegIndex+",")!=-1 && rootFirst==-1) rootFirst = i;
		if (root.indexOf(","+currSegIndex+",")!=-1) rootLast = i ;
	}

	if (rootFirst==0) rootFirst = -1;
	if (rootLast==(segArray.length-1)) rootLast  = -1;



	for (var i=0 ; i < segArray.length ; i++) {
		if (i==rootFirst) candStr += "[";
		candStr += segmentHTML(candidate,i,showIndex);
		if (i==rootLast) candStr += "]";
	}
	return candStr
}







//////////////////////// 

function link(segments,moras,root) {

	this.segments  = (segments == null)? "" : segments;
	this.moras     = (moras == null)   ? "" : moras;
	this.root      = (root == null)    ? "" : root;
	this.syllables = "";
}

function findPhonemes(PCat) {
	var tempArr = PCat.split("#")
	var phonemeArr = []
	for (var i in tempArr) {
		if(tempArr[i]!="" && tempArr[i]!=",") {
			var currPhoneme = ""
			currPhoneme = this.segments.substring(0,this.segments.indexOf("#"+parseInt(tempArr[i])+"#"))
			currPhoneme = currPhoneme.substring(currPhoneme.lastIndexOf(",")+1,currPhoneme.length) 
			phonemeArr[phonemeArr.length] = currPhoneme
		}
	}
	return phonemeArr
}
link.prototype.findPhonemes = findPhonemes

function countInstances(searchStr) {

	var instances = 0
	for (var i=0 ; i < this.length ; i++) {
		if (this.substring(i,this.length).indexOf(searchStr) != -1) {
			instances++
			i += this.substring(i,this.length).indexOf(searchStr) + searchStr.length - 1
		}
	}
	return instances
}
String.prototype.countInstances = countInstances


/////////////


///Keyboard input

document.onkeypress = keyDown ;
if (document.all) document.onkeydown =  keyDown ;

function keyDown(e)
{
	
	var evtobj = window.event ? event : e; //distinguish between IE's explicit event object (window.event) and Firefox's implicit.
	var unicode = evtobj.charCode ? evtobj.charCode : evtobj.keyCode;
	var actualkey = String.fromCharCode(unicode);
	
	if (unicode==8)  { removeSegment(0); return false } 
	if (unicode==32) { return false }

	if (actualkey == "=" || actualkey == "+") addMora(0);
	if (actualkey == "-" || actualkey == "_") removeMora(0);

	if (actualkey == "/" || actualkey == "?") addSegment(0,"glot");

	if (actualkey == ":" || actualkey == ";") addUmlaut(0);

	if (actualkey == "a") addSegment(0,"a");
	if (actualkey == "b") addSegment(0,"b");
	if (actualkey == "c") addSegment(0,"ch");
	if (actualkey == "d") addSegment(0,"d");
	if (actualkey == "e") addSegment(0,"e");
	if (actualkey == "f") addSegment(0,"f");
	if (actualkey == "g") addSegment(0,"g");
	if (actualkey == "h") addSegment(0,"h");
	if (actualkey == "i") addSegment(0,"i");
	if (actualkey == "j") { (alphabet.indexOf("IPA")==-1) ? addSegment(0,"j") : addSegment(0,"y") };
	if (actualkey == "k") addSegment(0,"k");
	if (actualkey == "l") addSegment(0,"l");
	if (actualkey == "m") addSegment(0,"m");
	if (actualkey == "n") addSegment(0,"n");
	if (actualkey == "o") addSegment(0,"o");
	if (actualkey == "p") addSegment(0,"p");
	if (actualkey == "q") addSegment(0,"q");
	if (actualkey == "r") addSegment(0,"r");
	if (actualkey == "s") addSegment(0,"s");
	if (actualkey == "t") addSegment(0,"t");
	if (actualkey == "u") addSegment(0,"u");
	if (actualkey == "v") addSegment(0,"v");
	if (actualkey == "w") addSegment(0,"w");
	if (actualkey == "x") addSegment(0,"x");
	if (actualkey == "y") {   (alphabet.indexOf("IPA")==-1) ? addSegment(0,"y") : addSegment(0,"uumlaut") };
	if (actualkey == "z") addSegment(0,"z");
	if (actualkey == "@") addSegment(0,"schwa");


	if (!document.all) if (actualkey == "A") addSegment(0,"rounda");
	if (!document.all) if (actualkey == "D") addSegment(0,"D");
	if (!document.all) if (actualkey == "E") addSegment(0,"E");
	if (!document.all) if (actualkey == "F") addSegment(0,"F");
	if (!document.all) if (actualkey == "G") addSegment(0,"G");
	if (!document.all) if (actualkey == "H") addSegment(0,"voicedh");
	if (!document.all) if (actualkey == "I") addSegment(0,"I");
	if (!document.all) if (actualkey == "L") addSegment(0,"ly");
	if (!document.all) if (actualkey == "O") addSegment(0,"O");
	if (!document.all) if (actualkey == "N") addSegment(0,"engma");
	if (!document.all) if (actualkey == "Q") addSegment(0,"ae");
	if (!document.all) if (actualkey == "R") addSegment(0,"R");
	if (!document.all) if (actualkey == "S") addSegment(0,"sh");
	if (!document.all) if (actualkey == "T") addSegment(0,"T");
	if (!document.all) if (actualkey == "U") addSegment(0,"U");
	if (!document.all) if (actualkey == "V") addSegment(0,"V");
	if (!document.all) if (actualkey == "X") addSegment(0,"X");
	if (!document.all) if (actualkey == "Y") addSegment(0,"Uumlaut");
	if (!document.all) if (actualkey == "Z") addSegment(0,"zh");


}


