/**
 * Configuration
 */


// activation ou non de la promotion 2 mois gratuits
// Pour activer la promotion, remplacez false par true
// Pour désactiver la promotion, remplacez true par false
// Note : il faut également renommer le gabarit adequat pour le mail "envoi a un ami"
// 			- le fichier templates/newsletter.html est celui qui sera utilisé
// 2 templates ont été livrés : 
//		- newsletter_promo_off.html qui correspond au template a utiliser si vous desactivez la promo
//		- newsletter_promo_on.html qui correspond au template a utiliser si vous activez la promo
// Il suffit de renommer le fichier desiré en "template.html" pour que cela soit pris en compte
//var maintenant = new Date();
// var annee = maintenant.getFullYear();
//var mois = maintenant.getFullMonth();
//if (mois==5){
 //var activatePromo = true;
//} else {
	//var activatePromo = false;	
//}
var activatePromo = false;

// parametres de la requete http permettant d'ouvrir automatiquement le tarificateur.
// ex: http://www.flexeo.fr?source1 ouvrira automatiquement le tarificateur
// (permet d'analyser le traffic suivant différentes sources)
var tabSources = new Array();
tabSources[0] = 'source1';
tabSources[1] = 'source2';
tabSources[2] = 'source3';
tabSources[3] = 'source4';
tabSources[4] = 'source5';



/**
 * Fin configuration
 *
 * /!\ Ne rien modifier apres cette ligne
 */

// serveur sur lequel sera déployé l'application. A laisser vide pour etre compatible sur flexeo.fr et ag2retvous.com
var svr = 'http://www.ag2retvous.com/flexeo/';


var timerLoader = null;
var templates = new Object();
var Formulaires = new Object();
var everythingIsLoaded = false;
var hints = null;
var firstRun = true;

var formEtape1 = null;
var formEtape1Mon = null;
var formEtape2 = null;
var formEtape3 = null;
var formMailAFriend = null;
var formCallback = null;
var formAdhesion = null;

var showTT = true;


var formule1 = null;
var formule2 = null;

var imgEncartGauche = (activatePromo) ? 'ecran1_2mois_gratuit.gif' : 'encart1_nopromo.gif';
var imgEncartEcrans = (activatePromo) ? 'ecran2_2mois_gratuit.gif' : 'encart2_nopromo.gif';
var mlGauche = (activatePromo) ? ' * Le b&eacute;n&eacute;fice de la gratuit&eacute; est accord&eacute; aux propositions &eacute;labor&eacute;es entre le 01/04/2009 et le 31/05/2009, aux seuls b&eacute;n&eacute;ficiaires figurant sur le bulletin d&rsquo;adh&eacute;sion et sous r&eacute;serve que l&rsquo;adh&eacute;rent nous renvoie la demande d&rsquo;adh&eacute;sion compl&egrave;te dans les d&eacute;lais pr&eacute;cis&eacute;s sur cette derni&egrave;re.' : '';

var param_newsletter = 'newsletter';
var param_envoi_ami = 'ami';
var param_callback = 'callback';



var agenceIsLoading = false;

/**
 * Initialisation de l'application
 * 	- chargement dynamique des librairies js
 *	- chargement des templates html
 *	- affichage de la popup
 *	- mise en mode "loading"
 */
