// JavaScript Document
// CORE PROCESS FUNCTIONS

var displaypage = 0;
var number_of_pages = 0;
var testtokenid;
var testtokencode;

var phpstarttime;
var totaltime;
var starttime;
var endtime;
var timerInterval;
var localstoreofpages;
var imagepath = "admin/questions/";

var tokenid;

var testsheet;

function createREQ() {
	try {
		 req = new XMLHttpRequest(); /* e.g. Firefox */
		 } catch(err1) {
		   try {
		   req = new ActiveXObject('Msxml2.XMLHTTP'); /* some versions IE */
		   } catch (err2) {
			 try {
			 req = new ActiveXObject("Microsoft.XMLHTTP"); /* some versions IE */
			 } catch (err3) {
			  req = false;
			 }
		   }
		 }
	return req;
}

function requestGET(url, query, req) {
	myRand=parseInt(Math.random()*99999999);
	req.open("GET",url+'?'+query+'&rand='+myRand,true);
	req.send(null);
}

function requestPOST(url, query, req) {
	req.open("POST", url, true);
	req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		  http_request.setRequestHeader("Content-length", query.length);
		  http_request.setRequestHeader("Connection", "close");
	req.send(query);
}

function doCallback(callback, pageid, item) {
	eval(callback + '(pageid, item)');
}

// SECONDARY PROCESS FUNCTIONS

function doAjax(url,query,callback,reqtype,getxml,pageid) {
	document.getElementById(pageid).innerHTML = "<span class=loading>Loading...</span>";
	var myreq = createREQ();
	
	myreq.onreadystatechange = function() {
	if(myreq.readyState == 4) {
	   if(myreq.status == 200) {
		  var item = myreq.responseText;
		  if(getxml==1) {
			 item = myreq.responseXML;
		  }
		  doCallback(callback, pageid, item);
		}
	  }
	}
		
	if(reqtype=='post') {
	requestPOST(url,query,myreq);
	} else {
	requestGET(url,query,myreq);
	}
}

function makePOSTRequest(url, parameters, pageid, callback, getxml) {
	document.getElementById('message_board').innerHTML = "Loading...";
	  http_request = createREQ();
	  
	  http_request.onreadystatechange = function() {
		if(http_request.readyState == 4) {
		   if(http_request.status == 200) {
			  var item = http_request.responseText;
			  if(getxml==1) {
				 item = http_request.responseXML;
			  }
			  doCallback(callback, pageid, item);
			}
		  }
		}
	  http_request.open('POST', url, true);
	  http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	  http_request.setRequestHeader("Content-length", parameters.length);
	  //http_request.setRequestHeader("Connection", "close");
	  http_request.send(parameters);
}

function buildPOST(url, theFormName, pageElement, callback, getxml) { 
    theForm = document.forms[theFormName];
    var qs = '' 
    for (e=0;e<theForm.elements.length;e++) { 
        if (theForm.elements[e].name!='') { 
            var name = theForm.elements[e].name; 
            qs+=(qs=='')?'':'&' 
            qs+= name+'='+encodeURI(theForm.elements[e].value); 
        } 
    } 
    qs+="\n"; 
    makePOSTRequest(url, qs, pageElement, callback, getxml);
} 

function getQuestions(url,query,callback,reqtype,getxml)
{
	var myreq = createREQ();
	myreq.onreadystatechange = function() {
	if(myreq.readyState == 4) {
	   if(myreq.status == 200) {
		  var item = myreq.responseText;
		  if(getxml==1) {
			 item = myreq.responseXML;
		  }
		  doCallback(callback, item);
		}
	  }
	}
		
	if(reqtype=='post') {
	requestPOST(url,query,myreq);
	} else {
	requestGET(url,query,myreq);
	}
}

// CALL BACK FUNCTIONS-------------------------------------------------------------------------------------
function showPanel(){
	document.getElementById('message_board').innerHTML = "";
	document.getElementById('newguibottom').style.display = 'block';
}

