var quiz = {
	formTestMode: false,
	questionsToAsk: 3,
	textFalscheAntwort: 'Sie haben die falsche Antwort ausgewählt, probieren Sie es erneut.',
	tokenUrl: 'services/getToken.php',
	submitUrl: 'services/saveCustomer.php',
	
	hasDealer: false,
	pages : null,
	pageFragen : null,
	pageDone : null,
	pageDanke : null,
	currentQuestion: 0,
	initDone: false,
	formData:{},
	
	questions: [{
		copy: 'Für was steht Volvo',
		correct: 1,
		rightCopy: 'Seit seiner Gründung ist das Unternehmen Volvo mit einem speziellen Versprechen verbunden: Wer sich für einen Volvo entscheidet, kann sich darauf verlassen, dass er eines der weltweit sichersten Automobile erwirbt. Diese große Verpflichtung muss von uns täglich aufs neue mit Leben erfüllt werden. Denn wir wollen auch in Zukunft ein Vorbild sein. Eine außerordentliche Herausforderung ist dies vor allem für alle Mitarbeiter, die im Bereich der Sicherheit eine hohe Verantwortung tragen.',
		answers:["Brilliantes Espressomaschinen-Design", "Sicherheit", "Schwedische Gardinen"]
	},{
		copy: 'Was wird u.a. beim kostenlosen Sicherheitscheck überprüft?',
		correct: 0,
		rightCopy: 'Beim kostenlosen Sicherheitscheck von Volvo werden alle wichtigen Sicherheitssysteme Ihres Volvo eingehend überprüft und umfasst folgende Maßnahmen: Elektroniksystem, Bremssystem, Sicherheitsgurte, Reifen/Räder, Sicht/Beleuchtung, Stoßdämpfer, Karosserie und Ausrüstung.',
		answers:["Bremssystem ", "Spiegelbild", "Funktion des Radios"]
	},{
		copy: 'Seit wann gibt es den Dreipunktgurt?',
		correct: 0,
		rightCopy: '',
		answers:["1959", "2010", "1880"]
	}],
	
	init: function () {
		if (!this.initDone) {
			this.initDone = true;
			this.pages = $('div.quizpage');
			this.pageFragen = this.pages.filter('#quizfragen');
			this.pageDone = this.pages.filter('#quizdone');
			this.pageDanke = this.pages.filter('#quizdanke');
			
			$('#tc_gewinnspiel .antworten a').live('click', $.proxy(this, 'selectAnswer'))
				.live('mouseover', $.proxy(this, 'hideFalseAnswerComment'));
			
			$('#tc_gewinnspiel .weiter a').live('click', $.proxy(this, 'gotoNextQuestion'));
			
			$('#btnStart').click($.proxy(this, 'startQuiz'));
			
			$('#gewinnspielDealer a.change').live('click', $.proxy(this, 'selectNewDealer'));
			
			this.pageDone.find('input').focus(function(e) {$(this).closest('table').find('label[for='+this.id+']').removeClass('error')});
			this.pageDone.find('input[name=antispam]').css("visibility", "hidden");
			this.pageDone.find('a.submit').click($.proxy(this, 'submitForm'));
		}
		
		this.resetForm();
		if (this.formTestMode) {
			this.gotoPage(this.pageDone, true);
		} else {
			this.gotoPage(this.pages.filter(':first'), true);
		}
	},
	
	resetForm: function () {
		this.pageDone.find("input[type=text]").val('');
		this.pageDone.find("input[type=checkbox]").attr('checked', false);
	},
	
	startQuiz: function () {
		var questionsAvailable = this.questions.slice(0);
		this.currentQuestion = 0;
		this.pageFragen.html('');
		for (var i=0; i<this.questionsToAsk; i++) {
			this.addQuestion(questionsAvailable.splice(Math.floor(Math.random() * questionsAvailable.length), 1)[0]);
		}
		this.pageFragen.html('<div class="slide">'+this.pageFragen.html()+'<div>');
		this.gotoPage(this.pageFragen);
		
		return false;
	},
	
	addQuestion: function (question) {
		var code = '<div class="question"><h1>'+question.copy+'</h1>';
		code += '<p class="antworten">';
		for (var i=0; i<question.answers.length; i++) {
			code += '<a'+(question.correct==i ? ' class="correct"' : '')+'>'+question.answers[i]+'</a>';
		}
		code += '<br class="clear" /></p>';
		code += '<div style="display:none;" class="richtig"><h2>Richtig!</h2><p>'+question.rightCopy+'</p></div>';
		code += '<div style="display:none;" class="falsch"><h2>Leider falsch.</h2><p>'+this.textFalscheAntwort+'</p></div>';
		code += '<p class="weiter"><a class="btn">Weiter</a></p>';
		code += '</div>';
		this.pageFragen.append(code);
	},
	
	gotoPage: function (nextPage, instant) {
		if (instant) {
			this.pages.hide();
			nextPage.show();
		} else {
			this.pages.fadeOut(150);
			nextPage.delay(300).fadeIn(250);
		}
	}, 
	
	selectAnswer: function (e) {
		var t = $(e.target);
		t.siblings('a').removeClass('selected');
		t.addClass('selected');
		if (this.isCorrectAnswer()) {
			t.closest('.question').find('.falsch').clearQueue().hide();
			t.closest('.question').find('.richtig').clearQueue().fadeIn(300);
		} else {
			t.closest('.question').find('.richtig').clearQueue().hide();
			t.closest('.question').find('.falsch').clearQueue().fadeIn(300);
		}
		return false;
	},
	
	hideFalseAnswerComment: function (e) {
		var t = $(e.target);
		t.closest('.question').find('.falsch').delay(500).fadeOut(200);
	},
	
	gotoNextQuestion: function (e) {
		var t = $(e.target);
		if (this.isCorrectAnswer()) {
			var slide = t.closest('.slide');
			var newPosX = slide.position().left;
			var questionWidth = slide.find('.question:first').width();
			newPosX -= questionWidth ;
			
			if (newPosX <= this.questionsToAsk * -questionWidth) {
				this.gotoPage(this.pageDone);
			} else {
				this.currentQuestion++;
				slide.animate({left:newPosX}, 300, 'easeOutExpo');
			}
		} else {
			t.closest('.question').find('.falsch').fadeIn(300);
		}
		return false;
	},
	
	isCorrectAnswer: function () {
		var selectedAnswer = this.pageFragen.find('.antworten a.selected');
		return selectedAnswer.length > this.currentQuestion && selectedAnswer.length == selectedAnswer.filter('.correct').length;
	},
	
	submitForm: function () {
		if (this.isCorrectAnswer() || this.formTestMode) {
			var form = this.pageDone.find('form:first');
			var hasError = false;
			this.formData = {};
			
			this.pageDone.find('input').each(function () {
				if (this.type.toLowerCase() == 'text' || this.checked) {
					quiz.formData[this.name]=this.value;
				}
				if (!this.value && !this.checked && this.name != 'antispam') {
					hasError = true;
					form.find('label[for='+this.id+']').addClass('error');
				}
			});
			
			if (this.formData.email && this.formData.email.length < 5 || this.formData.email.indexOf('@') < 1) {
				form.find('label[for=q_email]').addClass('error');
				hasError = true;
			}
			
			if (this.formData.plz && this.formData.plz.length != 5 || isNaN(this.formData.plz)) {
				form.find('label[for=q_plz]').addClass('error');
				hasError = true;
			}
			
			if (!this.hasDealer) {
				form.find('label[for=q_dealer]').addClass('error');
				hasError = true;
			}
			
			if (!hasError) {
				$.post(this.tokenUrl, {r:Math.random()}, $.proxy(this, "finishSubmit"));
				this.gotoPage(this.pageDanke);
			} else {
				this.formData = {};
			}
		}
	},
	
	finishSubmit: function (token) {
		this.formData.antispam += token;
		$.post(this.submitUrl, this.formData);
		this.resetForm();
		this.formData = {};
	},
	
	setDealer: function () {
		var dealerS = $('.distributorSearch:first .innerContent');
		this.pageDone.find('form:first label[for=q_dealer]').removeClass('error');
		if (dealerS.children('.inputContainer').length <= 0) {
			this.hasDealer = true;
			var infos = dealerS.children("p:lt(3)");
			var html = '<strong>'+infos[0].innerHTML+'</strong><br />'+infos[1].innerHTML+'<br />'+infos[2].innerHTML+' &nbsp;&nbsp; <a class="rightOrange change">Ändern</a>';
			$('#gewinnspielDealer').html(html);
		} else {
			this.hasDealer = false;
			$('#gewinnspielDealer').html('<div class="noDealer">Kein Händler ausgewählt. &nbsp;&nbsp; <a class="rightOrange change">Auswählen</a></div>');
		}
	},
	
	selectNewDealer: function () {	
		var plz = this.pageDone.find('form:first #q_plz').val();
		var submitButton = $('.distributorSearch:first a.submit ');
		if (submitButton.length > 0) {
			$('.distributorSearch input[name=plz]').val(plz);
			submitButton .click();
		} else {
			dealer.refreshFormBox(null, plz);
		}
		return false;
	}
	
}

quiz.init();
