var MoteurPV = {
	/* valeurs initiales */
	initValues : new Array(),
	currentTarget : null,
	load:function() {
		if ( $('paysCtrl') ) {
			Event.observe($('paysCtrl'),'change', MoteurPV.filter);
		}
		if ( $('regionCtrl') ) {
			Event.observe($('regionCtrl'),'change', MoteurPV.filter);
		}
		if ( $('destinationCtrl') ) {
			Event.observe($('destinationCtrl'),'change', MoteurPV.filter);
		}
		if ( $('dateDepart') ) {
			Event.observe($('dateDepart'),'change', MoteurPV.filterAsc);
		}
		if ( $('dureeCtrl') ) {
			Event.observe($('dureeCtrl'),'change', MoteurPV.filterAsc);
		}
		if ( $('flexibiliteCtrl') ) {
			Event.observe($('flexibiliteCtrl'),'change', MoteurPV.filterAsc);
		}

		if ($('MT')) {
			Event.observe($('MT'),'click', MoteurPV.filterAsc);
		}
		if ($('ME')) {
			Event.observe($('ME'),'click', MoteurPV.filterAsc);
		}
		if ($('VL')) {
			Event.observe($('VL'),'click', MoteurPV.filterAsc);
		}
		if ($('CP')) {
			Event.observe($('CP'),'click', MoteurPV.filterAsc);
		}
	},

	/* Filtre des produits selon les dates d'ouverture et la date choisie. Le principe est le suivant:
    dateDebSejourMin = dateDepart - flexibilité
    dateFinSejourMax = dateDepart + duree + flexibilité
  	dateDebSejourMinPossible = max(dateDebSejourMin, dateOuverture)
	dateFinSejourMaxPossible = min(dateFinSejourMax, dateFermeture)
	il faut et il suffit que
	 1 - dateDebSejourMinPossible + duree (dt1 dans le programme)<= dateFermeture
	 2 - dateFinSejourMaxPossible - duree (dt2 dans le programme)>= dateOuverture */
	filterAsc:function(evt) {

		var typDest = '#';
		var NbDest = 0;
		if ($('MT')) {
			if ($('MT').checked) typDest += 'MT#';
			NbDest++;
		}
		if ($('ME')) {
			if ($('ME').checked) typDest += 'ME#';
			NbDest++;
		}
		if ($('VL')) {
			if ($('VL').checked) typDest += 'VL#';
			NbDest++;
		}
		if ($('CP')) {
			if ($('CP').checked) typDest += 'CP#';
			NbDest++;
		}

		if (typDest == '#' && evt && NbDest != 0 ) {
			var src = evt.target;
			if (src == null) src = event.srcElement;
			src.checked = ! (src.checked);
			if ( typeof wrd_alert_moteur == 'undefined' ) { wrd_alert_moteur = 'Vous devez sélectionner au moins un type de destination'; }
			alert(wrd_alert_moteur);
			return;
		}

		var valeur = $('dateDepart').value;
		var strPrd = '#';
		var dtStrPrd = '#';

		if (valeur.length < 10 || isNaN(Number(valeur.substr(6,4))) || isNaN(Number(valeur.substr(3,2))) || isNaN(Number(valeur.substr(0,2)))) {
			var elt = $('produitCtrl');
			var opts = MoteurPV.getOpts(elt);
			for (var i = (elt.options.length - 1); i >= 1; i--) elt.removeChild(elt.options.item(i));
			for (var i = 1; i < opts.length; i++) {
				opts[i].setAttribute('dtFiltered', 'true');
				var vals = opts[i].getAttribute('typeDestinationCtrl').split('#');
				for (j = 0; j < vals.length; j++) {
					if (vals[j] == '') continue;
					if (typDest.indexOf('#' + vals[j] + '#') >= 0 || NbDest==0) {
						opts[i].setAttribute('dtFiltered', 'false');
						dtStrPrd += opts[i].value + '#';
						if (opts[i].getAttribute('valFiltered') != 'true') {
							var txt = opts[i].text;
							$('produitCtrl').appendChild(opts[i]);
							opts[i].text = txt;
							strPrd += opts[i].value + '#';
							break;
						}
					}
				}
			}
		} else {
			var valid = 1;
			if ( Number(valeur.substr(0,2)) > 31 || Number(valeur.substr(3,2)) > 12 )
			{
				if ( typeof wrd_alert_date_invalide == 'undefined' ) { wrd_alert_date_invalide = 'La date est invalide !'; }
				alert(wrd_alert_date_invalide);
				valid = 0;
			}

			if ( valid )
			{
				var dtDeb = new Date(valeur.substr(6,4),valeur.substr(3,2)-1,valeur.substr(0,2));
				var dtSaisi = new Date(dtDeb);
				dtDeb.setDate(dtDeb.getDate() - Number($('flexibiliteCtrl').value));
				var dtFin = new Date(valeur.substr(6,4),valeur.substr(3,2)-1,valeur.substr(0,2));
				dtFin.setDate(dtFin.getDate() + Number($('dureeCtrl').value) + Number($('flexibiliteCtrl').value));
				var dateCtrl = $('dateCtrl').value;
				var dtMin = new Date(dateCtrl.substr(4,4),dateCtrl.substr(2,2)-1,dateCtrl.substr(0,2));
				var dtMax = new Date(dateCtrl.substr(13,4),dateCtrl.substr(11,2)-1,dateCtrl.substr(9,2));
			}

			if ( valid )
			{
				var opts = MoteurPV.getOpts($('produitCtrl'));
				var elt = $('produitCtrl');
				for (var i = (elt.options.length - 1); i >= 1; i--) elt.removeChild(elt.options.item(i));
				var typDests = new Array(false, false, false, false);
				for (var i = 1; i < opts.length; i++) {
					var bool = 0;
					opts[i].setAttribute('dtFiltered', 'true');
					var tvals = opts[i].getAttribute('datesCtrl').split('#');
					for (var ii = 0 ; ii < tvals.length ; ii++ ) {
						var vals = tvals[ii].split('-');
						var dtPrdDeb = new Date(vals[0].substr(4,4),vals[0].substr(2,2)-1,vals[0].substr(0,2));
						var dtPrdFin = new Date(vals[1].substr(4,4),vals[1].substr(2,2)-1,vals[1].substr(0,2));
						var dt1 = new Date(Math.max(dtDeb.getTime(), dtPrdDeb.getTime()));
						dt1.setDate(dt1.getDate() + Number($('dureeCtrl').value));
						var dt2 = new Date(Math.min(dtFin.getTime(), dtPrdFin.getTime()) );
						dt2.setDate(dt2.getDate() - Number($('dureeCtrl').value));
						if ((dt1.getTime() <= dtPrdFin.getTime() && dt2.getTime() >= dtPrdDeb.getTime())) { bool = 1; break; }
					}

					if ( bool ) {
						var vals = opts[i].getAttribute('typeDestinationCtrl').split('#');
						for (j = 0; j < vals.length; j++) {
							if (vals[j] == '') continue;
							if (typDest.indexOf('#' + vals[j] + '#') >= 0 || NbDest==0) {
								opts[i].setAttribute('dtFiltered', 'false');
								dtStrPrd += opts[i].value + '#';
								if (opts[i].getAttribute('valFiltered') != 'true') {
									var txt = opts[i].text;
									$('produitCtrl').appendChild(opts[i]);
									opts[i].text = txt;
									if (opts[i].getAttribute('typeDestinationCtrl').indexOf('#MT#') >= 0) typDests[0] = true;
									if (opts[i].getAttribute('typeDestinationCtrl').indexOf('#ME#') >= 0) typDests[1] = true;
									if (opts[i].getAttribute('typeDestinationCtrl').indexOf('#VL#') >= 0) typDests[2] = true;
									if (opts[i].getAttribute('typeDestinationCtrl').indexOf('#CP#') >= 0) typDests[3] = true;
									strPrd += opts[i].value + '#';
									break;
								}
							}
						}
					}
				}
			}
		}

		//strPrd = data filtrée par les dates et les valeurs
		//dtStrPrd = data filtrée par les dates uniquement

		strPrd = MoteurPV.filterAsc2($('destinationCtrl'), 'produitCtrl', strPrd, dtStrPrd);
		strPrd = MoteurPV.filterAsc2($('regionCtrl'), 'destinationCtrl', strPrd[0], strPrd[1]);
		strPrd = MoteurPV.filterAsc2($('paysCtrl'), 'regionCtrl', strPrd[0], strPrd[1]);

		if ($('destinationCtrl').options.length == 1) {
		    $('fieldville').style.display = 'none';
		}
		if ($('regionCtrl').options.length == 1) {
            $('fieldregion').style.display = 'none';
        }
	},
	//fonction permettant de filtrer la combo "elt" avec les éléments présents dans l'attribut "attName" et "values"
	//exemple vals=#0#1#2#;
	//<option produitCtrl="#0#3#"> sera conservé car 0 appartient à vals
	//<option produitCtrl="#3#4#"> ne sera pas conservé
	filterAsc2:function(elt, attName, values, dtValues) {
		var val = elt.value;
		var opts = MoteurPV.getOpts(elt);
		var currVal = elt.value;
		for (var i = (elt.options.length - 1); i >= 1; i--) elt.removeChild(elt.options.item(i));
		var res = '#';
		var res2 = '#';
		for (var i = 1; i < opts.length; i++ ) {
			opts[i].setAttribute('dtFiltered', 'true');
			var vals = opts[i].getAttribute(attName).split('#');
			for (var j = 0; j < vals.length; j++) {
				if (vals[j] == '') continue;
				if (values.indexOf('#' + vals[j] + '#') >= 0 || dtValues.indexOf('#' + vals[j] + '#') >= 0) {
					opts[i].setAttribute('dtFiltered', 'false');
					res2 += opts[i].value + '#';
					if (opts[i].getAttribute('valFiltered') != 'true') {
						var txt = opts[i].text;
						elt.appendChild(opts[i]);
						opts[i].text = txt;
						res += opts[i].value + '#';
						break;
					}
				}
			}
		}
		var rr = new Array(res, res2);
		return rr;
	},

	/* Fonction intermédiaire permettant de lancer le filtre réel */
	filter: function (evt) {
		currentTarget = src;
		var src = evt.target;
		if (src == null) src = event.srcElement;
		var attName = src.getAttribute('selectId');
		var newElt = $(attName);
		var values = src.options.item(src.selectedIndex).getAttribute(attName);

		if (src.selectedIndex == 0) {
			values = '';
			for (var i = src.options.length - 1; i >= 1; i--) {
					values += src.options.item(i).getAttribute(attName);
			}
		}

		MoteurPV.filtrer(newElt, values);
		//filtre de la nouvelle liste de produit avec les dates et le type d'hébergement
		//MoteurPV.filterAsc();
	},

	//fonction permettant de filter les options de "elt" avec les valeurs "values"
	//une option est visible lorsque la valeur de l'option est comprise dans values
	filtrer: function(elt, values) {

		var opts = MoteurPV.getOpts(elt);
		var val = elt.value;
		var attName = elt.getAttribute('selectId');

//alert('attName='+attName);
//alert('values='+values);

		for (var i = (elt.options.length - 1); i >= 1; i--) elt.removeChild(elt.options.item(i));
		var newValues = '';
		for (var i = 1; i < opts.length; i++) {
			opts[i].setAttribute('valFiltered', 'true');

//alert('opts[i].value='+opts[i].value);

			if (values.indexOf('#' + opts[i].value + '#') >= 0) {
				if (attName) newValues += opts[i].getAttribute(attName);
				opts[i].setAttribute('valFiltered', 'false');
				if (opts[i].getAttribute('dtFiltered') != 'true') {
					var txt = opts[i].text;
					elt.appendChild(opts[i]);
					opts[i].text = txt;
				}
			}
		}

		elt.selectedIndex = 0;

//		if (attName && newValues.indexOf('#' + val + '#') >= 0 ) elt.value = val; //repositionnement à la position initiale
		if (attName != null) {
//alert(elt.getAttribute('selectId'));
//alert(newValues);
			MoteurPV.filtrer($(elt.getAttribute('selectId')), newValues);
		}

//    alert($('produitCtrl').options.length);
		return newValues;
	},

	getOpts:function(elt) {
		for (var i = 0; i < MoteurPV.initValues.length; i++) {
			if (MoteurPV.initValues[i][0] == elt.name) {
				return MoteurPV.initValues[i][1];
			}
		}
		var opts = new Array();
		for (var i = 0; i < elt.options.length;i++) opts[i] = elt.options.item(i);
    MoteurPV.initValues[MoteurPV.initValues.length] = new Array(elt.name, opts);
		return opts;
	},

	getCurrOpts:function(elt) {
		var opts = new Array();
		for (var i = 0; i < elt.options.length;i++) opts[i] = elt.options.item(i);
		return opts;
	}
}
