Subversion Repositories Sites.obs-saisons.fr

Rev

Rev 320 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
207 aurelien 1
function getUrlBaseJrest() {
259 aurelien 2
	return urlBaseJrest;
207 aurelien 3
}
4
 
320 aurelien 5
/**
54 aurelien 6
	************************************************************************************************
7
	************************************************************************************************
320 aurelien 8
 
54 aurelien 9
	   Fonction permettant de transformer les élements de la classe pliage en accordéon
320 aurelien 10
 
54 aurelien 11
	************************************************************************************************
12
	************************************************************************************************
320 aurelien 13
**/
54 aurelien 14
function initialiserElementsPliables() {
15
 
16
	$('.pliage h4').addClass('lien_pliage');
17
 
18
	$('.pliage ul').hide();
19
	$('.pliage > ul:first-child').hide();
207 aurelien 20
 
188 aurelien 21
	$('.1er_element_date ul').show();
22
	$('.1er_element_date > ul:first-child').show();
54 aurelien 23
 
24
	$('.lien_pliage').bind('click', function() {
320 aurelien 25
 
54 aurelien 26
		$(this).nextAll('ul').slideToggle();
27
		return false;
28
	});
29
}
30
 
31
$('.pliage').ready(function() {
32
	initialiserElementsPliables();
33
});
34
 
35
 
320 aurelien 36
/**
54 aurelien 37
	************************************************************************************************
38
	************************************************************************************************
320 aurelien 39
 
54 aurelien 40
	   Fonctions de gestion des onglets du formulaire de saisie d'espèce
320 aurelien 41
 
54 aurelien 42
	************************************************************************************************
43
	************************************************************************************************
320 aurelien 44
**/
54 aurelien 45
function initialiserOnglets() {
320 aurelien 46
	$(".contenu_onglet").hide();
47
	$("ul.liste_onglets li:first").addClass("active").show();
54 aurelien 48
	$(".contenu_onglet:first").show();
49
 
50
	$("ul.liste_onglets li").click(function() {
51
 
320 aurelien 52
		$("ul.liste_onglets li").removeClass("active");
53
		$(this).addClass("active");
54 aurelien 54
		$(".contenu_onglet").hide();
55
 
320 aurelien 56
		var activeTab = $(this).find("a").attr("href");
54 aurelien 57
		$(activeTab).fadeIn();
58
		return false;
59
	});
60
}
61
 
62
$('.contenu_onglet').ready(function() {
63
	initialiserOnglets();
64
});
65
 
324 aurelien 66
function agrandirZoneClicBoutonsRadios() {
320 aurelien 67
 
54 aurelien 68
	$('.formulaire_informations_espece_mini').addClass("element_cliquable");
320 aurelien 69
 
54 aurelien 70
	$('#form_saisie_espece').children('input[type="submit"]').hide();
71
	$('.formulaire_informations_espece_mini').children('input[type="radio"]').hide();
72
	$('.titre_type').hide();
320 aurelien 73
 
54 aurelien 74
	$('.formulaire_informations_espece_mini').bind('click',function() {
75
		$(this).children('input[type="radio"]').attr('checked','checked');
76
		$('.formulaire_informations_espece_mini').removeClass('element_clique');
77
		$(this).addClass('element_clique');
320 aurelien 78
 
54 aurelien 79
		$('#form_saisie_espece').submit();
320 aurelien 80
	});
54 aurelien 81
}
82
 
83
$('#form_saisie_espece').ready(function() {
324 aurelien 84
	agrandirZoneClicBoutonsRadios();
54 aurelien 85
});
86
 
87
 
207 aurelien 88
 
89
 
320 aurelien 90
/**
54 aurelien 91
	************************************************************************************************
92
	************************************************************************************************
320 aurelien 93
 
54 aurelien 94
	   Fonctions permettant de transformer les cases du tableau d'évenements en mini formulaire
320 aurelien 95
 
54 aurelien 96
	************************************************************************************************
97
	************************************************************************************************
98
**/
99
 
