Subversion Repositories Sites.obs-saisons.fr

Rev

Rev 210 | Rev 224 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
207 aurelien 1
function getUrlBaseJrest() {
2
 
3
	url_page_courante = document.URL;
4
 
5
	if(url_page_courante.indexOf('http://www.') != -1) {
6
		return urlBaseJrest;
7
	} else {
8
		return urlBaseJrest.replace('http://www.','http://');
9
	}
10
}
11
 
54 aurelien 12
/**
13
	************************************************************************************************
14
	************************************************************************************************
15
 
16
	   Fonction permettant de transformer les élements de la classe pliage en accordéon
17
 
18
	************************************************************************************************
19
	************************************************************************************************
20
**/
21
function initialiserElementsPliables() {
22
 
23
	$('.pliage h4').addClass('lien_pliage');
24
 
25
	$('.pliage ul').hide();
26
	$('.pliage > ul:first-child').hide();
207 aurelien 27
 
188 aurelien 28
	$('.1er_element_date ul').show();
29
	$('.1er_element_date > ul:first-child').show();
54 aurelien 30
 
31
	$('.lien_pliage').bind('click', function() {
32
 
33
		$(this).nextAll('ul').slideToggle();
34
		return false;
35
	});
36
}
37
 
38
$('.pliage').ready(function() {
39
	initialiserElementsPliables();
40
});
41
 
42
 
43
/**
44
	************************************************************************************************
45
	************************************************************************************************
46
 
47
	   Fonctions de gestion des onglets du formulaire de saisie d'espèce
48
 
49
	************************************************************************************************
50
	************************************************************************************************
51
**/
52
function initialiserOnglets() {
53
	$(".contenu_onglet").hide();
54
	$("ul.liste_onglets li:first").addClass("active").show();
55
	$(".contenu_onglet:first").show();
56
 
57
	$("ul.liste_onglets li").click(function() {
58
 
59
		$("ul.liste_onglets li").removeClass("active");
60
		$(this).addClass("active");
61
		$(".contenu_onglet").hide();
62
 
63
		var activeTab = $(this).find("a").attr("href");
64
		$(activeTab).fadeIn();
65
		return false;
66
	});
67
}
68
 
69
$('.contenu_onglet').ready(function() {
70
	initialiserOnglets();
71
});
72
 
73
function agrandirZoneCLicBoutonsRadios() {
74
 
75
	$('.formulaire_informations_espece_mini').addClass("element_cliquable");
76
 
77
	$('#form_saisie_espece').children('input[type="submit"]').hide();
78
	$('.formulaire_informations_espece_mini').children('input[type="radio"]').hide();
79
	$('.titre_type').hide();
80
 
81
	$('.formulaire_informations_espece_mini').bind('click',function() {
82
		$(this).children('input[type="radio"]').attr('checked','checked');
83
		$('.formulaire_informations_espece_mini').removeClass('element_clique');
84
		$(this).addClass('element_clique');
85
 
86
		$('#form_saisie_espece').submit();
87
	});
88
}
89
 
90
$('#form_saisie_espece').ready(function() {
91
	agrandirZoneCLicBoutonsRadios();
92
});
93
 
94
 
207 aurelien 95
 
96
 
54 aurelien 97
/**
98
	************************************************************************************************
99
	************************************************************************************************
100
 
101
	   Fonctions permettant de transformer les cases du tableau d'évenements en mini formulaire
102
 
103
	************************************************************************************************
104
	************************************************************************************************
105
**/
106
 
107
htmlEnCours = '';
108
elementEnCours = null;
216 aurelien 109
ancienneValeurEnCours = null;
54 aurelien 110
 
111
function initialiserLignesCliquables() {
112
 
113
	$('.conteneur_element_modifier').hide();
114
 
115
	$(".date_observation_individu").each(function() {
116
 
117
		$(this).bind('click', function() {
118
 
119
			if($(this).hasClass('element_clique')) {
120
				return false;
121
			} else {
122
 
123
				conteneur_obs = $(this).children('span');
124
				id_formulaire = conteneur_obs.attr('id');
125
 
126
				remplacerElementDateParFormulaireAjax(id_formulaire, $(this));
127
 
128
				return false;
129
			}
130
		});
131
	});
132
}
133
 
