var defText="This is a free typing test which tests your typing speed. Typing speed is defined in wpm, that 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 MyXp=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 popwindow=0;
var popwindow1;
var historyOf="words1";
var wpmTracker=0;
function clearRed(){
	j=divNode.getElementsByTagName("span").length-1;
	for(var i=j;i>=0;--i){
	divNode.getElementsByTagName("span")[i].style.color="black";
divNode.getElementsByTagName("span")[MyXp].style.fontWeight="normal";
	divNode.getElementsByTagName("span")[i].style.textDecoration="none";

	}
	}

/*
function addS(theString,testName,strName) {
deep=true;
strtest=theString;
isTest=testName;
lengthT=strtest.length;
numOfNodes=divNode.childNodes.length;
clearRed();
alert(divNode.getElementsByTagName("span").length);
//node[1] is text so skip it
//divNode.childNodes[0].style.color="black";
//divNode.childNodes[0].firstChild.data=".";
	for(var 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";
}
*/

function addS(theString,tW,multi) {
deep=true;
strtest=theString;
lengthT=strtest.length;
numOfNodes=divNode.getElementsByTagName("span").length;
clearRed();
	for(var i=0;i<lengthT;i++){
		if(i <= numOfNodes-1){
		divNode.getElementsByTagName("span")[i].firstChild.data=strtest.charAt(i);
			
		}
		else {
	myNode=divNode.getElementsByTagName("span")[i-1].cloneNode(deep);
	myNode.firstChild.data=strtest.charAt(i);
	divNode.appendChild(myNode);
		}
	}
	extraNodes=divNode.getElementsByTagName("span").length-lengthT;
	pos=lengthT-1;
	while(extraNodes>=1){
		divNode.getElementsByTagName("span")[pos].firstChild.data="";
			pos++;
			extraNodes--;
	}

}



function starttest(){
numOfNodes=divNode.getElementsByTagName("span").length;
	hiderror();

clearRed();

	start=1;
	MyXp=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.which==0)return;
if(e.keyCode==16)return;
var ns6=(e.which)?true:false;
	var keyChar;
	var k = strtest.length;
	if(start==1){
	start=2;
	clearRed();
	document.forms[0].elements[0].value="";
	document.forms[0].elements[0].focus();
	var beginning=new Date();
	starttyping=beginning.getTime();
	}

	if(MyXp < (k-1))
	{
	if(ns6)keyChar = String.fromCharCode(e.which);
	else keyChar = String.fromCharCode(e.keyCode);

	var ch1=strtest.charAt(MyXp);
	if(ch1==keyChar)
	{
//	document.getElementById("writeHere").firstChild.data=MyXp;
divNode.getElementsByTagName("span")[MyXp+1].style.fontWeight="500";
divNode.getElementsByTagName("span")[MyXp+1].style.textDecoration="underline";
	addmistake = 1;
	hiderror();
divNode.getElementsByTagName("span")[MyXp].style.fontWeight="normal";
divNode.getElementsByTagName("span")[MyXp].style.textDecoration="none";
	MyXp+=1;
if(MyXp>(k-2))excercise_results();


//divNode.getElementsByTagName("span")[MyXp].style.textDecoration="underline";
	numofletters+=1;
	return true;
	}
	else
	{
divNode.getElementsByTagName("span")[MyXp].style.color="red";
var j1="";
var j2="";
var j3="";

    if( strtest.charCodeAt(MyXp) == 32 ){
j2="space bar";
    }
    else
    {
j2=ch1;
    }
e1.childNodes[3].firstChild.data=j2;
showerror();
if(addmistake == 1)mistakes+=1;
addmistake=2;
if(MyXp>(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[MyXp+2].style.textDecoration="none";
divNode.childNodes[MyXp+1].style.textDecoration="underline";
hiderror();

	MyXp=MyXp-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");




	recordResults(wpm);
	cleartest();
	}
	}

function cleartest(){

	MyXp=0;
	start=1;	//reset time-count initilizer
	numofletters=0;
	mistakes=0;
	addmistake=1;
	}

function isaNumber(inputVal){
	if(inputVal=="NAN"){
		document.forms[1].elements[1].value=5;
		}
		alert("inputVal="+inputVal+"document.forms[1].elements[1].value="+document.forms[1].elements[1].value);

	}