var urlCourant = document.location.host;
var urlWebService = 'http://'+urlCourant+'/ajax/ajax_rac.asp';  // url du "webservice"
var geocoder = null;		 // objet Google Maps Geocoder
var ptTypedCity = null;  // coordonnées de la ville saisie (telle que trouvée par Google)
var sTypedCity = null;   // nom de la ville saisie (telle que trouvée par Google)
var tabHoraires = new Array();  // tableau des horaires
var userAgence = null;   // ID de l'agence sélectionnée
var photocategorie = ''; // image de la catégorie de véhicule sélectionnée

function JoursFeries (an,jour,isAeroport)
{
	var IsFerie
	if (isAeroport == '1')
	{
		IsFerie = false
	}
	else
	{
		var JourDemande = new Date(jour.substring(6,10), jour.substring(3,5) - 1, jour.substring(0,2))

		var JourAn = new Date(an, "00", "01")
		var FeteTravail = new Date(an, "04", "01")
		var Victoire1945 = new Date(an, "04", "08")
		var FeteNationale = new Date(an,"06", "14")
		var Assomption = new Date(an, "07", "15")
		var Toussaint = new Date(an, "10", "01")
		var Armistice = new Date(an, "10", "11")
		var Noel = new Date(an, "11", "25")

		var G = an%19
		var C = Math.floor(an/100)
		var H = (C - Math.floor(C/4) - Math.floor((8*C+13)/25) + 19*G + 15)%30
		var I = H - Math.floor(H/28)*(1 - Math.floor(H/28)*Math.floor(29/(H + 1))*Math.floor((21 - G)/11))
		var J = (an*1 + Math.floor(an/4) + I + 2 - C + Math.floor(C/4))%7
		var L = I - J
		var MoisPaques = 3 + Math.floor((L + 40)/44)
		var JourPaques = L + 28 - 31*Math.floor(MoisPaques/4)
		var Paques = new Date(an, MoisPaques-1, JourPaques)
		var LundiPaques = new Date(an, MoisPaques-1, JourPaques+1)
		var Ascension = new Date(an, MoisPaques-1, JourPaques+39)
		var LundiPentecote = new Date(an, MoisPaques-1, JourPaques+50)

		switch(JourDemande.getTime()) {
			case JourAn.getTime() :
				IsFerie = true
				break
			case FeteTravail.getTime() :
				IsFerie = true
				break
			case Victoire1945.getTime() :
				IsFerie = true
				break
			case FeteNationale.getTime() :
				IsFerie = true
				break
			case Assomption.getTime() :
				IsFerie = true
				break
			case Toussaint.getTime() :
				IsFerie = true
				break
			case Armistice.getTime() :
				IsFerie = true
				break
			case Noel.getTime() :
				IsFerie = true
				break
			case LundiPaques.getTime() :
				IsFerie = true
				break
			case Ascension.getTime() :
				IsFerie = true
				break
			case LundiPentecote.getTime() :
				IsFerie = true
				break
			default :
				IsFerie = false
				break
		}
	}
	return IsFerie
}

function getTypedCityCoordsFromGoogle()
{
	googleInitialize();
  if (geocoder) {
  	sTypedCity = document.getElementById('ville').value;
		sTypedCity = sTypedCity.toLowerCase();
  	if (sTypedCity.indexOf('france') < 0)
  	{
  		sTypedCity += ', france';
  	}
    // récupère les coordonnées de la ville trouvée par Google Maps, correspondant à la saisie
    geocoder.getLatLng(sTypedCity, decodeTypedCityCoords);
  }
}

function decodeTypedCityAddress(response)
{
	place = response.Placemark[0];
	sTypedCity = place.address;

	if (sTypedCity.toLowerCase().indexOf('france') > 0) {
		// si l'adresse retournée par Google Maps semble être en France, on va récupérer dans la BD
		// les coordonnées de toutes les agences pour les comparer à celles de cette adresse
		getCoordonnees();
	}
	else
	{
		// Google Maps a trouvé une ville correspondant à la saisie, mais elle ne semble pas être en France
		noCityFound();
	}
}

function decodeTypedCityCoords(point)
{
  if (point)
  {
  	// récupère l'adresse de la ville trouvée par Google Maps, correspondant à la saisie
		ptTypedCity = point;
    geocoder.getLocations(sTypedCity, decodeTypedCityAddress);
  }
  else
	{
		// Google Maps n'a pas trouvé de ville correspondant à la saisie
		noCityFound();
	}
}

function noCityFound()
{
  $('selville').innerHTML = '<ul class="colx2"><li id="notfound"><img src="ajax/attention.gif" />Aucune ville trouvée avec ce nom !&nbsp;</li></ul>';
  $('selville').style.display = 'inline';
	document.getElementById('notfound').style.display = 'block';
}

function googleInitialize() {
  if ((!geocoder) && GBrowserIsCompatible()) {
    geocoder = new GClientGeocoder();
  }
}

/***************************************************************************/

/* Appel AJAX de la requête cherchant des agences dans les villes correspondant à la saisie */
function getAgences(evt)
{
	// aucune action si on a appuyé sur les flèches, ou les touches Début ou Fin
	if ((evt.keyCode >= 35) && (evt.keyCode <= 40)) {
		if (evt.keyCode == 40) {
			objSelVille = document.getElementById('selville')
//			alert(objSelVille.childNodes[0].childNodes.length);
		}
		return false;
	}

	var nomVille = document.getElementById('ville').value;

	// si le champ est trop petit (moins de 1 caractère), on ne fait pas d'autocomplétion
	// et on cache éventuellement la liste de sélection des villes si elle était affichée
	if (nomVille.length < 1)
	{
		if ($('selville').style.display == 'block')
		{
	    $('selville').style.display = 'none';
			// bug IE6 : on réaffiche les SELECT qui étaient cachées sous la DIV de sélection des villes
			showSelects();
		}
	}
	else
	{
	  var oAjax = new Ajax.Request(urlWebService,
	          { postBody: 'action=getAgences&ville=' + escape(majuscule(nomVille)),
	            method: 'post',
	            onSuccess: getAgences_Success,
	            onFailure: ajax_Failure });
	}
}

/* Récupère la liste des agences au format JSON */
function getAgences_Success(val)
{
	if (val.responseText == '')
	{
		// aucune ville trouvée correspondant à la saisie :
    // on récupère les coordonnées de la ville saisie, pour les comparer ensuite à celles des agences dans la BD
    // (seulement si + de 2 caractères saisis)
    if (document.getElementById('ville').value.length > 2)
    {
			getTypedCityCoordsFromGoogle();
		}
	}
	else
	{
		// au moins une agence a été trouvée : on l'affiche dans la liste de choix
	  var agences = eval('(' + val.responseText + ')');
	  if (agences)
	  {
	    var str = '<ul class="colx2"><li id="notfound"></li>';
	    var sfullnameAgence = '';
	    for (var i = 0; i < agences.rows.length; i++)
	    {
	      var agence = agences.rows[i];

				if ((agence.nomagence.toLowerCase().indexOf(agence.ville.toLowerCase()) < 0) || (agence.nomagence.toLowerCase().indexOf(agence.ville.toLowerCase()) > 0)) {
					// on précise entre parenthèses le nom de la ville, si ce n'est pas le même que le nom qui définit l'agence
					sfullnameAgence = agence.nomagence + ' (' + agence.ville + ')';
				}
				else {
					sfullnameAgence = agence.nomagence;
				}

				if ((agence.isaeroport == 1) && (agence.urlaeroport != null)) {
					// agence "aéroport"
				//jpasquier 2008/09/03
					//str += '<li><a href="#" onClick="redirectAeroport(' + agence.n + ')">' + sfullnameAgence + ' </a></li>';
					str += '<li><a href="#" onClick="document.getElementById(\'urlAeroport\').value = \'' + agence.urlaeroport + '\';document.getElementById(\'isAeroport\').value = \'' + agence.isaeroport + '\';document.formRAC.agence.value = \'' + agence.n + '\'; document.getElementById(\'ville\').value = \'' + sfullnameAgence.replace(/\'/g, '\\\'') + '\'; afficheCategorieAeroport();getHoraires(' + agence.n + ');getKm(\'' + agence.n + '\');">' + sfullnameAgence + ' </a></li>';//jpasquier 2008/10/29 mettre le kilométrage illimité pour la réunion
				//end jpasquier
				}
				else {
					// agence "classique"
				//jpasquier 2008/09/03
					//str += '<li><a href="#" onClick="document.formRAC.agence.value = \'' + agence.n + '\'; document.getElementById(\'ville\').value = \'' + sfullnameAgence.replace(/\'/g, '\\\'') + '\'; getHoraires(' + agence.n + ');">' + sfullnameAgence + ' </a></li>';
					str += '<li><a href="#" onClick="document.getElementById(\'urlAeroport\').value = \'' + agence.urlaeroport + '\';document.getElementById(\'isAeroport\').value = \'' + agence.isaeroport + '\';document.formRAC.agence.value = \'' + agence.n + '\'; document.getElementById(\'ville\').value = \'' + sfullnameAgence.replace(/\'/g, '\\\'') + '\'; afficheCategorie();getHoraires(' + agence.n + ');getKm(\'' + agence.n + '\');">' + sfullnameAgence + ' </a></li>';//jpasquier 2008/10/29 mettre le kilométrage illimité pour la réunion
				//end jpasquier
				}
	    }
	    str += '</ul>';
	    $('selville').innerHTML = str;
	    $('selville').style.display = 'block';
//	    init_city_selection();
			// bug IE6 : on cache les SELECT sous la DIV de sélection des villes
			hideSelects();
	  }
	}
}