function initFlexeo() {
	if (window.webkit) {
		alert('Le navigateur que vous utilisez n\'est pas compatible. Veuillez utiliser Mozilla Firefox, Microsoft Internet Explorer > 6 ou Opera > 8 pour pouvoir profiter du tarificateur Flexeo.');
		return;
	}
	if (firstRun == true) {
		// si tout est déjà chargé, on lance directement l'appli
		if (everythingIsLoaded == true) {
			initPopup();
			loadFlexeo.delay(500);
			return;
		}
		// chargement du js moodalbox et initialisation de la popup
		templates.moodalboxcss		= new Template('moodalbox.css', 'css');
		templates.moodalboxjs		= new Template('moodalbox.js', 'js', 'initPopup()');

		// chargement des js
		templates.common			= new Template('common.js', 'js');
		templates.etape1			= new Template('etape1.js', 'js');
		templates.etape1Mon			= new Template('etape1Mon.js', 'js');
		templates.etape1TNS			= new Template('etape1TNS.js', 'js');
		templates.etape1Alsace		= new Template('etape1Alsace.js', 'js');
		templates.etape2			= new Template('etape2.js', 'js');
		templates.etape3			= new Template('etape3.js', 'js');
		templates.hints				= new Template('mootips.js', 'js');
		templates.hintss			= new Template('Hints.js', 'js');
		templates.class_field		= new Template('class/class_field.js', 'js');
		templates.mailAFriendJS		= new Template('envoiAmi.js', 'js');
		templates.CallbackJS		= new Template('callback.js', 'js');
		templates.mootabs			= new Template('mootabs.js', 'js');
		templates.formules			= new Template('formules.js', 'js');
		templates.adhesionJS		= new Template('adhesion.js', 'js');
		templates.lib				= new Template('lib.js', 'js');
		templates.tarificateurs		= new Template('tarificateur.js', 'js');


		// chargement des css
		templates.popcss 			= new Template('pop.css', 'css');
		templates.tabscss 			= new Template('mootabs.css', 'css');
		templates.tipsCss 			= new Template('mootips.css', 'css');
		templates.print 			= new Template('print.css', 'css', null, true);


		// chargement des templates html
		templates.modele			= new Template('modele.html', 'html');
		templates.ecran1			= new Template('ecran1.html', 'html');
		templates.ecran1_monegasque	= new Template('ecran1_monegasque.html', 'html');
		templates.ecran1_tns		= new Template('ecran1_tns.html', 'html');
		templates.ecran1_alsace		= new Template('ecran1_alsace.html', 'html');
		templates.ecran2_1			= new Template('ecran2_1.html', 'html');
		templates.ecran2_tab		= new Template('ecran2_tab.html', 'html');
		templates.ecran3			= new Template('ecran3.html', 'html');
		templates.mailAFriend		= new Template('mailAFriend.html', 'html');
		templates.callback			= new Template('callback.html', 'html');
		templates.adhesion			= new Template('adhesion.html', 'html');
		templates.agenceAlsace		= new Template('agenceAlsace.html', 'html');
		templates.noAgenceAlsace	= new Template('noAgenceAlsace.html', 'html');
		//templates.heavy			= new Template('heavy.html', 'html');

		loadTemplates();

		// initialisation du timer qui vérifie que tous les gabarits sont bien chargés
		timerLoader = checkEverythingIsLoaded.periodical(500);
	} else {
		initPopup();
	}
}

/**
 * vérifie que tous les templates sont chargï¿½s
 * fonction appelée périodiquement
 * appel clearé dès que tout est chargé
 * lance l'initialisation de l'appli dès que tout est chargé
 */
function checkEverythingIsLoaded() {
	var rep = true;

	// boucle tous les templaets
	for (var key in templates) {
		if (templates[key].loaded != true) {
			// si 1 n'est pas chargé, on annule et renvoit false
			rep = false;
			break;
		}
	}

	// tout est chargé
	if (rep == true) {
		// suppression de l'appel de la fonction
		everythingIsLoaded = true;
		firstRun = false;
		$clear(timerLoader);
		loadFlexeo();
	}
}

/**
 * lancement de l'application
 */
