libEx = new Object();

libEx.txtNextButton = function(el){
	return "<input class=\"nextquestion\" type=\"button\" onClick='javascript:libEx.new_quiz(\""+el+"\");' value=\"Next Question\" />";
}
window.ansCorr = 0;
window.ansTotal = 0;
window.curQ = new Array();

libEx.new_quiz = function(el){
	$.ajaxSetup({ timeout: 6000 });
	
	$.ajax({
		url: "getEx.php",
		dataType: "json",
		data: $("#"+el).attr("data-exercise"),
		beforeSend: function(){
			$("#"+el).addClass("loading").html("<img class=\"icon\" src=\"/images/loading.gif\" alt=\"Loading\" />Loading...");
		},
		success: function(data){
			window.curQ[el] = data;
			if(String(curQ[el].a).substring(0,5)=="EVAL:"){
				curQ[el].a = eval(curQ[el].a.substring(5));
			}
			$("#"+el).removeClass("loading");
			if(curQ[el].t == "MC"){
			//Type: Multiple Choice	
				//Check for sound clip
				curQ[el].d = libEx.checkDesc(curQ[el].d);
				
				var html = "<div class=\"question\">" + curQ[el].q + "</div>\n";
				html += "<div class=\"description\">" + curQ[el].d + "</div>\n";
				html += "<form class=\"mcquiz\" onSubmit='libEx.validate_quiz(\""+el+"\"); return false;'>\n";
				for(var i=1; i <= curQ[el].n; i++){
					html += "<input name=\"a\" value=\""+i+"\" type=\"radio\" />"+i+". " + curQ[el][i].uni + "<br />\n";
				}
				html += "<input type=\"submit\" value=\"Submit\" /> <span class=\"qanswer\">&nbsp;</span></form> \n";
			}else if(curQ[el].t == "fill-in"){
			//Type: Fill-In				
				//Check for sound clip
				curQ[el].d = libEx.checkDesc(curQ[el].d);
				
				var html = "<div class=\"question\">" + curQ[el].q + "</div>\n";
				html += "<div class=\"description\">" + curQ[el].d + "</div>\n";
				html += "<form class=\"fillquiz\" autocomplete=\"off\" onSubmit='libEx.validate_quiz(\""+el+"\"); return false;'>\n";
				html += "<input name=\"answer\" value=\"\" type=\"text\" size=\"12\" /><br />\n";
				html += "<input type=\"submit\" value=\"Submit\" /> <span class=\"qanswer\">&nbsp;</span></form> \n";		
			}
			$("#"+el).html(html);
			if(curQ[el].is == "deva"){
				$("#"+el+" form input[name='answer']").addClass("deva");
			}
			$("#"+el+" form input[name='answer']").focus();
		},
		error: function(data, status){
			if(status == "timeout"){
				$("#"+el).html("Request timed out. <a href='javascript:libEx.new_quiz(\""+el+"\");'>Try again</a>");
			}
		}});				
}

libEx.checkSound = function(desc){
	//Insert sound clip
	pat = new RegExp(".*[(]SND:(.*.mp3)[)].*");
	if(pat.test(desc)){
		var sndFile = pat.exec(desc)[1];
		soundManager.createSound({ id: sndFile, url: encodeURI("/sounds/"+sndFile), autoLoad: true});
		desc = desc.replace(/[(]SND:(.*).mp3[)]/,'<div><img class="icon click" src="../soundman/play_sound2.png" width="24" height="24" alt="play" onMouseDown="$(this).attr(\'src\',\'/soundman/play_sound2b.png\');soundManager.play(\''+sndFile+'\');" onMouseUp="$(this).attr(\'src\',\'/soundman/play_sound2.png\');" /> <span class="small"><em>(Click to hear)</em></span></div>');
	}
	return desc;
}

libEx.checkImage = function(desc){
	//Insert sound clip
	pat = new RegExp(".*[(]IMG:([^)]*)[)].*");
	if(pat.test(desc)){
		var imgFile = pat.exec(desc)[1];
		desc = desc.replace(/[(]IMG:([^)]*)[)]/,'<img src="/images/'+imgFile+'" />');
	}
	return desc;
}