134
function initialiserCalendrierFormulaire() {
135
 
216 aurelien 136
	anneeEnCours = getAnneeEnCoursDeConsultation();
54 aurelien 137
 
138
	$(".calendrier").each(function() {
139
		$(this).find("input").datepicker({
140
			disabled: true,
141
			altFormat: 'dd/mm/yyyy',
142
			minDate: '01/01/'+anneeEnCours,
143
			maxDate: '31/12/'+anneeEnCours
144
 
145
		});
146
	});
147
}
148
 
149
$(document).ready(function() {
150
	initialiserCalendrierFormulaire();
151
 
152
});
153
 
90 aurelien 154
function estUneDateValide(peutEtreUneDate) {
155
	var reg= new RegExp("^[0-3][0-9][/]{1}[0-1][0-2][/]{1}[0-9]{4}$","g");
156
	return reg.test(peutEtreUneDate);
157
}
158
 
216 aurelien 159
function getAnneeEnCoursDeConsultation() {
54 aurelien 160
 
161
	anneeEnCours = jQuery.trim($("#annee_en_cours").html());
162
 
163
	if(typeof(anneeEnCours)=='undefined'){
164
		dateCourante = new Date();
165
		anneeEnCours = dateCourante.getFullYear();
166
	}
167
 
216 aurelien 168
	return anneeEnCours;
169
}
170
 
171
/** Fonctions de manipulation des éléments du tableau pour les transformer en élements cliquables et calendriers **/
172
function initialiserMiniCalendrierFormulaire(id_element) {
173
 
174
	anneeEnCours = getAnneeEnCoursDeConsultation();
175
 
90 aurelien 176
	$('#'+id_element)
177
	.datepicker({
54 aurelien 178
		disabled: true,
90 aurelien 179
		constrainInput: true,
54 aurelien 180
		altFormat: 'dd/mm/yyyy',
181
		minDate: '01/01/'+anneeEnCours,
90 aurelien 182
		maxDate: '31/12/'+anneeEnCours,
183
		onSelect: function(dateText, inst) {
184
			$('#'+id_element).val(dateText);
185
			donnees_obs = collecterDonneesMiniFormulaire(id_formulaire);
186
			envoyerRequeteAjaxValidationMiniFormulaire(donnees_obs, id_formulaire);
210 aurelien 187
		},
188
		onClose: function(dateText, inst) {
189
			gererFermetureMiniCalendrier(dateText,id_formulaire);
90 aurelien 190
		}
54 aurelien 191
	});
90 aurelien 192
 
193
	$('#'+id_element).datepicker( "show" );
54 aurelien 194
}
195
 
210 aurelien 196
function gererFermetureMiniCalendrier(dateText, id_formulaire) {
197
 
216 aurelien 198
	ancienne_valeur_date = jQuery.trim(ancienneValeurEnCours);
199
	nouvelle_valeur_date = jQuery.trim(dateText);
210 aurelien 200
 
216 aurelien 201
	if(nouvelle_valeur_date == '' && ancienne_valeur_date != '-' && ancienne_valeur_date != nouvelle_valeur_date) {
210 aurelien 202
		if(window.confirm("Voulez vous supprimer cette observation ?")) {
216 aurelien 203
			$('#'+id_formulaire).val(nouvelle_valeur_date);
204
			donnees_obs = collecterDonneesMiniFormulaire(id_formulaire);
205
			envoyerRequeteAjaxValidationMiniFormulaire(donnees_obs, id_formulaire);
206
		} else {
207
			$('#'+id_formulaire).val(ancienne_valeur_date);
208
			remplacerMiniFormulaireParElementDate(id_formulaire);
210 aurelien 209
		}
210
	}
211
}
212
 