/***************************************************************************/

/* Appel AJAX de la requête récupérant les horaires d'ouverture d'une agence */
function getHoraires(idAgence)
{
  var oAjax = new Ajax.Request(urlWebService,
          { postBody: 'action=getHoraires&agence=' + idAgence,
            method: 'post',
            onSuccess: getHoraires_Success,
            onFailure: ajax_Failure });
}

function getHoraires_Success(val)
{
	if ((val.responseText != '') && (val.responseText != undefined))
	{
	  var horaires = eval('(' + val.responseText + ')');
	  if (horaires)
	  {
	    for (var i = 0; i < horaires.rows.length; i++)
	    {
	      var horaire = horaires.rows[i];

	      // on ajoute les horaires de l'horaire au tableau des horaires
	      var newHoraires = new Array();
			newHoraires['lorouvmat'] = formatHoraire(horaire.lorouvmat);
			newHoraires['lorfermmat'] = formatHoraire(horaire.lorfermmat);
			newHoraires['lorouvmid'] = formatHoraire(horaire.lorouvmid);
			newHoraires['lorfermmid'] = formatHoraire(horaire.lorfermmid);
			newHoraires['morouvmat'] = formatHoraire(horaire.morouvmat);
			newHoraires['morfermmat'] = formatHoraire(horaire.morfermmat);
			newHoraires['morouvmid'] = formatHoraire(horaire.morouvmid);
			newHoraires['morfermmid'] = formatHoraire(horaire.morfermmid);
			newHoraires['horouvmat'] = formatHoraire(horaire.horouvmat);
			newHoraires['horfermmat'] = formatHoraire(horaire.horfermmat);
			newHoraires['horouvmid'] = formatHoraire(horaire.horouvmid);
			newHoraires['horfermmid'] = formatHoraire(horaire.horfermmid);
			newHoraires['jorouvmat'] = formatHoraire(horaire.jorouvmat);
			newHoraires['jorfermmat'] = formatHoraire(horaire.jorfermmat);
			newHoraires['jorouvmid'] = formatHoraire(horaire.jorouvmid);
			newHoraires['jorfermmid'] = formatHoraire(horaire.jorfermmid);
			newHoraires['vorouvmat'] = formatHoraire(horaire.vorouvmat);
			newHoraires['vorfermmat'] = formatHoraire(horaire.vorfermmat);
			newHoraires['vorouvmid'] = formatHoraire(horaire.vorouvmid);
			newHoraires['vorfermmid'] = formatHoraire(horaire.vorfermmid);
			newHoraires['shorouvmat'] = formatHoraire(horaire.shorouvmat);
			newHoraires['shorfermmat'] = formatHoraire(horaire.shorfermmat);
			newHoraires['shorouvmid'] = formatHoraire(horaire.shorouvmid);
			newHoraires['shorfermmid'] = formatHoraire(horaire.shorfermmid);
			newHoraires['dhorouvmat'] = formatHoraire(horaire.dhorouvmat);
			newHoraires['dhorfermmat'] = formatHoraire(horaire.dhorfermmat);
			newHoraires['dhorouvmid'] = formatHoraire(horaire.dhorouvmid);
			newHoraires['dhorfermmid'] = formatHoraire(horaire.dhorfermmid);
	      tabHoraires[horaire.id_agence] = newHoraires;
			if (document.getElementById('isAeroport').value != '1') {
				getCategories(horaire.id_agence);
				document.getElementById('forfait').disabled=false;
			}
			else {
				getCategories(horaire.id_agence);
				$('selville').style.display = 'none';
				$('selvh').style.display = 'none';
				if (extractUrlParam("DateDepart")=="")
				{
					var dcour=new Date();
					var ddema=new Date();
					ddema.setDate(dcour.getDate()+1);
					var dj=parseInt(dcour.getDate()).toString();
					var djd=parseInt(ddema.getDate()).toString();
					if (dj<10) dj="0"+dj;
					if (djd<10) djd="0"+djd;
					var dm=parseInt(dcour.getMonth())+1;
	  				if (dm<10) dm="0"+dm;
	  				var dmd=parseInt(ddema.getMonth())+1;
	  				if (dmd<10) dmd="0"+dmd;
					document.getElementById('date1').value = dj+"/"+dm+"/"+dcour.getFullYear();
					document.getElementById('date2').value = djd+"/"+dmd+"/"+ddema.getFullYear();
					document.getElementById('heure1').selectedIndex = '39';
					document.getElementById('heure2').selectedIndex = '39';
				}
				document.getElementById('forfait').disabled=true;
			}
	    }
	  }
	}
}

function formatHoraire(sHoraire)
{
	if (sHoraire == null) return '';
	else return sHoraire.substr(0, 5);
}


/****************************************************************************/

