var SEARCH_UID=Math.floor(1000000*Math.random());

/**
 * Permet d'effectuer une redirection (changement d'URL)
 * dans la fenêtre courante.
 *
 * FIXME mettre dans un fichier de tools
 * FIXME onglet si supporté ?
 */
function selfRedirect(_url){
	window.location.href=_url;
}

/**
 * Permet d'effectuer un enregistrement des infos nécessaires au tracking en session et d'effectuer la redirection partenaire
 *
 * @param {Integer} _indexHotel : indice de l'hotel dans la liste affichée
 */
function clicBestHotel(_indexHotel){
	// récup hotel Easy
	var hEasy=DisplayedList().get(_indexHotel-1);
	if(hEasy===null) return; // FIXME exception ??

	// récup hotel partenaire
	clicHotelPartenaire(hEasy.listeHotelPart[0]);
}

/**
 * Permet d'effectuer un enregistrement des infos nécessaires au tracking en session et d'effectuer la redirection partenaire
 */
function clicPropHotel(_indexHotel, _indexProposition){
	// récup hotel Easy
	var hEasy=null;
	if (display.hotelSelected) {
		hEasy = filtreSelections.selec[_indexHotel-1];
	}
	else{
		hEasy = DisplayedList().get(_indexHotel-1);
	}
	if(hEasy===null) return; // FIXME exception ??
	
	// récup hotel partenaire
	clicHotelPartenaire(hEasy.listeHotelPart[_indexProposition-1]);
}

/**
 * Permet d'effectuer un enregistrement des infos nécessaires au tracking en session et d'effectuer la redirection partenaire
 */
function clicHotel(_hotel, _proposition){
	// récup hotel Easy
	var hEasy=hotelsList.findHotelById(_hotel);
	if(hEasy===null) return; // FIXME exception ??

	// récup proposition partenaire
	clicHotelPartenaire(hEasy.findPropositionPartenaireById(_proposition));
}

/**
 * Permet d'effectuer un enregistrement des infos nécessaires au tracking en session et d'effectuer la redirection partenaire
 * @param {HotelPartenaire} _hPart : FIXME
 */
function clicHotelPartenaire(_hPart){
	if(_hPart===null) return; // FIXME exception ??

	window.open(_hPart.urlDetails, SEARCH_UID+'_'+_hPart.idHotelPart+'_'+_hPart.id, 'toolbar=yes,location=yes,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width=800,height=600,left=50,top=50');

	// redirection
	//redirectionPartenaire(SEARCH_UID+'_'+_hotel+'_'+_proposition, hPart);
}

function clicHotelPart(_urlDetails, _idHotelPart, _idPart){
	window.open('/meh/'+_urlDetails, SEARCH_UID+'_'+_idHotelPart+'_'+_idPart, 'toolbar=yes,location=yes,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width=800,height=600,left=50,top=50');
}

/**
 * Permet de stocker l'information 'acceptation des
 * fenêtres popups'.
 *
 * Cette variable est par défaut à 'true'
 *
 * Elle est passée à 'false' si le navigateur empêche
 * les fenêtres de s'ouvrir.
 */
var popAccept=true;

/**
 * Permet d'ouvrir une popup standard d'affichage d'infos partenaire.
 * - Elle est initialisée avec une page d'attente
 * - Les informations de tracking sont enregistrées sur le serveur
 * - Si la fenêtre s'ouvre bien la redirection se fait dans la popup
 * - Sinon, la redirection se fait dans la page courante
 *
 * NOTA : si une fenêtre popup ne s'ouvre pas, ensuite toutes les
 *  redirections partenaires se feront dans la page courante.
 *
 * @param _clicId : nom de la fenêtre à ouvrir (cela permet de réutiliser la même fenêtre si l'internaute clique plusieurs fois sur le même lien)
 * @param _propal : instance d'une proposition partenaire (contenant id partenaire + url de redirection)
 */