54 aurelien 213
function remplacerElementDateParFormulaireAjax(id_element, conteneur_selectionne) {
214
 
215
	if(elementEnCours != null) {
216
		elementEnCours.removeClass('element_clique');
217
		elementEnCours.html(htmlEnCours);
216 aurelien 218
		ancienneValeurEnCours = null;
54 aurelien 219
	}
220
 
216 aurelien 221
	ancienneValeurEnCours = conteneur_selectionne.children('span').html()
54 aurelien 222
	elementEnCours = conteneur_selectionne;
223
	htmlEnCours = conteneur_selectionne.html();
224
 
225
	conteneur_obs = $('#'+id_element);
226
	valeur_date = conteneur_obs.html();
227
	valeur_date = valeur_date.replace('-','');
90 aurelien 228
 
54 aurelien 229
	conteneur_selectionne.addClass('element_clique');
90 aurelien 230
	conteneur_selectionne.html('<span class="calendrier"><input type="text" value="'+jQuery.trim(valeur_date)+'" class="calendrier" id="'+id_formulaire+'" size="7" maxlenght="10" /></div>');
54 aurelien 231
	initialiserMiniCalendrierFormulaire(id_formulaire);
232
 
233
}
234
 
235
function remplacerMiniFormulaireParElementDate(id_element) {
236
 
90 aurelien 237
	valeur_date_pour_stade = $('#'+id_element).val();
238
 
216 aurelien 239
	if(jQuery.trim(valeur_date_pour_stade) == '') {
240
		valeur_date_pour_stade = '-';
241
	}
242
 
54 aurelien 243
	elementEnCours.html('<span id="'+id_element+'">'+valeur_date_pour_stade+' </span>');
244
	elementEnCours.removeClass('element_clique');
245
	elementEnCours = null;
216 aurelien 246
	ancienneValeurEnCours = null;
100 aurelien 247
 
54 aurelien 248
}
249
 
250
 
251
/** Fonctions d'envoi et de récupération des élements du formulaire ajax **/
252
function envoyerRequeteAjaxValidationMiniFormulaire(donnees_obs, id_formulaire) {
253
 
100 aurelien 254
	url_page_courante = document.URL;
255
	url_page_courante = url_page_courante.replace('module=Individu','module=Observation');
256
	url_page_courante = url_page_courante.replace('action=afficherListeIndividu','action=validerFormulaireModificationObservationAjax');
257
	url_ajax = url_page_courante.replace('action=validerFormulaireSaisieIndividu','action=validerFormulaireModificationObservationAjax');
258
 
259
	$.post(url_ajax, donnees_obs, function(obj_retour) {
260
 
54 aurelien 261
		if(obj_retour.reponse === 'OK') {
262
			remplacerMiniFormulaireParElementDate(id_formulaire);
263
		}
264
	});
265
}
266
 
267
function collecterDonneesMiniFormulaire(id_formulaire) {
268
 
269
	valeur_date_pour_stade = $('#'+id_formulaire).val();
270
 
216 aurelien 271
	if(valeur_date_pour_stade == null ) {
54 aurelien 272
		return false ;
273
	}
274
 
216 aurelien 275
	if(jQuery.trim(valeur_date_pour_stade) == '') {
276
		valeur_date_pour_stade = '00/00/'+anneeEnCours;
277
	}
278
 
54 aurelien 279
	id_individu_stade_obs = id_formulaire.split('_');
280
 
281
	stade_obs = 'observation_'+id_individu_stade_obs[3];
282
	date_annee_en_cours = jQuery.trim($("#annee_en_cours").html());
283
 
284
	donnees_obs = { "id_individu": id_individu_stade_obs[1],
90 aurelien 285
					"annee_en_cours": date_annee_en_cours
54 aurelien 286
					};
287
 
90 aurelien 288
	identifiant_observation = 'observation_'+id_individu_stade_obs[3];
54 aurelien 289
 
90 aurelien 290
	donnees_obs[identifiant_observation] = valeur_date_pour_stade;
291
 
54 aurelien 292
	return donnees_obs;
293
}
294
 
295
 
296
$('#saisie_liste_evenements').ready(function() {
297
	initialiserLignesCliquables();
298
});
299
 
300
 
301
 
302
 
303
/**
304
	************************************************************************************************
305
	************************************************************************************************
306
 
307
	    Fonctions concernant la carte permettant de pointer d'afficher l'emplacement des stations
308
 
309
	************************************************************************************************
310
	************************************************************************************************
311
**/
312
var map;
313
var marker;
100 aurelien 314
var liste_localite_en_cours;
315
var indice_commune_en_cours;
316
var liste_auto_completion_a_le_focus;
317
var timerRequeteAutocompletion;
318
var timerAffichageAutocompletion;
54 aurelien 319
 