libEx.checkDeva = function(desc){
	//Insert sound clip
	pat = new RegExp(".*[(]DEVA:([^)]*)[)].*");
	if(pat.test(desc)){
		var trans = pat.exec(desc)[1];
		var deva = libDeva.trans(trans,"","deva");
		desc = desc.replace(/[(]DEVA:([^)]*)[)]/,'<span class="deva">'+deva+'</span>');
	}
	return desc;
}

libEx.checkDesc = function(desc){
	desc = libEx.checkDeva(desc);
	desc = libEx.checkImage(desc);
	desc = libEx.checkSound(desc);
	return desc;
}

libEx.answer = function(el, correct, answer){
	$("#"+el+" form input").each(function(){
		$(this).attr("disabled","disabled");
	});
	
	if(correct){
		//Ajax Update
		if($.cookies.get("LoginToken") != null){
			$.ajax({
				type: "POST",
				url: "/scoretrack.php",
				cache: false,
				data: "Token="+$.cookies.get("LoginToken")+"&Action=update&Lesson="+$("#"+el).attr("data-lesson")+"&Exercise="+$("#"+el).attr("data-exercise")+"&Correct=1"
			});
		}
		//Display
		$("#"+el+" .qanswer").css("color","green").html("<strong>Correct!</strong> ").append(libEx.txtNextButton(el));
		ansCorr++;
	}else{
		//Ajax Update
		if($.cookies.get("LoginToken") != null){
			$.ajax({
				type: "POST",
				url: "/scoretrack.php",
				cache: false,
				data: "Token="+$.cookies.get("LoginToken")+"&Action=update&Lesson="+$("#"+el).attr("data-lesson")+"&Exercise="+$("#"+el).attr("data-exercise")+"&Correct=0"
			});
		}
		//Display
		if(curQ[el].aScr == "deva"){
			answer = "<span class=\"deva\">"+answer+"</span>";
		}
		$("#"+el+" .qanswer").css("color","red").html("<strong>Incorrect.</strong> The correct answer is &#145;<strong><span style=\"color: black\">"+answer+"</span></strong>&#146;. ").append(libEx.txtNextButton(el));
	}
	ansTotal++;
	$("#qsummary").text(ansCorr + "/" + ansTotal + " answered correctly ("+Math.round((ansCorr/ansTotal)*100)+"%)");
	
	$("#"+el+" input.nextquestion").focus();
}

libEx.validate_quiz = function(el){
	if(curQ[el].t == "MC"){
	//Multiple Choice
		$("#"+el+" form input:radio").each(function(){
			if(this.checked){
				if(this.value == curQ[el].a){
					libEx.answer(el,true);
				}else{
					libEx.answer(el,false,curQ[el][curQ[el].a].uni);
				}
			}
		});
	}else if(curQ[el].t == "fill-in"){
	//Other Type
		if(String($("#"+el+" form input[name='answer']").val()).length == 0){
			return false;
		}
		if(curQ[el].is != undefined && String(curQ[el].is).search(libDeva.scrType($("#"+el+" form input[name='answer']").val())) == -1){
			alert("You have typed your answer in a disallowed script for this question. Please check the instructions and try again.");
			return false;
		}
		
		if(curQ[el].a instanceof Array == false){
			curQ[el].aScr = libDeva.scrType(curQ[el].a);
			var trans = libDeva.trans($("#"+el+" form input[name='answer']").val(),"",curQ[el].aScr);
			if(trans.replace(/ /g,"") == curQ[el].a.replace(/ /g,"")){
				libEx.answer(el,true);
			}else{
				libEx.answer(el,false,curQ[el].a);
			}
		}else{
			curQ[el].aScr = libDeva.scrType(curQ[el].a.join(" / "));
			
			var answered = false;
			for(var key=0; key < curQ[el].a.length; key++){
				var trans = libDeva.trans($("#"+el+" form input[name='answer']").val(),"",curQ[el].aScr);
				if(trans.replace(/ /g,"") == curQ[el].a[key].replace(/ /g,"")){
					libEx.answer(el,true);
					var answered = true;
				}
			}
			if(answered == false){
				libEx.answer(el,false,curQ[el].a.join(" / "));
			}
		}
	}
}
