Subversion Repositories eFlore/Applications.cel

Rev

Rev 3857 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3857 Rev 3864
1
import {WidgetsSaisiesASL} from './WidgetsSaisiesASL.js';
1
import {WidgetsSaisiesASL} from './WidgetsSaisiesASL.js';
2
import {valOk} from './Utils.js';
2
import {valOk} from './Utils.js';
3
 
3
 
4
/**
4
/**
5
 * Constructeur ReleveASL par défaut
5
 * Constructeur ReleveASL par défaut
6
 * S'applique au squelette apaforms.tpl.html
6
 * S'applique au squelette apaforms.tpl.html
7
 * Qui se charge dans apa.tpl.php
7
 * Qui se charge dans apa.tpl.php
8
 * Lors de la saisie du relevé et des arbres
8
 * Lors de la saisie du relevé et des arbres
9
 */
9
 */
10
// ASL : APA, sTREETs, Lichen's Go!
10
// ASL : APA, sTREETs, Lichen's Go!
11
export function ReleveASL(arbresProp) {
11
export function ReleveASL(arbresProp) {
12
	if  ( valOk( arbresProp ) ) {
12
	if  ( valOk( arbresProp ) ) {
13
		this.sujet             = arbresProp.sujet;
13
		this.sujet             = arbresProp.sujet;
14
		this.tagImg            = arbresProp.tagImg;
14
		this.tagImg            = arbresProp.tagImg;
15
		this.separationTagImg  = arbresProp.separationTagImg;
15
		this.separationTagImg  = arbresProp.separationTagImg;
16
		this.tagImg            = arbresProp.tagImg;
16
		this.tagImg            = arbresProp.tagImg;
17
		this.tagObs            = arbresProp.tagObs;
17
		this.tagObs            = arbresProp.tagObs;
18
		this.separationTagObs  = arbresProp.separationTagObs;
18
		this.separationTagObs  = arbresProp.separationTagObs;
19
		this.nomSciReferentiel = arbresProp.nomSciReferentiel;
19
		this.nomSciReferentiel = arbresProp.nomSciReferentiel;
20
		this.referentielImpose = arbresProp.referentielImpose;
20
		this.referentielImpose = arbresProp.referentielImpose;
21
	}
21
	}
22
	this.isTaxonListe = false;
22
	this.isTaxonListe = false;
23
	this.numArbre     = 0;
23
	this.numArbre     = 0;
24
}
24
}
25
ReleveASL.prototype = new WidgetsSaisiesASL();
25
ReleveASL.prototype = new WidgetsSaisiesASL();
26
 
26
 
27
 
27
 
28
/**
28
/**
29
 * Initialise le formulaire, les validateurs, les listes de complétion...
29
 * Initialise le formulaire, les validateurs, les listes de complétion...
30
 */
30
 */
31
ReleveASL.prototype.initForm = function() {
31
ReleveASL.prototype.initForm = function() {
32
	const idUtilisateur = $( '#id_utilisateur' ).val();
32
	const idUtilisateur = $( '#id_utilisateur' ).val();
33
 
33
 
34
	$('[type="date"]').prop('max', function(){
34
	$('[type="date"]').prop('max', function(){
35
		return new Date().toJSON().split('T')[0];
35
		return new Date().toJSON().split('T')[0];
36
	});
36
	});
37
	if( valOk( idUtilisateur ) ) {
37
	if( valOk( idUtilisateur ) ) {
38
		if ( valOk( $( '#releve-data' ).val() ) ) {
38
		if ( valOk( $( '#releve-data' ).val() ) ) {
39
			const datRuComun = $.parseJSON( $( '#dates-rues-communes' ).val() ),
39
			const datRuComun = $.parseJSON( $( '#dates-rues-communes' ).val() ),
40
				releveDatas = $.parseJSON( $( '#releve-data' ).val() );
40
				releveDatas = $.parseJSON( $( '#releve-data' ).val() );
41
 
41
 
42
			if ( !valOk( releveDatas[1] ) || -1 === datRuComun.indexOf( releveDatas[1]['date_rue_commune'] )  ) {
42
			if ( !valOk( releveDatas[1] ) || -1 === datRuComun.indexOf( releveDatas[1]['date_rue_commune'] )  ) {
43
				this.releveDatas = releveDatas;
43
				this.releveDatas = releveDatas;
44
				if ( valOk( this.releveDatas[0].utilisateur, true, idUtilisateur ) ) {
44
				if ( valOk( this.releveDatas[0].utilisateur, true, idUtilisateur ) ) {
45
					$( '#releve-date' ).val( this.releveDatas[0].date );
45
					$( '#releve-date' ).val( this.releveDatas[0].date );
46
					this.rechargerFormulaire();
46
					this.rechargerFormulaire();
47
					this.saisirArbres();
47
					this.saisirArbres();
48
					$( '#bouton-list-releves' )
48
					$( '#bouton-list-releves' )
49
						.removeClass( 'hidden' )
49
						.removeClass( 'hidden' )
50
						.on( 'click', function( event ) {
50
						.on( 'click', function( event ) {
51
							event.preventDefault();
51
							event.preventDefault();
52
							$( '#table-releves' ).removeClass( 'hidden' );
52
							$( '#table-releves' ).removeClass( 'hidden' );
53
							$( this ).addClass( 'hidden' );
53
							$( this ).addClass( 'hidden' );
54
					});
54
					});
55
				}
55
				}
56
			}
56
			}
57
		}
57
		}
58
		if ( valOk(  $( '.charger-releve' ) ) ) {
58
		if ( valOk(  $( '.charger-releve' ) ) ) {
59
			const btnChargementForm = this.determinerBtnsChargementForm( '.' );
59
			const btnChargementForm = this.determinerBtnsChargementForm( '.' );
60
			// #releve-data est modifié, bouton dans #releves-utilisateur
60
			// #releve-data est modifié, bouton dans #releves-utilisateur
61
			this.btnsChargerForm( btnChargementForm );
61
			this.btnsChargerForm( btnChargementForm );
62
		}
62
		}
63
	}
63
	}
64
	this.ajouterAutocompletionNoms();
64
	this.ajouterAutocompletionNoms();
65
	this.configurerFormValidator();
65
	this.configurerFormValidator();
66
	this.definirReglesFormValidator();
66
	this.definirReglesFormValidator();
67
};
67
};
68
 
68
 
69
/**
69
/**
70
 * Initialise les écouteurs d'événements
70
 * Initialise les écouteurs d'événements
71
 */
71
 */
72
ReleveASL.prototype.initEvts = function() {
72
ReleveASL.prototype.initEvts = function() {
73
	const lthis = this;
73
	const lthis = this;
74
 
74
 
75
	// comportement du bouton nouveau releve
75
	// comportement du bouton nouveau releve
76
	if ( valOk( $( '#id_utilisateur' ).val() ) ) {
76
	if ( valOk( $( '#id_utilisateur' ).val() ) ) {
77
		// #releve-data est modifié, bouton dans #releves-utilisateur
77
		// #releve-data est modifié, bouton dans #releves-utilisateur
78
		this.btnsChargerForm( '#bouton-nouveau-releve' );
78
		this.btnsChargerForm( '#bouton-nouveau-releve' );
79
	}
79
	}
80
	// on location, initialisation de la géoloc
80
	// on location, initialisation de la géoloc
81
	this.initEvtsGeoloc();
81
	this.initEvtsGeoloc();
82
	// Sur téléchargement image
82
	// Sur téléchargement image
83
	this.initEvtsFichier();
83
	this.initEvtsFichier();
84
 
84
 
85
	if ( 'tb_streets' !== this.projet ) {
85
	if ( 'tb_streets' !== this.projet ) {
86
		// Gérer une option "aucune" sur plusieurs checkboxes
86
		// Gérer une option "aucune" sur plusieurs checkboxes
87
		$( '#face-ombre input' ).on( 'click', function () {
87
		$( '#face-ombre input' ).on( 'click', function () {
88
			if ( 'aucune' === $( this ).val() ) {
88
			if ( 'aucune' === $( this ).val() ) {
89
				$( '#face-ombre input' ).not( '#aucune' ).prop( 'checked' , false );
89
				$( '#face-ombre input' ).not( '#aucune' ).prop( 'checked' , false );
90
			} else {
90
			} else {
91
				$( '#aucune' ).prop( 'checked' , false );
91
				$( '#aucune' ).prop( 'checked' , false );
92
			}
92
			}
93
		});
93
		});
94
	}
94
	}
95
	$( '#soumettre-releve' ).on( 'click', function( event ) {
95
	$( '#soumettre-releve' ).on( 'click', function( event ) {
96
		event.preventDefault();
96
		event.preventDefault();
97
		lthis.saisirArbres();
97
		lthis.saisirArbres();
98
	});
98
	});
99
	// Création / Suppression / Transmission des obs
99
	// Création / Suppression / Transmission des obs
100
	// Défilement des miniatures dans le résumé obs
100
	// Défilement des miniatures dans le résumé obs
101
	this.initEvtsObs();
101
	this.initEvtsObs();
102
 
102
 
103
	$( '#bloc-info-arbres' ).on( 'click', '.arbre-info', function ( event ) {
103
	$( '#bloc-info-arbres' ).on( 'click', '.arbre-info', function ( event ) {
104
		event.preventDefault();
104
		event.preventDefault();
105
		$( this ).addClass( 'disabled' );
105
		$( this ).addClass( 'disabled' );
106
		$( '.arbre-info' ).not( $( this ) ).removeClass( 'disabled' );
106
		$( '.arbre-info' ).not( $( this ) ).removeClass( 'disabled' );
107
 
107
 
108
		const numArbre = $( this ).data( 'arbre-info' );
108
		const numArbre = $( this ).data( 'arbre-info' );
109
 
109
 
110
		lthis.chargerInfosArbre( numArbre );
110
		lthis.chargerInfosArbre( numArbre );
111
		lthis.scrollFormTop( '#zone-arbres' );
111
		lthis.scrollFormTop( '#zone-arbres' );
112
	});
112
	});
113
	// après avoir visualisé les champs d'un arbre, retour à la saisie
113
	// après avoir visualisé les champs d'un arbre, retour à la saisie
114
	$( '#retour' ).on( 'click', function( event ) {
114
	$( '#retour' ).on( 'click', function( event ) {
115
		event.preventDefault();
115
		event.preventDefault();
116
 
116
 
117
		const numArbre = lthis.numArbre + 1;
117
		const numArbre = lthis.numArbre + 1;
118
 
118
 
119
		// activation des champs et retour à la saisie
119
		// activation des champs et retour à la saisie
120
		lthis.modeArbresBasculerActivation( false, numArbre );
120
		lthis.modeArbresBasculerActivation( false, numArbre );
121
		$( '#taxon' )
121
		$( '#taxon' )
122
			.val('')
122
			.val('')
123
			.removeData([
123
			.removeData([
124
				'value',
124
				'value',
125
				'numNomSel',
125
				'numNomSel',
126
				'nomRet',
126
				'nomRet',
127
				'numNomRet',
127
				'numNomRet',
128
				'nt',
128
				'nt',
129
				'famille'
129
				'famille'
130
			]);
130
			]);
131
		lthis.scrollFormTop( '#zone-arbres' );
131
		lthis.scrollFormTop( '#zone-arbres' );
132
	});
132
	});
133
	// chargement plantes ou lichens
133
	// chargement plantes ou lichens
134
	const btnChargementForm = this.determinerBtnsChargementForm( '#' );
134
	const btnChargementForm = this.determinerBtnsChargementForm( '#' );
135
	// #releve-data n'est pas modifié, bouton dans #charger-form
135
	// #releve-data n'est pas modifié, bouton dans #charger-form
136
	this.btnsChargerForm( btnChargementForm, false, false );
136
	this.btnsChargerForm( btnChargementForm, false, false );
137
	// Alertes et aides
137
	// Alertes et aides
138
	this.initEvtsAlertes();
138
	this.initEvtsAlertes();
139
};
139
};
140
 