function redirectionPartenaire(_clicId, _propal){
	// création de l'objet clic qui va regrouper
	// les informations nécessaires au tracking
	// du clic.
	var clicTmp=new ev.me.Clic();
	clicTmp.id=_clicId;
	clicTmp.partenaire=_propal.idPart;
	clicTmp.hotelPartenaire=_propal.idHotelPart;
	clicTmp.prix=_propal.prixTTC;
	clicTmp.urlDetails=_propal.urlDetails;

	if(!popAccept){
		log("Les popups ne sont pas acceptés : redirection dans la page courante");
		// si les popups ne sont pas autorisés,
    // on utilise la page courante.

		selfRedirect('infos.htm?'+clicTmp.partenaire);

		// on track le clic (sans fenetre en param)
		startTrackClicTimeline(clicTmp);

		// et on sort
		return;
	}

	if((!detailPopupWindows[_clicId])||detailPopupWindows[_clicId].closed){
		// si la fenêtre n'existe pas ou est fermée on la réinitialise
		detailPopupWindows[_clicId]=null;

		// on ouvre la page d'attente
		var popupWindow=window.open('infos.htm?'+clicTmp.partenaire,clicTmp.id,'toolbar=yes,location=yes,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width=800,height=600,left=50,top=50');
		if((!popupWindow)||popupWindow.closed){
		  log("Les popups ne sont pas acceptés : redirection dans la page courante");

			// Si la fenêtre ne s'est pas ouverte
			// correctement, on utilisera la page
			// courante.
			popAccept=false;

			// on track le clic (sans fenetre en param)
			startTrackClicTimeline(clicTmp);

			// et on sort
			return;
		}

		log("Les popups sont acceptés : redirection dans une popup ("+popupWindow.name+")");

		// la fenêtre s'est ouverte correctement, on la stocke dans la map
		detailPopupWindows[_clicId]=popupWindow;

		// on s'assure que la fenêtre est au premier plan
		popupWindow.focus();

		// on modifie les éléments de la page d'attente dés qu'elle est chargée
		popupWindow.onload=function(){
			//FIXME mettre image du partenaire + lien vers page details

			/* FIXME supprimer test */ popupWindow.document.body.style.backgroundColor="#FFFFDD";
			/* FIXME supprimer test */ popupWindow.document.getElementById("waitLabel").style.backgroundColor="#05FF5F";
			/* FIXME supprimer test */ popupWindow.document.getElementById("waitLabel").style.color="#055FFF";
			/* FIXME supprimer test */ popupWindow.document.getElementById("waitLabel").style.fontWeight="bold";
			/* FIXME supprimer test */ popupWindow.document.getElementById("waitLabel").style.fontSize="12pt";

			log("FLAG 1 : "+popupWindow.document.getElementById("waitLabel").innerHTML);

			// on track le clic (avec la fenetre en param)
			startTrackClicTimeline(clicTmp, popupWindow);
		};

		return;
	}
	else{
		// si la fenêtre existe et n'a pas été fermée,
		// on la réutilise

		// page d'attente
		detailPopupWindows[_clicId].location.href='infos.htm?'+clicTmp.partenaire;

//		// modifications post-chargement + (tracking du clic ? FIXME)
//		detailPopupWindows[_clicId].onload=function(){
//			log("FLAG 2 : "+detailPopupWindows[_clicId].document.getElementById("waitLabel").innerHTML);
//			//FIXME trac ici à priori
//		}

		// on track le clic (avec la fenetre en param)
		startTrackClicTimeline(clicTmp, detailPopupWindows[_clicId]);
	}
}

/**
 * Permet de tracker le clic via une
 * timeline.
 *
 * NOTA : méthode utilisée en interne.
 * NOTA : une fois que le clic est tracké,
 *  la page du partenaire est ouverte dans
 *  la popup donnée (ou dans la page
 *  courante si aucune n'est fournie).
 *
 * @param {Object} _clic : objet contenant les infos du clic
 * @param {Object} _popupWin : référence à la fenêtre ouverte (popup) s'il elle existe (null si on ne doit pas en tenir compte)
 */
function startTrackClicTimeline(_clic, _popupWin){
	// INIT TIMELINE & LISTENER - TRACKING CLIC
	var clicTimeline=new Timeline(100);
	ClicTimelineListener.prototype=new TimelineListener();
	var listener=new ClicTimelineListener(3000, Context().BASE_XML+"/tracking.clic.jsp", window.compte, Critere(), _clic);
	clicTimeline.addTimelineListener(listener);

	/**
	 * Une fois que le clic est enregistré,
	 * si la fenêtre est encore ouverte, on
	 * ouvre la page du partenaire.
	 */
	listener.onClicTracked=function(){
		//alert("onClicTracked() and now clicId="+_clic.id);
		if(!_popupWin){
			// si aucune fenêtre n'est donnée, on utilise la fenêtre courante
			selfRedirect(_clic.urlDetails);
			return;
		}
		log("FLAG 3 : "+_popupWin.document.getElementById("waitLabel").innerHTML);
		if(_popupWin.closed){
			log('fenêtre fermée!');//FIXME supprimer alerte
			return;
		}
		var popupWindow=window.open(_clic.urlDetails,_clic.id,'toolbar=yes,location=yes,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width=800,height=600,left=100,top=100');
		if((!popupWindow)||popupWindow.closed){
			log("PROBLEME !!! '"+popupWindow+"' -> '"+popupWindow.name+"'");
			//selfRedirect(_clic.urlDetails);
			return;
		}
		popupWindow.focus();
	};

	// START TIMELINE - TRACKING CLIC
	clicTimeline.start();
}

/**
 * Map de popups classées par identifiant de clic.
 */
var detailPopupWindows=new Array();
