﻿var ns4=(document.layers);
var ie4=(document.all && !document.getElementById);
var ie5=(document.all && document.getElementById);
var ns6=(!document.all && document.getElementById);
var currentGPC;
var gpcList=new Array;
function highlightCell(targets,clsName){
  	var temp=new Array;
  	temp= targets.split(',');
	for(var i=0; i<temp.length; i++){
		if(ns4){// Netscape 4
			document.layers[temp[i]].borderColor="red";
		}
		else if(ie4){// Explorer 4
			document.all[temp[i]].style.borderColor="red";
		}
		else if(ns6 || ie5){// W3C - Explorer 5+ and Netscape 6+
			if(document.getElementById(temp[i])){
				addClass(document.getElementById(temp[i]),clsName);
			} else {
				continue;
			}
		}
	}
}
function normalCell(targets,clsName){
  	var temp=new Array;
  	temp=targets.split(',');
	for(var i=0; i<temp.length; i++){
		if(ns4){// Netscape 4
			document.layers[temp[i]].borderColor="#BFBFBF";
		}
		else if(ie4){// Explorer 4
			document.all[temp[i]].style.borderColor="#BFBFBF";
		}
		else if(ns6 || ie5){// W3C - Explorer 5+ and Netscape 6+
			if(document.getElementById(temp[i])){
				removeClass(document.getElementById(temp[i]),clsName);
			} else {
				continue;
			}
		}
	}
}
function hasClass(ele,cls) {
	return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
	//alert(ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)')));
}
function addClass(ele,cls) {
	if (!hasClass(ele,cls)) ele.className += " "+cls;
}
function removeClass(ele,cls) {
	if (hasClass(ele,cls)) {
		var reg=new RegExp('(\\s|^)'+cls+'(\\s|$)');
		ele.className=ele.className.replace(reg," ");
	}
}
function toggle_hide(targets) { // handles a csv string as argument. uses class names to control visibility
	// called by checkboxes "Show Rows"
  	var target=new Array;
  	target= targets.split(",");
	for(var t=0; t<target.length; t++) { // for every argument, eg: "v,vr,vd"
		var me=document.getElementsByName(target[t]);
		for(var a=0;a<me.length;a++){ // get every element with that name
			if(document.getElementById("hide"+targets).checked==false){
				addClass(me[a],"hidden");
			} else {
				removeClass(me[a],"hidden");
			}
		}
	}
}
function playSound(surl) {
	document.getElementById("dummyspan").innerHTML="<embed src='"+surl+"' hidden=true autostart=true loop=false>";
}
function show(id){
//takes a comma separated string as argument
// shows divs with css style block attribute (not suitable for inline elements)
	var temp=id.split(',');
	for(var i=0; i<temp.length; i++){
		if(ns4){// Netscape 4
			document.layers[id].visibility="show";
		}
		else if(ie4){// Explorer 4
			document.all[id].style.visibility="visible";
		}
		else if(ns6 || ie5){
			document.getElementById(temp[i]).style.display= "block";
		}
	}
}