function appendDIV(targetparent, targetid, targetclassname, targetcontent){
	//alert('in append div');
	var mydiv = document.createElement("div");
	mydiv.id = targetid;
	mydiv.className = targetclassname;
	var mycontent = targetcontent;
	var mycontentnode = document.createTextNode(mycontent);
	mydiv.appendChild(mycontentnode);
	document.getElementById(targetparent).appendChild(mydiv);
}

function appendOPTIONandCHECK(targetparent, targetid, targetclassname, targetcontent, tokenid, tokencode){
	testtokenid =tokenid;
	testtokencode = tokencode;
	//alert("Targetparent: "+targetparent+" TargetID: "+targetid+" TargetClass:"+targetclassname+" TargetContent:"+targetcontent);
	var optiondiv = document.createElement("div");
	optiondiv.className="option";

	var optionlabel = document.createElement("label");
	var optioninput = document.createElement("input");
	optioninput.className = "optionvalue";
	optioninput.type = "radio";
	optioninput.name = targetclassname;
	var optiondescription = targetcontent;
	optioninput.value = targetid;
	optioninput.id = "radio"+targetid;
	optioninput.setAttribute("checked", "checked");
	optioninput.onclick = function(){ 
		var url="newutilities.php";
		var query = "command=realTimeAnswers&questionid="+this.name+"&optionid="+this.value+"&tokenid="+tokenid;
		var callback = "onFinishingTest";
		var reqtype = "get";
		var getxml = "0";
		getQuestions(url,query,callback,reqtype,getxml);
	};

	var optioncontent = document.createTextNode(optiondescription);
	optionlabel.appendChild(optioninput);
	optionlabel.appendChild(optioncontent);
	optiondiv.appendChild(optionlabel);
	document.getElementById(targetparent).appendChild(optiondiv);
}

function appendOPTION(targetparent, targetid, targetclassname, targetcontent, tokenid, tokencode){
	testtokenid =tokenid;
	testtokencode = tokencode;
	//alert("Targetparent: "+targetparent+" TargetID: "+targetid+" TargetClass:"+targetclassname+" TargetContent:"+targetcontent);
	var optiondiv = document.createElement("div");
	optiondiv.className="option";

	var optionlabel = document.createElement("label");
	var optioninput = document.createElement("input");
	optioninput.className = "optionvalue";
	optioninput.type = "radio";
	optioninput.name = targetclassname;
	var optiondescription = targetcontent;
	optioninput.value = targetid;
	optioninput.id = "radio"+targetid;
	optioninput.onclick = function(){ 
		var url="newutilities.php";
		var query = "command=realTimeAnswers&questionid="+this.name+"&optionid="+this.value+"&tokenid="+tokenid;
		var callback = "onFinishingTest";
		var reqtype = "get";
		var getxml = "0";
		getQuestions(url,query,callback,reqtype,getxml);
	};

	var optioncontent = document.createTextNode(optiondescription);
	optionlabel.appendChild(optioninput);
	optionlabel.appendChild(optioncontent);
	optiondiv.appendChild(optionlabel);
	document.getElementById(targetparent).appendChild(optiondiv);
}

function createPAGE(targetparent, targetid, targetclassname, targetcontent){
	var mydiv = document.createElement("span");
	mydiv.id = targetid;
	mydiv.className = targetclassname;
	document.getElementById(targetparent).appendChild(mydiv);
	number_of_pages++;
}


function abort(msg){
	hideAllPages();
	document.getElementById('navioneholder').style.display='none';
	document.getElementById('navione').style.display='none';
	document.getElementById('navitwoholder').style.display='none';
	document.getElementById('navitwo').style.display='none';
	document.getElementById('newguitop').style.display='none';
	document.getElementById('newguibottom').style.display='none';
	document.getElementById('message_board').innerHTML = "<h1>"+msg+"</h1>";
	
}


