$(function(){
function getID(id){
		var tempArray = id.split(/-/);
		return tempArray[0];
}
function getCount(id){
		var tempArray = id.split(/-/);
		return tempArray[2];			
}
function resetQuiz(id){
		var tempQuiz = getID(id);
		if(quizID!= tempQuiz){
			//alert("quizID "+quizID+" tempQuiz "+tempQuiz);
			quizID = tempQuiz;	
			count = 0;
			longestPrefixMatch = 0;
			return true;
		}
		return false;
}
function getNextIncorrect(questions, answers, count){
		var nextIncorrect = -1;
		for(var i=count; i<answers.length; i++){
			if(questions[i]!=answers[i]){
				nextIncorrect = i;
				break;
			}	
		}	
		return nextIncorrect;
}
function getLongestPrefixMatch(question, answer){
	var longestPrefix = 0;
	while(longestPrefix<=Math.min(question.length, answer.length)){
		if(question.charAt(longestPrefix)==answer.charAt(longestPrefix)){
				longestPrefix++;
		}
		else{
			break;	
		}
	}
	return longestPrefix;
}
	//Load sound file
	$('a.media').media( { width: 80, height: 20 } );
	//Initially hide answers
	$("[id*=answer]").hide();
	
/* * * * * OUTLINE * * * * *
get ID of the button that was clicked
id would be the ID of the quiz -> unique
1. If Check is clicked
A. Find out quizID
B. foreach(qID-answer class)
I. get id of textbox
II. extract count
III. construct qID-answer-count
IV. compare the value of qID-question-count to qID-answer-count qID-answer-count
*/
$(".check").click(function(){		
		var quizID = getID($(this).attr("id"));
		$("."+quizID+"-question").each(function(){
			var count = getCount($(this).attr("id"));
			
			if($(this).val() == $("#"+quizID+"-answer-"+count).val()){
					$(this).css("background-color", "#AFD464");
			}
			else{
					$(this).val("").css("background-color", "yellow");
			}
			
		});
});
/*
2. If view is clicked
A. find out qID
B. show qID-answer .class
*/	
	$(".view").click(function(){
		var quizID = getID($(this).attr("id"));
		$("."+quizID+"-answer").show();
	});

/*	
Implement suggest button
Have a hidden input for each quiz
Every time any text box has a focus, update hidden input value with count
Every time any text box looses a focus, update hidden input value with count
*/

	/*
	$("input[class$='question']").blur(function(){
		var quizID = getID($(this).attr("id"));
		$("#"+quizID+"-focus").val("");						
	});
	*/
	//WHEN WE MOVE FROM ONE QUIZ TO ANOTHER WE NEED TO ...A... - RESET QUIZID ...B... - RESET COUNT ...C... - FIND THE LOWEST COUNT WITH INCORRECT VALUE
	
	var count=0;
	var quizID;
	var longestPrefixMatch = 0;
	
	$("input[class$='question']").focus(function(){
		quizID = getID($(this).attr("id")); 
		count = getCount($(this).attr("id"));
		longestPrefixMatch = 0;
	});
	$(".suggest").click(function(){
		var questions = [];
		var answers = [];
		var quizChange = resetQuiz($(this).attr("id"));
		quizID = getID($(this).attr("id"));
		//alert("after change in suggest "+quizID+"count"+count+"longestPrefixMatch"+longestPrefixMatch);
		$("."+quizID+"-answer").each(function(){
			var count = getCount($(this).attr("id"));
			questions[count] = $("#"+quizID+"-question-"+count).val();
			answers[count] = $("#"+quizID+"-answer-"+count).val();
		});
		if(quizChange==true){
			var nextIncorrect = getNextIncorrect(questions, answers, count);
			if(nextIncorrect!=-1){
				count = nextIncorrect;	
			}	
		}
		//alert("#"+quizID+"-question-"+count+"      "+answers[count]);
		longestPrefixMatch = getLongestPrefixMatch(questions[count], answers[count]);
		//alert("longestPrefixMatch"+longestPrefixMatch+" ---- "+questions[count].substr(0, longestPrefixMatch)+"  ---- "+answers[count].charAt(longestPrefixMatch));
		$("#"+quizID+"-question-"+count).val(questions[count].substr(0, longestPrefixMatch)+answers[count].charAt(longestPrefixMatch));
		//longestPrefixMatch++;
		//alert("sdfgsdfgsdgsdf"+longestPrefixMatch+"answers[count].length"+answers[count].length);
		if(longestPrefixMatch>=answers[count].length){
			count++;
			//if dead end, we need to start from the begining
			if(count==answers.length){
				count = 0;
				//alert(count+"yes"+answers.length);
			}
			//skip suggest feature for correct answers
			var nextIncorrect = getNextIncorrect(questions, answers, count);
			if(nextIncorrect!=-1){
				count = nextIncorrect;	
			}
		}
	});
	$(".reset").click(function(){
			//Hide answers
			var quizID = getID($(this).attr("id"));
			$("."+quizID+"-answer").hide();
			
			//Clear formatting
			$("."+quizID+"-question").each(function(){
			var count = getCount($(this).attr("id"));
			$(this).val("").css("background-color", "white");
			
		});	
	});
});

