/*
	JS pour SITQ - Questionnaires
	SGL - Sextans
	2009-08-25
*/

var Q_num = 0;
var in_action = false;


function doc_questionnaire_ready() {

	// Logique Unix :
	// Q1 = 0^2 = 1
	// Q2 = 1^2 = 2
	// Q2 = 2^3 = 4
	switch(parseInt(getCookie(Q.cookieName))) {
		case 1: Quests_todo = new Array("2","3"); break;
		case 2: Quests_todo = new Array("1","3"); break;
		case 3: Quests_todo = new Array("3"); break;
		case 4: Quests_todo = new Array("1","2"); break;
		case 5: Quests_todo = new Array("2"); break;
		case 6: Quests_todo = new Array("1"); break;
		case 7: eraseCookie(Q.cookieName);
		default: Quests_todo = new Array("1","2","3");
	}

	Q_num = Quests_todo[Math.floor(Math.random()*Quests_todo.length)];

	$jq.ajax({
		type: "GET",
		url: "questionnaires/questionnaire_0"+Q_num+".html",
		data: { },
		dataType: "html",
		success: function(resultat){
			$jq("#wp_questionnaire").html(resultat);
			questionnaires_ready();
			return true;
		}
	});
}


function questionnaires_ready() {

	if (typeof Q_num != "undefined" && parseInt(Q_num) > 0) {
		Q.init();
		
		$jq("input.choix").change(function() {
			
		}).click(function() {
			Q.valider(this);
		});
		
		$jq("#wp_questionnaire #nav .precedent").click(function() {
			if (in_action)
				return false;
			Q.prev();
			return false;
		});
		$jq("#wp_questionnaire #nav .suivant").click(function() {
			if (in_action)
				return false;
			Q.next();
			return false;
		});
		
		$jq("#wp_questionnaire").show();
	}
}


