//wc.setUserResponse.callback()
//wc.getResult.callback()
//wc.setContactInfo.callback()

// AJAX variables
var transactionObj;
var ajaxLoader = 'url(../../../static-wc/neutral/img/ajax-loader.gif)';
var wcEvent = false;
var iCurrentQuestion = 1;
var sLocal = document.documentElement.lang;
var wservicesLink = "http://74.63.88.134/Michelin-WDA-0.1/webservice/";

// Overlay variables
var overlayTitle, closeHandler, overlayContent, overlayContainer, overlay, overlayLink;
var absoluteURLVideo, addthis_language; 
if (sLocal == "en"){
	absoluteURLVideo = "http://michelinman.ca";
	//absoluteURLVideo = "http://staging.michelinman.ca";
	addthis_language = "en"; 
}
else{
	absoluteURLVideo = "http://bonhommemichelin.ca";
	//absoluteURLVideo = "http://staging.bonhommemichelin.ca";
	addthis_language = "fr";
}
var aLabels = {
	fr: {
		timeout: "Désolé, ce service n'est pas disponible pour le moment.",
		abort: "Désolé, ce service n'est pas disponible pour le moment.",
		failure: "Désolé, ce service n'est pas disponible pour le moment.",
		unavailable: "Désolé, ce service n'est pas disponible pour le moment."
	},
	en: {
		timeout: "Sorry, content is not available at this time.",
		abort: "Sorry, content is not available at this time.",
		failure: "Sorry, content is not available at this time.",
		unavailable: "Sorry, content is not available at this time."
	}
};

