//nombre maximum de chambres
var roomMaxNumber = 5;
		
//tableau permettant de savoir si une ligne de chambre a été construite ou non
var isRoomLineBuilt = new Array;
isRoomLineBuilt[0] = "false";
isRoomLineBuilt[1] = "false";
isRoomLineBuilt[2] = "false";
isRoomLineBuilt[3] = "false";
isRoomLineBuilt[4] = "false";

//noms générique des select (html)
var roomAdults_select_generic_name = "room_adults_";	
var roomChildren_select_generic_name = "room_children_";
var roomInfants_select_generic_name = "room_infants_";

var adultsMaxNumber = 9; 		//nombre maximum d'adultes par chambre
var adultsMinNumber = 1; 		//nombre minimum d'adultes par chambre
var adultsDefaultNumber = 2;    //nombre d'adultes par défaut par chambre
var childrenMaxNumber = 3; 		//nombre maximum d'enfants par chambre, SI PLUS DE 3 : ADAPTER L'IHM
var childrenMinNumber = 0;		//nombre minimum d'enfants par chambre
var infantsMaxNumber = 2;		//nombre maximum de bébés par chambre 
var infantsMinNumber = 0;		//nombre minimum de bébés par chambre
	
//construit la liste du nombre d'adultes pour une ligne donnée
function buildAdultsSelect(lineNumber){
	var adultsSelectName = roomAdults_select_generic_name+lineNumber;
	if (adultsMinNumber == 0){ 
		for (var i=adultsMinNumber; i<=adultsMaxNumber; i++){
			document.getElementById(adultsSelectName).options[i]=new Option(i,i);
		}	
	}else{
		for (var j=adultsMinNumber; j<=adultsMaxNumber; j++){
			document.getElementById(adultsSelectName).options[j-1]=new Option(j,j);
		}
	}
	
	//positionne de la liste du nombre d'adultes à la valeur par défaut
	document.getElementById(adultsSelectName).selectedIndex = adultsDefaultNumber-1;
}

//construit la liste du nombre d'enfants pour une ligne donnée
function buildChildrenSelect(lineNumber){
	var childrenSelectName = roomChildren_select_generic_name+lineNumber;
	if (childrenMinNumber == 0){ 
		for (var i=childrenMinNumber; i<=childrenMaxNumber; i++){
			document.getElementById(childrenSelectName).options[i]=new Option(i,i);
		}	
	}else{
		for (var j=childrenMinNumber; j<=childrenMaxNumber; j++){
			document.getElementById(childrenSelectName).options[j-1]=new Option(j,j);
		}
	}
}
	
//construit la liste du nombre de bébés pour une ligne donnée
function buildInfantsSelect(lineNumber){
	var infantsSelectName = roomInfants_select_generic_name+lineNumber;
	if (infantsMinNumber == 0){ 
		for (var i=infantsMinNumber; i<=infantsMaxNumber; i++){
			document.getElementById(infantsSelectName).options[i]=new Option(i,i);
		}	
	}else{
		for (var j=infantsMinNumber; j<=infantsMaxNumber; j++){
			document.getElementById(infantsSelectName).options[j-1]=new Option(j,j);
		}
	}
}
		
//changement du nombre d'adultes d'une ligne donnée
function changeAdultsNumber(lineNumber){
	//on lance la gestion de l'affichage de saisie des ages des enfants
	childrenAgeLinesManagement(lineNumber);
}


//vérifie le nombre d'enfants par rapport au nombre d'adultes, pour une ligne donnée
//modifie le nombre d'enfants s'il n'est pas bon
function setAdultAndChildrenNumber(lineNumber,askedAdultsNumber,askedChildNumber){
	//on calcul le nb max de personnes pour le roomType de la ligne à traiter
	//var maximumPersonNumber = getMaximumPersonsNumberByRoomTypeId(roomTypeId);
	
	//on extrait le nombre d'adultes demandé par l'utilisateur
	var adultsSelectName = roomAdults_select_generic_name+lineNumber;
	var adultsSelectedIndex = document.getElementById(adultsSelectName).selectedIndex;
	
	//on extrait le nombre d'enfants sélectionné
	var childrenSelectName = roomChildren_select_generic_name+lineNumber;
	var childrenSelectedIndex = document.getElementById(childrenSelectName).selectedIndex;
	
	//on vérifie si le nombre d'enfants est bon par rapport au nombre d'adultes demandé
	var childrenNumberInt = parseInt(askedChildNumber);
	var askedAdultsNumberInt = parseInt(askedAdultsNumber);
	
	var childrenPosition = findSelectIndexBySelectValue(childrenSelectName, childrenNumberInt);
	
	var adultPosition = findSelectIndexBySelectValue(adultsSelectName, askedAdultsNumberInt);
	document.getElementById(childrenSelectName).selectedIndex = childrenPosition;
	document.getElementById(adultsSelectName).selectedIndex = adultPosition;
	childrenAgeLinesManagement(lineNumber);
	
}