// Questionnaire
var Q = {
	valideClass: "valide",
	invalideClass: "invalide",
	completeeClass: "completee",
	cookieName: "Quests",
	cookieDays: 30,
	reponses: {
		Q1:  { q1: 4, q2: 4, q3: 3, q4: 1, q5: 2, q6: 4, q7: 3, q8: 4, q9: 3, q10: 3 },
		Q2:  { q1: 2, q2: 1, q3: 2, q4: 3, q5: 2, q6: 3, q7: 2, q8: 1, q9: 1, q10: 5 },
		Q3:  { q1: 1, q2: 5, q3: 2, q4: 1, q5: 1, q6: 1, q7: 3, q8: 3, q9: 5, q10: 2, q11: 4 }
	},
	q_active:1,
	q_total: 0,
	init: function() {
		// Cacher les reponses
		$jq(".question_bas .confirmation").hide();
		// Enlever la marge des derniers choix
		$jq('.question label.choix:last').addClass("choix_dernier");
		
		$jq('#wp_question_'+Q_num+'_'+this.q_active).show();
		
		this.q_total = $jq('#wp_questionnaire .wp_question').length - 1; // Ne pas compter la page finale
		
		this.fleche_hide_all();
	},
	valider: function(input_checked) {
		// Questionnaire
		//	Q_num
		
		// Question
		var q_num = parseInt($jq(input_checked).parents(".question").get(0).id.replace(/question_[0-9]{1,2}_/,''));
		var q_obj = $jq(input_checked).parents(".question").get(0);
		
		// Choix selectionne
		var c_num = $jq(input_checked).attr('id').replace(/choix_[0-9]{1,2}_[0-9]{1,2}_/,'');
		
		// Bonne reponse
		var r_num = eval('this.reponses.Q'+Q_num+'.q'+q_num);

		if (!$jq(q_obj).hasClass(this.completeeClass)) {
			
			// Mauvais choix
			if (c_num != r_num) {
				$jq(input_checked).next('label').addClass(this.invalideClass);
			}
			// Bon choix
			$jq('#choix_'+Q_num+'_'+q_num+'_'+r_num).next().addClass(this.valideClass);
			
			// Reponse
			$jq("#reponse_"+Q_num+'_'+q_num).show();
			$jq("#reponse_"+Q_num+'_'+q_num).next(".vide").hide();

			// Ajuster la hauteur a cause du degrade
			if ($jq($jq("#reponse_"+Q_num+'_'+q_num).children('.content').get(0)).height() < 50)
				$jq($jq("#reponse_"+Q_num+'_'+q_num).children('.content').get(0)).css('height','40px');

			// Empecher la question des d'etre modifiee
			this.lock($jq(q_obj).attr('id'));
		}
		
		this.fleche_show();
	},
	lock: function(q_id) {
		$jq('#'+q_id).addClass(this.completeeClass);
		$jq('#'+q_id+' input.choix').each(function() {
			$jq(this).attr('disabled',true);
		});
	},
	prev: function() {
		if (this.q_active == 1)
			return false;
		
		in_action = true;
		Q.fleche_hide(Q.q_active-1);
		$jq('#wp_question_'+Q_num+'_'+this.q_active).fadeOut('normal',function() {
			Q.q_active--;
			$jq('#wp_question_'+Q_num+'_'+Q.q_active).fadeIn('fast',function() {
				Q.fleche_show();
				in_action = false;
			})
		});

	},
	next: function() {
		if (this.q_active > this.q_total)
			return false;
			
		in_action = true;
		Q.fleche_hide(Q.q_active+1);
		$jq('#wp_question_'+Q_num+'_'+this.q_active).fadeOut('normal',function() {
			Q.q_active++;
			$jq('#wp_question_'+Q_num+'_'+Q.q_active).fadeIn('fast',function() {
				Q.fleche_show();
				if (Q.q_active == Q.q_total+1) {	// Page fin
					Q.stock();
					Q.track();
				}
				in_action = false;
			})
		});
	},
	fleche_hide: function(q_active_futur) {
		if (q_active_futur == 1)
			$jq("#wp_questionnaire #nav .precedent").fadeOut('normal');

		if (!$jq('#question_'+Q_num+'_'+q_active_futur).hasClass('completee'))
			$jq("#wp_questionnaire #nav .suivant").fadeOut('normal');
	},
	fleche_show: function() {
		if (this.q_active > 1)
			$jq("#wp_questionnaire #nav .precedent").fadeIn('normal');

		if ($jq('#question_'+Q_num+'_'+Q.q_active).hasClass('completee'))
			$jq("#wp_questionnaire #nav .suivant").fadeIn('normal');
	},
	fleche_hide_all: function() {
		$jq("#wp_questionnaire #nav a").hide();
	},
	stock: function() {
		var old_value = getCookie(this.cookieName) != null ? parseInt(getCookie(this.cookieName)) : 0;

		if(old_value >= 7) {
			eraseCookie(this.cookieName);
		} else {
			var new_value = parseInt(old_value)+Math.pow(2,parseInt(Q_num)-1);		// Voir init
			setCookie(this.cookieName,new_value,this.cookieDays);
		}
	},
	track: function() {
		if(window.pageTracker)
			pageTracker._trackPageview('/'+lang+'/questionnaire-'+Q_num+'/complete');
	},
	reset: function() {
		in_action = true;
		
		$jq('input.choix').each(function() {
			$jq(this).attr('disabled',false);
			this.checked = false;
		});
		$jq('label.choix').removeClass(Q.valideClass).removeClass(Q.invalideClass);
		
		$jq('#wp_questionnaire .question').removeClass(this.completeeClass);
		
		$jq('#wp_question_'+Q_num+'_'+this.q_active).fadeOut('fast',function() {
			Q.q_active = 1;
			$jq('#wp_question_'+Q_num+'_'+Q.q_active).fadeIn('fast',function() {
				Q.fleche_hide_all();
				in_action = false;
			})
		});
		$jq(".question_bas .confirmation").hide();
		return false;
	}
}


// name - name of the desired cookie
// return string containing value of specified cookie or
// null if cookie does not exist
// http://www.webreference.com/js/column8/functions.html
function getCookie(name) {
	var dc = document.cookie;
	var prefix = name + "=";
	var begin = dc.indexOf("; " + prefix);
	if (begin == -1) { 
		begin = dc.indexOf(prefix);
		if (begin != 0) return null;
	} else begin += 2;

	var end = document.cookie.indexOf(";", begin);
	if (end == -1) end = dc.length;
	return unescape(dc.substring(begin + prefix.length, end));
}

// http://www.quirksmode.org/js/cookies.html
function setCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

// http://www.quirksmode.org/js/cookies.html
function eraseCookie(name) {
	setCookie(name,"",-1);
}
