Subversion Repositories Sites.obs-saisons.fr

Rev

Rev 240 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
237 aurelien 1
var map = null;
2
var tableau_marqueurs = new Array();
3
var infowindow = new google.maps.InfoWindow();
4
var infos_observations = new Array();
5
 
6
var type_espece = '0';
7
var espece = '0';
8
var evenement = '0';
9
var annee = '0';
10
var mois = '0';
11
var jour = '0';
12
var departement = '0';
13
 
14
var tableau_couleurs = new Array("#A9582B", "#8DC7B8","#ED9355","#A7BD5B",
15
		"#FFC730","#0000FF","#CC4369","#9CA6A2",
16
		"#F7E4A2","#DC574E","#3F6CA9","#DC6C4B",
17
		"#E8A794","#9B5F95","#E78EDE","#45808A",
18
		"#168F47","#C9A838","#F2EAD8","#1A5561",
19
		"#6D883A");
20
 
21
liste_mois = new Array("jan","fev","mar","avr","mai","jun","jui","aou","sep","oct","nov","dec");
22
 
23
evenements_debut_annee = new Array("")
24
 
25
var tableau_couleurs_en_cours = new Array();
26
 
27
var timerSlider = null;
28
 
29
function getUrlBaseJrest() {
30
	return urlBaseJrest;
31
}
32
 
33
function traiterParametresUrl() {
34
 
35
	var vars = [], hash;
36
	var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
37
	for(var i = 0; i < hashes.length; i++)
38
	{
39
	    hash = hashes[i].split('=');
40
	    vars.push(hash[0]);
41
	    vars[hash[0]] = hash[1];
42
	}
43
 
44
	if(vars['type_espece'] != null) {
45
		type_espece = vars['type_espece'];
46
		$('#selecteur_liste_types_especes').val(type_espece);
47
	}
48
 
49
	if(vars['espece'] != null) {
50
		if(type_espece != '0') {
51
			modifierTableauEspeces();
52
		}
53
		espece = vars['espece'];
54
		$('#selecteur_especes').val(espece);
55
 
56
	}
57
 
58
	if(vars['evenement'] != null) {
59
		if(espece != 0) {
60
			modifierTableauEvenement()
61
		}
62
		evenement = vars['evenement'];
63
		$('#selecteur_evenements').val(evenement);
64
	}
65
 
66
	if(vars['annee'] != null) {
67
		annee = vars['annee'];
68
		$('#selecteur_liste_annees').val(annee);
69
	} else {
70
		date = new Date()
71
		annee = date.getFullYear();
72
		$('#selecteur_liste_annees').val(annee);
73
	}
74
 
75
	if(vars['mois'] != null) {
76
		mois = vars['mois'];
77
	} else {
78
		date = new Date()
79
	}
80
 
81
	if(vars['departement'] != null) {
82
		departement = vars['departement'];
83
	}
84
 
85
	if(vars['cacher_criteres'] != null && vars['cacher_criteres'] == '1') {
86
		$(".criteres").hide();
87
	}
88
}
89
 
90
function obtenirCodeWidget() {
91
 
92
	var UrlBase = window.location;
93
	UrlBase += '?';
94
	if(type_espece != '0') UrlBase += "type_espece="+type_espece;
95
	if(espece != '0') UrlBase += "&espece="+espece;
96
	if(evenement != '0') UrlBase += "&evenement="+evenement;
97
	if(annee != '0') UrlBase += "&annee="+annee;
98
	if(mois != '0') UrlBase += "&mois="+mois;
99
	UrlBase += "&cacher_criteres=1";
100
 
101
	code_widget = '<iframe src="'+UrlBase+'" width="375px" height="470px"><p>Votre navigateur ne supporte pas les iframes.</p></iframe>'
102
 
103
	return code_widget;
104
}
105
 
106
$('#lien_cette_recherche').ready(function() {
107
	$('#lien_cette_recherche').click(function() {
108
		window.alert(obtenirCodeWidget());
109
		return false;
110
	});
111
});
112
 
113
$(document).ready(function() {
114
	traiterParametresUrl();
115
});
116
 