function hide(id){
//takes a comma separated string as argument
	var temp=id.split(',');
	for(var i=0; i<temp.length; i++){
		if(ns4){ // Netscape 4
			document.layers[id].visibility="hide";
		}
		else if(ie4){ // Explorer 4
			document.all[id].style.visibility="hidden";
		}
		else if(ns6 || ie5){ // W3C Netscape 6+
			document.getElementById(temp[i]).style.display="none";
		}
	}
}
function toggleClass(el,clsName) {
	var x=document.getElementsByTagName(el);
	for(var i=0; i<x.length; i++){
		if(document.getElementById("hide"+clsName).checked==false && hasClass(x[i],clsName)){
			addClass(x[i],"hidden");
		}
		if(document.getElementById("hide"+clsName).checked==true && hasClass(x[i],clsName)){
			removeClass(x[i],"hidden");
		}
	}
}
function toggleClassByTagName(el,clsName) {
	var x=document.getElementsByTagName(el);
	for(var i=0; i<x.length; i++){
		if(document.getElementById("hide"+clsName).checked==false && hasClass(x[i],clsName)){
			addClass(x[i],"hidden");
		}
		if(document.getElementById("hide"+clsName).checked==true && hasClass(x[i],clsName)){
			removeClass(x[i],"hidden");
		}
	}
}
function removeHighlights(cls){
	var cell=document.getElementsByTagName('td');
	for(i=0; i<cell.length; i++){
		if(hasClass(cell[i],cls)){
			removeClass(cell[i],cls);
		}
	}
}
function findCells(clsName){
	var aTemp=new Array;// cleaned up word list from user input box
	var aWordlist= new Array;//list of unique words compiled from the user input box
	var residue='';
	//get source document and clean it up
	aTemp=document.getElementById('output').value.replace(/[\.\,\.\!\?\;\:\'\'\?\‘\’\‚\?\“\”\„\…\'\"]/g,' ').replace(/\s+/g,' ').replace(/\n/g,''); //remove punctuation
	aTemp=aTemp.replace(/\n/g,'').split(/\s/); //remove multiple lines
	if(/_/.test(aTemp[0])==true){
		findGPCIds(aTemp);
	}
	var totalWords=aTemp.length;
	//populate the wordlist box with a list of unique words the user supplied
	for(var i in aTemp){
		var temp=aTemp[i].toLowerCase(); // we should really try the
		addItemToArray(aWordlist,temp);
	}
	for(var i in aWordlist) { // for every word in the textbox
		var found=0;
		for(var a in Eng){ // every array in Eng[]
			var temp=new Array;
			temp=Eng[a].split(","); // every word in a particular array. eg. Eng["a_a"]='bat,cat,nap,...';
			for(var t in temp) {
				if(temp[t]==aWordlist[i]) {
					found=1;
					var temp2= new Array;
					temp2= a.split("_");
					cellId=temp2[0]+"_"+temp2[1];
					highlightCell(cellId,clsName);
					var cell=document.getElementById(cellId);
					var d=document.createElement('div');
					var newId="found_"+cellId;
					d.id=newId;
					//d.classname="found";
					//alert(document.getElementById(newId));
					if(!document.getElementById(newId)){
						cell.appendChild(d);
					}
					document.getElementById(newId).innerHTML+=aWordlist[i]+' ';
				}
			}
		}
		if(found==0) {
		//if the word hasn't matched we add it to the residue variable.
			residue += aWordlist[i]+' ';
		}
	}
	if(residue.length > 1) {
		//here we output the residue variable with words that haven't matched.
		document.getElementById('residue').value=residue;
		show('residue_box');
	}
}
function clearCellHighlight(clsName,cellId){
	document.getElementById(cellId).clsName='';
}
function clearCells(clsName) {
	for(var a in Eng){
		var temp2= new Array;
		temp2= a.split("_");
		cellId=temp2[0]+"_"+temp2[1];
		normalCell(cellId,clsName);
		var newId="found_"+cellId;
		var cell=document.getElementById(cellId);
		if(document.getElementById(newId)){
			cell.removeChild(cell.lastChild);
		}
	}
	document.getElementById('residue').value='';
	hide('residue_box');
}


function toggle_highlight(check_box,targets,clsName){
// this function can be called by a checkbox to highlight elements such as a table cell
	var temp=new Array;
	temp=targets.split(",");
	for(var i in temp) {
		if(document.getElementById(temp[i])){
			if(document.getElementById(check_box).checked==true) {
				highlightCell(temp[i],clsName);
			} else {
				normalCell(temp[i],clsName);
			}
		} else {
			continue;
		}
	}
}

function countCells() {
	var uniqueWords=parseInt(document.getElementById('uniqueWords1').innerHTML);
	var sortedWords=parseInt(document.getElementById('sortedWords').innerHTML);
	var visibleCells=0;
	var visibleHigh=0;
	var visibleMid=0;
	var visibleLow=0;
	var highVocab=0;
	var midVocab=0;
	var lowVocab=0;
	var totalVocab=0;
	var cellIdDone='';
	// to calculate this properly we should do a union on all the arrays that have been highlighted and are visible to get a unique word list
	// then we should do a union on those arrays which are not highlighted (but still visible) and do a-b to get the actual number of words left.
	// the current code works accurately so long as you run it on 1 syllable vowels only
	for(var a in Eng){
		var temp=new Array;
		temp=a.split("_");
		cellId=temp[0]+"_"+temp[1];
		var el=document.getElementById(cellId);
		if(cellId != cellIdDone) {
			// the following line checks for 3 or and 2 not conditions (high OR mid OR low AND NOT hidden cell AND NOT hidden row)
			if( (hasClass(el,'high') || hasClass(el,'mid') || hasClass(el,'low') ) &&! hasClass(el,'hidden')  &&! hasClass(document.getElementById(temp[0]+'_row'),'hidden')) {
				visibleCells++;
				cellIdDone=cellId;
			}
		}
	}
	alert(visibleCells+' visible GPCs');
}
function countHilites(clsName) {
	var visibleCells=0;
	var a;
	el=document.getElementById('GPC_table').getElementsByTagName('td');
	for(a=0; a < el.length; a++){
		if(hasClass(el[a],clsName) &&! hasClass(el[a],'hidden')  ) {
			visibleCells++;
		}
	}
	alert(visibleCells+' highlighted GPCs');
}

function loadWordList(listId) {
	// list1=Dolch Sight Word list
	var list1='a,all,after,always,about,and,am,again,around,better,away,are,an,because,bring,big,at,any,been,carry,blue,ate,as,before,clean,can,be,ask,best,cut,come,black,by,both,done,down,brown,could,buy,draw,find,but,every,call,drink,for,came,fly,cold,eight,funny,did,from,does,fall,go,do,give,don\'t,far,help,eat,going,fast,full,hers,four,had,first,got,I,get,has,five,grow,in,good,her,found,hold,is,has,him,gave,hot,it,he,how,goes,hurt,jump,into,just,green,if,little,like,know,its,keep,look,must,let,made,kind,make,new,live,many,laugh,me,no,may,off,light,my,now,of,or,long,not,on,old,pull,much,one,our,once,read,myself,play,out,open,right,never,red,please,over,sing,only,run,pretty,put,sit,own,said,ran,round,sleep,pick,see,ride,some,tell,seven,the,saw,stop,their,shall,three,say,take,these,show,to,she,thank,those,six,two,so,them,upon,small,up,soon,then,us,start,we,that,think,use,ten,yellow,there,walk,very,today,you,they,where,wash,together,this,when,which,try,too,why,warm,under,wish,want,work,was,would,well,write,went,your,what,white,who,will,with,yes';
	// list2=Top 200 words from Brown Corpus
	var list2='the,of,and,to,a,in,that,is,was,he,for,it,with,as,his,on,be,at,by,I,this,had,not,are,but,from,or,have,an,they,which,one,you,were,her,all,she,there,would,their,we,him,been,has,when,who,will,more,no,if,out,so,said,what,up,its,about,into,than,them,can,only,other,new,some,time,could,these,two,may,then,do,first,any,my,now,such,like,our,over,man,me,even,most,made,after,also,did,many,before,must,through,back,years,where,much,your,way,well,down,should,because,each,just,those,people,Mr,how,too,little,US,State,good,very,make,world,still,see,own,men,work,long,here,get,both,between,life,being,under,never,day,same,another,know,year,while,last,might,great,old,off,come,since,go,against,came,right,states,used,take,three,himself,few,house,use,during,without,again,place,American,around,however,home,small,found,Mrs,thought,went,say,part,once,high,general,upon,school,every,don\'t,does,got,United,left,number,course,war,until,always,away,something,fact,water,though,less,public,put,think,almost,hand,enough,far,took';
	// list3=Dianne McGuinness' sight word list
	var list3='a,again,are,been,could,do,does,door,enough,father,friend,together,give,gone,great,have,into,live,of,once,one,people,said,says,should,the,their,there,through,to,today,two,very,was,were,what,where,who,would,half,calf,choir,yacht';
	// list4=Green eggs and ham word list
	var list4='a,am,and,anywhere,are,be,boat,box,car,could,dark,do,eat,eggs,fox,goat,good,green,ham,here,house,I,if,in,let,like,may,me,mouse,not,on,or,rain,Sam,say,see,so,thank,that,the,them,there,they,train,tree,try,will,with,would,you';
	// list5=2 sound word list
	var list5='ace,ache,ad,add,age,aid,aide,ail,aim,air,aisle,ale,all,am,an,ape,are,as,ash,ass,at,ate,awed,bay,be,bee,boo,bough,bow,boy,burr,buy,by,bye,caw,coo,coup,cow,coy,cur,day,dew,die,do,doe,dough,due,dye,ear,earl,earn,earth,ease,eat,ebb,edge,eel,egg,eight,eighth,eke,err,eve,ewe,eyed,eyes,eye\'s,fee,fir,foe,for,fur,gay,gee,ghee,gnaw,gnu,go,goo,guy,hay,he,hee,heir,her,herb,hey,hi,high,him,hoe,hour,how,huh,ice,I\'d,if,ill,in,inn,ire,irk,is,isle,it,I\'ve,jaw,jay,jew,joe,joy,key,knee,knew,know,law,lay,lea,lee,lie,lieu,loo,low,lye,maw,may,me,mow,my,myrrh,nay,nee,new,nigh,no,now,oak,oar,oat,oath,odd,ode,of,off,ohm,oil,on,ooze,or,ore,ought,our,out,owed,owes,owl,own,paw,pay,pea,pee,per,pie,pow,purr,quay,raw,ray,roe,row,rue,rye,saw,say,sea,see,sew,she,shoe,shoo,show,shy,sigh,sioux,sir,so,sow,soy,sue,tea,tee,thaw,the,thee,they,thigh,thou,though,thy,tie,to,toe,too,tow,toy,two,ugh,up,urge,urn,us,vie,vow,way,we,wee,weigh,were,we\'re,whew,whey,who,whoa,why,woe,woo,wow,wry,yew,you,zoo';
	var activeList;
	if(listId == 'list1') activeList=list1;
	if(listId == 'list2') activeList=list2;
	if(listId == 'list3') activeList=list3;
	if(listId == 'list4') activeList=list4;
	if(listId == 'list5') activeList=list5;

	currentGPC=''; // empties the value to put at the top of the printed page 'focus on: '
	document.getElementById('output').value=activeList.split(',').join('\n');
	outputLength();
}

function addItemToArray(destinationArray,Item) {
	var aItem=new Array;
	var found=0;
	aItem=Item.split(',');
	for(var j in aItem) {
		for (var i in destinationArray) {
			if(aItem[j]==destinationArray[i]) {
				found=1;
				break;
			}
		}
		if(found==0) {
			destinationArray.push(aItem[j]);
		}
	}
}

//function getDataVariables(datum){
//	var tempItems=datum.split(',');
//	for(var i in tempItems){
//		document.getElementsById(i).value
//	}
//}

function getData(sdata){ //csv string with 2 html id elements
	var aTemp=new Array;
	aTemp=sdata.split(',');
	groupA=document.getElementById(aTemp[0]).value.split(/\n/);
	//alert('groupA test: '+groupA);
	groupB=document.getElementById(aTemp[1]).value.split(/\n/);
	//alert('groupB: '+groupB);
}


function union(a) { //combine content but no duplicates
	aUnion.length=0;
	getData(a);
	for(var i in groupA){
		if(groupA[i] !=''){
			addItemToArray(aUnion,groupA[i]);
		}
	}
	for(var i in groupB){
		if(groupB[i] !=''){
			addItemToArray(aUnion,groupB[i]);
		}
	}
}

function intersect(sdata) {// items in common
	//assumes a csv string representing 2 html entities containing a list of words separated by '\n'
	aIntersect.length=0;
	getData(sdata);
	for(var a in groupA){
		for(var i in groupB){
			if(groupA[a] || groupB[i] !=''){  //both must not be empty
				if(groupA[a]==groupB[i]){  //if equal
					addItemToArray(aIntersect,groupA[a]); //add to intersect array
				} // if unequal try changing case and test again
			}
		}
	}
}

function diff(sdata){
	aDiff.length=0;
	getData(sdata);
	for(var a in groupA){
		found=0;
		for(var b in groupB){
			if(groupA[a]!=''){
				if(groupA[a]==groupB[b]){
					found=1;
				}
			//continue;
			}
		}
		if(found==0){
			addItemToArray(aDiff,groupA[a]);
		}
	}
}

function sym_diff(sdata) {
	aSymDiff.length=0;
	getData(sdata);
	for(var a in groupA){
		found=0;
		for(var b in groupB){
			if(groupA[a]!=''){
				if(groupA[a]==groupB[b]){
					found=1;
				}
			continue;
			}
		}
		if(found==0){
			addItemToArray(aSymDiff,groupA[a]);
		}
	}
	for(var b in groupB){
		found=0;
		for(var a in groupA){
			if(groupB[b]!=''){
				if(groupB[b]==groupA[a]){
					found=1;
				}
			continue;
			}
		}
		if(found==0){
			addItemToArray(aSymDiff,groupB[b]);
		}
	}
}

function copyToClipboard(sourceBox) {
	var temp1=null;
	var hidden1=null;
	document.getElementById('hidden1').value=document.getElementById(sourceBox).value;
	temp1=document.getElementById('hidden1').createTextRange();
	temp1.select();
	temp1.execCommand('copy');
}

function convertStoryToList(sourceText){
	var tempList=sourceText.split(/\b/);
	return tempList;
}

function convertArrayToList(sourceArray){
	var tempList=sourceArray.split(',');
	return tempList;
}

function convertToList(sourceBox){
	var temp=document.getElementById(sourceBox).value.split(',').join('\n');
	document.getElementById(sourceBox).value=temp;
	temp='';
}

function convertToCSV(sourceBox){
	var temp=document.getElementById(sourceBox).value.split('\n').join(',');
	document.getElementById(sourceBox).value=temp;
	temp='';
}

function filterList(sourceBox,destinationBox,re){ //goes through the list with the regexp and copies results to the output area
	var aTemp=new Array;
	var sourceData=new Array;
	sourceData=document.getElementById(sourceBox).value.split('\n');
	for(var i in sourceData){
		if(sourceData[i].match(re)) {
			addItemToArray(aTemp,sourceData[i]);
		}
	}
	if(sourceBox == destinationBox){
		aTemp=aTemp.join('\n');
		document.getElementById(sourceBox).value=aTemp;
		getLength(destinationBox);
	} else {
		aTemp=aTemp.join('\n');
		document.getElementById(destinationBox).value=aTemp;
		getLength(destinationBox);
	}
}

function getLength(destinationBox){
	if(destinationBox == 'output'){
		document.getElementById('outputLength').innerHTML='Total items: '+document.getElementById(destinationBox).value.split('\n').length;
	}
	if(destinationBox == 'groupA'){
		document.getElementById('ALength').innerHTML='Total items: '+document.getElementById(destinationBox).value.split('\n').length;
	}
	if(destinationBox == 'groupB'){
		document.getElementById('BLength').innerHTML='Total items: '+document.getElementById(destinationBox).value.split('\n').length;
	}
}

function loadList(arrayName,destination){
	// can load multiple lists if arrayName is a csv string
	document.getElementById(destination).value=''
	var temp=new Array;
	var sList='';
	temp.length=0;
	if(arrayName.match(/\,/)){
		temp=arrayName.split(',');
	} else {
		temp[0]=arrayName;
	}
	for(var i in temp){
		if(Eng[temp[i]]){
			sList += Eng[temp[i]].split(',').join('\n')+'\n';
		} else {
			alert('Sorry, there is no vocabulary for the: '+ temp[i] +' group yet.');
		}
	}
	sList=sList.replace(/\n$/,''); //remove last new line
	document.getElementById(destination).value=sList;
	getLength(destination);
	currentGPC=arrayName;
}
function randOrd(a,b) {
	return (Math.round(Math.random())-0.5);
}
function randomizeList(source) {
	var wordList=document.getElementById(source).value;
	alert(wordList);
	wordList.sort(randOrd); //randomize the list
	document.getElementById(source).value=wordList;
}

function sortList(){
	var temp=document.getElementById('output').value.split('\n');
	temp=temp.sort().join('\n');
	document.getElementById('output').value=temp;
}

function doPopUp(url) {
	doPopUpWindow=window.open(url,"_blank","menubar=yes,resizable=yes,width=870,height=575,left=25,top=25,screenX=150,screenY=150,scrollbars=yes");
}

function sortCVC(source){
var i1C="(b|c|d|f|g|h|j|k|l|m|n|p|q|r|s|t|v|w|x|y|z)"; //20 items
var i2C="(bl|br|chl|chr|cl|cr|dr|dw|fl|fr|gl|gr|kl|kr|phl|phr|pl|pr|qu|sc|sch|shr|sk|sl|sm|sn|sp|sph|st|sw|thr|thw|tr|tw)"; //33 items
var i3C="(scr|skr|spl|spr|squ|str)"; //6 items
var iD="(ch|gu|gh|gn|kn|ph|ps|rh|sh|th|wh|wr)"; // 11 items
var fD="(bb|bt|cc|ce|ch|ck|dd|dge|ff|ge|gg|gh|gm|gn|gue|hn|ll|mb|mm|mn|nn|ng|rr|pp|ph|se|sh|ss|th|the|tch|tt|sh|ph|tch|zz|ze)";
var doubleLetters="(bb|cc|dd|ff|gg|ll|mm|nn|pp|rr|ss|tt|zz)";
var v1="(a|e|ë|i|o|u|y)"; //7 items includes y (ë occurs very seldom)
var v2="(ai|ay|au|aw|ea|ee|ei|eigh|eu|ew|ey|ie|igh|iu|oa|oi|oo|ou|ough|ow|oy|ue|ui)"; //22 items
var f1C="(b|c|d|f|g|h|j|k|l|m|n|p|q|r|s|t|v|w|x|z)"; // 19 items (no 'y')
var f2C="(bl|cht|cks|ckt|ct|dth|ffs|ft|fth|ght|lb|lc|lch|ld|lf|lk|lm|ln|lp|lph|lsh|lt|lth|mn|mp|mph|ms|mth|nc|nch|nck|nd|ngs|nk|ngth|ns|nt|nth|pl|pt|pth|rb|rc|rch|rd|rf|rff|rg|rk|rl|rm|rn|rp|rph|rrh|rs|rsh|rt|rth|rv|sc|sch|sk|sm|sp|st|thm|thmn|x|ps|ts)"; //70 items
var f3C="(cts|dst|lst|ltz|mpt|nct|nds|nks|nsk|nst|nts|nx|pts|rds|rld|rmth|rnt|rst|rtz|xt|xth)"; //19 items
var mC="(b|c|d|f|g|h|j|k|l|m|n|p|q|r|s|t|v|w|x|z)"; //19 items word medial consonants (no 'y')
var aListToSort= new Array ;
aListToSort=document.getElementById(source).value.split(/\n/);
var temp='';

var cvc= new Array;
cvc['cv']=new Array;
cvc['dv']=new Array;
cvc['ccv']=new Array;
cvc['cccv']=new Array;
cvc['cvv']=new Array;
cvc['dvv']=new Array;
cvc['ccvv']=new Array;
cvc['cccvv']=new Array;

cvc['vc']=new Array;
cvc['vvc']=new Array;
cvc['vd']=new Array;
cvc['vvd']=new Array;
cvc['vcc']=new Array;
cvc['vvcc']=new Array;
cvc['vccc']=new Array;
cvc['vvccc']=new Array;

cvc['vce']=new Array;
cvc['vvce']=new Array;
cvc['vde']=new Array;
cvc['vvde']=new Array;
cvc['vcce']=new Array;
cvc['vvcce']=new Array;
cvc['vccce']=new Array;
cvc['vvccce']=new Array;

cvc['cvc']=new Array;
cvc['cvd']=new Array;
cvc['cvcd']=new Array;
cvc['cvcc']=new Array;
cvc['cvccc']=new Array;
cvc['cvvc']=new Array;
cvc['cvvd']=new Array;
cvc['cvvcc']=new Array;
cvc['cvvccc']=new Array;

cvc['dvc']=new Array;
cvc['dvd']=new Array;
cvc['dvcc']=new Array;
cvc['dvcd']=new Array;
cvc['dvccc']=new Array;
cvc['dvvc']=new Array;
cvc['dvvd']=new Array;
cvc['dvvcc']=new Array;
cvc['dvvccc']=new Array;

cvc['ccvc']=new Array;
cvc['ccvd']=new Array;
cvc['ccvcc']=new Array;
cvc['ccvcd']=new Array;
cvc['ccvccc']=new Array;
cvc['ccvvc']=new Array;
cvc['ccvvd']=new Array;
cvc['ccvvcc']=new Array;
cvc['ccvvccc']=new Array;

cvc['cccvc']=new Array;
cvc['cccvd']=new Array;
cvc['cccvcc']=new Array;
cvc['cccvcd']=new Array;
cvc['cccvccc']=new Array;
cvc['cccvvc']=new Array;
cvc['cccvvd']=new Array;
cvc['cccvvcc']=new Array;
cvc['cccvvccc']=new Array;

// cvc with e-endings
cvc['cvce']=new Array;
cvc['cvde']=new Array;
cvc['cvcce']=new Array;
cvc['cvccce']=new Array;
cvc['cvvce']=new Array;
cvc['cvvde']=new Array;
cvc['cvvcce']=new Array;
cvc['cvvccce']=new Array;

cvc['dvce']=new Array;
cvc['dvde']=new Array;
cvc['dvcce']=new Array;
cvc['dvccce']=new Array;
cvc['dvvce']=new Array;
cvc['dvvde']=new Array;
cvc['dvvcce']=new Array;
cvc['dvvccce']=new Array;

cvc['ccvce']=new Array;
cvc['ccvde']=new Array;
cvc['ccvcce']=new Array;
cvc['ccvccce']=new Array;
cvc['ccvvce']=new Array;
cvc['ccvvde']=new Array;
cvc['ccvvcce']=new Array;
cvc['ccvvccce']=new Array;

cvc['cccvce']=new Array;
cvc['cccvde']=new Array;
cvc['cccvcce']=new Array;
cvc['cccvccce']=new Array;
cvc['cccvvce']=new Array;
cvc['cccvvde']=new Array;
cvc['cccvvcce']=new Array;
cvc['cccvvccce']=new Array;

cvc['multi1']=new Array;
cvc['multi2']=new Array;
cvc['multi20']=new Array;
cvc['multi21']=new Array;
cvc['multi22']=new Array;
cvc['multi23']=new Array;
cvc['multi24']=new Array;
cvc['multi3']=new Array;
cvc['multi4']=new Array;
cvc['multi5']=new Array;
cvc['multi6']=new Array;
cvc['residue']=new Array;

var arrayOfSyllableTypes=new Array;
// open syllables vc
arrayOfSyllableTypes['vc']=new RegExp('(?:\\b'+v1+f1C+'\\b)','i');
arrayOfSyllableTypes['vvc']= new RegExp('(?:\\b'+v2+f1C+'\\b)','i');
arrayOfSyllableTypes['vd']=new RegExp('(?:\\b'+v1+fD+'\\b)','i');
arrayOfSyllableTypes['vvd']=new RegExp('(?:\\b'+v2+fD+'\\b)','i');
arrayOfSyllableTypes['vcc']= new RegExp('(?:\\b'+v1 +f2C+'\\b)','i');
arrayOfSyllableTypes['vvcc']= new RegExp('(?:\\b'+v2 +f2C+'\\b)','i');
arrayOfSyllableTypes['vccc']=new RegExp('(?:\\b'+v1+f3C+ '\\b)','i');
arrayOfSyllableTypes['vvccc']=new RegExp('(?:\\b'+v2+f3C+ '\\b)','i');
// open syllables vce
arrayOfSyllableTypes['vce']=new RegExp('(?:\\b'+v1+f1C+'e?\\b)','i');
arrayOfSyllableTypes['vvce']= new RegExp('(?:\\b'+v2+f1C+'e?\\b)','i');
arrayOfSyllableTypes['vde']=new RegExp('(?:\\b'+v1+fD+'e?\\b)','i');
arrayOfSyllableTypes['vvde']=new RegExp('(?:\\b'+v2+fD+'e?\\b)','i');
arrayOfSyllableTypes['vcce']= new RegExp('(?:\\b'+v1 +f2C+'e?\\b)','i');
arrayOfSyllableTypes['vvcce']= new RegExp('(?:\\b'+v2 +f2C+'e?\\b)','i');
arrayOfSyllableTypes['vccce']=new RegExp('(?:\\b'+v1+f3C+ 'e?\\b)','i');
arrayOfSyllableTypes['vvccce']=new RegExp('(?:\\b'+v2+f3C+ 'e?\\b)','i');
// open syllables cv
arrayOfSyllableTypes['cv']= new RegExp('(?:\\b'+i1C+v1+'\\b)','i');
arrayOfSyllableTypes['dv']=new RegExp('(?:\\b'+iD+v1+ '\\b)','i');
arrayOfSyllableTypes['ccv']= new RegExp('(?:\\b'+i2C +v1+'\\b)','i');
arrayOfSyllableTypes['cccv']= new RegExp('(?:\\b'+i3C +v1+'\\b)','i');
arrayOfSyllableTypes['cvv']= new RegExp('(?:\\b'+i1C +v2+'\\b)','i');
arrayOfSyllableTypes['dvv']=new RegExp('(?:\\b'+iD+v2+'\\b)','i');
arrayOfSyllableTypes['ccvv']= new RegExp('(?:\\b'+i2C +v2+'\\b)','i');
arrayOfSyllableTypes['cccvv']= new RegExp('(?:\\b'+i3C +v2+'\\b)','i');
// closed syllables cvc
arrayOfSyllableTypes['cvc']= new RegExp('(?:\\b'+i1C+v1+f1C+'\\b)','i');
arrayOfSyllableTypes['cvd']=new RegExp('(?:\\b'+i1C+v1+fD+'\\b)','i');
arrayOfSyllableTypes['cvcc']= new RegExp('(?:\\b'+i1C +v1+ f2C +'\\b)','i');
arrayOfSyllableTypes['cvcd']= new RegExp('(?:\\b'+i1C +v1+ f1C +fD+'\\b)','i');
arrayOfSyllableTypes['cvccc']= new RegExp('(?:\\b'+i1C +v1+ f3C +'\\b)','i');
arrayOfSyllableTypes['cvvc']= new RegExp('(?:\\b'+i1C +v2+ f1C +'\\b)','i');
arrayOfSyllableTypes['cvvd']=new RegExp('(?:\\b'+ i1C+v2+fD+'\\b)','i');
arrayOfSyllableTypes['cvvcc']= new RegExp('(?:\\b'+i1C +v2+ f2C +'\\b)','i');
arrayOfSyllableTypes['cvvccc']= new RegExp('(?:\\b'+i1C +v2+ f3C +'\\b)','i');

arrayOfSyllableTypes['dvc']=new RegExp('(?:\\b'+ iD+v1+f1C+'\\b)','i');
arrayOfSyllableTypes['dvd']=new RegExp('(?:\\b'+ iD+v1+fD+'\\b)','i');
arrayOfSyllableTypes['dvcc']=new RegExp('(?:\\b'+iD+v1+f2C+'\\b)','i');
arrayOfSyllableTypes['dvcd']=new RegExp('(?:\\b'+iD+v1+f1C +fD+ '\\b)','i');
arrayOfSyllableTypes['dvccc']=new RegExp('(?:\\b'+iD+v1+f3C+'\\b)','i');
arrayOfSyllableTypes['dvvc']=new RegExp('(?:\\b'+iD+v2+f1C+'\\b)','i');
arrayOfSyllableTypes['dvvd']=new RegExp('(?:\\b'+iD+v2+fD+'\\b)','i');
arrayOfSyllableTypes['dvvcc']=new RegExp('(?:\\b'+ iD+v2+f2C +'\\b)','i');
arrayOfSyllableTypes['dvvccc']=new RegExp('(?:\\b'+iD+v2+f3C+'\\b)','i');

arrayOfSyllableTypes['ccvc']= new RegExp('(?:\\b'+i2C +v1+ f1C +'\\b)','i');
arrayOfSyllableTypes['ccvd']=new RegExp('(?:\\b'+i2C +v1+ fD+'\\b)','i');
arrayOfSyllableTypes['ccvcc']= new RegExp('(?:\\b'+i2C +v1+ f2C +'\\b)','i');
arrayOfSyllableTypes['ccvcd']= new RegExp('(?:\\b'+i2C +v1+ f1C +fD+'\\b)','i');
arrayOfSyllableTypes['ccvccc']= new RegExp('(?:\\b'+i2C +v1+ f3C +'\\b)','i');
arrayOfSyllableTypes['ccvvc']= new RegExp('(?:\\b'+i2C +v2+ f1C +'\\b)','i');
arrayOfSyllableTypes['ccvvd']=new RegExp('(?:\\b'+i2C +v2+ fD+'\\b)','i');
arrayOfSyllableTypes['ccvvcc']= new RegExp('(?:\\b'+i2C +v2+ f2C +'\\b)','i');
arrayOfSyllableTypes['ccvvccc']= new RegExp('(?:\\b'+i2C +v2+ f3C +'\\b)','i');

arrayOfSyllableTypes['cccvc']= new RegExp('(?:\\b'+i3C +v1+ f1C +'\\b)','i');
arrayOfSyllableTypes['cccvd']=new RegExp('(?:\\b'+i3C +v1+ fD+'\\b)','i');
arrayOfSyllableTypes['cccvcc']= new RegExp('(?:\\b'+i3C +v1+ f2C +'\\b)','i');
arrayOfSyllableTypes['cccvcd']= new RegExp('(?:\\b'+i3C +v1+ f1C +fD+'\\b)','i');
arrayOfSyllableTypes['cccvccc']= new RegExp('(?:\\b'+i3C +v1+ f3C +'\\b)','i');
arrayOfSyllableTypes['cccvvc']= new RegExp('(?:\\b'+i3C +v2+ f1C +'\\b)','i');
arrayOfSyllableTypes['cccvvd']=new RegExp('(?:\\b'+i3C +v2+ fD+'\\b)','i');
arrayOfSyllableTypes['cccvvcc']= new RegExp('(?:\\b'+i3C +v2+ f2C +'\\b)','i');
arrayOfSyllableTypes['cccvvccc']= new RegExp('(?:\\b'+i3C +v2+ f3C +'\\b)','i');

//***
// closed syllables cvc with e-endings
arrayOfSyllableTypes['cvce']= new RegExp('(?:\\b'+i1C+v1+f1C+'e?\\b)','i');
arrayOfSyllableTypes['cvde']=new RegExp('(?:\\b'+i1C+v1+fD+'e?\\b)','i');
arrayOfSyllableTypes['cvcce']= new RegExp('(?:\\b'+i1C +v1+ f2C +'e?\\b)','i');
arrayOfSyllableTypes['cvccce']= new RegExp('(?:\\b'+i1C +v1+ f3C +'e?\\b)','i');
arrayOfSyllableTypes['cvvce']= new RegExp('(?:\\b'+i1C +v2+ f1C +'e?\\b)','i');
arrayOfSyllableTypes['cvvde']=new RegExp('(?:\\b'+ i1C+v2+fD+'e?\\b)','i');
arrayOfSyllableTypes['cvvcce']= new RegExp('(?:\\b'+i1C +v2+ f2C +'e?\\b)','i');
arrayOfSyllableTypes['cvvccce']= new RegExp('(?:\\b'+i1C +v2+ f3C +'e?\\b)','i');

arrayOfSyllableTypes['dvce']=new RegExp('(?:\\b'+ iD+v1+f1C+'e?\\b)','i');
arrayOfSyllableTypes['dvde']=new RegExp('(?:\\b'+ iD+v1+fD+'e?\\b)','i');
arrayOfSyllableTypes['dvcce']=new RegExp('(?:\\b'+iD+v1+f2C+'e?\\b)','i');
arrayOfSyllableTypes['dvccce']=new RegExp('(?:\\b'+iD+v1+f3C+'e?\\b)','i');
arrayOfSyllableTypes['dvvce']=new RegExp('(?:\\b'+iD+v2+f1C+'e?\\b)','i');
arrayOfSyllableTypes['dvvde']=new RegExp('(?:\\b'+iD+v2+fD+'e?\\b)','i');
arrayOfSyllableTypes['dvvcce']=new RegExp('(?:\\b'+ iD+v2+f2C +'e?\\b)','i');
arrayOfSyllableTypes['dvvccce']=new RegExp('(?:\\b'+iD+v2+f3C+'e?\\b)','i');

arrayOfSyllableTypes['ccvce']= new RegExp('(?:\\b'+i2C +v1+ f1C +'e?\\b)','i');
arrayOfSyllableTypes['ccvde']=new RegExp('(?:\\b'+i2C +v1+ fD+'e?\\b)','i');
arrayOfSyllableTypes['ccvcce']= new RegExp('(?:\\b'+i2C +v1+ f2C +'e?\\b)','i');
arrayOfSyllableTypes['ccvccce']= new RegExp('(?:\\b'+i2C +v1+ f3C +'e?\\b)','i');
arrayOfSyllableTypes['ccvvce']= new RegExp('(?:\\b'+i2C +v2+ f1C +'e?\\b)','i');
arrayOfSyllableTypes['ccvvde']=new RegExp('(?:\\b'+i2C +v2+ fD+'e?\\b)','i');
arrayOfSyllableTypes['ccvvcce']= new RegExp('(?:\\b'+i2C +v2+ f2C +'e?\\b)','i');
arrayOfSyllableTypes['ccvvccce']= new RegExp('(?:\\b'+i2C +v2+ f3C +'e?\\b)','i');

arrayOfSyllableTypes['cccvce']= new RegExp('(?:\\b'+i3C +v1+ f1C +'e?\\b)','i');
arrayOfSyllableTypes['cccvde']=new RegExp('(?:\\b'+i3C +v1+ fD+'e?\\b)','i');
arrayOfSyllableTypes['cccvcce']= new RegExp('(?:\\b'+i3C +v1+ f2C +'e?\\b)','i');
arrayOfSyllableTypes['cccvccce']= new RegExp('(?:\\b'+i3C +v1+ f3C +'e?\\b)','i');
arrayOfSyllableTypes['cccvvce']= new RegExp('(?:\\b'+i3C +v2+ f1C +'e?\\b)','i');
arrayOfSyllableTypes['cccvvde']=new RegExp('(?:\\b'+i3C +v2+ fD+'e?\\b)','i');
arrayOfSyllableTypes['cccvvcce']= new RegExp('(?:\\b'+i3C +v2+ f2C +'e?\\b)','i');
arrayOfSyllableTypes['cccvvccce']= new RegExp('(?:\\b'+i3C +v2+ f3C +'e?\\b)','i');


arrayOfSyllableTypes['multi2']= new RegExp('(?:\\b'+i1C+'+'+v1+'+'+ f1C+'+'+'e?\\b)','i'); // eg: trial - cv.vc
arrayOfSyllableTypes['multi20']= new RegExp('(?:\\by'+v1+'+'+ mC+'+'+v1+'+'+'e?\\b)','i'); //eg: yv.cv matches initial 'y' as consonant
arrayOfSyllableTypes['multi21']= new RegExp('(?:\\b'+mC+'+'+v1+'+'+ f1C+'+'+v1+'+'+'e?\\b)','i'); //eg: cv.cv
arrayOfSyllableTypes['multi22']= new RegExp('(?:\\by'+v1+'+'+ f1C+'+'+v1+'+'+mC+'+'+'e?\\b)','i'); //eg: yv.cvc matches initial 'y' as consonant
arrayOfSyllableTypes['multi23']= new RegExp('(?:\\b'+mC+'+'+v1+'+'+ f1C+'+'+v1+'+'+mC+'+'+'e?\\b)','i'); //eg: cv.cvc
arrayOfSyllableTypes['multi24']= new RegExp('(?:\\b'+v1+'+'+mC+'+'+v1+'+'+ f1C+'+'+'e?\\b)','i'); //eg: vc.vc | v.cvc

arrayOfSyllableTypes['multi3']= new RegExp('(?:\\b'+i1C+'+'+v1+'+'+mC+'+'+v1+'+'+ f1C+'+'+'e?\\b)','i');
arrayOfSyllableTypes['multi4']= new RegExp('(?:\\b'+v1+'+'+mC+'+'+v1+'+'+mC+'+'+v1+'+'+ f1C+'+'+'e?\\b)','i');
arrayOfSyllableTypes['multi5']= new RegExp('(?:\\b'+i1C+'+'+v1+'+'+mC+'+'+v1+'+'+mC+'+'+v1+'+'+ f1C+'+'+'e?\\b)','i');
arrayOfSyllableTypes['multi6']= new RegExp('(?:\\b'+v1+'+'+mC+'+'+v1+'+'+mC+'+'+v1+'+'+mC+'+'+v1+'+'+ f1C+'+'+'e?\\b)','i');

	for(var i in aListToSort){ // for every item in output box
		var found=0;
		for(var a in arrayOfSyllableTypes){ // for every type of syllable type regular expression
			if(arrayOfSyllableTypes[a].test(aListToSort[i]) == true){
				cvc[a].push(aListToSort[i]);
				found=1;
				break;
			}
		}
		if(found==0){
			//alert('found one that doesnt fit: '+aListToSort[i]+ ' ' +cvc['residue'] );
			cvc['residue'].push(aListToSort[i]);
		}
	}
	for(var a in cvc){
		if(cvc[a] != ''){
			temp += cvc[a].join('\n')+'\n';
		}
	}
	document.getElementById(source).value=temp;
}

function element(id){
	if(document.getElementById != null) {
		//alert(document.getElementById(id).value);
		return document.getElementById(id);
	}
	if(document.all != null) {
		return document.all[id];
	}
	if(document.layers != null) {
		return document.layers[id];
	}
	return null;
}

function pageForPrintLayout(aList,row) {
//parameters: wordlist array name,column number, row number
var htmlTop="<html>\n<head>\n<title>Sounds of English Wordlist</title>\n<style>\n table {page-break-after: always;}\n .content{ font-size:18pt; font-family: 'Andika DesRev A', Arial, sans-serif; vertical-align:top; text-align:left;}\n th {font: 14pt serif;}\n h3 { font: 18pt; line-height: 22pt; padding-bottom: 0px; margin-bottom: 0px;}\n .focus {color:red; font-weight: normal;}\n</style>\n</head>\n<body>\n";
//var htmlTop="<html>\n<head>\n<title>Sounds of English Wordlist</title> <style type='text/css'>\n .multi-column {\n font-size: 2em;\n white-space:pre;\n margin: 3em;\n column-count: 3;\n -moz-column-count: 3;\n -webkit-column-count: 3;\n column-gap: 1.5em;\n -moz-column-gap: 1.5em;\n -webkit-column-gap: 20px;\n -moz-column-width: 2em;\n -moz-column-rule: 1px solid #ddccb5;\n -webkit-column-rule: 1px solid #ddccb5;\n -moz-column-height: 200px;\n }\n </style>\n</head>\n<body>";
var htmlBottom="</body>\n</html>";
var tableTop="\n<table cellpadding='2' cellspacing='5' border='0' style='width:700px; height:900px;'>\n";
var tableBottom="</table>\n";
var ro="\t<tr>\n";
var rc="\t</tr>\n";
var page; //this variable contains the html code for the whole page
var num_of_rows=0; //number of words per column
//var col=document.getElementById('printcols').value;
//var col=element('printcols').value;
//var col=document.form1["printcols"].value;
//alert(col);
var focusOn=new Array;
if(currentGPC != '') {
	focusOn=currentGPC.split("_");
} else {
	focusOn[1]= ' ';
}
// doesn't handle split digraphs yet!!
var reg1=new RegExp(focusOn[1]); //regular expression from the GPC focussed on
var boldedWord;
var col=5;
var pageTitle="<tr><th colspan='"+col+"' style='border-bottom: 2px solid black;'>Focus on the letter(s):&nbsp;&nbsp;<span class='focus'><b>"+focusOn[1]+"</b></span></th></tr>\n";
page=htmlTop;
	if(aList.length !=0){//if the wordlist is not empty
		for(var p=0; p < Math.ceil(aList.length/(col*30)); p++){ // this line calculates how many pages you need to print out all the words in aList. Each page is a whole table
			//alert(col);
			page+=tableTop+pageTitle;
			for(var r=0;r<row; r++){
				page+=ro; //outputs a new row <tr>
				for(var c=0;c<col;c++){
					var w=num_of_rows;
					if(w<aList.length){//add only as many cells (columns) as needed
						page+='\t\t<td class="content">';
						while(w<num_of_rows+30){
							if(aList[w] != undefined){
								var word=aList[w].split('.').join(''); // strip the syllable markers from the word and join it again
								//alert(word);
								var x=new Array;
								x=word.split(reg1); // split the word on the portion
								//x=aList[w].split(reg1); // split the word on the portion
								if(focusOn[2] == '1') { // if the stress pattern is equal to 1 only
									boldedWord=x[0]+'<span class="focus">'+focusOn[1]+'</span>'+x[1];
								} else {
									boldedWord=x.join('<span class="focus">'+focusOn[1]+'</span>');
								}
								//alert(boldedWord);
								page+=boldedWord+'<br />';// word which has been bolded on focus GPC
								//page+=aList[w]+'<br />'; //word only (note only 1 line break)
								w++;
							} else {
								break;
							}
						}
					page+='</td>\n';
					num_of_rows+=30;
					}
				}
			page+=rc;
			}
		page+=tableBottom;
		}
	page+=htmlBottom
	dopopup(page);
	} else {//if the wordlist is empty
		alert('You must first select a sound to create a wordlist.');
	}
}
function dopopup(page) {
  var generator=window.open('','hello','menubar=yes,resizable=yes,height=600,toolbars=1,width=750,scrollbars=1');
  //generator.document.open();
  generator.document.write(page);
  generator.document.close();
  return true;
}
function producePrintedPage(){
	//var wordlist=document.getElementById('output').value.split('\n');
	var wordlist=element('output').value.split('\n');
	pageForMultiColumnCSS(wordlist);
	//pageForPrintLayout(wordlist,1);
}

function inArray(item,arrayName){
// to-do: make the match test case-insensitive
	var currentArray=Eng[arrayName];
	var alternateArray=Eng[arrayName+'_2'];
	var sItem=item.toLowerCase();
	for(var i in currentArray){
		currentArray[i]=currentArray[i].toLowerCase();
		if(sItem==currentArray[i]){
			return 1;
		} else if(sItem==currentArray[i]+'s'){//morphological change
			return 1;
		} else if(sItem==currentArray[i]+'ing'){//morphological change
			return 1;
		}
	}
	if(alternateArray){
		for(var i in alternateArray){
			alternateArray[i]=alternateArray[i].toLowerCase();
			if(sItem==alternateArray[i]){
				return 1;
			} else if(sItem==alternateArray[i]+'s'){//morphological change
				return 1;
			} else if(sItem==alternateArray[i]+'ing'){//morphological change
				return 1;
			}
		}
	}
	return 0;
}

function find_dup_vocab() {
	var aMerged=new Array('test','no','test','ok','no','test','yes'); // this array contains all the arrays that have been selected through a checkbox
	var aDup=new Array; //this array should contain vocab which was found to occur more than once
	var prev;
	//check all checkboxes in form to see if they are selected
	//if selected get the value which is the name of an array
	//add each array to a general array
	//sort the array
	//alert('length of aDup is: '+aDup.length);
	aMerged.sort();
	alert(aMerged);
	//for each item (see if it equals the var prev)
	for (x=1; x < aMerged.length; x++) {
		//if not equal put it in var prev
		if(aMerged[x] == aMerged[x-1]){
			//prev=aMerged[x];
			alert(aMerged[x-1]+'+'+aMerged[x]+' are the same');
			aDup.push(aMerged[x]);
		}
		// else if equal add to array['found']; else { addItemToArray(array['found'],array[x]);}
		else {
			//alert('they are not the same: '+prev);
			//aDup.push(aMerged[x]);
		}
	}
	alert('final length of aDup is: '+aDup.length);
	alert(aMerged+'\n'+aDup);
}

function clickMe(idList){
	var a=new Array;
	a=idList.split(',');
	for(i=0;i<a.length;i++){
		document.getElementById(a[i]).click();
	}
}
function outputLength() {
	document.getElementById('outputLength').innerHTML='Total items: '+document.getElementById('output').value.split('\n').length;
}

function pageForMultiColumnCSS(aList){
// this function uses css to produce a multi column layout effect
var col=document.getElementById('print_columns').value;
var htmlTop="<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>\n"+
"<html xmlns='http://www.w3.org/1999/xhtml'>\n<head>\n"+
"<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />\n"+
"<title>Sounds of English Wordlist</title>\n"+
"<script type='text/javascript'></script>\n"+
"<style type='text/css'>\n"+
".multi-column {\n font: 2em 'Arial', sans-serif;\n"+
" white-space:pre;\n"+
" margin: 1em 2em;\n"+
" column-count: "+col+";\n"+
" -moz-column-count: "+col+";\n"+
" -webkit-column-count: "+col+";\n"+
" column-gap: 1.5em;\n"+
" -moz-column-gap: 1.5em;\n"+
" -webkit-column-gap: 20px;\n"+
" -moz-column-width: 2em;\n"+
" -moz-column-rule: 1px solid #ddccb5;\n"+
" -webkit-column-rule: 1px solid #ddccb5;\n}\n"+
".focus {color:red; }\n"+
".page_title {border-bottom: 2px solid black;\n"+
" font-size: 2em;\n}\n"+
"</style>\n"+
"</head>\n<body>";
var htmlBottom="</body>\n</html>";
var page; //this variable contains the html code for the whole page
var split_digraph=0;
var aGPC=new Array;
var reg1;
var boldedWord;
if(currentGPC !='') {
	aGPC=currentGPC.split("_");
	//first we test for split digraphs
	if(/-/.test(aGPC[1])==false){ // no split digraph
		var temp='(.*)('+aGPC[1]+')(.*)';
		reg1=new RegExp(temp);
	}
	if(/-/.test(aGPC[1])==true){// test for split digraphs with 1 intervening letter
		split_digraph=1; // this is the offset distance
		var a=new Array;
		a=aGPC[1].split('-');
		var temp='(.*)('+a[0]+')(.)('+a[1]+')(.*)';
		reg1=new RegExp(temp);
	}
	if(/-{2}/.test(aGPC[1])==true){// test for split digraphs with 2 intervening letters eg: a--e
		split_digraph=2; // this is the offset distance
		var a=new Array;
		a=aGPC[1].split('-');
		var temp='(.*)('+a[0]+')(..)('+a[2]+')(.*)';
		reg1=new RegExp(temp);
	}
} else {
	aGPC[1]=' '; //if currentGPC is empty
}
page=htmlTop;
	if(aList.length !=0){//if the wordlist is not empty
		page+="<div class='page_title' id='page_title'>Focus on the letter(s):&nbsp;&nbsp;<span class='focus'>"+aGPC[1]+"</span></div>\n";
		page+="<div class='multi-column'>"
		for(var w=0;w<aList.length; w++){
			var word=aList[w].split('.').join(''); // strip the syllable markers from the word and join it again
			if(split_digraph >0) {
				// this matches any split digraphs
				boldedWord=aList[w].replace(reg1,'$1<span class="focus">$2</span>$3<span class="focus">$4</span>$5');
			}
			if(split_digraph==0){
				// this matches regular GPCs
				boldedWord=aList[w].replace(reg1,'$1<span class="focus">$2</span>$3');
			}
			page+=boldedWord+'\n';// word which has been bolded on focus GPC
		}
		page+="</div>";
		page+=htmlBottom
		dopopup(page);
	} else {//if the wordlist is empty
		alert('You must first select a sound to create a wordlist.');
	}
}

function collectGPCIds(){
	var tableCells=document.getElementsByTagName('td');
	var aCollection=new Array;
	for(var c=0; c < tableCells.length; c++) {
		if(hasClass(tableCells[c],'hl2')) {
			aCollection.push(tableCells[c].id);
		}
	}
	if(aCollection.length >1){
		//alert(aCollection.join('\n'));
		document.getElementById('residue').value=aCollection.join('\n');
		show('residue_box');
	}
}
function getGPCList(){
	var tds= document.getElementsByTagName( 'td' );
	for(var i=0;i<tds.length;i++){
		if(tds.item(i).getAttribute( 'name' ) == 'gpc' ){
			gpcList.push(tds.item(i).id );
		}
	}
}
function findGPCIds(clsName){
	removeHighlights('hl2');
	var aTemp=new Array;
	var temp=document.getElementById('output').value;
	temp=temp.replace(/\s/g,':');//ie replaces each line with 2 colons; ff replaces it with just 1
	if(/\:\:/.test(temp)==true){//for ie
		aTemp=temp.split('\:\:');
	} else {//for ff
		aTemp=temp.split('\:');
	}
	for(var i in aTemp){
		if(/_/.test(aTemp[i])==true){
			addClass(document.getElementById(aTemp[i]),clsName);
			//alert(document.getElementById(aTemp[i]).className);
		} else {
			getGPCList();//array 'gpcList' should now be populated by the gpc cells on this page
			getGPCsBySubString(gpcList,aTemp[i]);
			for(var g in gpcList){
				addClass(document.getElementById(gpcList[g]),clsName);
			}
			//alert('Sorry, the list is not a valid GPC list. Find the mistake and re-submit.');
			//break;
		}
	}
}
var listOfGPCsToHighlight=new Array();
function getGPCsBySubString(aSource,criteria){
	//this function groups arrays by a substring of their graphemes. If the substring exists in the grapheme part it matches
	//aSource is an array of gpcs. could be knownGPCs or all of them or any other subset of gpcs
	//criteria='string':must contain string
	var temp=new Array;
	var aItem;
	listOfGPCsToHighlight.length=0;
	for(var i in aSource){
		if(/_/.test(aSource[i])==true){
			temp=aSource[i].split('_');
			if(typeof(criteria)=='string'){//if its a string
				var r=new RegExp(criteria,'g');
				if(r.test(temp[1])==true){
					//aItem=criteria;
					if(listOfGPCsToHighlight.length==0){
						listOfGPCsToHighlight[0]=aSource[i];
						//addItemToArray(group[criteria],aSource[i]);
					} else {
					//if(group[criteria]){
						listOfGPCsToHighlight[0]+=','+aSource[i];
					}
				}
			}
		}
	}
	gpcList=listOfGPCsToHighlight[0].split(',');
}
