/*




*/


//an array for remembering answer attempts for each question
var pageAnswers = new Array();
var secondAttemptFeedbackMessage = "<br /><br /><span class='small'>If you struggled with this problem, click on the <i>Teacher's Resources</i> button above and find the <i>Teacher's Links</i> for this video, or see your instructor for help.</span>";

//This method is for evaluating single field questions
/*
Arguments:

- submitObj
	type: Object 
	properties: 
		inputName (String): name of the input field that is being evaluated
		correct (String or Array): correct answer that the user answer is compared to, or an array of correct answers
		
- responseObj
	type: Object
	properties:
		firstAttempt (String): text that is displayed after the user's first incorrect attempt at answering
		secondAttempt (String): text that is displayed after the user's second or higher incorrect attempt at answering
		correct (String): text that is displayed when the user provides the correct answer
*/
function submitAnswer( submitObj , responseObj , charsToStrip )
{
	
	var answerIsCorrect = false;
	var input; 
	var userAnswer;
	var target;
	
	//get input object using its name
	for ( var i = 0; i < document.forms.length; i++ )
	{
		if ( document.forms[i][submitObj.inputName] )
		{
			input = document.forms[i][submitObj.inputName];
		}
	}
	
	
	
	//get user answer for text fields	
	if ( input.value || input.value == "" )
	{
		userAnswer = stripChars( input.value.toString().toLowerCase() , charsToStrip );
		target = input;
	}
	//get user answer for radio fields
	else 
	{	
		target = input[0]
		for ( i = 0; i < input.length; i++ )
	 	{
			
			if ( input[i].checked )
	 		{	
	 			userAnswer = input[i].value.toString().toLowerCase()
				break; 
			}	
	 	}	
	}	
		
	//analyze user answer answer against multiple posible correct answers ( when passed an array )	
	if ( Array.prototype.isPrototypeOf( submitObj.correct ) )
	{
		answerIsCorrect = false;
		
		for ( i in submitObj.correct )
		{
			if ( userAnswer == stripChars( submitObj.correct[i].toString().toLowerCase() , charsToStrip ) )
			{
				answerIsCorrect = true;
				break;
			}
		}
		
		if ( !answerIsCorrect && input.type == "text" )
			input.value = "";		
	} 
	//analyze user answer against a single correct answer
	else 
	{
		if ( userAnswer == stripChars( submitObj.correct.toString().toLowerCase() , charsToStrip ) )
			answerIsCorrect = true;
			
		else 
		{
			answerIsCorrect = false;
			if ( !answerIsCorrect && input.type == "text" )
				input.value = "";	
		}
	}
	
	
	
	
	//provide feedback according to attempt # and success
	if ( !answerIsCorrect )
	{
		if ( !checkAnswerAttempts( submitObj.inputName ) )
		{
			pageAnswers.push( { formName: submitObj.inputName , attemptCount : 1 } )
			showfeedbackWindow( responseObj.firstAttempt , target )
		}
		else
		{ 
			checkAnswerAttempts( submitObj.inputName ).attemptCount++
			var secondAttemptFeedback = responseObj.secondAttempt + secondAttemptFeedbackMessage;
			showfeedbackWindow( secondAttemptFeedback , target );
		}
	}
	else 
		showfeedbackWindow( responseObj.correct , target )	
}

//this method is for evaluating multiple fields at once
/*
Arguments:

- formName 
	type: String
	description: name of the form that contains the fields being evaluated

- correctAnswers:
	type: Array
	description: an array of possible correct answers listed in the same order as their respective fields appear in the HTML
	
- responseObj
	type: Object
	properties:
		firstAttempt (String): text that is displayed after the user's first incorrect attempt at answering
		secondAttempt (String): text that is displayed after the user's second or higher incorrect attempt at answering
		correct (String): text that is displayed when the user provides the correct answer
*/
function submitMultiFieldAnswer( formName , correctAnswers, responseObj )
{
	var formLen = document[formName].length;
	var userAnswerArr = new Array();
	var answerIsCorrect = true;
	
	//check to see if there are any incorrect answers in any of the fields
	for ( var i = 0; i < formLen; i++ )
	{
		if( document[formName][i].type != 'button' && document[formName][i].value.toString().toLowerCase() != correctAnswers[i].toString().toLowerCase()  )
		{
			answerIsCorrect = false;
			break;
		}
	}
	
	//provide feedback according to attempt # and success
	if ( !answerIsCorrect )
	{
		
		for ( i = 0; i < formLen; i++ )
		{
			if( document[formName][i].type == 'text'  )
				document[formName][i].value = ""
		}
		
		if ( !checkAnswerAttempts( formName ) )
		{
			pageAnswers.push( { formName: formName , attemptCount : 1 } )
			showfeedbackWindow( responseObj.firstAttempt , document[formName] )
		}
		else
		{ 
			checkAnswerAttempts( formName ).attemptCount++
			var secondAttemptFeedback = responseObj.secondAttempt + secondAttemptFeedbackMessage;
			showfeedbackWindow( secondAttemptFeedback , document[formName] )	
		}
	}
	else 
		showfeedbackWindow( responseObj.correct , document[formName] )
}

//method for showing feedback div with a message
function showfeedbackWindow( message , target )
{
	var targetPos = findPos( target )
	
	var feedbackWindow = document.getElementById( 'feedbackWindow' );
	var feedbackWindowText = document.getElementById( 'feedbackWindowText' );
	//feedbackWindowText.firstChild.nodeValue = message;
	feedbackWindowText.innerHTML = message;
	feedbackWindow.style.top = ( targetPos[1] - 160 )+"px";
	feedbackWindow.style.left = ( targetPos[0] - 10 ) +"px";
	Effect.Appear( 'feedbackWindow' , { duration: .5 , to: 0.95 } ); 
	//feedbackWindow.style.display = "block";	
}

//method for closing the feedback div
function closefeedbackWindow() 
{
	//var feedbackWindow = document.getElementById( 'feedbackWindow' );
	//feedbackWindow.style.display = "none";
	Effect.Fade( 'feedbackWindow' , { duration: .5 } )
}

//method for searching pageAttempts to see if a question has been attempted
function checkAnswerAttempts ( formName ) 
{
	for( var i in pageAnswers )
	{
		if (pageAnswers[i]["formName"] == formName )
			return ( pageAnswers[i] )
	}
	return( null );
}

//remove unwanted characters from answers
function stripChars( str , charsToStrip )
{
	//var charsToStrip = [ " " , "," , "." , ":" ]
	if ( charsToStrip )
	{
		for ( var i in charsToStrip )
		{
			var strippedArr = str.split( charsToStrip[i] )
			var strippedArrLen = strippedArr.length;
			str = "";
			for ( var j = 0; j < strippedArrLen; j++ )
			{
				str+= strippedArr[j]
			}
		}
	}
	return str;
}

function findPos(obj) {

	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}