140
 
141
/**
141
/**
142
 * Recharge le formulaire relevé (étape 1) à partir des infos
142
 * Recharge le formulaire relevé (étape 1) à partir des infos
143
 * présentes dans l'input hidden '#releve-data'
143
 * présentes dans l'input hidden '#releve-data'
144
 */
144
 */
145
ReleveASL.prototype.rechargerFormulaire = function() {
145
ReleveASL.prototype.rechargerFormulaire = function() {
146
	const lthis = this;
146
	const lthis = this;
147
 
147
 
148
	this.releveDatas = $.parseJSON( $( '#releve-data' ).val() );
148
	this.releveDatas = $.parseJSON( $( '#releve-data' ).val() );
149
	$.each( this.releveDatas[0], function( cle , valeur ) {
149
	$.each( this.releveDatas[0], function( cle , valeur ) {
150
		if ( 'zone-pietonne' === cle ||  'pres-lampadaires' === cle ) {
150
		if ( 'zone-pietonne' === cle ||  'pres-lampadaires' === cle ) {
151
			$( 'input[name=' + cle + '][value=' + valeur + ']' , '#zone-observation' ).prop( 'checked', true );
151
			$( 'input[name=' + cle + '][value=' + valeur + ']' , '#zone-observation' ).prop( 'checked', true );
152
		} else if ( valOk( $( '#' + cle ) ) ) {
152
		} else if ( valOk( $( '#' + cle ) ) ) {
153
			$( '#' + cle ).val( valeur );
153
			$( '#' + cle ).val( valeur );
154
		}
154
		}
155
	});
155
	});
156
 
156
 
157
	if (
157
	if (
158
		valOk( $( '#geometry-releve' ).val() ) &&
158
		valOk( $( '#geometry-releve' ).val() ) &&
159
		valOk( $( '#latitude-releve' ).val() ) &&
159
		valOk( $( '#latitude-releve' ).val() ) &&
160
		valOk( $( '#longitude-releve' ).val() ) &&
160
		valOk( $( '#longitude-releve' ).val() ) &&
161
		valOk( $( '#rue' ).val() ) &&
161
		valOk( $( '#rue' ).val() ) &&
162
		valOk( $( '#commune-nom' ).val() )
162
		valOk( $( '#commune-nom' ).val() )
163
	) {
163
	) {
164
		$( '#geoloc' ).addClass( 'hidden' );
164
		$( '#geoloc' ).addClass( 'hidden' );
165
		$( '#geoloc-datas' ).removeClass( 'hidden' );
165
		$( '#geoloc-datas' ).removeClass( 'hidden' );
166
	}
166
	}
167
	this.scrollFormTop( '#zone-observation', '#releve-date' )
167
	this.scrollFormTop( '#zone-observation', '#releve-date' )
168
};
168
};
169
 
169
 
170
/**
170
/**
171
 * Recharge le formulaire étape arbres à partir des infos
171
 * Recharge le formulaire étape arbres à partir des infos
172
 * présentes dans l'input hidden '#releve-data'
172
 * présentes dans l'input hidden '#releve-data'
173
 */
173
 */
174
ReleveASL.prototype.chargerArbres = function() {
174
ReleveASL.prototype.chargerArbres = function() {
175
	this.releveDatas = $.parseJSON( $( '#releve-data' ).val() );
175
	this.releveDatas = $.parseJSON( $( '#releve-data' ).val() );
176
	this.obsNbre     = this.releveDatas.length - 1;
176
	this.obsNbre     = this.releveDatas.length - 1;
177
	this.numArbre    = parseInt( this.releveDatas[ this.obsNbre ]['num-arbre'] ) || this.obsNbre;
177
	this.numArbre    = parseInt( this.releveDatas[ this.obsNbre ]['num-arbre'] ) || this.obsNbre;
178
	$( '.obs-nbre' ).text( this.obsNbre );
178
	$( '.obs-nbre' ).text( this.obsNbre );
179
	$( '.obs-nbre' ).triggerHandler( 'changement' );
179
	$( '.obs-nbre' ).triggerHandler( 'changement' );
180
	$( '#arbre-nb' ).text( this.numArbre + 1 );
180
	$( '#arbre-nb' ).text( this.numArbre + 1 );
181
 
181
 
182
	const infosArbre = {
182
	const infosArbre = {
183
		releve : this.releveDatas[0],
183
		releve : this.releveDatas[0],
184
		obsNum : 0,
184
		obsNum : 0,
185
		sujet  : {}
185
		sujet  : {}
186
	};
186
	};
187
 
187
 
188
	for( let i = 1; i <= this.obsNbre; i ++ ) {
188
	for( let i = 1; i <= this.obsNbre; i ++ ) {
189
		infosArbre.obsNum = i;
189
		infosArbre.obsNum = i;
190
		infosArbre.sujet = this.releveDatas[i];
190
		infosArbre.sujet = this.releveDatas[i];
191
		this.lienArbreInfo( infosArbre.sujet['num-arbre'] );
191
		this.lienArbreInfo( infosArbre.sujet['num-arbre'] );
192
		this.afficherObs( infosArbre );
192
		this.afficherObs( infosArbre );
193
		this.stockerObsData( infosArbre, true );
193
		this.stockerObsData( infosArbre, true );
194
	}
194
	}
195
};
195
};
196
 
196
 
197
ReleveASL.prototype.lienArbreInfo = function( numArbre ) {
197
ReleveASL.prototype.lienArbreInfo = function( numArbre ) {
198
	if ( numArbre == 1 ) {
198
	if ( numArbre == 1 ) {
199
		$( '#bloc-info-arbres-title' ).removeClass( 'hidden' );
199
		$( '#bloc-info-arbres-title' ).removeClass( 'hidden' );
200
	}
200
	}
201
	$( '#bloc-info-arbres' ).append(
201
	$( '#bloc-info-arbres' ).append(
202
		'<div'+
202
		'<div'+
203
			' id="arbre-info-' + numArbre + '"'+
203
			' id="arbre-info-' + numArbre + '"'+
204
			' class="col-sm-8"'+
204
			' class="col-sm-8"'+
205
		'>'+
205
		'>'+
206
			'<a'+
206
			'<a'+
207
				' id="arbre-info-lien-' + numArbre + '"'+
207
				' id="arbre-info-lien-' + numArbre + '"'+
208
				' href=""'+
208
				' href=""'+
209
				' class="arbre-info btn btn-outline-info btn-block mb-3"'+
209
				' class="arbre-info btn btn-outline-info btn-block mb-3"'+
210
				' data-arbre-info="' + numArbre + '"'+
210
				' data-arbre-info="' + numArbre + '"'+
211
			'>'+
211
			'>'+
212
				'<i class="fas fa-info-circle"></i>'+
212
				'<i class="fas fa-info-circle"></i>'+
213
				' Arbre ' + numArbre +
213
				' Arbre ' + numArbre +
214
			'</a>'+
214
			'</a>'+
215
		'</div>'
215
		'</div>'
216
	);
216
	);
217
};
217
};
218
 
218
 
219
// Ajouter Obs ****************************************************************/
219
// Ajouter Obs ****************************************************************/
220
/**
220
/**
221
 * Etape formulaire avec transfert carto
221
 * Etape formulaire avec transfert carto
222
 */
222
 */