100
function initialiserLignesCliquables() {
320 aurelien 101
 
54 aurelien 102
	$('.conteneur_element_modifier').hide();
103
 
320 aurelien 104
	$(".date_observation_individu").live("click", function(e) {
105
		e.preventDefault();
54 aurelien 106
 
324 aurelien 107
		var est_absence_observation = $(e.target).parents('[data-absence-observation="1"]').length > 0;
108
		if($(e.target).hasClass('conteneur_supprimer_observation') ||
109
				$(e.target).hasClass('supprimer_observation') ||
110
				est_absence_observation) {
320 aurelien 111
			return;
112
		}
54 aurelien 113
 
320 aurelien 114
		$('.element_clique').removeClass('element_clique');
115
		if($(this).hasClass('element_clique')) {
116
			fermerDatePicker();
117
			return false;
118
		} else {
119
			$(this).addClass('element_clique');
120
			afficherSaisieObservation($(this));
121
			return false;
122
		}
123
	});
54 aurelien 124
 
320 aurelien 125
	$(".date_observation_individu .conteneur_supprimer_observation").live("click", function(e) {
126
		e.preventDefault();
324 aurelien 127
		if(window.confirm('Êtes-vous sûr.e de vouloir supprimer cette observation ?')) {
320 aurelien 128
			// les obs ne sont jamais vraiment supprimées
129
			// mais seulement remplacées par des dates au format 00/00/yyyy
130
			envoyerRequeteAjaxSaisieObservation('', $(this).parent('.date_observation_individu'));
131
		}
324 aurelien 132
 
133
		return false;
320 aurelien 134
	});
90 aurelien 135
 
324 aurelien 136
	$(".date_observation_individu .absence_observation").live("click", function(e) {
137
		e.preventDefault();
138
		var avertissement_absence_evenement = 'Attention ! Vous êtes sur le point de signaler que ce stade n\'a pas eu lieu dans l\'année. '+"\n"+
139
																					'C\'est-à-dire que vous êtes certain.e de ne pas l\'avoir raté. '+"\n"+
140
																					'Êtes-vous sûr.e ?';
141
		if(window.confirm(avertissement_absence_evenement)) {
142
			$(this).parent('.date_observation_individu').data('absence-observation', '1');
143
			var date_absence_evenement = '';
144
			var dateEnCours = new Date();
145
			if(getAnneeEnCoursDeConsultation() == dateEnCours.getFullYear()) {
146
				date_absence_evenement = dateEnCours.getDate()+'/'+dateEnCours.getMonth()+'/'+dateEnCours.getFullYear();
147
			} else {
148
				date_absence_evenement = '01/01/'+dateEnCours.getFullYear();
149
			}
150
			envoyerRequeteAjaxSaisieObservation(date_absence_evenement, $(this).parent('.date_observation_individu'));
151
		}
152
 
153
		return false;
154
	});
155
 
320 aurelien 156
	// pour fermer le datepicker sur esc
157
	$(document).keyup(function(e) {
158
	  if (e.keyCode === 27) {
159
			$('.element_clique').removeClass('element_clique');
160
			fermerDatePicker();   // esc
161
		}
162
	});
216 aurelien 163
}
164
 
320 aurelien 165
function afficherSaisieObservation($obs) {
224 aurelien 166
 
320 aurelien 167
	fermerDatePicker();
168
 
169
	var dateMin = getDateMinCalendrier();
170
	var dateMax = getDateMaxCalendrier();
171
 
172
	var dateCouranteStr = $obs.data('date-observation');
173
	var dateCourante = new Date();
174
	if(!!dateCouranteStr && dateCouranteStr != '' && dateCouranteStr != '+') {
175
		var jour   = parseInt(dateCouranteStr.substring(0,2));
176
		var mois  = parseInt(dateCouranteStr.substring(3,5));
177
		var annee   = parseInt(dateCouranteStr.substring(6,10));
178
		dateCourante = new Date(annee, mois-1, jour);
224 aurelien 179
	}
180
 
320 aurelien 181
	$obs.find('.datepicker_container').datepicker({
54 aurelien 182
		disabled: true,
90 aurelien 183
		constrainInput: true,
54 aurelien 184
		altFormat: 'dd/mm/yyyy',
224 aurelien 185
		minDate: dateMin,
186
		maxDate: dateMax,
320 aurelien 187
		changeMonth: true,
188
		defaultDate: dateCourante,
90 aurelien 189
		onSelect: function(dateText, inst) {
320 aurelien 190
			validerSaisieObservation(dateText, $obs)
210 aurelien 191
		},
320 aurelien 192
		beforeShowDay: function(date) {
193
			var dates_a_exclure = getDatesSaisiesPourStadeEtIndividu($obs.data('id-individu'), $obs.data('id-stade-observation'));
194
      var string = jQuery.datepicker.formatDate('dd/mm/yy', date);
195
      return [dates_a_exclure.indexOf(string) == -1]
196
    }
54 aurelien 197
	});
90 aurelien 198
 
320 aurelien 199
	$obs.datepicker("show");
200
	$('.ui-datepicker').attr("title", "Appuyez sur échap pour annuler l'édition");
54 aurelien 201
}
202
 