100 aurelien 320
 
321
function cacherElementsRafraichissables() {
322
	$('.rafraichissable input').attr('disabled', 'disabled');
323
	$('.rafraichissable input[type="text"]').addClass("chargement");
324
}
325
 
326
function montrerElementsRafraichissables() {
327
	$('.rafraichissable input').removeAttr('disabled');
328
	$('.chargement').removeClass("chargement");
329
}
330
 
331
function ajouterAutoCompletionCommune() {
332
 
333
	$('input#station_commune').after('<div class="conteneur_suggestions"></div>');
334
	$('input#station_commune').parent().addClass('autocompletion');
335
	$('input#station_commune').attr('autocomplete','off');
336
	$('.conteneur_suggestions').hide();
337
	rendreListeAutoCompletionInteractive('input#station_commune');
338
}
339
 
54 aurelien 340
function ajouterListenerFormulaireSaisieLatLon() {
100 aurelien 341
 
54 aurelien 342
	$('input#localiser_lat_lon').click(function() {
343
		verifierEtLocaliserCoordonnees();
344
	});
345
}
346
 
347
function carteEstEnSaisie() {
348
	return ($('#conteneur_form_liens_lat_lon').length > 0);
349
}
350
 
351
function verifierEtLocaliserCoordonnees() {
352
 
353
	lat ;
354
	lon;
355
 
356
	if(carteEstEnSaisie()) {
357
		lat = $('#station_lat').val();
358
		lon = $('#station_lon').val();
100 aurelien 359
 
360
		obtenirInformationsPourCoordonnees(lat, lon);
54 aurelien 361
	} else {
362
		var lat = jQuery.trim($('#station_lat').html());
363
		var lon = jQuery.trim($('#station_lon').html());
364
	}
365
 
366
	if(jQuery.trim(lat) == '' || jQuery.trim(lon) == '') {
367
		return;
368
	}
369
 
370
	if(!isNaN(lat) && lat.length > 0 && !isNaN(lon) && lon.length > 0) {
371
 
372
	} else {
373
		window.alert("coordonnées invalides");
374
	}
375
 
376
	var positionMarker = new google.maps.LatLng(lat, lon);
377
 
378
	marker.setPosition(positionMarker);
379
	map.setCenter(positionMarker);
100 aurelien 380
	map.setZoom(12);
54 aurelien 381
}
382
 
100 aurelien 383
function obtenirInformationsPourCoordonnees(lat, lon) {
384
 
385
	lat = jQuery.trim(lat);
386
	lon = jQuery.trim(lon);
387
 
388
	if(isNaN(lat) || lat.length <= 0 || isNaN(lon) || lon.length <= 0) {
389
		return;
390
	}
391
 
392
	cacherElementsRafraichissables();
207 aurelien 393
 
168 aurelien 394
	$.get(urlBaseJrest+'OdsCommune/informationsPourCoordonnees/?lat='+lat+'&lon='+lon, function(data) {
100 aurelien 395
 
396
		infos_localites = jQuery.parseJSON(data);
397
		$('#station_alt').val(infos_localites.alt);
398
 
196 aurelien 399
		if(infos_localites.commune != null && infos_localites.commune != '') {
400
		  $('#station_commune').val(infos_localites.commune);
401
		  $('#station_code_insee').val(infos_localites.code_insee);
100 aurelien 402
		}
403
 
404
		montrerElementsRafraichissables();
405
 
406
	});
407
 
408
}
409
 
410
function obtenirInformationsPourCommune(nom_commune) {
411
 
412
	if(jQuery.trim(nom_commune) == '') {
413
		$('.conteneur_suggestions').hide();
414
		return;
415
	}
416
 
168 aurelien 417
	$.get(urlBaseJrest+'OdsCommune/informationsPourCommune/?commune='+nom_commune, function(data) {
100 aurelien 418
 
419
		infos_localites = jQuery.parseJSON(data);
420
		afficherListeAutoCompletion(infos_localites);
421
	});
422
}
423
 