223
ReleveASL.prototype.saisirArbres = function() {
223
ReleveASL.prototype.saisirArbres = function() {
224
	if ( this.validerReleve() ) {
224
	if ( this.validerReleve() ) {
225
		$( '#soumettre-releve' )
225
		$( '#soumettre-releve' )
226
			.addClass( 'disabled' )
226
			.addClass( 'disabled' )
227
			.attr( 'aria-disabled', true )
227
			.attr( 'aria-disabled', true )
228
			.off();
228
			.off();
229
		$( '#form-observation' ).find( 'input, textarea' ).prop( 'disabled', true );
229
		$( '#form-observation' ).find( 'input, textarea' ).prop( 'disabled', true );
230
		$( '#zone-arbres,#geoloc-datas,#bouton-nouveau-releve' ).removeClass( 'hidden' );
230
		$( '#zone-arbres,#geoloc-datas,#bouton-nouveau-releve' ).removeClass( 'hidden' );
231
		this.confirmerSortie();
231
		this.confirmerSortie();
232
		if ( !valOk( $( '#releve-data' ).val() ) ) {
232
		if ( !valOk( $( '#releve-data' ).val() ) ) {
233
			const releveDatasTmp = {
233
			const releveDatasTmp = {
234
				obs  : {
234
				obs  : {
235
					ce_utilisateur     : $( '#id_utilisateur' ).val(),
235
					ce_utilisateur     : $( '#id_utilisateur' ).val(),
236
					date_observation   : $( '#releve-date' ).val(),
236
					date_observation   : $( '#releve-date' ).val(),
237
					zone_geo           : $( '#commune-nom' ).val(),
237
					zone_geo           : $( '#commune-nom' ).val(),
238
					ce_zone_geo        : $( '#commune-insee' ).val(),
238
					ce_zone_geo        : $( '#commune-insee' ).val(),
239
					pays               : $( '#pays' ).val(),
239
					pays               : $( '#pays' ).val(),
240
					commentaire        : $( '#commentaires' ).val().trim()
240
					commentaire        : $( '#commentaires' ).val().trim()
241
				},
241
				},
242
				obsE : {
242
				obsE : {
243
					rue                : $( '#rue' ).val(),
243
					rue                : $( '#rue' ).val(),
244
					'geometry-releve'  : $( '#geometry-releve' ).val(),
244
					'geometry-releve'  : $( '#geometry-releve' ).val(),
245
					'latitude-releve'  : $( '#latitude-releve' ).val(),
245
					'latitude-releve'  : $( '#latitude-releve' ).val(),
246
					'longitude-releve' : $( '#longitude-releve' ).val(),
246
					'longitude-releve' : $( '#longitude-releve' ).val(),
247
					'altitude-releve'  : $( '#altitude-releve' ).val()
247
					'altitude-releve'  : $( '#altitude-releve' ).val()
248
				}
248
				}
249
			};
249
			};
250
			if ( 'tb_lichensgo' !== this.projet ) {
250
			if ( 'tb_lichensgo' !== this.projet ) {
251
				releveDatasTmp.obsE['zone-pietonne'] = $( '#zone-pietonne input:checked' ).val();
251
				releveDatasTmp.obsE['zone-pietonne'] = $( '#zone-pietonne input:checked' ).val();
252
				releveDatasTmp.obsE['pres-lampadaires'] = $( '#pres-lampadaires input:checked' ).val();
252
				releveDatasTmp.obsE['pres-lampadaires'] = $( '#pres-lampadaires input:checked' ).val();
253
			}
253
			}
254
			this.releveDatas = this.formaterReleveData(releveDatasTmp);
254
			this.releveDatas = this.formaterReleveData(releveDatasTmp);
255
			$( '#releve-data' ).val( JSON.stringify( this.releveDatas ) );
255
			$( '#releve-data' ).val( JSON.stringify( this.releveDatas ) );
256
			this.numArbre = this.releveDatas.length - 1;
256
			this.numArbre = this.releveDatas.length - 1;
257
		} else {
257
		} else {
258
			this.releveDatas = $.parseJSON( $( '#releve-data' ).val() );
258
			this.releveDatas = $.parseJSON( $( '#releve-data' ).val() );
259
			this.releveDatas[0].date                = $( '#releve-date' ).val();
259
			this.releveDatas[0].date                = $( '#releve-date' ).val();
260
			if ( 'tb_lichensgo' !== this.projet ) {
260
			if ( 'tb_lichensgo' !== this.projet ) {
261
				this.releveDatas[0]['zone-pietonne']    = $( '#zone-pietonne input:checked' ).val();
261
				this.releveDatas[0]['zone-pietonne']    = $( '#zone-pietonne input:checked' ).val();
262
				this.releveDatas[0]['pres-lampadaires'] = $( '#pres-lampadaires input:checked' ).val();
262
				this.releveDatas[0]['pres-lampadaires'] = $( '#pres-lampadaires input:checked' ).val();
263
			}
263
			}
264
			this.releveDatas[0].commentaires        = $( '#commentaires' ).val().trim();
264
			this.releveDatas[0].commentaires        = $( '#commentaires' ).val().trim();
265
			for ( let i = 1 ; i < this.releveDatas.length; i++ ) {
265
			for ( let i = 1 ; i < this.releveDatas.length; i++ ) {
266
				this.releveDatas[i]['date_rue_commune'] = (
266
				this.releveDatas[i]['date_rue_commune'] = (
267
					this.releveDatas[0].date +
267
					this.releveDatas[0].date +
268
					this.releveDatas[0].rue +
268
					this.releveDatas[0].rue +
269
					this.releveDatas[0]['commune-nom']
269
					this.releveDatas[0]['commune-nom']
270
				);
270
				);
271
			}
271
			}
272
			$( '#releve-data' ).val( JSON.stringify( this.releveDatas ) );
272
			$( '#releve-data' ).val( JSON.stringify( this.releveDatas ) );
273
			//charger les images
273
			//charger les images
274
			this.chargerImgEnregistrees();
274
			this.chargerImgEnregistrees();
275
			this.numArbre = $.parseJSON( $( '#releve-data' ).val() ).length - 1;
275
			this.numArbre = $.parseJSON( $( '#releve-data' ).val() ).length - 1;
276
		}
276
		}
277
		// transfert carto
277
		// transfert carto
278
		// $cartoRemplacee = $( '#tb-geolocation' ),
278
		// $cartoRemplacee = $( '#tb-geolocation' ),
279
		// layer = 'osm',
279
		// layer = 'osm',
280
		// zoomInit = 18
280
		// zoomInit = 18
281
		const donnesResetCarto = {
281
		const donnesResetCarto = {
282
			geometry  : $( '#geometry-releve' ).val(),
282
			geometry  : $( '#geometry-releve' ).val(),
283
			latitude  : $( '#latitude-releve' ).val(),
283
			latitude  : $( '#latitude-releve' ).val(),
284
			longitude : $( '#longitude-releve' ).val(),
284
			longitude : $( '#longitude-releve' ).val(),
285
			suffixe   : 'arbres',
285
			suffixe   : 'arbres',
286
			layer     : 'googleHybrid',
286
			layer     : 'googleHybrid',
287
			zoomInit  : 18
287
			zoomInit  : 18
288
		};
288
		};
289
 
289
 
290
		this.transfererCarto( donnesResetCarto );
290
		this.transfererCarto( donnesResetCarto );
291
		this.scrollFormTop( '#zone-arbres' );
291
		this.scrollFormTop( '#zone-arbres' );
292
	}
292
	}
293
};
293
};
294
 
294
 
295
ReleveASL.prototype.chargerImgEnregistrees = function() {
295
ReleveASL.prototype.chargerImgEnregistrees = function() {
296
	const releveL = this.releveDatas.length;
296
	const releveL = this.releveDatas.length;
297
	let idArbre   = 0,
297
	let idArbre   = 0,
298
		last      = false,
298
		last      = false,
299
		urlImgObs = '',
299
		urlImgObs = '',
300
		imgDatas  = {};
300
		imgDatas  = {};
301
 
301
 
302
	for ( let i = 1; i < releveL; i++ ) {
302
	for ( let i = 1; i < releveL; i++ ) {
303
		idArbre = this.releveDatas[i]['id_observation'];
303
		idArbre = this.releveDatas[i]['id_observation'];
304
		urlImgObs = this.serviceObsImgs + idArbre;
304
		urlImgObs = this.serviceObsImgs + idArbre;
305
		imgDatas = {
305
		imgDatas = {
306
			'indice'      : i,
306
			'indice'      : i,
307
			'idArbre'     : idArbre,
307
			'idArbre'     : idArbre,
308
			'numArbre'    : this.releveDatas[i]['num-arbre'],
308
			'numArbre'    : this.releveDatas[i]['num-arbre'],
309
			'nomRet'      : this.releveDatas[i].taxon.nomRet.replace( /\s/, '_' ),
309
			'nomRet'      : this.releveDatas[i].taxon.nomRet.replace( /\s/, '_' ),
310
			'releveDatas' : this.releveDatas
310
			'releveDatas' : this.releveDatas
311
		};
311
		};
312
 
312
 
313
		if ( ( releveL - 1) === i ) {
313
		if ( ( releveL - 1) === i ) {
314
			last = true;
314
			last = true;
315
		}
315
		}
316
		this.chargerImgArbre( urlImgObs, imgDatas, last );
316
		this.chargerImgArbre( urlImgObs, imgDatas, last );
317
	}
317
	}
318
};
318
};
319
 
319
 
320
ReleveASL.prototype.chargerImgArbre = function( urlImgObs, imgDatas, last ) {
320
ReleveASL.prototype.chargerImgArbre = function( urlImgObs, imgDatas, last ) {
321
	const lthis   = this;
321
	const lthis   = this;
322
 
322
 
323
	$.ajax({
323
	$.ajax({
324
		url: urlImgObs,
324
		url: urlImgObs,
325
		type: 'GET',
325
		type: 'GET',
326
		success: function( idsImg, textStatus, jqXHR ) {
326
		success: function( idsImg, textStatus, jqXHR ) {
327
			if ( valOk( idsImg ) ) {
327
			if ( valOk( idsImg ) ) {
328
				let urlImg   = '',
328
				let urlImg   = '',
329
					images   = [];
329
					images   = [];
330
 
330
 
331
				idsImg = idsImg[parseInt( imgDatas.idArbre )];
331
				idsImg = idsImg[parseInt( imgDatas.idArbre )];
332
				$.each( idsImg, function( i, idImg ) {
332
				$.each( idsImg, function( i, idImg ) {
333
					urlImg = lthis.serviceObsImgUrl.replace( '{id}', '000' + idImg );
333
					urlImg = lthis.serviceObsImgUrl.replace( '{id}', '000' + idImg );
334
					images[i] = {
334
					images[i] = {
335
						nom : imgDatas.nomRet + '_arbre'+ imgDatas.numArbre +'_image' + ( i + 1 ),
335
						nom : imgDatas.nomRet + '_arbre'+ imgDatas.numArbre +'_image' + ( i + 1 ),
336
						src : urlImg,
336
						src : urlImg,
337
						b64 :[],
337
						b64 :[],
338
						id  : idImg
338
						id  : idImg
339
					};
339
					};
340
				});
340
				});
341
				imgDatas.releveDatas[imgDatas.indice]['miniature-img'] = images;
341
				imgDatas.releveDatas[imgDatas.indice]['miniature-img'] = images;
342
				$( '#releve-data' ).val( JSON.stringify( imgDatas.releveDatas ) );
342
				$( '#releve-data' ).val( JSON.stringify( imgDatas.releveDatas ) );
343
			} else {
343
			} else {
344
				console.dir( lthis.msgTraduction( 'erreur-image' ) + ' : ' + lthis.msgTraduction( 'arbre' ) + ' ' + imgDatas.idArbre );
344
				console.dir( lthis.msgTraduction( 'erreur-image' ) + ' : ' + lthis.msgTraduction( 'arbre' ) + ' ' + imgDatas.idArbre );
345
			}
345
			}
346
		},
346
		},
347
		error: function( jqXHR, textStatus, errorThrown ) {
347
		error: function( jqXHR, textStatus, errorThrown ) {
348
			console.dir( lthis.msgTraduction( 'erreur-image' ) );
348
			console.dir( lthis.msgTraduction( 'erreur-image' ) );
349
		}
349
		}
350
	})
350
	})
351
	.always( function() {
351
	.always( function() {
352
		if (last) {
352
		if (last) {
353
			lthis.chargerArbres();
353
			lthis.chargerArbres();
354
		}
354
		}
355
	});
355
	});
356
};
356
};
357
 
357
 
358
/**
358
/**
359
 * Retourne un Array contenant les valeurs des champs
359
 * Retourne un Array contenant les valeurs des champs
360
 * dont les données seront transmises dans la table cel-obs-etendues
360
 * dont les données seront transmises dans la table cel-obs-etendues
361
 */
361
 */