320 aurelien 203
function validerSaisieObservation(dateStr, $obs) {
204
 
205
	if(estUneDateValide(dateStr)) {
206
		envoyerRequeteAjaxSaisieObservation(dateStr, $obs);
210 aurelien 207
	}
208
}
209
 
320 aurelien 210
function formaterDonneesObservationPourEnvoi(dateStr, $obs) {
211
 
212
	if(dateStr == null ) {
213
		return false ;
54 aurelien 214
	}
215
 
320 aurelien 216
	var anneeEnCours = getAnneeEnCoursDeConsultation();
217
	if(jQuery.trim(dateStr) == '') {
218
		dateStr = '00/00/'+anneeEnCours;
216 aurelien 219
	}
100 aurelien 220
 
320 aurelien 221
	donnees_obs = {
222
		"id_individu": $obs.data('id-individu'),
223
		"id_evenement": $obs.data('id-stade-observation'),
224
		"date_evenement": dateStr,
225
		"annee_en_cours": anneeEnCours
226
	};
227
 
324 aurelien 228
	if(!!$obs.data('absence-observation')) {
229
		donnees_obs.absence_observation = $obs.data('absence-observation');
230
	}
231
 
320 aurelien 232
	if(!!$obs.data('id-observation')) {
233
		donnees_obs.id_observation = $obs.data('id-observation');
234
	}
235
 
236
	return donnees_obs;
54 aurelien 237
}
238
 
239
 
240
/** Fonctions d'envoi et de récupération des élements du formulaire ajax **/
320 aurelien 241
function envoyerRequeteAjaxSaisieObservation(dateStr, $obs) {
242
 
243
	var est_obs_existante = !!$obs.data('id-observation');
244
	var donnees_obs = formaterDonneesObservationPourEnvoi(dateStr, $obs);
245
 
100 aurelien 246
	url_page_courante = document.URL;
247
	url_page_courante = url_page_courante.replace('module=Individu','module=Observation');
248
	url_page_courante = url_page_courante.replace('action=afficherListeIndividu','action=validerFormulaireModificationObservationAjax');
249
	url_ajax = url_page_courante.replace('action=validerFormulaireSaisieIndividu','action=validerFormulaireModificationObservationAjax');
320 aurelien 250
 
251
	$conteneurAjout = null;
252
	if(!est_obs_existante) {
253
		var id_conteneur_ajout = 'ajouter_observation_individu_'+donnees_obs['id_individu']+'_evenement_'+donnees_obs['id_evenement'];
254
		var $conteneurAjout = $('#'+id_conteneur_ajout).clone();
255
	}
256
 
324 aurelien 257
	if(absenceStadePourIndividuEtAnneeEstSignalee($obs.data('id-individu'), $obs.data('id-stade'))) {
258
		$obs.find('.date-observation').text('Absent');
259
		return;
260
	}
261
 
320 aurelien 262
	var donnees_obs = formaterDonneesObservationPourEnvoi(dateStr, $obs);
324 aurelien 263
	donnees_obs['id_participant'] = 3;
100 aurelien 264
	$.post(url_ajax, donnees_obs, function(obj_retour) {
320 aurelien 265
 
324 aurelien 266
		if(!!obj_retour.data.erreurs) {
320 aurelien 267
			var message = 'Une ou plusieurs erreurs se sont produites : '+"\n";
268
			for (var key in obj_retour.data.erreurs) {
269
  		if (obj_retour.data.erreurs.hasOwnProperty(key))
270
    		message += '- '+obj_retour.data.erreurs[key]+"\n";
271
			}
272
			window.alert(message);
273
			return;
274
		}
275
 
54 aurelien 276
		if(obj_retour.reponse === 'OK') {
320 aurelien 277
 
278
			// les obs ne sont jamais vraiment supprimées
279
			// mais seulement remplacées par des dates au format 00/00/yyyy
280
			if(estUneDateSuppressionObs(dateStr)) {
324 aurelien 281
				// si l'on a supprimé le signalement de l'absence d'un stade, alors on peut de nouveau saisir des
282
				// observations pour ce stade (le signalement de l'absence d'un stade pour une année est une observation)
283
				if(estUneAbsenceObservation($obs)) {
284
					afficherOuCacherConteneurAjout($obs.data('id-individu'), $obs.data('id-stade-observation'), true);
285
					afficherOuCacherBoutonSignalerAbsenceObservation($obs.data('id-individu'), $obs.data('id-stade-observation'), true);
286
				}
287
 
320 aurelien 288
				$obs.remove();
289
				delete $obs;
324 aurelien 290
 
291
				// s'il l'on vient de supprimer la dernière obs d'une évènement pour un individu on peut également à nouveau
292
				// saisir des observations pour celui-ci
293
				if(getDatesSaisiesPourStadeEtIndividu($obs.data('id-individu'), $obs.data('id-stade-observation')).length == 0) {
294
					afficherOuCacherBoutonSignalerAbsenceObservation($obs.data('id-individu'), $obs.data('id-stade-observation'), true);
295
				}
296
 
320 aurelien 297
				return;
298
			}
299
 
324 aurelien 300
			if(!!obj_retour.data.id_observation) {
301
				donnees_obs['id_observation'] = obj_retour.data.id_observation;
302
			}
320 aurelien 303
 
324 aurelien 304
			// sl'on vient de signaler que la stade n'a pas du tout eu lieu dans l'année
305
			if(estUneAbsenceObservation($obs)) {
306
				// alors on affiche une observation spéciale qui indique que le stade est absent
307
				// et qui bloque la saisie d'autres observations de ce stade pour cet individu et cette année
308
				afficherAbsenceObservationPourIndividuEtAnnee($obs, $conteneurAjout, donnees_obs);
309
			} else {
310
				afficherObservation(dateStr, $obs, $conteneurAjout, donnees_obs, est_obs_existante);
311
				// à partir du moment où l'on a au moins une observation pour un stade et un individu donné
312
				// on ne peut plus signaler que l'évènement n'a pas eu lieu cette année
313
				afficherOuCacherBoutonSignalerAbsenceObservation($obs.data('id-individu'), $obs.data('id-stade-observation'), false);
320 aurelien 314
			}
315
 
316
			$('.element_clique').removeClass('element_clique');
317
			fermerDatePicker();
54 aurelien 318
		}
319
	});
320
}
321
 