/* Construit la liste d'horaires possibles pour l'agence sélectionnée actuellement */
function setHoraires(idAgence)
{
	if (idAgence == undefined) { return false; }

	var nRetries = 0; // nombre de fois où on a décalé la date pour tomber sur un jour où l'agence n'est pas fermée
	var dDateDepartChoisie = ''; // dates choisies à l'origine par l'utilisateur (parce qu'on pourra les décaler ensuite,
	var dDateRetourChoisie = ''; // si l'agence choisie est fermée à une de ces 2 dates)

	document.getElementById('divDateChanged').style.display = 'none';

	if (idAgence > 0) {
		this.agence = idAgence;  // variable "statique"
	}

	var reg = new RegExp("/", "g");

	/**********************/
	/*** HORAIRES ALLER ***/
	/**********************/

	objHeure1 = document.getElementById('heure1');
	objHeure1.options.length = 0;  // on vide la liste de sélection des horaires de départ

	while ((objHeure1.options.length == 0) && (nRetries < 5))
	{
	  sDateDepart = document.formRAC.date1.value;
		tabDateDepart = sDateDepart.split(reg);
		dDateDepartUS = new Date(eval('"' + tabDateDepart[1] + '/' + tabDateDepart[0] + '/' + tabDateDepart[2] + '"'));
		if (dDateDepartChoisie == '')
		{
			dDateDepartChoisie = dDateDepartUS;
		}

		switch (dDateDepartUS.getDay())
		{
			case 1:  // noms des champs pour le lundi
				sHorOuvMat1 = 'lorouvmat';
				sHorFerMat1 = 'lorfermmat';
				sHorOuvMid1 = 'lorouvmid';
				sHorFerMid1 = 'lorfermmid';
				break;
			case 2:  // noms des champs pour le mardi
				sHorOuvMat1 = 'morouvmat';
				sHorFerMat1 = 'morfermmat';
				sHorOuvMid1 = 'morouvmid';
				sHorFerMid1 = 'morfermmid';
				break;
			case 3:  // noms des champs pour le mercredi
				sHorOuvMat1 = 'horouvmat';
				sHorFerMat1 = 'horfermmat';
				sHorOuvMid1 = 'horouvmid';
				sHorFerMid1 = 'horfermmid';
				break;
			case 4:  // noms des champs pour le jeudi
				sHorOuvMat1 = 'jorouvmat';
				sHorFerMat1 = 'jorfermmat';
				sHorOuvMid1 = 'jorouvmid';
				sHorFerMid1 = 'jorfermmid';
				break;
			case 5:  // noms des champs pour le vendredi
				sHorOuvMat1 = 'vorouvmat';
				sHorFerMat1 = 'vorfermmat';
				sHorOuvMid1 = 'vorouvmid';
				sHorFerMid1 = 'vorfermmid';
				break;
			case 6:  // noms des champs pour le samedi
				sHorOuvMat1 = 'shorouvmat';
				sHorFerMat1 = 'shorfermmat';
				sHorOuvMid1 = 'shorouvmid';
				sHorFerMid1 = 'shorfermmid';
				break;
			case 0:  // noms des champs pour le dimanche
				sHorOuvMat1 = 'dhorouvmat';
				sHorFerMat1 = 'dhorfermmat';
				sHorOuvMid1 = 'dhorouvmid';
				sHorFerMid1 = 'dhorfermmid';
		}

		var dHeureMini = new Date();
		var dHeureMaxi = new Date();

		i = 0;

		bAjoutApresMidi = false;
		sHeureMini = '';
		sHeureMaxi = '';

	  if ((((tabHoraires[this.agence][sHorFerMat1] == '') || (tabHoraires[this.agence][sHorFerMat1] == undefined)) &&
	  		((tabHoraires[this.agence][sHorOuvMid1] == '') || (tabHoraires[this.agence][sHorOuvMid1] == undefined)))
	   && ((tabHoraires[this.agence][sHorOuvMat1] != '') && (tabHoraires[this.agence][sHorOuvMat1] != undefined) &&
	  		 (tabHoraires[this.agence][sHorFerMid1] != '') && (tabHoraires[this.agence][sHorFerMid1] != undefined)))
	  {
	  	// l'agence est ouverte toute la journée, sans coupure le midi
	  	sHeureMini = tabHoraires[this.agence][sHorOuvMat1]; // horaire d'ouverture le matin
	  	sHeureMaxi = tabHoraires[this.agence][sHorFerMid1]; // horaire de fermeture l'a-m
		}
		else if ((tabHoraires[this.agence][sHorOuvMat1] != '') && (tabHoraires[this.agence][sHorOuvMat1] != undefined) &&
			  		(tabHoraires[this.agence][sHorFerMat1] != '') && (tabHoraires[this.agence][sHorFerMat1] != undefined) &&
			   		(tabHoraires[this.agence][sHorOuvMid1] != '') && (tabHoraires[this.agence][sHorOuvMid1] != undefined) &&
			  		(tabHoraires[this.agence][sHorFerMid1] != '') && (tabHoraires[this.agence][sHorFerMid1] != undefined))
	  {
	  	// l'agence est ouverte toute la journée, avec une coupure le midi
	  	sHeureMini = tabHoraires[this.agence][sHorOuvMat1]; // horaire d'ouverture le matin
	  	sHeureMaxi = tabHoraires[this.agence][sHorFerMat1]; // horaire de fermeture le matin
			bAjoutApresMidi = true;
		}
		else if ((((tabHoraires[this.agence][sHorOuvMid1] == '') || (tabHoraires[this.agence][sHorOuvMid1] == undefined)) &&
			  		((tabHoraires[this.agence][sHorFerMid1] == '') || (tabHoraires[this.agence][sHorFerMid1] == undefined)))
			   && ((tabHoraires[this.agence][sHorOuvMat1] != '') && (tabHoraires[this.agence][sHorOuvMat1] != undefined) &&
			  		 (tabHoraires[this.agence][sHorFerMat1] != '') && (tabHoraires[this.agence][sHorFerMat1] != undefined)))
	  {
	  	// l'agence est ouverte seulement le matin
	  	sHeureMini = tabHoraires[this.agence][sHorOuvMat1]; // horaire d'ouverture le matin
	  	sHeureMaxi = tabHoraires[this.agence][sHorFerMat1]; // horaire de fermeture le matin
		}
		else if ((((tabHoraires[this.agence][sHorOuvMat1] == '') || (tabHoraires[this.agence][sHorOuvMat1] == undefined)) &&
			  		((tabHoraires[this.agence][sHorFerMat1] == '') || (tabHoraires[this.agence][sHorFerMat1] == undefined)))
			   && ((tabHoraires[this.agence][sHorOuvMid1] != '') && (tabHoraires[this.agence][sHorOuvMid1] != undefined) &&
			  		 (tabHoraires[this.agence][sHorFerMid1] != '') && (tabHoraires[this.agence][sHorFerMid1] != undefined)))
	  {
	  	// l'agence est ouverte seulement l'après-midi
	  	sHeureMini = tabHoraires[this.agence][sHorOuvMid1]; // horaire d'ouverture l'a-m
	  	sHeureMaxi = tabHoraires[this.agence][sHorFerMid1]; // horaire de fermeture l'a-m
		}

		/* Heures de la matinée du jour de départ */

		if ((sHeureMini != '') && (sHeureMaxi != '') && (sHeureMini != undefined) && (sHeureMaxi != undefined))  // on teste s'il y a des horaires pour le matin
		{
			iHeureMini = sHeureMini.substr(0, 2);
			iMinutesMini = sHeureMini.substr(3, 2);
			iHeureMaxi = sHeureMaxi.substr(0, 2);
			iMinutesMaxi = sHeureMaxi.substr(3, 2);

			var iHeure = iHeureMini;
			var iMinutes = parseInt(iMinutesMini);

			while ((iHeure < iHeureMaxi) || ((iHeure == iHeureMaxi) && (iMinutes < iMinutesMaxi)))
			{
				sHeure = (String(iHeure).length < 2) ? '0' + iHeure : iHeure;
				sMinutes = (String(iMinutes).length < 2) ? '0' + iMinutes : iMinutes;
				sTime = sHeure + ':' + sMinutes;

				objHeure1.options[i++] = new Option(sTime, sTime);

				iMinutes += 15;
				if (iMinutes == 60) {
					iMinutes = 0;
					iHeure++;
				}
			}
		}

		/* Heures de l'après-midi du jour de départ */

		if (bAjoutApresMidi)
		{
		  sHeureMini = tabHoraires[this.agence][sHorOuvMid1];  // horaire d'ouverture l'a-m
		  sHeureMaxi = tabHoraires[this.agence][sHorFerMid1];  // horaire de fermeture l'a-m

			if ((sHeureMini != '') && (sHeureMaxi != '') && (sHeureMini != undefined) && (sHeureMaxi != undefined))  // on teste s'il y a des horaires pour l'a-m
			{
				iHeureMini = sHeureMini.substr(0, 2);
				iMinutesMini = sHeureMini.substr(3, 2);
				iHeureMaxi = sHeureMaxi.substr(0, 2);
				iMinutesMaxi = sHeureMaxi.substr(3, 2);

				iHeure = iHeureMini;
				iMinutes = parseInt(iMinutesMini);

				while ((iHeure < iHeureMaxi) || ((iHeure == iHeureMaxi) && (iMinutes < iMinutesMaxi)))
				{
					sHeure = (String(iHeure).length < 2) ? '0' + iHeure : iHeure;
					sMinutes = (String(iMinutes).length < 2) ? '0' + iMinutes : iMinutes;
					sTime = sHeure + ':' + sMinutes;

					objHeure1.options[i++] = new Option(sTime, sTime);

					iMinutes += 15;
					if (iMinutes == 60) {
						iMinutes = 0;
						iHeure++;
					}
				}
			}
		}

		if (objHeure1.options.length == 0 || JoursFeries(dDateDepartUS.getFullYear(),sDateDepart,document.getElementById('isAeroport').value) == true)
		{
			// on décale la date de départ car l'agence est fermée à la date actuellement sélectionnée
		  sDateDepart = document.formRAC.date1.value;
			tabDateDepart = sDateDepart.split(reg);
			dDateDepartUS = new Date(eval('"' + tabDateDepart[1] + '/' + tabDateDepart[0] + '/' + tabDateDepart[2] + '"'));
			dDateDepartUS = addDays(dDateDepartUS, 1);
			document.formRAC.date1.value = dDateDepartUS.dateFormat('d/m/Y');
			objHeure1.options.length = 0;
			nRetries++;
			document.getElementById('divDateChanged').innerHTML = '<table><tr><td rowspan="2" width="26"><img src="ajax/attention.gif" /></td></tr><tr><td>Votre agence est fermée le ' + dDateDepartChoisie.dateFormat('d/m') + ' : nous vous proposons de décaler votre départ au ' + dDateDepartUS.dateFormat('d/m') + '</td></tr></table>';
			document.getElementById('divDateChanged').style.display = 'block';

			// on définit la date de retour à 1 jour après la date de départ
			document.formRAC.date2.value = avanceDate(document.getElementById('date1').value, 1);
		}
	}

	/***********************/
	/*** HORAIRES RETOUR ***/
	/***********************/

	objHeure2 = document.getElementById('heure2');
	objHeure2.options.length = 0;  // on vide la liste de sélection des horaires de retour

	nRetries = 0;
	while ((objHeure2.options.length == 0) && (nRetries < 5))
	{
	  sDateRetour = document.formRAC.date2.value;
		var tabDateRetour = sDateRetour.split(reg);
		dDateRetourUS = new Date(eval('"' + tabDateRetour[1] + '/' + tabDateRetour[0] + '/' + tabDateRetour[2] + '"'));

		if (dDateRetourChoisie == '')
		{
			dDateRetourChoisie = dDateRetourUS;
		}

		switch (dDateRetourUS.getDay())
		{
			case 1:  // noms des champs pour le lundi
				sHorOuvMat2 = 'lorouvmat';
				sHorFerMat2 = 'lorfermmat';
				sHorOuvMid2 = 'lorouvmid';
				sHorFerMid2 = 'lorfermmid';
				break;
			case 2:  // noms des champs pour le mardi
				sHorOuvMat2 = 'morouvmat';
				sHorFerMat2 = 'morfermmat';
				sHorOuvMid2 = 'morouvmid';
				sHorFerMid2 = 'morfermmid';
				break;
			case 3:  // noms des champs pour le mercredi
				sHorOuvMat2 = 'horouvmat';
				sHorFerMat2 = 'horfermmat';
				sHorOuvMid2 = 'horouvmid';
				sHorFerMid2 = 'horfermmid';
				break;
			case 4:  // noms des champs pour le jeudi
				sHorOuvMat2 = 'jorouvmat';
				sHorFerMat2 = 'jorfermmat';
				sHorOuvMid2 = 'jorouvmid';
				sHorFerMid2 = 'jorfermmid';
				break;
			case 5:  // noms des champs pour le vendredi
				sHorOuvMat2 = 'vorouvmat';
				sHorFerMat2 = 'vorfermmat';
				sHorOuvMid2 = 'vorouvmid';
				sHorFerMid2 = 'vorfermmid';
				break;
			case 6:  // noms des champs pour le samedi
				sHorOuvMat2 = 'shorouvmat';
				sHorFerMat2 = 'shorfermmat';
				sHorOuvMid2 = 'shorouvmid';
				sHorFerMid2 = 'shorfermmid';
				break;
			case 0:  // noms des champs pour le dimanche
				sHorOuvMat2 = 'dhorouvmat';
				sHorFerMat2 = 'dhorfermmat';
				sHorOuvMid2 = 'dhorouvmid';
				sHorFerMid2 = 'dhorfermmid';
		}

		var dHeureMini = new Date();
		var dHeureMaxi = new Date();

		i = 0;

		bAjoutApresMidi = false;
		sHeureMini = '';
		sHeureMaxi = '';

	  if ((((tabHoraires[this.agence][sHorFerMat2] == '') || (tabHoraires[this.agence][sHorFerMat2] == undefined)) &&
	  		((tabHoraires[this.agence][sHorOuvMid2] == '') || (tabHoraires[this.agence][sHorOuvMid2] == undefined)))
	   && ((tabHoraires[this.agence][sHorOuvMat2] != '') && (tabHoraires[this.agence][sHorOuvMat2] != undefined) &&
	  		 (tabHoraires[this.agence][sHorFerMid2] != '') && (tabHoraires[this.agence][sHorFerMid2] != undefined)))
	  {
	  	// l'agence est ouverte toute la journée, sans coupure le midi
	  	sHeureMini = tabHoraires[this.agence][sHorOuvMat2]; // horaire d'ouverture le matin
	  	sHeureMaxi = tabHoraires[this.agence][sHorFerMid2]; // horaire de fermeture l'a-m
		}
		else if ((tabHoraires[this.agence][sHorOuvMat2] != '') && (tabHoraires[this.agence][sHorOuvMat2] != undefined) &&
			  		(tabHoraires[this.agence][sHorFerMat2] != '') && (tabHoraires[this.agence][sHorFerMat2] != undefined) &&
			   		(tabHoraires[this.agence][sHorOuvMid2] != '') && (tabHoraires[this.agence][sHorOuvMid2] != undefined) &&
			  		(tabHoraires[this.agence][sHorFerMid2] != '') && (tabHoraires[this.agence][sHorFerMid2] != undefined))
	  {
	  	// l'agence est ouverte toute la journée, avec une coupure le midi
	  	sHeureMini = tabHoraires[this.agence][sHorOuvMat2]; // horaire d'ouverture le matin
	  	sHeureMaxi = tabHoraires[this.agence][sHorFerMat2]; // horaire de fermeture le matin
			bAjoutApresMidi = true;
		}
		else if ((((tabHoraires[this.agence][sHorOuvMid2] == '') || (tabHoraires[this.agence][sHorOuvMid2] == undefined)) &&
			  		((tabHoraires[this.agence][sHorFerMid2] == '') || (tabHoraires[this.agence][sHorFerMid2] == undefined)))
			   && ((tabHoraires[this.agence][sHorOuvMat2] != '') && (tabHoraires[this.agence][sHorOuvMat2] != undefined) &&
			  		 (tabHoraires[this.agence][sHorFerMat2] != '') && (tabHoraires[this.agence][sHorFerMat2] != undefined)))
	  {
	  	// l'agence est ouverte seulement le matin
	  	sHeureMini = tabHoraires[this.agence][sHorOuvMat2]; // horaire d'ouverture le matin
	  	sHeureMaxi = tabHoraires[this.agence][sHorFerMat2]; // horaire de fermeture le matin
		}
		else if ((((tabHoraires[this.agence][sHorOuvMat2] == '') || (tabHoraires[this.agence][sHorOuvMat2] == undefined)) &&
			  		((tabHoraires[this.agence][sHorFerMat2] == '') || (tabHoraires[this.agence][sHorFerMat2] == undefined)))
			   && ((tabHoraires[this.agence][sHorOuvMid2] != '') && (tabHoraires[this.agence][sHorOuvMid2] != undefined) &&
			  		 (tabHoraires[this.agence][sHorFerMid2] != '') && (tabHoraires[this.agence][sHorFerMid2] != undefined)))
	  {
	  	// l'agence est ouverte seulement l'après-midi
	  	sHeureMini = tabHoraires[this.agence][sHorOuvMid2]; // horaire d'ouverture l'a-m
	  	sHeureMaxi = tabHoraires[this.agence][sHorFerMid2]; // horaire de fermeture l'a-m
		}

		/* Heures de la matinée du jour de retour */

		if ((sHeureMini != '') && (sHeureMaxi != '') && (sHeureMini != undefined) && (sHeureMaxi != undefined))  // on teste s'il y a des horaires pour le matin
		{
			iHeureMini = sHeureMini.substr(0, 2);
			iMinutesMini = sHeureMini.substr(3, 2);
			iHeureMaxi = sHeureMaxi.substr(0, 2);
			iMinutesMaxi = sHeureMaxi.substr(3, 2);

			iHeure = iHeureMini;
			iMinutes = parseInt(iMinutesMini);

			while ((iHeure < iHeureMaxi) || ((iHeure == iHeureMaxi) && (iMinutes < iMinutesMaxi)))
			{
				sHeure = (String(iHeure).length < 2) ? '0' + iHeure : iHeure;
				sMinutes = (String(iMinutes).length < 2) ? '0' + iMinutes : iMinutes;
				sTime = sHeure + ':' + sMinutes;

				objHeure2.options[i++] = new Option(sTime, sTime);

				iMinutes += 15;
				if (iMinutes == 60) {
					iMinutes = 0;
					iHeure++;
				}
			}

			var ParamHeureDepart = extractUrlParam('HeureDepart');
			var optNodes = document.getElementById('heure1').getElementsByTagName('option');
			for(var j=0; j<optNodes.length; j++){
	     		if (optNodes[j].value == ParamHeureDepart) {
    	 			optNodes[j].selected = true;
     			}
   			}
		}

		/* Heures de l'après-midi du jour de retour */

		if (bAjoutApresMidi)
		{
		  sHeureMini = tabHoraires[this.agence][sHorOuvMid2];  // horaire d'ouverture l'a-m
		  sHeureMaxi = tabHoraires[this.agence][sHorFerMid2];  // horaire de fermeture l'a-m

			if ((sHeureMini != '') && (sHeureMaxi != '') && (sHeureMini != undefined) && (sHeureMaxi != undefined))  // on teste s'il y a des horaires pour l'a-m
			{
				iHeureMini = sHeureMini.substr(0, 2);
				iMinutesMini = sHeureMini.substr(3, 2);
				iHeureMaxi = sHeureMaxi.substr(0, 2);
				iMinutesMaxi = sHeureMaxi.substr(3, 2);

				iHeure = iHeureMini;
				iMinutes = parseInt(iMinutesMini);

				while ((iHeure < iHeureMaxi) || ((iHeure == iHeureMaxi) && (iMinutes < iMinutesMaxi)))
				{
					sHeure = (String(iHeure).length < 2) ? '0' + iHeure : iHeure;
					sMinutes = (String(iMinutes).length < 2) ? '0' + iMinutes : iMinutes;
					sTime = sHeure + ':' + sMinutes;

					objHeure2.options[i++] = new Option(sTime, sTime);

					iMinutes += 15;
					if (iMinutes == 60) {
						iMinutes = 0;
						iHeure++;
					}
				}
			}
			var ParamHeureRetour = extractUrlParam('HeureRetour');
			var optNodes2 = document.getElementById('heure2').getElementsByTagName('option');
			for(var j=0; j<optNodes2.length; j++){
	     		if (optNodes2[j].value == ParamHeureRetour) {
    	 			optNodes2[j].selected = true;
     			}
   			}
		}

		if (objHeure2.options.length == 0 || JoursFeries(dDateRetourUS.getFullYear(),sDateRetour,document.getElementById('isAeroport').value) == true)
		{
			// on décale la date de retour car l'agence est fermée à la date actuellement sélectionnée
		  sDateRetour = document.formRAC.date2.value;
			tabDateRetour = sDateRetour.split(reg);
			dDateRetourUS = new Date(eval('"' + tabDateRetour[1] + '/' + tabDateRetour[0] + '/' + tabDateRetour[2] + '"'));
			dDateRetourUS = addDays(dDateRetourUS, 1);

			document.formRAC.date2.value = dDateRetourUS.dateFormat('d/m/Y');
			objHeure2.options.length = 0;
			nRetries++;
			document.getElementById('divDateChanged').innerHTML = '<table><tr><td rowspan="2" width="26"><img src="ajax/attention.gif" /></td></tr><tr><td>Votre agence est fermée le ' + dDateRetourChoisie.dateFormat('d/m') + ' : nous vous proposons de décaler votre retour au ' + dDateRetourUS.dateFormat('d/m') + '</td></tr></table>';
			document.getElementById('divDateChanged').style.display = 'block';
		}

		// on sélectionne par défaut la dernière heure du jour de retour
		if (ParamHeureRetour == '') {
			objHeure2.options.selectedIndex = objHeure2.options.length - 1;
		}
	}

	return true;
}

