/*******************************************************************************************
 * Nom du fichier		: agenda_carte_lecture.js
 * Date					: 2 juillet 2009
 * Auteur				: Mathieu Despont
 * Adresse E-mail		: mathieu (at) ecodev.ch
 * But de ce fichier	: Fournir la partie javascript pour afficher l'agenda sous forme de carte
 *******************************************************************************************
 * 
 *
 */

var app;  // variable globale qui représente mon application
var chemin="/ecoical/";

// pour Gmap
var clickHandler;
var map;
var lat;
var lng;
var locations;
var bounds;
var geo;

jQuery.noConflict();
(function($) { 
  $(function() {
	
	// morceau de script qui est évalué à chaque requête. Il permet de lier du code javascript avec les éléments html
	$(document).ready(function(){
		app = new Application();
		
		// montre ou cache un loading en bas à droite de la page
		$("#loading").ajaxStart(function(){
		  $(this).show('fast');
		});
		$("#loading").ajaxStop(function(){
		  $(this).slideUp('slow');
		});

		// crée une carte de base
		app.addGMapNeuchatel();
		
		var baseUrl = $('#baseUrl').val(); // http://erenweb.ecodev.ch
		var mois = $('#choixMois').val();
		var annee = $('#choixAnnee').val();
		var jour = $('#choixJour').val();
		var idType = $('#filtreTye').val();
		var noVp = $('#filtreNoVp').val();
		var tagsVirgule = $('#filtreTags').val();
		var idCalendrier = $('#filtreCalendrier').val();
		var idLieu = $('#filtreLieu').val();
		var format = $('#choixFormat').val();
		var dateFinIntervalle = $('#dateFinIntervalle').val();
		var intervalle = $('#intervalle').val();
		
		//ajoute un écouteur
	//	GEvent.addListener(map, "click", function(overlay,point){app.ajouteClicMarker(overlay,point)});
	
	// calcul de l'url pour aller chercher les données json
	var url = chemin+"agenda/";
	
	var tagsUrl = tagsVirgule.split(',');
	
	for (var i=0; i < tagsUrl.length; i++) {
		if (tagsUrl[i]) {
			url = url+tagsUrl[i]+'/';
		};
	};

	if (noVp) {
		url = url+noVp+'/';
	};
	
	if (idCalendrier!=0) {
		url = url+idCalendrier+"-calendrier.json";
	}else{
		url = url+"cal.json";
	};
	
	var filtre = '?';

	if (annee) {
		filtre = filtre+'datecourante='+annee;
	};
	if (mois) {
		filtre = filtre+'-'+mois;
	};
	if (jour) {
		filtre = filtre+'-'+jour;
	};
	
	if (idType) {
		filtre = filtre+'&filtreType='+idType;
	};
	
	if (idLieu) {
		filtre = filtre+'&filtreLieu='+idLieu;
	};
	
	if (intervalle) {
		//filtre = filtre+'&intervalle='+dateFinIntervalle; // passe pas avec l'heure !!
		filtre = filtre+'&intervalle='+intervalle;
	};
	
	// recharge la page avec les bons filtres.
	var url = baseUrl+url+filtre;
//	console.log(url);
	
	//	var url = baseUrl+ "/ecoical/agenda/cal.json"+"?datecourante="+annee+"-"+mois+"-"+jour;
		app.fetchJsonSource(url);
		
		
		// va au mois suivant.
		$('a#boutonSuivant').click(function() {
			app.jourSuivant();
			return false;
		 });
		
		// va au mois précédent.
		$('a#boutonPasse').click(function() {
			app.jourPrecedent();
			return false;
		 });

		// exportation pdf
		$('a#lienExportPdf').click(function() {
			app.refreshFilterPdf();
			return false;
		 });
		
		//////////// filtres //////////
		$('#choixVue').change(app.refreshFilter);
		$('#choixJour').change(app.refreshFilter);
		$('#choixMois').change(app.refreshFilter);
		$('#choixAnnee').change(app.refreshFilter);
		$('#choixFormat').change(app.refreshFilter);
		
		$('#filtreTye').change(app.refreshFilter);
		$('#filtreNoVp').change(app.refreshFilter);
		$('#sendTags').click(app.refreshFilter);
		$('#filtreCalendrier').change(app.refreshFilter);
		$('#filtreLieu').change(app.refreshFilter);
					
	}); // ready
	
	
	// objet qui contient toutes les fonctions utiles de mon application
	function Application(){
		
		/*
		 *  Fonction qui ajoute une carte avec des données neuchâteloises
		 */
		this.addGMapNeuchatel = function(option){
			if (GBrowserIsCompatible()) {
				map = new GMap2(document.getElementById("map"));

				// Create tile layers
		
				// une couche holistic ortho
				// var tileHolistic = new GTileLayer(new GCopyrightCollection("sitn"),15,19);
				// tileHolistic.myLayers ='orthos_2006_0';
				// tileHolistic.myFormat ='image/jpeg'; // image/png; mode=24bit
				// tileHolistic.myBaseURL ='http://sitn.ne.ch/ogc-sitn-ecoparc/wms?';
				// 		    	tileHolistic.getTileUrl = CustomGetTileUrl;
				// 		
				// var tileHolisticPlan = new GTileLayer(new GCopyrightCollection("sitn"),15,15);
				// tileHolisticPlan.myLayers ='plan_ville_15000';
				// tileHolisticPlan.myFormat ='image/jpeg';
				// tileHolisticPlan.myBaseURL ='http://sitn.ne.ch/ogc-sitn-ecoparc/wms?';
				// 		    	tileHolisticPlan.getTileUrl = CustomGetTileUrl;
				// 		
				// var tileHolisticPlan10000 = new GTileLayer(new GCopyrightCollection("sitn"),16,17);
				// tileHolisticPlan10000.myLayers ='plan_ville_10000';
				// tileHolisticPlan10000.myFormat ='image/jpeg';
				// tileHolisticPlan10000.myBaseURL ='http://sitn.ne.ch/ogc-sitn-ecoparc/wms?';
				// 		    	tileHolisticPlan10000.getTileUrl = CustomGetTileUrl;
		
				var tileOrtho= new GTileLayer(new GCopyrightCollection("sitn"),1,17);
				tileOrtho.myLayers='ortho'; // ombrage_mnt25,ombrage_laser_terrain,plan_ensemble,ortho,communes
				tileOrtho.myFormat='image/jpeg';
				tileOrtho.myBaseURL='http://sitn.ne.ch/ogc-sitn-open/wms?';
			//	tileOrtho.myBaseURL='http://sitn.ne.ch/ogc-sitn-plantes-invasives/wms?';
		    	tileOrtho.getTileUrl=CustomGetTileUrl;
		
				var layer1=[G_NORMAL_MAP.getTileLayers()[0]]; 
				var layer2=[tileOrtho]; 
				var layer3=[G_HYBRID_MAP.getTileLayers()[0]];
				// var layer6=[tileHolistic];
				// var layer7=[tileHolisticPlan];
				// var layer8=[tileHolisticPlan10000];
				
				
				var cartePlanGoogle = new GMapType(layer1, G_SATELLITE_MAP.getProjection(), "Plan", G_SATELLITE_MAP);
				var carteNeuch = new GMapType(layer2, G_SATELLITE_MAP.getProjection(), "Photos Neuchâtel", G_SATELLITE_MAP);
		    	var carteOrthoGoogle = new GMapType(layer3, G_SATELLITE_MAP.getProjection(), "Photos Google", G_SATELLITE_MAP);
				// var carteHolistic = new GMapType(layer6, G_SATELLITE_MAP.getProjection(), "Holistic", G_SATELLITE_MAP);
				// 			var carteHolisticPlan = new GMapType(layer7, G_SATELLITE_MAP.getProjection(), "Plan Neuch", G_SATELLITE_MAP);
				// 			var carteHolisticPlan10000 = new GMapType(layer8, G_SATELLITE_MAP.getProjection(), "Plan Neuch2", G_SATELLITE_MAP);
				
				
		
				map.getMapTypes().length = 0;
		    	map.addMapType(cartePlanGoogle);
				map.addMapType(carteNeuch);
		    	map.addMapType(carteOrthoGoogle);
				// map.addMapType(carteHolistic);
				// map.addMapType(carteHolisticPlan);
				// map.addMapType(carteHolisticPlan10000);

				map.setCenter(new GLatLng(47.00601167615606,6.77032470703125), 11,carteNeuch);
				
				// ajoute les contrôles
				map.addControl(new GLargeMapControl());
				map.addControl(new GMapTypeControl());
			}else{
				alert("Sorry, the Google Maps API is not compatible with this browser");
			}
		}
		
		/*
		 *  crée un marker avec une info bulle
		 */
		this.createInfoMarker = function(point,html){
			var marker = new GMarker(point);
			GEvent.addListener(marker, "click", function() {
				marker.openInfoWindowHtml(html);
			});
			return marker;
		}
		
		/*
		 *  crée un marker avec une info bulle
		 */
		this.createInfoMarker2 = function(point,id,couleur){
			var icon = new GIcon(G_DEFAULT_ICON, "http://chart.apis.google.com/chart?cht=mm&chs=20x34&chco="+couleur+","+couleur+",000000&ext=.png");	
			var marker = new GMarker(point,icon);
			GEvent.addListener(marker, "click", function() {
				app.showEvenementDetail(id);
			});
			return marker;
		}
		
		
		
		/*
		 *  Demande la création de marker en fonction d'une liste json
		 */
		this.addJsonMarker = function(jsonSource){
			//console.log("parse json");
			// parse les données json pour en faire un vrai tableau
			var jsonData = eval('(' + jsonSource + ')');
			
		//	console.log("donnée json parsée");
			
			// crée un marker infobulle pour chaque événement
	        for (var i=0; i<jsonData.evenements.length; i++) {
				var lat = parseFloat(jsonData.evenements[i].latLieu);
				var lng = parseFloat(jsonData.evenements[i].longLieu);
				if (lat!=0 && lng!=0) {
					var point = new GLatLng(lat,lng);
					var idEvent = jsonData.evenements[i].id;
					var couleur = jsonData.evenements[i].calendrierCouleur;
					// var nom = '<h2>'+jsonData.evenements[i].nom+'</h2>';
					// 					var dateDebut = jsonData.evenements[i].dateDebut+', '+jsonData.evenements[i].heureDebut;
					// 					var dateFin = jsonData.evenements[i].dateFin+', '+jsonData.evenements[i].heureFin;
					// 					var contact = jsonData.evenements[i].infoPrenom+' '+jsonData.evenements[i].infoNom+' '+jsonData.evenements[i].infoTel;
					// 					var nomLieu = jsonData.evenements[i].nomLieu;
					// 					var html = nom+'du '+dateDebut+'<br />au '+dateFin+'<br /><br />lieu: '+nomLieu+'<br />contact: '+contact+'<br />';
					var marker = app.createInfoMarker2(point,idEvent,couleur);
					map.addOverlay(marker);
				};
			}
		}
		
		/*
		 *  va chercher les données JSON
		 */
		this.fetchJsonSource = function(url){
		//	console.log("va chercher: "+url);
			GDownloadUrl(url, app.addJsonMarker);
		}
		
		/*
		 *  Fonction qui compose une url à partir des valeurs actuelles des filtres.
		 */
		this.refreshFilter = function(){
			
			var baseUrl = $('#baseUrl').val(); // http://erenweb.ecodev.ch
			
			var vue = $('#choixVue').val();
			var mois = $('#choixMois').val();
			var annee = $('#choixAnnee').val();
			var jour = $('#choixJour').val();
			var idType = $('#filtreTye').val();
			var noVp = $('#filtreNoVp').val();
			var tagsVirgule = $('#filtreTags').val();
			var idCalendrier = $('#filtreCalendrier').val();
			var idLieu = $('#filtreLieu').val();
			var format = $('#choixFormat').val();
			var intervalle = $('#intervalle').val();
			
			var url = chemin+"agenda/";
			
			var tagsUrl = tagsVirgule.split(',');
			
			for (var i=0; i < tagsUrl.length; i++) {
				if (tagsUrl[i]) {
					url = url+tagsUrl[i]+'/';
				};
			};

			if (noVp) {
				url = url+noVp+'/';
			};
			
			if (idCalendrier!=0) {
				url = url+idCalendrier+"-calendrier."+format;
			};
			
			var filtre = '?';

			if (vue) {
				filtre = filtre+'vue='+vue;
			};
			if (annee) {
				filtre = filtre+'&datecourante='+annee;
			};
			if (mois) {
				filtre = filtre+'-'+mois;
			};
			if (jour) {
				filtre = filtre+'-'+jour;
			};
			
			if (idType) {
				filtre = filtre+'&filtreType='+idType;
			};
			
			if (idLieu) {
				filtre = filtre+'&filtreLieu='+idLieu;
			};
			
			if (intervalle) {
				filtre = filtre+'&intervalle='+intervalle;
			};
			
			// recharge la page avec les bons filtres.
			window.location.href = baseUrl+url+filtre;
		}
		
		
		/*
		 *  refresh de la page
		 */
		this.refreshPage = function(){
			url = window.location.href;
			window.location.href = url;
		}
		
			/*
			 *  Fonction qui compose une url à partir des valeurs actuelles des filtres.
			 */
			this.refreshFilterPdf = function(){

				var baseUrl = $('#baseUrl').val(); // http://erenweb.ecodev.ch

				var vue = $('#choixVue').val();
				var mois = $('#choixMois').val();
				var annee = $('#choixAnnee').val();
				var jour = $('#choixJour').val();
				var idType = $('#filtreTye').val();
				var noVp = $('#filtreNoVp').val();
				var tagsVirgule = $('#filtreTags').val();
				var idCalendrier = $('#filtreCalendrier').val();
				var idLieu = $('#filtreLieu').val();
				var intervalle = $('#intervalle').val();
				var format = 'pdf';
				// console.log(tagsVirgule);

				var url = chemin+"agenda/";

				var tagsUrl = tagsVirgule.split(',');

				for (var i=0; i < tagsUrl.length; i++) {
					if (tagsUrl[i]) {
						url = url+tagsUrl[i]+'/';
					};
				};

				if (noVp) {
					url = url+noVp+'/';
				};

				if (idCalendrier!=0) {
					url = url+idCalendrier+"-calendrier."+format;
				};

				var filtre = '?';

				if (vue) {
					filtre = filtre+'vue='+vue;
				};
				if (annee) {
					filtre = filtre+'&datecourante='+annee;
				};
				if (mois) {
					filtre = filtre+'-'+mois;
				};
				if (jour) {
					filtre = filtre+'-'+jour;
				};

				if (idType) {
					filtre = filtre+'&filtreType='+idType;
				};

				if (idLieu) {
					filtre = filtre+'&filtreLieu='+idLieu;
				};
				
				if (intervalle) {
					filtre = filtre+'&intervalle='+intervalle;
				};

				//console.log(baseUrl+url+filtre);
				// recharge la page avec les bons filtres.
				window.location.href = baseUrl+url+filtre;
			}
		
		
		/*
		 *  Fonction qui compose une url pour aller au mois suivant en tenant compte des valeurs actuelles des filtres.
		 */
		this.moisSuivant = function(){
			
			var baseUrl = $('#baseUrl').val(); // http://erenweb.ecodev.ch
			var vue = $('#choixVue').val();
			var dateMoisSuivant = $('#dateMoisProchain').val();
			
			var idType = $('#filtreTye').val();
			var noVp = $('#filtreNoVp').val();
			var tagsVirgule = $('#filtreTags').val();
			var idCalendrier = $('#filtreCalendrier').val();
			var idLieu = $('#filtreLieu').val();
			
			var url = chemin+"agenda/";
			var tagsUrl = tagsVirgule.split(',');
			
			for (var i=0; i < tagsUrl.length; i++) {
				if (tagsUrl[i]) {
					url = url+tagsUrl[i]+'/';
				};
			};
			
			if (noVp) {
				url = url+noVp+'/';
			};
			
			if (idCalendrier!=0) {
				url = url+idCalendrier+"-calendrier.html";
			};
			
			var filtre = '?';

			if (vue) {
				filtre = filtre+'vue='+vue;
			};
			if (dateMoisSuivant) {
				filtre = filtre+'&datecourante='+dateMoisSuivant;
			};
			if (idType) {
				filtre = filtre+'&filtreType='+idType;
			};
			
			if (idLieu) {
				filtre = filtre+'&filtreLieu='+idLieu;
			};
						
			// recharge la page avec les bons filtres.
			window.location.href = baseUrl+url+filtre;
		}
		
		/*
		 *  Fonction qui compose une url pour aller au mois précédent en tenant compte des valeurs actuelles des filtres.
		 */
		this.moisPrecedent = function(){
			var baseUrl = $('#baseUrl').val(); // http://erenweb.ecodev.ch
			var vue = $('#choixVue').val();
			var dateMoisPasse = $('#dateMoisPasse').val();
			
			var idType = $('#filtreTye').val();
			var idEtat = $('#filtreEtat').val();
			var noVp = $('#filtreNoVp').val();
			var tagsVirgule = $('#filtreTags').val();
			var idCalendrier = $('#filtreCalendrier').val();
			var idLieu = $('#filtreLieu').val();
			
			var url = chemin+"agenda/";
			var tagsUrl = tagsVirgule.split(',');
			
			for (var i=0; i < tagsUrl.length; i++) {
				if (tagsUrl[i]) {
					url = url+tagsUrl[i]+'/';
				};
			};
			
			if (noVp) {
				url = url+noVp+'/';
			};
			
			if (idCalendrier!=0) {
				url = url+idCalendrier+"-calendrier.html";
			};
			
			var filtre = '?';

			if (vue) {
				filtre = filtre+'vue='+vue;
			};
			if (dateMoisPasse) {
				filtre = filtre+'&datecourante='+dateMoisPasse;
			};
			if (idType) {
				filtre = filtre+'&filtreType='+idType;
			};
			
			if (idLieu) {
				filtre = filtre+'&filtreLieu='+idLieu;
			};
						
			// recharge la page avec les bons filtres.
			window.location.href = baseUrl+url+filtre;
		}
		
		
		/*
		 *  Fonction qui compose une url pour aller au jour suivant en tenant compte des valeurs actuelles des filtres.
		 */
		this.jourSuivant = function(){
			
			var baseUrl = $('#baseUrl').val(); // http://erenweb.ecodev.ch
			var vue = $('#choixVue').val();
			var dateJourSuivant = $('#dateJourProchain').val();
			
			var idType = $('#filtreTye').val();
			var noVp = $('#filtreNoVp').val();
			var tagsVirgule = $('#filtreTags').val();
			var idCalendrier = $('#filtreCalendrier').val();
			var idLieu = $('#filtreLieu').val();
			var intervalle = $('#intervalle').val();
			
			var url = chemin+"agenda/";
			var tagsUrl = tagsVirgule.split(',');
			
			for (var i=0; i < tagsUrl.length; i++) {
				if (tagsUrl[i]) {
					url = url+tagsUrl[i]+'/';
				};
			};
			
			if (noVp) {
				url = url+noVp+'/';
			};
			
			if (idCalendrier!=0) {
				url = url+idCalendrier+"-calendrier.html";
			};
			
			var filtre = '?';

			if (vue) {
				filtre = filtre+'vue='+vue;
			};
			if (dateJourSuivant) {
				filtre = filtre+'&datecourante='+dateJourSuivant;
			};
			if (idType) {
				filtre = filtre+'&filtreType='+idType;
			};
			
			if (idLieu) {
				filtre = filtre+'&filtreLieu='+idLieu;
			};
			if (intervalle) {
				filtre = filtre+'&intervalle='+intervalle;
			};
						
			// recharge la page avec les bons filtres.
			window.location.href = baseUrl+url+filtre;
		}
		
		/*
		 *  Fonction qui compose une url pour aller au jour précédent en tenant compte des valeurs actuelles des filtres.
		 */
		this.jourPrecedent = function(){
			var baseUrl = $('#baseUrl').val(); // http://erenweb.ecodev.ch
			var vue = $('#choixVue').val();
			var dateJourPasse = $('#dateJourPasse').val();
			
			var idType = $('#filtreTye').val();
			var idEtat = $('#filtreEtat').val();
			var noVp = $('#filtreNoVp').val();
			var tagsVirgule = $('#filtreTags').val();
			var idCalendrier = $('#filtreCalendrier').val();
			var idLieu = $('#filtreLieu').val();
			var intervalle = $('#intervalle').val();
			
			var url = chemin+"agenda/";
			var tagsUrl = tagsVirgule.split(',');
			
			for (var i=0; i < tagsUrl.length; i++) {
				if (tagsUrl[i]) {
					url = url+tagsUrl[i]+'/';
				};
			};
			
			if (noVp) {
				url = url+noVp+'/';
			};
			
			if (idCalendrier!=0) {
				url = url+idCalendrier+"-calendrier.html";
			};
			
			var filtre = '?';

			if (vue) {
				filtre = filtre+'vue='+vue;
			};
			if (dateJourPasse) {
				filtre = filtre+'&datecourante='+dateJourPasse;
			};
			if (idType) {
				filtre = filtre+'&filtreType='+idType;
			};
			
			if (idLieu) {
				filtre = filtre+'&filtreLieu='+idLieu;
			};
			if (intervalle) {
				filtre = filtre+'&intervalle='+intervalle;
			};
						
			// recharge la page avec les bons filtres.
			window.location.href = baseUrl+url+filtre;
		}
		
		
		/*
		 *  masque la boite de dialogue
		 */
		this.hideMasque = function(html){
			$('#boiteDialogueEvent').hide();
			$('#masque').hide();
		}
		
		/*
		 *  affiche la boite de dialogue
		 */
		this.showMasque = function(html){
			$('#masque').show();
			$('#boiteDialogueEvent').show();
		}

		/*
		 *  affiche le détail d'un événement dans une boite en avant plan
		 */
		this.showEvenementDetail = function(id){
			var url = chemin+"event/"+id+"-evenement.html";
			
			app.showMasque();
			
			// url , param, fonction de callback
			$.get(url,{'theme':"no"},app.afficheFormulaireUpdate);
		}
		
		
		/*
		 *  Affiche, dans le div en question le contenu html qui provient de la requête ajax.
		 */
		this.afficheFormulaireUpdate = function(html){
			$('#boiteDialogueEvent').empty().append(html);

				// bouton cancel qui ferme la fenêtre modale
				$('a#cancelEvenement').click(function() {
					app.hideMasque();
					return false;
				 });
				
				var idLieu = $('#lieuDetail').val();
		}
		
		
	} // Application
  });
})(jQuery);

function email(user,domain,label,link) {
				var address = user+'@'+domain;
				var toWrite = '';
				if (link > 0) {toWrite += '<a href="mailto:'+address+'">';}
				if (label != '') {toWrite += label;} else {toWrite += address;}
				if (link > 0) {toWrite += '</a>';}
				document.write(toWrite);
}