324 aurelien 322
function afficherObservation(dateStr, $obs, $conteneurAjout, donnees_obs, est_obs_existante) {
323
	$obs.find('.date_observation').text(dateStr);
324
	$obs.data('date-observation', dateStr);
325
 
326
	if(!est_obs_existante) {
327
		$obs.removeClass('ajouter_observation');
328
		$obs.attr('title', 'Cliquez pour modifier la date de cette observation')
329
		$obs.data('id-observation', donnees_obs['id_observation']);
330
 
331
		var id_conteneur_observation = 'individu_'+donnees_obs['id_individu']+'_evenement_'+donnees_obs['id_evenement']+'_observation_'+donnees_obs['id_observation'];
332
		$obs.attr('id', id_conteneur_observation);
333
 
334
		$obs.after($conteneurAjout);
335
	}
336
}
337
 
338
function afficherAbsenceObservationPourIndividuEtAnnee($obs, $conteneurAjout, donnees_obs) {
339
	afficherObservation('Absent', $obs, $conteneurAjout, donnees_obs, false);
340
	$obs.attr('title', 'Vous avez indiqué que ce stade n\'a pas été observé pour cette année');
341
	$obs.data('absence-observation', '1');
342
	$obs.attr('data-absence-observation', '1');
343
	// on cache le conteneur d'ajout car une fois l'absence d'un stade signalée pour une année
344
	// et un individu, il est illogique de vouloir signaler des observations de ce stade
345
	afficherOuCacherConteneurAjout(donnees_obs['id_individu'], donnees_obs['id_evenement'], false);
346
}
347
 
348
function afficherOuCacherConteneurAjout(id_individu, id_evenement, afficher) {
349
	var $conteneurAjout = $('#ajouter_observation_individu_'+id_individu+'_evenement_'+id_evenement);
350
	$conteneurAjout.toggleClass('hide', !afficher);
351
}
352
 
353
function afficherOuCacherBoutonSignalerAbsenceObservation(id_individu, id_evenement, afficher) {
354
	var $conteneurSignalementAbsenceObs = $('#ajouter_observation_individu_'+id_individu+'_evenement_'+id_evenement+' .absence_observation');
355
	console.log($conteneurSignalementAbsenceObs);
356
	$conteneurSignalementAbsenceObs.toggleClass('hide', !afficher);
357
}
358
 
359
function estUneAbsenceObservation($obs) {
360
	return $obs.data('absence-observation') == 1;
361
}
362
 
320 aurelien 363
function estUneDateSuppressionObs(dateStr) {
364
	var date_vide_pattern = /^00\/00\/\d{4}$/;
365
	return dateStr == '' || date_vide_pattern.test(dateStr);
366
}
367
 
368
function fermerDatePicker() {
369
	if($(".hasDatepicker").length == 0) {
370
		return;
54 aurelien 371
	}
320 aurelien 372
 
373
	$(".hasDatepicker").each(function() {
374
		$(this).datepicker("destroy");
375
		$(this).removeClass(".hasDatepicker").removeAttr('id');
376
	});
377
}
378
 