117
/**
118
************************************************************************************************
119
************************************************************************************************
120
 
121
    Fonctions concernant les gestion des filtres sur la carte
122
 
123
************************************************************************************************
124
************************************************************************************************
125
**/
126
 
127
function setDateSlider() {
128
	numeroJour = $("#slider_date").slider("value");
129
	dateObs = new Date(annee,0,0);
130
	dateObs.setDate(dateObs.getDate()+numeroJour);
131
 
132
	mois = dateObs.getMonth();
133
	jour = dateObs.getDay();
134
	afficherObservations();
135
}
136
 
137
function InitialiserIntervalleDateSlider() {
138
 
139
}
140
 
141
/*function est une anneeBissextile(
142
		return eval(an%4)==0 && !(eval(an%100)== 0 && eval(an%400)==0));
143
}*/
144
 
145
function initialiserSliderDates() {
146
 
147
	date_min = 1;
148
	date_max = 365;
149
 
150
	$("#slider_date").slider({
151
								min: date_min,
152
								max: date_max,
153
								value: mois
154
							});
155
 
156
	taille_criteres = Math.round($("#slider_date").width()/(liste_mois.length));
157
 
158
	valeurs_slider = '<table id="table_dates"><tbody><tr>';
159
 
160
	for (i in liste_mois) {
161
		valeurs_slider += '<td class="conteneur_date">'+liste_mois[i]+'</td>';
162
	}
163
 
164
	valeurs_slider += '</tr></tbody></table>';
165
 
166
	$("conteneur_date").css(".conteneur_date{ width:"+taille_criteres+"px;}");
167
 
168
	$("#valeurs_date").html(valeurs_slider);
169
 
170
	$("#slider_date").bind("slidestop", function(event, ui) {
171
		setDateSlider();
172
		return true;
173
	});
174
 
175
	$(window).bind("resize", resizeWindow);
176
	function resizeWindow( e ) {
177
		taille_criteres = Math.round($("#slider_date").width()/(liste_mois.length));
178
		$("#css_slider").html(".conteneur_date{ width:"+taille_criteres+"px;}");
179
	}
180
}
181
 
182
function initialiserListeTypesEspeces() {
183
 
184
	$('#selecteur_liste_types_especes').change(function() {
185
		type_espece = $('select#selecteur_liste_types_especes option:selected').val();
186
		modifierTableauEspeces();
187
		obtenirObservations();
188
	});
189
}
190
 
191
function modifierTableauEspeces() {
192
 
193
	id_type_espece = $('select#selecteur_liste_types_especes option:selected').val();
194
 
195
	elements_liste = tableau_especes[id_type_espece];
196
 
197
	var nb_couleur = 0;
198
 
199
	chaine_elements_liste = '';
200
	chaine_elements_liste += '<select id="selecteur_liste_especes" name="selecteur_liste_especes">';
201
	for(i in elements_liste) {
202
		chaine_elements_liste += '<option class="option_espece" value="'+i+'"> '+elements_liste[i]+' </option>';
203
	}
204
	chaine_elements_liste += '</select>';
205
 
206
	$('#conteneur_selecteur_liste_especes').html(chaine_elements_liste);
207
}
208
 
209
function initialiserListeEspeces() {
210
 
211
	$('#selecteur_liste_especes').live('change', function() {
212
		modifierTableauEvenements();
213
		obtenirObservations();
214
	});
215
}
216
 
217
function getEspeceSelectionnee() {
218
 
219
	var espece_selectionnee = $('.option_espece:selected').val();
220
	espece = espece_selectionnee;
221
 
222
	return espece_selectionnee;
223
}
224
 
225
function modifierTableauEvenements() {
226
 
227
	espece_selectionnee = getEspeceSelectionnee();
228
 
229
	if(espece_selectionnee == null ) {
230
		espece = '0';
231
	}
232
 
233
	evenements_especes = tableau_evenements_especes[espece_selectionnee];
234
	liste_evenements_cette_espece = evenements_especes.split(',');
235
 
236
	elements_liste = new Array();
237
 
238
	for(j in liste_evenements_cette_espece) {
239
		elements_liste[j] = liste_evenements_cette_espece[j];
240
	}
241
 
242
	chaine_elements_liste = '';
243
	chaine_elements_liste = '<option value="0" class="espece_type_0" selected="selected"> tous les ev&egrave;nements </option>';
244
	for(i in elements_liste) {
245
		chaine_elements_liste += '<option value='+elements_liste[i]+'>'+tableau_evenements[elements_liste[i]]+'</option>';
246
	}
247
 
248
	$('#selecteur_evenements').html(chaine_elements_liste);
249
}
250
 
