function Devis_chambre(form)
{
	//alert("test")

	//Récupération des données du formulaire
	j1=parseInt(form.j1.value,10);
	m1=parseInt(form.m1.value,10);
	a1=parseInt(form.a1.value,10);
	j2=parseInt(form.j2.value,10);
	m2=parseInt(form.m2.value,10);
	a2=parseInt(form.a2.value,10);
	nbpers=parseInt(form.nbpers.value);
	if (!isdate(j1,m1,a1))
	{
		form.devis.value="la première date n'est pas valide";
		exit;
	}
	else 
	{
		if (!isdate(j2,m2,a2))
		{
			form.devis.value="la seconde date n'est pas valide";
			exit;
		}
	}
	sum=0;
	//Première période, du 1/6 au 30/9
	nb1=nbjoursinterperiode(j1,m1,a1,j2,m2,1,6,30,9);
	switch(nbpers)
	{
		case 1:
		 sum += nb1*42;
		 break
		case 2:
		 sum += nb1*47;
		 break
		case 3:
		 sum += nb1*64;
		 break
		default:
		 form.devis.value="nombre de personnes invalide";
		 break
	}

	//Deuxième période, du 30/9 au 1/6
	nb2=nbjoursinterperiode(j1,m1,a1,j2,m2,30,9,1,6);
	switch(nbpers)
	{
		case 1:
		 sum += nb2*39;
		 break
		case 2:
		 sum += nb2*44;
		 break
		case 3:
		 sum += nb2*61;
		 break
		default:
		 form.devis.value="nombre de personnes invalide";
		 break
	}

	//alert(nbpers);
	form.devis.value=sum;
	
}

function Devis_gite(form)
{
	//alert("test")

	//Récupération des données du formulaire
	j1=parseInt(form.j1.value,10);
	m1=parseInt(form.m1.value,10);
	a1=parseInt(form.a1.value,10);
	j2=parseInt(form.j2.value,10);
	m2=parseInt(form.m2.value,10);
	a2=parseInt(form.a2.value,10);
	lequel=form.lequel.value;
	if (!isdate(j1,m1,a1))
	{
		form.devis.value="la première date n'est pas valide";
		exit;
	}
	else 
	{
		if (!isdate(j2,m2,a2))
		{
			form.devis.value="la seconde date n'est pas valide";
			exit;
		}
	}
	sum=0;
	//Première période, du 1/7 au 31/8
	nb1=nbjoursinterperiode(j1,m1,a1,j2,m2,1,7,31,8);
	switch(lequel)
	{
		case "petit":
		 sum += nb1*310/7;
		 break
		case "grand":
		 sum += nb1*460/7;
		 break
		default:
		 form.devis.value="choisissez un gite";
		 break
	}

	//Deuxième période, du 1/5 au 30/6
	nb2=nbjoursinterperiode(j1,m1,a1,j2,m2,1,5,30,6);
	switch(lequel)
	{
		case "petit":
		 sum += nb2*260/7;
		 break
		case "grand":
		 sum += nb2*410/7;
		 break
		default:
		 form.devis.value="choisissez un gite";
		 break
	}

	//Troisième période, du 1/9 au 30/9
	nb3=nbjoursinterperiode(j1,m1,a1,j2,m2,1,9,30,9);
	switch(lequel)
	{
		case "petit":
		 sum += nb3*260/7;
		 break
		case "grand":
		 sum += nb3*410/7;
		 break
		default:
		 form.devis.value="choisissez un gite";
		 break
	}

	//Quatrième période, du 31/3 au 1/5
	nb4=nbjoursinterperiode(j1,m1,a1,j2,m2,1,4,30,4);
	switch(lequel)
	{
		case "petit":
		 sum += nb4*260/7;
		 break
		case "grand":
		 sum += nb4*360/7;
		 break
		default:
		 form.devis.value="choisissez un gite";
		 break
	}

	//Cinquième période, du 1/1 au 31/3
	nb5=nbjoursinterperiode(j1,m1,a1,j2,m2,1,1,31,3);
	switch(lequel)
	{
		case "petit":
		 sum += nb5*210/7;
		 break
		case "grand":
		 sum += nb5*310/7;
		 break
		default:
		 form.devis.value="choisissez un gite";
		 break
	}

	//Sixième période, du 1/10 au 31/12
	nb6=nbjoursinterperiode(j1,m1,a1,j2,m2,1,10,31,12);
	switch(lequel)
	{
		case "petit":
		 sum += nb6*210/7;
		 break
		case "grand":
		 sum += nb6*310/7;
		 break
		default:
		 form.devis.value="choisissez un gite";
		 break
	}

	//alert(nb1+nb2+nb3+nb4+nb5+nb6);
	form.devis.value=sum;
	if(!((nb1+nb2+nb3+nb4+nb5+nb6) % 7 == 0))
	{
		form.devis.value="dates invalides";
	}

	//if(lequel == "petit")
	//{
	//	form.devis.value="pas encore disponible";
	//}	
}

