/** * Objet javascript permettant de gérer les menus déroulants des nombres d'adultes et d'enfants de la page rooms-dates.jsp. */ var SelectPax = { bookingEngineViewBean: null, /** * Liste des noms d'objets à utiliser. */ getBeans: function() { return "BookingEngineViewBean"; }, /** * Initialisation de la variable JSON */ initJSON: function() { var num; try { for( num in beans) { if("BookingEngineViewBean" == beans[num].nom) { bookingEngineViewBean = beans[num].bean; } } } catch(e) { alert(e); } }, /** * Retourne la variable de classe instanciée. */ getBookingEngineViewBean: function() { return bookingEngineViewBean; }, /** * 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.observePax(); this.checkPax("nb_personne", "nb_enfant"); if($("type_carte_fidelite")) Event.observe($("type_carte_fidelite"), "change", this.rewriteRoomNumber); if(navigator.userAgent.indexOf('Safari') != -1) { if($('type-couchage')) { labels = $('type-couchage').select('label'); for(var i=labels.length-1; i>=0; i--) { Event.observe($(labels[i]), "click", this.handleLabel); } } } }, /** * Ajout des observateur d'évènements sur les menus déroulants. */ observePax: function() { if($("nb_personne")) { Event.observe( $("nb_personne"), "change", function(event) { SelectPax.checkPax("nb_personne", "nb_enfant"); } ); } if($("nb_enfant")) { Event.observe( $("nb_enfant"), "change", function(event) { SelectPax.checkPax("nb_personne", "nb_enfant"); } ); } }, /** * Gestion des menus déroulants, on regarde si nbAdults + nbEnfant ne dépasse * pas bookingEngineViewBean.hotelPaxPolicies.maxPax. */ checkPax: function(adultsId, childId) { var adultsNb = eval($(adultsId).options[$(adultsId).selectedIndex].value); var childNb = 0 var childBlockReady = $(childId); // Si l'on a une politique enfant, je met par défaut la politique enfant à 0. if(childBlockReady) { try { childNb = eval(childBlockReady.options[childBlockReady.selectedIndex].value); } // Une exception est levée dans le cas du premier affichage, car la liste n'existe pas encore. catch(ex) { alert(ex); childNb = 0; } // Je prends la plus petite des 2 valeurs que sont le nb max d'enfants de la chipol // et le nombre max d'enfants dans le reservable. var maxChilds = bookingEngineViewBean.hotelPaxPolicies.maxChildsChipol; if(bookingEngineViewBean.hotelPaxPolicies.maxChildsChipol > bookingEngineViewBean.hotelPaxPolicies.maxChildsInReservable) maxChilds = bookingEngineViewBean.hotelPaxPolicies.maxChildsInReservable; // test si l'on a des enfants, si oui, alors si il y a trop d'occupant, on les mets à 0 et // on change la taille de la liste. if( (adultsNb + childNb) > bookingEngineViewBean.hotelPaxPolicies.maxPax ) { // Remise à zéro de la liste. childBlockReady.length = 0; var size; // Si le nombre d'adultes est égal au max, il ne reste pas de place pour les enfants. if(adultsNb >= bookingEngineViewBean.hotelPaxPolicies.maxPax) { size = 0; } else { size = bookingEngineViewBean.hotelPaxPolicies.maxPax - adultsNb; } this.rewriteSelectChildren(childId, size, '0', '0'); // Et on masque le bloc this.hideChildPolicy(size); } // Si le nombre d'enfants + le nombre d'adultes est supérieur au max, alors on recalcule // l'espace libre pour les enfants. else if((adultsNb + maxChilds) > bookingEngineViewBean.hotelPaxPolicies.maxPax) { childBlockReady.length = 0; var size = bookingEngineViewBean.hotelPaxPolicies.maxPax - adultsNb; this.rewriteSelectChildren(childId, size, '0', '0'); this.hideChildPolicy(size); childBlockReady.selectedIndex = childNb; } // Si la taille de al select box des enfants est inférieure au nombre d'enfants alors // on recalcule la taille de la selectbox. else if(childBlockReady.length < maxChilds+1) { childBlockReady.length = 0; this.rewriteSelectChildren(childId, maxChilds, '0', '0'); this.hideChildPolicy(maxChilds); childBlockReady.selectedIndex = childNb; } else { this.hideChildPolicy(maxChilds); } } // test si le nombre maximum d'adultes en serait pas supérieur au nombre maxpax de l'hôtel. if(bookingEngineViewBean.hotelPaxPolicies.maxAdults > bookingEngineViewBean.hotelPaxPolicies.maxPax) { if( adultsNb > bookingEngineViewBean.hotelPaxPolicies.maxPax) { $(adultsId).selectedIndex = bookingEngineViewBean.hotelPaxPolicies.maxPax; } } }, /** * Mise à jour du select box du nombre d'enfant */ rewriteSelectChildren: function(id, size, defaultValue, selectedValue) { var select = $(id); if(bookingEngineViewBean.hotelPaxPolicies && bookingEngineViewBean.hotelPaxPolicies.maxChildsChipol) { this.createOptions(select, 1, size, defaultValue, null, selectedValue); } }, /** * Mise à jour d'un sélect qui n'est qu'une liste de chiffre (nombre de personnes, dates, ...). * select: le select à remplir. * start: la valeur de départ. * defaultValue: Sert pour l'option de position 0, c'elle ui est affichée en premier, et souvent on * veut voir afficher une valeur indiquant qu'il faut choisir. Si l'on veut voir afficher ce cas * il faut passer la valeur à null ou '', si on en veut une il faut au moins passer ' '. * defaultText: valeur qui sera afficher de paire avec la defaultValue. * selectedValue: dans le cas d'un réaffichage, on veut peut être voir apparaitre la valeur * précédemment sélectionnée. */ createOptions: function(select, start, size, defaultValue, defaultText, selectedValue) { var startCounter = 0; var display = start ; if(defaultValue) { if(!defaultText || '' == defaultText) defaultText = defaultValue; select.options[0]=new Option(defaultText, defaultValue); if(selectedValue == defaultValue) select.selectedIndex = 0; startCounter = 1; } for(var counter= startCounter ; counter < (size+startCounter); counter++ ) { select.options[counter] = new Option( display, display ); if(selectedValue == display) select.selectedIndex = counter; display++; } }, /** * Méthode permettant de cacher le bloc ou se trouve le menu déroulant des enfants. */ hideChildPolicy: function(nbChilds) { listDl = $("content").select("dl.nb_enfant"); if(nbChilds == 0) { $(listDl[0]).style.display="none"; } else { $(listDl[0]).style.display="block"; } }, handleLabel:function(event) { var label = Event.element(event); var idName = label.getAttribute("for"); $(idName).checked = true; //alert(idName); }, rewriteRoomNumber:function(event){ if($("rooms_nb") && $("rooms_nb").type=="select-one"){ var selectElement = $("rooms_nb"); var selectValue = selectElement.value; //On force le nettoyage du select selectElement.options.length=0; selectElement.innerHTML=""; for(var i=0; i var oOption = document.createElement('option'); oOption.value = i+1; oOption.innerHTML = i; if(selectValue==(i+1)) oOption.selected=true; selectElement.appendChild(oOption); } } } } core.push(SelectPax); /** * 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. */