// Winter Center main AJAX object
var wc = {
	getQuestion: {
		callback: function(json) {
				// Récupère le container du formulaire
				var frmw = document.getElementById('form-holder');
				
				// Output du HTML
				var d = document.createElement('div');
				d.className = "fix-height";
				if(json && json.output) {
					d.innerHTML = json.output;
				} else {
					d.innerHTML = '<span style="color: red; font-weight: bold;">' + aLabels[sLocal].unavailable + '</span>';
				}
				var oldD = frmw.getElementsByTagName('div');
				if(oldD.length > 0) {
					oldD = oldD[0];
					//console.dir(oldD);
					frmw.removeChild(oldD);
				}
				frmw.appendChild(d);
				// Récupère la form
				var frm = frmw.getElementsByTagName('form')[0];
				// Gestion du submit
				YAHOO.util.Event.on(frm, "submit", function (e){
						//Stop le submit et envoie les données en JSON
						e = e || event;
						YAHOO.util.Event.preventDefault(e);
						wc.getQuestion.sendData(); 
						return false
					});
				
				
				// Affiche le formulaire
				wc.showForm();

				// Définie les évenements à gérer sur le click des liens de choix de réponse
				var opts = frm.getElementsByTagName('a');
				if(YAHOO.env.ua.ie == 6) YAHOO.util.Dom.setStyle(opts, 'zoom', "1");
				YAHOO.util.Event.addListener(opts, 'click', function (e) {
					// Stop la navigation par défaut
					e = e || event;
					YAHOO.util.Event.preventDefault(e);
					
					//Récupère le form et les liens qu'il contient
					var frm = frmw.getElementsByTagName('form')[0];
					var aa = frm.getElementsByTagName('a');
					
					// Suprime la class 'selected' de tous les liens
					for(var i=0; i < aa.length; i++) {
						//alert(aa[i].className);
						YAHOO.util.Dom.removeClass(aa[i], 'selected');
						if(YAHOO.env.ua.ie == 6) {
							aa[i].style.filter = '';
							aa[i].style.backgroundImage = '';
							aa[i].style.zoom = 1;
						}
					}
					// Récupère le contrôle de la réponse
					var ha = document.getElementById('ha');
					// Parse le href du lien cliqué pour récupérer la réponse choisi
					ha.value = this.href.substr(this.href.indexOf('#')+1);
					// Active le lien
					YAHOO.util.Dom.addClass(this, 'selected');
					// Active le bouton 'Next question'
					YAHOO.util.Dom.getElementsByClassName('disabled', 'input', frm, function(o, override) {
							//console.dir(o);
							YAHOO.util.Dom.removeClass(o, 'disabled');
							o.disabled = false;
						});
				});
				
				// Récupère le numéro de question courante
				iCurrentQuestion = document.getElementById('hq').value;
				
				//enlever le flocon si pas dans la knowledge base
				var cSfs = wc.getCookies();
				if ( !cSfs["q"+ iCurrentQuestion] || parseInt(cSfs["q"+ iCurrentQuestion], 10) != 1) {
					var sflake = YAHOO.util.Dom.getElementsByClassName("snowflake","span","qform");
					sflake[0].style.display = "none";
				}
				// Active le nombre de question dans la barre de progression et in le nombre X sur 10 de question
				var pw = document.getElementById('progress-wrapper');
				var cq = document.getElementById('currentQuestion');
				var steps = YAHOO.util.Dom.getElementsByClassName('step', 'div', pw);
				for(var i=0; i < steps.length; i++) {
					YAHOO.util.Dom.addClass(steps[i], 'active');
					if(i+1 == iCurrentQuestion) break;
				}
				cq.innerHTML = iCurrentQuestion;
			},

		sendData: function() {
				var ha = document.getElementById('ha');
				// Cache le formulaire
				wc.hideForm();
				// Récupère le form
				var frm = document.getElementById('form-holder').getElementsByTagName('form')[0];
					
				// Récupération des données à envoyer au service (Construit une query string)
				var qs = create_querry_string(frm);
				// Appel du service web pour stocker les données
				ajaxLoad(wservicesLink + "setUserResponse?" + qs);

				// Annule le sumbit
				return false;
			},
		redirect: function(json) {
				// Fin du test, une redirection à lien en fonction du résultat obtenu au test
				// alert('redirect to : ' + json.url);
				window.location = json.url;
			}
	},

	// Affiche le formulaire et suprime l'image ajax loader qui est en background
	showForm: function() {
		var frmw = document.getElementById('form-holder');
		var frm = frmw.getElementsByTagName('form')[0];
		frmw.style.backgroundImage = 'none';
		frm.style.visibility = 'visible';
	},
	
	// Cache le formulaire courant et affiche l'image ajax loader en background
	hideForm: function() {
		var frmw = document.getElementById('form-holder');
		var frm = frmw.getElementsByTagName('form')[0];
		frmw.style.backgroundImage = ajaxLoader;
		frm.style.visibility = 'hidden';
	},
	getScore: {
		callback: function(json){
				var score = document.getElementById('score-holder');
				if(score && json && json.score) {
					score.innerHTML = json.score;
				}
			}
	},
	AjaxOverlay:{
		init : 	function (link){
					YAHOO.util.Event.on(link,"click",function(e){
						YAHOO.util.Event.preventDefault(e);
						ajaxLoad(link.href);
					});
				},
		callback: 	function(json){
						overlayContent.innerHTML = json.output;
						overlayTitle.innerHTML = json.title;
						overlay.show();		
				 	}
		},
		ajaxOverlayFailure : function (data){
			overlayContent.innerHTML = "Sorry, content is not available at this time.";
			overlayTitle = "Sorry";
			overlay.show();
		},
	errorCallback: function(json) {
			alert(json.error);
		},
	getSnowflakes: function() {
			var sfwrapper = document.getElementById('snowflakes-wrapper');
			var oSfs = YAHOO.util.Dom.getElementsByClassName('snowflake', 'span', sfwrapper);
			var cSfs = wc.getCookies();
			//console.debug('num of f = '+oSfs.length);
			for(var i=0; i < oSfs.length; i++) {
				//console.debug('cSfs["q' + (i+1) + '] = "' + cSfs['q'+(i+1)] + '"');
				if(cSfs['q'+(i+1)] && parseInt(cSfs['q'+(i+1)], 10) == 1) {
					YAHOO.util.Dom.removeClass(oSfs[i], 'off');
				}
			}
		},
	getCookies: function() {
			var c = YAHOO.util.Cookie.getSubs("WinterCenterFlakes");
			if(c == null) {
				//console.debug('cookie not set, create it!');
				//console.dir(c);
				c = wc.createInitialCookies();
			}
			return c;
		},
	createInitialCookies: function() {
			var oData = {
					q1: 0, q2: 0, q3: 0, q4: 0, q5: 0, q6: 0, q7: 0, q8: 0, q9: 0, q10: 0 
			};
			var res = YAHOO.util.Cookie.setSubs("WinterCenterFlakes", oData, {path: "/", domaine: document.location.host} );
			return oData;
		},
	setFoundFlake: function(qId) {
			YAHOO.util.Cookie.setSub("WinterCenterFlakes", 'q'+qId, '1', {path: "/", domaine: document.location.host});
			wc.getSnowflakes();
		},
	setContactInfo: function(form){
			var queryString = create_querry_string(form);
			var link = wservicesLink + "setContactInfo?sid=" + sessId + '&local=' + sLocal +"&" + queryString;
			ajaxLoad(link);
		}
};

