//nombre maximum d'appartements
var roomMaxNumber = 10;	
//nombre maximum d'adultes par appartement
//var adultsMaxNumber = 9;
var adultsMaxNumber = 12;
//nombre minimum d'adultes par appartement
var adultsMinNumber = 1;
//nombre d'adultes par défaut par appartement
var adultsDefaultNumber = 2;
//nombre maximum d'enfants par appartement
//var childrenMaxNumber = 5;
var childrenMaxNumber = 8;
//nombre minimum d'enfants par appartement
var childrenMinNumber = 0;
//nombre maximum de bébés par appartement
//var infantsMaxNumber = 2;
var infantsMaxNumber = 5;
//nombre minimum de bébés par appartement
var infantsMinNumber = 0;

//tableau permettant de savoir si une ligne d'appartement a été construite ou non
var isApartmentLineBuilt = new Array;
isApartmentLineBuilt[0] = "false";
isApartmentLineBuilt[1] = "false";
isApartmentLineBuilt[2] = "false";
isApartmentLineBuilt[3] = "false";
isApartmentLineBuilt[4] = "false";
isApartmentLineBuilt[5] = "false";
isApartmentLineBuilt[6] = "false";
isApartmentLineBuilt[7] = "false";
isApartmentLineBuilt[8] = "false";
isApartmentLineBuilt[9] = "false";

	
//noms générique des select (html)
var apartmentAdults_select_generic_name = "adultscountapartment"; //"wantedRoomPlan_adults_"; //"room_adults_";	
var apartmentChildren_select_generic_name = "childrencountapartment"; //"wantedRoomPlan_children_"; //"room_children_";
var apartmentInfants_select_generic_name = "infantscountapartment"; //"wantedRoomPlan_cots_"; //"room_infants_";
	