function nbjoursinterperiode(j1,m1,a1,j2,m2,jp1,mp1,jp2,mp2)
{
	if (m1<=m2)
	{
		a2=a1;
	}
	else
	{
		a2=a1+1;
	}

	nb=0;
	if(mp2>=mp1)
	{

		if ( ( (m1>mp1) || ((m1==mp1)&&(j1>=jp1)) ) && ( (m1<mp2) || ((m1==mp2)&&(j1<=jp2)) ) )
		{//début dans la periode
//alert(1);
			nb=Math.min(nbjoursdansperiode(j1,m1,a1,j2,m2),nbjoursdansperiode(j1,m1,a1,jp2,mp2));
		}
		else
		{
			if (((m2>mp1) || ((m2==mp1)&&(j2>=jp1))) && ((m2<mp2) || ((m2==mp2)&&(j2<=jp2))))
			{//fin dans la periode
				nb=nbjoursdansperiode(jp1,mp1,a2,j2,m2);
//alert(2);
			}
			if ((a2>a1)&&( (m1<mp1)||((m1==mp1)&&(j1<jp1)) ))
			{//sur deux ans et periode incluse dans la première année
				nb=nbjoursdansperiode(jp1,mp1,a1,jp2,mp2);
//alert(3);
			}
			if ((a2>a1)&&((m2>mp2)||((m2==mp2)&&(j2>jp2))))
			{//sur deux ans et periode incluse dans la deuxième année
				nb=nbjoursdansperiode(jp1,mp1,a2,jp2,mp2);
//alert(4);
			}
			if ((a2==a1)&&( (m1<mp1)||((m1==mp1)&&(j1<jp1)) )&&( (m2>mp2)||( (m2==mp2)&&(j2>jp2) ) ))
			{//sur un an et periode incluse
				nb=nbjoursdansperiode(jp1,mp1,a1,jp2,mp2);
//alert(5);
			}
		}
	}
	else
	{
		nb=nbjoursinterperiode(j1,m1,a1,j2,m2,jp1,mp1,31,12);
		nb+=nbjoursinterperiode(j1,m1,a1,j2,m2,1,1,jp2,mp2);
	}
	return nb;
}


function nbjoursdansperiode(jp1,mp1,a1,jp2,mp2)
{
	if (mp2>=mp1)
	{
		nbd=-jp1;
		for (i=mp1;i<mp2;i++)
		{
			nbd+=nbjoursdansmois(i,a1);
		}
		nbd+=jp2;
	}
	if (mp2<mp1)
	{
		nbd=nbjoursdansperiode(jp1,mp1,a1,31,12);
		nbd+=nbjoursdansperiode(1,1,a1+1,jp2,mp2);
	}
	return nbd;
}

function nbjoursdansmois(m,a)
{
	switch(m)
	{
		case 4:
		NbJourDansMois = 30;
		break

		case 6:
		NbJourDansMois = 30;
		break

		case 9:
		NbJourDansMois = 30;
		break

		case 11:
		NbJourDansMois = 30;
		break

		case 2:
		if (a%4 == 0 && a%100 !=0 || a%400 == 0)
		{
			NbJourDansMois = 29;
		}
		else
		{
			NbJourDansMois = 28;
		}
		break

		default:
		NbJourDansMois = 31;
		break
	}
	return parseInt(NbJourDansMois);
}

function isdate(j,m,a) 
{
	// Si l'année n'est composée que de 2 chiffres on complète automatiquement
	if (a < 1000) {
	if (a < 89) a+=2000; // Si a < 89 alors on ajoute 2000 sinon on ajoute 1900
	else a+=1900;
	}
	// Définition du dernier jour de février
	// Année bissextile si annnée divisible par 4 et que ce n'est pas un siècle, ou bien si divisible par 400
	if (a%4 == 0 && a%100 !=0 || a%400 == 0) fev = 29;
	else fev = 28;
	// Nombre de jours pour chaque mois
	nbJours = new Array(31,fev,31,30,31,30,31,31,30,31,30,31);
	// Enfin, retourne vrai si le jour est bien entre 1 et le bon nombre de jours, idem pour les mois, sinon retourn faux
	return ( m >= 1 && m <=12 && j >= 1 && j <= nbJours[m-1] );
} 