251
function initialiserListeEvenements() {
252
 
253
	$('#selecteur_evenements').change(function() {
254
		evenement = $('select#selecteur_evenements option:selected').val();
255
		obtenirObservations();
256
	});
257
}
258
 
259
function initialiserListeAnnees() {
260
 
261
	var date = new Date();
262
	var cette_annee = date.getFullYear();
263
 
264
	var chaine_element_date = '';
265
	var nb_couleur = 0;
266
 
267
	chaine_element_date = '<div class="critere" id="selecteur_liste_annees">';
268
 
269
	for(var i = cette_annee; i >= cette_annee - 5; i--) {
270
		chaine_element_date += '<span class="legende" style="background-color:'+tableau_couleurs[nb_couleur]+'"></span>';
271
		chaine_element_date += '<input class="selecteur_date" type="checkbox" id="annee_numero_'+i+'" name="selecteur_annees" value="'+i+'" />';
272
		chaine_element_date += '<label for="annee_numero_'+i+'">'+i+'</label><br />';
273
 
274
		tableau_couleurs_en_cours[i] = tableau_couleurs[nb_couleur];
275
		nb_couleur++;
276
	}
277
 
278
	chaine_element_date += '</div>';
279
 
280
	$('#conteneur_selecteur_liste_annees').html(chaine_element_date);
281
 
282
	$('#selecteur_liste_annees').change(function() {
283
 
284
		annee = '';
285
 
286
		$('.selecteur_date:checked').each(function(){
287
			annee += $(this).val()+',';
288
			i++;
289
		});
290
 
291
		if(annee.lastIndexOf( "," ) == annee.length - 1) {
292
			annee = annee.substring(0,annee.length - 1);
293
		}
294
		obtenirObservations();
295
	});
296
}
297
 
298
function incrementerValeurSlider() {
299
	var valeur_en_cours = $('#slider_date').slider("value");
300
	if($('#slider_date').slider("value") < $('#slider_date').slider("option", "max")) {
301
		valeur_en_cours++;
302
		$('#slider_date').slider("value",valeur_en_cours);
303
		setDateSlider();
304
	} else {
305
		clearInterval(timerSlider);
306
		$('#demarrer_slider').removeAttr('disabled');
307
	}
308
}
309
 
310
function initialiserBoutonsSlider() {
311
 
312
	$('#demarrer_slider').click(function() {
313
 
314
		if($('#slider_date').slider("value") == $('#slider_date').slider("option","max")) {
315
			min_slider = $('#slider_date').slider("option","min");
316
			$('#slider_date').slider("value",min_slider);
317
		}
318
 
319
		timerSlider = setInterval("incrementerValeurSlider()",150);
320
		$('#demarrer_slider').attr('disabled', 'disabled');
321
	});
322
 
323
	$('#arreter_slider').click(function() {
324
		if(timerSlider != null) {
325
			clearInterval(timerSlider);
326
			$('#demarrer_slider').removeAttr('disabled');
327
		}
328
	});
329
 
330
}
331
 
332
function initialiserValeursParDefaut() {
333
	id_type_espece = $('select#selecteur_liste_types_especes').val("2");
334
	modifierTableauEspeces();
335
	obtenirObservations();
336
}
337
 
338
$('#slider_date').ready(function() {
339
	initialiserSliderDates();
340
	initialiserBoutonsSlider();
341
	initialiserListeTypesEspeces();
342
	initialiserListeEspeces();
343
	initialiserListeEvenements();
344
	initialiserListeAnnees();
345
	initialiserValeursParDefaut();
346
});
347
 
348
 
349
/**
350
	************************************************************************************************
351
	************************************************************************************************
352
 
353
	    Fonctions concernant la carte permettant de pointer d'afficher l'emplacement des observation
354
 
355
	************************************************************************************************
356
	************************************************************************************************
357
**/
358
 