//changement du nombre d'enfants d'une ligne donnée
function changeChildrenNumber(lineNumber){
	
	//on lance la gestion de l'affichage de saisie des ages des enfants
	childrenAgeLinesManagement(lineNumber);
}

//vide les champs d'une liste donnée
function clearSelectByName(selectName){
	while(document.getElementById(selectName).options.length > 0){
		document.getElementById(selectName).options[0] = null;
	}
}

//trouve l'index d'un select en fonction d'une value
//NB : les valeurs des options sont uniques
function findSelectIndexBySelectValue(selectName, selectValue){
	var incr = document.getElementById(selectName).options.length;
	for (curs=0; curs<incr; curs++){
		var currentValue = document.getElementById(selectName).options[curs].value;
		if (currentValue == selectValue ){
			return curs;
		}
	}
	return -1;
}

function setSelectValueById(selectId,selectValue){//return true if success
	var index = findSelectIndexBySelectValue("" + selectId, selectValue);
	if (index != -1){//not found
		document.getElementById(selectId).selectedIndex = index;
		return true;
	}
	return false;
}

//lance les traitements à réaliser suite à un changement du nombre de chambre
function changeRoomNumber(lineNumber, isRightForm){
	//on lance la gestion de l'affichage des lignes de chambre
	roomLinesManagement(lineNumber, isRightForm);
	
	var beginLine = parseInt(lineNumber)+1;
	//on masque les lignes des ages des chambres sortant de la sélection (si elles ne sont pas déjà masquées) 
	hideAgeLinesByLineNumber(beginLine);
	
	//on affiche les lignes des ages des chambres incluses dans la sélection (si elles ne sont pas déjà affichées)  
	displayAgeLinesByLineNumber(beginLine);
	
	//on affiche le titre des ages si il y a au moins une ligne d'age
	displayAgeLinesTitleIfUnlessOneLine();	 				
}

//construit une ligne de chambre à partir d'un numéro de ligne
function buildRoomLine(lineNumber, isRightForm){
	
	var tableStyleName = "line";
	
	if (isRightForm != null && isRightForm + "" == "false"){
		//la méthode a été appelée à partir du formulaire de recherche de la zone de gauche
		tableStyleName = "line-compact"
	}
	
	var divName = "roomLine_"+parseInt(lineNumber);
	var currentNumberRoom = lineNumber+1;
	var htmlText = "<table class='"+tableStyleName+"'>"+
	"<tr>"+
	"<td class='first'>"+currentNumberRoom+
	"</td>"+
	"<td>"+
	"<select id='" + roomAdults_select_generic_name + lineNumber + "' name='" + roomAdults_select_generic_name + lineNumber + "' onchange='javascript:changeAdultsNumber(" + lineNumber + ");'>"+								
	"</select>"+
	"</td>"+
	"<td>"+
	"<select id='" + roomChildren_select_generic_name + lineNumber + "' name='" + roomChildren_select_generic_name + lineNumber + "' onchange='javascript:changeChildrenNumber(" + lineNumber + ");'>"+								
    "</select>"+
	"</td>"+
	"<td>"+
	"<select id='" + roomInfants_select_generic_name + lineNumber + "' name='" + roomInfants_select_generic_name + lineNumber + "'>"+								
	"</select>"+
	"</td>"+
	"</tr>"+
	"</table>";
	document.getElementById(divName).innerHTML=htmlText;
	isRoomLineBuilt[lineNumber] = "true";
	buildAdultsSelect(lineNumber);
	buildChildrenSelect(lineNumber);
	buildInfantsSelect(lineNumber);
}

//gestion de l'affichage des lignes de chambre
//pour chaque ligne de chambre
//si elle doit être affichée : on la construit (si elle n'est pas déjà construite) et on l'affiche (si elle n'est pas déjà affichée)
//sinon on la masque
function roomLinesManagement(lineNumber, isRightForm){
	for (i=0; i < roomMaxNumber ; i++){ 
		var divName = "roomLine_"+i;
		if (i <= lineNumber){ //la ligne en cours doit être affichée
			if (isRoomLineBuilt[i] == "false"){ //la ligne en cours n'a pas encore été construite
				buildRoomLine(i, isRightForm);	
			}
			//affichage de la ligne en cours (si elle n'est pas déjà affichée)
			displayAndBlockElementIfNot(divName);
		}else{ //la ligne en cours ne doit pas être affichée, on la masque (si elle n'est pas déjà masquée)
			hideAndUnblockElementIfNot(divName);
		}
	}
}

