$(document).ready(function() {
	$("ul.liste_marchands p.nom a").not("ul.liste_marchands p.nom a.icone").click(function() {
		var Element = $(this).parent().next();
		Element.slideToggle();
		return false;
	});

	$("#carrousel").cycle({
		fx: 'fade',
		speed: 3500,
		random: 1
	});
	
	$("#liste_activites a").mouseenter(
		function() {
			var divAMontrer = "section_" + $(this).attr("name");
			$("#texte_normal").html($("#" + divAMontrer).html());
		}
	);
	
	ajouterSpecialites = function() {
		$("#liste-specialites").empty();
		listeSpecialites = [];
		$("ul.specialites li").each(function() {
			var self = $(this);
			listeSpecialites.push(self.text());
		});
		listeSpecialites.sort();
		listeSpecialites.retirerDoublons();
		
		// Ajoute chaque spécialité à la liste appropriée
		for(var compteur = 0; compteur < listeSpecialites.length; compteur++) {					
			$("#liste-specialites").
			append($("<option></option>").
			attr("value", listeSpecialites[compteur]).
			text(listeSpecialites[compteur]));
		}
		
		$("#liste-specialites").prepend('<option name="toutes">Toutes</option>');
	}
	
	ajouterDisponibilites = function() {
		$("#liste-disponibilites").empty();
		var tableauOrdre = { "peu importe":-1, "à l'année":78, 'janvier':1, 'février':2, 'mars':3, 'avril':4, 'mai':5, 'mi-mai':6, 'juin':7, 'mi-juin':8, 'fin juin':9, 'juillet':10, 'début juillet': 11, 'mi-juillet':12, 'fin juillet':13, 'août':14, 'septembre':15, 'octobre':16, 'début octobre':17, 'novembre':18, 'décembre':19 };
		//var tableauOrdre = { "peu importe":-1, "à l'année":0, 'janvier':1, 'février':2, 'mars':3, 'avril':4, 'mai':5, 'mi-mai':6, 'mi-juin':7, 'juin':8, 'fin juin':9, 'début juillet':10, 'mi-juillet': 11, 'juillet':12, 'fin juillet':13, 'août':14, 'septembre':15, 'début octobre':16, 'octobre':17, 'novembre':18, 'décembre':19 };

		for(var cle in tableauOrdre) {
			$("#liste-disponibilites").
			append($("<option></option>").
			attr("value", cle).
			text(cle));
		}
		/* POUR DEBUG - histoire d'avoir la liste complète
		$("div.deroulant").
			children("p:contains('Disponibilités')").
			each(function () {
				disponibilites = $(this).text().replace('Disponibilités: ', '');
				listeDisponibilites = listeDisponibilites.concat(disponibilites.replace('mi-', 'mi-').split('-'));
			});
		
		listeDisponibilites.sortByMonth();
		listeDisponibilites.retirerDoublons();*/
	}
	
	Array.prototype.sortByMonth = function() {
		var tableauOrdre = { 'janvier':1, 'février':2, 'mars':3, 'avril':4, 'mai':5, 'mi-mai':6, 'juin':7, 'mi-juin':8, 'fin juin':9, 'juillet':10, 'début juillet': 11, 'mi-juillet':12, 'fin juillet':13, 'août':14, 'septembre':15, 'octobre':16, 'début octobre':17, 'novembre':18, 'décembre':19, "à l'année":78 };
		var mettreEnOrdre = false;
		var elementGauche, elementDroite;
		
		do {
			var nouveauTableau = [];

			for(var compteur = 0; compteur < this.length - 1; compteur++) {
				elementGauche = tableauOrdre[this[compteur]];
				elementDroite = tableauOrdre[this[compteur + 1]];

				if(undefined == elementGauche) alert(this[compteur]);
				if(undefined == elementDroite) alert(this[compteur + 1]);
			}
			
			for(var compteur = 0; compteur < nouveauTableau.length; compteur++) this.push(nouveauTableau[compteur]);
		} while(mettreEnOrdre);
	}
	
	Array.prototype.retirerDoublons = function() {
		var tableauTravail = this.slice(0);
		var resultats = [];
		
		for(var compteur = 0; compteur < this.length - 1; compteur++) {
			if (tableauTravail[compteur + 1] != tableauTravail[compteur]) {
				resultats.push(tableauTravail[compteur]);
			}
		}
		
		this.length = 0;
		for(compteur = 0; compteur < resultats.length; compteur++) this.push(resultats[compteur]);
	}
	
	rafraichirFiltres = function() {
		// On commence par cacher tous les marchands
		$('ul.liste_marchands li').show();
		
		// Élimination par type de spécialité
		var specialiteChoisie = $("#liste-specialites").val();
		
		if(specialiteChoisie != "Toutes") {
			// Affiche seulement les marchands/producteurs dont la liste de spécialités contient l'élément choisi
			$('ul.liste_marchands li:not(:contains("' + specialiteChoisie + '"))').hide();
		}
		
		// Élimination par disponibilité
		var disponibiliteChoisie = $("#liste-disponibilites").val();
		
		if("peu importe" != disponibiliteChoisie) {
			$('ul.liste_marchands li').css('visibility', 'visible').each(function () {
				var valeurElementCourant = $(this).children('.deroulant').children(':contains("Disponibilités")').text().replace('Disponibilités: ', '');

				if("à l'année" == disponibiliteChoisie) { if("à l'année" != valeurElementCourant) $(this).hide(); }
		// Disponibilité "normale", avec un ensemble de mois (la plupart du temps)
				else if("" != valeurElementCourant && "à l'année" != valeurElementCourant) {
					var doitEtreAffiche = false;
					
					if(valeurElementCourant.indexOf(',') > -1) {
						var valeursATraiter = valeurElementCourant.split(',');
						
						for(var compteur = 0; compteur < valeursATraiter.length; compteur++) {
							var valeurCourante = valeursATraiter[compteur];
							var moisChoisis = valeurCourante.replace('mi-', 'mi_').split(/-/);
							var valeurRetour = false;
							
							if(moisChoisis.length != null && moisChoisis.length > 1)  valeurRetour = verifierDisponibilite(disponibiliteChoisie, moisChoisis[0].replace('_', '-'), moisChoisis[1].replace('_', '-'));
							else valeurRetour = verifierDisponibilite(disponibiliteChoisie, valeurCourante);
							
							if(valeurRetour) {
								doitEtreAffiche = true;
								//break;
							}
						}
					} else {
						var moisChoisis = valeurElementCourant.replace('mi-', 'mi_').split(/-/);
						var valeurRetour = false;
						
						if(moisChoisis.length != null && moisChoisis.length > 1)  valeurRetour = verifierDisponibilite(disponibiliteChoisie, moisChoisis[0].replace('_', '-'), moisChoisis[1].replace('_', '-'));
						else valeurRetour = verifierDisponibilite(disponibiliteChoisie, valeurElementCourant);
						
						if(valeurRetour) {
							doitEtreAffiche = true;
							//break;
						}
					}
					
					if(!doitEtreAffiche) $(this).hide();
				}
			});
		}
		
		// Élimination selon qu'un site Web est demandé
		if($("#presence-site-web").is(':checked')) {
			$('ul.liste_marchands li:not(:contains("Site Web"))').hide();
		}
		
		// Élimination selon qu'un numéro de téléphone est demandé
		if($("#presence-telephone").is(':checked')) {
			$('ul.liste_marchands li:not(:contains("Téléphone"))').hide();
		}
	}
	
	verifierDisponibilite = function(disponibiliteChoisie, premierMois, deuxiemeMois) {
		var tableauOrdre = { 'janvier':1, 'février':2, 'mars':3, 'avril':4, 'mai':5, 'mi-mai':6, 'juin':7, 'mi-juin':8, 'fin juin':9, 'juillet':10, 'début juillet': 11, 'mi-juillet':12, 'fin juillet':13, 'août':14, 'septembre':15, 'octobre':16, 'début octobre':17, 'novembre':18, 'décembre':19, "à l'année":78 };
		
		if(null != deuxiemeMois) {
			disponibiliteChoisie = tableauOrdre[disponibiliteChoisie];
			premierMois = tableauOrdre[premierMois];
			deuxiemeMois = tableauOrdre[deuxiemeMois];
			
			if(disponibiliteChoisie >= premierMois && disponibiliteChoisie <= deuxiemeMois) return true;
		} else if (disponibiliteChoisie == premierMois) return true;
		
		// Par défaut la disponibilité n'est pas bonne
		return false;
	}
	
	if($("#liste-specialites").length > 0) {
		// Chaque changement rafraîchit la liste
		$("#liste-specialites").change(function() { rafraichirFiltres(); });
		$("#liste-disponibilites").change(function() { rafraichirFiltres(); });
		$("#presence-site-web").change(function() { rafraichirFiltres(); });
		$("#presence-telephone").change(function() { rafraichirFiltres(); });
	
		// Appel des fonctions proprement dites
		ajouterSpecialites();
		ajouterDisponibilites();
	}

});
