var tab_type_chambre = new Array();
var tab_repartition  = new Array();

function inverser(tab,i,j) {
	var temp=tab[i];
	tab[i]=tab[j];
	tab[j]=temp;
}
function TriTab(tab,ordre) {
	// tab est le nom du tableau
	// ordre vaut 1 si tri croissant et -1 sinon
	ordre=-ordre;
	var n=tab.length;
	var continuer=true;
	var i=0;
	var iter=0;
	for (i=0;i<n;i++) {tab[i]=ordre*tab[i];}
	while (continuer) {
		iter++;
		continuer=false;
		for (i=0;i<n-1;i++) {
			if (Math.min(tab[i],tab[i+1])!=tab[i+1]) {inverser(tab,i,i+1);  continuer=true;}
		}
	}
	for (i=0;i<n;i++) {tab[i]=ordre*tab[i];}

	return tab;
}

function NbAdultes() {
	return Math.round(document.getElementById("nb_adultes").value);
}
function NbEnfants() {
	var nb = 0;
	if (Math.round(document.getElementById("enfant1").value) > 1 )	  nb++;
	if (Math.round(document.getElementById("enfant2").value) > 1 )	  nb++;
	if (Math.round(document.getElementById("enfant3").value) > 1 )	  nb++;
	if (Math.round(document.getElementById("enfant4").value) > 1 )	  nb++;
	return nb;
}
function NbBebe() {
	var nb = 0;
	if (Math.round(document.getElementById("enfant1").value) == 1 )  nb++;
	if (Math.round(document.getElementById("enfant2").value) == 1 )  nb++;
	if (Math.round(document.getElementById("enfant3").value) == 1 )  nb++;
	if (Math.round(document.getElementById("enfant4").value) == 1 )  nb++;
	return nb;
}

function NbPax() {
	return NbAdultes()+ NbEnfants() + NbBebe()	;
}

function GetEnfants() {
	var out = new Array();
	if (Math.round(document.getElementById("enfant1").value) >= 1 )	out[out.length] = Math.round(document.getElementById("enfant1").value);
	if (Math.round(document.getElementById("enfant2").value) >= 1 )	out[out.length] = Math.round(document.getElementById("enfant2").value);
	if (Math.round(document.getElementById("enfant3").value) >= 1 )	out[out.length] = Math.round(document.getElementById("enfant3").value);
	if (Math.round(document.getElementById("enfant4").value) >= 1 )	out[out.length] = Math.round(document.getElementById("enfant4").value);
	out = TriTab(out,-1);
	return out;
}

function GetPax() {
	var out = new Array();

	nb_adultes = NbAdultes();
	for(var i=1;i<=nb_adultes;i++) {
		var elt = new Array();
		elt["age"] = 99;
		elt["type"] = "adulte";
		elt["image"] = "ico_adulte.gif";
		elt["libelle"] = "n°" + i;
		out[out.length] = elt;
	}


	var enfants = GetEnfants();

	for(var i=0;i<enfants.length;i++) {
	  var elt_tmp=document.getElementById('enfant'+Math.round(i+1));
	  elt_tmp.value=enfants[i];
	  
		var elt = new Array();
		elt["age"] = enfants[i];
		if (enfants[i] == 1) {
			elt["type"] = "bebe";
			elt["image"] = "ico_bb.gif";
			elt["libelle"] = "bébé";
		} else {
			elt["type"] = "enfant";
			elt["image"] = "ico_enfant.gif";
			elt["libelle"] = enfants[i] + " ans";
		}
		out[out.length] = elt;
	}

	return out;
}
function AddChambre(type,refresh) {
	var elt = new Array();

	var maxpax =  0;
	var libelle = "";

	switch (type) {
		case "single" :
		maxpax = 1;
		libelle = "Chambre single";
		break;
		case "double" :
		maxpax = 2;
		libelle = "Chambre double";
		break;
		case "twin" :
		maxpax = 2;
		libelle = "Chambre twin";
		break;
		case "triple" :
		maxpax = 3;
		libelle = "Chambre triple";
		break;

		case "quadruple" :
		maxpax = 4;
		libelle = "Chambre quadruple";
		break;
}
	if (maxpax > 0 ) {
		elt["maxpax"] = maxpax;
		elt["libelle"] = libelle;
		elt["type"] = type;
		tab_type_chambre[tab_type_chambre.length] = elt;
	}
	tab_repartition[tab_repartition.length] = new Array();
	pax = GetPax();
	for(var i=0;i<pax.length;i++) {
		tab_repartition[tab_repartition.length-1][i] = -1;
	}
	if (refresh) DrawRepartition(document.getElementById("div_repartition"));
}