/****************************************************************************/

/* Appel AJAX de la requête récupérant les tarifs proposés */
/* selon les paramètres choisis par l'utilisateur          */
function getTarifs(idAgence, category, vignette)
{
	// bug IE6 : on réaffiche les SELECT qui étaient cachées sous la DIV de sélection des villes
	showSelects();

	// affiche l'image correspondant à la catégorie sélectionnée
	$('typevehicule').style.background = 'transparent url(./ajax/style/images/categories/' + vignette + '.jpg) no-repeat scroll 226px 25px';

	// cache la DIV de sélection des catégories
  $('selvh').style.display = 'none';

	// récupération du type de véhicule
	if (document.formRAC.typeveh[0].checked) { typeveh = document.formRAC.typeveh[0].value; }
	else { typeveh = document.formRAC.typeveh[1].value; }

	// calcul du nombre de jours sélectionnés
  sDateDepart = document.formRAC.date1.value;
  sDateRetour = document.formRAC.date2.value;
	sHeureDepart = document.formRAC.heure1.value;
  sHeureRetour = document.formRAC.heure2.value;

/* JPA 2008/08/12
	var reg = new RegExp("/", "g");
	var tabDateDepart = sDateDepart.split(reg);
	var tabDateRetour = sDateRetour.split(reg);

	dDateDepartUS = new Date(eval('"' + tabDateDepart[1] + '/' + tabDateDepart[0] + '/' + tabDateDepart[2] + '"'));
	dDateRetourUS = new Date(eval('"' + tabDateRetour[1] + '/' + tabDateRetour[0] + '/' + tabDateRetour[2] + '"'));

	var nbjours = daysElapsed(dDateDepartUS, dDateRetourUS);
	if (nbjours == 0) { nbjours = 1; }
*/

	nbjours = calcNbJourForfait(typeveh, sDateDepart, sDateRetour, sHeureDepart, sHeureRetour);

  var oAjax = new Ajax.Request(urlWebService,
          { postBody: 'action=getTarifs&agence=' + idAgence + '&typeveh=' + typeveh + '&categorie=' + category + '&nbjours=' + nbjours,
            method: 'post',
            onSuccess: getTarifs_Success,
            onFailure: ajax_Failure });
}