424
function afficherListeAutoCompletion(tableau_localites) {
425
 
426
	liste_localite_en_cours = tableau_localites;
427
 
428
	html_liste_localite = '<ul class="liste_suggestions">';
429
 
430
	for(i = 0; i< tableau_localites.length; i++) {
431
		html_liste_localite += '<li id="commune_'+i+'" class="element_auto_completion_commune">'+tableau_localites[i]['commune']+'  ('+tableau_localites[i]['dpt']+')</li>';
432
	}
433
 
434
	html_liste_localite += '</ul>';
435
 
436
	$('.conteneur_suggestions').html(html_liste_localite);
437
 
438
	$('.element_auto_completion_commune').hover(function() {
439
		indice = $(this).attr('id').split('_')[1];
440
		mettreEnSurbrillanceCommune(indice);
441
	});
442
 
443
	$('.element_auto_completion_commune').click(function() {
444
		indice = $(this).attr('id').split('_')[1];
445
		selectionnerCommune(indice);
446
	});
447
 
448
	if(tableau_localites.length > 0) {
449
		$('.conteneur_suggestions').show();
450
 
451
		mettreEnSurbrillanceCommune(0);
452
	}
453
}
454
 
455
function mettreEnSurbrillanceCommune(indice) {
456
 
457
	if(indice_commune_en_cours != null) {
458
		$('#commune_'+indice_commune_en_cours).removeClass('element_selectionne');
459
	}
460
	$('#commune_'+indice).addClass('element_selectionne');
461
	indice_commune_en_cours = indice;
462
 
463
	reprogrammerTimerPourCacherListeAutoCompletion();
464
}
465
 
466
function rendreListeAutoCompletionInteractive(selecteur) {
467
 
468
	$(selecteur).keyup(function(event) {
469
		if(event.which == 8 || (event.which >= 48 && event.which <= 90)) {
470
 
471
			reprogrammerTimerPourCacherListeAutoCompletion();
472
			reprogrammerTimerPourLancerRequeteCommune();
473
		}
474
	});
475
 
476
	$(selecteur).keydown(function(event) {
477
 
478
		reprogrammerTimerPourCacherListeAutoCompletion();
479
 
480
		// entree
481
		if(event.which==13){
482
			selectionnerCommune(indice_commune_en_cours);
483
			event.preventDefault();
484
		}
485
 
486
		// haut
487
		if(event.which == 38){
488
			if(indice_commune_en_cours > 0) {
489
				mettreEnSurbrillanceCommune(indice_commune_en_cours - 1);
490
			}
491
		}
492
 
493
		// bas
494
		if(event.which == 40){
495
			if(indice_commune_en_cours < liste_localite_en_cours.length - 1) {
496
				mettreEnSurbrillanceCommune(indice_commune_en_cours + 1);
497
			}
498
		}
499
	});
500
 
501
	$('.conteneur_suggestions').blur(function() {
502
		$('.conteneur_suggestions').hide();
503
	});
504
}
505
 
506
function reprogrammerTimerPourCacherListeAutoCompletion() {
507
 
508
	if(timerAffichageAutocompletion != null) {
509
		window.clearTimeout(timerAffichageAutocompletion);
510
	}
511
 
512
	timerAffichageAutocompletion = window.setTimeout(function() {
513
		$('.conteneur_suggestions').hide();
514
	}, 2000);
515
}
516
 
517
function reprogrammerTimerPourLancerRequeteCommune() {
518
 
519
	if(timerRequeteAutocompletion != null) {
520
		window.clearTimeout(timerRequeteAutocompletion);
521
	}
522
 
523
	timerRequeteAutocompletion = window.setTimeout(function() {
524
		obtenirInformationsPourCommune($('input#station_commune').val());
525
	}, 350);
526
}
527
 
528
function selectionnerCommune(indice) {
529
 
530
	infos_commune = liste_localite_en_cours[indice];
531
 
532
	$('input#station_commune').val(infos_commune['commune']);
533
	$('input#station_lat').val(infos_commune['lat']);
534
	$('input#station_lon').val(infos_commune['lon']);
168 aurelien 535
	$('input#station_code_insee').val(infos_commune['code_insee']);
100 aurelien 536
 
537
	verifierEtLocaliserCoordonnees();
538
 
539
	$('.conteneur_suggestions').hide();
540
}
541
 
