/**
* Objet javascript permettant de gérer les données d'affichage
* de la page d'affichage des tarifs.
*/

var class_technique = "techPrice" ; 
var MultiRates = {
    
  bookingEngineViewBean: null,
  roomsListViewBean: null,
  originViewBean: null,

  /**
  * Liste des noms d'objets à utiliser.
  */
  getBeans: function() 
  {
    return "RoomsListViewBean;BookingEngineViewBean;OriginViewBean";
  },

  /**
   * Initialisation de la variable JSON
   */
  initJSON: function() 
  {
    var num;
    try {
      for( num in beans)
      {
        if("RoomsListViewBean" == beans[num].nom) 
        {
          roomsListViewBean = beans[num].bean;
        }
        if("BookingEngineViewBean" == beans[num].nom) 
        {
          bookingEngineViewBean = beans[num].bean;
        }
        if("OriginViewBean" == beans[num].nom) 
        {
          originViewBean = beans[num].bean;
        }
      }
    } catch(e) 
    {
      alert(e);
    }
  },

  /**
  * Retourne la variable de classe instanciée.
  */
  
  getRoomsListViewBean: function() 
  {
    return roomsListViewBean;
  }, 
  getBookingEngineViewBean: function() 
  {
    return bookingEngineViewBean;
  },
	getMultirateCurrency: function() {
		return this.beanRoomsListe[this.tab_type][0].currency ;
	},
  /**
  * Ecrivez votre code sur l'initialisation des affichage de la page ici.
  * Cette méthode est appelée sur le onload de la page.
  */
  rewrite: function() 
  {
    this.hasTarifsIframeBeenLoaded = false;
    $("mask-layer").style.top = Number($("tarifs").offsetTop+6)+"px";
   	$("mask-layer").show();
    
    this.loadRooms();    // chargement des chambres du bean
    this.setRoomClick();    // bind de sélection d'une autre chambre
    this.displayRoomsList();
    this.tabClickControl();
	  
	  // Popups
    this.setLegendRatesPopupLinks();
    this.setRatesSalesPoliciesRatesDetailsLinks();
    //this.setMoreInfosLinks();    // lien +infos supprimé du cahier des charges
    this.setDescRoomsLinks();    // lien de descriptions des chambres d'hotels
    this.setInfoRatesLinks();
    this.switchDisplayInTarifIframe();
    //this.adaptTabIframeForContentHeight();
    
    // enregistre la currency renvoyée
    // ce code supplémentaire est obligé par le fait que l'iframe est reloadée sans consideration des changements de devise
    // => il faut tout reconvertir si on clique sur "Autres chambres dispo"
    var c = this.getMultirateCurrency();
    Currencies.setOriginalCurrency(c) ;
    Currencies.setCrtCurrency(c) ;
    this.tarifsIframe = frames['tarifs'];
    
   /*
    if (navigator.userAgent.indexOf('Firefox/3') > -1) 	{
    	frames['tarifs'].location.reload(true); // forces (re)load of frame in case FF3 and back (do you know how to detect a "back" loading ?
  	}	
   */ 	
    //deals with re-assigning event handlers when the iframe has been reloaded
    Event.observe(      $("tarifs"),      "load",
      function()
      {
        this.hasTarifsIframeBeenLoaded = true;
        this.loadRooms(); 
        
        this.displayRoomsList();
        if(typeof(setupRollOversIframe) != "undefined")
        {
            setupRollOversIframe();
        }
        this.bindActiveTabAndContent();
        this.setRatesSalesPoliciesRatesDetailsLinks();
        this.switchDisplayInTarifIframe();
				this.adaptPriceMarginHeight();
        this.adaptTabIframeForContentHeight();
        this.bindTheIframeFlexPopup();
        this.bindTheIframeValidateButtons();    // bind des boutons "Valider" de l'iframe
				this.changeStyles();
        //toggle the action (fetch url) set on the extend stay validate link (based on the dates set in the arrival and departure fields)
           //this is done here because it has to be done after the binding which is done in bindTheIframeValidateButtons (so that we unbind if necessary)
        if(typeof(this.tab_type) != "undefined" && this.tab_type == "packages")
        {
            if(this.tarifsIframe.ExtendPackageStayDates)
                   this.tarifsIframe.ExtendPackageStayDates.toggleExtendStayValidateButtonAction();
        }
		    var c = this.getMultirateCurrency();
		    Currencies.setOriginalCurrency(c) ;
        
  			Currencies.purgeTarifs(); // vide le tableau de tarifs
  			Currencies.doSelectCurrency("s_devise", Currencies.CrtCurrency);
        
        // renvoi des données apres conversion (ex : clic sur autre chambres apres avoir converti) 
	 			//Currencies.registerEverythingFromPage(Currencies.OriginalCurrency); // on enregistre les données non converties (renvoyées)
	 			if (Currencies.CrtCurrency !=  Currencies.OriginalCurrency) {
  			 	Currencies.convertEverythingFromPage(Currencies.OriginalCurrency, Currencies.CrtCurrency);
  			}
  			$("autre_devise").innerHTML = Currencies.CrtCurrency ;
  			var sousDocs = top.document.getElementsByTagName("iframe");
				
  			if(typeof frames['tarifs'].$ != undefined && frames['tarifs'].$('s_devise') != null){	 	Currencies.observeSelect(frames['tarifs'].$('s_devise'));}
  			
    
      }.bind(this)
    );
    
    if(navigator.userAgent.indexOf('Safari') != -1)    {
        if($('tarifs')){
            //$('tarifs').style.width="695px";
        }
    }
    
    
  },
  changeStyles: function (){
  	        if(
            navigator.userAgent.search(/MSIE 6/) != -1
            && navigator.userAgent.search(/opera/) == -1
        )
        {
            for(var i = $("tarifs").contentWindow.document.getElementsByTagName("li").length - 1; i >= 0; i--)
            {
                var li = $("tarifs").contentWindow.document.getElementsByTagName("li")[i];
                if(li.className.search(/chambre/) !== -1)
                {
                    var height = $(li).getHeight();
                    var spanBottom = li.getElementsByTagName("span")[li.getElementsByTagName("span").length-1];
                    spanBottom.style.bottom = "auto";
                    spanBottom.style.top = (height-14)+"px";
                }
            }
            
            var last = $("tarifs").contentWindow.document.getElementsByTagName("span").length-1;
            var span = $("tarifs").contentWindow.document.getElementsByTagName("span")[last];
                if(span.className.search(/extra-bottom/) !== -1)
                {
                    var height = $("tarifs").getHeight();
                    span.style.bottom = "auto";
                    span.style.top = (height-14)+"px";
                }
        }

  },
  /**
   * Gère les clics sur les onglet de la page
   * L'iframe correspondant à l'onglet n'est pas rechargée si l'onglet est déjà sélectionné
   */
  tabClickControl: function()
  {
    
    if($("multirates_tabs")) {
        for (var i = $("multirates_tabs").getElementsByTagName("a").length - 1; i >= 0; i--)
        {
          Event.observe(
            $("multirates_tabs").getElementsByTagName("a")[i],
            "click",
            function(e)
            {
              if(!e.target && e.srcElement)/* Débuggage IE */
              {
                e.target = e.srcElement;
              }
              if(e.target.nodeName != "A")
              {
                    return;
              }
			  Event.stop(e);
              var urlParts = e.target.href.split("?");
              var params = urlParts[1].split("&");
              var iframeAlreadyLoaded = true;
              for (var j = params.length - 1; j >= 0; j--)
              {
                var paramData = params[j].split("=");
                if(MultiRates.getTarifsIframeParam(paramData[0]) != paramData[1])
                {
                  iframeAlreadyLoaded = false;
                }
                if(paramData[0] == "type")
                {
                  MultiRates.tab_type = paramData[1];
                }
              };
              if(!iframeAlreadyLoaded)
              {
				$('tarifs').src = e.target.href;
			  }
            }
          );
        };
    }
  },
  /**
   * Lors du chargement de l'iframe, ajoute la classe "current" à l'onglet correspondant (pour mise en avant)
   */
  bindActiveTabAndContent: function()
  {
      var tabs = $("multirates_tabs").immediateDescendants("LI");
    if(MultiRates.isTarifsIframeLoaded() === false)
    {
      tabs[0].className = "current";
      tabs[1].className = "";
    }
    else
    {
      switch(MultiRates.getTarifsIframeParam('type'))
      {
        case 'packages':
          tabs[0].className = "";
          tabs[1].className = "current";
          break;
        case 'nopackages':
        default:
          tabs[0].className = "current";
          tabs[1].className = "";
          break;
      }
    }
  },
  /**
   * Redimensionnement de l'iframe sous les onglets en fonction du contenu pour éviter les ascenseurs  
   */
adaptTabIframeForContentHeight: function()
  {
    if(MultiRates.hasTarifsIframeBeenLoaded == false)
    {
      return;
    }
		$("mask-layer").hide();
        var height = $("tarifs").contentWindow.document.getElementsByTagName("body")[0].clientHeight;
        $("tarifs").style.height = (height+10)+"px";
    
    if(navigator.userAgent.search(/MSIE 7/) != -1 )
    {
        var height = $("tarifs").contentWindow.document.getElementsByTagName("body")[0].clientHeight;
        $("tarifs").style.height = (height+10)+"px";
    }
    if(navigator.userAgent.search(/MSIE 6/) != -1 && navigator.userAgent.search(/opera/) == -1)
    {    
        var last = $("tarifs").contentWindow.document.getElementsByTagName("span").length-1;
            var span = $("tarifs").contentWindow.document.getElementsByTagName("span")[last];
                if(span.className.search(/extra-bottom/) !== -1)
                {
                    var height2= $("tarifs").getHeight();
                    span.style.bottom = "auto";
                    span.style.top = (height2)+"px";
                }
    }
    
    if(navigator.userAgent.search(/Safari/) != -1 )
    {    
        var last = $("tarifs").contentWindow.document.getElementsByTagName("span").length-1;
            var span = $("tarifs").contentWindow.document.getElementsByTagName("span")[last];
                if(span.className.search(/extra-bottom/) !== -1)
                {
                    var height= $("tarifs").getHeight();
                    span.style.bottom = "auto";
                    span.style.top = (height-10)+"px";
                }
    }
    
  },

  /**
   * Gère le texte à afficher dans l'iframe en fonction de l'onglet sélectionné
   */
  switchDisplayInTarifIframe: function()
  {
    if(MultiRates.hasTarifsIframeBeenLoaded == false)
    {
      return;
    }
    
    var iframeEl = document.getElementById("tarifs");
    
    if (iframeEl.contentWindow) {
        var iframeWin = iframeEl.contentWindow;
    }
    
    if(iframeWin){
	    iframeWin.$("sort-"+MultiRates.getTarifsIframeParam('sort')).checked = true;
	    Event.observe(
	      $("tarifs").contentWindow.$("sort-tariff"),
	      "click",
	      function()
	      { 
	        MultiRates.dealSorter(this);
	      }.bind($("tarifs").contentWindow.$("sort-tariff"))
	    );
	    Event.observe(
	      $("tarifs").contentWindow.$("sort-price"),
	      "click",
	      function()
	      { 
	        MultiRates.dealSorter(this);
	      }.bind($("tarifs").contentWindow.$("sort-price"))
	    );
	    var currentTab = MultiRates.getTarifsIframeParam('type');
	    $("tarifs").contentWindow.document.getElementsByTagName("body")[0].className = currentTab;
	    switch(currentTab)
	    {
	      case "packages":
	        $("tarifs").contentWindow.$("nopackages").style.display = "none";
	        break;
	      case "nopackages":
	      default:
	        $("tarifs").contentWindow.$("packages").style.display = "none";
	        break;
	    }
    }
  },
  /**
   * Indique si l'iframe a déjà été chargée (ce n'est pas le cas lors du chargement initial de la page)
   * 
   * @return boolean 
   */
  isTarifsIframeLoaded: function()
  {
    if($("tarifs")) {
        if($("tarifs").contentWindow != null){
	        if($("tarifs").contentWindow.location.href == "about:blank")
	        {
	          return false;
	        }
        }
        return true;
    }
  },
  /**
   * Permet de récupérer l'ensemble des paramètres passés à l'iframe
   * 
   * @return object    Objet contenant toute les paire pamètres / valeur présents dans l'url
   */
  getTarifsIframeParams: function()
  {
    if(MultiRates.hasTarifsIframeBeenLoaded == false)
    {
      throw new Error("iframe not loaded");
    }
    var base_document = $("tarifs").contentWindow;
    var portions = base_document.location.href.split("?");
    var params = portions[1].split("&");
    var paramList = {};
    for (var i = params.length - 1; i >= 0; i--)
    {
      var paramData = params[i].split("=");
      paramList[paramData[0]] = paramData[1];
    }
    return paramList;
  },
  /**
   * Permet de récupérer la valeur d'un paramètre passé à l'iframe par son param
   * 
   * @param  paramName Nom du paramètre à récupérer
   * @return mixed    Contient la valeur correspondant au paramètre demandé (null si paramètre absent)
   */
  getTarifsIframeParam: function(paramName)
  {
    if(MultiRates.hasTarifsIframeBeenLoaded == false)
    {
      throw new Error("iframe not loaded");
    }

    var portions = $('tarifs').src.split("?");
    var params = portions[1].split("&");
    for (var i = params.length - 1; i >= 0; i--)
    {
      var paramData = params[i].split("=");
      if(paramData[0] == paramName)
      {
        return paramData[1];
      }
    }
    return null;
  },

  /**
   * Vérifie si le clic sur une option de tri nécessite un rechargement de l'iframe
   * 
   * @param  input  Element input cliqué par le visiteur 
   */
  dealSorter: function(input)
  {
    if(input.value == MultiRates.getTarifsIframeParam('sort'))
    {
      return;
    }
    else
    {
      $('multirates_tabs').getElementsBySelector('li a').each(
        function(elem) 
        {
          elem.href = elem.href.replace("sort="+MultiRates.getTarifsIframeParam('sort'), "sort="+input.value);
        }
      );
      MultiRates.loadTarifsIframe({sort: input.value});
    }
  },

  /**
   * Sélection d'une chambre : mise en avant sur la page, rafraichissement des iframes
   */
  selectRoom: function(reload)
  {
    for (var i = 0, j = $("liste-chambres").getElementsByTagName("LI").length; i < j; i++)
    {
      // On raffiche la  chambre précédemment sélectionée
       $("liste-chambres").getElementsByTagName("LI")[i].style.height="auto";//réaffichage de la chambre cachée dans la liste
      $("liste-chambres").getElementsByTagName("LI")[i].style.overflow="auto";//réaffichage de la chambre cachée dans la liste
      if($("liste-chambres").getElementsByTagName("LI")[i].getAttribute("code") == MultiRates.beanRoomsListe[MultiRates.tab_type].selectedRoomCode)
      {
        liSelected = $("liste-chambres").getElementsByTagName("LI")[i];
      	 $("liste-chambres").getElementsByTagName("LI")[i].style.height="0px";// On cache de la liste la chambre sélectionnée ok pour IE
         $("liste-chambres").getElementsByTagName("LI")[i].style.overflow="hidden";// On cache de la liste la chambre sélectionnée ok pour IE
        // On garde le code de la chambre sélectionnée
        selectedRoom = MultiRates.beanRoomsListe[MultiRates.tab_type][i];
        MultiRates.roomsSelectedIndex = i;
       
       // On renseigne l'entête avec les infos de la chambre sélectionnée
        if($$("#chambre-entete h2").size())
        {
          $$("#chambre-entete h2")[0].innerHTML = selectedRoom.label;
        }
        if($$("#chambre-entete img").size() && selectedRoom.pictureUrl != null && selectedRoom.pictureUrl.length)
        {
          $$("#chambre-entete img")[0].src = selectedRoom.pictureUrl;
          $$("#chambre-entete img")[0].removeClassName("hide");
        }
        else if($$("#chambre-entete img").size())
        {
          //$$("#chambre-entete img")[0].src = "";
          $$("#chambre-entete img")[0].addClassName("hide");
          }
        if($$("#chambre-entete p").size() && selectedRoom.description != null && selectedRoom.description.length)
        {
          $$("#chambre-entete p")[0].innerHTML = selectedRoom.description;
          $$("#chambre-entete p")[0].removeClassName("hide");
        }
        else if($$("#chambre-entete p").size())
        {
          $$("#chambre-entete p")[0].innerHTML = "";
          $$("#chambre-entete p")[0].addClassName("hide");
          }
      }
    }
    
      // On modifie les urls des onglets
    var maReg = new RegExp("packCode=.*&", "") ;
    if(typeof(MultiRates.beanRoomsListe.packages) != "undefined"
        && MultiRates.beanRoomsListe.packages != null
    )
    {
        if(
            typeof(MultiRates.beanRoomsListe.packages.selectedRoomCode) == "undefined"
            || MultiRates.beanRoomsListe.packages.selectedRoomCode == null
        )
        {
          var packCodePackage = MultiRates.beanRoomsListe.packages[0].code;
        }
        else
        {
          var packCodePackage = MultiRates.beanRoomsListe.packages[0].code;
        }
        document.getElementById("packages").getElementsByTagName("a")[0].href = document.getElementById("packages").getElementsByTagName("a")[0].href.replace(maReg, "packCode="+packCodePackage+"&");
    }

    if(
        (typeof(MultiRates.beanRoomsListe.nopackages.selectedRoomCode) != "undefined"
        && MultiRates.beanRoomsListe.nopackages.selectedRoomCode != null)
        
    )
    {
      var packCodeRooms = MultiRates.beanRoomsListe.nopackages.selectedRoomCode;
    }
    else if(MultiRates.beanRoomsListe.nopackages.size() != 0) {
        var packCodeRooms = MultiRates.beanRoomsListe.nopackages[0].code;
    }
    
    document.getElementById("no-packages").getElementsByTagName("a")[0].href = document.getElementById("no-packages").getElementsByTagName("a")[0].href.replace(maReg, "packCode="+packCodeRooms+"&");
		
    if(reload === true)
    {
      // On modifie la source de l'iframe
     	MultiRates.loadTarifsIframe({packCode: MultiRates.beanRoomsListe[MultiRates.tab_type].selectedRoomCode});
    }
  },
  /**
   * Charge l'iframe "tarifs" avec les paramètres passés
   * 
   * @param   objet  Paire de paramètre / valeur à ajouter à l'url
   * @example MultiRates.loadTarifsIframe({param1: "value1", param2: "value2"... });
   */
  loadTarifsIframe: function()
  {
    var iframeParams = {
      type: MultiRates.tab_type,
      packCode: "",
      sort: roomsListViewBean.sort
    };
    if(MultiRates.hasTarifsIframeBeenLoaded == true)
    {
      var loadedParams = MultiRates.getTarifsIframeParams();
      for (var i in loadedParams)
      {
        iframeParams[i] = loadedParams[i];
      };
    }
    if(arguments.length > 0 && typeof(arguments[0]) === "object")
    {
      for(var i in arguments[0])
      {
        iframeParams[i] = arguments[0][i];
      }
    }
    var href_iframe = document.location.protocol;
    href_iframe += "//";
    href_iframe += document.location.hostname+"/";
    href_iframe += "reservation/iframe-multirates.jsp?random="+Math.random()+"&";
    var tabParams = [];
    for(var i in iframeParams)
    {
      tabParams.push(i+"="+iframeParams[i]);
    }
    href_iframe += tabParams.join("&");
    
    $('tarifs').src = href_iframe;
  },
  /**
   * Chargement des chambres correspondnat au lien "Autres chambres disponibles"
   * La première à mettre en avant est sélectionnée
   */
  loadRooms: function()
  {
    if(typeof(MultiRates.beanRoomsListe) == "undefined")
    {
      MultiRates.beanRoomsListe = {
        nopackages: roomsListViewBean.rooms,
        packages: roomsListViewBean.packages
      };
      
      //Par défaut, on choisit le premier onglet
      if(MultiRates.beanRoomsListe.nopackages.size() != 0)
      {
        MultiRates.tab_type = "nopackages";
      }
      else
      {
        document.getElementById("no-packages").style.display = "none";
        MultiRates.tab_type = "packages";
      }
      if(roomsListViewBean.packages == null)
      {
        document.getElementById("packages").style.display = "none";
      }
    }
    // On prépare le contenu de la popup Descriptif
    var multi = MultiRates.beanRoomsListe[MultiRates.tab_type];
    if(typeof(multi.selectedRoomCode) == "undefined" || multi.selectedRoomCode == null)
    {
      multi.selectedRoomCode = multi[0].code;
    }
    /* On charge le contenu de la popup "Descriptif des chambres" */
      if ( 
            typeof(multi) != "undefined" 
            && multi != null 
            && multi.size() 
    )
    {
      var html = '';   
      var len =  multi.size();
      for(i=0; i < len ; i++)
      {
        /** Dans les lignes suivantes, on teste la présence des variables à afficher
         *  puis on modifie la structure en conséquence (ajout classe no-detail si aucune précision)
         */
        var isThumb = false;
        var tarifCrt = multi[i] ; // MultiRates.beanRoomsListe[MultiRates.tab_type][i];
        if ( tarifCrt.pictureUrl!=null && tarifCrt.pictureUrl.length )
        {
          isThumb = true;
        }
        var isDescription = false;
        if ( tarifCrt.description!=null && tarifCrt.description.length )
        {
          isDescription = true;
        }
        var isZoom = false;
        if(tarifCrt.zoom!=null && tarifCrt.zoom.length)
        {
          isZoom = true;
        }
        var isVisite = false;
        if(tarifCrt.virtualVisitUrl!=null && tarifCrt.virtualVisitUrl.length)
        {
          var isVisite = true;
        }
        var isDetails = false;
        if(
          isThumb === true
          || isDescription === true
          || isZoom === true
          || isVisite === true
        )
        {
          var isDetails = true;
        }
        var htmlChambre = "";
        var classeLigne = '';
        if(tarifCrt.code == multi.selectedRoomCode){
            classeLigne = 'chambre chambre-selected';
        }
        else
        {
            classeLigne = 'autre-chambre';
        }
        if(isDetails === false)
        {
          classeLigne += ' no-detail';
        }
        
        htmlChambre+= '<li class="'+classeLigne+'">';
        htmlChambre+= '<span class="extra-top"></span><h3>' + tarifCrt.label + '</h3>';
        classPrix = 'prix-total' ;
        if(tarifCrt.famillyOffer)
        {
          classPrix  += ' prix-famillyOffer';
        }
        
        htmlChambre+= '<p class="tarifs"><span class="'+classPrix +'">';
        if(tarifCrt.free)
        	htmlChambre+= I18N._('multirates','Complimentary');
        else if(tarifCrt.onRequest)
        	htmlChambre+= I18N._('multirates','OnRequest');
        else {
	        htmlChambre+= '<span class="' + class_technique + ' mtarif tarif">' + tarifCrt.price + '</span>&nbsp;';
	        htmlChambre+= '<span class="mdevise devise">' + tarifCrt.currency + '</span>'
	      }
				htmlChambre+= '</span>';
        if(tarifCrt.famillyOffer) htmlChambre+= '<span class="roomQuantity prix-famillyOffer">'+ I18N._('multirates','For 2 rooms') +'</span>' ;
				                
        htmlChambre+= '</p>';
        htmlChambre+= '<div class="detail">';
        
        /** Print thumb image **/
        if ( isThumb === true )
        {
          htmlChambre+= '<img width="108" src="'+ tarifCrt.pictureUrl +'" alt="Room ' + tarifCrt.code + '">';
        }
        htmlChambre+= '<div>';
        
        /** Print description **/
        if (isDescription === true)
        {
          htmlChambre+= '<p>' + tarifCrt.description + '</p>';
        }
        if(
          isZoom === true || isVisite === true
        )
        {
          htmlChambre+= '<ul>';
        }
        /** Print "ZOOM" link to picture **/
        if(isZoom === true)
        {
          htmlChambre+= '<li><a id="pictureUrl_'+ i +'" href="#" onclick="window.open(\'' + tarifCrt.zoom + '\'); return false;" class="pictureUrl">Zoom</a></li>';
        }
        /** Print link to virtual visit **/
        if(isVisite === true)
        {
          htmlChambre+= '<li><a id="virtualVisitUrl_'+ i +'" href="#" onclick="window.open(\'' + tarifCrt.virtualVisitUrl + '\', \'_blank\',\'width=500, height=400, top=200, left=200 \'); return false;" class="virtualVisitUrl">Visite virtuelle</a></li>';
        }
        if(
          isZoom === true || isVisite === true
        )
        {
          htmlChambre+= '</ul>';
        }
        htmlChambre+= '</div></div><p class="submit"><span>';
        htmlChambre+= '<a class="select-room" href="#" onclick="top.MultiRates.refreshFromListDetails(\''+ tarifCrt.code +'\'); top.Windows.close(\'POPUP_ID\'); return false">';
        if(tarifCrt.code == multi.selectedRoomCode){
            htmlChambre+= I18N._('multirates','Back to prices');
        }
        else
        {
            htmlChambre+= I18N._('multirates','See prices for this room');
        }
        htmlChambre+= '</a></span></p>';
        htmlChambre+= '<span class="extra-bottom"></span></li>';
        
        if(tarifCrt.code == multi.selectedRoomCode){
            html = htmlChambre + html;
        }
        else
        {
            html = html + htmlChambre;
        }
      }
      if($("old-desc-rooms")) $("old-desc-rooms").update(html);
    }
    if(multi != null && multi.size())
    {
      //On affiche dans la liste "autres chambres disponibles" TOUTES les chambres de l'hôtel
      var ulRooms = $("liste-chambres");
     
      if(ulRooms) {
        ulRooms.innerHTML = "";
        var li = "";
        var len = multi.size() ;
        for(i = 0; i < len; i++)
        {
              var tarifCrt = multi[i];
              offer = multi[i] ; // MultiRates.beanRoomsListe[MultiRates.tab_type][i];
              li += "<li code='"+ offer.code+"'";
              if (offer.famillyOffer) {
              	li += " class=\"family\"" ; $('family_legend').style.display ='block';
              }
              li +="><a href='#'><span class='desc'>";
                  li += offer.label + "</span> <span class='prix'>";
                  if(offer.free)
                  	li += I18N._('multirates','Complimentary');
                  else if(offer.onRequest)
                  	li += I18N._('multirates','OnRequest');
                  else
                  	li += "<span class='"+class_technique+" mtarif'>"+ offer.price + "</span>*";
                  if (offer.famillyOffer)
              			li += "*" ;
              li += "</span></a></li>";
          }
        ulRooms.innerHTML = li;
        MultiRates.selectRoom(!MultiRates.hasTarifsIframeBeenLoaded);
    }
          
    }
  },

  /**
   * Gère le clic sur une chambre de la liste "Autres chambres disponibles"
   */
  setRoomClick: function()
  {
    if($("chambre-et-tarif"))
    {
      Event.observe(
        $("liste-chambres"),
        "click",
        function(e)
        {
         if(!e.target && e.srcElement) //Débuggage IE 
          {
            e.target = e.srcElement;
          }
          var liSelected = e.target;
         while(liSelected.nodeName != "LI" && liSelected.nodeName != "UL")
         {
           liSelected = liSelected.parentNode;
         }
          if(liSelected.nodeName == "LI")
          {
            MultiRates.beanRoomsListe[MultiRates.tab_type].selectedRoomCode = liSelected.getAttribute("code");
            MultiRates.selectRoom(true);
            Event.stop(e);
          }
        }.bind(this)
      );
    }
  },
  /**
   * En fonction du Json fourni, affiche ou non le bloc "autres chambres disponibles"
   */
  displayRoomsList: function()
  {
    if(
      MultiRates.beanRoomsListe[MultiRates.tab_type] == null
      || MultiRates.beanRoomsListe[MultiRates.tab_type].size() == 1
    )
    {
      
      $$('#content .disponibilites')[0].hide();
      $(document.getElementById("chambre-entete")).addClassName("full-width");
    }
    else
    {
      if($$('#content .disponibilites')[0]) $$('#content .disponibilites')[0].show();
      $(document.getElementById("chambre-entete")).removeClassName("full-width");
    }
  },
  /**
   * Accroche la popup correspondant à "+ d'infos"
   */
  setMoreInfosLinks: function() 
  {
    var link = $$("#content")[0].down("div.detail").down("a.more-infos");
    Event.observe(
      link,
      'click',
      function(e) {Event.stop(e); DivPopup.openPopup('more_infos', 500, 400, $$("#content")[0].down("div.detail"), null); }
    );
  },
  /**
   * Accorche l'afichage de la popup "détail de la chambre" sur le lien correspondant
   */
  setDescRoomsLinks: function() 
  {
    
    if($$("#content").length) {
        var link = $$("#content")[0].down("div.disponibilites").down("a.desc-rooms");
        Event.observe(
          link,
          'click',
          this.openDescRoomsPopup.bindAsEventListener(this)
        );
    }
    
  },
  /**
   * Accroche l'ouverture de la popup "popup-rooms-description.htm"
   * 
   * @param  e  Evenement correspondnat au clic 
   */
  openDescRoomsPopup: function(e) 
  {
    Event.stop(e);
    if(this.desc_rooms_popup)
    this.desc_rooms_popup.destroy();
    this.desc_rooms_popup = new Window(
    {
      className: 'accor',
      width:          516,
      height:         400,
      minimizable:    false,
      maximizable:    false,
      url: "/"+originViewBean.codeLangDirectory+"/reservation/popup-rooms-description.htm",
      showEffect:  Element.show,
      hideEffect:  Element.hide
    });

    // On met en avant la chambre sélectionnée
    var liListe = $("old-desc-rooms").immediateDescendants("LI");
    var selectedLi = 0;
    var i, j;
    for(i=1, j=liListe.length; i<j; i++)
    {
      if(liListe[i].getAttribute("code") == MultiRates.beanRoomsListe[MultiRates.tab_type].selectedRoomCode)
      {
        selectedLi = i;
      }
      liListe[i].removeClassName("hide");
    }
    if(selectedLi != 0 && selectedLi<j)
    {
      liListe[0].innerHTML = liListe[selectedLi].innerHTML.replace(/mtarif/g, "").replace(/mdevise/g, "");
      liListe[selectedLi].addClassName("hide");
    }
    Event.observe(
      this.desc_rooms_popup.getContent(),
      'load',
      function(e)
      {
        if(this.desc_rooms_popup.getContent().contentWindow.document.body)
        {
          this.desc_rooms_popup.getContent().contentWindow.document.body.innerHTML = 
          $("div-desc").innerHTML.replace(/mtarif/g, "").replace(/mdevise/g, "").replace(/POPUP_ID/g, this.desc_rooms_popup.getId()).replace(/old-desc-rooms/, "");
        }
      }.bind(this)
    );
    // On affiche la liste selon l'onglet sélectionné
    this.desc_rooms_popup.showCenter();
    DivPopup.addWindowCloseLabel(this.desc_rooms_popup);
  },

  /**
   * Depuis le popup liste chambres dispos, rafrichie la chambre en fonction du lien choisi
   */
  refreshFromListDetails: function(code)
  {
    var listeLignes = $$("#liste-chambres li");
    for (var i = listeLignes.length - 1; i >= 0; i--)
    {
      var liCode = listeLignes[i].getAttribute("code");
      if(liCode == code)
      {
        MultiRates.beanRoomsListe[MultiRates.tab_type].selectedRoomCode = code;
        MultiRates.selectRoom(true);
        return;
      }
    }
  },

  /**
   * Accroche l'afichage des descriptifs Flex sur les liens correspondnat dans la page principale
   */
  setLegendRatesPopupLinks: function()
  {
    var legend_rates_links = new Array();
    //get links from main document
    var main_legend_rates_element = $$("dl.legend-rates");
    if(main_legend_rates_element.length) 
    {
      main_legend_rates_element[0].descendants().each(
        function(element)
        {
          if(element.tagName == 'A')
          {
            legend_rates_links.push(element);
          }
        }
      );
    }
    legend_rates_links.each(
      function(element)
      {
        if (element!=null)
	        Event.observe(
	          element,
	          'click',
	          function(e) {Event.stop(e); DivPopup.openPopup('legend_rates', 500, 400, $("legend-rates-popup"), null); }
	        );
      }.bind(this)
    );
    //rewrite pop-in title from website domain name (brands.com only)
    var legend_rates_popup_titles = $$('#legend-rates-popup h3');
	if (legend_rates_popup_titles.length)
	{
		var current_website = document.domain;
		var ah_pattern = new RegExp(".accorhotels.com$", "g");
		if (!ah_pattern.test(current_website))
		{
			current_website = current_website.sub('www.', '').capitalize();
			legend_rates_popup_titles[0].innerHTML = legend_rates_popup_titles[0].innerHTML.replace(new RegExp("(accorhotels.com)", "gi"), current_website);
		}
	}
  },

  /**
   * Accroche l'afichage des descriptifs Flex sur les liens correspondnat dans l'iframe
   */
  bindTheIframeFlexPopup: function()
  {
    var legend_rates_links = [];
    var iframe_document = $("tarifs").contentWindow.document;
    for(var i = iframe_document.getElementsByTagName("ul").length - 1; i >= 0; i--)
    {
        var ulNode = iframe_document.getElementsByTagName("ul")[i];
        if(ulNode.className.search(/gamme/) != -1)
        {
            // Transformation de la liste en numérables: http://www.prototypejs.org/api/element/methods/select
            var ilNode = ($A(ulNode.getElementsByTagName("li")).map(Element.extend));
            if(ilNode.length > 0 ) {
                ilNode.each(
                    function(element) {
                        // Ajout de la pop in sur les image "commissionable"
                        if(element.className.search(/commissionable/) != -1) {
                            var link0 = element.getElementsByTagName("a")[0];
                            Event.observe(
                                link0,
                                'click',
                                function(e) {Event.stop(e); DivPopup.openPopup('rates_sales_policies', 500, 400, null, link0+"&currencyCode="+iframe_document.getElementById("s_devise").value); }
                            );
                        }
                        // Ajout de la pop in sur les image "flex, felx+, uflex et first"
                        else if(element.className.search(/flex|first/) != -1){
                            Event.observe(
                                element.getElementsByTagName("a")[0],
                                'click',
                                function(e) {Event.stop(e); DivPopup.openPopup('legend_rates', 500, 400, $("legend-rates-popup"), null); }
                            );
                        }
                    }
                );
            }
        }
    }
  },

  /**
   * Recherche et traite le clic sur l'ensemble des boutons "Valider" de l'iframe
   */
  bindTheIframeValidateButtons: function()
  {
    var iframe_document = $("tarifs").contentWindow.document;
		if(iframe_document) {
			iframe_id = $(iframe_document.getElementById('iframe-multirates'))
			if (iframe_id) {
		    // On cherche tous les éléments de l'iframe avec class="validate-link"
		    var iframe_validateLinks = iframe_id.select("a.validate-link");
		    //used to be able to stop observing (see prototype stopObserving API docs)
		    this.boundIFrameValidateButtonAction = this.iFrameValidateButtonAction.bindAsEventListener(this);
		    iframe_validateLinks.each(
			    function(element)
			    {
			      this.bindIframeValidateButton(element);
			    }.bind(this)
		      );
    	}
    }
  },
  /**
   * Surveille le clic sur le bouton "Valider" passé en ramaètre
   * 
   * @param  element  Bouton de validation à traiter 
   */
  bindIframeValidateButton: function(element)
  {
    //prevents multiple bindings under ie
    Event.stopObserving(element,'click',MultiRates.boundIFrameValidateButtonAction);
    Event.observe(
      element, 
      'click',
      this.boundIFrameValidateButtonAction
    );
  },
  
  /**
   * used to unbind the action on the validate link. In case of a validation mechanism needing to disable the link for instance.
   * 
   */
  unbindIframeValidateButton: function(element)
  {
    Event.stopObserving(element,'click',MultiRates.boundIFrameValidateButtonAction);
  },
  /**
   * Gère le clic sur un bouton "Valider"
   * 
   * @param  e  Evenement de clic 
   */
  iFrameValidateButtonAction: function(e)
  {
    // On envoie le lien sur la page mère, pas dans l'iframe
    if(!e.target && e.srcElement)
    {
      e.target = e.srcElement; 
    }
    if (this.getMultirateCurrency() != Currencies.CrtCurrency) {
      //if (e.target.href.indexOf("currencyCode") == -1)
      	e.target.href += '&currencyCode='+Currencies.CrtCurrency;
      //else
      //	e.target.href = e.target.href.substring(0, e.target.href.indexOf("currencyCode")) + 'currencyCode='+Currencies.CrtCurrency;      
    }
    
    //top.location.href = e.target.getAttribute("link");
  },
  /**
   * Accroche les popups "ratesSalesPolicies.jsp" et "ratesDetails.jsp"
   */
  setRatesSalesPoliciesRatesDetailsLinks: function() 
  {
    if(MultiRates.hasTarifsIframeBeenLoaded == false)
    {
      return;
    }
    else{
    	if ($('tarifs').contentWindow) {
          var iframeWin = $('tarifs').contentWindow;
      }
    
    	if(iframeWin){
		    //no packages iframe  
		    var iframe_rates_sales_links_main_parent = $(iframeWin.document.getElementById('nopackages'));
		    if(iframe_rates_sales_links_main_parent != null){
			    var iframe_rates_sales_links_containers = iframe_rates_sales_links_main_parent.select("div.detail");
			    iframe_rates_sales_links_containers.each(
			      function(element)
			      {
			        var link0 = element.getElementsByTagName('a')[0];
			        if (link0!=null)
			            Event.observe(
			              link0,
			              'click',
			              function(e) {Event.stop(e); DivPopup.openPopup('rates_sales_policies', 500, 400, null, link0); }
			            );
			        
			        var link1 = element.getElementsByTagName('a')[1];
			        if (link1!=null)
			            Event.observe(
			              link1,
			              'click',
			              function(e) {Event.stop(e); DivPopup.openPopup('rates_sales_policies', 600, 400, null, link1+"&currencyCode="+iframeWin.document.getElementById("s_devise").value); }
			            );
			      }.bind(this)
			    );
			    
			    //packages iframe
			    iframe_rates_sales_links_main_parent = $(iframeWin.document.getElementById('packages')); 
			    iframe_rates_sales_links_containers = iframe_rates_sales_links_main_parent.select("div.detail");
				
			    iframe_rates_sales_links_containers.each(
			     function(element)
			      {
			          var link0 = element.getElementsByTagName('a')[0];
			        Event.observe(
			          link0,
			          'click',
			          function(e) {Event.stop(e); DivPopup.openPopup('rates_sales_policies', 500, 400, null, link0); }
			        );
			        var link1 = element.getElementsByTagName('a')[1];
			        Event.observe(
			          link1,
			          'click',
			          function(e) {Event.stop(e); DivPopup.openPopup('rates_sales_policies', 500, 400, null, link1+"&currencyCode="+iframeWin.document.getElementById("s_devise").value); }
			          );
			          
			          if(element.getElementsByTagName('a')[2]){
			              var link2 = element.getElementsByTagName('a')[2];
			            Event.observe(
			              link2,
			              'click',
			              function(e) {Event.stop(e); DivPopup.openPopup('pkg_desc_policies', 500, 400, null, link2+"&currencyCode="+iframeWin.document.getElementById("s_devise").value); 
			              }
			            );
			        }
			      }.bind(this)
			    );
		    }
	    }
    }
  },
  /**
   * Accroche la popup "internet-sales-conditions.html"
   */
  setInfoRatesLinks: function() 
  {
    var link = $("infos-rates-popup-link");
    Event.observe(
      link,
      'click',
      function(e)
      {
        Event.stop(e);
       						
        DivPopup.openPopup('rates_sales_policies', 500, 400, null, "/"+originViewBean.codeLangDirectory+"/reservation/internet-sales-conditions.html",
        cgv_title(), 17);
       }
    );
  },
  
  adaptPriceMarginHeight: function()
  {

		var iframe_chambre_elements = new Array();
		var iframe_document = $("tarifs").contentWindow.document;
		iframe_chambre_elements = iframe_document.getElementsByClassName("chambre");
		for(var i=0; i< iframe_chambre_elements.length; i++){
			var li_h3_element = iframe_chambre_elements[i].down().next();
			var tarifs_element = iframe_chambre_elements[i].select("p.tarifs");
			var gamme_elements = iframe_chambre_elements[i].select("ul.gamme");
			var h3_height = li_h3_element.offsetHeight;
	
			if(navigator.userAgent.search(/MSIE/) == -1){
				if(h3_height > 16){						
					if(gamme_elements.length > 0){
						gamme_elements[0].style.marginTop= 20+"px";
					}
				}
			}
		}

  }
}

core.push(MultiRates);
 