var Cartography = {
    bookingEngineViewBean: null,
    originViewBean: null,
    hotelsViewBean: null,
    alternativeHotelsViewBean : null,
    page : null,
    
    /**
    * Liste des noms d'objets a utiliser.
    */
    getBeans: function()
    {
      return "BookingEngineViewBean;OriginViewBean;HotelsViewBean";
    },
      
    /**
    * Initialisation/Mise a jour de la variable JSON
    */
    initJSON: function()
    {
        this.bookingEngineViewBean = viewBeans["BookingEngineViewBean"];
        this.originViewBean = viewBeans["OriginViewBean"];
        this.hotelsViewBean = viewBeans["HotelsViewBean"];
    },
    
    rewrite: function() {
        // Gestion de l'affichage de la cartographie
        this.initCartographyButton();
    },

    /**
     * Gestion du bouton de la cartographie
     */
    initCartographyButton: function(){
        // recherche du numero de la page courante.
        var currentPage = 1;
        if(window.location.search); {
            if(window.location.search.indexOf("num") > 0) {
                var param = window.location.search.split("&");
                for(count = 0 ; count < param.length ; count++) {
                    if(param.indexOf("num") > 0) {
                        currentPage = param.split("=")[1];
                    }
                }
            }
        }
        
        this.page = document.body.id;
        
        if(this.page == 'resultat-alternatif-dispo')
        	this.alternativeHotelsViewBean = resultatAlternatif.alternativeHotelsViewBean;
        	
        if("formule1" == getWebapp() || "etaphotel" == getWebapp()){
	    		$("bt-affiche-carte-lh").style.display="none";
	    	}
	    	else{	
	    		if(this.page != 'resultat-alternatif-dispo')
	    			this.unloadCartography();
	    		
	    		if(this.page != 'resultat-alternatif-dispo'){
	    			var hotel_depart = this.hotelsViewBean.nbElementPerPage * (currentPage - 1);
        		var hotel_fin = Math.min(this.hotelsViewBean.hotelsNumber, hotel_depart + this.hotelsViewBean.nbElementPerPage);
        		var context=this.hotelsViewBean.context;
	    		}
	    		else if(this.page == 'resultat-alternatif-dispo' && this.alternativeHotelsViewBean != null){
	    			var hotel_depart = 0;
        		var hotel_fin = this.alternativeHotelsViewBean.hotels.length;
        		var context=this.alternativeHotelsViewBean.context;
	    		}
        
        	// On affiche mapo uniquement s'il y a des disponibles sur la page (car mapo affiche
        	// seulement les hotels de la page courante).
        	
        	if(this.page != 'resultat-alternatif-dispo'){
	        	var avaiblableCountOnPage = 0;
	        	for(var count=hotel_depart ; count < hotel_fin ; count++) {
	        		if (this.hotelsViewBean.hotels[count].available==true)
	        			avaiblableCountOnPage++;
	        	}
        	}
        	else if(this.page == 'resultat-alternatif-dispo' && this.alternativeHotelsViewBean != null){
	    			var avaiblableCountOnPage = this.alternativeHotelsViewBean.hotels.length;
	    		}
        
        	var displayButtonMapo = (avaiblableCountOnPage > 0);
        	var buttonMapo = $("bt-affiche-carte-lh");
        	if(displayButtonMapo && buttonMapo){
        		buttonMapo.onmouseover = function() {this.style.cursor='pointer'};
        		buttonMapo.src= "/" + this.originViewBean.codeLangDirectory + "/images/reservation/bt-affiche-carte-lh.gif";
        		var altButtonMapo = new Array();
        		altButtonMapo['fr']='Affichez ces hotels sur une carte';
        		altButtonMapo['gb']='Show on a map';
        		altButtonMapo['de']='Auf einer Karte';
        		altButtonMapo['es']='Visualizar en un mapa';
        		altButtonMapo['it']='Visualizza su una mappa';
        		altButtonMapo['pt']='Mostrar num mapa';
        		altButtonMapo['nl']='Geef weer op een kaart';
        		altButtonMapo['zh']='Show on a map';
        		altButtonMapo['ja']='Show on a map';
        		altButtonMapo['pl']='Pokaż na mapie';
        		buttonMapo.alt = altButtonMapo[this.originViewBean.codeLangDirectory];
        		buttonMapo.title =  buttonMapo.alt;
        		if(this.originViewBean.codeLangDirectory=='gb'){var langueMapo="en";}else{var langueMapo=this.originViewBean.codeLangDirectory;}//envoie langue 'en' a maporama 
        		
            buttonMapo.onclick = function() {
        			// Clic tag Xiti
        			if (typeof(window.parent.xt_med) == 'function' && typeof(window.parent.getCodeLangue) == 'function')
        			{
        				var mHotelListParam = 'recherche::liste_hotels::carte';
        				switch (context){
        						case 'corporate':
        							mHotelListParam += '::business::corporate';
        							break;
        						case 'travelAgency':
        							mHotelListParam += '::business::travelAgency';
        							break;
        						case 'leasureGroup':
        							mHotelListParam += '::business::leasureGroup';
        							break;
        						case 'meetingBookOnline':
          						mHotelListParam += '::business::meetingBookOnline';
          						break;
        					}					        				
        				window.parent.xt_med('C', window.parent.getCodeLangue(langueMapo), mHotelListParam, 'N');
        			}
        			// Fin clic tag Xiti
        			Cartography.loadCartography(langueMapo, hotel_depart, hotel_fin);
            };
        		buttonMapo.style.display="block";
        	} else if (buttonMapo) {
        		buttonMapo.style.display="none";
        	}
        }
    },
    
    /**
     * Masque la cartographie
     */
    unloadCartography: function(){
    	this.$p("conteneuropus").style.visibility="hidden";
    	if(this.$p("iframemapo"))
    		this.$p("iframemapo").style.display="none";
    },
    
    $p: function(id){
    	return parent.document.getElementById(id);
    },
    
    /**
     * Affiche la cartographie
     */
    loadCartography: function(langue, hotel_depart, hotel_fin){
    
    	var siteOrigine;
    	var compteOrigine = "accor";
    	switch(getWebapp()) {
			case "accorhotels": 
				siteOrigine="ACH"; 
				compteOrigine="accor";
				break;
			case "etaphotel": 
				siteOrigine="ETP"; 
				compteOrigine="ETP";
				break;
			case "formule1": 
				siteOrigine="FOR"; 
				compteOrigine="accor";
				break;
			case "ibis": 
				siteOrigine="IBI"; 
				compteOrigine="IBI";
				break;
			case "mercure": 
				siteOrigine="MER"; 
				compteOrigine="MER";
				break;
			case "novotel": 
				siteOrigine="NOV"; 
				compteOrigine="NOV";
				break;
			case "sofitel": 
				siteOrigine="SOF"; 
				compteOrigine="SOF";
				break;
			case "suitehotel": 
				siteOrigine="SUI"; 
				compteOrigine="SUI";
				break;
			case "thalassa": 
				siteOrigine="THA"; 
				compteOrigine="THA";
				break;
			case "pullman": 
				siteOrigine="PUL"; 
				compteOrigine="PUL";
				break;
			case "allseasons": 
				siteOrigine="ASE"; 
				compteOrigine="ASE";
				break;
			default: 
				siteOrigine="ACH"; 
				compteOrigine="accor";
				break;
    	}
    
    
    
      var iUrl='<iframe src="http://maps.maporama.com/idl/'+compteOrigine+'/Partner.aspx?MD_height=530&MD_width=735&_rawxml=1&MD_scale=0.00013333&xsl=popup&xml=common&MD_txtStyle=standard&Lang='+langue+'&siteOrigine='+siteOrigine;
    	
    	if(this.page != 'resultat-alternatif-dispo'){
				for(var count=hotel_depart ; count < hotel_fin ; count++) {
	    		iUrl += '&PBC_'+this.hotelsViewBean.hotels[count].position+'_config=2&PBC_'+this.hotelsViewBean.hotels[count].position+'_list='+this.hotelsViewBean.hotels[count].tarsCode;
	    		if (null != this.bookingEngineViewBean.dayIn && null != this.bookingEngineViewBean.monthIn && null != this.bookingEngineViewBean.yearIn) {
	    			if (this.hotelsViewBean.hotels[count].available==true)
	    				iUrl += '&PBC_'+this.hotelsViewBean.hotels[count].position+'_extended=free,yes';
	    			else
	    				iUrl += '&PBC_'+this.hotelsViewBean.hotels[count].position+'_extended=free,no';
	    		}
	    	}
	    	
	    	iUrl +='" id="iframemapo" frameborder="0" scrolling="no" style="display:none"></iframe>';
	    	this.$p("contiframe").innerHTML=iUrl;
	    	this.$p("conteneuropus").style.visibility="visible";
	    	this.$p("iframemapo").style.display="block";
	    	this.$p("conteneuropus").style.zIndex=10;
	    	this.$p("bt_fermer").onclick= function() {Cartography.unloadCartography()};
	    	this.$p("bt_fermer").onmouseover= function() {this.style.cursor='pointer'};
    	}
    	else if(this.page == 'resultat-alternatif-dispo' && this.alternativeHotelsViewBean != null){
  			for(var count=hotel_depart ; count < hotel_fin ; count++) {
	    		iUrl += '&PBC_'+count+'_config=2&PBC_'+count+'_list='+this.alternativeHotelsViewBean.hotels[count].code;
	    		if (null != this.bookingEngineViewBean.dayIn && null != this.bookingEngineViewBean.monthIn && null != this.bookingEngineViewBean.yearIn) {
	    			iUrl += '&PBC_'+count+'_extended=free,yes';
	    		}
	    	}
	    	
	    	// Affiche l'hotel de reference sur la carte
	    	count ++;
	    	iUrl += '&PBC_'+count+'_config=2&PBC_'+count+'_list='+this.alternativeHotelsViewBean.hotelReferenceCode;
	    	iUrl += '&PBC_'+count+'_extended=free,no';
	    	
	    	iUrl +='" id="iframemapo" frameborder="0" scrolling="no" style="display:none"></iframe>';
	    	DivPopup.openPopup('cartography', 738, 568, $("popup-opus"), null);
	    	var idPopup = $('resultat-alternatif-dispo').down();
	    	var contentIframe = idPopup.select('.contiframe')[0];
	    	if(contentIframe){
	    		contentIframe.innerHTML = iUrl;
	    		$('iframemapo').style.display="block";
	    	}
	    	var closeButton = idPopup.select('#bt_fermer')[0];
	    	if(closeButton){
	    		Event.observe(
	    			closeButton,
	    			'click',
	    			function(evt){
	    				Event.stop(evt);
	    				$('resultat-alternatif-dispo').removeChild(idPopup);
	    			}
	    		);
	    	}
  		}
    	
    }
}

core.push(Cartography);