function RemoveChambre(indice,refresh) {
	tab_type_chambre.splice(indice,1);
	tab_repartition.splice(indice,1);
	if (refresh) DrawRepartition(document.getElementById("div_repartition"));
}

function DrawRepartition(objet,userepartition) {
var out = "";
	out += "<table border='0' cellpadding='5'>\n";
	//Ligne entete
	out += "<tr><th>&nbsp;</th>";
	
	pax = GetPax();
	for(var i=0;i<pax.length;i++) {
		out += "<th>";
		out += "<img src='images/" + pax[i]["image"] + "'><br/>" + pax[i]["libelle"];
		out += "</th>";
	}
	out += "<th>&nbsp;</th>";
	out += "</tr>";

	//Chambres
	for(var i=0;i<tab_type_chambre.length;i++) {
		out += "<tr><td>" +tab_type_chambre[i]["libelle"]+ "</td>";
		for(var j=0;j<pax.length;j++) {
			out += "<td>";
			out += "<input type='radio' name='repartion_pax[" + j + "]' id='repartion_pax[" + j + "][" + i + "]'";
			if (tab_repartition[i][j]>=0) out += " checked ";
			out += " value='" + i + "' onclick='SetPax(" + j +"," + i +")'>";
			out += "</td>";
		}
		out += "<input type='hidden' name='type_chambres[]' value='" + tab_type_chambre[i]["type"] + "'>";
		out += "</td>";
		out += "</tr>";
	}
	out += "</table>";
	
	if(!objet) objet = document.getElementById("div_repartition");
	if(!objet) return;
	objet.innerHTML = out;
	if (!userepartition) DoRepartition();
}

function ResetTypeChambre() {
	tab_type_chambre = new Array();
}
function ResetRepartition() {
	tab_repartition = new Array();
	for(var i=0;i<tab_type_chambre.length;i++) {
		tab_repartition [i] = new Array();
		for(var j=0;j<pax.length;j++) {
			tab_repartition[i][j] = -1;
		}
	}
}

function NbPaxChambre(indice) {
	nb = 0;
	pax = GetPax();
	for(var i=0;i<pax.length;i++) {
		if(tab_repartition[indice][i]>=0) nb++;
	}
	return nb;
}

function SetPax(pax,chambre) {
	for(var i=0;i<tab_type_chambre.length;i++) {
		var elt = document.getElementById("repartion_pax[" + pax + "][" + i + "]");
		
		if (chambre == i) {
			tab_repartition[i][pax]  = pax;
		} else {
			tab_repartition[i][pax] = -1;
		}		
    if (elt) {
    	 elt.value = chambre
    	 if(tab_repartition[i][pax]>=0)
    	   elt.checked = "checked";
    }
	}
}

function IsPaxAffecte(pax) {
	for(var i=0;i<tab_type_chambre.length;i++) {
		if (tab_repartition[i][pax]>=0) return true;
	}
	return false;
}

