var defText="This is a free typing test that tests your typing speed. Typing speed is defined in wpm, which is words typed per minute. A word is taken to be five characters long including blank spaces. Typing speed is also defined as strokes typed per minute. This typing speed test will tell you your typing speed in wpm, words per minute, as soon as you finish typing this short paragraph. ";
var defText_ds="This is a free typing test that tests your typing speed.  Typing speed is defined in wpm, which is words typed per minute.  A word is taken to be five characters long including blank spaces.  Typing speed is also defined as strokes typed per minute.  This typing speed test will tell you your typing speed in wpm, words per minute, as soon as you finish typing this short paragraph. ";
var start=1;	//allows timer to start
var xp=0;	//possition of letter to be typed
var starttyping=0;
var endtyping=0;
var numofletters=0;
var mistakes=0;
var addmistake = 1;
var strtest="e";
var f1;
var t1;
var e1;
var obj1;
var numOfNodes=1;
var isTest="shorty";
var popwindow=0;
var popwindow1;
var historyOf="words1";
function clearRed(){
	j=divNode.childNodes.length-1;
	for(i=j;i>1;i--){
	divNode.childNodes[i].style.color="black";
	divNode.childNodes[i].style.textDecoration="none";
	}
	}

function addS(theString,testName,strName) {
deep=true;
strtest=theString;
isTest=testName;
lengthT=strtest.length;
numOfNodes=divNode.childNodes.length;
clearRed();
//node[1] is text so skip it
divNode.childNodes[0].style.color="black";
divNode.childNodes[0].firstChild.data=".";
	for(i=0;i<lengthT;i++){
		if(i < numOfNodes-2){
			if(divNode.childNodes[i+2].nodeType==1){
		divNode.childNodes[i+2].firstChild.data=strtest.charAt(i);
			}
		}
		else {
	myNode=divNode.firstChild.cloneNode(deep);
	myNode.firstChild.data=strtest.charAt(i);
	divNode.appendChild(myNode);
		}
	}
	extraNodes=divNode.childNodes.length-lengthT;
	pos=lengthT;
	while(extraNodes>2){
		divNode.childNodes[pos+2].firstChild.data="";
			pos++;
			extraNodes--;
	}
divNode.childNodes[0].style.color="white";
	nameNode.firstChild.data=isTest;
//	document.forms[1].elements[0].value=strName;
}
function showtemp(){
tempstr="";
var ok="nope";
for(k=0;k<divNode.childNodes.length;k++){
if(divNode.childNodes[k].firstChild)ok=divNode.childNodes[k].firstChild.data+" ";
else ok="nope";
tempstr=tempstr+"\n"+k+divNode.childNodes[k].nodeName+" "+ok;
}
alert(tempstr+"\nlengthT = "+lengthT);
}

function alertyou(){
if(document.getElementById('thebody').offsetWidth){	
	if(document.getElementById('thebody').offsetWidth<640){
	wH=document.getElementById('thebody').offsetHeight+80;
	if(self.outerHeight)wH=self.outerHeight;
	self.resizeTo(650,wH);
	}
}
}


function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}





function submitsc(){
if(document.forms[1].elements[3].value==0){alert("test must be finished to submit score");
}else {
	document.forms[1].submit();
	}
	mypop.close();
}

function MM_openBrWindow(theURL,winName,features) { //v2.0
	if(popwindow){mypop.focus();return;}
  	mypop=window.open(theURL,winName,features);
	popwindow=1;
}
function thePast(){
	if(popwindow1==1){mypop1.focus();return;}
	popwindow1=1;
	mypop1=window.open('wpm.html','mypop1','width=400,height=400');
	

	}

function starttest(){
numOfNodes=divNode.childNodes.length;
	hiderror();

clearRed();

	start=1;
	xp=0;
	starttyping=0;
	endtyping=0;
	numofletters=0;
	document.forms[0].elements[0].value="";
	document.forms[0].elements[0].focus();
	}

function hiderror(){
	e1.style.visibility="hidden";
	}	

function showerror(){
	e1.style.visibility="visible";	
	}	


function compare(e){
if(e.keyCode==16)return;
var ns6=(e.which)?true:false;
	var keyChar;
	var k = strtest.length;
	if(start==1){
	start=2;
	var beginning=new Date();
	starttyping=beginning.getTime();
	}
	if(xp < (k-1))
	{
	if(ns6)keyChar = String.fromCharCode(e.which);
	else keyChar = String.fromCharCode(e.keyCode);

	var ch1=strtest.charAt(xp);
	if(ch1==keyChar)
	{
	addmistake = 1;
	hiderror();
divNode.childNodes[xp+2].style.textDecoration="none";

	xp+=1;
if(xp>(k-2))excercise_results();

divNode.childNodes[xp+2].style.textDecoration="underline";
	numofletters+=1;
	return true;
	}
	else
	{
divNode.childNodes[xp+2].style.color="red";
var j1="";
var j2="";
var j3="";

    if( strtest.charCodeAt(xp) == 32 ){
j2="space bar";
    }
    else
    {
j2=ch1;
    }
e1.childNodes[3].firstChild.data=j2;
showerror();
if(addmistake == 1)mistakes+=1;
addmistake=2;
if(xp>(k-2))excercise_results();

return false;
	}
	}
	else
	{
	
	excercise_results();
	}
	}

function stopkey(e){
	if(e.which)return;
		
	var ch=e.keyCode;
	if(ch==8){
	divNode.childNodes[xp+2].style.textDecoration="none";
divNode.childNodes[xp+1].style.textDecoration="underline";
hiderror();

	xp=xp-1;
	return;
	
	}	
	}


function excercise_results(){
	start=1;	//reset time-count initilizer
	var endtime=new Date();	
	endtyping=endtime.getTime();
	if(numofletters>0){
	var words=numofletters/5;
	var seconds=(endtyping-starttyping)/1000;
	var wpm=(words*60)/seconds;
	wpm=Math.round(wpm);
	words=Math.round(words);
	var mpm=(mistakes*60)/seconds;
//	mpm=mpm.toPrecision(2);
	nu="p"+mpm;
	re=/[0-9]*\.[0-9]/;
	mpm=re.exec(nu);
//document.forms[1].elements[3].value=wpm;
alert("your typing rate is :  "+wpm+" wpm\nwords typed : "+words+"\nmistakes made : "+mistakes+"\nwhich is "+mpm+" mistakes per minute\n\nacceptable rate is 1 mistake per min regardless of your typing speed");

	cleartest();
	}
	}

function cleartest(){

	xp=0;
	start=1;	//reset time-count initilizer
	numofletters=0;
	mistakes=0;
	addmistake=1;
	}