379
function obtenirAttributsData(el) {
380
	return [].filter.call(el.attributes, function(at) { return /^data-/.test(at.name); });
381
}
382
 
383
// vérifie qu'une date est au format d/m/y
384
// merci stacky https://stackoverflow.com/questions/5812220/how-to-validate-a-date
385
function estUneDateValide(s) {
386
  var bits = s.split('/');
387
  var d = new Date(bits[2], bits[1] - 1, bits[0]);
388
  return d && (d.getMonth() + 1) == bits[1];
389
}
390
 
324 aurelien 391
function absenceStadePourIndividuEtAnneeEstSignalee(id_individu, id_stade) {
392
	var selecteur_data = '[data-id-individu="'+id_individu+'"]'+
393
												'[data-id-stade-observation="'+id_stade+'"]'+
394
												'[data-absence-observation="1"]';
395
 
396
	return $('.date_observation_individu'+selecteur_data).length >= 1;
397
}
398
 
320 aurelien 399
function getDatesSaisiesPourStadeEtIndividu(id_individu, id_stade) {
400
	var selecteur_data = '[data-id-individu="'+id_individu+'"]'+
401
												'[data-id-stade-observation="'+id_stade+'"]';
402
 
403
	return $('.date_observation_individu'+selecteur_data).map(function() {
404
    return $(this).data("date-observation");
405
	}).get();
406
}
407
 
408
function getAnneeEnCoursDeConsultation() {
409
 
410
	anneeEnCours = jQuery.trim($("#annee_en_cours").html());
411
 
412
	if(typeof(anneeEnCours)=='undefined'){
413
		dateCourante = new Date();
414
		anneeEnCours = dateCourante.getFullYear();
216 aurelien 415
	}
320 aurelien 416
 
417
	return anneeEnCours;
54 aurelien 418
}
419
 
320 aurelien 420
function getDateMinCalendrier() {
421
	anneeEnCours = getAnneeEnCoursDeConsultation();
422
	dateMin = '01/01/'+anneeEnCours;
54 aurelien 423
 
320 aurelien 424
	return dateMin;
425
}
426
 
427
function getDateMaxCalendrier() {
428
 
429
	anneeEnCours = getAnneeEnCoursDeConsultation();
430
 
431
	dateMax = '31/12/'+anneeEnCours;
432
 
433
	dateCourante = new Date();
434
 
435
	if(anneeEnCours == dateCourante.getFullYear()) {
436
		dateMax = dateCourante.getDate()+'/'+(dateCourante.getMonth()+ 1)+'/'+anneeEnCours;
437
	}
438
 
439
	return dateMax;
440
}
441
 
54 aurelien 442
$('#saisie_liste_evenements').ready(function() {
443
	initialiserLignesCliquables();
444
});
445
 
446
 
447
 
448
 
320 aurelien 449
/**
54 aurelien 450
	************************************************************************************************
451
	************************************************************************************************
320 aurelien 452
 
54 aurelien 453
	    Fonctions concernant la carte permettant de pointer d'afficher l'emplacement des stations
320 aurelien 454
 
54 aurelien 455
	************************************************************************************************
456
	************************************************************************************************
320 aurelien 457
**/
54 aurelien 458
var map;
459
var marker;
100 aurelien 460
var liste_localite_en_cours;
461
var indice_commune_en_cours;
462
var liste_auto_completion_a_le_focus;
463
var timerRequeteAutocompletion;
464
var timerAffichageAutocompletion;
54 aurelien 465
 
100 aurelien 466
 
467
function cacherElementsRafraichissables() {
468
	$('.rafraichissable input').attr('disabled', 'disabled');
469
	$('.rafraichissable input[type="text"]').addClass("chargement");
470
}
471
 
472
function montrerElementsRafraichissables() {
473
	$('.rafraichissable input').removeAttr('disabled');
474
	$('.chargement').removeClass("chargement");
475
}
476
 
477
function ajouterAutoCompletionCommune() {
320 aurelien 478
 
100 aurelien 479
	$('input#station_commune').after('<div class="conteneur_suggestions"></div>');
480
	$('input#station_commune').parent().addClass('autocompletion');
481
	$('input#station_commune').attr('autocomplete','off');
482
	$('.conteneur_suggestions').hide();
483
	rendreListeAutoCompletionInteractive('input#station_commune');
484
}
485
 
54 aurelien 486
function ajouterListenerFormulaireSaisieLatLon() {
320 aurelien 487
 
54 aurelien 488
	$('input#localiser_lat_lon').click(function() {
489
		verifierEtLocaliserCoordonnees();
490
	});
491
}
492
 