//construit la liste du nombre d'adultes
function buildAdultsSelect(lineNumber){
	var adultsSelectName = apartmentAdults_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
function buildChildrenSelect(lineNumber){
	var childrenSelectName = apartmentChildren_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
function buildInfantsSelect(lineNumber){
	var infantsSelectName = apartmentInfants_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);
}

//initialise le nombre d'adultes et le nombre d'enfants pour une ligne donnée
function setAdultAndChildrenNumber(lineNumber,askedAdultsNumber,askedChildNumber){

	//on extrait le nombre d'adultes demandé par l'utilisateur
	var adultsSelectName = apartmentAdults_select_generic_name+lineNumber;
	var adultsSelectedIndex = document.getElementById(adultsSelectName).selectedIndex;
	
	//on extrait le nombre d'enfants sélectionné
	var childrenSelectName = apartmentChildren_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 changeApartmentNumber(lineNumber, isRightForm){
	
	//on lance la gestion de l'affichage des lignes de chambre
	apartmentLinesManagement(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
	displayAgeLinesTitleIfAtLeastOneLine();
		 				
}

//construit une ligne de chambre à partir d'un numéro de ligne
function buildApartmentLine(lineNumber, isRightForm){
	
	var tableStyleName = "residencepaxes";
	
	if (isRightForm != null && isRightForm == "false"){  // si rentre pas dans la boucle alors que isRightForm = false mettre : if (isRightForm != null && isRightForm + "" == "false"){ 
		//la méthode a été appelée à partir du formulaire de recherche condensé
		
		//102013 todo : un style différent si création d'un formulaire condensé 
		tableStyleName = "a_creer";
	}
	
	var divName = "apartmentline"+parseInt(lineNumber);
	
	var currentNumberApartment = lineNumber+1;
	var htmlText = "<table class='"+tableStyleName+"'>"+
	"<tr>"+
	"<td class='apartmentcell'>"+currentNumberApartment+
	"</td>"+
	"<td>"+
	"<select id='" + apartmentAdults_select_generic_name + lineNumber + "' name='" + apartmentAdults_select_generic_name + lineNumber + "'>"+			
	"</select>"+
	"</td>"+
	"<td>"+
	"<select id='" + apartmentChildren_select_generic_name + lineNumber + "' name='" + apartmentChildren_select_generic_name + lineNumber + "' onchange='javascript:changeChildrenNumber(" + lineNumber + ");'>"+		
	"</select>"+
	"</td>"+
	"<td>"+
	"<select id='" + apartmentInfants_select_generic_name + lineNumber + "' name='" + apartmentInfants_select_generic_name + lineNumber + "'>"+				
	"</select>"+
	"</td>"+
	"</tr>"+
	"</table>";
	
	document.getElementById(divName).innerHTML=htmlText;
		
	isApartmentLineBuilt[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 apartmentLinesManagement(lineNumber, isRightForm){

	for (i=0; i < roomMaxNumber ; i++){ 
		var divName = "apartmentline"+i;
		if (i <= lineNumber){ //la ligne en cours doit être affichée
			if (isApartmentLineBuilt[i] == "false"){ //la ligne en cours n'a pas encore été construite
				buildApartmentLine(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 = apartmentChildren_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
	displayAgeLinesTitleIfAtLeastOneLine();
}

function setChildrenAge(lineNumber,childrenNumber,age){
	var index = findSelectIndexBySelectValue(apartmentChildren_select_generic_name + lineNumber + "_" + childrenNumber, age);
	var selbox = document.getElementById(apartmentChildren_select_generic_name + lineNumber + "_" + childrenNumber);
	document.getElementById(apartmentChildren_select_generic_name + lineNumber + "_" + childrenNumber).selectedIndex = index;
}

function setInfant(lineNumber,infantNumber){
	var infantSelectName = apartmentInfants_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 displayAgeLinesTitleIfAtLeastOneLine(){
	if (isAtLeastOneAgeLineDisplayed() == 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 isAtLeastOneAgeLineDisplayed(){
	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;
}

//supprime les listes déroulantes des chambres et d'âges qui sont masquées avant de soumettre le formulaire
function cleanDivDisplay(){
	var nbRoom = parseInt(document.getElementById("roomsNumber").value)+1;//la liste commence à 0
	
	//supprime les listes des âges si pour les chambres choisies il n'y a pas d'enfant
	for(var i=0; i<nbRoom; i++){
		var childrenSelect = document.getElementById(apartmentChildren_select_generic_name+i);
		if(childrenSelect!=null){
			var nbChildren = childrenSelect.value;
			if(nbChildren==0){
				document.getElementById("childrenageline"+i).innerHTML = "";
			}
		}
	}	
	
	//suppprime les listes masquées des chambres et des âges 
	for(var i=nbRoom; i<roomMaxNumber; i++){
		document.getElementById("apartmentline"+i).innerHTML = "";
		document.getElementById("childrenageline"+i).innerHTML = "";
	}	
}

// Positionne les éléments du formulaire de recherche de dispo, à partir des tableaux de valeurs passés en paramètre
function refreshPaxCounts(roomsCount, adultsNumbers, childrenNumbers, childrenAges, infantsNumbers) {

	//alert("childrenAges="+childrenAges);
	
	if(isNaN(roomsCount) || adultsNumbers.length<1) {
		
	} else {
		
		for(var i=0; i<roomsCount; i++) {
			try {
				
				var adultsCount = parseInt(adultsNumbers[i]);
				var childrenCount = parseInt(childrenNumbers[i]);
				var infantsCount = parseInt(infantsNumbers[i]);
				
				//alert("adultsCount="+adultsCount+"\nchildrenCount="+childrenCount+"\ninfantsCount="+infantsCount);
				setAdultAndChildrenNumber(i, adultsCount, childrenCount);
				
				roomChildrenAges = childrenAges[i];
				for(var j=0; j<childrenCount; j++) {
					
					//alert("roomChildrenAges["+j+"]="+roomChildrenAges[j]);
					if(!isNaN(roomChildrenAges[j])) {
						var age = parseInt(roomChildrenAges[j]);
						//alert("age="+age);
						setChildrenAge(i, j, age);
					}
				}
		
				setInfant(i, infantsCount);
				
			} catch(e) {
				//alert("EXCEPTION JS @refreshPaxCounts : "+e);
			}
		}
	}
	
}


