Subversion Repositories eFlore/Applications.cel

Rev

Rev 2118 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2118 Rev 2408
Line 72... Line 72...
72
	});
72
	});
73
}
73
}
Line 74... Line 74...
74
 
74
 
75
function prechargerForm(infos) {
75
function prechargerForm(infos) {
76
	$('input[name="station"]').val(infos.station);
76
	$('input[name="station"]').val(infos.station);
77
	
77
 
78
	//console.log(infos.extension);
78
	//console.log(infos.extension);
79
	if (infos.extension) {
79
	if (infos.extension) {
80
		var ext = infos.extension;
80
		var ext = infos.extension;
81
		if (ext.latitudeDebutRue && ext.longitudeDebutRue && ext.latitudeFinRue && ext.longitudeFinRue) {
81
		if (ext.latitudeDebutRue && ext.longitudeDebutRue && ext.latitudeFinRue && ext.longitudeFinRue) {
Line 84... Line 84...
84
			latLngDebPre.lng = parseFloat(ext.longitudeDebutRue.valeur);
84
			latLngDebPre.lng = parseFloat(ext.longitudeDebutRue.valeur);
85
			latLngFinPre.lat = parseFloat(ext.latitudeFinRue.valeur);
85
			latLngFinPre.lat = parseFloat(ext.latitudeFinRue.valeur);
86
			latLngFinPre.lng = parseFloat(ext.longitudeFinRue.valeur);
86
			latLngFinPre.lng = parseFloat(ext.longitudeFinRue.valeur);
87
			prechargerRue();
87
			prechargerRue();
88
		}
88
		}
89
		
89
 
90
		var chpsARemplir = ['adresse', 'typoUrbaine', 'revetementSol', 'presenceZoneVegetalise', 'hauteurBatimentAvoisinant',
90
		var chpsARemplir = ['adresse', 'typoUrbaine', 'revetementSol', 'presenceZoneVegetalise', 'hauteurBatimentAvoisinant',
91
			'intensiteGestion', 'periodiciteTraitementPhyto', 'dateArretTraitementPhyto', 'itineraireGestion'];
91
			'intensiteGestion', 'periodiciteTraitementPhyto', 'dateArretTraitementPhyto', 'itineraireGestion'];
92
		$.each(infos.extension, function(nomDuChp, value) {
92
		$.each(infos.extension, function(nomDuChp, value) {
93
			if (chpsARemplir.indexOf(nomDuChp) >= 0) {
93
			if (chpsARemplir.indexOf(nomDuChp) >= 0) {
94
				if ($('[name="' + nomDuChp + '"]').hasClass('slider')) {
94
				if ($('[name="' + nomDuChp + '"]').hasClass('slider')) {
95
					$('select[name="' + nomDuChp + '"] option[value="' + value.valeur + '"]')
95
					$('select[name="' + nomDuChp + '"] option[value="' + value.valeur + '"]')
96
						.attr('selected', 'selected');
96
						.attr('selected', 'selected');
97
					var selectedIndexOptions = $('select[name="' + nomDuChp + '"]').prop('selectedIndex') + 1;
97
					var selectedIndexOptions = $('select[name="' + nomDuChp + '"]').prop('selectedIndex') + 1;
98
					$('[name="' + nomDuChp + '"]').parent().find('.horizontal-slider').slider('value', selectedIndexOptions);
98
					$('[name="' + nomDuChp + '"]').parent().find('.horizontal-slider').slider('value', selectedIndexOptions);
99
					
99
 
100
					if (nomDuChp == 'periodiciteTraitementPhyto') {
100
					if (nomDuChp == 'periodiciteTraitementPhyto') {
101
						$('[name="periodiciteTraitementPhyto"]').trigger('change');
101
						$('[name="periodiciteTraitementPhyto"]').trigger('change');
102
					}
102
					}
103
				} else {
103
				} else {
104
					$('[name="' + nomDuChp + '"]').val(value.valeur);
104
					$('[name="' + nomDuChp + '"]').val(value.valeur);
Line 215... Line 215...
215
 
215
 
216
//+----------------------------------------------------------------------------------------------------------+
216
//+----------------------------------------------------------------------------------------------------------+
Line 217... Line 217...
217
// GOOGLE MAP
217
// GOOGLE MAP
218
 
218
 
219
var map,
219
var map,
220
	geocoder,	
220
	geocoder,
221
	markerDeb,
221
	markerDeb,
222
	latLngDeb,
222
	latLngDeb,
223
	markerFin,
223
	markerFin,
224
	latLngFin,
224
	latLngFin,
Line 225... Line 225...
225
	ligneRue,
225
	ligneRue,
226
	premierDeplacement = true;
226
	premierDeplacement = true;
227
 
227
 
228
$(document).ready(function() {
228
$(document).ready(function() {
229
	initialiserGoogleMap();
229
	initialiserGoogleMap();
230
	afficherEtapeGeolocalisation(1);
230
	afficherEtapeGeolocalisation(1);
231
	
231
 
232
	// Autocompletion du champ adresse
232
	// Autocompletion du champ adresse
233
	$('#carte-recherche').on('focus', function() {
233
	$('#carte-recherche').on('focus', function() {
234
		$(this).select();
234
		$(this).select();
235
	});
235
	});
236
	$('#carte-recherche').on('mouseup', function(event) {// Pour Safari...
236
	$('#carte-recherche').on('mouseup', function(event) {// Pour Safari...
237
		event.preventDefault();
237
		event.preventDefault();
238
	});
238
	});
239
	
239
 
240
	$('#carte-recherche').keypress(function(e) {
240
	$('#carte-recherche').keypress(function(e) {
241
		if (e.which == 13) {
241
		if (e.which == 13) {
242
			e.preventDefault();
242
			e.preventDefault();
243
		}
243
		}
244
	});
244
	});
245
	
245
 
246
	$('#carte-recherche').autocomplete({
246
	$('#carte-recherche').autocomplete({
247
		//Cette partie utilise geocoder pour extraire des valeurs d'adresse
247
		//Cette partie utilise geocoder pour extraire des valeurs d'adresse
248
		source: function(request, response) {
248
		source: function(request, response) {
249
			
249
 
250
			geocoder.geocode( {'address': request.term+', France', 'region' : 'fr' }, function(results, status) {
250
			geocoder.geocode( {'address': request.term+', France', 'region' : 'fr' }, function(results, status) {
251
				if (status == google.maps.GeocoderStatus.OK) {
251
				if (status == google.maps.GeocoderStatus.OK) {
Line 270... Line 270...
270
			deplacerMarkerDeb(nouvellePosition);
270
			deplacerMarkerDeb(nouvellePosition);
271
			map.setZoom(16);
271
			map.setZoom(16);
272
			afficherEtapeGeolocalisation(2);
272
			afficherEtapeGeolocalisation(2);
273
		}
273
		}
274
	});
274
	});
275
	
275
 
276
	$('#geolocaliser').on('click', geolocaliser);
276
	$('#geolocaliser').on('click', geolocaliser);
277
});
277
});
Line 278... Line 278...
278
 
278
 
279
function initialiserGoogleMap(){
279
function initialiserGoogleMap(){
280
	latLngDeb = new google.maps.LatLng(46.30871, 2.54395);// Centre de la France
280
	latLngDeb = new google.maps.LatLng(46.30871, 2.54395);// Centre de la France
281
	var options = {
281
	var options = {
282
			zoom: 5,
282
			zoom: 5,
283
			center: latLngDeb,
283
			center: latLngDeb,
284
			mapTypeId: google.maps.MapTypeId.HYBRID,
284
			mapTypeId: google.maps.MapTypeId.HYBRID,
285
			mapTypeControlOptions: {
285
			mapTypeControlOptions: {
286
				mapTypeIds: ['OSM', 
286
				mapTypeIds: ['OSM',
287
					google.maps.MapTypeId.ROADMAP, 
287
					google.maps.MapTypeId.ROADMAP,
288
					google.maps.MapTypeId.HYBRID, 
288
					google.maps.MapTypeId.HYBRID,
289
					google.maps.MapTypeId.SATELLITE, 
289
					google.maps.MapTypeId.SATELLITE,
290
					google.maps.MapTypeId.TERRAIN]}
290
					google.maps.MapTypeId.TERRAIN]}
291
		};
291
		};
292
	
292
 
293
	// Ajout de la couche OSM à la carte
293
	// Ajout de la couche OSM à la carte
294
	osmMapType = new google.maps.ImageMapType({
294
	osmMapType = new google.maps.ImageMapType({
295
		getTileUrl: function(coord, zoom) {
295
		getTileUrl: function(coord, zoom) {
296
			return 'http://tile.openstreetmap.org/' + zoom + '/' + coord.x + '/' + coord.y + '.png';
296
			return 'http://tile.openstreetmap.org/' + zoom + '/' + coord.x + '/' + coord.y + '.png';
Line 299... Line 299...
299
		isPng: true,
299
		isPng: true,
300
		alt: 'OpenStreetMap',
300
		alt: 'OpenStreetMap',
301
		name: 'OSM',
301
		name: 'OSM',
302
		maxZoom: 19
302
		maxZoom: 19
303
	});
303
	});
304
	
304
 
305
	// Création de la carte Google
305
	// Création de la carte Google
306
	map = new google.maps.Map(document.getElementById('map-canvas'), options); //affiche la google map dans la div map_canvas
306
	map = new google.maps.Map(document.getElementById('map-canvas'), options); //affiche la google map dans la div map_canvas
307
	map.mapTypes.set('OSM', osmMapType);
307
	map.mapTypes.set('OSM', osmMapType);
308
	
308
 
309
	// Ajout de l'évènment sur click dans Carte
309
	// Ajout de l'évènment sur click dans Carte
310
	google.maps.event.addListener(map, 'click', surClickDansCarte);
310
	google.maps.event.addListener(map, 'click', surClickDansCarte);
311
	
311
 
312
	// Lorsque la carte est chargée, on vérifie si on peut précharger des données
312
	// Lorsque la carte est chargée, on vérifie si on peut précharger des données
313
	google.maps.event.addListenerOnce(map, 'idle', function(){
313
	google.maps.event.addListenerOnce(map, 'idle', function(){
314
		if (OBS_ID == '') {
314
		if (OBS_ID == '') {
315
			// Initialisation du marker de début de rue
315
			// Initialisation du marker de début de rue
316
			initialiserMarkerDeb();
316
			initialiserMarkerDeb();
Line 321... Line 321...
321
		} else {
321
		} else {
322
			okPourChargementCarte--;
322
			okPourChargementCarte--;
323
			prechargerRue();
323
			prechargerRue();
324
		}
324
		}
325
	});
325
	});
326
	
326
 
327
	// Création du Geocoder
327
	// Création du Geocoder
328
	geocoder = new google.maps.Geocoder();
328
	geocoder = new google.maps.Geocoder();
329
}
329
}
Line 330... Line 330...
330
 
330
 
Line 339... Line 339...
339
			icon: GOOGLE_MAP_MARQUEUR_DEBUT_URL,
339
			icon: GOOGLE_MAP_MARQUEUR_DEBUT_URL,
340
			position: latLngDeb
340
			position: latLngDeb
341
		});
341
		});
342
		google.maps.event.addListener(markerDeb, 'dragend', surDeplacementMarkerDeb);
342
		google.maps.event.addListener(markerDeb, 'dragend', surDeplacementMarkerDeb);
343
	}
343
	}
344
	
344
 
345
	latLngFin = latLngDeb;
345
	latLngFin = latLngDeb;
346
	if (markerFin != undefined) {
346
	if (markerFin != undefined) {
347
		markerFin.setMap(null);
347
		markerFin.setMap(null);
348
	}
348
	}
349
	latLngCentre = latLngDeb;
349
	latLngCentre = latLngDeb;
Line 404... Line 404...
404
 
404
 
405
function dessinerLigneRue(pointDebut, pointFin) {
405
function dessinerLigneRue(pointDebut, pointFin) {
406
	if (ligneRue != undefined) {
406
	if (ligneRue != undefined) {
407
		ligneRue.setMap(null);
407
		ligneRue.setMap(null);
408
	}
408
	}
409
	
409
 
410
	ligneRue = new google.maps.Polyline({
410
	ligneRue = new google.maps.Polyline({
411
		path: [pointDebut, pointFin],
411
		path: [pointDebut, pointFin],
412
		strokeColor: "#FF0000",
412
		strokeColor: "#FF0000",
413
		strokeOpacity: 1.0,
413
		strokeOpacity: 1.0,
Line 418... Line 418...
418
}
418
}
Line 419... Line 419...
419
 
419
 
420
function afficherCentreRue() {
420
function afficherCentreRue() {
421
	latLngDeb = markerDeb.getPosition();
421
	latLngDeb = markerDeb.getPosition();
422
	latLngFin = markerFin.getPosition();
422
	latLngFin = markerFin.getPosition();
423
	latLngCentre = new google.maps.LatLng((latLngFin.lat() + latLngDeb.lat())/2, (latLngFin.lng() + latLngDeb.lng())/2); 
423
	latLngCentre = new google.maps.LatLng((latLngFin.lat() + latLngDeb.lat())/2, (latLngFin.lng() + latLngDeb.lng())/2);
424
	mettreAJourStationPosition(latLngCentre);
424
	mettreAJourStationPosition(latLngCentre);
Line 425... Line 425...
425
}
425
}
426
 
426
 
427
function mettreAJourStationPosition(latLng) {
427
function mettreAJourStationPosition(latLng) {
428
	var lat = latLng.lat().toFixed(5),
428
	var lat = latLng.lat().toFixed(5),
429
		lng = latLng.lng().toFixed(5); 
429
		lng = latLng.lng().toFixed(5);
430
	remplirChampLatitude(lat);
430
	remplirChampLatitude(lat);
Line 431... Line 431...
431
	remplirChampLongitude(lng);
431
	remplirChampLongitude(lng);
Line 448... Line 448...
448
		$.ajax({
448
		$.ajax({
449
			url: urlNomCommuneFormatee,
449
			url: urlNomCommuneFormatee,
450
			type: 'GET',
450
			type: 'GET',
451
			dataType: 'jsonp',
451
			dataType: 'jsonp',
452
			beforeSend: function() {
452
			beforeSend: function() {
453
				$('.commune-info').empty();	
453
				$('.commune-info').empty();
454
				$('#dialogue-erreur .alert-txt').empty();
454
				$('#dialogue-erreur .alert-txt').empty();
455
			},
455
			},
456
			success: function(data, textStatus, jqXHR) {
456
			success: function(data, textStatus, jqXHR) {
457
				$('.commune-info').empty();
457
				$('.commune-info').empty();
458
				$('#commune-nom').append(data.nom);
458
				$('#commune-nom').append(data.nom);
459
				$('#commune-code-insee').append(data.codeINSEE);
459
				$('#commune-code-insee').append(data.codeINSEE);
460
				$('#marqueur-commune').data('commune', {'nom' : data.nom, 'codeInsee' : data.codeINSEE});
460
				$('#marqueur-commune').data('commune', {'nom' : data.nom, 'codeInsee' : data.codeINSEE});
461
			},
461
			},
462
			statusCode: {
462
			statusCode: {
463
				500: function(jqXHR, textStatus, errorThrown) {
463
				500: function(jqXHR, textStatus, errorThrown) {
464
					if (DEBUG) {	
464
					if (DEBUG) {
465
						$('#dialogue-erreur .alert-txt').append('<p id="msg">Un problème est survenu lors de l\'appel au service fournissante le nom des communes.</p>');
465
						$('#dialogue-erreur .alert-txt').append('<p id="msg">Un problème est survenu lors de l\'appel au service fournissante le nom des communes.</p>');
466
						reponse = jQuery.parseJSON(jqXHR.responseText);
466
						reponse = jQuery.parseJSON(jqXHR.responseText);
467
						var erreurMsg = "";
467
						var erreurMsg = "";
468
						if (reponse != null) {
468
						if (reponse != null) {
469
							$.each(reponse, function (cle, valeur) {
469
							$.each(reponse, function (cle, valeur) {
470
								erreurMsg += valeur + '<br />';
470
								erreurMsg += valeur + '<br />';
471
							});
471
							});
472
						}
472
						}
473
						
473
 
474
						$('#dialogue-erreur .alert-txt').append(
474
						$('#dialogue-erreur .alert-txt').append(
475
							'<p class="msg-erreur">Erreur 500 : '+errorThrown+'<br />'+erreurMsg+'</p>');
475
							'<p class="msg-erreur">Erreur 500 : '+errorThrown+'<br />'+erreurMsg+'</p>');
476
					}
476
					}
477
				}
477
				}
478
			},
478
			},
Line 485... Line 485...
485
					if (reponse != null) {
485
					if (reponse != null) {
486
						$.each(reponse, function (cle, valeur) {
486
						$.each(reponse, function (cle, valeur) {
487
							erreurMsg += valeur + '<br />';
487
							erreurMsg += valeur + '<br />';
488
						});
488
						});
489
					}
489
					}
490
					
490
 
491
					$('#dialogue-erreur .alert-txt').append(
491
					$('#dialogue-erreur .alert-txt').append(
492
						'<p class="msg-erreur">Erreur Ajax : '+errorThrown+' (type : '+textStatus+') <br />'+erreurMsg+'</p>');
492
						'<p class="msg-erreur">Erreur Ajax : '+errorThrown+' (type : '+textStatus+') <br />'+erreurMsg+'</p>');
493
				}
493
				}
494
			},
494
			},
495
			complete: function(jqXHR, textStatus) {
495
			complete: function(jqXHR, textStatus) {
Line 554... Line 554...
554
//+---------------------------------------------------------------------------------------------------------+
554
//+---------------------------------------------------------------------------------------------------------+
555
//AUTO-COMPLÉTION Noms Scientifiques
555
//AUTO-COMPLÉTION Noms Scientifiques
Line 556... Line 556...
556
 
556
 
557
function ajouterAutocompletionNoms() {
557
function ajouterAutocompletionNoms() {
558
	$('#taxon').autocomplete({
558
	$('#taxon').autocomplete({
559
		source: function(requete, add){  
559
		source: function(requete, add){
560
			// la variable de requête doit être vidée car sinon le parametre "term" est ajouté
560
			// la variable de requête doit être vidée car sinon le parametre "term" est ajouté
561
			
561
 
562
			var url = getUrlAutocompletionNomsSci();
562
			var url = getUrlAutocompletionNomsSci();
563
			$.getJSON(url, function(data) {
563
			$.getJSON(url, function(data) {
564
				var suggestions = traiterRetourNomsSci(data);
564
				var suggestions = traiterRetourNomsSci(data);
565
				add(suggestions);  
565
				add(suggestions);
566
			});
566
			});
567
		},
567
		},
568
		html: true
568
		html: true
569
	});
569
	});
570
	
570
 
571
	$('#taxon').bind('autocompleteselect', function(event, ui) {
571
	$('#taxon').bind('autocompleteselect', function(event, ui) {
572
		$('#taxon').data(ui.item);
572
		$('#taxon').data(ui.item);
573
		if (ui.item.retenu == true) {
573
		if (ui.item.retenu == true) {
574
			$('#taxon').addClass('ns-retenu');
574
			$('#taxon').addClass('ns-retenu');
Line 607... Line 607...
607
				nom.numNomSel = val.nn;
607
				nom.numNomSel = val.nn;
608
				nom.nomRet = val.nom_retenu_complet;
608
				nom.nomRet = val.nom_retenu_complet;
609
				nom.numNomRet = val['nom_retenu.id'];
609
				nom.numNomRet = val['nom_retenu.id'];
610
				nom.famille = val.famille;
610
				nom.famille = val.famille;
611
				nom.retenu = (val.retenu == 'false') ? false : true;
611
				nom.retenu = (val.retenu == 'false') ? false : true;
612
				
612
 
613
				suggestions.push(nom);
613
				suggestions.push(nom);
614
			}
614
			}
615
		});
615
		});
616
	}
616
	}
617
	return suggestions;
617
	return suggestions;
Line 622... Line 622...
622
*
622
*
623
* Copyright 2010, Scott González (http://scottgonzalez.com)
623
* Copyright 2010, Scott González (http://scottgonzalez.com)
624
* Dual licensed under the MIT or GPL Version 2 licenses.
624
* Dual licensed under the MIT or GPL Version 2 licenses.
625
*
625
*
626
* http://github.com/scottgonzalez/jquery-ui-extensions
626
* http://github.com/scottgonzalez/jquery-ui-extensions
627
* 
627
*
628
* Adaptation par Aurélien Peronnet pour la mise en gras des noms de taxons valides
628
* Adaptation par Aurélien Peronnet pour la mise en gras des noms de taxons valides
629
*/
629
*/
630
(function($) {
630
(function($) {
631
	var proto = $.ui.autocomplete.prototype,
631
	var proto = $.ui.autocomplete.prototype,
632
		initSource = proto._initSource;
632
		initSource = proto._initSource;
633
	
633
 
634
	function filter(array, term) {
634
	function filter(array, term) {
635
		var matcher = new RegExp($.ui.autocomplete.escapeRegex(term), 'i');
635
		var matcher = new RegExp($.ui.autocomplete.escapeRegex(term), 'i');
636
		return $.grep(array, function(value) {
636
		return $.grep(array, function(value) {
637
			return matcher.test($('<div>').html(value.label || value.value || value).text());
637
			return matcher.test($('<div>').html(value.label || value.value || value).text());
638
		});
638
		});
639
	}
639
	}
640
	
640
 
641
	$.extend(proto, {
641
	$.extend(proto, {
642
		_initSource: function() {
642
		_initSource: function() {
643
			if (this.options.html && $.isArray(this.options.source)) {
643
			if (this.options.html && $.isArray(this.options.source)) {
644
				this.source = function( request, response ) {
644
				this.source = function( request, response ) {
645
					response(filter(this.options.source, request.term));
645
					response(filter(this.options.source, request.term));
Line 650... Line 650...
650
		},
650
		},
651
		_renderItem: function(ul, item) {
651
		_renderItem: function(ul, item) {
652
			if (item.retenu == true) {
652
			if (item.retenu == true) {
653
				item.label = '<strong>'+item.label+'</strong>';
653
				item.label = '<strong>'+item.label+'</strong>';
654
			}
654
			}
655
			
655
 
656
			return $('<li></li>')
656
			return $('<li></li>')
657
				.data('item.autocomplete', item)
657
				.data('item.autocomplete', item)
658
				.append($('<a></a>')[this.options.html ? 'html' : 'text'](item.label))
658
				.append($('<a></a>')[this.options.html ? 'html' : 'text'](item.label))
659
				.appendTo(ul);
659
				.appendTo(ul);
660
		}
660
		}
661
	});
661
	});
662
})(jQuery);
662
})(jQuery);
Line 663... Line 663...
663
 
663
 
664
//+----------------------------------------------------------------------------------------------------------+
664
//+----------------------------------------------------------------------------------------------------------+
665
//UPLOAD PHOTO : Traitement de l'image 
665
//UPLOAD PHOTO : Traitement de l'image
666
$(document).ready(function() {
666
$(document).ready(function() {
667
	$('#fichier').on('click change', function(event) {
667
	$('#fichier').on('click change', function(event) {
668
		if ($(this).val().length > 0) {
668
		if ($(this).val().length > 0) {
669
			arreter(event);
669
			arreter(event);
670
			var options = { 
670
			var options = {
671
				success: afficherMiniature, // post-submit callback 
671
				success: afficherMiniature, // post-submit callback
672
				dataType: 'xml', // 'xml', 'script', or 'json' (expected server response type) 
672
				dataType: 'xml', // 'xml', 'script', or 'json' (expected server response type)
673
				resetForm: true // reset the form after successful submit 
673
				resetForm: true // reset the form after successful submit
674
			};
674
			};
675
			$('#miniature').append(
675
			$('#miniature').append(
676
				'<img id="miniature-chargement" class="miniature" alt="chargement" src="'+CHARGEMENT_IMAGE_URL+'"/>');
676
				'<img id="miniature-chargement" class="miniature" alt="chargement" src="'+CHARGEMENT_IMAGE_URL+'"/>');
677
			$('#ajouter-obs').attr('disabled', 'disabled');
677
			$('#ajouter-obs').attr('disabled', 'disabled');
Line 682... Line 682...
682
				window.alert("Le format de fichier n'est pas supporté, les formats acceptés sont "+	$('#fichier').attr('accept'));
682
				window.alert("Le format de fichier n'est pas supporté, les formats acceptés sont "+	$('#fichier').attr('accept'));
683
			}
683
			}
684
			return false;
684
			return false;
685
		}
685
		}
686
	});
686
	});
687
	
687
 
688
	$('#photo-placeholder').click(function(event) {
688
	$('#photo-placeholder').click(function(event) {
689
		$('#fichier').click();
689
		$('#fichier').click();
690
	});
690
	});
691
	
691
 
692
	$('body').on('click', '.effacer-miniature', function(event) {
692
	$('body').on('click', '.effacer-miniature', function(event) {
693
		supprimerMiniature($(this));
693
		supprimerMiniature($(this));
694
	});
694
	});
695
});
695
});
Line 700... Line 700...
700
	var parts = nom.split('.');
700
	var parts = nom.split('.');
701
	extension = parts[parts.length - 1];
701
	extension = parts[parts.length - 1];
702
	return (extension.toLowerCase() == 'jpeg' || extension.toLowerCase() == 'jpg');
702
	return (extension.toLowerCase() == 'jpeg' || extension.toLowerCase() == 'jpg');
703
}
703
}
Line 704... Line 704...
704
 
704
 
705
function afficherMiniature(reponse) { 
705
function afficherMiniature(reponse) {
706
	if (DEBUG) {
706
	if (DEBUG) {
707
		var debogage = $('debogage', reponse).text();
707
		var debogage = $('debogage', reponse).text();
708
		//console.log('Débogage upload : ' + debogage);
708
		//console.log('Débogage upload : ' + debogage);
709
	}
709
	}
Line 717... Line 717...
717
}
717
}
Line 718... Line 718...
718
 
718
 
719
function creerWidgetMiniature(reponse) {
719
function creerWidgetMiniature(reponse) {
720
	var miniatureUrl = $('miniature-url', reponse).text(),
720
	var miniatureUrl = $('miniature-url', reponse).text(),
721
		imgNom = $('image-nom', reponse).text(),
721
		imgNom = $('image-nom', reponse).text(),
722
		html = 
722
		html =
723
			'<div class="miniature">'+
723
			'<div class="miniature">'+
724
				'<img class="miniature-img" class="miniature" alt="'+imgNom+'" src="'+miniatureUrl+'"/>'+
724
				'<img class="miniature-img" class="miniature" alt="'+imgNom+'" src="'+miniatureUrl+'"/>'+
725
				'<button class="btn effacer-miniature" type="button">Effacer</button>'+
725
				'<button class="btn effacer-miniature" type="button">Effacer</button>'+
726
			'</div>'
726
			'</div>'
Line 738... Line 738...
738
 
738
 
739
 
739
 
Line 740... Line 740...
740
//+---------------------------------------------------------------------------------------------------------+
740
//+---------------------------------------------------------------------------------------------------------+
741
// FORMULAIRE : traitements génériques
741
// FORMULAIRE : traitements génériques
742
 
742
 
743
$(document).ready(function() {	
743
$(document).ready(function() {
744
	// Interaction générales
744
	// Interaction générales
745
	$('.alert .close').on('click', fermerPanneauAlert);
745
	$('.alert .close').on('click', fermerPanneauAlert);
746
	$('.has-tooltip').tooltip('enable');
746
	$('.has-tooltip').tooltip('enable');
747
	$('#btn-aide').on('click', basculerAffichageAide);
747
	$('#btn-aide').on('click', basculerAffichageAide);
748
	$('.dropdown-menu input, .dropdown-menu label').on('click', function(event) {
748
	$('.dropdown-menu input, .dropdown-menu label').on('click', function(event) {
749
		event.stopPropagation();
749
		event.stopPropagation();
750
	});
750
	});
751
	
751
 
752
	// Afficher/Cacher champs cachés par défaut
752
	// Afficher/Cacher champs cachés par défaut
753
	surChangementPeriodiciteTraitementPhyto();// Vérif lors du chargement de la page
753
	surChangementPeriodiciteTraitementPhyto();// Vérif lors du chargement de la page
754
	$('#periodicite-traitement-phyto').on('change', surChangementPeriodiciteTraitementPhyto);
754
	$('#periodicite-traitement-phyto').on('change', surChangementPeriodiciteTraitementPhyto);
755
	
755
 
756
	// Sliders
756
	// Sliders
757
	transformerEnSlider('#presence-zone-vegetalise');
757
	transformerEnSlider('#presence-zone-vegetalise');
758
	transformerEnSlider('#hauteur-batiment-avoisinant');
758
	transformerEnSlider('#hauteur-batiment-avoisinant');
Line 759... Line 759...
759
	transformerEnSlider('#periodicite-traitement-phyto');
759
	transformerEnSlider('#periodicite-traitement-phyto');
760
	transformerEnSlider('#resistance-traitement-phyto');
760
	transformerEnSlider('#resistance-traitement-phyto');
761
	transformerEnSlider('#vitesse-croissance');
761
	transformerEnSlider('#vitesse-croissance');
762
 
762
 
763
	// Date picker
763
	// Date picker
764
	configurerDatePicker('#date');
764
	configurerDatePicker('#date');
765
	configurerDatePicker('#date-arret-traitement-phyto');
765
	configurerDatePicker('#date-arret-traitement-phyto');
766
	
766
 
767
	// Gestion de la liste des taxons
767
	// Gestion de la liste des taxons
768
	surChangementTaxonListe();// Vérif lors du chargement de la page
768
	surChangementTaxonListe();// Vérif lors du chargement de la page
769
	ajouterAutocompletionNoms();
769
	ajouterAutocompletionNoms();
770
	$('#taxon-liste').on('change', surChangementTaxonListe);
770
	$('#taxon-liste').on('change', surChangementTaxonListe);
771
	
771
 
772
	// Validation du formulaire
772
	// Validation du formulaire
773
	configurerFormValidator();
773
	configurerFormValidator();
774
	definirReglesFormValidator();
774
	definirReglesFormValidator();
775
	
775
 
776
	// Gestion des obs
776
	// Gestion des obs
Line 784... Line 784...
784
		if (! valeur.match(/^[0-9]+$/)) {
784
		if (! valeur.match(/^[0-9]+$/)) {
785
			// replace it with nothing
785
			// replace it with nothing
786
			var nouvelleValeur = valeur.replace(/[^0-9]/g, '');
786
			var nouvelleValeur = valeur.replace(/[^0-9]/g, '');
787
			$(this).val(nouvelleValeur);
787
			$(this).val(nouvelleValeur);
788
		}
788
		}
789
	});		
789
	});
790
	$('a.afficher-coord').on('click', basculerAffichageCoord);
790
	$('a.afficher-coord').on('click', basculerAffichageCoord);
791
	$('#ajouter-obs').on('click', ajouterObs);
791
	$('#ajouter-obs').on('click', ajouterObs);
792
	$('.obs-nbre').on('changement', surChangementNbreObs);
792
	$('.obs-nbre').on('changement', surChangementNbreObs);
793
	$('body').on('click', '.supprimer-obs', supprimerObs);
793
	$('body').on('click', '.supprimer-obs', supprimerObs);
794
	$('#transmettre-obs').on('click', transmettreObs);
794
	$('#transmettre-obs').on('click', transmettreObs);
Line 801... Line 801...
801
		$('.defilement-control', this).removeClass('hidden');
801
		$('.defilement-control', this).removeClass('hidden');
802
	});
802
	});
803
	$('body').on('mouseout', '.defilement-control-zone', function(event) {
803
	$('body').on('mouseout', '.defilement-control-zone', function(event) {
804
		$('.defilement-control', this).addClass('hidden');
804
		$('.defilement-control', this).addClass('hidden');
805
	});
805
	});
806
	
806
 
807
});
807
});
Line 808... Line 808...
808
 
808
 
809
function transformerEnSlider(selector) {
809
function transformerEnSlider(selector) {
810
	$(selector).each(function(index, el) {
810
	$(selector).each(function(index, el) {
811
		// hide the element
811
		// hide the element
812
		$(el).addClass('slider-on');
812
		$(el).addClass('slider-on');
813
		
813
 
814
		// add the slider to each element
814
		// add the slider to each element
815
		var slider = $( '<div class="slider-holder"><div class="horizontal-slider"></div></div>' ).
815
		var slider = $( '<div class="slider-holder"><div class="horizontal-slider"></div></div>' ).
816
			insertBefore( el ).find('.horizontal-slider').slider({
816
			insertBefore( el ).find('.horizontal-slider').slider({
817
				min: 1,
817
				min: 1,
818
				max: el.options.length,
818
				max: el.options.length,
819
				range: 'min',
819
				range: 'min',
820
				value: el.selectedIndex + 1,
820
				value: el.selectedIndex + 1,
821
				slide: function(event, ui) {
821
				slide: function(event, ui) {
822
					el.selectedIndex = ui.value - 1;
822
					el.selectedIndex = ui.value - 1;
823
					slider.find('a').text(el.options[el.selectedIndex].text);
823
					slider.find('a').text(el.options[el.selectedIndex].text);
824
					
824
 
825
					$(selector + ' option[selected="selected"]').removeAttr('selected');
825
					$(selector + ' option[selected="selected"]').removeAttr('selected');
826
					$(selector + ' :nth-child('+ui.value+')').attr('selected', 'selected')
826
					$(selector + ' :nth-child('+ui.value+')').attr('selected', 'selected')
827
					$(selector).valid();
827
					$(selector).valid();
828
				},
828
				},
829
				stop: function() {
829
				stop: function() {
830
					$(el).change();
830
					$(el).change();
831
				}
831
				}
832
			});
832
			});
833
		
833
 
834
		slider.find('a').text(el.options[el.selectedIndex].text);
834
		slider.find('a').text(el.options[el.selectedIndex].text);
835
		
835
 
836
		// Create a legend under the slider so we can see the options
836
		// Create a legend under the slider so we can see the options
837
		var options = [];
837
		var options = [];
838
		for (var option in $(el).children()) {
838
		for (var option in $(el).children()) {
839
			if (!isNaN(parseInt(option))) {
839
			if (!isNaN(parseInt(option))) {
840
				options.push(el.options[option].text);
840
				options.push(el.options[option].text);
841
			}
841
			}
842
		}
842
		}
843
		// the width of each legend/option
843
		// the width of each legend/option
844
		var width = (slider.width() / (options.length - 1));
844
		var width = (slider.width() / (options.length - 1));
845
		
845
 
846
		// Add the legend. Half the width of the first and last options for display consistency.
846
		// Add the legend. Half the width of the first and last options for display consistency.
847
		slider.after('<div class="slider-legend"><p style="width:' + (width / 2) + 'px;text-align:left;">' + 
847
		slider.after('<div class="slider-legend"><p style="width:' + (width / 2) + 'px;text-align:left;">' +
848
			options.join('</p><p style="width:' + width + 'px;">') +'</p></div>')
848
			options.join('</p><p style="width:' + width + 'px;">') +'</p></div>')
849
			.parent().find('.slider-legend p:last-child').css('width', width / 2)
849
			.parent().find('.slider-legend p:last-child').css('width', width / 2)
850
			.css('text-align', 'right');
850
			.css('text-align', 'right');
851
		
851
 
852
		// if there are too many options so that the text is wider than the width, then hide the text
852
		// if there are too many options so that the text is wider than the width, then hide the text
853
		var lastChild = slider.parent().find('.slider-legend p:last-child');
853
		var lastChild = slider.parent().find('.slider-legend p:last-child');
854
		if (lastChild[0].clientWidth < lastChild[0].scrollWidth) {
854
		if (lastChild[0].clientWidth < lastChild[0].scrollWidth) {
855
			slider.parent().find('.slider-legend p');//.css('text-indent', '200%');
855
			slider.parent().find('.slider-legend p');//.css('text-indent', '200%');
Line 890... Line 890...
890
	$(selector + ' + img.ui-datepicker-trigger').appendTo(selector + '-icone.add-on');
890
	$(selector + ' + img.ui-datepicker-trigger').appendTo(selector + '-icone.add-on');
891
}
891
}
Line 892... Line 892...
892
 
892
 
893
function configurerFormValidator() {
893
function configurerFormValidator() {
894
	$.validator.addMethod(
894
	$.validator.addMethod(
895
		'dateCel', 
895
		'dateCel',
896
		function (value, element) { 
896
		function (value, element) {
897
			return value == '' || (/^[0-9]{2}[-\/][0-9]{2}[-\/][0-9]{4}$/.test(value)); 
897
			return value == '' || (/^[0-9]{2}[-\/][0-9]{2}[-\/][0-9]{4}$/.test(value));
898
		}, 
898
		},
899
		'Format : jj/mm/aaaa. Date incomplète, utiliser 0, exemple : 00/12/2011.');
899
		'Format : jj/mm/aaaa. Date incomplète, utiliser 0, exemple : 00/12/2011.');
900
	
900
 
901
	$.extend($.validator.defaults, {
901
	$.extend($.validator.defaults, {
902
		ignore: [],// Forcer Jquery Validate à examiner les éléments avec en display:none;
902
		ignore: [],// Forcer Jquery Validate à examiner les éléments avec en display:none;
903
		highlight: function(element) {
903
		highlight: function(element) {
904
			$(element).closest('.control-group').removeClass('success').addClass('error');
904
			$(element).closest('.control-group').removeClass('success').addClass('error');
905
		},
905
		},
906
		success: function(element) {
906
		success: function(element) {
907
			element.text('OK!').addClass('valid');
907
			element.text('OK!').addClass('valid');
908
			element.closest('.control-group').removeClass('error').addClass('success');
908
			element.closest('.control-group').removeClass('error').addClass('success');
909
			
909
 
910
			if (element.attr('id') == 'taxon' && $('#taxon').val() != '') {
910
			if (element.attr('id') == 'taxon' && $('#taxon').val() != '') {
911
				// Si le taxon n'est pas lié au référentiel, on vide le data associé
911
				// Si le taxon n'est pas lié au référentiel, on vide le data associé
912
				if ($('#taxon').data('value') != $('#taxon').val()) {
912
				if ($('#taxon').data('value') != $('#taxon').val()) {
913
					$('#taxon').data('numNomSel', '');
913
					$('#taxon').data('numNomSel', '');
Line 1053... Line 1053...
1053
		var debRue = (latLngDeb == undefined) ? false : true,
1053
		var debRue = (latLngDeb == undefined) ? false : true,
1054
			finRue = (latLngFin == undefined) ? false : true;
1054
			finRue = (latLngFin == undefined) ? false : true;
1055
		if (debRue == false || finRue == false) {
1055
		if (debRue == false || finRue == false) {
1056
			afficherPanneau('#dialogue-form-invalide-rue');
1056
			afficherPanneau('#dialogue-form-invalide-rue');
1057
		} else {
1057
		} else {
1058
			afficherPanneau('#dialogue-form-invalide');			
1058
			afficherPanneau('#dialogue-form-invalide');
1059
		}
1059
		}
1060
	}
1060
	}
1061
}
1061
}
Line 1062... Line 1062...
1062
 
1062
 
Line 1074... Line 1074...
1074
		revetement = $('#revetement-sol').val(),
1074
		revetement = $('#revetement-sol').val(),
1075
		intensiteGestion = $('#intensite-gestion').val(),
1075
		intensiteGestion = $('#intensite-gestion').val(),
1076
		resistance = $('#resistance-traitement-phyto').val(),
1076
		resistance = $('#resistance-traitement-phyto').val(),
1077
		milieux = getMilieux(),
1077
		milieux = getMilieux(),
1078
		notes = (nomSpecial ? taxons[numNomSel]['nom_fr'] + ".<br />" : '') + $('#notes').val();
1078
		notes = (nomSpecial ? taxons[numNomSel]['nom_fr'] + ".<br />" : '') + $('#notes').val();
1079
	
1079
 
1080
	$('#liste-obs').prepend(
1080
	$('#liste-obs').prepend(
1081
		'<div id="obs'+obsNbre+'" class="row-fluid obs obs'+obsNbre+'">'+
1081
		'<div id="obs'+obsNbre+'" class="row-fluid obs obs'+obsNbre+'">'+
1082
			'<div class="span12">'+
1082
			'<div class="span12">'+
1083
				'<div class="well">'+
1083
				'<div class="well">'+
1084
					'<div class="obs-action pull-right has-tooltip" data-placement="bottom" '+
1084
					'<div class="obs-action pull-right has-tooltip" data-placement="bottom" '+
1085
						'title="Supprimer cette observation de la liste à transmettre">'+
1085
						'title="Supprimer cette observation de la liste à transmettre">'+
1086
						'<button class="btn btn-danger supprimer-obs" value="'+obsNbre+'" title="'+obsNbre+'">'+
1086
						'<button class="btn btn-danger supprimer-obs" value="'+obsNbre+'" title="'+obsNbre+'">'+
1087
							'<i class="icon-trash icon-white"></i>'+
1087
							'<i class="icon-trash icon-white"></i>'+
1088
						'</button>'+
1088
						'</button>'+
1089
					'</div> '+		
1089
					'</div> '+
1090
					'<div class="row-fluid">'+	
1090
					'<div class="row-fluid">'+
1091
						'<div class="span2 obs-miniatures">'+
1091
						'<div class="span2 obs-miniatures">'+
1092
							ajouterImgMiniatureAuTransfert()+
1092
							ajouterImgMiniatureAuTransfert()+
1093
						'</div>'+
1093
						'</div>'+
1094
						'<div class="span8">'+
1094
						'<div class="span8">'+
1095
							'<ul class="unstyled">'+
1095
							'<ul class="unstyled">'+
Line 1109... Line 1109...
1109
									'<span>Intensité de gestion :</span> ' + intensiteGestion + ' ' + ' ; ' +
1109
									'<span>Intensité de gestion :</span> ' + intensiteGestion + ' ' + ' ; ' +
1110
									'<span>Milieu :</span> ' + milieux + ' ' + ' ; ' +
1110
									'<span>Milieu :</span> ' + milieux + ' ' + ' ; ' +
1111
									'<span>Résistance/Résilience :</span> ' + resistance + ' ' +
1111
									'<span>Résistance/Résilience :</span> ' + resistance + ' ' +
1112
								'</li>' +
1112
								'</li>' +
1113
								'<li>' +
1113
								'<li>' +
1114
									'Commentaires : ' + notes + 
1114
									'Commentaires : ' + notes +
1115
								'</li>'+
1115
								'</li>'+
1116
							'</ul>'+
1116
							'</ul>'+
1117
						'</div>'+
1117
						'</div>'+
1118
					'</div>'+
1118
					'</div>'+
1119
				'</div>'+
1119
				'</div>'+
Line 1125... Line 1125...
1125
	var milieuxStr = '',
1125
	var milieuxStr = '',
1126
		milieux = [];
1126
		milieux = [];
1127
	$('.cb-milieux:checked').each(function() {
1127
	$('.cb-milieux:checked').each(function() {
1128
		milieux.push($(this).val());
1128
		milieux.push($(this).val());
1129
	});
1129
	});
1130
	
1130
 
1131
	milieuxStr = Array.prototype.slice.call(milieux).join(', ');
1131
	milieuxStr = Array.prototype.slice.call(milieux).join(', ');
1132
	return milieuxStr;
1132
	return milieuxStr;
1133
}
1133
}
Line 1134... Line 1134...
1134
 
1134
 
Line 1144... Line 1144...
1144
		$('#miniatures img').each(function() {
1144
		$('#miniatures img').each(function() {
1145
			var visible = premiere ? 'miniature-selectionnee' : 'miniature-cachee',
1145
			var visible = premiere ? 'miniature-selectionnee' : 'miniature-cachee',
1146
				css = $(this).hasClass('b64') ? 'miniature b64' : 'miniature',
1146
				css = $(this).hasClass('b64') ? 'miniature b64' : 'miniature',
1147
				src = $(this).attr('src'),
1147
				src = $(this).attr('src'),
1148
				alt = $(this).attr('alt');
1148
				alt = $(this).attr('alt');
1149
			
1149
 
1150
			var miniature = '<img class="'+css+' '+visible+'"  alt="'+alt+'"src="'+src+'" />';
1150
			var miniature = '<img class="'+css+' '+visible+'"  alt="'+alt+'"src="'+src+'" />';
1151
			miniatures += miniature;
1151
			miniatures += miniature;
1152
			
1152
 
1153
			var indicateurActif = premiere ? 'active' : '';
1153
			var indicateurActif = premiere ? 'active' : '';
1154
			var indicateur = '<li class="' + indicateurActif + '" data-numero="' + numero++ + '"></li>';
1154
			var indicateur = '<li class="' + indicateurActif + '" data-numero="' + numero++ + '"></li>';
1155
			indicateurs += indicateur;
1155
			indicateurs += indicateur;
1156
		
1156
 
1157
			premiere = false;
1157
			premiere = false;
1158
		});
1158
		});
1159
		
1159
 
1160
		if ($('#miniatures img').length == 1) {
1160
		if ($('#miniatures img').length == 1) {
1161
			html = miniatures;
1161
			html = miniatures;
1162
		} else {
1162
		} else {
1163
			html = 
1163
			html =
1164
				'<div class="defilement">' +
1164
				'<div class="defilement">' +
1165
					miniatures +
1165
					miniatures +
1166
					'<a class="defilement-control-zone gauche">' +
1166
					'<a class="defilement-control-zone gauche">' +
1167
					'	<span class="defilement-control gauche hidden">&#60;</span>' +
1167
					'	<span class="defilement-control gauche hidden">&#60;</span>' +
1168
					'</a>' +
1168
					'</a>' +
Line 1178... Line 1178...
1178
 
1178
 
1179
function defilerMiniatures(element) {
1179
function defilerMiniatures(element) {
1180
	var miniatureSelectionne = element.siblings('img.miniature-selectionnee');
1180
	var miniatureSelectionne = element.siblings('img.miniature-selectionnee');
1181
	miniatureSelectionne.removeClass('miniature-selectionnee').addClass('miniature-cachee');
1181
	miniatureSelectionne.removeClass('miniature-selectionnee').addClass('miniature-cachee');
1182
	var miniatureAffichee = miniatureSelectionne;
1182
	var miniatureAffichee = miniatureSelectionne;
1183
	
1183
 
1184
	var indicateurActif = element.parent().find('.defilement-indicateurs .active');
1184
	var indicateurActif = element.parent().find('.defilement-indicateurs .active');
1185
	indicateurActif.removeClass('active');
1185
	indicateurActif.removeClass('active');
1186
	
1186
 
1187
	if (element.hasClass('defilement-control-zone') && element.hasClass('gauche')) {
1187
	if (element.hasClass('defilement-control-zone') && element.hasClass('gauche')) {
1188
		if (miniatureSelectionne.prev('.miniature').length != 0) {
1188
		if (miniatureSelectionne.prev('.miniature').length != 0) {
1189
			miniatureAffichee = miniatureSelectionne.prev('.miniature');
1189
			miniatureAffichee = miniatureSelectionne.prev('.miniature');
1190
			indicateurActif.prev().addClass('active');
1190
			indicateurActif.prev().addClass('active');
Line 1213... Line 1213...
1213
	}
1213
	}
1214
	return nn;
1214
	return nn;
1215
}
1215
}
Line 1216... Line 1216...
1216
 
1216
 
1217
function surChangementReferentiel() {
1217
function surChangementReferentiel() {
1218
	NOM_SCI_PROJET = $('#referentiel').val();
-
 
1219
	NOM_SCI_REFERENTIEL = NOM_SCI_PROJET+':'+PROJETS_VERSIONS[NOM_SCI_PROJET];
1218
	NOM_SCI_REFERENTIEL = $('#referentiel').val();
1220
	$('#taxon').val('');
1219
	$('#taxon').val('');
Line 1221... Line 1220...
1221
}
1220
}
1222
 
1221
 
1223
function surChangementNbreObs() {
1222
function surChangementNbreObs() {
1224
	if (obsNbre == 0) {
1223
	if (obsNbre == 0) {
1225
		$('#transmettre-obs').attr('disabled', 'disabled');
1224
		$('#transmettre-obs').attr('disabled', 'disabled');
1226
		$('#ajouter-obs').removeAttr('disabled');
1225
		$('#ajouter-obs').removeAttr('disabled');
1227
		$('#zone-liste-obs').addClass('hidden');
1226
		$('#zone-liste-obs').addClass('hidden');
1228
	} else {
1227
	} else {
1229
		$('#zone-liste-obs').removeClass('hidden');
1228
		$('#zone-liste-obs').removeClass('hidden');
1230
		
1229
 
1231
		if (obsNbre > 0 && obsNbre < OBS_MAX_NBRE) {
1230
		if (obsNbre > 0 && obsNbre < OBS_MAX_NBRE) {
1232
			$('#transmettre-obs').removeAttr('disabled');
1231
			$('#transmettre-obs').removeAttr('disabled');
1233
			$('#ajouter-obs').removeAttr('disabled');
1232
			$('#ajouter-obs').removeAttr('disabled');
Line 1293... Line 1292...
1293
		numNomRet = nomHorsListe ? $('#taxon').data('numNomRet') : taxons[numNomSel]['num_nom_ret'],
1292
		numNomRet = nomHorsListe ? $('#taxon').data('numNomRet') : taxons[numNomSel]['num_nom_ret'],
1294
		numTaxon = nomHorsListe ? $('#taxon').data('nt') : taxons[numNomSel]['num_taxon'],
1293
		numTaxon = nomHorsListe ? $('#taxon').data('nt') : taxons[numNomSel]['num_taxon'],
1295
		famille = nomHorsListe ? $('#taxon').data('famille') : taxons[numNomSel]['famille'],
1294
		famille = nomHorsListe ? $('#taxon').data('famille') : taxons[numNomSel]['famille'],
1296
		referentiel = (numNomSel == undefined) ? '' : NOM_SCI_REFERENTIEL,
1295
		referentiel = (numNomSel == undefined) ? '' : NOM_SCI_REFERENTIEL,
1297
		notes = (nomSpecial ? taxons[numNomSel]['nom_fr'] + '. ' : '') + $('#notes').val();
1296
		notes = (nomSpecial ? taxons[numNomSel]['nom_fr'] + '. ' : '') + $('#notes').val();
1298
	
1297
 
1299
	$('#liste-obs').data('obsId'+obsNbre, {
1298
	$('#liste-obs').data('obsId'+obsNbre, {
1300
		'date': $('#date').val(), 
1299
		'date': $('#date').val(),
1301
		'notes': notes,
1300
		'notes': notes,
1302
		
1301
 
1303
		'station': $('#station').val(),
1302
		'station': $('#station').val(),
1304
		'latitude': $('#latitude').val(),
1303
		'latitude': $('#latitude').val(),
1305
		'longitude': $('#longitude').val(),
1304
		'longitude': $('#longitude').val(),
1306
		'commune_nom': $('#commune-nom').text(),
1305
		'commune_nom': $('#commune-nom').text(),
1307
		'commune_code_insee': $('#commune-code-insee').text(),
1306
		'commune_code_insee': $('#commune-code-insee').text(),
1308
		
1307
 
1309
		'nom_sel': nomSel,
1308
		'nom_sel': nomSel,
1310
		'num_nom_sel': numNomSel,
1309
		'num_nom_sel': numNomSel,
1311
		'nom_ret': nomRet,
1310
		'nom_ret': nomRet,
1312
		'num_nom_ret': numNomRet,
1311
		'num_nom_ret': numNomRet,
1313
		'num_taxon': numTaxon,
1312
		'num_taxon': numTaxon,
1314
		'famille': famille,
1313
		'famille': famille,
1315
		'referentiel': referentiel,
1314
		'referentiel': referentiel,
1316
		
1315
 
1317
		'milieu': getMilieux(),
1316
		'milieu': getMilieux(),
1318
		
1317
 
1319
		// Ajout des champs images
1318
		// Ajout des champs images
1320
		'image_nom': getNomsImgsOriginales(),
1319
		'image_nom': getNomsImgsOriginales(),
1321
		
1320
 
1322
		// Ajout des champs étendus de l'obs
1321
		// Ajout des champs étendus de l'obs
1323
		'obs_etendue': getObsChpEtendus()
1322
		'obs_etendue': getObsChpEtendus()
1324
	});
1323
	});
1325
	//console.log($('#liste-obs').data('obsId'+obsNbre));
1324
	//console.log($('#liste-obs').data('obsId'+obsNbre));
1326
}
1325
}
Line 1341... Line 1340...
1341
		var latitudeFinRue = {cle: 'latitudeFinRue', label: 'Latitude de fin de la rue', valeur: latLngFin.lat().toFixed(5)};
1340
		var latitudeFinRue = {cle: 'latitudeFinRue', label: 'Latitude de fin de la rue', valeur: latLngFin.lat().toFixed(5)};
1342
		champs.push(latitudeFinRue);
1341
		champs.push(latitudeFinRue);
1343
		var longitudeFinRue = {cle: 'longitudeFinRue', label: 'Longitude de fin de la rue', valeur: latLngFin.lng().toFixed(5)};
1342
		var longitudeFinRue = {cle: 'longitudeFinRue', label: 'Longitude de fin de la rue', valeur: latLngFin.lng().toFixed(5)};
1344
		champs.push(longitudeFinRue);
1343
		champs.push(longitudeFinRue);
1345
	}
1344
	}
1346
	
1345
 
1347
	$('.obs-chp-etendu').each(function() {
1346
	$('.obs-chp-etendu').each(function() {
1348
		var valeur = $(this).val(),
1347
		var valeur = $(this).val(),
1349
			cle = $(this).attr('name'),
1348
			cle = $(this).attr('name'),
1350
			label = $(this).data('label');
1349
			label = $(this).data('label');
1351
		if (valeur != '') {
1350
		if (valeur != '') {
Line 1391... Line 1390...
1391
	// la boucle est factice car on utilise un tableau
1390
	// la boucle est factice car on utilise un tableau
1392
	// dont on a besoin de n'extraire que le premier élément
1391
	// dont on a besoin de n'extraire que le premier élément
1393
	// or javascript n'a pas de méthode cross browsers pour extraire les clés
1392
	// or javascript n'a pas de méthode cross browsers pour extraire les clés
1394
	// TODO: utiliser var.keys quand ça sera plus répandu
1393
	// TODO: utiliser var.keys quand ça sera plus répandu
1395
	// ou bien utiliser un vrai tableau et pas un objet
1394
	// ou bien utiliser un vrai tableau et pas un objet
1396
	for (var obsNum in observations) {	
1395
	for (var obsNum in observations) {
1397
		obsATransmettre = new Object();	
1396
		obsATransmettre = new Object();
1398
	    
1397
 
1399
	    obsATransmettre['projet'] = TAG_PROJET;
1398
	    obsATransmettre['projet'] = TAG_PROJET;
1400
	    obsATransmettre['tag-obs'] = TAG_OBS;
1399
	    obsATransmettre['tag-obs'] = TAG_OBS;
1401
	    obsATransmettre['tag-img'] = TAG_IMG;
1400
	    obsATransmettre['tag-img'] = TAG_IMG;
1402
		
1401
 
1403
		var utilisateur = new Object();
1402
		var utilisateur = new Object();
1404
		utilisateur.id_utilisateur = $("#id_utilisateur").val();
1403
		utilisateur.id_utilisateur = $("#id_utilisateur").val();
1405
		utilisateur.prenom = $("#prenom").val();
1404
		utilisateur.prenom = $("#prenom").val();
1406
		utilisateur.nom = $("#nom").val();
1405
		utilisateur.nom = $("#nom").val();
1407
		utilisateur.courriel = $("#courriel").val();
1406
		utilisateur.courriel = $("#courriel").val();
Line 1409... Line 1408...
1409
		obsATransmettre[obsNum] = observations[obsNum];
1408
		obsATransmettre[obsNum] = observations[obsNum];
1410
		var idObsNumerique = obsNum.replace('obsId', '');
1409
		var idObsNumerique = obsNum.replace('obsId', '');
1411
		if(idObsNumerique != "") {
1410
		if(idObsNumerique != "") {
1412
			envoyerObsAuCel(idObsNumerique, obsATransmettre);
1411
			envoyerObsAuCel(idObsNumerique, obsATransmettre);
1413
		}
1412
		}
1414
		
1413
 
1415
		break;
1414
		break;
1416
	}
1415
	}
1417
}
1416
}
Line 1418... Line 1417...
1418
 
1417
 
Line 1439... Line 1438...
1439
		data: observation,
1438
		data: observation,
1440
		dataType: 'json',
1439
		dataType: 'json',
1441
		beforeSend: function() {
1440
		beforeSend: function() {
1442
			$('#dialogue-obs-transaction-ko').hide();
1441
			$('#dialogue-obs-transaction-ko').hide();
1443
			$('#dialogue-obs-transaction-ok').hide();
1442
			$('#dialogue-obs-transaction-ok').hide();
1444
			$('.alert-txt').empty();	
1443
			$('.alert-txt').empty();
1445
			$('#chargement').show();
1444
			$('#chargement').show();
1446
		},
1445
		},
1447
		success: function(data, textStatus, jqXHR) {
1446
		success: function(data, textStatus, jqXHR) {
1448
			// mise à jour du nombre d'obs à transmettre
1447
			// mise à jour du nombre d'obs à transmettre
1449
			// et suppression de l'obs
1448
			// et suppression de l'obs
Line 1476... Line 1475...
1476
				debugNonJson = jqXHR.responseText;
1475
				debugNonJson = jqXHR.responseText;
1477
			}
1476
			}
1478
		},
1477
		},
1479
		complete: function(jqXHR, textStatus) {
1478
		complete: function(jqXHR, textStatus) {
1480
			var debugMsg = extraireEnteteDebug(jqXHR);
1479
			var debugMsg = extraireEnteteDebug(jqXHR);
1481
			
1480
 
1482
			if (erreurMsg != '') {
1481
			if (erreurMsg != '') {
1483
				if (DEBUG) {
1482
				if (DEBUG) {
1484
					$('#dialogue-obs-transaction-ko .alert-txt').append('<pre class="msg-erreur">' + erreurMsg + '</pre>');
1483
					$('#dialogue-obs-transaction-ko .alert-txt').append('<pre class="msg-erreur">' + erreurMsg + '</pre>');
1485
					$('#dialogue-obs-transaction-ko .alert-txt').append('<pre class="msg-debug">Débogage : ' + debugNonJson + debugMsg + '</pre>');
1484
					$('#dialogue-obs-transaction-ko .alert-txt').append('<pre class="msg-debug">Débogage : ' + debugNonJson + debugMsg + '</pre>');
1486
				}
1485
				}
1487
				var hrefCourriel = 'mailto:cel_remarques@tela-botanica.org?' + 
1486
				var hrefCourriel = 'mailto:cel_remarques@tela-botanica.org?' +
1488
					'subject=Disfonctionnement du widget de saisie ' + TAG_PROJET + 
1487
					'subject=Disfonctionnement du widget de saisie ' + TAG_PROJET +
1489
					'&body=' + erreurMsg + "\nDébogage :\n" + debugMsg + debugNonJson;
1488
					'&body=' + erreurMsg + "\nDébogage :\n" + debugMsg + debugNonJson;
1490
				
1489
 
1491
				// mise en valeur de l'obs en erreur + scroll vers celle ci en changeant le hash
1490
				// mise en valeur de l'obs en erreur + scroll vers celle ci en changeant le hash
1492
				$('#obs'+idObs+' div div').addClass('obs-erreur');
1491
				$('#obs'+idObs+' div div').addClass('obs-erreur');
1493
				window.location.hash = "obs"+idObs;
1492
				window.location.hash = "obs"+idObs;
1494
				
1493
 
1495
				$('#dialogue-obs-transaction-ko .alert-txt').append($('#tpl-transmission-ko').clone()
1494
				$('#dialogue-obs-transaction-ko .alert-txt').append($('#tpl-transmission-ko').clone()
1496
					.find('.courriel-erreur')
1495
					.find('.courriel-erreur')
1497
					.attr('href', hrefCourriel)
1496
					.attr('href', hrefCourriel)
1498
					.end()
1497
					.end()
1499
					.html());
1498
					.html());
Line 1510... Line 1509...
1510
						$('#dialogue-obs-transaction-ok .alert-txt').append($('#tpl-transmission-ok').clone().html());
1509
						$('#dialogue-obs-transaction-ok .alert-txt').append($('#tpl-transmission-ok').clone().html());
1511
						$("#dialogue-obs-transaction-ok").show();
1510
						$("#dialogue-obs-transaction-ok").show();
1512
						window.location.hash = "dialogue-obs-transaction-ok";
1511
						window.location.hash = "dialogue-obs-transaction-ok";
1513
						initialiserObs();
1512
						initialiserObs();
1514
					}, 1500);
1513
					}, 1500);
1515
					
1514
 
1516
				}
1515
				}
1517
			}
1516
			}
1518
		}
1517
		}
1519
	});
1518
	});
1520
}
1519
}
1521
1520