362
ReleveASL.prototype.getObsChpSpecifiques = function( datasArbres ) {
362
ReleveASL.prototype.getObsChpSpecifiques = function( datasArbres ) {
363
	const lthis = this,
363
	const lthis = this,
364
		retour  = [],
364
		retour  = [],
365
		champs  = [
365
		champs  = [
366
			'rue',
366
			'rue',
367
			'geometry-releve',
367
			'geometry-releve',
368
			'latitude-releve',
368
			'latitude-releve',
369
			'longitude-releve',
369
			'longitude-releve',
370
			'altitude-releve'
370
			'altitude-releve'
371
		];
371
		];
372
 
372
 
373
	if ( 'tb_lichensgo' !== this.projet ) {
373
	if ( 'tb_lichensgo' !== this.projet ) {
374
		champs.push(
374
		champs.push(
375
			'zone-pietonne',
375
			'zone-pietonne',
376
			'pres-lampadaires',
376
			'pres-lampadaires',
377
			'surface-pied',
377
			'surface-pied',
378
			'equipement-pied-arbre',
378
			'equipement-pied-arbre',
379
			'tassement',
379
			'tassement',
380
			'dejections',
380
			'dejections',
381
			'com-arbres'
381
			'com-arbres'
382
		);
382
		);
383
	}
383
	}
384
	champs.push(
384
	champs.push(
385
		'rue-arbres',
385
		'rue-arbres',
386
		'circonference'
386
		'circonference'
387
	);
387
	);
388
 
388
 
389
	let cleValeur = '';
389
	let cleValeur = '';
390
 
390
 
391
	$.each( champs, function( i , value ) {
391
	$.each( champs, function( i , value ) {
392
		cleValeur = ( 4 > i ) || ( 6 > i && 'tb_lichensgo' !== lthis.projet ) ? 'releve' : 'sujet';
392
		cleValeur = ( 4 > i ) || ( 6 > i && 'tb_lichensgo' !== lthis.projet ) ? 'releve' : 'sujet';
393
		if ( valOk( datasArbres[cleValeur][value] ) ) {
393
		if ( valOk( datasArbres[cleValeur][value] ) ) {
394
			retour.push({ cle : value, valeur : datasArbres[cleValeur][value] });
394
			retour.push({ cle : value, valeur : datasArbres[cleValeur][value] });
395
		}
395
		}
396
	});
396
	});
397
	if ( 'tb_streets' !== this.projet ) {
397
	if ( 'tb_streets' !== this.projet ) {
398
		const faceOmbreLength = datasArbres.sujet['face-ombre'].length;
398
		const faceOmbreLength = datasArbres.sujet['face-ombre'].length;
399
		let faceOmbre = '';
399
		let faceOmbre = '';
400
 
400
 
401
		if ( 'string' === typeof datasArbres.sujet['face-ombre'] ) {
401
		if ( 'string' === typeof datasArbres.sujet['face-ombre'] ) {
402
			faceOmbre = datasArbres.sujet['face-ombre'];
402
			faceOmbre = datasArbres.sujet['face-ombre'];
403
		} else {
403
		} else {
404
			$.each( datasArbres.sujet['face-ombre'], function( i ,value ) {
404
			$.each( datasArbres.sujet['face-ombre'], function( i ,value ) {
405
				faceOmbre += value
405
				faceOmbre += value
406
				if ( faceOmbreLength > ( i + 1 ) ) {
406
				if ( faceOmbreLength > ( i + 1 ) ) {
407
					faceOmbre += ';';
407
					faceOmbre += ';';
408
				}
408
				}
409
			});
409
			});
410
		}
410
		}
411
		retour.push({ cle : 'face-ombre', valeur : faceOmbre });
411
		retour.push({ cle : 'face-ombre', valeur : faceOmbre });
412
	}
412
	}
413
	retour.push({ cle : 'num_arbre' , valeur : datasArbres.obsNum });
413
	retour.push({ cle : 'num_arbre' , valeur : datasArbres.obsNum });
414
 
414
 
415
	let stockerImg  = valOk( datasArbres.sujet['miniature-img'] );
415
	let stockerImg  = valOk( datasArbres.sujet['miniature-img'] );
416
 
416
 
417
	if( stockerImg ) {
417
	if( stockerImg ) {
418
		$.each( datasArbres.sujet['miniature-img'], function( i, paramsImg ) {
418
		$.each( datasArbres.sujet['miniature-img'], function( i, paramsImg ) {
419
			if( !paramsImg.hasOwnProperty( 'id' ) ) {
419
			if( !paramsImg.hasOwnProperty( 'id' ) ) {
420
				stockerImg = false;
420
				stockerImg = false;
421
			}
421
			}
422
			return stockerImg;
422
			return stockerImg;
423
		});
423
		});
424
	}
424
	}
425
	if( stockerImg ) {
425
	if( stockerImg ) {
426
		retour.push({ cle : 'miniature-img' , valeur : JSON.stringify( datasArbres.sujet['miniature-img'] ) });
426
		retour.push({ cle : 'miniature-img' , valeur : JSON.stringify( datasArbres.sujet['miniature-img'] ) });
427
	}
427
	}
428
	return retour;
428
	return retour;
429
};
429
};
430
 
430
 
431
ReleveASL.prototype.chargerInfosArbre = function( numArbre ) {
431
ReleveASL.prototype.chargerInfosArbre = function( numArbre ) {
432
	const desactiverForm = ( parseInt( numArbre ) !== ( this.numArbre + 1 ) );
432
	const desactiverForm = ( parseInt( numArbre ) !== ( this.numArbre + 1 ) );
433
 
433
 
434
	if ( desactiverForm ) {
434
	if ( desactiverForm ) {
435
		const releveDatas = $.parseJSON( $( '#releve-data' ).val() ),
435
		const releveDatas = $.parseJSON( $( '#releve-data' ).val() ),
436
			arbreDatas    = releveDatas[numArbre];
436
			arbreDatas    = releveDatas[numArbre];
437
		let	taxon   = {},
437
		let	taxon   = {},
438
			imgHtml = '';
438
			imgHtml = '';
439
 
439
 
440
		$( '#arbre-nb' ).text( numArbre + ' (visualisation)' );
440
		$( '#arbre-nb' ).text( numArbre + ' (visualisation)' );
441
		taxon.item = arbreDatas.taxon;
441
		taxon.item = arbreDatas.taxon;
442
		this.surAutocompletionTaxon( {}, taxon );
442
		this.surAutocompletionTaxon( {}, taxon );
443
 
443
 
444
		const selects = [ 'certitude' ];
444
		const selects = [ 'certitude' ];
445
 
445
 
446
		if ( 'tb_lichensgo' !== this.projet ) {
446
		if ( 'tb_lichensgo' !== this.projet ) {
447
			selects.push( 'equipement-pied-arbre', 'tassement' );
447
			selects.push( 'equipement-pied-arbre', 'tassement' );
448
		}
448
		}
449
		$.each( selects, function( i, value ) {
449
		$.each( selects, function( i, value ) {
450
			if( !valOk( arbreDatas[value] ) ) {
450
			if( !valOk( arbreDatas[value] ) ) {
451
				arbreDatas[value] = '';
451
				arbreDatas[value] = '';
452
			}
452
			}
453
			if ( $( this ).hasClass( 'other' ) && valOk( $( this ).val() ) ) {
453
			if ( $( this ).hasClass( 'other' ) && valOk( $( this ).val() ) ) {
454
				$( this ).text( $( this ).val() );
454
				$( this ).text( $( this ).val() );
455
			}
455
			}
456
			$( '#' + value + ' option' ).each( function() {
456
			$( '#' + value + ' option' ).each( function() {
457
				if ( arbreDatas[value] === $( this ).val() ) {
457
				if ( arbreDatas[value] === $( this ).val() ) {
458
					$( this ).prop( 'selected', true );
458
					$( this ).prop( 'selected', true );
459
				} else {
459
				} else {
460
					$( this ).prop( 'selected', false );
460
					$( this ).prop( 'selected', false );
461
				}
461
				}
462
			});
462
			});
463
		});
463
		});
464
		$( '#rue-arbres' ).val( arbreDatas['rue-arbres'] );
464
		$( '#rue-arbres' ).val( arbreDatas['rue-arbres'] );
465
		$( '#geometry-arbres' ).val( arbreDatas['geometry-arbres'] );
465
		$( '#geometry-arbres' ).val( arbreDatas['geometry-arbres'] );
466
		$( '#latitude-arbres' ).val( arbreDatas['latitude-arbres'] );
466
		$( '#latitude-arbres' ).val( arbreDatas['latitude-arbres'] );
467
		$( '#longitude-arbres' ).val( arbreDatas['longitude-arbres'] );
467
		$( '#longitude-arbres' ).val( arbreDatas['longitude-arbres'] );
468
		$( '#altitude-arbres' ).val( arbreDatas['altitude-arbres'] );
468
		$( '#altitude-arbres' ).val( arbreDatas['altitude-arbres'] );
469
		// image
469
		// image
470
		this.supprimerMiniatures();
470
		this.supprimerMiniatures();
471
		$.each( arbreDatas['miniature-img'], function( i, value ) {
471
		$.each( arbreDatas['miniature-img'], function( i, value ) {
472
			imgHtml +=
472
			imgHtml +=
473
			'<div class="miniature mb-3 mr-3">'+
473
			'<div class="miniature mb-3 mr-3">'+
474
				'<img class="miniature-img" class="miniature img-rounded" alt="' + value.nom + '" src="' + value.src + '"/>'+
474
				'<img class="miniature-img" class="miniature img-rounded" alt="' + value.nom + '" src="' + value.src + '"/>'+
475
			'</div>';
475
			'</div>';
476
		});
476
		});
477
		$( '#miniatures' ).append( imgHtml );
477
		$( '#miniatures' ).append( imgHtml );
478
		$( '#circonference' ).val( arbreDatas.circonference );
478
		$( '#circonference' ).val( arbreDatas.circonference );
479
		$( '#com-arbres' ).val( arbreDatas['com-arbres'] );
479
		$( '#com-arbres' ).val( arbreDatas['com-arbres'] );
480
		if ( 'tb_lichensgo' !== this.projet ) {
480
		if ( 'tb_lichensgo' !== this.projet ) {
481
			$( '#surface-pied' ).val( arbreDatas['surface-pied'] );
481
			$( '#surface-pied' ).val( arbreDatas['surface-pied'] );
482
			if ( undefined != arbreDatas.dejections ) {
482
			if ( undefined != arbreDatas.dejections ) {
483
				$( '#dejections-oui' ).prop( 'checked', arbreDatas.dejections );
483
				$( '#dejections-oui' ).prop( 'checked', arbreDatas.dejections );
484
				$( '#dejections-non' ).prop( 'checked', !arbreDatas.dejections );
484
				$( '#dejections-non' ).prop( 'checked', !arbreDatas.dejections );
485
			}
485
			}
486
		}
486
		}
487
		if ( 'tb_streets' !== this.projet ) {
487
		if ( 'tb_streets' !== this.projet ) {
488
			$( '#face-ombre input' ).each( function() {
488
			$( '#face-ombre input' ).each( function() {
489
				if ( -1 < arbreDatas['face-ombre'].indexOf( $( this ).val() ) ) {
489
				if ( -1 < arbreDatas['face-ombre'].indexOf( $( this ).val() ) ) {
490
					$( this ).prop( 'checked', true );
490
					$( this ).prop( 'checked', true );
491
				} else {
491
				} else {
492
					$( this ).prop( 'checked', false );
492
					$( this ).prop( 'checked', false );
493
				}
493
				}
494
			});
494
			});
495
		}
495
		}
496
	}
496
	}
497
	this.modeArbresBasculerActivation( desactiverForm, numArbre );
497
	this.modeArbresBasculerActivation( desactiverForm, numArbre );
498
};
498
};
499
 
