var tdat = new Array ();
tdat[0] = new Date().getTime();
var z = 0;
var ri=0;
var $rst="";
var $rstdsp="";
var soundfile="drip60.wav";
var submitcount=0;

function submitform()	{
	document.forms["sendit"].elements["submitbtn"].value=" Sending - Please Wait ";
	document.forms["sendit"].elements["testresults"].value=$rst;
	
	//  Variables to change for each test HERE after each .value= < < < < < < < <

	document.forms["sendit"].elements["subject"].value="GTFCtest: " + document.forms["sendit"].elements["your_name"].value + " - " + ri + "";
	document.forms["sendit"].elements["email"].value="test@gotofocus.com";
	document.forms["sendit"].elements["recipient"].value="Test";
	document.forms["sendit"].elements["redirect"].value="http://www.gotofocus.com/test/thanks_results.htm?RI=" + ri;

if(document.forms["sendit"].elements["my_email_address"].value=="") {
	document.forms["sendit"].elements["my_email_address"].value="none";
	}
if(document.forms["sendit"].elements["your_name"].value=="") {
	document.forms["sendit"].elements["your_name"].value="none";
	}
if (submitcount == 0) {
    submitcount++;
    document.forms["sendit"].submit();
	}
}

function mtbox(theBox) {
     if (theBox.value == theBox.defaultValue) {
         theBox.value = "";
     }
 }

function starttest() {
	submitcount=0;
	z=0;
	$rstdsp="";
	document.display.txtFeedback.value=" - Testing - ";
	document.frmTest.btnTest.focus();
if(soundfile=="drip60.wav") {
	this.oBGSound.loop = -1;
  this.oBGSound.src = soundfile; // reload sound;
	}
}

function sortit(a,b){
return(a-b);
}

function stoptest() {   	//   **** **** END OF TEST **** ****
if(soundfile=="drip60.wav") {
    this.oBGSound.loop = 0;
	}
	
if(z<10){		//	Skips everyything if there are less than 10 beats
	$rst="\n Sorry, you must click at least 10 times. You only clicked " + z;
	$rstdsp=$rst;
	document.forms["display"].elements["txtFeedback"].value=$rstdsp;
return;
	}

	z=z-1;	// reset counter to end beat #

	$rst="RawDataStart\n";

var curdate = new Date();
var dd =""+(curdate.getMonth() + 1) + "/" + curdate.getDate() + "/" + curdate.getYear();
dd+=" " + curdate.getHours() + ":" + curdate.getMinutes() + ":" + curdate.getSeconds();
	$rst+=dd + "\n\n";

	var avgvar=0;
	var totvar=0;
	var hivar=0;
	var stdvar=0.001;
	var interval=0;
	var missedcnt=0;
	ri=0;
	var intervals = new Array();
	var avgtime=1000;

if(soundfile=="") {			// if no sound find the average interval
	for (var x = 2; x <= z-1; x++) {  	// set an interval array
		intervals[x-1] = (tdat[x]-tdat[x-1]);
		}
	intervals.sort(sortit);
	x=Math.floor(x/2);
	var median_interval=intervals[x];		// find the median interval

	var y=0;
	var totintrvl=0;
	for (x = 3; x <= z; x++) {  	// now find the average
		interval = (tdat[x]-tdat[x-1]);
	if (interval<median_interval*1.6) {
		totintrvl+=	interval;
		y++;
		}
	}
	avgtime=(totintrvl/y);  // averages from beat 2 (click 3)
}

	$rst += "Time between Clicks in milliseconds\n";

for (x = 3; x <= z; x++) {	// starts at 2
	interval = (tdat[x]-tdat[x-1]);
	if (interval<avgtime*1.6) {  // otherwise skips missed beats
		$rst += ("\t" + interval);
		totvar += Math.abs(interval - avgtime); 	 // abs of variation
		stdvar += Math.pow(interval - avgtime,2);  // square and sum data points for std dev calc
		if(Math.abs(interval - avgtime)>hivar){
			hivar=Math.abs(interval - avgtime);  // set highest variation
			}		
	} else { missedcnt += 1; }
}
	z=z-missedcnt;					// subtract the missed beats counter

	$rst += "\n";
	stdvar = Math.sqrt(stdvar/(z-2));		// standard deviation calc (less 1st 2 not counted)
	ri = 112-(Math.log(stdvar/avgtime*100)*30);

if(ri<0) { ri=0 };

	stdvar = Math.round(10*stdvar)/10;   // rounds it to 1 dec place
	ri = Math.round(10*ri)/10;
	avgvar = Math.round((10*totvar/(z-1)))/10;
	avgtime = Math.round(10*avgtime)/10;
	hivar = Math.round(hivar); 			// rounds it off

	$rst += ri + "\tRI\n";
	$rstdsp += "Rhythmicity Index (RI) = " + ri + " < < < <\n\n";

	if(soundfile=="") {
		$rst += "\tTested with External sound source\n";
		$rstdsp += "Tested with External sound source\n";
		} else {
		$rst += "\tTested at 60 beats/min [1000 ms/beat]\n";
		$rstdsp += "Tested at 60 beats/min [1000 ms/beat]\n";
		}
	$rst += avgtime + "\tActual Avg Period in ms\n";
	$rst += "\n" + z-2 + "\tBeats measured\n";
	$rst += missedcnt + "\tBeats Missed\n";
	$rst += stdvar + "\tStandard Deviation\n";
	$rst += avgvar + "\tAverage Variation in ms\n";
	$rst += hivar + "\tHighest Variation in ms";
	
	$rstdsp += "Actual Avg Period = " + avgtime + " ms";
	$rstdsp += "\nBeats Missed = " + missedcnt;
	$rstdsp += "\nHighest Variation = " + hivar + " ms";

	z=0;
	document.forms["display"].elements["txtFeedback"].value=$rstdsp;
}

function getdata() {
	tdat[z] = new Date().getTime();
	document.display.txtFeedback.value+="* ";
	z++;
	if(z>62) // because we're not counting the 1st 2 beats
	{
	stoptest();
	}
}