/* Récupère la liste des tarifs proposés, au format JSON */
function getTarifs_Success(val)
{
	if (val.responseText == '')
	{
		str = 'aucun tarif trouvé !';
	}
	else
	{
	  var tarifs = eval('(' + val.responseText + ')');
	//  alert('tarifs : ' + tarifs);
	  if (tarifs)
	  {
			objForfait = document.getElementById('forfait');
	    objForfait.options.length = 0;
	    j = 0;
	    for (var i = 0; i < tarifs.rows.length; i++)
	    {
	      var tarif = tarifs.rows[i];
	      if (tarif.nbkm2 == '9999')
	      {
	      	// forfait illimité
					objForfait.options[j++] = new Option('Kilométrage illimité', tarif.nbkm2);
	      }
	      else
	      {
					objForfait.options[j++] = new Option(tarif.nbkm2 + ' km', tarif.nbkm2);
				}
	    }
	  }
	}
//  $('forfait').innerHTML = str;
}

function ajax_Failure(error)
{
  var val = error.responseText;
  alert('ERROR : ' + val);
}

/****************************************************************************/

/* Appel AJAX de la requête récupérant les catégories de véhicules */
/* proposées dans l'agence sélectionnée                             */
function getCategories(idAgence)
{
	// bug IE6 : on réaffiche les SELECT qui étaient cachées sous la DIV de sélection des villes
	showSelects();

	// réinitialise la sélection de catégorie
	document.getElementById('modelevh').options.length = 0;
	document.getElementById('modelevh').options[0] = new Option('Sélectionnez une catégorie ...', '');
	document.formRAC.categorie.value = '';

	// on cache la DIV de sélection des villes, et celle de sélection des catégories de véhicules
  $('selville').style.display = 'none';
  $('selvh').style.display = 'none';

	if (idAgence > 0) {
		this.agence = idAgence;  // variable "statique"
	}

  // chargement des horaires de l'agence sélectionnée
	if (setHoraires(this.agence))
	{
		if (document.formRAC.typeveh[0].checked) { typeveh = document.formRAC.typeveh[0].value; }
		else { typeveh = document.formRAC.typeveh[1].value; }

	  var oAjax = new Ajax.Request(urlWebService,
	          { postBody: 'action=getCategories&agence=' + this.agence + '&typeveh=' + typeveh,
	            method: 'post',
	            onSuccess: getCategories_Success,
	            onFailure: ajax_Failure });
	}
}

/* Récupère la liste des catégories de véhicules proposées */
/* dans l'agence sélectionnée, au format JSON             */
function getCategories_Success(val)
{
	if (val.responseText == '')
	{
		str = '<li>Pas de véhicule disponible dans cette agence&nbsp;<br/>&nbsp;</li>';
	}
	else
	{
	  var categories = eval('(' + val.responseText + ')');
	//  alert('categories : ' + categories);
	  if (categories)
	  {
	    var str = '<ul class="colx2">';
	    for (var i = 0; i < categories.rows.length; i++)
	    {
	      var categorie = categories.rows[i];

	    	if (i == 0) {
	    		// sélectionne la 1ère catégorie par défaut
					document.formRAC.categorie.value = categorie.labelcategorie;
	    		document.getElementById('modelevh').options[0] = new Option('Catégorie ' + categorie.labelcategorie + ' : ' + categorie.nomcategorie, '');
					$('typevehicule').style.background = 'transparent url(./ajax/style/images/categories/' + categorie.photocategorie + '.jpg) no-repeat scroll 226px 25px';
					photocategorie = categorie.photocategorie;
					getTarifs(document.formRAC.agence.value, categorie.labelcategorie, categorie.photocategorie);
		    }

				str += '<li><a href="#" onClick="photocategorie = \'' + categorie.photocategorie + '\'; clickCategory(this); document.formRAC.categorie.value = \'' + categorie.labelcategorie + '\';  getTarifs(' + categorie.idagence + ', \'' + categorie.labelcategorie + '\', \'' + categorie.photocategorie + '\')" ><span id="vignette"><img src="../new2006_02112006/image/' + categorie.photocategorie + '" /></span><strong>Catégorie ' + categorie.labelcategorie + ' : ' + categorie.nomcategorie + '</strong><br/>';
				//if (categorie.listevp) { str += categorie.listevp; }
				if (categorie.labelcategorie == 'A') { str += 'Type Aygo'; }
				if (categorie.labelcategorie == 'B') { str += 'Type Yaris'; }
				if (categorie.labelcategorie == 'C') { str += 'Type 308'; }
				if (categorie.labelcategorie == 'D') { str += 'Type 407'; }
				if (categorie.labelcategorie == 'E') { str += 'Type 607'; }
				if (categorie.labelcategorie == 'F') { str += 'Type Transit, Movano'; }
				if (categorie.labelcategorie == 'FP') { str += 'Type Espace'; }
				str += '</a></li>';
	    }
	    str += '</ul>';
	  }
	}
  $('selvh').innerHTML = str;
  init_veh_selection();
}