359
function initialiserCarte() {
360
 
361
	if($('#map_canvas').length == 0) {
362
		return;
363
	}
364
 
365
	var latlng = new google.maps.LatLng(47.0504, 2.2347);
366
	var myOptions = {
367
		zoom: 5,
368
		center: latlng,
369
		mapTypeId: google.maps.MapTypeId.HYBRID
370
	};
371
 
372
	map = new google.maps.Map(document.getElementById("map_canvas"),
373
    	myOptions);
374
 
375
	marker = new google.maps.Marker({
376
	      position: latlng,
377
	      title:""
378
	});
379
 
380
	$('.lien_vers_profil').live('click', function(event) {
381
		event.preventDefault();
382
		window.open($(this).attr('href'));
383
		return false;
384
	});
385
}
386
 
387
function obtenirObservations() {
388
 
389
	requete = '?annee='+annee;
390
 
391
	if(type_espece != '0' && espece == '0') {
392
		requete += '&type_espece='+type_espece;
393
	}
394
 
395
	if(espece != '0') {
396
		requete += '&espece='+espece;
397
	}
398
 
399
	if(evenement != '0') {
400
		requete += '&evenement='+evenement;
401
	}
402
 
403
	if(departement != '0') {
404
		requete += '&departement='+departement;
405
	}
406
 
407
	$.get(getUrlBaseJrest()+'OdsExport/ExportObservationJson/'+requete, function(data) {
408
 
409
		infos_observations = jQuery.parseJSON(data);
410
 
411
		if(tableau_marqueurs.length > 0) {
412
			viderMarqueurs();
413
		}
414
 
415
		for(i in infos_observations) {
416
			creerEtAjouterMarqueur(i, infos_observations[i]);
417
		}
418
 
419
		afficherObservations();
420
	});
421
}
422
 
423
function creerEtAjouterMarqueur(id_marqueur, infos_obs) {
424
 
425
	latlng = new google.maps.LatLng(infos_obs['latitude'],infos_obs['longitude']);
426
 
427
	var chaine_couleur = '';
428
 
429
	for(i in infos_obs.obs) {
430
		var observation = infos_obs.obs[i];
431
 
432
		if(typeof(tableau_couleurs_en_cours[observation.id_espece]) != 'undefined') {
433
			chaine_couleur += tableau_couleurs_en_cours[observation.id_espece]+",";
434
		}
435
	}
436
 
437
	chaine_couleur = chaine_couleur.slice(0,chaine_couleur.length - 1);
438
    var image = obtenirImagePourChaineCouleur(chaine_couleur);
439
 
440
 	tableau_marqueurs[id_marqueur] = new google.maps.Marker({
441
	      position: latlng,
442
	      title:infos_obs.evenenement,
443
	      icon:image,
444
	      optimized: false
445
	});
446
 
447
	google.maps.event.addListener(tableau_marqueurs[id_marqueur], 'click', function() {
448
 
449
		contenu_fenetre = formaterContenuFenetre(infos_obs.obs);
450
		infowindow.close();
451
		infowindow.content = contenu_fenetre;
452
		infowindow.open(map,this);
453
	});
454
 
455
	tableau_marqueurs[id_marqueur].setDraggable(false);
456
	tableau_marqueurs[id_marqueur].setClickable(true);
457
 
458
	tableau_marqueurs[id_marqueur].setMap(map);
459
 
460
}
461
 
462
function viderMarqueurs() {
463
 
464
	infowindow.close();
465
	for(i in tableau_marqueurs) {
466
		tableau_marqueurs[i].setMap(null);
467
	}
468
 
469
	tableau_marqueurs = new Array();
470
}
471
 