493
function carteEstEnSaisie() {
494
	return ($('#conteneur_form_liens_lat_lon').length > 0);
495
}
496
 
497
function verifierEtLocaliserCoordonnees() {
320 aurelien 498
 
54 aurelien 499
	lat ;
500
	lon;
320 aurelien 501
 
54 aurelien 502
	if(carteEstEnSaisie()) {
503
		lat = $('#station_lat').val();
504
		lon = $('#station_lon').val();
320 aurelien 505
 
100 aurelien 506
		obtenirInformationsPourCoordonnees(lat, lon);
54 aurelien 507
	} else {
508
		var lat = jQuery.trim($('#station_lat').html());
509
		var lon = jQuery.trim($('#station_lon').html());
510
	}
320 aurelien 511
 
54 aurelien 512
	if(jQuery.trim(lat) == '' || jQuery.trim(lon) == '') {
513
		return;
514
	}
320 aurelien 515
 
54 aurelien 516
	if(!isNaN(lat) && lat.length > 0 && !isNaN(lon) && lon.length > 0) {
320 aurelien 517
 
54 aurelien 518
	} else {
519
		window.alert("coordonnées invalides");
520
	}
320 aurelien 521
 
54 aurelien 522
	var positionMarker = new google.maps.LatLng(lat, lon);
320 aurelien 523
 
54 aurelien 524
	marker.setPosition(positionMarker);
525
	map.setCenter(positionMarker);
100 aurelien 526
	map.setZoom(12);
54 aurelien 527
}
528
 
100 aurelien 529
function obtenirInformationsPourCoordonnees(lat, lon) {
320 aurelien 530
 
100 aurelien 531
	lat = jQuery.trim(lat);
320 aurelien 532
	lon = jQuery.trim(lon);
533
 
100 aurelien 534
	if(isNaN(lat) || lat.length <= 0 || isNaN(lon) || lon.length <= 0) {
535
		return;
536
	}
320 aurelien 537
 
100 aurelien 538
	cacherElementsRafraichissables();
207 aurelien 539
 
320 aurelien 540
	$.get(urlBaseJrest+'OdsCommune/informationsPourCoordonnees/?lat='+lat+'&lon='+lon, function(data) {
541
 
100 aurelien 542
		infos_localites = jQuery.parseJSON(data);
543
		$('#station_alt').val(infos_localites.alt);
320 aurelien 544
 
196 aurelien 545
		if(infos_localites.commune != null && infos_localites.commune != '') {
546
		  $('#station_commune').val(infos_localites.commune);
547
		  $('#station_code_insee').val(infos_localites.code_insee);
100 aurelien 548
		}
320 aurelien 549
 
100 aurelien 550
		montrerElementsRafraichissables();
320 aurelien 551
 
100 aurelien 552
	});
553
 
554
}
555
 
556
function obtenirInformationsPourCommune(nom_commune) {
320 aurelien 557
 
100 aurelien 558
	if(jQuery.trim(nom_commune) == '') {
559
		$('.conteneur_suggestions').hide();
560
		return;
561
	}
320 aurelien 562
 
563
	$.get(urlBaseJrest+'OdsCommune/informationsPourCommune/?commune='+nom_commune, function(data) {
564
 
100 aurelien 565
		infos_localites = jQuery.parseJSON(data);
320 aurelien 566
		afficherListeAutoCompletion(infos_localites);
100 aurelien 567
	});
568
}
569
 
570
function afficherListeAutoCompletion(tableau_localites) {
320 aurelien 571
 
100 aurelien 572
	liste_localite_en_cours = tableau_localites;
320 aurelien 573
 
100 aurelien 574
	html_liste_localite = '<ul class="liste_suggestions">';
320 aurelien 575
 
100 aurelien 576
	for(i = 0; i< tableau_localites.length; i++) {
577
		html_liste_localite += '<li id="commune_'+i+'" class="element_auto_completion_commune">'+tableau_localites[i]['commune']+'  ('+tableau_localites[i]['dpt']+')</li>';
578
	}
320 aurelien 579
 
100 aurelien 580
	html_liste_localite += '</ul>';
320 aurelien 581
 
100 aurelien 582
	$('.conteneur_suggestions').html(html_liste_localite);
320 aurelien 583
 
100 aurelien 584
	$('.element_auto_completion_commune').hover(function() {
585
		indice = $(this).attr('id').split('_')[1];
586
		mettreEnSurbrillanceCommune(indice);
587
	});
320 aurelien 588
 
100 aurelien 589
	$('.element_auto_completion_commune').click(function() {
590
		indice = $(this).attr('id').split('_')[1];
591
		selectionnerCommune(indice);
592
	});
320 aurelien 593
 
100 aurelien 594
	if(tableau_localites.length > 0) {
595
		$('.conteneur_suggestions').show();
320 aurelien 596
 
100 aurelien 597
		mettreEnSurbrillanceCommune(0);
598
	}
599
}
600
 