/*******************************************************************/

/* Appel AJAX de la requête récupérant les coordonnées de toutes les agences */
function getCoordonnees()
{
//	alert('begin getCoordonnees()');
//	var nomVille = document.getElementById('ville').value;
  var oAjax = new Ajax.Request(urlWebService,
          { postBody: 'action=getCoordonnees',
            method: 'post',
            onSuccess: getCoordonnees_Success,
            onFailure: ajax_Failure });
}

/* Récupère la liste des coordonnées des agences au format JSON */
function getCoordonnees_Success(val)
{
	function sortDistance(a, b)
	{
	  if (a[0] == b[0]) return 0;
	  if (a[0] < b[0]) return -1;
	  return 1;
	}

  var coords = eval('(' + val.responseText + ')');
  if (coords)
  {
  	var tabDistances = new Array;  // distances de toutes les agences par rapport à la ville saisie
  	var nearestAgency = null;
  	var nbNearestAgencies = 5; // nombre d'agences les + proches à retourner
    var str = '<ul class="colx2"><li id="notfound"><img src="ajax/attention.gif" />Il n\'y a pas d\'agence dans cette ville.<br />Agences les plus proches de ' + sTypedCity + ' :</li>';

		// on parcourt les coordonnées de chaque agence et on en calcule sa distance par rapport à la ville saisie
    for (var i = 0; i < coords.rows.length; i++)
    {
      var coord = coords.rows[i];
      // création d'un objet point avec les coordonnées de l'agence
      var ptAgence = new GLatLng(coord.latitude, coord.longitude);
			tabDistances.push(new Array(ptTypedCity.distanceFrom(ptAgence), coord));
    }

		tabDistances.sort(sortDistance);

    for (j = 0; j < tabDistances.length && j < nbNearestAgencies; j++)
    {
			nomagence = tabDistances[j][1]['nomagence'];
			nomville = tabDistances[j][1]['ville'];

			if ((nomagence.toLowerCase().indexOf(nomville.toLowerCase()) < 0) || (nomagence.toLowerCase().indexOf(nomville.toLowerCase()) > 0)) {
				// on précise entre parenthèses le nom de la ville, si ce n'est pas le même que le nom qui définit l'agence
				sfullnameAgence = nomagence + ' (' + nomville + ')';
			}
			else {
				sfullnameAgence = nomagence;
			}

			str += '<li><a href="#" onClick="document.formRAC.agence.value = \'' + tabDistances[j][1]['n'] + '\'; document.getElementById(\'ville\').value = \'' + sfullnameAgence + '\'; afficheCategorie();getHoraires(' + tabDistances[j][1]['n'] + ')">' + sfullnameAgence  + ' à ' + Math.round(tabDistances[j][0] / 1000) + ' km' + ' </a></li>';
    }
    str += '</ul>';

    $('selville').innerHTML = str;
    $('selville').style.display = 'block';
		document.getElementById('notfound').style.display = 'block';
  }
}


/***************************************************************************/

function handleCityKeys(evt) {
  evt = (evt) ? evt : ((window.event) ? event : null);
//  alert('evt = ' + evt);
  if (evt) {
//  	alert(evt.keyCode);
/*    if ((evt.keyCode < 37) && (evt.keyCode > 40)) {
      getAgences();
    } */
  }
}

function daysElapsed(date2, date1) {
  var difference =
      Date.UTC(date1.getYear(),date1.getMonth(),date1.getDate(),0,0,0)
    - Date.UTC(date2.getYear(),date2.getMonth(),date2.getDate(),0,0,0);
  return Math.abs(difference/1000/60/60/24);
}

function dump(arr,level) {
var dumped_text = "";
if(!level) level = 0;

//The padding given at the beginning of the line.
var level_padding = "";
for(var j=0;j<level+1;j++) level_padding += "    ";

if(typeof(arr) == 'object') { //Array/Hashes/Objects
 for(var item in arr) {
  var value = arr[item];

  if(typeof(value) == 'object') { //If it is an array,
   dumped_text += level_padding + "'" + item + "' ...<br/>";
   dumped_text += dump(value,level+1);
  } else {
   dumped_text += level_padding + "'" + item + "' => \"" + value + "\"<br/>";
  }
 }
} else { //Stings/Chars/Numbers etc.
 dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
}
return dumped_text;
}

/*** Fonctions TRIM ***/

function trim(str, chars) {
    return ltrim(rtrim(str, chars), chars);
}

function ltrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

function addDays(myDate, days) {
    return new Date(myDate.getTime() + days * 25 * 60 * 60 * 1000);
}

function remDays(myDate, days) {
    return new Date(myDate.getTime() - days * 25 * 60 * 60 * 1000);
}

function hideSelects() {
	// bug IE6 : on cache les SELECT pour éviter qu'ils s'affichent au-dessus des DIV
	document.getElementById('modelevh').style.visibility = 'hidden';
	document.getElementById('heure1').style.visibility = 'hidden';
	document.getElementById('heure2').style.visibility = 'hidden';
	document.getElementById('forfait').style.visibility = 'hidden';
	document.getElementById('divDateChanged').style.display = 'none';
}

function showSelects() {
	// bug IE6 : on réaffiche les SELECT qui étaient cachées pour éviter qu'ils s'affichent au-dessus des DIV
	if (document.getElementById('isAeroport').value != '1') {
		document.getElementById('modelevh').style.visibility = 'visible';
	}
	document.getElementById('heure1').style.visibility = 'visible';
	document.getElementById('heure2').style.visibility = 'visible';
	document.getElementById('forfait').style.visibility = 'visible';
}

function majuscule(val) {
	var minus = "aàâäbcçdeéèêëfghiîïjklmnoôöpqrstuùûvwxyz";
	var majus = "AAAABCCDEEEEEFGHIIIJKLMNOOOPQRSTUUUVWXYZ";
	var entree = val;
	var sortie = "";
	for (var i = 0 ; i < entree.length ; i++)
	{
		var car = entree.substr(i, 1);
		sortie += (minus.indexOf(car) != -1) ? majus.substr(minus.indexOf(car), 1) : car;
	}
	return sortie;
}

function redirectAeroport(idAgence) {
	window.open('popupAeroport.asp?aerop=' + idAgence,'popupAeroport','width=460,height=200,scrollbars=no,resizable=no,location=no,top=150,left=350');
}

/**
 * Fonction de récupération des paramètres GET de la page
 * @return Array Tableau associatif contenant les paramètres GET
 */
function extractUrlParam(param){
	var t = location.search.substring(1);
	var valParam = '';
	if (t != '') {
		var cherche = t.indexOf(param);
		if (cherche != -1) {
			valParam = t.substr(t.indexOf(param) + param.length + 1);
			if (valParam.indexOf('&') != -1) {
				valParam = valParam.substr(0,valParam.indexOf('&'));
			}
		}
	}
	return valParam;
}

function afficheCategorieAeroport() {
	document.getElementById('modelevh').style.visibility = 'hidden';
	$('typevehicule').style.background = 'transparent';
	document.getElementById('vehiculeClassique').style.visibility = 'hidden';
	document.getElementById('vehiculeClassique').style.position = 'absolute';
	document.getElementById('vehiculeAeroport').style.visibility = 'visible';
	document.getElementById('vehiculeAeroport').style.position = 'relative';
	document.getElementById('selville').style.zIndex = 2000;
}

