var Rules = {

	'.revealbutton:click' : function(el) {
		
		var elnumber = el.id.match(/([ac]{1}q[0-9]{1,2})\_/);
		if (elnumber[1]) {
			elnumber = elnumber[1];
			
			if ($(elnumber+'_answer').hasClassName('masked') && $(elnumber+'_reveal').hasClassName('revealbuttonpointer')) {
			
				$(elnumber+'_response').innerHTML = checkAnswer(elnumber);
			
				$(elnumber+'_answer').removeClassName('masked');
				$(elnumber+'_desc').hide();
				$(elnumber+'_desc').style.visibility = 'visible';
				Effect.Appear(elnumber+'_desc');
				
				Effect.Fade(el,{'duration':1,'to':0});
				el.removeClassName('revealbuttonpointer');
				
				
				// see if the next button should be enabled
				if($$('div.masked').any() == false) {
					$('submitbutton').enable();
					Effect.Appear('submitbutton',{to: 1});
				
				}
			}
		}
	},
	
	'.revealbutton':function(el) {
		Effect.Appear(el,{'duration':.1,'to':.3});
	},
	
	'#futureQuiz:submit':function() {
		$('futureQuiz').enable();
	}
}

var initializeQuestionHandlers = function() {

	Effect.Appear('submitbutton',{to: .3});

	$$('.questionBlock').each(function(el){
	
		var questionNumber = el.id.match(/[ac]{1}q([0-9]{1,2})/).pop();
	
		if (el.hasClassName('radial')) {
			init_radial(questionNumber);
		} else if (el.hasClassName('checkbox')) {
			init_checkbox(questionNumber);
		} else {
			eval('init_'+el.id+'();');
		}
		
		el.select('.answerset').each(function(oneel){oneel.show();});
	});
}

Event.observe(window,'load',initializeQuestionHandlers);
Event.observe(window,'load', function() {
	EventSelectors.start(Rules);
});



var init_checkbox = function(questionNumber) {

	var themode = 'c';
	
	if ($('aq'+questionNumber)) {
		themode = 'a';
	}

	$('futureQuiz').getInputs('checkbox').each(function(el){
	
		var creg = new RegExp(themode+'q'+questionNumber+"\_");
	
		if (el.id.match(creg)) {
		
			Event.observe(el,'change',function(){
				Effect.Appear(themode+'q'+questionNumber+'_reveal');
				$(themode+'q'+questionNumber+'_reveal').addClassName('revealbuttonpointer');
			});
			Event.observe(el,'click',function(){
				Effect.Appear(themode+'q'+questionNumber+'_reveal');
				$(themode+'q'+questionNumber+'_reveal').addClassName('revealbuttonpointer');
			});
			Event.observe(el.next(),'click',function(){
				if($(themode+'q'+questionNumber+'_reveal').visible == false) {
					Effect.Appear(themode+'q'+questionNumber+'_reveal');
					$(themode+'q'+questionNumber+'_reveal').addClassName('revealbuttonpointer');
				}
			});
			
		}
	
	});
}


function init_radial(questionNumber) {
	
	var themode = 'c';
	
	if ($('aq'+questionNumber)) {
		themode = 'a';
	}
	
	$('futureQuiz').getInputs('radio',themode+'q'+questionNumber).each(function(el){
		Event.observe(el,'change',function(){
			Effect.Appear(themode+'q'+questionNumber+'_reveal');
			$(themode+'q'+questionNumber+'_reveal').addClassName('revealbuttonpointer');
		});
		Event.observe(el,'click',function(){
			Effect.Appear(themode+'q'+questionNumber+'_reveal');
			$(themode+'q'+questionNumber+'_reveal').addClassName('revealbuttonpointer');
		});
		Event.observe(el.next(),'click',function(){
			if($(themode+'q'+questionNumber+'_reveal').visible == false) {
				Effect.Appear(themode+'q'+questionNumber+'_reveal');
				$(themode+'q'+questionNumber+'_reveal').addClassName('revealbuttonpointer');
			}
		});
		
	});	
}


function getCheckImage(type) {

	var daImage = new Image();

	switch(type) {
		case 'wrong':
		
			daImage.src = '/typo3conf/ext/user_futureisorganicquiz/img/x.gif';
		break;
		
		case 'correct':
		
			daImage.src = '/typo3conf/ext/user_futureisorganicquiz/img/check.gif';
			
		break;
		
		case 'almost':
		
			daImage.src = '/typo3conf/ext/user_futureisorganicquiz/img/arrow.gif';
		break;
		
	}
	return daImage;
}

var checkAnswer = function(questionPrefix) {
	
	var resultsHeader = $H({
		'correct' : 'Great Job!',
		'almost' : 'Almost!',
		'wrong' : 'Good try, but...'
	});
	
	var results = '';
	var inputName = null;
	
	var inputType = '';
	if ($(questionPrefix).hasClassName('radial')) {
		inputType = 'radio';
		inputName = questionPrefix;
		
	} else if ($(questionPrefix).hasClassName('checkbox')) {
		inputType = 'checkbox';
	}
	
	var foundshouldhave = false;
	
	$('futureQuiz').getInputs(inputType,inputName).each(function(el){
		
		
		
		if (el.checked && el.hasClassName('ra')) {
			markit(el,'correct');
			
			var correctimg = new Image();
			correctimg.src = '/typo3conf/ext/user_futureisorganicquiz/img/check.gif';

			
			if (!results && !foundshouldhave) {
				results = resultsHeader.get('correct');
			}



			el.previous().insert(correctimg);
			
		} else if (el.checked && !el.hasClassName('c')) {
			
			var wrongimg = new Image();
			wrongimg.src = '/typo3conf/ext/user_futureisorganicquiz/img/x.gif';
	
			
			markit(el,'wrong');
			results = resultsHeader.get('wrong');
			el.previous().insert(wrongimg);
			
		} else if (el.hasClassName('ra') || el.hasClassName('c')) {
				
			if (el.checked) {  		
				results = resultsHeader.get('almost');
			} else if (!el.hasClassName('c')) { 
				markit(el,'shouldhave');
				var almostimg = new Image();
				almostimg.src = '/typo3conf/ext/user_futureisorganicquiz/img/arrow.gif';
				el.previous().insert(almostimg);
				foundshouldhave = true;
			}
			
		} else {
			markit(el,'fadeit');
		}
		
		el.disabled = true;
	});
	
	if (!results) {
		results = resultsHeader.get('almost');
	}
	
	return results;	
}

/**
 * Marks an input radio or checkbox and it's label with a class.
 */
function markit(inputel,classToAdd) {
	[inputel,inputel.next()].each(function(el){el.addClassName(classToAdd);});
}