// Génère un query string à partir d'un form
function create_querry_string(frm) {
	var reqStr = "";
	var elems = frm.elements;
	
	for(i=0; i < elems.length; i++) {
		isFormObject = false;
	
		switch (elems[i].tagName) {
			case "INPUT":
				switch (elems[i].type) {
					// Les type text et hidden son géré de la même façon (nom=valeur) même si la valeur est vide
					case "text":
					case "hidden":
						reqStr += elems[i].name + "=" + escape(elems[i].value);
						isFormObject = true;
						break;
					// Tous les checkbox sont retourné, mais seulement ceux sélectionné retourne une valeur
					case "checkbox":
						reqStr += elems[i].name + "=" + (elems[i].checked ? elems[i].value : "");
						isFormObject = true;
						break;
					// Seulement les radio sélectionné sont retourné avec leur valeur
					case "radio":
						if (elems[i].checked) {
							reqStr += elems[i].name + "=" + elems[i].value;
							isFormObject = true;
						}
				}
				break;
			// Les TEXTAREA son traité comme les input text
			case "TEXTAREA":
				reqStr += elems[i].name + "=" + escape(elems[i].value);
				isFormObject = true;
				break;
			
			// Les select multiple ne sont pas géré par cette fonction
			case "SELECT":
				var sel = elems[i];
				reqStr += sel.name + "=" + (sel.selectedIndex != -1 ?sel.options[sel.selectedIndex].value : "");
				isFormObject = true;
				break;
		}
		// Si l'éléments traité est un form object (text, hidden, checkbox, radio, textarea ou select) ajoute un & (séparateur) à la query string
		if ((isFormObject) && ((i+1)!= elems.length)) {
			reqStr += "&";
		}
	}

	return reqStr;
} 

// Effectu le call ajax (en mode cross-domaine, un script est chargé dans la page)
var ajaxLoad = function(link){
	// console.debug(link);
	transactionObj = YAHOO.util.Get.script(link, {onSuccess : ajaxLoadSuccess,
								 onFailure : ajaxLoadFailure,
								 onTimeout: ajaxLoadTimeout,
								 onAbort: ajaxLoadAbort
					 });
};

var ajaxLoadSuccess = function (data){
	//Useless in this context. On success return json have a callback function in the script
}
var ajaxLoadFailure = function (data){
	alert("Sorry, content is not available at this time.");
}
var ajaxLoadAbort = function (data){
	alert("Sorry, content is not available at this time.");
}
var ajaxLoadTimeout = function (data){
	alert("Sorry, content is not available at this time.");
}

var sessId;
// Au chargement, lorsque le DOM est prêt
YAHOO.util.Event.onDOMReady(function() {
	switch (document.body.id) {
		case 'sec-test':
		case 'sec-contest':
			var resultsLink = document.getElementById('review-results-links');
			sessId = (function() {
					var qSid = "";
					if(document.location.search) {
						var sidPos = document.location.search.indexOf('sid=');
						qSid = (sidPos ? document.location.search.substr(sidPos + 4) : "").replace(/([-0-9]*).*/, "$1");
					}
					return qSid;
				})();
			if(resultsLink && resultsLink.tagName == 'A') {
				resultsLink.href = wservicesLink + "getResult?sid=" + sessId + '&local=' + sLocal;
			}
			if(document.getElementById('form-holder')) {
				//Charge la première question
				ajaxLoad(wservicesLink + "getQuestion?questionId=1&local=" + sLocal + "&sessionId=");
			} else {
				//Charge la première question
				ajaxLoad(wservicesLink + "getScore" + document.location.search);
			}
			break;
		case 'sec-test-failure':
			//Charge la première question
			ajaxLoad(wservicesLink + "getScore" + document.location.search);
			break;
		default:
	}

	//console.debug(resultsLink);
	//console.debug(sessId);
	
	overlayTitle = document.getElementById("overlay-title");
	closeHandler = document.getElementById("btn-close");
	overlayContent = document.getElementById("overlay-content");
	overlayContainer = document.getElementById("overlay-container"); 
	overlay = new YAHOO.widget.Panel(overlayContainer, {visible:false,
															width:"600px",
															modal: true,
															fixedCenter: true
															});

	overlay.render();

	YAHOO.util.Event.on(overlayContainer,"click",function(e){YAHOO.util.Event.stopPropagation(e);});
	YAHOO.util.Event.on(closeHandler,"click",function(e){YAHOO.util.Event.preventDefault(e);overlay.hide();});
	YAHOO.util.Event.on(document,"click",function(e){overlay.hide();});
	overlayLink = YAHOO.util.Dom.getElementsByClassName("overlay", "a",document, wc.AjaxOverlay.init);

});