499
 
500
ReleveASL.prototype.modeArbresBasculerActivation = function( desactiver, numArbre = 0 ) {
500
ReleveASL.prototype.modeArbresBasculerActivation = function( desactiver, numArbre = 0 ) {
501
	let selecteurs =
501
	let selecteurs =
502
		'#taxon,'+
502
		'#taxon,'+
503
		'#certitude,'+
503
		'#certitude,'+
504
		'#geometry-arbres,'+
504
		'#geometry-arbres,'+
505
		'#latitude-arbres,'+
505
		'#latitude-arbres,'+
506
		'#longitude-arbres,'+
506
		'#longitude-arbres,'+
507
		'#rue-arbres,'+
507
		'#rue-arbres,'+
508
		'#fichier,'+
508
		'#fichier,'+
509
		'#circonference,'+
509
		'#circonference,'+
510
		'#com-arbres,'+
510
		'#com-arbres,'+
511
		'#ajouter-obs';
511
		'#ajouter-obs';
512
 
512
 
513
	if ( 'tb_lichensgo' !== this.projet ) {
513
	if ( 'tb_lichensgo' !== this.projet ) {
514
		selecteurs +=
514
		selecteurs +=
515
			',#equipement-pied-arbre,'+
515
			',#equipement-pied-arbre,'+
516
			'#tassement,'+
516
			'#tassement,'+
517
			'#surface-pied';
517
			'#surface-pied';
518
		$( '#dejections' ).find( 'input' ).prop( 'disabled', desactiver );
518
		$( '#dejections' ).find( 'input' ).prop( 'disabled', desactiver );
519
	}
519
	}
520
	$( selecteurs ).prop( 'disabled', desactiver );
520
	$( selecteurs ).prop( 'disabled', desactiver );
521
	if ( 'tb_streets' !== this.projet ) {
521
	if ( 'tb_streets' !== this.projet ) {
522
		$( '#face-ombre' ).find( 'input' ).prop( 'disabled', desactiver );
522
		$( '#face-ombre' ).find( 'input' ).prop( 'disabled', desactiver );
523
	}
523
	}
524
	if ( desactiver ) {
524
	if ( desactiver ) {
525
		$( '#geoloc-arbres,#bouton-fichier,#miniature-info' ).addClass( 'hidden' );
525
		$( '#geoloc-arbres,#bouton-fichier,#miniature-info' ).addClass( 'hidden' );
526
		$( '#geoloc-datas-arbres,#retour' ).removeClass( 'hidden' );
526
		$( '#geoloc-datas-arbres,#retour' ).removeClass( 'hidden' );
527
	} else {
527
	} else {
528
		// quand on change ou qu'on revient à la normale :
528
		// quand on change ou qu'on revient à la normale :
529
		$( '#geoloc-arbres,#bouton-fichier,#miniature-info' ).removeClass( 'hidden' );
529
		$( '#geoloc-arbres,#bouton-fichier,#miniature-info' ).removeClass( 'hidden' );
530
		$( '#geoloc-datas-arbres,#retour' ).addClass( 'hidden' );
530
		$( '#geoloc-datas-arbres,#retour' ).addClass( 'hidden' );
531
		// reset carto
531
		// reset carto
532
		// typeLocalisation = 'point',
532
		// typeLocalisation = 'point',
533
		// zoomInit = 18
533
		// zoomInit = 18
534
		const donnesResetCarto = {
534
		const donnesResetCarto = {
535
			cartoRemplacee : $( '#tb-geolocation-arbres' ),
535
			cartoRemplacee : $( '#tb-geolocation-arbres' ),
536
			geometry       : $( '#geometry-releve' ).val(),
536
			geometry       : $( '#geometry-releve' ).val(),
537
			latitude       : $( '#latitude-releve' ).val(),
537
			latitude       : $( '#latitude-releve' ).val(),
538
			longitude      : $( '#longitude-releve' ).val(),
538
			longitude      : $( '#longitude-releve' ).val(),
539
			suffixe        : 'arbres',
539
			suffixe        : 'arbres',
540
			layer          : 'googleHybrid',
540
			layer          : 'googleHybrid',
541
			zoomInit       : 18
541
			zoomInit       : 18
542
		};
542
		};
543
 
543
 
544
		this.transfererCarto( donnesResetCarto );
544
		this.transfererCarto( donnesResetCarto );
545
		// retour aux valeurs par defaut
545
		// retour aux valeurs par defaut
546
		selecteurs = '#certitude option';
546
		selecteurs = '#certitude option';
547
		if ( 'tb_lichensgo' !== this.projet ) {
547
		if ( 'tb_lichensgo' !== this.projet ) {
548
			selecteurs += ',#equipement-pied-arbre option,#tassement option';
548
			selecteurs += ',#equipement-pied-arbre option,#tassement option';
549
			$( '#equipement-pied-arbre .other' ).text( 'Autre' ).val( 'other' );
549
			$( '#equipement-pied-arbre .other' ).text( 'Autre' ).val( 'other' );
550
			$( '#collect-other-equipement-pied-arbre' ).closest( '.control-group' ).remove();
550
			$( '#collect-other-equipement-pied-arbre' ).closest( '.control-group' ).remove();
551
			$( '#dejections' ).find( 'input' ).prop( 'checked', false );
551
			$( '#dejections' ).find( 'input' ).prop( 'checked', false );
552
		}
552
		}
553
		if ( 'tb_streets' !== this.projet ) {
553
		if ( 'tb_streets' !== this.projet ) {
554
			$( '#face-ombre' ).find( 'input' ).prop( 'checked', false );
554
			$( '#face-ombre' ).find( 'input' ).prop( 'checked', false );
555
		}
555
		}
556
		$( selecteurs ).each( function() {
556
		$( selecteurs ).each( function() {
557
			if ( $( this ).hasClass( 'choisir' ) ) {
557
			if ( $( this ).hasClass( 'choisir' ) ) {
558
				$( this ).prop( 'selected', true );
558
				$( this ).prop( 'selected', true );
559
			} else {
559
			} else {
560
				$( this ).prop( 'selected', false );
560
				$( this ).prop( 'selected', false );
561
			}
561
			}
562
		});
562
		});
563
		this.supprimerMiniatures();
563
		this.supprimerMiniatures();
564
		selecteurs =
564
		selecteurs =
565
			'#circonference,'+
565
			'#circonference,'+
566
			'#com-arbres,'+
566
			'#com-arbres,'+
567
			'#rue-arbres,'+
567
			'#rue-arbres,'+
568
			'#geometry-arbres,'+
568
			'#geometry-arbres,'+
569
			'#latitude-arbres,'+
569
			'#latitude-arbres,'+
570
			'#longitude-arbres,'+
570
			'#longitude-arbres,'+
571
			'#certitude';
571
			'#certitude';
572
		if ( 'tb_lichensgo' !== this.projet ) {
572
		if ( 'tb_lichensgo' !== this.projet ) {
573
			selecteurs +=
573
			selecteurs +=
574
			',#equipement-pied-arbre,'+
574
			',#equipement-pied-arbre,'+
575
			'#tassement,'+
575
			'#tassement,'+
576
			'#surface-pied';
576
			'#surface-pied';
577
		}
577
		}
578
		$( selecteurs ).val( '' );
578
		$( selecteurs ).val( '' );
579
		if( 0 < numArbre ) {
579
		if( 0 < numArbre ) {
580
			$( '#arbre-nb' ).text( numArbre );
580
			$( '#arbre-nb' ).text( numArbre );
581
			$( '#arbre-info-lien-' + numArbre ).addClass( 'disabled' );
581
			$( '#arbre-info-lien-' + numArbre ).addClass( 'disabled' );
582
			$( '.arbre-info' ).not( '#arbre-info-lien-' + numArbre ).removeClass( 'disabled' );
582
			$( '.arbre-info' ).not( '#arbre-info-lien-' + numArbre ).removeClass( 'disabled' );
583
		}
583
		}
584
	}
584
	}
585
};
585
};
586
 
586
 
587
/*
587
/*
588
 * Actualise l'id_observation ( id de l'obs en bdd )
588
 * Actualise l'id_observation ( id de l'obs en bdd )
589
 * à partir des données renvoyées par le service après transfert
589
 * à partir des données renvoyées par le service après transfert
590
 */
590
 */
591
ReleveASL.prototype.actualiserReleveDataIdObs = function( obsId, id_observation ) {
591
ReleveASL.prototype.actualiserReleveDataIdObs = function( obsId, id_observation ) {
592
	this.releveData  = $.parseJSON( $( '#releve-data' ).val() );
592
	this.releveData  = $.parseJSON( $( '#releve-data' ).val() );
593
	this.releveData[obsId ]['id_observation'] = id_observation;
593
	this.releveData[obsId ]['id_observation'] = id_observation;
594
	$( '#releve-data' ).val( JSON.stringify( this.releveData ) );
594
	$( '#releve-data' ).val( JSON.stringify( this.releveData ) );
595
};
595
};
596
 
596
 
597
// Géolocalisation *************************************************************/
597
// Géolocalisation *************************************************************/
598
/**
598
/**
599
 * Fonction handler de l'évenement location du module tb-geoloc
599
 * Fonction handler de l'évenement location du module tb-geoloc
600
 */
600
 */
