var ns4=(document.layers);
var ie4=(document.all && !document.getElementById);
var ie5=(document.all && document.getElementById);
var ns6=(!document.all && document.getElementById);
var groupA=new Array;
var groupB=new Array;
var aUnion=new Array;
var aIntersect=new Array;
var aDiff=new Array;
var aSymDiff=new Array;
var targetGroup;
var ALength;
var BLength;
var outputLength;
var currentGPC='';

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,"The Sounds of English Tutorials","menubar=yes,resizable=yes,width=870,height=575,left=0,top=0,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<body>\n";
var htmlBottom="</div>\n</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]= ' ';
}
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 reg1 = new RegExp(focusOn[1]); //regular expression from the GPC focussed on
								var boldedWord;
								// doesn't handle split digraphs yet!!
								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');
	//alert(wordlist);
	pageForPrintLayout(wordlist,1);
}
