
function getValue(id) {
	var elt = document.getElementById(id);
	if(elt.nodeName == 'INPUT')
		var value = elt.value;
	else if(elt.nodeName == 'SELECT')
		var value = elt.options[elt.selectedIndex].value;
	else
		return false;
	return value;
}

function is_date(date) {
	//date est du format 'aaaa/mm/jj'
	var tab_date = date.split('/');
	if(tab_date.length != 3)
		return false;
	var date_test = new Date(tab_date[0],tab_date[1]-1,tab_date[2]);
	var annee = date_test.getFullYear();
	var mois = date_test.getMonth()+1;
	if(mois < 10)
		mois = '0'+mois;
	var jour = date_test.getDate();
	if(jour < 10)
		jour = '0'+jour;
	var new_date = annee+'/'+mois+'/'+jour;
	if(new_date != date)
		return false;
	return true;
}

function verif_date(jour, mois, annee) {
	//	On vérifie la validité d'une date, en prenant en compte le fait que javaScript corrige la date quand on lui en donne une erronée
	if(mois < 10)
		mois = '0'+Math.abs(mois);
	if(jour < 10)
		jour = '0'+Math.abs(jour);
	var date = new Date(annee, mois-1, jour);
	var new_annee = date.getYear();
	var new_mois = date.getMonth()+1;
	var new_jour = date.getDate();
	if(new_annee < 1000)
		new_annee = 1900 + new_annee;
	if(new_mois < 10)
		new_mois = '0'+new_mois;
	if(new_jour < 10)
		new_jour = '0'+new_jour;
	old_date = annee+'-'+mois+'-'+jour;
	new_date = new_annee+'-'+new_mois+'-'+new_jour;
	//alert(old_date+"\n"+new_date);
	if(new_date == old_date)
		return true;
	return false;
}

/*function remplit_month() {
	var months = new Array('Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
	var tab = new Array('D', 'R');
	for each(var type in tab) {
		//	On vide les éventuels éléments déjà présents
		$('#'+type+'_Month option').remove();
		var date = new Date();
		date.setMonth(date.getMonth()-1);
		for(var i = 1; i <= 12; i++) {
			date.setMonth(date.getMonth()+1);
			var mois = date.getMonth();
			var num_mois = mois+1;
			var annee = date.getYear();
			if(num_mois < 10)
				num_mois = '0'+num_mois;
			if(annee < 1000)
				annee = 1900 + annee;
			var moisa = annee+''+num_mois;
			var nom_mois = months[mois];
			$('#'+type+'_Month').append('<option value="'+moisa+'">'+nom_mois+' '+annee+'</option>');
		}
	}
}*/

function calc_jour(select) {
	var jours = new Array('dim', 'lun', 'mar', 'mer', 'jeu', 'ven', 'sam');
	var tab = new Array('D', 'R');
	for(var_type in tab) {
		type = tab[var_type];
		//	On récupère la valeur de l'année et du mois
		var moisa = $('#'+type+'_Month option:selected').val();
		var mois = moisa.substr(4, 2);
		var annee = moisa.substr(0, 4);
		//	On récupère la valeur du jour
		var jour = $('#'+type+'_Day option:selected').val();
		//	On vide d'éventuels éléments déjà présents dans le select
		$('#'+type+'_Day option').remove();
		//	On remplit le champ jour avec des dates valides
		for(d = 1; d <= 31; d++) {
			if(verif_date(d, mois, annee)) {
				date = new Date(annee, mois-1, d)
				num_jour = date.getDay();
				numero_jour = d;
				if(numero_jour < 10)
					numero_jour = '0'+numero_jour;
				$('#'+type+'_Day').append('<option value="'+numero_jour+'">'+jours[num_jour]+' '+d+'</option>');
			}
		}
		//	On remet la valeur correcte du jour
		$('#'+type+'_Day option[@value='+jour+']').attr('selected', 'selected');
		
		//	Si le mois choisi est le mois actuel, on supprime toutes les valeurs antérieures à aujourd'hui
		var auj = new Date();
		var a_jour = auj.getDate();
		var a_mois = auj.getMonth()+1;
		var a_annee = auj.getYear();
		if(a_annee < 1000)
			a_annee = 1900 + a_annee;
		if(a_mois < 10)
			a_mois = '0'+a_mois;
		if(a_annee+a_mois == moisa) {
			for(j = 1; j < a_jour; j++) {
				if(j < 10)
					j = '0'+j;
				$('#'+type+'_Day option[@value='+j+']').remove();
			}
		}
	}
}

function date_superieure(select) {
	switch(select) {
		case 'D_Month':
			to_change	=	$('#D_Month');
			to_keep		=	$('#R_Month');
			break;
		case 'R_Month':
			to_change	=	$('#R_Month');
			to_keep		=	$('#D_Month');
			break;
	}
	//	TODO : modifier les valeurs de départ ou d'arrivée, si la date d'arrivée est inférieure à celle de départ
}

function selectDate(type_champ, jour, mois, annee) {
	//	On calcule la date
	if(annee < 1000)
		annee = 1900 + annee;
	var date = new Date(annee, mois, jour);
	var n_annee = date.getYear();
	var n_mois = date.getMonth()+1;
	var n_jour = date.getDate();
	if(n_annee < 1000)
		n_annee = 1900 + n_annee;
	if(n_mois < 10)
		n_mois = '0'+n_mois;
	var moisa = n_annee+''+n_mois;
	$('#'+type_champ+'_Month option[@selected]').removeAttr('selected');
	$('#'+type_champ+'_Month option[@value='+moisa+']').attr('selected', 'selected');
	calc_jour();
	$('#'+type_champ+'_Day option[@value='+n_jour+']').attr('selected', 'selected');
}