472
function afficherObservations() {
473
 
474
	var chaine_couleur = '';
475
 
476
	for(i in tableau_marqueurs) {
477
		id_obs = i;
478
		obs_associees = infos_observations[id_obs];
479
 
480
		afficher_marqueur = false;
481
		chaine_couleur = '';
482
 
483
		for(j in obs_associees.obs) {
484
 
485
			date_obs = obs_associees.obs[j].date;
486
			afficher_marqueur = dateEstDansIntervalle(date_obs);
487
 
488
			if(afficher_marqueur) {
489
				if(typeof(tableau_couleurs_en_cours[date_obs.getFullYear()]) != 'undefined') {
490
					chaine_couleur += tableau_couleurs_en_cours[date_obs.getFullYear()]+",";
491
				}
492
			}
493
		}
494
 
495
		if(afficher_marqueur && chaine_couleur != '') {
496
			chaine_couleur = chaine_couleur.slice(0,chaine_couleur.length - 1);
497
		    var image = obtenirImagePourChaineCouleur(chaine_couleur);
498
			tableau_marqueurs[i].setIcon(image);
499
 
500
			if(!tableau_marqueurs[i].getVisible()) {
501
				tableau_marqueurs[i].setVisible(true);
502
			}
503
		} else {
504
			tableau_marqueurs[i].setVisible(false);
505
		}
506
	}
507
}
508
 
509
function obtenirImagePourChaineCouleur(chaine_couleur) {
510
 
511
	chaine_couleur = encodeURIComponent(chaine_couleur);
512
	var image = getUrlBaseJrest()+"OdsMarqueur/point?couleurs="+chaine_couleur;
513
 
514
    return image;
515
}
516
 
517
function convertirDateObsVersJs(chaine_date) {
518
 
519
	tableau_date = chaine_date.split('/');
520
	date_obs = new Date();
521
 
522
	date_obs.setDate(tableau_date[0]);
523
	date_obs.setMonth(tableau_date[1]);
524
	date_obs.setFullYear(tableau_date[2]);
525
 
526
	return date_obs;
527
}
528
 
529
function dateEstDansIntervalle(t_obs) {
530
 
531
	date_obs = convertirDateObsVersJs(t_obs);
532
 
533
	dans_intervalle = false;
534
 
535
	var dateDebutAnnee = new Date();
536
	dateDebutAnnee.setDate(1);
537
	dateDebutAnnee.setMonth(1);
538
	dateDebutAnnee.setFullYear(date_obs.getFullYear());
539
	var quantieme = (date_obs.getTime() - dateDebutAnnee.getTime()) / (24 * 3600 * 1000)+1;
540
 
541
	if($('#slider_date').slider("value") >= quantieme) {
542
		dans_intervalle = true;
543
	}
544
 
545
	return dans_intervalle;
546
}
547
 
548
function comparerDates(date_1, date_2){
549
	diff = date_1.getTime()-date_2.getTime();
550
	return (diff==0?diff:diff/Math.abs(diff));
551
}
552
 
553
function obtenirMarqueurPourStade(stade) {
554
 
555
	iconeStade = '../images/marqueur_'+stade+'.png';
556
 
557
	return iconeStade;
558
}
559
 
560
function formaterContenuFenetre(infos_obs) {
561
 
562
	contenu_fenetre = '';
563
	date_courante = new Date(annee,mois,jour);
564
 
565
	for(i in infos_obs) {
566
 
567
		t_obs = infos_obs[i].date;
568
 
569
		if(dateEstDansIntervalle(t_obs)) {
570
			nom_stade ='';
571
			if(infos_obs[i].code_bbch != '') {
572
				nom_stade = ' stade '+infos_obs[i].code_bbch;
573
			}
574
 
575
			contenu_fenetre += '<div class="fenetre_infos">';
576
			contenu_fenetre += '<div class="nom_sci">'+infos_obs[i].nom_scientifique+'</div>';
577
			contenu_fenetre += '<div class="nom_sci">'+infos_obs[i].evenenement+nom_stade+'</div>';
578
			contenu_fenetre += '<div class="date_obs"> Observ&eacute; le : '+infos_obs[i].date+' </div>';
579
			contenu_fenetre += construireUrlProfilParticipant(infos_obs[i].participant);
580
			contenu_fenetre += '</div><br />';
581
		}
582
	}
583
 
584
	return contenu_fenetre;
585
}
586
 
587
function construireUrlProfilParticipant(id) {
588
	return '<a class="lien_vers_profil" href="http://obs-saisons.fr/user/'+id+'"> Voir l\'auteur </a>';
589
}
590
 
591
 
592
$('#map_canvas').ready(function() {
593
	initialiserCarte();
594
});