/**
 * Objet javascript permettant de gérer les données d'affichage de l'identification star
 * il concerne 3 pages : our offer, star, access codes
 * et gère 3 niveaux d'identification : non identifié, partiellement identifié, identifié  
 */
var Ase= {
		bookingEngineViewBean: null,
		originViewBean: null,
		fidelityCardsViewBean: null,
    
    
    /**
     * Liste des noms d'objets à utiliser.
     */
		getBeans: function() {        
        return "BookingEngineViewBean;OriginViewBean;FildelityCardsViewBean";
    },
   
    
    /**
     * Initialisation de la variable JSON
     */
    initJSON: function() {
        var num;
    	try {
        	for( num in beans){
              if("BookingEngineViewBean" == beans[num].nom) {
                    bookingEngineViewBean = beans[num].bean;
              } else if("OriginViewBean" == beans[num].nom) {
            				originViewBean = beans[num].bean;                                	
            	} else if("FildelityCardsViewBean" == beans[num].nom) {
            				fidelityCardsViewBean = beans[num].bean;
            	}
          }
      } catch(e) {
    		alert(e);
    	}
    },
        
    /**
     * réécriture du moteur
     * Cette méthode est appelée sur le onload de la page.
     */
    rewrite: function() {       
      // maj de la liste ville/hôtels si un choix est fait dans la liste des pays
      if($("pays")){
		Event.observe("pays", 'change', function(event){Ase.rewriteListeHotels();});
	  }
      
      // suppression/ajout de la valeur par defaut des champs de saisie libre
      if($("num_carte_fidelite")){
        Event.observe("num_carte_fidelite", 'focus', function(event){Cleaner.cleanDefaultValue($("num_carte_fidelite"));});
        Event.observe("num_carte_fidelite", 'blur', function(event){Cleaner.setDefaultValue($("num_carte_fidelite"));});
      }  
      if($("code_avantage")){  
        Event.observe("code_avantage", 'focus', function(event){Cleaner.cleanDefaultValue($("code_avantage"));});
        Event.observe("code_avantage", 'blur', function(event){Cleaner.setDefaultValue($("code_avantage"));});
      }   
      // affichage/masquage des zones de saisie carte de fid et code pref
      if($("porteur_carte"))   
        Event.observe("porteur_carte", 'click', function(event){Ase.showFidPrefOrBestPrice();});
      if($("code_preferentiel"))        
        Event.observe("code_preferentiel", 'click', function(event){Ase.showFidPrefOrBestPrice();});
      // action sur le submit
			Event.observe($("search_bt"),'click',	function(event) {Event.stop(event);this.onSubmitForm();}.bind(this));
      
      // réécriture du formulaire	
			Ase.rewriteForm();
    },

    rewriteForm: function(){  
      // écriture de la liste des pays
      Ase.rewriteListePays();
      // écriture de la liste des cartes de fid  
      if (fidelityCardsViewBean.fidelityCards){
      var type_carte_value = {fr: "Type de carte",
                        de: "Kartentyp",
                        es: "Tipo de tarjeta",
                        en: "Card type",
                        it: "Tipo di carta",
                        nl: "Soort kaart",
                        pt: "Tipo de cartão",
                        zh: "卡的类型"
                        };        
        fillSelect("type_carte_fidelite", fidelityCardsViewBean.fidelityCards, bookingEngineViewBean.fidelityCardType, type_carte_value[originViewBean.codeLang]);
      }  
            
      // réécriture liste hotel si pays choisi
      if($("pays") && $("pays").value != ""){     
        Ase.rewriteListeHotels();
      }
  
      // réécriture des infos carte de fid en session
      if($("porteur_carte") && (bookingEngineViewBean.fidelityCardType || bookingEngineViewBean.fidelityCardNumber)){
        $("porteur_carte").checked = true;
        Ase.showFidPrefOrBestPrice();   
        if(bookingEngineViewBean.fidelityCardType)
          $("type_carte_fidelite").value = bookingEngineViewBean.fidelityCardType;
        if(bookingEngineViewBean.fidelityCardNumber)
          $("num_carte_fidelite").value = bookingEngineViewBean.fidelityCardNumber;                      
      }
      // réécriture des infos code pref en session
      if($("code_avantage") && bookingEngineViewBean.preferentialCode){
        $("code_preferentiel").checked = true;
        Ase.showFidPrefOrBestPrice();  
        $("code_avantage").value = bookingEngineViewBean.preferentialCode;        
      }

  		// réécriture de la date d'arrivée en session
      if(bookingEngineViewBean.dayIn && bookingEngineViewBean.monthIn && bookingEngineViewBean.yearIn){
    		$("jour_arrivee").value=bookingEngineViewBean.dayIn;
    		$("mois_arrivee").value=bookingEngineViewBean.monthIn;
    		$("annee_arrivee").value=bookingEngineViewBean.yearIn;
    		//selectOption("nb_nuit", bookingEngineViewBean.nightsNumber)
    		$("nb_nuit").value = bookingEngineViewBean.nightsNumber;
    		this.rewriteDate();	    
      } 
            
  	},
  	
  	// réécriture du champ de saisie date d'arrivée
  	rewriteDate: function() {
			var arrival_date = new Date();
			arrival_date.setFullYear($("annee_arrivee").value);
			arrival_date.setMonth   ($("mois_arrivee").value-1);
			arrival_date.setDate    ($("jour_arrivee").value);
			var arrival_date2 =arrival_date.print(Calendar._TT["DEF_DATE_FORMAT"]);
			if($("arrivee")){
				$("arrivee").value = arrival_date2;
			}	
	  },
  	
    
    // ecriture de la liste des pays
    rewriteListePays: function(){
		if($("pays")) {
			var countrySelect = $("pays");
			var countries = new Array();
			if(mapSelectLieu != null){
				for(var pays in mapSelectLieu){
					var nbHotels = mapSelectLieu[pays].length;
					
					if($("ase_content_right")){ 
					//countries.push(pays);
						//On ne remonte que les pays ayant au moins un hotel en promo mardi
						if($("ase_content_right").getElementsByClassName("ase_mardi").length != 0){
							var mardi = new Array();
							for(var i=0; i<nbHotels; i++){
								if(mapSelectLieu[pays][i].promoMardi){
									mardi.push(mapSelectLieu[pays][i].promoMardi);
									break;
								}
							}
							if (mardi.length != 0){
								countries.push(pays);
							}
						
						}
						//On ne remonte que les pays ayant au moins un hotel en promo J-21
						if ($("ase_content_right").getElementsByClassName("ase_j21").length != 0){
							var j21 = new Array();
							for(var i=0; i<nbHotels; i++){
								if(mapSelectLieu[pays][i].promoJ21){
									j21.push(mapSelectLieu[pays][i].promoJ21);
									break;
								}
							}
							if (j21.length != 0){
								countries.push(pays);
							}
						} 
						//autres cas
						else if ($("ase_content_right").getElementsByClassName("ase_tout_compris").length != 0) {
						countries.push(pays);
						}
					}
					else{
						countries.push(pays);
					}
				}
				for (var i=0; i<countries.length; i++){
					countrySelect.options[i+1] = new Option(countries[i],countries[i]);
				}
			}
		}
    },

    // ecriture de la liste des villes ou hôtels pour un pays choisi    
	rewriteListeHotels: function(){
		if ($("pays") && $("hotel_ou_ville")) {
			var countrySelect = $("pays");
			var citySelect = $("hotel_ou_ville");
			
			citySelect.options.length = 0;
			citySelect.innerHTML = "";
			citySelect.options[0] = new Option(selectCity, "");
			// si un pays a été choisi on affiche les villes correspondant au pays
			if($("pays").value != ""){
				citySelect.disabled = false;
				//si il ya une liste de villes/hotels associés au pays choisi on compose le select des villes/hotels
				if(mapSelectLieu[countrySelect.value] != null && mapSelectLieu[countrySelect.value].length>0){
					var hotels = new Array();
					var nbHotels = mapSelectLieu[countrySelect.value].length; // Evite de re-calculer le nombres d'hôtels à chaque nouvelle itération
					for(var i=0; i<nbHotels; i++){
						// Offres spéciales du mardi : Construction du tableau contenant les hôtels participants à l'opération
						if($("ase_content_right")){
							if($("ase_content_right").getElementsByClassName("ase_mardi").length != 0){
								if (mapSelectLieu[countrySelect.value][i].promoMardi){
									hotels.push(mapSelectLieu[countrySelect.value][i]);
								}
							}
								// Offres spéciales du J-21 : Construction du tableau contenant les hôtels participants à l'opération
							if($("ase_content_right").getElementsByClassName("ase_j21").length != 0){
								if (mapSelectLieu[countrySelect.value][i].promoJ21){
									hotels.push(mapSelectLieu[countrySelect.value][i]);
								}
							}
							else if ($("ase_content_right").getElementsByClassName("ase_tout_compris").length != 0) 
							{hotels.push(mapSelectLieu[countrySelect.value][i]);}
							
						}else{
							hotels.push(mapSelectLieu[countrySelect.value][i]);
						}
					}
					for(var i=0; i<hotels.length; i++){
						var nomHotel  = hotels[i].txt;
						var codeHotel = nomHotel;
						if (hotels[i].val){
							codeHotel = hotels[i].val;
						}
						citySelect.options[i+1] = new Option(nomHotel,codeHotel);
					}
				}
			}
		}
	},

    // affichage des infos de carte de fid et/ou de code pref, OU le lien 'meilleur prix garanti'	  
	  showFidPrefOrBestPrice: function(){
	   if($("porteur_carte").checked == true || $("code_preferentiel").checked == true){
	      // lien 'meilleur prix garanti' masqué
        $("bestPrice").style.display="none";
        // infos carte de fid affichées ou masquées
        if($("porteur_carte").checked == true)
          $("carte_fid").style.display="block";
        else{
          $("carte_fid").style.display="none";
          // champ saisie carte fid vidé
          $("num_carte_fidelite").value="";
          Cleaner.setDefaultValue($("num_carte_fidelite"));
        }  
        // infos code pref affichées ou masquées
        if($("code_preferentiel").checked == true)
          $("code_pref").style.display="block";
        else{
          $("code_pref").style.display="none";
          // champ saisie code pref vidé
          $("code_avantage").value="";
          Cleaner.setDefaultValue($("code_avantage"));  
        }                
     }
     // affichage lien 'meilleur prix garanti', les valeurs carte de fid et code pref sont vidées
	   else {	       
        $("carte_fid").style.display="none";
        $("code_pref").style.display="none";
        $("bestPrice").style.display="block";
        $("type_carte_fidelite").value="";
        $("num_carte_fidelite").value="";
        Cleaner.setDefaultValue($("num_carte_fidelite"));
        $("code_avantage").value="";
        Cleaner.setDefaultValue($("code_avantage"));
     }
	  },
	  
	  
	  // actions sur le submit
	  onSubmitForm: function(){     
      // suppression des val par defaut des champs de saisie
      Cleaner.cleanDefaultValue($("num_carte_fidelite"));
      Cleaner.cleanDefaultValue($("code_avantage"));
      // submit du formulaire
      document.ASE_BOOKING_ENGINE.submit();
      
    }
	       
 
}
core.push(Ase);

/**
 * méthodes utilisées par la page, utilisant le JSON.
 * 
 */

// réécriture des valeurs par défaut des champs laissés vides,
// après le retour du validator
function setDefaultValuesAfterValidatorReturn(){

  Cleaner.setDefaultValue($("num_carte_fidelite"));        
  Cleaner.setDefaultValue($("code_avantage"));

}