function checkform() {
	//	Modification de la fonction, pour plus de simplicité d'utilisation
	var error = '';
	var depart = getValue('B_LOCATION_IN');
	var jour_dep = getValue('D_Day');
	var mois_a_dep = getValue('D_Month');
	var mois_dep = mois_a_dep.substr(4, 2);
	var annee_dep = mois_a_dep.substr(0, 4);
	var arrivee = getValue('E_LOCATION_IN');
	var jour_ret = getValue('R_Day');
	var mois_a_ret = getValue('R_Month');
	var mois_ret = mois_a_ret.substr(4, 2);
	var annee_ret = mois_a_ret.substr(0, 4);
	var date_depart = annee_dep+'/'+mois_dep+'/'+jour_dep;
	var date_retour = annee_ret+'/'+mois_ret+'/'+jour_ret;
	// On commence par vérifier les lieux de départ et d'arrivée
	if(depart == '' || arrivee == '')
		error = 'Veuillez choisir vos villes de départ et d\'arrivée';
	else if(!is_date(date_depart))
		error = 'Veuillez choisir une date de départ correcte';
	else if(!is_date(date_retour))
		error = 'Veuillez choisir une date de retour correcte';
	else if(date_depart > date_retour)
		error = 'Vous devez choisir une date de retour supérieure à la date de départ';
	else if($('#DP').val() == 'true' && $('#MINUS_PLUS_DATE[@checked]').length)
		error = 'L\'option dates flexibles n\'est pas disponible pour une recherche vol+hôtel. Veuillez la décocher';
	if($('#DP').val() == 'true')
		var action = 'http://weekend.opodo.fr/apps/jsp/dphotel/DPAvailabilityServlet';
	else
		var action = 'http://vols.opodo.fr/apps/jsp/planItGoMP/AirAvailabilityServlet';
	$('#DP').val('false');
	$('#new_form').attr('action', action);
	$('#num_adults').val($('#NB_ADULTS').val());
	if(error != '') {
		alert(error);
		return false;
	}
	return true;
}

$(document).ready(function() {
	if($('#new_form').length) {
		$('#rech_DP').click(function() {
			$('#DP').val('true');
			$('#new_form').attr('action', 'http://weekend.opodo.fr/apps/jsp/dphotel/DPAvailabilityServlet');
		});
		
		//	Si le select NB_INFANTS existe, on le met à jour en fonction du nombre d'adultes
		if($('#NB_INFANTS').length) {
			$('#NB_ADULTS').change(function() {
				var nb_adultes = $(this).find('option[selected]').val();
				var nb_enfants = $('#NB_INFANTS option[selected]').val();
				//	On supprime tous les éléments <option> du select NB_INFANTS
				$('#NB_INFANTS option').remove();
				//	On en recrée ensuite autant qu'il y a d'adultes
				for(var i = 0; i <= nb_adultes; i++)
					$('#NB_INFANTS').append('<option value="'+i+'">'+i+'</option>');
				//	Si possible, on resélectionne celui qui était précédemment sélectionné
				$('#NB_INFANTS option[@value='+nb_enfants+']').attr('selected', 'selected');
			});
		}
		
		//	On remplit les select month
		//remplit_month();
		//	On modifie les champs de numéro de jour pour y ajouter le nom du jour
		calc_jour();
		//	On calcule j+8, pour la sélection par défaut du second select
		var date = new Date();
		var jour = date.getDate();
		var mois = date.getMonth();
		var annee = date.getYear();
		selectDate('R', jour+15, mois, annee);
		$('#D_Month').change(function() {
			var d_mois = $(this).find('option:selected').attr('value');
			
			var r_mois = $('#R_Month option:selected').attr('value');
			if(r_mois < d_mois) {
				var mois = d_mois.substr(4, 2);
				var annee = d_mois.substr(0, 4);
					selectDate('R', 1, mois-1, annee);
			}
		});
		$('#R_Month, #D_Month').change(function() {
			calc_jour();
			date_superieure($(this).attr('name'));
		});
		$('#new_form').submit(function() {
			if(!checkform())
				return false;
			//	On remplit les champs dates
			var depart = $('#D_Month option:selected').attr('value')+$('#D_Day option:selected').attr('value');
			var retour = $('#R_Month option:selected').attr('value')+$('#R_Day option:selected').attr('value');
			$('#D_DATE').val(depart);
			$('#R_DATE').val(retour);
			
			//	On ajoute les champs TAVELLER_TYPE
			var num_adults = $('#num_adults').val();
			//$('#new_form').prepend('<input type="hidden" name="num_adultes" value="'+num_adults+'"');
			var num_enfants = 0;
			var num_bebes = 0;
			if($('#NB_CHILDREN').length)
				num_enfants = $('#NB_CHILDREN').val();
			if($('#NB_INFANTS').length)
				num_bebes = $('#NB_INFANTS').val();
			var nb = 1;
			for(var i = 1; i <= num_adults; i++) {
				$('#new_form').prepend('<input type="hidden" name="TRAVELLER_TYPE_'+nb+'" value="ADT">');
				nb++;
			}
			for(var i = 1; i <= num_enfants; i++) {
				$('#new_form').prepend('<input type="hidden" name="TRAVELLER_TYPE_'+nb+'" value="CHD">');
				nb++;
			}
			for(var i = 1; i <= num_bebes; i++)
				$('#new_form').prepend('<input type="hidden" name="HAS_INFANT_'+i+'" value="true">');
			//return false;
		});
	}
});