function loadFlexeo() {
	// creation de la div qui contient le site
	var pop_main = new Element(
		'div',
		{
			id: 'pop_main'
		}
	);

	var pu_plan = new Element(
		'div',
		{
			id: 'pu_plan'
		}
	);
	pu_plan.injectAfter($('mb_overlay'));

	// fix FF
	if (!$('flexeoLoading')) {
		loadFlexeo.delay(50);
		return;
	}
	// inject avant l'écran de chargement
	$(pop_main).injectBefore($('flexeoLoading'));
	
	
	// on le remplit avec le html du modele
	content = templates.modele.content.replace(/##encart1##/g, imgEncartGauche);
	content = content.replace(/##mlGauche##/g, mlGauche);
	$(pop_main).setHTML(content);
	// suppression de l'écran de chargement
	$('flexeoLoading').remove();


	// injection tooltip
	var npu = new Element('div', { id: 'newPopup' });
	npu = $(npu);
	npu.addClass('toolg-tip');
	npu.addClass('tipmessage');
	npu.setStyle('display', 'none');
	npu.setStyle('position', 'absolute');
	npu.setStyle('z-index', '150');
	npu.setHTML('<div class="top"></div><div class="content" id="newPopupContent">Vous devez renseigner tous les champs obligatoires avant de valider.</div><div class="bottom"></div><div class="pointer"></div>');


	var b = document.getElementsByTagName('body')[0];
	npu.injectTop($(pop_main));

	// fix ie pour forcer à charger le bg des popups
	/*var pop = new Element(
		'div',
		{
			'id': 'pop_up',
			'class': 'positionnement_droit',
			'styles': {
				'visibility' : 'hidden'
			}
		}
	);
	pop.innerHTML = '<img src="img/afficher_tarif.gif"><img src="img/ecran1_bt_next.gif"><img src="img/ecran2_bt_tarif.gif"><img src="img/pop_up_bt_annuler2.gif"><img src="img/pop_up_bt_annuler.gif"><img src="img/pop_up_bt_envoyer.gif"><img src="img/pop_up_bt_envoyer2.gif"><img src="img/pop_up_bt_valider.gif"><img src="img/pop_up_bt_valider_off.gif">';
	pop.injectInside($('pop_main'));
	*/


	// initialisation des formulaires
	formEtape1 = new Etape1();

	// chargement de l'étape 1
	formEtape1.load();
}

/**
 * initialisation de la popup, en mode chargement
 */
function initPopup() {
	MOOdalBox.init();
	MOOdalBox.open(svr + 'templates/loading.html', '', '905 520', '');
	if (firstRun == false) {
		loadFlexeo();
	}
}

/**
 * Classe permettant le chargement à la volée de scripts js, templates html et styles css
 */
var Template = new Class({
	/**
	 * constructeur
	 * @param path string nom du fichier à charger
	 * @param type string type de document à charger (valeurs : 'html', 'css', 'js')
	 * @param callback (optionnel) string fonction à appeler quand le fichier est chargé
	 */
	initialize: function(path, type, callback, cssPrint) {
		this.path		= path;
		this.type		= type;
		this.callback	= callback;
		this.loading	= false;
		this.loaded		= false;
		this.content	= null;
		this.cssPrint = cssPrint;
	},
	/**
	 * gère le chargement des fichiers en appelant la fonction concernant le type de fichier
	 */
	load: function() {
		// si l'élément est chargé ou en cours de chargement, on annule
		if (this.loading == true || this.loaded == true) {
			return;
		}

		// l'élément est en train de charger
		this.loading = true;

		// appelle la fonction adéquate
		switch (this.type) {
			case 'js':
				this.loadJS();
				break;
			case 'html':
				this.loadHTML();
				break;
			case 'css':
				this.loadCSS();
				break;
			default:
				break;
		}
	},
	/**
	 * chargement d'un fichier JS
	 * effectue une requète Ajax vers le fichier et en évalue les scripts
	 */
	loadJS: function() {
		var _this = this;
		var myAjax = new Ajax(
			svr + 'js/' + this.path,
			{
				method: 'get',
				evalScripts: true,
				onComplete: function(rep) {
					if (_this.path == 'mail.js') alert(rep);
					_this.loaded = true;
					_this.handleCallback();
				}
			}
		).request();
	},
	/**
	 * chargement d'un fichier HTML
	 * effectue une requète Ajax vers le fichier et stocke son contenu dans l'attribut content
	 */
	loadHTML: function() {
		var _this = this;
		var myAjax = new Ajax(
			svr + 'templates/' + this.path,
			{
				method: 'get',
				onComplete: function(rep) {
					_this.loaded	= true;
					_this.content	= rep;
					_this.handleCallback();
				}
			}
		).request();
	},
	/**
	 * chargement d'un fichier CSS
	 * Utilisation de l'objet Asset de Mootools
	 */
	loadCSS: function() {
		var options = {};
		if (this.cssPrint) {
			options.media = 'print';
		} else {
			options.media = 'screen';
		}

		new Asset.css(svr + 'css/' + this.path, options);
		this.loaded = true;
		this.handleCallback();
	},
	/**
	 * gestion du callback
	 * appelle la fonction demandée si un callback est spécifié
	 */
	handleCallback: function() {
		if (this.callback != null) {
			eval(this.callback);
		}
	}
});


/**
 * charge tous les templates
 */
function loadTemplates() {
	for (var key in templates) {
		templates[key].load();
	}
}

/**
 * debug un objet en faisant un alert de toutes ses propriétés et de leurs valeurs
 */
function objectDebug(obj) {

	var rep = '';
	for (var attr in obj) {
		rep += attr + ' => ' + obj[attr] + '\r\n';
	}
	alert(rep);
}

/**
 * ferme toutes les popups
 */
function closePopUps() {
	/*if ($('pu_tt')) {
		$('pu_tt').remove();
	}
	if ($('pu_tt_btn')) {
		$('pu_tt_btn').remove();
	}*/

	if (formAdhesion != null) {
		closeAdhesion();
	}
	if (formMailAFriend != null) {
		closeMailAFriend();
	}
	if (formCallback != null) {
		closeCallback();
	}
}

/**
 * ferme l'application
 */
function closeFlexeo(retour) {
	// fermeture des popups
	closePopUps();
	// clear les timers des formulaires
	if (formEtape1.timerValidation) {
		$clear(formEtape1.timerValidation);
	}
	
	// envoi stats fermeture fenetre
	if (retour) {
		sendToWT('mode_sortie=retour_ag2r');
	} else {
		sendToWT('mode_sortie=fermer_fenetre');
	}
	
	// fermeture de la lightbox
	return MOOdalBox.destroy();
}

/**
 * impression ecran 3
 */
function _print() {
	if(window.print) {
		window.print();
	}
	return false;
}

/**
 * requete vers Stats.asmx pour webtrends
 */
function sendToWT(params) {
	var WT = new Ajax(svr + 'Stats.aspx', {
		method: 'get',
		data: params
	}).request();
}


/**
 * positionnement des tt
 */
function positionToolTip(el) {
	if (!$(el)) return;
	// si infobulles désactivées et que c ni un message d'erreur ni la bulle sur le reactiver => on masque
	if (el.id != 'act_tt' && !showTT && !$('newPopup').hasClass('erreur')) {
		$('newPopup').setStyle('display', 'none');
		return;
	} else {	// sinon on affiche
		$('newPopup').setStyle('display', 'block');
	}
	
	// calcul du positionnement
	var sp = $('newPopup').getSize();
	var si = $(el).getSize();
	var pi = $(el).getTop();
	var w = window.getSize();
	var p = $('pop_main').getTop();

	var x = p - w.scroll.y;
	var nt = pi - p - sp.size.y;
	
	if (nt < 0) nt = 0;
	
	var l = $('col_main_gauche').getLeft();
	var nl = $(el).getLeft() - l + 100;
	
	if (el == 'coords_agence' && window.ie) {
		nl -= 100;
	}
	
	// infobulle de l'ecran 2 => positionnement différent
	if (el == 'formE2') {
		nl += 355;
		nt += 145;
	}
	
		
	if (nl < 0) nl = 0;
	
	$('newPopup').setStyle('top', nt);
	$('newPopup').setStyle('left', nl);
	
	/**
	 * ajout de l'iframe transparente (correction listes déroulantes ie)
	 */
	if (window.ie6) {
	
		if ($('fakeIframe')) {
			$('fakeIframe').remove();
		}
		
		var f    = new Element('iframe', { 'id': 'fakeIframe', 'border': '0', 'frameborder': '0', 'allowtransparency': 'true', 'src': 'about:blank' });
		var d    = $("newPopup");
	
		with(f.style){
			position	= "absolute";
		 	width    	= d.offsetWidth+"px";
		  	height		= d.offsetHeight+"px";;
		 	top			= d.offsetTop+"px";
		  	left		= d.offsetLeft+"px";
		   	zIndex		= "1";
			filter		= "progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)";
		}
	
		f.injectBefore($('newPopup'));
	}
}


function desactivateTT() {
	showTT = false;
	$('act_tt').setHTML('<a id="lien_tt" href="javascript: void(0);"><img src="img/bt_reactiver_guide.gif" alt="rï¿½activer le guide"></a>');
	$('lien_tt').removeEvents();
	$('lien_tt').addEvent('click', reactivateTT);
	$('lien_tt').addEvents({
		'mouseenter': function() {
			formEtape1.guideMouseEnter('Cette touche permet de faire appara&icirc;tre toutes les infobulles explicatives');
		},
		'mouseleave': function() {
			formEtape1.guideMouseLeave();
		}
	});
}

function reactivateTT() {
	showTT = true;
	$('act_tt').setHTML('<a id="lien_tt" href="javascript: void(0);"><img src="img/bt_desactiver_guide.gif" alt="d&eacute;sactiver le guide"></a>');

	$('lien_tt').removeEvents();
	$('lien_tt').addEvent('click', desactivateTT);
	$('lien_tt').addEvents({
		'mouseenter': function() {
			formEtape1.guideMouseEnter('Cette touche permet de d&eacute;sactiver toutes les infobulles explicatives, qui n\'appara&icirc;tront plus.');
		},
		'mouseleave': function() {
			formEtape1.guideMouseLeave();
		}
	});
}

window.addEvent('load', function() {
	if (window.location.href.indexOf(param_callback) > -1 || window.location.href.indexOf(param_newsletter) > -1 || window.location.href.indexOf(param_envoi_ami) > -1) {
		initFlexeo();
	}
	for (var i = 0; i < tabSources.length; i++) {
		if (window.location.href.indexOf(tabSources[i]) > -1) {
			initFlexeo();
			break;
		}
	}
});