601
ReleveASL.prototype.locationHandler = function( location ) {
601
ReleveASL.prototype.locationHandler = function( location ) {
602
	const lthis = this,
602
	const lthis = this,
603
		isGeolocArbres = ( 'tb-geolocation-arbres' === location.target.id ),
603
		isGeolocArbres = ( 'tb-geolocation-arbres' === location.target.id ),
604
		locDatas       = location.originalEvent.detail;
604
		locDatas       = location.originalEvent.detail;
605
 
605
 
606
	if ( valOk( locDatas ) ) {
606
	if ( valOk( locDatas ) ) {
607
		console.dir( locDatas );
607
		console.dir( locDatas );
608
 
608
 
609
		const rue    = ( valOk( locDatas.osmRoad ) ) ? locDatas.osmRoad : '',
609
		const rue    = ( valOk( locDatas.osmRoad ) ) ? locDatas.osmRoad : '',
610
			altitude = ( valOk( locDatas.elevation ) ) ? locDatas.elevation : '',
610
			altitude = ( valOk( locDatas.elevation ) ) ? locDatas.elevation : '',
611
			pays     = ( valOk( locDatas.osmCountryCode ) ) ? locDatas.osmCountryCode.toUpperCase() : 'FR',
611
			pays     = ( valOk( locDatas.osmCountryCode ) ) ? locDatas.osmCountryCode.toUpperCase() : 'FR',
612
			geometry = JSON.stringify( locDatas.geometry );
612
			geometry = JSON.stringify( locDatas.geometry );
613
		let latitude     = '',
613
		let latitude     = '',
614
			longitude    = '',
614
			longitude    = '',
615
			nomCommune   = '',
615
			nomCommune   = '',
616
			communeInsee = '';
616
			communeInsee = '';
617
 
617
 
618
		if ( valOk( locDatas.geometry.coordinates ) &&
618
		if ( valOk( locDatas.geometry.coordinates ) &&
619
			valOk( locDatas.centroid.coordinates ) &&
619
			valOk( locDatas.centroid.coordinates ) &&
620
			valOk( locDatas.centroid.coordinates[0] ) &&
620
			valOk( locDatas.centroid.coordinates[0] ) &&
621
			valOk( locDatas.centroid.coordinates[1] )
621
			valOk( locDatas.centroid.coordinates[1] )
622
		) {
622
		) {
623
			latitude = locDatas.centroid.coordinates[0];
623
			latitude = locDatas.centroid.coordinates[0];
624
			longitude = locDatas.centroid.coordinates[1];
624
			longitude = locDatas.centroid.coordinates[1];
625
		}
625
		}
626
		if ( !isGeolocArbres ) {
626
		if ( !isGeolocArbres ) {
627
			if ( valOk( locDatas.inseeData ) ) {
627
			if ( valOk( locDatas.inseeData ) ) {
628
				nomCommune = locDatas.inseeData.nom;
628
				nomCommune = locDatas.inseeData.nom;
629
				communeInsee = ( valOk( locDatas.inseeData.code ) ) ? locDatas.inseeData.code : '';
629
				communeInsee = ( valOk( locDatas.inseeData.code ) ) ? locDatas.inseeData.code : '';
630
			} else if ( valOk( locDatas.locality ) ) {
630
			} else if ( valOk( locDatas.locality ) ) {
631
				nomCommune = locDatas.locality;
631
				nomCommune = locDatas.locality;
632
			} else if ( valOk( locDatas.osmCounty ) ) {
632
			} else if ( valOk( locDatas.osmCounty ) ) {
633
				nomCommune = locDatas.osmCounty;
633
				nomCommune = locDatas.osmCounty;
634
			}
634
			}
635
			$( '#rue' ).val( rue );
635
			$( '#rue' ).val( rue );
636
			$( '#geometry-releve' ).val( geometry );
636
			$( '#geometry-releve' ).val( geometry );
637
			$( '#latitude-releve' ).val( latitude );
637
			$( '#latitude-releve' ).val( latitude );
638
			$( '#longitude-releve' ).val( longitude );
638
			$( '#longitude-releve' ).val( longitude );
639
			$( '#commune-nom' ).val( nomCommune );
639
			$( '#commune-nom' ).val( nomCommune );
640
			$( '#commune-insee' ).val( communeInsee );
640
			$( '#commune-insee' ).val( communeInsee );
641
			$( '#altitude-releve' ).val( altitude );
641
			$( '#altitude-releve' ).val( altitude );
642
			$( '#pays' ).val( pays );
642
			$( '#pays' ).val( pays );
643
			$( '#latitude-releve, #longitude-releve' ).valid();
643
			$( '#latitude-releve, #longitude-releve' ).valid();
644
			if ( valOk( $( '#rue' ).val() ) && valOk( $( '#commune-nom' ).val() ) ) {
644
			if ( valOk( $( '#rue' ).val() ) && valOk( $( '#commune-nom' ).val() ) ) {
645
				$( '#geoloc-error' ).addClass( 'hidden' );
645
				$( '#geoloc-error' ).addClass( 'hidden' );
646
				$( '#geoloc-datas' ).closest( '.control-group' ).removeClass( 'error' );
646
				$( '#geoloc-datas' ).closest( '.control-group' ).removeClass( 'error' );
647
			} else {
647
			} else {
648
				$( '#rue,#commune-nom' ).prop( 'disabled', false );
648
				$( '#rue,#commune-nom' ).prop( 'disabled', false );
649
				$( '#geoloc-datas' )
649
				$( '#geoloc-datas' )
650
					.removeClass( 'hidden' )
650
					.removeClass( 'hidden' )
651
					.closest( '.control-group' )
651
					.closest( '.control-group' )
652
						.addClass( 'error' );
652
						.addClass( 'error' );
653
				$( '#geoloc-error' ).removeClass( 'hidden' );
653
				$( '#geoloc-error' ).removeClass( 'hidden' );
654
				$( '#releve-date' )
654
				$( '#releve-date' )
655
					.removeClass( 'erreur' )
655
					.removeClass( 'erreur' )
656
					.closest( '.control-group' )
656
					.closest( '.control-group' )
657
						.removeClass( 'error' )
657
						.removeClass( 'error' )
658
						.find( '#error-drc' )
658
						.find( '#error-drc' )
659
							.remove();
659
							.remove();
660
			}
660
			}
661
			$( '#rue,#commune-nom' ).change( function() {
661
			$( '#rue,#commune-nom' ).change( function() {
662
				if ( valOk( $( '#rue' ).val() ) && valOk( $( '#commune-nom' ).val() ) ) {
662
				if ( valOk( $( '#rue' ).val() ) && valOk( $( '#commune-nom' ).val() ) ) {
663
					$( '#geoloc-error' ).addClass( 'hidden' );
663
					$( '#geoloc-error' ).addClass( 'hidden' );
664
				} else {
664
				} else {
665
					$( '#geoloc-error' ).removeClass( 'hidden' );
665
					$( '#geoloc-error' ).removeClass( 'hidden' );
666
				}
666
				}
667
			});
667
			});
668
		} else {
668
		} else {
669
			$( '#rue-arbres' ).val( rue );
669
			$( '#rue-arbres' ).val( rue );
670
			$( '#geometry-arbres' ).val( geometry );
670
			$( '#geometry-arbres' ).val( geometry );
671
			$( '#latitude-arbres' ).val( latitude );
671
			$( '#latitude-arbres' ).val( latitude );
672
			$( '#longitude-arbres' ).val( longitude );
672
			$( '#longitude-arbres' ).val( longitude );
673
			$( '#altitude-arbres' ).val( altitude );
673
			$( '#altitude-arbres' ).val( altitude );
674
			$( '#latitude-arbres, #longitude-arbres' ).valid();
674
			$( '#latitude-arbres, #longitude-arbres' ).valid();
675
			if ( valOk( $( '#latitude-arbres' ).val() ) && valOk( $( '#longitude-arbres' ).val() ) ) {
675
			if ( valOk( $( '#latitude-arbres' ).val() ) && valOk( $( '#longitude-arbres' ).val() ) ) {
676
				$( '#geoloc-arbres' ).closest( '.control-group' ).removeClass( 'error' );
676
				$( '#geoloc-arbres' ).closest( '.control-group' ).removeClass( 'error' );
677
			} else {
677
			} else {
678
				$( '#geoloc-arbres' ).closest( '.control-group' ).addClass( 'error' );
678
				$( '#geoloc-arbres' ).closest( '.control-group' ).addClass( 'error' );
679
			}
679
			}
680
		}
680
		}
681
		this.geoloc.map.setView([latitude, longitude], 18);
-
 
682
	} else {
681
	} else {
683
		console.dir( 'Error location' );
682
		console.dir( 'Error location' );
684
	}
683
	}
685
};
684
};
686
 
685
 
687
// Form Validator *************************************************************/
686
// Form Validator *************************************************************/
688
ReleveASL.prototype.validerMinMax = function( element ) {
687
ReleveASL.prototype.validerMinMax = function( element ) {
689
	const minCond = parseFloat( element.value ) >= parseFloat( element.min ),
688
	const minCond = parseFloat( element.value ) >= parseFloat( element.min ),
690
		maxCond   = parseFloat( element.value ) <= parseFloat( element.max );
689
		maxCond   = parseFloat( element.value ) <= parseFloat( element.max );
691
	let mnMxCond    = new Boolean(),
690
	let mnMxCond    = new Boolean(),
692
		messageMnMx = 'La valeur entrée doit être',
691
		messageMnMx = 'La valeur entrée doit être',
693
		returnMnMx  = { cond : true , message : '' };
692
		returnMnMx  = { cond : true , message : '' };
694
 
693
 
695
	if (
694
	if (
696
			( valOk( element.type, true, 'number' ) || valOk( element.type, true, 'range' ) ) &&
695
			( valOk( element.type, true, 'number' ) || valOk( element.type, true, 'range' ) ) &&
697
			( valOk( element.min ) || valOk( element.max ) )
696
			( valOk( element.min ) || valOk( element.max ) )
698
		) {
697
		) {
699
 
698
 
700
		if ( element.min && element.max ) {
699
		if ( element.min && element.max ) {
701
			messageMnMx += ' comprise entre ' + element.min + ' et ' + element.max;
700
			messageMnMx += ' comprise entre ' + element.min + ' et ' + element.max;
702
			mnMxCond     = ( minCond && maxCond );
701
			mnMxCond     = ( minCond && maxCond );
703
		} else if ( element.min ) {
702
		} else if ( element.min ) {
704
			messageMnMx += ' supérieure à ' + element.min;
703
			messageMnMx += ' supérieure à ' + element.min;
705
			mnMxCond     = minCond;
704
			mnMxCond     = minCond;
706
		} else {
705
		} else {
707
			messageMnMx += ' inférieure à ' + element.max;
706
			messageMnMx += ' inférieure à ' + element.max;
708
			mnMxCond     = maxCond;
707
			mnMxCond     = maxCond;
709
		}
708
		}
710
		returnMnMx.cond    = mnMxCond;
709
		returnMnMx.cond    = mnMxCond;
711
		returnMnMx.message = messageMnMx;
710
		returnMnMx.message = messageMnMx;
712
	}
711
	}
713
 
712
 
714
	return returnMnMx;
713
	return returnMnMx;
715
};
714
};
716
 
715
 
717
/**
716
/**
718
 * Valider date/rue/commune par rapport aux relevés précédents
717
 * Valider date/rue/commune par rapport aux relevés précédents
719
 */
718
 */
720
ReleveASL.prototype.validerDateRueCommune = function( valeurDate, valeurRue, valeurCmn ) {
719
ReleveASL.prototype.validerDateRueCommune = function( valeurDate, valeurRue, valeurCmn ) {
721
	let valide = true;
720
	let valide = true;
722
 
721
 
723
	if (
722
	if (
724
		valOk( $( '#dates-rues-communes' ).val() ) &&
723
		valOk( $( '#dates-rues-communes' ).val() ) &&
725
		valOk( valeurDate ) &&
724
		valOk( valeurDate ) &&
726
		valOk( valeurRue ) &&
725
		valOk( valeurRue ) &&
727
		valOk( valeurCmn )
726
		valOk( valeurCmn )
728
	) {
727
	) {
729
		const valsEltDRC = $.parseJSON( $( '#dates-rues-communes' ).val() ),
728
		const valsEltDRC = $.parseJSON( $( '#dates-rues-communes' ).val() ),
730
			valeurDRC = valeurDate + valeurRue + valeurCmn;
729
			valeurDRC = valeurDate + valeurRue + valeurCmn;
731
 
730
 
732
		valide = ( -1 === valsEltDRC.indexOf( valeurDRC ) );
731
		valide = ( -1 === valsEltDRC.indexOf( valeurDRC ) );
733
 
732
 
734
	}
733
	}
735
	return valide;
734
	return valide;
736
};
735
};
737
 
