/**
 * Objet javascript permettant de gérer les données d'affichage
 * du "bloc" de résumé des informations de l'internaute pendant la réservation.
 */
var BookingEngine = {
		originViewBean: null,
		bookingEngineViewBean: null,
		activityViewBean: null,
		fidelityCardsViewBean: null,
    
    /**
     * Liste des noms d'objets à utiliser.
     */
		getBeans: function() {
        return "OriginViewBean;BookingEngineViewBean;ActivityViewBean;FildelityCardsViewBean";
    },
    
    /**
     * Initialisation de la variable JSON
     */
    initJSON: function() {
        var num;
    	try {
        	for( num in beans){
                if("OriginViewBean" == beans[num].nom) {
                    originViewBean = beans[num].bean;
            	} else if("BookingEngineViewBean" == beans[num].nom) {
            		bookingEngineViewBean = beans[num].bean;
            	} else if("ActivityViewBean" == beans[num].nom) {
            		activityViewBean = beans[num].bean;
            	} else if("FildelityCardsViewBean" == beans[num].nom) {
            		    fidelityCardsViewBean = beans[num].bean;
              }           	          	            	
            }
        } catch(e) {
    		alert(e);
    	}
    },
        
    /**
     * 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() {
        rewriteBookingEngineView(bookingEngineViewBean, fidelityCardsViewBean, originViewBean);       
    }   
	
}

core.push(BookingEngine);

/**
 * Mettez ci-dessous les méthodes utilisées par la page, utilisant le JSON.
 * Toute méthode n'ayant pas de rapport avec le JSON ne sera pas acceptée.
 */

// POur la gestion des dates
document.write('<script type="text/javascript" src="/scripts-v66/ah_date.js"></script>');

var id_formEngine = "bookingEngine";
// POur destination
var id_destination = "hotel_ou_ville";
var id_listeDestination = "liste_destinations";
// pour calendrier
var id_hrefCalendar = "calendrier"
var id_selectArrivalDay = "jour_arrivee";
var id_selectArrivalMonth = "mois_arrivee";
var id_selectArrivalYear = "annee_arrivee";
var id_selectNightNber =  "nb_nuit";
// Pour carte de fid
var id_checkboxCard = "porteur_carte";
var id_selectFidCard = "type_carte_fidelite";
var id_inputCardNber = "num_carte_fidelite";
var type_carte_value = {fr: "Type de carte",
                        de: "Kartentyp",
                        es: "Tipo de tarjeta",
                        en: "Card type",
                        it: "Tipo di carta",
                        ja: "カードの種類",
                        nl: "Soort kaart",
                        pl: "Typ karty",
                        pt: "Tipo de cartão",
                        zh: "卡的类型"
                        };
// Pour pro
var id_checkboxContract =  "checkboxContrat";
// Pour code promo
var id_checkboxCodePref =  "code_preferentiel";
var id_inputCodePref = "code_avantage";

var selectorDefaultValue="--";
if(ACC === undefined) {
	var ACC = {};
}

/* Pour le mini moteur de la home*/
function rewriteBookingEngineView(bookingEngineViewBean, fidelityCardsViewBean, originViewBean){
	if(bookingEngineViewBean){
		rewriteDates(bookingEngineViewBean.maxStay, bookingEngineViewBean.maxPeriod, selectorDefaultValue);
		initEventHandlers(bookingEngineViewBean.maxPeriod, bookingEngineViewBean.maxStay);

	// Exception : pas de rewrite code RID sur le moteur des pages corner marques --> si la précédente recherche a porté sur un RID, on réécrit la destination de ce RID dans le champ destination
	var cornerMarquesExp = /\/([a-z]{2}(?:-[a-z]{2})?)\/brands\/bookingEngine\.html/;
	// destination
	if (bookingEngineViewBean.hotelCode && document.getElementById(id_destination) && !cornerMarquesExp.test(document.location)){
		document.getElementById(id_destination).value=bookingEngineViewBean.hotelCode;
	} else if (bookingEngineViewBean.destination){
		getElementByIdIfExists(id_destination).value=bookingEngineViewBean.destination;
		selectOption(id_listeDestination,bookingEngineViewBean.destination);
	}
	// champs dates
	if(bookingEngineViewBean.dayIn)
		getElementByIdIfExists(id_selectArrivalDay).value=Number(bookingEngineViewBean.dayIn);
	
	if(bookingEngineViewBean.monthIn)
		getElementByIdIfExists(id_selectArrivalMonth).value=Number(bookingEngineViewBean.monthIn);
		
	if(bookingEngineViewBean.yearIn)
		getElementByIdIfExists(id_selectArrivalYear).value=bookingEngineViewBean.yearIn;
		
	if(bookingEngineViewBean.nightsNumber)
		getElementByIdIfExists(id_selectNightNber).value=bookingEngineViewBean.nightsNumber;

    rewriteDate() ;

		// code preferentiel: on initialise toujours à zero
    if (bookingEngineViewBean.preferentialCode){
        //Check du code preferentiel
          getElementByIdIfExists(id_checkboxCodePref).value = "ON";
          getElementByIdIfExists(id_checkboxCodePref).checked = true;
          getElementByIdIfExists(id_inputCodePref).value = bookingEngineViewBean.preferentialCode; 
          if(ACC && ACC.codePref) {ACC.codePref.show('code-pref-more');}
    
    }else{
        getElementByIdIfExists(id_checkboxCodePref).value = "";
		    getElementByIdIfExists(id_checkboxCodePref).checked = false;    
        getElementByIdIfExists(id_inputCodePref).value = getElementByIdIfExists(id_inputCodePref).defaultValue;
        if(ACC && ACC.codePref) {ACC.codePref.hide('code-pref-more');}
    } 
		//Check Societe
		getElementByIdIfExists(id_checkboxContract).value = "";
		getElementByIdIfExists(id_checkboxContract).checked = false;
		
		//Pour cartes de fid
		if(fidelityCardsViewBean){
  	  d_userLang  = originViewBean.codeLang;
  	  
  	  var fidelityCardType = "";  
      if (bookingEngineViewBean.fidelityCardName){
        fidelityCardType = bookingEngineViewBean.fidelityCardType;
        if (bookingEngineViewBean.fidelityCardNumber != null){
            getElementByIdIfExists(id_inputCardNber).value = bookingEngineViewBean.fidelityCardNumber;
            //Check du code preferentiel
            getElementByIdIfExists(id_checkboxCard).value = "ON";
            getElementByIdIfExists(id_checkboxCard).checked = true;
            if(ACC && ACC.carteFidelite) {ACC.carteFidelite.show('carte-fidelite-more');}
        }else{
  		    //Check du code carte
  		    getElementByIdIfExists(id_checkboxCard).value = "";
  	    }
      } else{
  		    //Check du code carte
  		    getElementByIdIfExists(id_checkboxCard).value = "";
  		    getElementByIdIfExists(id_checkboxCard).checked = false;
  		    getElementByIdIfExists(id_inputCardNber).value = getElementByIdIfExists(id_inputCardNber).defaultValue;
  		    if(ACC && ACC.carteFidelite) {ACC.carteFidelite.hide('carte-fidelite-more');}
  	  }
      if (fidelityCardsViewBean.fidelityCards)
        fillSelect(id_selectFidCard, fidelityCardsViewBean.fidelityCards, fidelityCardType, type_carte_value[d_userLang]);
  	}
	}
}

function initEventHandlers(maxPeriod, maxStay){
	if($(id_selectArrivalDay) && isSelect($(id_selectArrivalDay)))
		Event.observe(id_selectArrivalDay, "change", function(event){ checkStayDates("j", id_selectArrivalDay, maxPeriod);});
	if($(id_selectArrivalMonth) && isSelect($(id_selectArrivalMonth)))
		Event.observe(id_selectArrivalMonth, "change", function(event){ checkStayDates("m", id_selectArrivalMonth, maxPeriod);});
	if($(id_selectArrivalYear) && isSelect($(id_selectArrivalYear)))
		Event.observe(id_selectArrivalYear, "change", function(event){ checkStayDates("a", id_selectArrivalYear, maxPeriod);});
	if($(id_selectNightNber) && isSelect($(id_selectNightNber)))
		Event.observe(id_selectNightNber, "change", function(event){ checkStayDates("n",id_selectNightNber, maxPeriod);});
	if($(id_checkboxContract))
		Event.observe(id_checkboxContract, "click", function(event){ checkBoxChange(id_checkboxContract);});
	if($(id_checkboxCodePref))
		Event.observe(id_checkboxCodePref, "click", function(event){ checkBoxChange(id_checkboxCodePref);});
	if($(id_checkboxCard))
		Event.observe(id_checkboxCard, "click", function(event){ checkBoxChange(id_checkboxCard);});
	if($(id_hrefCalendar))
		Event.observe(id_hrefCalendar, "click", function(event){ calendrier_arrivee(id_formEngine, maxPeriod, id_selectArrivalMonth, id_selectArrivalYear);});

	if($('type_carte_fidelite') && $('porteur_carte').hasClassName('hidden')){
		Event.observe(
			$('type_carte_fidelite'),
			"change",
			function(){
				if(this.value == '' && $('num_carte_fidelite')) $('num_carte_fidelite').value = $('num_carte_fidelite').defaultValue;
			}
		);
	}
}

function checkBoxChange(checkboxId){
  if (id_checkboxContract == checkboxId){
    if (getElementByIdIfExists(checkboxId).checked){
		    getElementByIdIfExists(checkboxId).value = "1";
	    }else{
		    getElementByIdIfExists(checkboxId).value = "";
	    }
  }else{  
    // Pour garder la coherence avec les validateurs actuels
	    if (getElementByIdIfExists(checkboxId).checked){
		    getElementByIdIfExists(checkboxId).value = "ON";
	    }else{
		    getElementByIdIfExists(checkboxId).value = "";
		    if ( checkboxId == id_checkboxCodePref  ){
            getElementByIdIfExists(id_inputCodePref).value = getElementByIdIfExists(id_inputCodePref).defaultValue;    	        
        }
        if ( checkboxId == id_checkboxCard ){
            getElementByIdIfExists(id_selectFidCard)[0].selected = true;
            getElementByIdIfExists(id_inputCardNber).value = getElementByIdIfExists(id_inputCardNber).defaultValue;     	        
        }
	    }
	}
}

function checkStayDates(type, id, maxPeriod){
    
    if ($(id).selectedIndex == 0 ){
	    //On initialise tout a 0
	    if($(id_selectArrivalDay) && isSelect($(id_selectArrivalDay))) 			$(id_selectArrivalDay)[0].selected = true;
	    if($(id_selectArrivalMonth) && isSelect($(id_selectArrivalMonth)))		$(id_selectArrivalMonth)[0].selected = true;
	    if($(id_selectArrivalYear)&& isSelect($(id_selectArrivalYear)))			$(id_selectArrivalYear)[0].selected = true;
	    if($(id_selectNightNber)&& isSelect($(id_selectNightNber)))				$(id_selectNightNber)[0].selected = true;
    } else {
         if($(id_selectNightNber)) { 
         	 nightNber = $(id_selectNightNber).value;
	         if ( $(id_selectNightNber).value == ""){
	            nightNber = 1;
	            setSelectedValue(id_selectNightNber,1);
	         }
         	 if($(id_selectArrivalDay) && $(id_selectArrivalMonth) && $(id_selectArrivalYear)) 	
         			checkDatesWithId(type, nightNber, maxPeriod, id_selectArrivalDay, id_selectArrivalMonth, id_selectArrivalYear);
        }
    } 
}
function isSelect(element) {
	return (element.type == "select-one") ? true : false;
}
function rewriteDates(maxStay, maxPeriod, sdefaultValue){
  var _today = new Date();
  var _maxDate = addDays(_today ,maxPeriod);
	if(sdefaultValue != ""){
		if($(id_selectArrivalDay) && isSelect($(id_selectArrivalDay))) 		fillDates(id_selectArrivalDay, 1, 31, sdefaultValue);
		if($(id_selectArrivalMonth) && isSelect($(id_selectArrivalMonth))) 	fillDates(id_selectArrivalMonth, 1, 12, sdefaultValue);	
		if($(id_selectArrivalYear) && isSelect($(id_selectArrivalYear))) 	fillDates(id_selectArrivalYear, _today.getFullYear(), _maxDate.getFullYear(), sdefaultValue);
		if($(id_selectNightNber) && isSelect($(id_selectNightNber)))		fillDates(id_selectNightNber, 1, maxStay, sdefaultValue);
	}else{
		if($(id_selectArrivalMonth) && isSelect($(id_selectArrivalDay)))	fillDates(id_selectArrivalDay, 1, 31);
		if($(id_selectArrivalMonth) && isSelect($(id_selectArrivalMonth)))	fillDates(id_selectArrivalMonth, 1, 12);
		if($(id_selectArrivalYear) && isSelect($(id_selectArrivalYear)))		fillDates(id_selectArrivalYear, _today.getFullYear(), _maxDate.getFullYear());
		if($(id_selectNightNber) && isSelect($(id_selectNightNber)))			fillDates(id_selectNightNber, 1, maxStay);
	}
}

function fillDates(elementId, min, max, defaultValue){
	var selectElement	= $(elementId);
	if (selectElement) {
		selectElement.options.length=0;
		if(min==0 && max==0){
			selectElement[0]=new Option(defaultValue, "");
		} else {
			if(defaultValue){
				selectElement[0]=new Option(defaultValue, "");
				for(var i=0; i<max-min+1; i++)
					selectElement[i+1]=new Option(min+i, min+i);
			}
			else {
				for(var i=0; i<max-min+1; i++)
					selectElement[i]=new Option(min+i, min+i);
			}
		}
	}
}



function rewriteDate()   {
  	
		if ($('jour_arrivee').value != '' && $('mois_arrivee').value != '' && $('annee_arrivee').value != '' ){
			var arrival_date = new Date(Number($('annee_arrivee').value), Number($('mois_arrivee').value)-1, Number($('jour_arrivee').value));
		
			var arrival_date2 =arrival_date.print(Calendar._TT["DEF_DATE_FORMAT"]);
			
			if ($('arrivee'))
				$("arrivee").value = arrival_date2; 
			
//			this.updateDepartureDate();

			// Fix pour IE et l'init de calendar lie a un pb d'ordre d'execution des scripts entre BookingEngine et calendar-init
			if(typeof(bookingEngine.arrival_date) != "undefined" && bookingEngine.arrival_date ==  null)
      {
        bookingEngine.arrival_date = arrival_date;
        bookingEngine.updateDepartureDate();
      }
		} 
}