//masque les lignes de saisie des âges des enfants (si elles ne sont pas déjà masquées), à compter de la ligne [lineNumber]
function hideAgeLinesByLineNumber(lineNumber){
	for (i=lineNumber ; i<roomMaxNumber ; i++){
		divAgeName = "childrenAgeLine_"+i;
		hideAndUnblockElementIfNot(divAgeName);
	}
}

//lance la gestion de l'affichage de saisie des âges des enfants, de la ligne 0 à la ligne [lineNumber]
function displayAgeLinesByLineNumber(lineNumber){
	
	for (g=0 ; g < lineNumber ; g++){
		childrenAgeLinesManagement(g);
	}
}

//gestion de l'affichage de sélection des ages des enfants
function childrenAgeLinesManagement(lineNumber){
	//on extrait le nombre d'enfants demandé par l'utilisateur
	var childrenSelectName = roomChildren_select_generic_name+lineNumber;
	var childrenSelectedIndex = document.getElementById(childrenSelectName).selectedIndex;
	var askedChildrenNumber = document.getElementById(childrenSelectName).options[childrenSelectedIndex].value;
	//on extrait le nom de la ligne de sélection des ages des enfants 
	var divName = "childrenAgeLine_"+lineNumber;
	
	if (askedChildrenNumber == 0){ //aucun enfant demandé, on masque la ligne de sélection des ages des enfants (si elle n'est pas déjà masquée)
		hideAndUnblockElementIfNot(divName);	
	}else{ //il y a au moins un enfant demandé, on affiche la ligne de sélection des ages des enfants (si elle n'est pas déjà affichée)
		displayAndBlockElementIfNot(divName);
		for (i=0; i < askedChildrenNumber ; i++){ //on affiche autant de liste que d'enfants demandés (si elles ne sont pas déjà affichées) 	 	
			displayAndBlockElementIfNot("childrenAgeLine_"+lineNumber+"_"+i);
		}
		for (j=askedChildrenNumber; j < childrenMaxNumber ; j++){ //pour les autres enfants on masque les listes d'ages (si elles ne sont pas déjà masquées) 
			hideAndUnblockElementIfNot("childrenAgeLine_"+lineNumber+"_"+j);
		} 
	}
	
	//on affiche le titre des ages si il y a au moins une ligne d'age
	displayAgeLinesTitleIfUnlessOneLine();
}

function setChildrenAge(lineNumber,childrenNumber,age){
	var index = findSelectIndexBySelectValue("room_children_ages_" + lineNumber + "_" + childrenNumber, age);
	var selbox = document.getElementById("room_children_ages_" + lineNumber + "_" + childrenNumber);
	document.getElementById("room_children_ages_" + lineNumber + "_" + childrenNumber).selectedIndex = index;
}

function setInfant(lineNumber,infantNumber){
	var infantSelectName = roomInfants_select_generic_name + lineNumber;
	var index = findSelectIndexBySelectValue(infantSelectName, infantNumber);
	document.getElementById(infantSelectName).selectedIndex = index;
}

//affiche le titre "Age des enfants" si au moins une ligne de sélection d'ages d'enfants est affichée
function displayAgeLinesTitleIfUnlessOneLine(){
	if (isUnlessOneAgeLineDisplayed() == true){ //il y a au moins une ligne d'ages d'enfants affichée, il faut afficher le titre (s'il n'est pas déjà affiché)
		displayAndBlockElementIfNot("childrenAgeTitle");
	}else{
		hideAndUnblockElementIfNot("childrenAgeTitle"); //il n'y aucune ligne d'ages d'enfants affichée, il faut masquer le titre (s'il n'est pas déjà masqué)
	}
}

//cherche si au moins une ligne de sélection d'ages d'enfants est affichée
function isUnlessOneAgeLineDisplayed(){
	var isDisplay = false;
	for (j=0; j < roomMaxNumber ; j++){
		var elementName = "childrenAgeLine_"+j;
		if(document.getElementById(elementName) != null && document.getElementById(elementName).style.visibility=="visible"){
			return true;
		}	
	}
	return isDisplay;
}