601
function mettreEnSurbrillanceCommune(indice) {
320 aurelien 602
 
603
	if(indice_commune_en_cours != null) {
100 aurelien 604
		$('#commune_'+indice_commune_en_cours).removeClass('element_selectionne');
605
	}
606
	$('#commune_'+indice).addClass('element_selectionne');
607
	indice_commune_en_cours = indice;
320 aurelien 608
 
100 aurelien 609
	reprogrammerTimerPourCacherListeAutoCompletion();
610
}
611
 
612
function rendreListeAutoCompletionInteractive(selecteur) {
320 aurelien 613
 
100 aurelien 614
	$(selecteur).keyup(function(event) {
320 aurelien 615
		if(event.which == 8 || (event.which >= 48 && event.which <= 90)) {
616
 
100 aurelien 617
			reprogrammerTimerPourCacherListeAutoCompletion();
618
			reprogrammerTimerPourLancerRequeteCommune();
619
		}
620
	});
320 aurelien 621
 
100 aurelien 622
	$(selecteur).keydown(function(event) {
320 aurelien 623
 
100 aurelien 624
		reprogrammerTimerPourCacherListeAutoCompletion();
320 aurelien 625
 
100 aurelien 626
		// entree
627
		if(event.which==13){
628
			selectionnerCommune(indice_commune_en_cours);
629
			event.preventDefault();
630
		}
320 aurelien 631
 
100 aurelien 632
		// haut
633
		if(event.which == 38){
320 aurelien 634
			if(indice_commune_en_cours > 0) {
100 aurelien 635
				mettreEnSurbrillanceCommune(indice_commune_en_cours - 1);
636
			}
637
		}
320 aurelien 638
 
100 aurelien 639
		// bas
640
		if(event.which == 40){
320 aurelien 641
			if(indice_commune_en_cours < liste_localite_en_cours.length - 1) {
100 aurelien 642
				mettreEnSurbrillanceCommune(indice_commune_en_cours + 1);
643
			}
644
		}
645
	});
320 aurelien 646
 
100 aurelien 647
	$('.conteneur_suggestions').blur(function() {
648
		$('.conteneur_suggestions').hide();
649
	});
650
}
651
 
652
function reprogrammerTimerPourCacherListeAutoCompletion() {
320 aurelien 653
 
100 aurelien 654
	if(timerAffichageAutocompletion != null) {
655
		window.clearTimeout(timerAffichageAutocompletion);
656
	}
320 aurelien 657
 
100 aurelien 658
	timerAffichageAutocompletion = window.setTimeout(function() {
659
		$('.conteneur_suggestions').hide();
660
	}, 2000);
661
}
662
 
663
function reprogrammerTimerPourLancerRequeteCommune() {
320 aurelien 664
 
100 aurelien 665
	if(timerRequeteAutocompletion != null) {
666
		window.clearTimeout(timerRequeteAutocompletion);
667
	}
320 aurelien 668
 
100 aurelien 669
	timerRequeteAutocompletion = window.setTimeout(function() {
670
		obtenirInformationsPourCommune($('input#station_commune').val());
671
	}, 350);
672
}
673
 
674
function selectionnerCommune(indice) {
320 aurelien 675
 
100 aurelien 676
	infos_commune = liste_localite_en_cours[indice];
320 aurelien 677
 
100 aurelien 678
	$('input#station_commune').val(infos_commune['commune']);
679
	$('input#station_lat').val(infos_commune['lat']);
680
	$('input#station_lon').val(infos_commune['lon']);
168 aurelien 681
	$('input#station_code_insee').val(infos_commune['code_insee']);
320 aurelien 682
 
100 aurelien 683
	verifierEtLocaliserCoordonnees();
320 aurelien 684
 
100 aurelien 685
	$('.conteneur_suggestions').hide();
686
}
687
 
54 aurelien 688
function mettreAJourValeursFormulaire(latlon) {
689
 
320 aurelien 690
	latlon = latlon.toString().split(',');
691
 
100 aurelien 692
	lat = latlon[0].replace('(', '');
693
	lon = latlon[1].replace(')', '');
320 aurelien 694
 
54 aurelien 695
	$('#station_lat').val(latlon[0].replace('(', ''));
696
	$('#station_lon').val(latlon[1].replace(')', ''));
320 aurelien 697
 
100 aurelien 698
	obtenirInformationsPourCoordonnees(lat, lon);
54 aurelien 699
}
700
 