function DoRepartition(chambre,nbpaxrestant,nb) {
		
	if (!chambre) {
		chambre = 0;
		nbpaxrestant = NbPax();
		ResetRepartition();
	}

	if (!nbpaxrestant) return;
	if (nb>10) return;
	if (chambre >= tab_type_chambre.length) return;
	pax = GetPax();

	for(var i=0;(i<pax.length) && (tab_type_chambre[chambre]["maxpax"] > NbPaxChambre(chambre)  ) ;i++) {
		if (!IsPaxAffecte(i)) {
			SetPax(i,chambre)	;
			nbpaxrestant--;
		}
	}
	DoRepartition(chambre+1,nbpaxrestant,nb+1);
}


function RefreshChambres() {
 var types = new Array("single","twin","double","triple","quadruple");
 ResetTypeChambre();
 ResetRepartition();
 for(var i=0;i<types.length;i++) {
 	var elt = document.getElementById("nb_" +types[i]);
 	if (elt) {
 		for(var j=1;j<=Math.round(elt.value);j++) 
 		{
 		  AddChambre(types[i],false);
 		  var type=types[i]; 		  
 		}
 	}
 }
Repartition();
}
function Repartition()
{
  DrawRepartition('','');
  if(Nbchambres()==1 && (NbPax())==GetMaxPax())
  {
   document.getElementById("div_repartition").style.display="none";
  }  else
    document.getElementById("div_repartition").style.display="";
}
function GetMaxPax()
{
    var maxpax=0;
     var types = new Array("single","twin","double","triple","quadruple");
    for(var i=0;i<types.length;i++) {
    	var elt = document.getElementById("nb_" +types[i]); 
      switch (types[i]) {
    		case "single" :
    		if(Math.round(elt.value)>=1)
    		  maxpax =maxpax+ 1*Math.round(elt.value);
    		break;
    		case "double" :
    		if(Math.round(elt.value)>=1)
    		  maxpax =maxpax+ 2*Math.round(elt.value);
    		break;
    		case "twin" :
    		if(Math.round(elt.value)>=1)
    		  maxpax =maxpax+ 2*Math.round(elt.value);
    		break;
    		case "triple" :
    		if(Math.round(elt.value)>=1)
    		  maxpax =maxpax+ 3*Math.round(elt.value);
    		break;
    		case "quadruple" :
    		if(Math.round(elt.value)>=1)
    		maxpax =maxpax+ 4*Math.round(elt.value);
    		break;
      }
    }
    return maxpax;
}
function GetMaxPaxPerRoom(type)
{
    var maxpax;
    switch (type) {
  		case "single" :
  		maxpax = 1;
  		break;
  		case "double" :
  		maxpax = 2;
  		break;
  		case "twin" :
  		maxpax = 2;
  		break;
  		case "triple" :
  		maxpax = 3;
  		break;
  		case "quadruple" :
  		maxpax = 4;
  		break;
    }
    return maxpax;
}
function Nbchambres()
{
  var nb_chambre=0;
  var types = new Array("single","twin","double","triple","quadruple");
  for(var i=0;i<types.length;i++) {
 	  var elt = document.getElementById("nb_" +types[i]);
 	  if (elt) {
 	    nb_chambre+=elt.value;
 	  }
  }
  return nb_chambre;
}
function AgeEnfants(id)
{
  var elt=document.getElementById("enfant"+id);
  if(elt.value>18) 
  {
    elt.value=18;
    alert("erreur de saisie dans l'age de l'enfant n° "+id);
    elt.focus();
  }
  Repartition();  
}
function ShowRepartition() {
	var out = "";
	pax = GetPax();
	for(var i=0;i<tab_type_chambre.length;i++) {
		out +="\nChambre " + i ;
		for(var j=0;j<pax.length;j++) {
			if (tab_repartition[i][j]>=0)
			out +=" | X | " ;
			else
			out +=" |   | " ;
		}
	}
	alert(out)
}
function dump_form() {
		var elt = document.getElementById("form_rech");
		for(var i =0;i<elt.elements.length;i++) {
			alert(elt.elements[i].name);
		}
}
function check() {
	DoRepartition();
	//DrawRepartition(document.getElementById("div_repartition"));
}