function afficheCategorie() {
	document.getElementById('vehiculeAeroport').style.visibility = 'hidden';
	document.getElementById('vehiculeAeroport').style.position = 'absolute';
	document.getElementById('vehiculeClassique').style.visibility = 'visible';
	document.getElementById('vehiculeClassique').style.position = 'relative';
	document.getElementById('modelevh').style.visibility = 'visible';
	document.getElementById('selville').style.zIndex = 2000;
}

function calcNbJourForfait(typeVeh, date1, date2, heure1, heure2)
{
	var nbJour = 0;
	var dtDateDeb = date1;
	var dtDateFin = date2;
	var heureDeb = heure1;
	var heureFin = heure2;

	//Pour créer les dates, on effectue -1 sur les mois car javascript considère le mois comme un entier entre 0 et 11 => 0: janvier, 1: février ...
	var objDateDebut = new Date(dtDateDeb.substring(6,10), dtDateDeb.substring(3,5)-1, dtDateDeb.substring(0,2), heureDeb.substring(0,2), heureDeb.substring(3,5), "00"); //Date et heure Debut
	var objDateFin = new Date(dtDateFin.substring(6,10), dtDateFin.substring(3,5)-1, dtDateFin.substring(0,2), heureFin.substring(0,2), heureFin.substring(3,5), "00"); //Date et heure Fin

	var objDateDebutSansHeure = new Date(dtDateDeb.substring(6,10), dtDateDeb.substring(3,5)-1, dtDateDeb.substring(0,2)); //Date Debut sans heure
	var objDateFinSansHeure = new Date(dtDateFin.substring(6,10), dtDateFin.substring(3,5)-1, dtDateFin.substring(0,2)); //Date Fin sans heure

	//alert(objDateDebut);
	//alert(objDateFin);

	//var DifferenceD2D1 = (objDateFin.getTime()-objDateDebut.getTime())/(1000*60*60*24);
	var DifferenceD2D1 = (objDateFinSansHeure.getTime()-objDateDebutSansHeure.getTime())/(1000*60*60*24);
	//alert('DifferenceD2D1 =' + DifferenceD2D1);
	if(DifferenceD2D1 == 0)
	{
		nbJour = 1;
	}
	else
	{
		nbJour = DifferenceD2D1;
		//Getday() : L'objet retourné est un entier qui correspond au jour de la semaine : * 0: dimanche * 1: lundi ...
		if(objDateFin.getDay()!= 1 ) //   si restitution n'est pas un lundi
		{
			//getHours() : L'objet retourné est un entier (entre 0 et 23) qui correspond à l'objet Date.
			if(objDateDebut.getHours()>=17)		//si prise du vehicule apres 17h00
			{
				//On ne fait rien c'est le nombre de jour exact
				if (objDateFin.getHours()<9) // Si retour avant 9 Heures
				{nbJour = nbJour - 1;}
				else if (objDateFin.getHours()==9 && objDateDebut.getMinutes()==0) //retour à 9 heures
				{nbJour = nbJour - 1;}
				else
				{nbJour = nbJour;}
			}
			else  //si prise du vehicule avant 17h00
			{
				if((objDateFin.getHours()<objDateDebut.getHours()) || (objDateDebut.getHours()==objDateFin.getHours() && objDateFin.getMinutes()<=objDateDebut.getMinutes())) //Si heure de Retour <= Heure d'arrivé
				{}
				else
				{
					if (objDateFin.getHours()<9) // Si retour avant 9 Heures
					{nbJour = nbJour;}
					else if (objDateFin.getHours()==9 && objDateFin.getMinutes()==0) // retour à 9 heures
					{nbJour = nbJour;}
					else
					{nbJour = nbJour + 1;}
	    	}
    	}
		}
		else		//si restitution un lundi
		{
    	if (objDateFin.getHours()<10) // Si un lundi avant 10 Heures
    	{
			if (objDateDebut.getHours()>=17) //si prise du vehicule apres 17h00
				{nbJour = nbJour - 1;}
		}
   		else if (objDateFin.getHours()==10 && objDateFin.getMinutes()==0)
		{
			if (objDateDebut.getHours()>=17) //si prise du vehicule apres 17h00
			{nbJour = nbJour - 1;}
		}
  		else
  		{
	    	if (objDateDebut.getHours()>=17) //si prise du vehicule apres 17h00
	    	{nbJour = nbJour - 1;}
	    	else
	    	{
		    	if (objDateDebut.getHours() > objDateFin.getHours() || (objDateDebut.getHours() == objDateFin.getHours() && objDateDebut.getMinutes() >= objDateFin.getMinutes()))
		    	{
		    		nbJour = nbJour - 1;
		    	}
			}
				nbJour = nbJour + 1;
  		}
   	}

	}

	//var typeVeh = session("type");
	if ((objDateDebut.getDay()==0 || objDateDebut.getDay()==6 || objDateFin.getDay()==6) && nbJour ==1)
	{
		if(typeVeh=='tourisme' && objDateFin.getDay() != 6)
		{
	    //nbjour=2;
			nbJour=1;
			if (objDateDebut.getHours()>=17) //si prise du vehicule apres 17h00
			{
				nbJour = nbJour - 1;
			}
		}
		else
		{
			nbjour=1;
		}
	}

	if (typeVeh == 'utilitaire') //Si utilitaire
	{
  	if (DifferenceD2D1 == 0)
  		{nbJour = 1;}
    else
  		{nbJour = DifferenceD2D1;}

  	if (DifferenceD2D1 == 0)
		{
			nbJour = 1;  		//si une journee alors vérifier si demi journee
			if ((objDateDebut.getHours()<13)&&(objDateFin.getHours()<=13))
				{nbJour = 1;}		//1/2 plus de demie journée
			else if ((objDateDebut.getHours()>=13) && (objDateFin.getHours()>13))
				{nbJour = 1;} 	//1/2 plus de demie journée
		}
		else
		{
			//ICI
			nbJour = DifferenceD2D1;
			if (objDateFin.getDay() != 1) // si restitution n'est pas un lundi
			{
				if (objDateDebut.getHours()>=17) //si prise du vehicule apres 17h00
				{
					if (objDateFin.getHours()<9) //Si retour avant 9 Heures
						{nbJour = nbJour - 1;}
					else if (objDateFin.getHours()==9 && objDateFin.getMinutes()==0) // retour à 9 heures
						{nbJour = nbJour - 1;}
					else
						{nbJour = nbJour;}
				}
				else
				{
					if((objDateFin.getHours()<objDateDebut.getHours())||(objDateDebut.getHours()==objDateFin.getHours() && objDateFin.getMinutes()<=objDateDebut.getMinutes()))	// Si heure de Retour <= Heure d'arrivé
					{}
					else
					{
						if (objDateFin.getHours()<9) // Si retour avant 9 Heures
							{nbJour = nbJour;}
						else if (objDateFin.getHours()==9 && objDateFin.getMinutes()==0) // retour à 9 heures
							{nbJour = nbJour;}
						else
							{nbJour = nbJour + 1;}
			    }
			  }
			}
			else
			{
	    	if (objDateFin.getHours()<10) //Si un lundi avant 10 Heures
	    	{
					if (objDateDebut.getHours()>=17) //si prise du vehicule apres 17h00
					{nbJour = nbJour - 1;}
				}
				else if (objDateFin.getHours()==10 && objDateFin.getMinutes()==0)
				{
	     		if (objDateDebut.getHours()>=17) //si prise du vehicule apres 17h00
	     		{nbJour = nbJour - 1;}
	     	}
				else
				{
					if ((objDateDebut.getHours()>=17)) //si prise du vehicule apres 17h00
					{nbJour = nbJour - 1;}
					else
			    	{
				    	if (objDateDebut.getHours() > objDateFin.getHours() || (objDateDebut.getHours() == objDateFin.getHours() && objDateDebut.getMinutes() >= objDateFin.getMinutes()))
				    	{
				    		nbJour = nbJour - 1;
				    	}
					}
					nbJour = nbJour + 1;
				}
			}
		}
	}// fin si utilitaire

	if (nbJour==0)
	{
		nbJour = 1;
	}

	if ((objDateDebut.getDay()==0 || objDateDebut.getDay()==7) && nbJour == 1) //si 1 jour et départ le samedi ou dimanche alors 2 jours
	{nbJour = 1;}
	else if ((objDateFin.getDay()==6 && objDateFin.getHours()>09)&& nbJour == 1) //si 1 jour retour le samedi après 09h00 alors 2 jours
	{nbJour = 1;}


	//************************************************
	//SQLI DM 20090415 - DEBUT - Calcul jours pour l'offre PONTS DE MAI

	//WE du 30 avril au 4 mai
	var objDatePontDebSansHeure = new Date("2009", "03", "30"); //Date Debut Pont
	var objDatePontFinSansHeure = new Date("2009", "04", "04"); //Date Fin Pont
	var bRet = 0;
	if(objDateDebutSansHeure.getTime() == objDatePontDebSansHeure.getTime() && objDateDebut.getHours()>=17 && objDateFinSansHeure.getTime() == objDatePontFinSansHeure.getTime() && objDateFin.getHours()<=12)
	{
		if(!(objDateFin.getMinutes()>0 && objDateFin.getHours()==12))
		{nbJour = 3;}
	}

	//WE du 2 mai au 4 mai
	bRet = 1;
	var objDatePontDebSansHeure = new Date("2009", "04", "02"); //Date Debut Pont
	var objDatePontFinSansHeure = new Date("2009", "04", "04"); //Date Fin Pont
	if(objDateDebutSansHeure.getTime() == objDatePontDebSansHeure.getTime() && objDateDebut.getHours()<=9 && objDateFinSansHeure.getTime() == objDatePontFinSansHeure.getTime() && objDateFin.getHours()<=12)
	{
		if(objDateDebutSansHeure.getTime() == objDatePontDebSansHeure.getTime() && objDateDebut.getMinutes()>30 && objDateDebut.getHours()==9)
		{bRet = 0;}
		if(bRet == 1 && !(objDateFin.getMinutes()>0 && objDateFin.getHours()==12))
		{nbJour = 2;}
	}

	//WE du 7 mai au 11 mai
	objDatePontDebSansHeure = new Date("2009", "04", "07"); //Date et heure Debut Pont
	objDatePontFinSansHeure = new Date("2009", "04", "11"); //Date et heure Fin Pont
	if(objDateDebutSansHeure.getTime() == objDatePontDebSansHeure.getTime() && objDateDebut.getHours()>=17 && objDateFinSansHeure.getTime() == objDatePontFinSansHeure.getTime() && objDateFin.getHours()<=12)
	{
		if(!(objDateFin.getMinutes()>0 && objDateFin.getHours()==12))
		{nbJour = 3;}
	}

	//WE du 9 mai au 11 mai
	bRet = 1;
	var objDatePontDebSansHeure = new Date("2009", "04", "09"); //Date Debut Pont
	var objDatePontFinSansHeure = new Date("2009", "04", "11"); //Date Fin Pont
	if(objDateDebutSansHeure.getTime() == objDatePontDebSansHeure.getTime() && objDateDebut.getHours()<=9 && objDateFinSansHeure.getTime() == objDatePontFinSansHeure.getTime() && objDateFin.getHours()<=12)
	{
		if(objDateDebutSansHeure.getTime() == objDatePontDebSansHeure.getTime() && objDateDebut.getMinutes()>30 && objDateDebut.getHours()==9)
		{bRet = 0;}
		if(bRet == 1 && !(objDateFin.getMinutes()>0 && objDateFin.getHours()==12))
		{nbJour = 2;}
	}

	//WE du 16 mai au 17 mai
	bRet = 1;
	objDatePontDebSansHeure = new Date("2009", "04", "15"); //Date et heure Debut Pont
	var objDatePontDebSansHeure2 = new Date("2009", "04", "16"); //Date et heure Debut Pont
	objDatePontFinSansHeure = new Date("2009", "04", "18"); //Date et heure Fin Pont
	if(((objDateDebutSansHeure.getTime() == objDatePontDebSansHeure.getTime() && objDateDebut.getHours()>=17) || (objDateDebutSansHeure.getTime() == objDatePontDebSansHeure2.getTime() && objDateDebut.getHours()<=9)) && objDateFinSansHeure.getTime() == objDatePontFinSansHeure.getTime() && objDateFin.getHours()<=12)
	{
		if(objDateDebutSansHeure.getTime() == objDatePontDebSansHeure2.getTime() && objDateDebut.getMinutes()>30 && objDateDebut.getHours()==9)
		{bRet = 0;}
		if(bRet == 1 && !(objDateFin.getMinutes()>0 && objDateFin.getHours()==12))
		{nbJour = 2;}
	}
	bRet = 0;

	//WE du 20 mai au 24 mai
	objDatePontDebSansHeure = new Date("2009", "04", "20"); //Date et heure Debut Pont
	objDatePontFinSansHeure = new Date("2009", "04", "25"); //Date et heure Fin Pont
	if(objDateDebutSansHeure.getTime() == objDatePontDebSansHeure.getTime() && objDateDebut.getHours()>=17 && objDateFinSansHeure.getTime() == objDatePontFinSansHeure.getTime() && objDateFin.getHours()<=12)
	{
		if(!(objDateFin.getMinutes()>0 && objDateFin.getHours()==12))
		{nbJour = 4;}
	}

	//WE du 22 mai au 24 mai
	bRet = 1;
	objDatePontDebSansHeure = new Date("2009", "04", "22"); //Date et heure Debut Pont
	objDatePontFinSansHeure = new Date("2009", "04", "25"); //Date et heure Fin Pont
	if(objDateDebutSansHeure.getTime() == objDatePontDebSansHeure.getTime() && objDateDebut.getHours()<=9 && objDateFinSansHeure.getTime() == objDatePontFinSansHeure.getTime() && objDateFin.getHours()<=12)
	{
		if(objDateDebut.getMinutes()>30 && objDateDebut.getHours()==9)
		{bRet = 0;}
		if(bRet == 1 && !(objDateFin.getMinutes()>0 && objDateFin.getHours()==12))
		{nbJour = 3;}
	}

	bRet = 1
	//WE du 23 mai au 24 mai
	objDatePontDebSansHeure = new Date("2009", "04", "22"); //Date et heure Debut Pont
	objDatePontDebSansHeure2 = new Date("2009", "04", "23");
	objDatePontFinSansHeure = new Date("2009", "04", "25"); //Date et heure Fin Pont
	if(((objDateDebutSansHeure.getTime() == objDatePontDebSansHeure.getTime() && objDateDebut.getHours()>=17) || (objDateDebutSansHeure.getTime() == objDatePontDebSansHeure2.getTime() && objDateDebut.getHours()<=9)) && objDateFinSansHeure.getTime() == objDatePontFinSansHeure.getTime() && objDateFin.getHours()<=12)
	{
		if(objDateDebutSansHeure.getTime() == objDatePontDebSansHeure2.getTime() && objDateDebut.getMinutes()>30 && objDateDebut.getHours()==9)
		{bRet = 0;}
		if(bRet == 1 && !(objDateFin.getMinutes()>0 && objDateFin.getHours()==12))
		{nbJour = 2;}
	}

	bRet = 1;
	//WE du 30 mai au 31 mai
	objDatePontDebSansHeure = new Date("2009", "04", "29"); //Date et heure Debut Pont
	objDatePontDebSansHeure2 = new Date("2009", "04", "30");
	objDatePontFinSansHeure = new Date("2009", "05", "01"); //Date et heure Fin Pont
	if(((objDateDebutSansHeure.getTime() == objDatePontDebSansHeure.getTime() && objDateDebut.getHours()>=17) || (objDateDebutSansHeure.getTime() == objDatePontDebSansHeure2.getTime() && objDateDebut.getHours()<=9)) && objDateFinSansHeure.getTime() == objDatePontFinSansHeure.getTime() && objDateFin.getHours()<=12)
	{
		if(objDateDebutSansHeure.getTime() == objDatePontDebSansHeure2.getTime() && objDateDebut.getMinutes()>30 && objDateDebut.getHours()==9)
		{bRet = 0;}
		if(bRet == 1 && !(objDateFin.getMinutes()>0 && objDateFin.getHours()==12))
		{nbJour = 2;}
	}

	//SQLI DM 20090415 - FIN - Calcul jours pour l'offre PONTS DE MAI
	//************************************************


	return nbJour;
}//Fin fonction


//jpasquier 2008/10/29 mettre le kilométrage illimité pour la réunion
function getKm(val)
{
//alert(val);

	objForfait = document.getElementById('forfait');
	objForfait.options.length = 0;

	if (val == 189 || val == 188 || val == 187)
	{
		// forfait illimité
		objForfait.options[0] = new Option('Kilométrage illimité', '9999');
	}
	else
	{
		objForfait.options[0] = new Option('100 km', '');
	}
}