54 aurelien 542
function mettreAJourValeursFormulaire(latlon) {
543
 
544
	latlon = latlon.toString().split(',');
545
 
100 aurelien 546
	lat = latlon[0].replace('(', '');
547
	lon = latlon[1].replace(')', '');
548
 
54 aurelien 549
	$('#station_lat').val(latlon[0].replace('(', ''));
550
	$('#station_lon').val(latlon[1].replace(')', ''));
100 aurelien 551
 
552
	obtenirInformationsPourCoordonnees(lat, lon);
54 aurelien 553
}
554
 
555
function initialiserCarte() {
556
 
557
	if($('#map_canvas').length == 0) {
558
		return;
559
	}
560
 
561
	var latlng = new google.maps.LatLng(47.0504, 2.2347);
562
	var myOptions = {
563
		zoom: 6,
564
		center: latlng,
565
		mapTypeId: google.maps.MapTypeId.HYBRID
566
	};
567
 
568
	map = new google.maps.Map(document.getElementById("map_canvas"),
569
    	myOptions);
570
 
571
	marker = new google.maps.Marker({
572
	      position: latlng,
573
	      title:""
574
	});
575
 
576
	if (carteEstEnSaisie()) {
577
 
578
			marker.setDraggable(true);
579
 
100 aurelien 580
			google.maps.event.addListener(marker, 'dragend', function(event) {
54 aurelien 581
				mettreAJourValeursFormulaire(marker.getPosition());
582
			});
583
			$('#conteneur_form_liens_lat_lon').ready(function() {
584
				verifierEtLocaliserCoordonnees();
585
				ajouterListenerFormulaireSaisieLatLon();
100 aurelien 586
				ajouterAutoCompletionCommune();
54 aurelien 587
			});
588
	} else {
589
		marker.setDraggable(false);
590
		$('#conteneur_liens_lat_lon').ready(function() {
591
			verifierEtLocaliserCoordonnees();
592
		});
593
	}
594
 
595
	marker.setClickable(true);
596
 
597
	// To add the marker to the map, call setMap();
598
	marker.setMap(map);
599
}
600
 
601
$('#map_canvas').ready(function() {
602
	initialiserCarte();
100 aurelien 603
});
604
 
210 aurelien 605
/**
606
************************************************************************************************
607
************************************************************************************************
100 aurelien 608
 
210 aurelien 609
    Fonctions généralistes s'appliquant automatiquement à certaines classes css
610
 
611
************************************************************************************************
612
************************************************************************************************
613
**/
614
 
615
function initialiserLiensSuppression() {
616
	$('.lien_suppression').click(function() {
617
		return window.confirm('Êtes vous sur de vouloir supprimer ?');
618
	});
619
}
620
 
621
$(document).ready(function() {
622
	initialiserLiensSuppression();
623
});
624
 
625
 
626
 
100 aurelien 627
/**
628
************************************************************************************************
629
************************************************************************************************
630
 
631
    Fonctions de debug permattant d'afficher les objets javascript à la manière de print_r
632
 
633
************************************************************************************************
634
************************************************************************************************
635
**/
636
 
637
function dump(arr,level) {
638
	var dumped_text = "";
639
	if(!level) level = 0;
640
 
641
	//The padding given at the beginning of the line.
642
	var level_padding = "";
643
	for(var j=0;j<level+1;j++) level_padding += "    ";
644
 
645
	if(typeof(arr) == 'object') { //Array/Hashes/Objects
646
	 for(var item in arr) {
647
	  var value = arr[item];
648
 
649
	  if(typeof(value) == 'object') { //If it is an array,
650
	   dumped_text += level_padding + "'" + item + "' ...\n";
651
	   dumped_text += dump(value,level+1);
652
	  } else {
653
	   dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
654
	  }
655
	 }
656
	} else { //Stings/Chars/Numbers etc.
657
	 dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
658
	}
659
	return dumped_text;
660
}