Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 2257 Rev 2408
Line 45... Line 45...
45
//+----------------------------------------------------------------------------------------------------------+
45
//+----------------------------------------------------------------------------------------------------------+
46
//FORM IDENTITE : gestion de l'observateur => OK
46
//FORM IDENTITE : gestion de l'observateur => OK
Line 47... Line 47...
47
 
47
 
48
$(document).ready(function() {
48
$(document).ready(function() {
49
	requeterIdentite();// Sur rechargement de la page
49
	requeterIdentite();// Sur rechargement de la page
50
	
50
 
51
	// Interaction sur le formulaire observateur
51
	// Interaction sur le formulaire observateur
52
	$('#prenom').on('change', formaterPrenom);
52
	$('#prenom').on('change', formaterPrenom);
53
	$('#nom').on('change', formaterNom);
53
	$('#nom').on('change', formaterNom);
54
	$('#courriel').on('keyup', testerLancementRequeteIdentite);
54
	$('#courriel').on('keyup', testerLancementRequeteIdentite);
Line 135... Line 135...
135
}
135
}
Line 136... Line 136...
136
 
136
 
137
//+----------------------------------------------------------------------------------------------------------+
137
//+----------------------------------------------------------------------------------------------------------+
138
//GOOGLE MAP => OK
138
//GOOGLE MAP => OK
139
var map,
139
var map,
140
	geocoder,	
140
	geocoder,
141
	markerDeb,
141
	markerDeb,
142
	latLngDeb,
142
	latLngDeb,
143
	markerFin,
143
	markerFin,
144
	latLngFin,
144
	latLngFin,
145
	ligneRue,
145
	ligneRue,
Line 146... Line 146...
146
	premierDeplacement = true;
146
	premierDeplacement = true;
147
 
147
 
148
$(document).ready(function() {
148
$(document).ready(function() {
149
	initialiserGoogleMap();
149
	initialiserGoogleMap();
150
	afficherEtapeGeolocalisation(1);
150
	afficherEtapeGeolocalisation(1);
151
	
151
 
152
	// Autocompletion du champ adresse
152
	// Autocompletion du champ adresse
153
	$('#carte-recherche').on('focus', function() {
153
	$('#carte-recherche').on('focus', function() {
154
		$(this).select();
154
		$(this).select();
155
	});
155
	});
156
	$('#carte-recherche').on('mouseup', function(event) {// Pour Safari...
156
	$('#carte-recherche').on('mouseup', function(event) {// Pour Safari...
157
		event.preventDefault();
157
		event.preventDefault();
158
	});
158
	});
159
	
159
 
160
	$('#carte-recherche').keypress(function(e) {
160
	$('#carte-recherche').keypress(function(e) {
161
		if (e.which == 13) {
161
		if (e.which == 13) {
162
			e.preventDefault();
162
			e.preventDefault();
163
		}
163
		}
164
	});
164
	});
165
	
165
 
166
	$('#carte-recherche').autocomplete({
166
	$('#carte-recherche').autocomplete({
167
		//Cette partie utilise geocoder pour extraire des valeurs d'adresse
167
		//Cette partie utilise geocoder pour extraire des valeurs d'adresse
168
		source: function(request, response) {
168
		source: function(request, response) {
169
			
169
 
170
			geocoder.geocode( {'address': request.term+', France', 'region' : 'fr' }, function(results, status) {
170
			geocoder.geocode( {'address': request.term+', France', 'region' : 'fr' }, function(results, status) {
171
				if (status == google.maps.GeocoderStatus.OK) {
171
				if (status == google.maps.GeocoderStatus.OK) {
172
					response($.map(results, function(item) {
172
					response($.map(results, function(item) {
Line 196... Line 196...
196
			deplacerMarkerDeb(nouvellePosition);
196
			deplacerMarkerDeb(nouvellePosition);
197
			map.setZoom(16);
197
			map.setZoom(16);
198
			afficherEtapeGeolocalisation(2);
198
			afficherEtapeGeolocalisation(2);
199
		}
199
		}
200
	});
200
	});
201
	
201
 
202
	$('#geolocaliser').on('click', geolocaliser);
202
	$('#geolocaliser').on('click', geolocaliser);
203
});
203
});
Line 204... Line 204...
204
 
204
 
205
function initialiserGoogleMap(){
205
function initialiserGoogleMap(){
Line 212... Line 212...
212
	var options = {
212
	var options = {
213
			zoom: 16,
213
			zoom: 16,
214
			center: latLngDeb,
214
			center: latLngDeb,
215
			mapTypeId: google.maps.MapTypeId.HYBRID,
215
			mapTypeId: google.maps.MapTypeId.HYBRID,
216
			mapTypeControlOptions: {
216
			mapTypeControlOptions: {
217
				mapTypeIds: ['OSM', 
217
				mapTypeIds: ['OSM',
218
					google.maps.MapTypeId.ROADMAP, 
218
					google.maps.MapTypeId.ROADMAP,
219
					google.maps.MapTypeId.HYBRID, 
219
					google.maps.MapTypeId.HYBRID,
220
					google.maps.MapTypeId.SATELLITE, 
220
					google.maps.MapTypeId.SATELLITE,
221
					google.maps.MapTypeId.TERRAIN]}
221
					google.maps.MapTypeId.TERRAIN]}
222
		};
222
		};
223
	
223
 
224
	// Ajout de la couche OSM à la carte
224
	// Ajout de la couche OSM à la carte
225
	osmMapType = new google.maps.ImageMapType({
225
	osmMapType = new google.maps.ImageMapType({
226
		getTileUrl: function(coord, zoom) {
226
		getTileUrl: function(coord, zoom) {
227
			return 'http://tile.openstreetmap.org/' + zoom + '/' + coord.x + '/' + coord.y + '.png';
227
			return 'http://tile.openstreetmap.org/' + zoom + '/' + coord.x + '/' + coord.y + '.png';
228
		},
228
		},
Line 230... Line 230...
230
		isPng: true,
230
		isPng: true,
231
		alt: 'OpenStreetMap',
231
		alt: 'OpenStreetMap',
232
		name: 'OSM',
232
		name: 'OSM',
233
		maxZoom: 19
233
		maxZoom: 19
234
	});
234
	});
235
	
235
 
236
	// Création de la carte Google
236
	// Création de la carte Google
237
	map = new google.maps.Map(document.getElementById('map-canvas'), options); //affiche la google map dans la div map_canvas
237
	map = new google.maps.Map(document.getElementById('map-canvas'), options); //affiche la google map dans la div map_canvas
238
	map.mapTypes.set('OSM', osmMapType);
238
	map.mapTypes.set('OSM', osmMapType);
239
	
239
 
240
	// Ajout de l'évènment sur click dans Carte
240
	// Ajout de l'évènment sur click dans Carte
241
	google.maps.event.addListener(map, 'click', surClickDansCarte);
241
	google.maps.event.addListener(map, 'click', surClickDansCarte);
242
	
242
 
243
	// Lorsque la carte est chargée, on vérifie si on peut précharger des données
243
	// Lorsque la carte est chargée, on vérifie si on peut précharger des données
244
	google.maps.event.addListenerOnce(map, 'idle', function(){
244
	google.maps.event.addListenerOnce(map, 'idle', function(){
245
		// Initialisation du marker de début de rue
245
		// Initialisation du marker de début de rue
246
		initialiserMarkerDeb();
246
		initialiserMarkerDeb();
247
		if (OBS_ID != '') {
247
		if (OBS_ID != '') {
Line 249... Line 249...
249
		} else {
249
		} else {
250
			// Tentative de geocalisation si aucune obs à précharger
250
			// Tentative de geocalisation si aucune obs à précharger
251
			tenterGeolocalisation();
251
			tenterGeolocalisation();
252
		}
252
		}
253
	});
253
	});
254
	
254
 
255
	// Création du Geocoder
255
	// Création du Geocoder
256
	geocoder = new google.maps.Geocoder();
256
	geocoder = new google.maps.Geocoder();
257
}
257
}
Line 258... Line 258...
258
 
258
 
Line 262... Line 262...
262
		url: urlObs,
262
		url: urlObs,
263
		type: 'GET',
263
		type: 'GET',
264
		success: function(data, textStatus, jqXHR) {
264
		success: function(data, textStatus, jqXHR) {
265
			if (data != undefined && data != "") {
265
			if (data != undefined && data != "") {
266
				prechargerForm(data);
266
				prechargerForm(data);
267
			} 
267
			}
268
			// TODO: voir s'il est pertinent d'indiquer quelque chose en cas d'erreur ou d'obs
268
			// TODO: voir s'il est pertinent d'indiquer quelque chose en cas d'erreur ou d'obs
269
			// inexistante 
269
			// inexistante
270
		},
270
		},
271
		error: function(jqXHR, textStatus, errorThrown) {
271
		error: function(jqXHR, textStatus, errorThrown) {
272
			// TODO: cf TODO ci-dessus
272
			// TODO: cf TODO ci-dessus
273
		}
273
		}
274
	});
274
	});
275
}
275
}
Line 276... Line 276...
276
 
276
 
277
function prechargerForm(data) {
277
function prechargerForm(data) {
278
	
278
 
279
    $('#carte-recherche').val(data.zoneGeo);
279
    $('#carte-recherche').val(data.zoneGeo);
280
    
280
 
281
	$('#commune-nom').text(data.zoneGeo);
281
	$('#commune-nom').text(data.zoneGeo);
282
	
282
 
283
	if(data.hasOwnProperty("codeZoneGeo")) {
283
	if(data.hasOwnProperty("codeZoneGeo")) {
284
		$('#commune-code-insee').text(data.codeZoneGeo.replace('INSEE-C:', ''));
284
		$('#commune-code-insee').text(data.codeZoneGeo.replace('INSEE-C:', ''));
285
	}
285
	}
286
	
286
 
287
    pos = new google.maps.LatLng(data.latitude, data.longitude); 
287
    pos = new google.maps.LatLng(data.latitude, data.longitude);
288
    
288
 
289
    if(data.hasOwnProperty("extension")) {
289
    if(data.hasOwnProperty("extension")) {
290
    	initialiserMarkerFin();
290
    	initialiserMarkerFin();
291
    	
291
 
292
    	// cas des obs florilèges qui apparaissent aussi comme des obs sauvages
292
    	// cas des obs florilèges qui apparaissent aussi comme des obs sauvages
293
    	// mais qui n'ont pas de coté de rue
293
    	// mais qui n'ont pas de coté de rue
294
    	if(data.extension.hasOwnProperty("coteRue")) {
294
    	if(data.extension.hasOwnProperty("coteRue")) {
295
    		$('#rue_cote option[value='+data.extension.coteRue.valeur+']').attr("selected", "selected");
295
    		$('#rue_cote option[value='+data.extension.coteRue.valeur+']').attr("selected", "selected");
296
    	}
296
    	}
297
	        
297
 
298
	    deb = new google.maps.LatLng(data.extension.latitudeDebutRue.valeur, data.extension.longitudeDebutRue.valeur);
298
	    deb = new google.maps.LatLng(data.extension.latitudeDebutRue.valeur, data.extension.longitudeDebutRue.valeur);
299
	    fin = new google.maps.LatLng(data.extension.latitudeFinRue.valeur, data.extension.longitudeFinRue.valeur);
299
	    fin = new google.maps.LatLng(data.extension.latitudeFinRue.valeur, data.extension.longitudeFinRue.valeur);
300
	    
300
 
301
	    mettreAJourStationPosition(pos);
301
	    mettreAJourStationPosition(pos);
302
	    
302
 
303
	    deplacerMarkerDeb(deb);
303
	    deplacerMarkerDeb(deb);
304
	    deplacerMarkerFin(fin);
304
	    deplacerMarkerFin(fin);
305
	    afficherEtapeGeolocalisation(4);
305
	    afficherEtapeGeolocalisation(4);
306
	    
306
 
307
	    var latlngbounds = new google.maps.LatLngBounds();
307
	    var latlngbounds = new google.maps.LatLngBounds();
308
	    latlngbounds.extend(deb);
308
	    latlngbounds.extend(deb);
309
	    latlngbounds.extend(fin);
309
	    latlngbounds.extend(fin);
310
	    map.setCenter(latlngbounds.getCenter());
310
	    map.setCenter(latlngbounds.getCenter());
311
	    map.fitBounds(latlngbounds); 
311
	    map.fitBounds(latlngbounds);
312
    } else if(data.hasOwnProperty("latitude") && data.hasOwnProperty("longitude")) {
312
    } else if(data.hasOwnProperty("latitude") && data.hasOwnProperty("longitude")) {
313
    	deplacerMarkerDeb(pos);
313
    	deplacerMarkerDeb(pos);
314
    }
314
    }
Line 325... Line 325...
325
			icon: GOOGLE_MAP_MARQUEUR_DEBUT_URL,
325
			icon: GOOGLE_MAP_MARQUEUR_DEBUT_URL,
326
			position: latLngDeb
326
			position: latLngDeb
327
		});
327
		});
328
		google.maps.event.addListener(markerDeb, 'dragend', surDeplacementMarkerDeb);
328
		google.maps.event.addListener(markerDeb, 'dragend', surDeplacementMarkerDeb);
329
	}
329
	}
330
	
330
 
331
	latLngFin = latLngDeb;
331
	latLngFin = latLngDeb;
332
	if (markerFin != undefined) {
332
	if (markerFin != undefined) {
333
		markerFin.setMap(null);
333
		markerFin.setMap(null);
334
	}
334
	}
335
	latLngCentre = latLngDeb;
335
	latLngCentre = latLngDeb;
Line 390... Line 390...
390
 
390
 
391
function dessinerLigneRue(pointDebut, pointFin) {
391
function dessinerLigneRue(pointDebut, pointFin) {
392
	if (ligneRue != undefined) {
392
	if (ligneRue != undefined) {
393
		ligneRue.setMap(null);
393
		ligneRue.setMap(null);
394
	}
394
	}
395
	
395
 
396
	ligneRue = new google.maps.Polyline({
396
	ligneRue = new google.maps.Polyline({
397
		path: [pointDebut, pointFin],
397
		path: [pointDebut, pointFin],
398
		strokeColor: "#FF0000",
398
		strokeColor: "#FF0000",
399
		strokeOpacity: 1.0,
399
		strokeOpacity: 1.0,
Line 404... Line 404...
404
}
404
}
Line 405... Line 405...
405
 
405
 
406
function afficherCentreRue() {
406
function afficherCentreRue() {
407
	latLngDeb = markerDeb.getPosition();
407
	latLngDeb = markerDeb.getPosition();
408
	latLngFin = markerFin.getPosition();
408
	latLngFin = markerFin.getPosition();
409
	latLngCentre = new google.maps.LatLng((latLngFin.lat() + latLngDeb.lat())/2, (latLngFin.lng() + latLngDeb.lng())/2); 
409
	latLngCentre = new google.maps.LatLng((latLngFin.lat() + latLngDeb.lat())/2, (latLngFin.lng() + latLngDeb.lng())/2);
410
	mettreAJourStationPosition(latLngCentre);
410
	mettreAJourStationPosition(latLngCentre);
Line 411... Line 411...
411
}
411
}
412
 
412
 
413
function mettreAJourStationPosition(latLng) {
413
function mettreAJourStationPosition(latLng) {
414
	var lat = latLng.lat().toFixed(5),
414
	var lat = latLng.lat().toFixed(5),
415
		lng = latLng.lng().toFixed(5); 
415
		lng = latLng.lng().toFixed(5);
416
	remplirChampLatitude(lat);
416
	remplirChampLatitude(lat);
Line 417... Line 417...
417
	remplirChampLongitude(lng);
417
	remplirChampLongitude(lng);
Line 434... Line 434...
434
		$.ajax({
434
		$.ajax({
435
			url: urlNomCommuneFormatee,
435
			url: urlNomCommuneFormatee,
436
			type: 'GET',
436
			type: 'GET',
437
			dataType: 'jsonp',
437
			dataType: 'jsonp',
438
			beforeSend: function() {
438
			beforeSend: function() {
439
				$('.commune-info').empty();	
439
				$('.commune-info').empty();
440
				$('#dialogue-erreur .alert-txt').empty();
440
				$('#dialogue-erreur .alert-txt').empty();
441
			},
441
			},
442
			success: function(data, textStatus, jqXHR) {
442
			success: function(data, textStatus, jqXHR) {
443
				$('.commune-info').empty();
443
				$('.commune-info').empty();
444
				$('#commune-nom').append(data.nom);
444
				$('#commune-nom').append(data.nom);
445
				$('#commune-code-insee').append(data.codeINSEE);
445
				$('#commune-code-insee').append(data.codeINSEE);
446
				$('#marqueur-commune').data('commune', {'nom' : data.nom, 'codeInsee' : data.codeINSEE});
446
				$('#marqueur-commune').data('commune', {'nom' : data.nom, 'codeInsee' : data.codeINSEE});
447
			},
447
			},
448
			statusCode: {
448
			statusCode: {
449
				500: function(jqXHR, textStatus, errorThrown) {
449
				500: function(jqXHR, textStatus, errorThrown) {
450
					if (DEBUG) {	
450
					if (DEBUG) {
451
						$('#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>');
451
						$('#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>');
452
						reponse = jQuery.parseJSON(jqXHR.responseText);
452
						reponse = jQuery.parseJSON(jqXHR.responseText);
453
						var erreurMsg = "";
453
						var erreurMsg = "";
454
						if (reponse != null) {
454
						if (reponse != null) {
455
							$.each(reponse, function (cle, valeur) {
455
							$.each(reponse, function (cle, valeur) {
456
								erreurMsg += valeur + '<br />';
456
								erreurMsg += valeur + '<br />';
457
							});
457
							});
458
						}
458
						}
459
						
459
 
460
						$('#dialogue-erreur .alert-txt').append(
460
						$('#dialogue-erreur .alert-txt').append(
461
							'<p class="msg-erreur">Erreur 500 : '+errorThrown+'<br />'+erreurMsg+'</p>');
461
							'<p class="msg-erreur">Erreur 500 : '+errorThrown+'<br />'+erreurMsg+'</p>');
462
					}
462
					}
463
				}
463
				}
464
			},
464
			},
Line 471... Line 471...
471
					if (reponse != null) {
471
					if (reponse != null) {
472
						$.each(reponse, function (cle, valeur) {
472
						$.each(reponse, function (cle, valeur) {
473
							erreurMsg += valeur + '<br />';
473
							erreurMsg += valeur + '<br />';
474
						});
474
						});
475
					}
475
					}
476
					
476
 
477
					$('#dialogue-erreur .alert-txt').append(
477
					$('#dialogue-erreur .alert-txt').append(
478
						'<p class="msg-erreur">Erreur Ajax : '+errorThrown+' (type : '+textStatus+') <br />'+erreurMsg+'</p>');
478
						'<p class="msg-erreur">Erreur Ajax : '+errorThrown+' (type : '+textStatus+') <br />'+erreurMsg+'</p>');
479
				}
479
				}
480
			},
480
			},
481
			complete: function(jqXHR, textStatus) {
481
			complete: function(jqXHR, textStatus) {
Line 540... Line 540...
540
//+---------------------------------------------------------------------------------------------------------+
540
//+---------------------------------------------------------------------------------------------------------+
541
//AUTO-COMPLÉTION Noms Scientifiques => OK
541
//AUTO-COMPLÉTION Noms Scientifiques => OK
Line 542... Line 542...
542
 
542
 
543
function ajouterAutocompletionNoms() {
543
function ajouterAutocompletionNoms() {
544
	$('#taxon').autocomplete({
544
	$('#taxon').autocomplete({
545
		source: function(requete, add){  
545
		source: function(requete, add){
546
			// la variable de requête doit être vidée car sinon le parametre "term" est ajouté
546
			// la variable de requête doit être vidée car sinon le parametre "term" est ajouté
547
			
547
 
548
			var url = getUrlAutocompletionNomsSci();
548
			var url = getUrlAutocompletionNomsSci();
549
			$.getJSON(url, function(data) {
549
			$.getJSON(url, function(data) {
550
				var suggestions = traiterRetourNomsSci(data);
550
				var suggestions = traiterRetourNomsSci(data);
551
				add(suggestions);  
551
				add(suggestions);
552
			});
552
			});
553
		},
553
		},
554
		html: true
554
		html: true
555
	});
555
	});
556
	
556
 
557
	$('#taxon').bind('autocompleteselect', function(event, ui) {
557
	$('#taxon').bind('autocompleteselect', function(event, ui) {
558
		$('#taxon').data(ui.item);
558
		$('#taxon').data(ui.item);
559
		if (ui.item.retenu == true) {
559
		if (ui.item.retenu == true) {
560
			$('#taxon').addClass('ns-retenu');
560
			$('#taxon').addClass('ns-retenu');
Line 564... Line 564...
564
	});
564
	});
565
}
565
}
Line 566... Line 566...
566
 
566
 
567
function getUrlAutocompletionNomsSci() {
567
function getUrlAutocompletionNomsSci() {
568
	var mots = $('#taxon').val(),
568
	var mots = $('#taxon').val(),
569
		url = SERVICE_AUTOCOMPLETION_NOM_SCI_URL_TPL.replace('{referentiel}',NOM_SCI_PROJET);
569
		url = SERVICE_AUTOCOMPLETION_NOM_SCI_URL_TPL.replace('{referentiel}',NOM_SCI_REFERENTIEL);
570
	url = url.replace('{masque}', mots);
570
	url = url.replace('{masque}', mots);
571
	return url;
571
	return url;
Line 572... Line 572...
572
}
572
}
Line 593... Line 593...
593
				nom.numNomSel = val.nn;
593
				nom.numNomSel = val.nn;
594
				nom.nomRet = val.nom_retenu_complet;
594
				nom.nomRet = val.nom_retenu_complet;
595
				nom.numNomRet = val['nom_retenu.id'];
595
				nom.numNomRet = val['nom_retenu.id'];
596
				nom.famille = val.famille;
596
				nom.famille = val.famille;
597
				nom.retenu = (val.retenu == 'false') ? false : true;
597
				nom.retenu = (val.retenu == 'false') ? false : true;
598
				
598
 
599
				suggestions.push(nom);
599
				suggestions.push(nom);
600
			}
600
			}
601
		});
601
		});
602
	}
602
	}
603
	return suggestions;
603
	return suggestions;
Line 608... Line 608...
608
*
608
*
609
* Copyright 2010, Scott González (http://scottgonzalez.com)
609
* Copyright 2010, Scott González (http://scottgonzalez.com)
610
* Dual licensed under the MIT or GPL Version 2 licenses.
610
* Dual licensed under the MIT or GPL Version 2 licenses.
611
*
611
*
612
* http://github.com/scottgonzalez/jquery-ui-extensions
612
* http://github.com/scottgonzalez/jquery-ui-extensions
613
* 
613
*
614
* Adaptation par Aurélien Peronnet pour la mise en gras des noms de taxons valides
614
* Adaptation par Aurélien Peronnet pour la mise en gras des noms de taxons valides
615
*/
615
*/
616
(function($) {
616
(function($) {
617
	var proto = $.ui.autocomplete.prototype,
617
	var proto = $.ui.autocomplete.prototype,
618
		initSource = proto._initSource;
618
		initSource = proto._initSource;
619
	
619
 
620
	function filter(array, term) {
620
	function filter(array, term) {
621
		var matcher = new RegExp($.ui.autocomplete.escapeRegex(term), 'i');
621
		var matcher = new RegExp($.ui.autocomplete.escapeRegex(term), 'i');
622
		return $.grep(array, function(value) {
622
		return $.grep(array, function(value) {
623
			return matcher.test($('<div>').html(value.label || value.value || value).text());
623
			return matcher.test($('<div>').html(value.label || value.value || value).text());
624
		});
624
		});
625
	}
625
	}
626
	
626
 
627
	$.extend(proto, {
627
	$.extend(proto, {
628
		_initSource: function() {
628
		_initSource: function() {
629
			if (this.options.html && $.isArray(this.options.source)) {
629
			if (this.options.html && $.isArray(this.options.source)) {
630
				this.source = function( request, response ) {
630
				this.source = function( request, response ) {
631
					response(filter(this.options.source, request.term));
631
					response(filter(this.options.source, request.term));
Line 636... Line 636...
636
		},
636
		},
637
		_renderItem: function(ul, item) {
637
		_renderItem: function(ul, item) {
638
			if (item.retenu == true) {
638
			if (item.retenu == true) {
639
				item.label = '<strong>'+item.label+'</strong>';
639
				item.label = '<strong>'+item.label+'</strong>';
640
			}
640
			}
641
			
641
 
642
			return $('<li></li>')
642
			return $('<li></li>')
643
				.data('item.autocomplete', item)
643
				.data('item.autocomplete', item)
644
				.append($('<a></a>')[this.options.html ? 'html' : 'text'](item.label))
644
				.append($('<a></a>')[this.options.html ? 'html' : 'text'](item.label))
645
				.appendTo(ul);
645
				.appendTo(ul);
646
		}
646
		}
Line 652... Line 652...
652
 
652
 
653
$(document).ready(function() {
653
$(document).ready(function() {
654
	$('#fichier').on('click change', function(event) {
654
	$('#fichier').on('click change', function(event) {
655
		if ($(this).val().length > 0) {
655
		if ($(this).val().length > 0) {
656
			arreter(event);
656
			arreter(event);
657
			var options = { 
657
			var options = {
658
				success: afficherMiniature, // post-submit callback 
658
				success: afficherMiniature, // post-submit callback
659
				dataType: 'xml', // 'xml', 'script', or 'json' (expected server response type) 
659
				dataType: 'xml', // 'xml', 'script', or 'json' (expected server response type)
660
				resetForm: true // reset the form after successful submit 
660
				resetForm: true // reset the form after successful submit
661
			};
661
			};
662
			$('#miniature').append(
662
			$('#miniature').append(
663
				'<img id="miniature-chargement" class="miniature" alt="chargement" src="'+CHARGEMENT_IMAGE_URL+'"/>');
663
				'<img id="miniature-chargement" class="miniature" alt="chargement" src="'+CHARGEMENT_IMAGE_URL+'"/>');
664
			$('#ajouter-obs').attr('disabled', 'disabled');
664
			$('#ajouter-obs').attr('disabled', 'disabled');
Line 669... Line 669...
669
				window.alert("Le format de fichier n'est pas supporté, les formats acceptés sont "+	$('#fichier').attr('accept'));
669
				window.alert("Le format de fichier n'est pas supporté, les formats acceptés sont "+	$('#fichier').attr('accept'));
670
			}
670
			}
671
			return false;
671
			return false;
672
		}
672
		}
673
	});
673
	});
674
	
674
 
675
	$('#photo-placeholder').click(function(event) {
675
	$('#photo-placeholder').click(function(event) {
676
		$('#fichier').click();
676
		$('#fichier').click();
677
	});
677
	});
678
	
678
 
679
	$('body').on('click', '.effacer-miniature', function(event) {
679
	$('body').on('click', '.effacer-miniature', function(event) {
680
		supprimerMiniature($(this));
680
		supprimerMiniature($(this));
681
	});
681
	});
682
});
682
});
Line 687... Line 687...
687
	var parts = nom.split('.');
687
	var parts = nom.split('.');
688
	extension = parts[parts.length - 1];
688
	extension = parts[parts.length - 1];
689
	return (extension.toLowerCase() == 'jpeg' || extension.toLowerCase() == 'jpg');
689
	return (extension.toLowerCase() == 'jpeg' || extension.toLowerCase() == 'jpg');
690
}
690
}
Line 691... Line 691...
691
 
691
 
692
function afficherMiniature(reponse) { 
692
function afficherMiniature(reponse) {
693
	if (DEBUG) {
693
	if (DEBUG) {
694
		var debogage = $('debogage', reponse).text();
694
		var debogage = $('debogage', reponse).text();
695
		console.log('Débogage upload : ' + debogage);
695
		console.log('Débogage upload : ' + debogage);
696
	}
696
	}
Line 704... Line 704...
704
}
704
}
Line 705... Line 705...
705
 
705
 
706
function creerWidgetMiniature(reponse) {
706
function creerWidgetMiniature(reponse) {
707
	var miniatureUrl = $('miniature-url', reponse).text(),
707
	var miniatureUrl = $('miniature-url', reponse).text(),
708
		imgNom = $('image-nom', reponse).text(),
708
		imgNom = $('image-nom', reponse).text(),
709
		html = 
709
		html =
710
			'<div class="miniature">'+
710
			'<div class="miniature">'+
711
				'<img class="miniature-img" class="miniature" alt="'+imgNom+'" src="'+miniatureUrl+'"/>'+
711
				'<img class="miniature-img" class="miniature" alt="'+imgNom+'" src="'+miniatureUrl+'"/>'+
712
				'<button class="btn effacer-miniature" type="button">Effacer</button>'+
712
				'<button class="btn effacer-miniature" type="button">Effacer</button>'+
713
			'</div>'
713
			'</div>'
Line 733... Line 733...
733
	$('.has-tooltip').tooltip('enable');
733
	$('.has-tooltip').tooltip('enable');
734
	$('#btn-aide').on('click', basculerAffichageAide);
734
	$('#btn-aide').on('click', basculerAffichageAide);
735
	$('.dropdown-menu input, .dropdown-menu label').on('click', function(event) {
735
	$('.dropdown-menu input, .dropdown-menu label').on('click', function(event) {
736
		event.stopPropagation();
736
		event.stopPropagation();
737
	});
737
	});
738
	
738
 
739
	// Gestion de la liste des taxons
739
	// Gestion de la liste des taxons
740
	ajouterAutocompletionNoms();
740
	ajouterAutocompletionNoms();
741
	surChangementTaxonListe();
741
	surChangementTaxonListe();
742
	$('#taxon-liste').on('change', surChangementTaxonListe);
742
	$('#taxon-liste').on('change', surChangementTaxonListe);
743
	if (DEBUG) {
743
	if (DEBUG) {
Line 745... Line 745...
745
	}
745
	}
Line 746... Line 746...
746
 
746
 
747
	// Validation du formulaire
747
	// Validation du formulaire
748
	configurerFormValidator();
748
	configurerFormValidator();
749
	definirReglesFormValidator();
749
	definirReglesFormValidator();
750
	
750
 
751
	// Interaction sur le formulaire obs
751
	// Interaction sur le formulaire obs
752
	configurerDatePicker('#date');
752
	configurerDatePicker('#date');
753
	$('a.afficher-coord').on('click', basculerAffichageCoord);
753
	$('a.afficher-coord').on('click', basculerAffichageCoord);
754
	$('.cb-milieux').on('click', function(event) {
754
	$('.cb-milieux').on('click', function(event) {
Line 757... Line 757...
757
	});
757
	});
758
	$('#ajouter-obs').on('click', ajouterObs);
758
	$('#ajouter-obs').on('click', ajouterObs);
759
	$('.obs-nbre').on('changement', surChangementNbreObs);
759
	$('.obs-nbre').on('changement', surChangementNbreObs);
760
	$('body').on('click', '.supprimer-obs', supprimerObs);
760
	$('body').on('click', '.supprimer-obs', supprimerObs);
761
	$('#transmettre-obs').on('click', transmettreObs);
761
	$('#transmettre-obs').on('click', transmettreObs);
762
	
762
 
763
	// Défilement des photos
763
	// Défilement des photos
764
	$('body').on('click', '.defilement-control-zone', function(event) {
764
	$('body').on('click', '.defilement-control-zone', function(event) {
765
		defilerMiniatures($(this));
765
		defilerMiniatures($(this));
766
	});
766
	});
767
	$('body').on('mouseover', '.defilement-control-zone', function(event) {
767
	$('body').on('mouseover', '.defilement-control-zone', function(event) {
Line 772... Line 772...
772
	});
772
	});
773
});
773
});
Line 774... Line 774...
774
 
774
 
775
function configurerFormValidator() {
775
function configurerFormValidator() {
776
	$.validator.addMethod(
776
	$.validator.addMethod(
777
		'dateCel', 
777
		'dateCel',
778
		function (value, element) { 
778
		function (value, element) {
779
			return value == '' || (/^[0-9]{2}[-\/][0-9]{2}[-\/][0-9]{4}$/.test(value)); 
779
			return value == '' || (/^[0-9]{2}[-\/][0-9]{2}[-\/][0-9]{4}$/.test(value));
780
		}, 
780
		},
781
		'Format : jj/mm/aaaa. Date incomplète, utiliser 0, exemple : 00/12/2011.');
781
		'Format : jj/mm/aaaa. Date incomplète, utiliser 0, exemple : 00/12/2011.');
782
	
782
 
783
	$.extend($.validator.defaults, {
783
	$.extend($.validator.defaults, {
784
		ignore: [],// Forcer Jquery Validate à examiner les éléments avec en display:none;
784
		ignore: [],// Forcer Jquery Validate à examiner les éléments avec en display:none;
785
		highlight: function(element) {
785
		highlight: function(element) {
786
			$(element).closest('.control-group').removeClass('success').addClass('error');
786
			$(element).closest('.control-group').removeClass('success').addClass('error');
787
		},
787
		},
788
		success: function(element) {
788
		success: function(element) {
789
			element.text('OK!').addClass('valid');
789
			element.text('OK!').addClass('valid');
790
			element.closest('.control-group').removeClass('error').addClass('success');
790
			element.closest('.control-group').removeClass('error').addClass('success');
791
			
791
 
792
			if (element.attr('id') == 'taxon' && $('#taxon').val() != '') {
792
			if (element.attr('id') == 'taxon' && $('#taxon').val() != '') {
793
				// Si le taxon n'est pas lié au référentiel, on vide le data associé
793
				// Si le taxon n'est pas lié au référentiel, on vide le data associé
794
				if ($('#taxon').data('value') != $('#taxon').val()) {
794
				if ($('#taxon').data('value') != $('#taxon').val()) {
795
					$('#taxon').data('numNomSel', '');
795
					$('#taxon').data('numNomSel', '');
Line 940... Line 940...
940
 
940
 
941
function afficherObs() {
941
function afficherObs() {
942
	var numNomSel = ($('#taxon-liste').val() == '?') ? $('#taxon').data('numNomSel') : $('#taxon-liste').val(),
942
	var numNomSel = ($('#taxon-liste').val() == '?') ? $('#taxon').data('numNomSel') : $('#taxon-liste').val(),
943
		nomSpecial = $('#taxon-liste option:selected').hasClass('nom-special'),
943
		nomSpecial = $('#taxon-liste option:selected').hasClass('nom-special'),
944
		taxon = ($('#taxon-liste').val() == '?') ? $('#taxon').val() : $('#taxon-liste option:selected').data('nom-a-sauver'),
944
		taxon = ($('#taxon-liste').val() == '?') ? $('#taxon').val() : $('#taxon-liste option:selected').data('nom-a-sauver'),
945
		referentiel = (numNomSel == undefined) ? '' : '['+NOM_SCI_PROJET+']',
945
		referentiel = (numNomSel == undefined) ? '' : '['+NOM_SCI_REFERENTIEL+']',
946
		commune = $('#commune-nom').text(),
946
		commune = $('#commune-nom').text(),
947
		codeInsee = $('#commune-code-insee').text(),
947
		codeInsee = $('#commune-code-insee').text(),
948
		station = $('input[name="adresse"]').val(),
948
		station = $('input[name="adresse"]').val(),
949
		lat = $('input[name="latitude"]').val(),
949
		lat = $('input[name="latitude"]').val(),
950
		lng = $('input[name="longitude"]').val(),
950
		lng = $('input[name="longitude"]').val(),
951
		date = $('#date').val(),
951
		date = $('#date').val(),
952
		milieux = getMilieux(),
952
		milieux = getMilieux(),
953
		notes = (nomSpecial ? taxons[numNomSel]['nom_fr'] + ".<br />" : '') + $('#notes').val();
953
		notes = (nomSpecial ? taxons[numNomSel]['nom_fr'] + ".<br />" : '') + $('#notes').val();
954
	
954
 
955
	$('#liste-obs').prepend(
955
	$('#liste-obs').prepend(
956
		'<div id="obs'+obsNbre+'" class="row-fluid obs obs'+obsNbre+'">' +
956
		'<div id="obs'+obsNbre+'" class="row-fluid obs obs'+obsNbre+'">' +
957
			'<div class="span12">' +
957
			'<div class="span12">' +
958
				'<div class="well">' +
958
				'<div class="well">' +
959
					'<div class="obs-action pull-right has-tooltip" data-placement="bottom" ' +
959
					'<div class="obs-action pull-right has-tooltip" data-placement="bottom" ' +
960
						'title="Supprimer cette observation de la liste à transmettre">' +
960
						'title="Supprimer cette observation de la liste à transmettre">' +
961
						'<button class="btn btn-danger supprimer-obs" value="'+obsNbre+'" title="'+obsNbre+'">' +
961
						'<button class="btn btn-danger supprimer-obs" value="'+obsNbre+'" title="'+obsNbre+'">' +
962
							'<i class="icon-trash icon-white"></i>' +
962
							'<i class="icon-trash icon-white"></i>' +
963
						'</button>' +
963
						'</button>' +
964
					'</div> ' +	
964
					'</div> ' +
965
					'<div class="row-fluid">' +	
965
					'<div class="row-fluid">' +
966
						'<div class="span2 obs-miniatures">' +
966
						'<div class="span2 obs-miniatures">' +
967
							ajouterImgMiniatureAuTransfert() +
967
							ajouterImgMiniatureAuTransfert() +
968
						'</div>'+
968
						'</div>'+
969
						'<div class="span7">' +
969
						'<div class="span7">' +
Line 980... Line 980...
980
								'</li>' +
980
								'</li>' +
981
								'<li>' +
981
								'<li>' +
982
									'Milieux : ' + milieux + ' ' + ' ; ' +
982
									'Milieux : ' + milieux + ' ' + ' ; ' +
983
								'</li>' +
983
								'</li>' +
984
								'<li>' +
984
								'<li>' +
985
									'Notes : ' + notes + 
985
									'Notes : ' + notes +
986
								'</li>' +
986
								'</li>' +
987
							'</ul>' +
987
							'</ul>' +
988
						'</div>' +
988
						'</div>' +
989
					'</div>' +
989
					'</div>' +
990
				'</div>' +
990
				'</div>' +
Line 996... Line 996...
996
	var milieuxStr = '',
996
	var milieuxStr = '',
997
		milieux = [];
997
		milieux = [];
998
	$('.cb-milieux:checked').each(function() {
998
	$('.cb-milieux:checked').each(function() {
999
		milieux.push($(this).val());
999
		milieux.push($(this).val());
1000
	});
1000
	});
1001
	
1001
 
1002
	milieuxStr = Array.prototype.slice.call(milieux).join(', ');
1002
	milieuxStr = Array.prototype.slice.call(milieux).join(', ');
1003
	return milieuxStr;
1003
	return milieuxStr;
1004
}
1004
}
Line 1005... Line 1005...
1005
 
1005
 
Line 1015... Line 1015...
1015
		$('#miniatures img').each(function() {
1015
		$('#miniatures img').each(function() {
1016
			var visible = premiere ? 'miniature-selectionnee' : 'miniature-cachee',
1016
			var visible = premiere ? 'miniature-selectionnee' : 'miniature-cachee',
1017
				css = $(this).hasClass('b64') ? 'miniature b64' : 'miniature',
1017
				css = $(this).hasClass('b64') ? 'miniature b64' : 'miniature',
1018
				src = $(this).attr('src'),
1018
				src = $(this).attr('src'),
1019
				alt = $(this).attr('alt');
1019
				alt = $(this).attr('alt');
1020
			
1020
 
1021
			var miniature = '<img class="'+css+' '+visible+'"  alt="'+alt+'"src="'+src+'" />';
1021
			var miniature = '<img class="'+css+' '+visible+'"  alt="'+alt+'"src="'+src+'" />';
1022
			miniatures += miniature;
1022
			miniatures += miniature;
1023
			
1023
 
1024
			var indicateurActif = premiere ? 'active' : '';
1024
			var indicateurActif = premiere ? 'active' : '';
1025
			var indicateur = '<li class="' + indicateurActif + '" data-numero="' + numero++ + '"></li>';
1025
			var indicateur = '<li class="' + indicateurActif + '" data-numero="' + numero++ + '"></li>';
1026
			indicateurs += indicateur;
1026
			indicateurs += indicateur;
1027
		
1027
 
1028
			premiere = false;
1028
			premiere = false;
1029
		});
1029
		});
1030
		
1030
 
1031
		if ($('#miniatures img').length == 1) {
1031
		if ($('#miniatures img').length == 1) {
1032
			html = miniatures;
1032
			html = miniatures;
1033
		} else {
1033
		} else {
1034
			html = 
1034
			html =
1035
				'<div class="defilement">' +
1035
				'<div class="defilement">' +
1036
					miniatures +
1036
					miniatures +
1037
					'<a class="defilement-control-zone gauche">' +
1037
					'<a class="defilement-control-zone gauche">' +
1038
					'	<span class="defilement-control gauche hidden">&#60;</span>' +
1038
					'	<span class="defilement-control gauche hidden">&#60;</span>' +
1039
					'</a>' +
1039
					'</a>' +
Line 1049... Line 1049...
1049
 
1049
 
1050
function defilerMiniatures(element) {
1050
function defilerMiniatures(element) {
1051
	var miniatureSelectionne = element.siblings('img.miniature-selectionnee');
1051
	var miniatureSelectionne = element.siblings('img.miniature-selectionnee');
1052
	miniatureSelectionne.removeClass('miniature-selectionnee').addClass('miniature-cachee');
1052
	miniatureSelectionne.removeClass('miniature-selectionnee').addClass('miniature-cachee');
1053
	var miniatureAffichee = miniatureSelectionne;
1053
	var miniatureAffichee = miniatureSelectionne;
1054
	
1054
 
1055
	var indicateurActif = element.parent().find('.defilement-indicateurs .active');
1055
	var indicateurActif = element.parent().find('.defilement-indicateurs .active');
1056
	indicateurActif.removeClass('active');
1056
	indicateurActif.removeClass('active');
1057
	
1057
 
1058
	if (element.hasClass('defilement-control-zone') && element.hasClass('gauche')) {
1058
	if (element.hasClass('defilement-control-zone') && element.hasClass('gauche')) {
1059
		if (miniatureSelectionne.prev('.miniature').length != 0) {
1059
		if (miniatureSelectionne.prev('.miniature').length != 0) {
1060
			miniatureAffichee = miniatureSelectionne.prev('.miniature');
1060
			miniatureAffichee = miniatureSelectionne.prev('.miniature');
1061
			indicateurActif.prev().addClass('active');
1061
			indicateurActif.prev().addClass('active');
Line 1084... Line 1084...
1084
	}
1084
	}
1085
	return nn;
1085
	return nn;
1086
}
1086
}
Line 1087... Line 1087...
1087
 
1087
 
1088
function surChangementReferentiel() {
1088
function surChangementReferentiel() {
1089
	NOM_SCI_PROJET = $('#referentiel').val();
-
 
1090
	NOM_SCI_REFERENTIEL = NOM_SCI_PROJET+':'+PROJETS_VERSIONS[NOM_SCI_PROJET];
1089
	NOM_SCI_REFERENTIEL = $('#referentiel').val();
1091
	$('#taxon').val('');
1090
	$('#taxon').val('');
Line 1092... Line 1091...
1092
}
1091
}
1093
 
1092
 
1094
function surChangementNbreObs() {
1093
function surChangementNbreObs() {
1095
	if (obsNbre == 0) {
1094
	if (obsNbre == 0) {
1096
		$('#transmettre-obs').attr('disabled', 'disabled');
1095
		$('#transmettre-obs').attr('disabled', 'disabled');
1097
		$('#ajouter-obs').removeAttr('disabled');
1096
		$('#ajouter-obs').removeAttr('disabled');
1098
		$('#zone-liste-obs').addClass('hidden');
1097
		$('#zone-liste-obs').addClass('hidden');
1099
	} else {
1098
	} else {
1100
		$('#zone-liste-obs').removeClass('hidden');
1099
		$('#zone-liste-obs').removeClass('hidden');
1101
		
1100
 
1102
		if (obsNbre > 0 && obsNbre < OBS_MAX_NBRE) {
1101
		if (obsNbre > 0 && obsNbre < OBS_MAX_NBRE) {
1103
			$('#transmettre-obs').removeAttr('disabled');
1102
			$('#transmettre-obs').removeAttr('disabled');
1104
			$('#ajouter-obs').removeAttr('disabled');
1103
			$('#ajouter-obs').removeAttr('disabled');
Line 1156... Line 1155...
1156
		numNomRet = nomHorsListe ? $('#taxon').data('numNomRet') : taxons[numNomSel]['num_nom_ret'],
1155
		numNomRet = nomHorsListe ? $('#taxon').data('numNomRet') : taxons[numNomSel]['num_nom_ret'],
1157
		numTaxon = nomHorsListe ? $('#taxon').data('nt') : taxons[numNomSel]['num_taxon'],
1156
		numTaxon = nomHorsListe ? $('#taxon').data('nt') : taxons[numNomSel]['num_taxon'],
1158
		famille = nomHorsListe ? $('#taxon').data('famille') : taxons[numNomSel]['famille'],
1157
		famille = nomHorsListe ? $('#taxon').data('famille') : taxons[numNomSel]['famille'],
1159
		referentiel = (numNomSel == undefined) ? '' : NOM_SCI_REFERENTIEL,
1158
		referentiel = (numNomSel == undefined) ? '' : NOM_SCI_REFERENTIEL,
1160
		notes = (nomSpecial ? taxons[numNomSel]['nom_fr'] + '. ' : '') + $('#notes').val();
1159
		notes = (nomSpecial ? taxons[numNomSel]['nom_fr'] + '. ' : '') + $('#notes').val();
1161
	
1160
 
1162
	$('#liste-obs').data('obsId'+obsNbre, {
1161
	$('#liste-obs').data('obsId'+obsNbre, {
1163
		'date': $('#date').val(), 
1162
		'date': $('#date').val(),
1164
		'notes': notes,
1163
		'notes': notes,
1165
		
1164
 
1166
		'station': $('input[name="adresse"]').val(),
1165
		'station': $('input[name="adresse"]').val(),
1167
		'latitude': $('#latitude').val(),
1166
		'latitude': $('#latitude').val(),
1168
		'longitude': $('#longitude').val(),
1167
		'longitude': $('#longitude').val(),
1169
		'commune_nom': $('#commune-nom').text(),
1168
		'commune_nom': $('#commune-nom').text(),
1170
		'commune_code_insee': $('#commune-code-insee').text(),
1169
		'commune_code_insee': $('#commune-code-insee').text(),
1171
		
1170
 
1172
		'nom_sel': nomSel,
1171
		'nom_sel': nomSel,
1173
		'num_nom_sel': numNomSel,
1172
		'num_nom_sel': numNomSel,
1174
		'nom_ret': nomRet,
1173
		'nom_ret': nomRet,
1175
		'num_nom_ret': numNomRet,
1174
		'num_nom_ret': numNomRet,
1176
		'num_taxon': numTaxon,
1175
		'num_taxon': numTaxon,
1177
		'famille': famille,
1176
		'famille': famille,
1178
		'referentiel': referentiel,
1177
		'referentiel': referentiel,
1179
		
1178
 
1180
		'milieu': getMilieux(),
1179
		'milieu': getMilieux(),
1181
		
1180
 
1182
		// Ajout des champs images
1181
		// Ajout des champs images
1183
		'image_nom': getNomsImgsOriginales(),
1182
		'image_nom': getNomsImgsOriginales(),
1184
		
1183
 
1185
		// Ajout des champs étendus de l'obs
1184
		// Ajout des champs étendus de l'obs
1186
		'obs_etendue': getObsChpEtendus()
1185
		'obs_etendue': getObsChpEtendus()
1187
	});
1186
	});
1188
	if (DEBUG) {
1187
	if (DEBUG) {
1189
		console.log($('#liste-obs').data('obsId'+obsNbre));
1188
		console.log($('#liste-obs').data('obsId'+obsNbre));
Line 1210... Line 1209...
1210
		var latitudeFinRue = {cle: 'latitudeFinRue', label: 'Latitude de fin de la rue', valeur: latLngFin.lat().toFixed(5)};
1209
		var latitudeFinRue = {cle: 'latitudeFinRue', label: 'Latitude de fin de la rue', valeur: latLngFin.lat().toFixed(5)};
1211
		champs.push(latitudeFinRue);
1210
		champs.push(latitudeFinRue);
1212
		var longitudeFinRue = {cle: 'longitudeFinRue', label: 'Longitude de fin de la rue', valeur: latLngFin.lng().toFixed(5)};
1211
		var longitudeFinRue = {cle: 'longitudeFinRue', label: 'Longitude de fin de la rue', valeur: latLngFin.lng().toFixed(5)};
1213
		champs.push(longitudeFinRue);
1212
		champs.push(longitudeFinRue);
1214
	}
1213
	}
1215
	
1214
 
1216
	$('.obs-chp-etendu').each(function() {
1215
	$('.obs-chp-etendu').each(function() {
1217
		var valeur = $(this).val(),
1216
		var valeur = $(this).val(),
1218
			cle = $(this).attr('name'),
1217
			cle = $(this).attr('name'),
1219
			label = $(this).data('label');
1218
			label = $(this).data('label');
1220
		if (valeur != '') {
1219
		if (valeur != '') {
Line 1247... Line 1246...
1247
	// la boucle est factice car on utilise un tableau
1246
	// la boucle est factice car on utilise un tableau
1248
	// dont on a besoin de n'extraire que le premier élément
1247
	// dont on a besoin de n'extraire que le premier élément
1249
	// or javascript n'a pas de méthode cross browsers pour extraire les clés
1248
	// or javascript n'a pas de méthode cross browsers pour extraire les clés
1250
	// TODO: utiliser var.keys quand ça sera plus répandu
1249
	// TODO: utiliser var.keys quand ça sera plus répandu
1251
	// ou bien utiliser un vrai tableau et pas un objet
1250
	// ou bien utiliser un vrai tableau et pas un objet
1252
	for (var obsNum in observations) {	
1251
	for (var obsNum in observations) {
1253
		obsATransmettre = new Object();	
1252
		obsATransmettre = new Object();
1254
	    
1253
 
1255
	    obsATransmettre['projet'] = TAG_PROJET;
1254
	    obsATransmettre['projet'] = TAG_PROJET;
1256
	    obsATransmettre['tag-obs'] = TAG_OBS;
1255
	    obsATransmettre['tag-obs'] = TAG_OBS;
1257
	    obsATransmettre['tag-img'] = TAG_IMG;
1256
	    obsATransmettre['tag-img'] = TAG_IMG;
1258
		
1257
 
1259
		var utilisateur = new Object();
1258
		var utilisateur = new Object();
1260
		utilisateur.id_utilisateur = $("#id_utilisateur").val();
1259
		utilisateur.id_utilisateur = $("#id_utilisateur").val();
1261
		utilisateur.prenom = $("#prenom").val();
1260
		utilisateur.prenom = $("#prenom").val();
1262
		utilisateur.nom = $("#nom").val();
1261
		utilisateur.nom = $("#nom").val();
1263
		utilisateur.courriel = $("#courriel").val();
1262
		utilisateur.courriel = $("#courriel").val();
Line 1265... Line 1264...
1265
		obsATransmettre[obsNum] = observations[obsNum];
1264
		obsATransmettre[obsNum] = observations[obsNum];
1266
		var idObsNumerique = obsNum.replace('obsId', '');
1265
		var idObsNumerique = obsNum.replace('obsId', '');
1267
		if(idObsNumerique != "") {
1266
		if(idObsNumerique != "") {
1268
			envoyerObsAuCel(idObsNumerique, obsATransmettre);
1267
			envoyerObsAuCel(idObsNumerique, obsATransmettre);
1269
		}
1268
		}
1270
		
1269
 
1271
		break;
1270
		break;
1272
	}
1271
	}
1273
}
1272
}
Line 1274... Line 1273...
1274
 
1273
 
Line 1332... Line 1331...
1332
				debugNonJson = jqXHR.responseText;
1331
				debugNonJson = jqXHR.responseText;
1333
			}
1332
			}
1334
		},
1333
		},
1335
		complete: function(jqXHR, textStatus) {
1334
		complete: function(jqXHR, textStatus) {
1336
			var debugMsg = extraireEnteteDebug(jqXHR);
1335
			var debugMsg = extraireEnteteDebug(jqXHR);
1337
			
1336
 
1338
			if (erreurMsg != '') {
1337
			if (erreurMsg != '') {
1339
				if (DEBUG) {
1338
				if (DEBUG) {
1340
					$('#dialogue-obs-transaction-ko .alert-txt').append('<pre class="msg-erreur">' + erreurMsg + '</pre>');
1339
					$('#dialogue-obs-transaction-ko .alert-txt').append('<pre class="msg-erreur">' + erreurMsg + '</pre>');
1341
					$('#dialogue-obs-transaction-ko .alert-txt').append('<pre class="msg-debug">Débogage : ' + debugNonJson + debugMsg + '</pre>');
1340
					$('#dialogue-obs-transaction-ko .alert-txt').append('<pre class="msg-debug">Débogage : ' + debugNonJson + debugMsg + '</pre>');
1342
				}
1341
				}
1343
				var hrefCourriel = 'mailto:cel_remarques@tela-botanica.org?' + 
1342
				var hrefCourriel = 'mailto:cel_remarques@tela-botanica.org?' +
1344
					'subject=Disfonctionnement du widget de saisie ' + TAG_PROJET + 
1343
					'subject=Disfonctionnement du widget de saisie ' + TAG_PROJET +
1345
					'&body=' + erreurMsg + "\nDébogage :\n" + debugMsg + debugNonJson;
1344
					'&body=' + erreurMsg + "\nDébogage :\n" + debugMsg + debugNonJson;
1346
				
1345
 
1347
				// mise en valeur de l'obs en erreur + scroll vers celle ci en changeant le hash
1346
				// mise en valeur de l'obs en erreur + scroll vers celle ci en changeant le hash
1348
				$('#obs'+idObs+' div div').addClass('obs-erreur');
1347
				$('#obs'+idObs+' div div').addClass('obs-erreur');
1349
				window.location.hash = "obs"+idObs;
1348
				window.location.hash = "obs"+idObs;
1350
				
1349
 
1351
				$('#dialogue-obs-transaction-ko .alert-txt').append($('#tpl-transmission-ko').clone()
1350
				$('#dialogue-obs-transaction-ko .alert-txt').append($('#tpl-transmission-ko').clone()
1352
					.find('.courriel-erreur')
1351
					.find('.courriel-erreur')
1353
					.attr('href', hrefCourriel)
1352
					.attr('href', hrefCourriel)
1354
					.end()
1353
					.end()
1355
					.html());
1354
					.html());
Line 1366... Line 1365...
1366
						$('#dialogue-obs-transaction-ok .alert-txt').append($('#tpl-transmission-ok').clone().html());
1365
						$('#dialogue-obs-transaction-ok .alert-txt').append($('#tpl-transmission-ok').clone().html());
1367
						$("#dialogue-obs-transaction-ok").show();
1366
						$("#dialogue-obs-transaction-ok").show();
1368
						window.location.hash = "dialogue-obs-transaction-ok";
1367
						window.location.hash = "dialogue-obs-transaction-ok";
1369
						initialiserObs();
1368
						initialiserObs();
1370
					}, 1500);
1369
					}, 1500);
1371
					
1370
 
1372
				}
1371
				}
1373
			}
1372
			}
1374
		}
1373
		}
1375
	});
1374
	});
1376
}
1375
}
1377
1376