701
function initialiserCarte() {
702
 
703
	if($('#map_canvas').length == 0) {
704
		return;
705
	}
706
 
707
	var latlng = new google.maps.LatLng(47.0504, 2.2347);
708
	var myOptions = {
709
		zoom: 6,
710
		center: latlng,
711
		mapTypeId: google.maps.MapTypeId.HYBRID
712
	};
713
 
714
	map = new google.maps.Map(document.getElementById("map_canvas"),
715
    	myOptions);
320 aurelien 716
 
54 aurelien 717
	marker = new google.maps.Marker({
718
	      position: latlng,
719
	      title:""
720
	});
320 aurelien 721
 
54 aurelien 722
	if (carteEstEnSaisie()) {
320 aurelien 723
 
54 aurelien 724
			marker.setDraggable(true);
320 aurelien 725
 
726
			google.maps.event.addListener(marker, 'dragend', function(event) {
54 aurelien 727
				mettreAJourValeursFormulaire(marker.getPosition());
728
			});
729
			$('#conteneur_form_liens_lat_lon').ready(function() {
730
				verifierEtLocaliserCoordonnees();
731
				ajouterListenerFormulaireSaisieLatLon();
100 aurelien 732
				ajouterAutoCompletionCommune();
54 aurelien 733
			});
734
	} else {
735
		marker.setDraggable(false);
736
		$('#conteneur_liens_lat_lon').ready(function() {
737
			verifierEtLocaliserCoordonnees();
738
		});
739
	}
320 aurelien 740
 
54 aurelien 741
	marker.setClickable(true);
320 aurelien 742
 
54 aurelien 743
	// To add the marker to the map, call setMap();
320 aurelien 744
	marker.setMap(map);
54 aurelien 745
}
746
 
747
$('#map_canvas').ready(function() {
748
	initialiserCarte();
100 aurelien 749
});
750
 
320 aurelien 751
/**
210 aurelien 752
************************************************************************************************
753
************************************************************************************************
100 aurelien 754
 
210 aurelien 755
    Fonctions généralistes s'appliquant automatiquement à certaines classes css
756
 
757
************************************************************************************************
758
************************************************************************************************
320 aurelien 759
**/
210 aurelien 760
 
302 aurelien 761
function initialiserLiensNouvelleFenetre() {
320 aurelien 762
 
302 aurelien 763
	$('a.lien_nouvelle_fenetre').each(function() {
764
	  var titre = $(this).attr("title");
765
	  $(this).attr("title", titre+" (s'ouvre dans une nouvelle fenêtre)");
766
	});
320 aurelien 767
 
302 aurelien 768
	$('a.lien_nouvelle_fenetre').click(function(event) {
769
		event.preventDefault();
770
		window.open($(this).attr('href'));
771
	});
772
}
773
 
210 aurelien 774
function initialiserLiensSuppression() {
775
	$('.lien_suppression').click(function() {
324 aurelien 776
		return window.confirm('Êtes vous sûr.e de vouloir supprimer ?');
210 aurelien 777
	});
778
}
779
 
780
$(document).ready(function() {
781
	initialiserLiensSuppression();
302 aurelien 782
	initialiserLiensNouvelleFenetre();
210 aurelien 783
});
784
 
785
 
786
 
320 aurelien 787
/**
100 aurelien 788
************************************************************************************************
789
************************************************************************************************
790
 
791
    Fonctions de debug permattant d'afficher les objets javascript à la manière de print_r
792
 
793
************************************************************************************************
794
************************************************************************************************
320 aurelien 795
**/
100 aurelien 796
 
797
function dump(arr,level) {
798
	var dumped_text = "";
799
	if(!level) level = 0;
800
 
801
	//The padding given at the beginning of the line.
802
	var level_padding = "";
803
	for(var j=0;j<level+1;j++) level_padding += "    ";
804
 
805
	if(typeof(arr) == 'object') { //Array/Hashes/Objects
806
	 for(var item in arr) {
807
	  var value = arr[item];
320 aurelien 808
 
100 aurelien 809
	  if(typeof(value) == 'object') { //If it is an array,
810
	   dumped_text += level_padding + "'" + item + "' ...\n";
811
	   dumped_text += dump(value,level+1);
812
	  } else {
813
	   dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
814
	  }
815
	 }
816
	} else { //Stings/Chars/Numbers etc.
817
	 dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
818
	}
819
	return dumped_text;
320 aurelien 820
}