736
 
738
/**
737
/**
739
 * FormValidator pour les champs date/rue/Commune
738
 * FormValidator pour les champs date/rue/Commune
740
 */
739
 */
741
ReleveASL.prototype.dateRueCommuneFormValidator = function() {
740
ReleveASL.prototype.dateRueCommuneFormValidator = function() {
742
	const dateValid  = ( /^(?:[0-9]{4}-[0-9]{2}-[0-9]{2})|(?:[0-9]{2}\/[0-9]{2}\/[0-9]{4})$/.test( $( '#releve-date' ).val() ) ),
741
	const dateValid  = ( /^(?:[0-9]{4}-[0-9]{2}-[0-9]{2})|(?:[0-9]{2}\/[0-9]{2}\/[0-9]{4})$/.test( $( '#releve-date' ).val() ) ),
743
		geolocValid  = ( valOk( $( '#commune-nom' ).val() ) && valOk( $( '#rue' ).val() ) ),
742
		geolocValid  = ( valOk( $( '#commune-nom' ).val() ) && valOk( $( '#rue' ).val() ) ),
744
		errorDateRue =
743
		errorDateRue =
745
			'<span id="error-drc" class="error">'+
744
			'<span id="error-drc" class="error">'+
746
				this.msgTraduction( 'date-rue' )+
745
				this.msgTraduction( 'date-rue' )+
747
			'</span> ';
746
			'</span> ';
748
 
747
 
749
	if( this.validerDateRueCommune( $( '#releve-date' ).val(), $( '#rue' ).val(), $( '#commune-nom' ).val()  ) ) {
748
	if( this.validerDateRueCommune( $( '#releve-date' ).val(), $( '#rue' ).val(), $( '#commune-nom' ).val()  ) ) {
750
		$( '#releve-date' )
749
		$( '#releve-date' )
751
			.removeClass( 'erreur' )
750
			.removeClass( 'erreur' )
752
			.closest( '.control-group' )
751
			.closest( '.control-group' )
753
				.removeClass( 'error' )
752
				.removeClass( 'error' )
754
				.find( '#error-drc' )
753
				.find( '#error-drc' )
755
					.remove();
754
					.remove();
756
		if ( geolocValid ) {
755
		if ( geolocValid ) {
757
			$( '#geoloc' )
756
			$( '#geoloc' )
758
			.closest( '.control-group' )
757
			.closest( '.control-group' )
759
				.removeClass( 'error' );
758
				.removeClass( 'error' );
760
		}
759
		}
761
	} else {
760
	} else {
762
		$( '#releve-date' )
761
		$( '#releve-date' )
763
			.addClass( 'erreur' )
762
			.addClass( 'erreur' )
764
			.closest( '.control-group' )
763
			.closest( '.control-group' )
765
				.addClass( 'error' );
764
				.addClass( 'error' );
766
		if ( !valOk( $( '#releve-date' ).closest( '.control-group' ).find( '#error-drc' ) ) ) {
765
		if ( !valOk( $( '#releve-date' ).closest( '.control-group' ).find( '#error-drc' ) ) ) {
767
			$( '#releve-date' ).after( errorDateRue );
766
			$( '#releve-date' ).after( errorDateRue );
768
		}
767
		}
769
		$( '#geoloc' ).closest( '.control-group' ).addClass( 'error' );
768
		$( '#geoloc' ).closest( '.control-group' ).addClass( 'error' );
770
	}
769
	}
771
	if ( dateValid ) {
770
	if ( dateValid ) {
772
		$( '#releve-date' ).closest( '.control-group span.error' ).not( '#error-drc' ).remove();
771
		$( '#releve-date' ).closest( '.control-group span.error' ).not( '#error-drc' ).remove();
773
	}
772
	}
774
};
773
};
775
 
774
 
776
ReleveASL.prototype.definirReglesFormValidator = function() {
775
ReleveASL.prototype.definirReglesFormValidator = function() {
777
	const lthis = this;
776
	const lthis = this;
778
 
777
 
779
	$( '#form-observation' ).validate({
778
	$( '#form-observation' ).validate({
780
		rules : {
779
		rules : {
781
			'zone-pietonne' : {
780
			'zone-pietonne' : {
782
				required : function() {
781
				required : function() {
783
					return( 'tb_lichensgo' !== lthis.projet );
782
					return( 'tb_lichensgo' !== lthis.projet );
784
				},
783
				},
785
				minlength : 1
784
				minlength : 1
786
			},
785
			},
787
			'latitude-releve' : {
786
			'latitude-releve' : {
788
				required : true,
787
				required : true,
789
				minlength : 1,
788
				minlength : 1,
790
				range : [-90, 90]
789
				range : [-90, 90]
791
			},
790
			},
792
			'longitude-releve' : {
791
			'longitude-releve' : {
793
				required : true,
792
				required : true,
794
				minlength : 1,
793
				minlength : 1,
795
				range : [-180, 180]
794
				range : [-180, 180]
796
			}
795
			}
797
		}
796
		}
798
	});
797
	});
799
	$( 'input[type=date]' ).not( '#releve-date' ).on( 'input', function() {
798
	$( 'input[type=date]' ).not( '#releve-date' ).on( 'input', function() {
800
		$( this ).valid();
799
		$( this ).valid();
801
	});
800
	});
802
	// validation date/rue/commune au démarage
801
	// validation date/rue/commune au démarage
803
	this.dateRueCommuneFormValidator();
802
	this.dateRueCommuneFormValidator();
804
	// validation date/rue/commune sur event
803
	// validation date/rue/commune sur event
805
	$( '#releve-date,#rue,#commune-nom' ).on( 'change input focusout', this.dateRueCommuneFormValidator.bind( this ) );
804
	$( '#releve-date,#rue,#commune-nom' ).on( 'change input focusout', this.dateRueCommuneFormValidator.bind( this ) );
806
	$( '#form-arbres' ).validate({
805
	$( '#form-arbres' ).validate({
807
		rules : {
806
		rules : {
808
			taxon : {
807
			taxon : {
809
				required : true,
808
				required : true,
810
				minlength : 1
809
				minlength : 1
811
			},
810
			},
812
			certitude : {
811
			certitude : {
813
				required : true,
812
				required : true,
814
				minlength : 1
813
				minlength : 1
815
			},
814
			},
816
			'latitude-arbres' : {
815
			'latitude-arbres' : {
817
				required : true,
816
				required : true,
818
				minlength : 1,
817
				minlength : 1,
819
				range : [-90, 90]
818
				range : [-90, 90]
820
			},
819
			},
821
			'longitude-arbres' : {
820
			'longitude-arbres' : {
822
				required : true,
821
				required : true,
823
				minlength : 1,
822
				minlength : 1,
824
				range : [-180, 180]
823
				range : [-180, 180]
825
			}
824
			}
826
		}
825
		}
827
	});
826
	});
828
	$( '#form-arbre-fs' ).validate({
827
	$( '#form-arbre-fs' ).validate({
829
		onkeyup : false,
828
		onkeyup : false,
830
		onclick : false,
829
		onclick : false,
831
		rules : {
830
		rules : {
832
			circonference : {
831
			circonference : {
833
				required : true,
832
				required : true,
834
				minlength : 1
833
				minlength : 1
835
			},
834
			},
836
			'surface-pied' : {
835
			'surface-pied' : {
837
				required :  function() {
836
				required :  function() {
838
					return( 'tb_lichensgo' !== lthis.projet );
837
					return( 'tb_lichensgo' !== lthis.projet );
839
				},
838
				},
840
				minlength : 1,
839
				minlength : 1,
841
				'minMaxOk' : true
840
				'minMaxOk' : true
842
			},
841
			},
843
			'equipement-pied-arbre' : {
842
			'equipement-pied-arbre' : {
844
				required :  function() {
843
				required :  function() {
845
					return( 'tb_lichensgo' !== lthis.projet );
844
					return( 'tb_lichensgo' !== lthis.projet );
846
				},
845
				},
847
				minlength : 1
846
				minlength : 1
848
			},
847
			},
849
			'face-ombre' : {
848
			'face-ombre' : {
850
				required :  function() {
849
				required :  function() {
851
					return( 'tb_streets' !== lthis.projet );
850
					return( 'tb_streets' !== lthis.projet );
852
				},
851
				},
853
				minlength : 1
852
				minlength : 1
854
			}
853
			}
855
		}
854
		}
856
	});
855
	});
857
	$( '#form-observateur' ).validate({
856
	$( '#form-observateur' ).validate({
858
		rules : {
857
		rules : {
859
			courriel : {
858
			courriel : {
860
				required : true,
859
				required : true,
861
				minlength : 1,
860
				minlength : 1,
862
				email : true,
861
				email : true,
863
				'userEmailOk' : true
862
				'userEmailOk' : true
864
			},
863
			},
865
			mdp : {
864
			mdp : {
866
				required : true,
865
				required : true,
867
				minlength : 1
866
				minlength : 1
868
			}
867
			}
869
		}
868
		}
870
	});
869
	});
871
	if ( 'tb_lichensgo' !== this.projet ) {
870
	if ( 'tb_lichensgo' !== this.projet ) {
872
		$( '#equipement-pied-arbre' ).change( function() {
871
		$( '#equipement-pied-arbre' ).change( function() {
873
			if ( valOk( $( this ).val(), false, 'other' ) ) {
872
			if ( valOk( $( this ).val(), false, 'other' ) ) {
874
				$( this )
873
				$( this )
875
					.closest( '.control-group' )
874
					.closest( '.control-group' )
876
						.removeClass( 'error' )
875
						.removeClass( 'error' )
877
						.find( 'span.error' )
876
						.find( 'span.error' )
878
							.addClass( 'hidden' );
877
							.addClass( 'hidden' );
879
			}
878
			}
880
		});
879
		});
881
	}
880
	}
882
	if ( 'tb_streets' !== this.projet ) {
881
	if ( 'tb_streets' !== this.projet ) {
883
		$( '#face-ombre input' ).on( 'click', function() {
882
		$( '#face-ombre input' ).on( 'click', function() {
884
			let oneIsChecked = false;
883
			let oneIsChecked = false;
885
			$( '#face-ombre input' ).each( function() {
884
			$( '#face-ombre input' ).each( function() {
886
				if ( $( this ).is( ':checked' ) ) {
885
				if ( $( this ).is( ':checked' ) ) {
887
					oneIsChecked = true;
886
					oneIsChecked = true;
888
					return false;
887
					return false;
889
				}
888
				}
890
			});
889
			});
891
			if ( oneIsChecked ) {
890
			if ( oneIsChecked ) {
892
				$( '#face-ombre.control-group' )
891
				$( '#face-ombre.control-group' )
893
					.removeClass( 'error' )
892
					.removeClass( 'error' )
894
					.find( 'span.error' )
893
					.find( 'span.error' )
895
						.addClass( 'hidden' );
894
						.addClass( 'hidden' );
896
			} else {
895
			} else {
897
				$( '#face-ombre.control-group' )
896
				$( '#face-ombre.control-group' )
898
					.addClass( 'error' )
897
					.addClass( 'error' )
899
					.find( 'span.error' )
898
					.find( 'span.error' )
900
						.removeClass( 'hidden' );
899
						.removeClass( 'hidden' );
901
			}
900
			}
902
		});
901
		});
903
	}
902
	}
904
	$( '#connexion,#inscription,#oublie' ).on( 'click', function() {
903
	$( '#connexion,#inscription,#oublie' ).on( 'click', function() {
905
		$( '#tb-observateur .control-group' ).removeClass( 'error' );
904
		$( '#tb-observateur .control-group' ).removeClass( 'error' );
906
	});
905
	});
907
};
906
};
908
 