function startTest(){
	hideAllPages();
	document.getElementById('navioneholder').style.display='block';
	document.getElementById('navione').style.display='block';
	document.getElementById('navitwoholder').style.display='block';
	document.getElementById('navitwo').style.display='block';
	document.getElementById('newguitop').style.display='block';
	document.getElementById('newguibottom').style.display='none';
	showPage(1);
	timerStart();
}

function hideAllPages(){
	for(var e=1; e<=number_of_pages; e++){
		var pageid="page"+e;
		document.getElementById(pageid).style.display = 'none';
	}
}

function showPage(j){
	location.href="#here";
	displaypage = displaypage + j;
	if(displaypage > number_of_pages){displaypage = 1;}
	if(displaypage < 1){displaypage = number_of_pages;}
	hideAllPages();
	var disp = "page"+displaypage;
	document.getElementById(disp).style.display = 'block';
}

function launchTest(tokenid){
	var url="newutilities.php";
	var query = "command=startTest&tokenid="+tokenid;
	var callback = "startTest";
	var reqtype = "get";
	var getxml = "1";
	getQuestions(url,query,callback,reqtype,getxml);
	alert('Please wait a few minutes for the Questions to Load');
}

function onFinishingTest(obj){
}

function finishTest(){
	alert('The Test Session is now Complete!');
	var allinputs = document.getElementsByTagName("input");
	var str="";
	//provide for no question answered scenerio

	for(var i=0; i < allinputs.length; i++){
		if(allinputs[i].checked){
			var questionid = allinputs[i].name;
			var optionid = allinputs[i].value;
			str = str + i +": Name-"+questionid+" Value-"+optionid+"\n";
			var url="newutilities.php";
			var query = "command=finishTest&questionid="+questionid+"&optionid="+optionid+"&tokenid="+testtokenid;
			var callback = "onFinishingTest";
			var reqtype = "get";
			var getxml = "0";
			getQuestions(url,query,callback,reqtype,getxml);
		}
	}
	clearInterval(timerInterval);
	showFinishSummary();
}

function showFinishSummary(){
	hideAllPages();
	document.getElementById('navione').style.display='none';
	document.getElementById('navitwo').style.display='none';
	document.getElementById('timer_holder').style.display='none';
	
	var msg = "<h1>The Test session is now complete (you clicked finish or your time expired.<br><a href='newtests.php?showsummaryfor="+testtokencode+"'>Click Here</a> to view the summary</h1>";
	document.getElementById('endoftest').innerHTML=msg;
	
}


function timerStart(){
	var url="newutilities.php";
	var query = "command=getTimeStats&tokenid="+testtokenid;
	var callback = "checkTime";
	var reqtype = "get";
	var getxml = "1";
	getQuestions(url,query,callback,reqtype,getxml);
}

function checkTime(obj){
//alert(obj);
	var flag = obj.getElementsByTagName("TIMER");
	var item = flag[0].getAttribute("FLAG");
	
	if(item < 1){
		alert('Critical Error! Unable initiate T-sequence.');
		abort("Please Refresh and Try Again!");
	}else{
		starttime = flag[0].getAttribute("ELAPSEDTIME");
		endtime = flag[0].getAttribute("TOTALTIME");
		timerInterval = setInterval(displayLocalTimer, 1000);
	}
}

function displayLocalTimer(){
	starttime++;
	var text = "Timer: ";

	if(starttime >= endtime){
		finishTest();
	}else{
		var minutes = Math.floor(starttime / 60);
		var seconds = starttime % 60;
		
		seconds = 100 + seconds;
		var strsecs = ""+seconds;
		var strseconds = strsecs.substring(1, 3);
		
		minutes = 100 + minutes;
		var strmin = ""+minutes;
		var strminutes = strmin.substring(1, 3);
		
		text = text + strminutes + ":" + strseconds;
		document.getElementById('timer_holder').style.display='block';
		document.getElementById('timer_text').innerHTML = text;
	}
}