907
 
909
/**
908
/**
910
 * Valide le formulaire Relevé (= étape 1) au click sur un bouton "enregistrer"
909
 * Valide le formulaire Relevé (= étape 1) au click sur un bouton "enregistrer"
911
 */
910
 */
912
ReleveASL.prototype.validerReleve = function() {
911
ReleveASL.prototype.validerReleve = function() {
913
	const observateur = ( $( '#form-observateur' ).valid() && $( '#courriel' ).valid() ),
912
	const observateur = ( $( '#form-observateur' ).valid() && $( '#courriel' ).valid() ),
914
		obs           = $( '#form-observation' ).valid(),
913
		obs           = $( '#form-observation' ).valid(),
915
		geoloc        = (
914
		geoloc        = (
916
			valOk( $( '#latitude-releve' ).val() ) &&
915
			valOk( $( '#latitude-releve' ).val() ) &&
917
			valOk( $( '#longitude-releve' ).val() ) &&
916
			valOk( $( '#longitude-releve' ).val() ) &&
918
			valOk( $( '#rue' ).val() ) &&
917
			valOk( $( '#rue' ).val() ) &&
919
			valOk( $( '#commune-nom' ).val() )
918
			valOk( $( '#commune-nom' ).val() )
920
		);
919
		);
921
	let dateRue = true;
920
	let dateRue = true;
922
 
921
 
923
	if ( valOk( $( '#dates-rues-communes' ).val() ) ) {
922
	if ( valOk( $( '#dates-rues-communes' ).val() ) ) {
924
		dateRue = (
923
		dateRue = (
925
			valOk( $( '#releve-date' ).val() ) &&
924
			valOk( $( '#releve-date' ).val() ) &&
926
			valOk( $( '#rue' ).val() ) &&
925
			valOk( $( '#rue' ).val() ) &&
927
			this.validerDateRueCommune( $( '#releve-date' ).val(), $( '#rue' ).val(), $( '#commune-nom' ).val() )
926
			this.validerDateRueCommune( $( '#releve-date' ).val(), $( '#rue' ).val(), $( '#commune-nom' ).val() )
928
		);
927
		);
929
	}
928
	}
930
	if ( !obs ) {
929
	if ( !obs ) {
931
		this.scrollFormTop( '#zone-observation' );
930
		this.scrollFormTop( '#zone-observation' );
932
	}
931
	}
933
	// panneau observateur
932
	// panneau observateur
934
	if ( observateur ) {
933
	if ( observateur ) {
935
		this.masquerPanneau( '#dialogue-utilisateur-non-identifie' );
934
		this.masquerPanneau( '#dialogue-utilisateur-non-identifie' );
936
		$( '#tb-observateur .control-group' ).removeClass( 'error' );
935
		$( '#tb-observateur .control-group' ).removeClass( 'error' );
937
	} else {
936
	} else {
938
		this.afficherPanneau( '#dialogue-utilisateur-non-identifie' );
937
		this.afficherPanneau( '#dialogue-utilisateur-non-identifie' );
939
		$( '#tb-observateur .control-group' ).addClass( 'error' );
938
		$( '#tb-observateur .control-group' ).addClass( 'error' );
940
	}
939
	}
941
	if ( dateRue && geoloc ) {
940
	if ( dateRue && geoloc ) {
942
		this.masquerPanneau( '#dialogue-date-rue-ko' );
941
		this.masquerPanneau( '#dialogue-date-rue-ko' );
943
		$( '#geoloc-datas' ).closest( '.control-group' ).removeClass( 'error' );
942
		$( '#geoloc-datas' ).closest( '.control-group' ).removeClass( 'error' );
944
	} else {
943
	} else {
945
		if (
944
		if (
946
			valOk( $( '#releve-date' ).val() ) &&
945
			valOk( $( '#releve-date' ).val() ) &&
947
			valOk( $( '#rue' ).val() ) &&
946
			valOk( $( '#rue' ).val() ) &&
948
			valOk( $( '#dates-rues-communes' ).val() )
947
			valOk( $( '#dates-rues-communes' ).val() )
949
		) {
948
		) {
950
			this.afficherPanneau( '#dialogue-date-rue-ko' );
949
			this.afficherPanneau( '#dialogue-date-rue-ko' );
951
		}
950
		}
952
		$( '#geoloc-datas' ).closest( '.control-group' ).addClass( 'error' );
951
		$( '#geoloc-datas' ).closest( '.control-group' ).addClass( 'error' );
953
	}
952
	}
954
	if (
953
	if (
955
		!valOk( $( '#releve-date' ).val() ) ||
954
		!valOk( $( '#releve-date' ).val() ) ||
956
		!valOk( $( '#rue' ).val() ) ||
955
		!valOk( $( '#rue' ).val() ) ||
957
		!valOk( $( '#dates-rues-communes' ).val() )
956
		!valOk( $( '#dates-rues-communes' ).val() )
958
	) {
957
	) {
959
		this.masquerPanneau( '#dialogue-date-rue-ko' );
958
		this.masquerPanneau( '#dialogue-date-rue-ko' );
960
	}
959
	}
961
	if ( geoloc ) {
960
	if ( geoloc ) {
962
		this.masquerPanneau( '#dialogue-geoloc-ko' );
961
		this.masquerPanneau( '#dialogue-geoloc-ko' );
963
		if ( dateRue ) {
962
		if ( dateRue ) {
964
			$( '#geoloc' ).closest( '.control-group' ).removeClass( 'error' );
963
			$( '#geoloc' ).closest( '.control-group' ).removeClass( 'error' );
965
		}
964
		}
966
	} else {
965
	} else {
967
		this.afficherPanneau( '#dialogue-geoloc-ko' );
966
		this.afficherPanneau( '#dialogue-geoloc-ko' );
968
		$( '#geoloc' ).closest( '.control-group' ).addClass( 'error' );
967
		$( '#geoloc' ).closest( '.control-group' ).addClass( 'error' );
969
	}
968
	}
970
 
969
 
971
	return  (observateur && obs && geoloc && dateRue);
970
	return  (observateur && obs && geoloc && dateRue);
972
};
971
};
973
 
972
 
974
/**
973
/**
975
 * Valide le formulaire Arbres (= étape 2) au click sur un bouton "suivant"
974
 * Valide le formulaire Arbres (= étape 2) au click sur un bouton "suivant"
976
 */
975
 */
977
ReleveASL.prototype.validerForm = function() {
976
ReleveASL.prototype.validerForm = function() {
978
	const validerReleve = this.validerReleve(),
977
	const validerReleve = this.validerReleve(),
979
		geoloc          = (
978
		geoloc          = (
980
			valOk( $( '#latitude-arbres' ).val() ) &&
979
			valOk( $( '#latitude-arbres' ).val() ) &&
981
			valOk( $( '#longitude-arbres' ).val() )
980
			valOk( $( '#longitude-arbres' ).val() )
982
		),
981
		),
983
		taxon = valOk( $( '#taxon' ).val() );
982
		taxon = valOk( $( '#taxon' ).val() );
984
	let piedArbre = true;
983
	let piedArbre = true;
985
 
984
 
986
	if ( 'tb_lichensgo' !== this.projet ) {
985
	if ( 'tb_lichensgo' !== this.projet ) {
987
		piedArbre = valOk( $( '#equipement-pied-arbre' ).val(), false, 'other' );
986
		piedArbre = valOk( $( '#equipement-pied-arbre' ).val(), false, 'other' );
988
		if ( piedArbre ) {
987
		if ( piedArbre ) {
989
			$( '#equipement-pied-arbre' )
988
			$( '#equipement-pied-arbre' )
990
				.closest( '.control-group' )
989
				.closest( '.control-group' )
991
					.removeClass( 'error' )
990
					.removeClass( 'error' )
992
					.find( 'span.error' )
991
					.find( 'span.error' )
993
						.addClass( 'hidden' );
992
						.addClass( 'hidden' );
994
		} else {
993
		} else {
995
			$( '#equipement-pied-arbre' )
994
			$( '#equipement-pied-arbre' )
996
				.closest( '.control-group' )
995
				.closest( '.control-group' )
997
					.addClass( 'error' )
996
					.addClass( 'error' )
998
					.find( 'span.error' )
997
					.find( 'span.error' )
999
						.removeClass( 'hidden' );
998
						.removeClass( 'hidden' );
1000
		}
999
		}
1001
	}
1000
	}
1002
 
1001
 
1003
	const obs = (
1002
	const obs = (
1004
		$( '#form-arbres' ).valid() &&
1003
		$( '#form-arbres' ).valid() &&
1005
		$( '#form-arbre-fs' ).valid() &&
1004
		$( '#form-arbre-fs' ).valid() &&
1006
		piedArbre
1005
		piedArbre
1007
	);
1006
	);
1008
 
1007
 
1009
	if ( geoloc ) {
1008
	if ( geoloc ) {
1010
		this.masquerPanneau( '#dialogue-geoloc-ko' );
1009
		this.masquerPanneau( '#dialogue-geoloc-ko' );
1011
		$( '#geoloc-arbres' ).closest( '.control-group' ).removeClass( 'error' );
1010
		$( '#geoloc-arbres' ).closest( '.control-group' ).removeClass( 'error' );
1012
	} else {
1011
	} else {
1013
		this.afficherPanneau( '#dialogue-geoloc-ko' );
1012
		this.afficherPanneau( '#dialogue-geoloc-ko' );
1014
		$( '#geoloc-arbres' ).closest( '.control-group' ).addClass( 'error' );
1013
		$( '#geoloc-arbres' ).closest( '.control-group' ).addClass( 'error' );
1015
	}
1014
	}
1016
 
1015
 
1017
	return ( validerReleve && obs && geoloc && taxon );
1016
	return ( validerReleve && obs && geoloc && taxon );
1018
};
1017
};