Subversion Repositories eFlore/Applications.cel

Rev

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

Rev Author Line No. Line
836 jpm 1
/*+--------------------------------------------------------------------------------------------------------+*/
2
// PARAMÊTRES et CONSTANTES
941 jpm 3
// Mettre à true pour afficher les messages de débogage
950 jpm 4
var DEBUG = false;
1041 aurelien 5
/**
6
 * Indication de certaines variables ajoutée par php
7
* var communeImageUrl ;
8
* var pointImageUrl ;
9
* var groupeImageUrlTpl ;
10
*/
836 jpm 11
var pointsOrigine = null;
12
var boundsOrigine = null;
13
var markerClusterer = null;
14
var map = null;
15
var infoBulle = new google.maps.InfoWindow();
980 jpm 16
var stations = null;
836 jpm 17
var pointClique = null;
980 jpm 18
var carteCentre = new google.maps.LatLng(25, 10);
836 jpm 19
var carteOptions = {
980 jpm 20
	zoom: 3,
21
	center:carteCentre,
836 jpm 22
	mapTypeId: google.maps.MapTypeId.ROADMAP,
23
	mapTypeControlOptions: {
24
		mapTypeIds: ['OSM',
25
		             google.maps.MapTypeId.ROADMAP,
26
		             google.maps.MapTypeId.HYBRID,
27
		             google.maps.MapTypeId.SATELLITE,
28
		             google.maps.MapTypeId.TERRAIN]
1438 aurelien 29
	},
30
	zoomControlOptions: {
31
        style: google.maps.ZoomControlStyle.LARGE,
32
        position: google.maps.ControlPosition.LEFT_CENTER
33
    },
34
    panControl: false
836 jpm 35
};
36
var osmMapType = new google.maps.ImageMapType({
37
	getTileUrl: function(coord, zoom) {
38
		return "http://tile.openstreetmap.org/" +
39
		zoom + "/" + coord.x + "/" + coord.y + ".png";
40
	},
41
	tileSize: new google.maps.Size(256, 256),
42
	isPng: true,
43
	alt: "OpenStreetMap",
44
	name: "OSM",
45
	maxZoom: 19
46
});
980 jpm 47
var ctaLayer = null;
1271 aurelien 48
var pagineur = {'limite':300, 'start':0, 'total':0, 'stationId':null, 'format':'tableau'};
915 jpm 49
var station = {'commune':'', 'obsNbre':0};
50
var obsStation = new Array();
51
var obsPage = new Array();
939 jpm 52
var taxonsCarte = new Array();
980 jpm 53
var mgr = null;
54
var marqueursCache = new Array();
55
var zonesCache = new Array();
1035 aurelien 56
var requeteChargementPoints;
1142 aurelien 57
var urlVars = null;
836 jpm 58
/*+--------------------------------------------------------------------------------------------------------+*/
59
// INITIALISATION DU CODE
60
 
61
//Déclenchement d'actions quand JQuery et le document HTML sont OK
62
$(document).ready(function() {
63
	initialiserWidget();
64
});
65
 
66
function initialiserWidget() {
1142 aurelien 67
	urlVars = getUrlVars();
1442 aurelien 68
	definirTailleOverlay();
69
	attribuerListenersOverlay();
1438 aurelien 70
	centrerTitreEtStats();
836 jpm 71
	initialiserAffichageCarte();
72
	initialiserAffichagePanneauLateral();
73
	initialiserCarte();
980 jpm 74
	initialiserGestionnaireMarqueurs()
836 jpm 75
	initialiserInfoBulle();
941 jpm 76
	initialiserFormulaireContact();
836 jpm 77
	chargerLimitesCommunales();
1032 aurelien 78
	attribuerListenerCarte();
836 jpm 79
}
80
 
1142 aurelien 81
function getUrlVars()
82
{
83
    var vars = [], hash;
1151 aurelien 84
    if(window.location.href.indexOf('?') != -1) {
85
	    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
86
	    for(var i = 0; i < hashes.length; i++)
87
	    {
88
	        hash = hashes[i].split('=');
89
	        vars.push(hash[0]);
90
	        vars[hash[0]] = hash[1];
91
	    }
1142 aurelien 92
    }
93
    return vars;
94
}
95
 
915 jpm 96
/*+--------------------------------------------------------------------------------------------------------+*/
97
// AFFICHAGE GÉNÉRAL
98
 
1438 aurelien 99
function afficherTitreCarteEtStats() {
980 jpm 100
	if (stations != null && taxonsCarte.length > 0) {
1039 aurelien 101
		var obsNbre = stations.stats.observations;
1173 aurelien 102
		var obsNbreFormate = obsNbre;
103
		if(obsNbre != 0) {
104
		    obsNbreFormate = stations.stats.observations.formaterNombre();
105
		}
1039 aurelien 106
		var plteNbre = taxonsCarte.length;
1173 aurelien 107
		var plteNbreFormate = plteNbre;
108
		if(plteNbre != 0) {
109
		    plteNbreFormate = taxonsCarte.length.formaterNombre();
110
		}
1039 aurelien 111
		var communeNbre = stations.stats.communes;
1173 aurelien 112
		var communeNbreFormate = communeNbre;
113
		if(communeNbre != 0) {
114
		   communeNbreFormate = stations.stats.communes.formaterNombre();
115
		}
1172 aurelien 116
		var stationNbre = stations.stats.stations;
1173 aurelien 117
		var stationNbreFormate = stationNbre;
118
		if(stationNbre != 0) {
119
		  	stationNbreFormate = stations.stats.stations.formaterNombre();
120
		}
980 jpm 121
 
1438 aurelien 122
		var stats = obsNbreFormate+' observation';
123
		stats += (obsNbre > 1) ? 's' : '' ;
1434 aurelien 124
 
1438 aurelien 125
		if(photos != null && photos == 1) {
126
			stats += ' avec photos ';
1434 aurelien 127
		}
980 jpm 128
 
1438 aurelien 129
		stats += ' sur '+(stationNbre+ communeNbre)+' station';
130
		stats += (stationNbre > 1) ? 's' : '' ;
1430 aurelien 131
 
980 jpm 132
		if (nt == '*') {
1438 aurelien 133
			stats += ' parmi '+plteNbreFormate+' plante';
134
			stats += (plteNbre > 1) ? 's' : '' ;
980 jpm 135
		} else {
1430 aurelien 136
			if($('.taxon-actif .taxon').text() != '') {
137
				var element = $('.taxon-actif .taxon').clone();
138
				element.children().remove();
139
		        var taxon = element.text();
1438 aurelien 140
		        stats += ' pour '+taxon;
1430 aurelien 141
			} else {
142
				if (taxonsCarte[0]) {
143
					var taxon = taxonsCarte[0];
1438 aurelien 144
					stats += ' pour '+taxon.nom;
1430 aurelien 145
				}
980 jpm 146
			}
147
		}
148
 
1438 aurelien 149
		$('#pl-indication-filtre').html('Filtrer parmi <br />'+plteNbre+'<br />plantes');
150
		$('#zone-stats').show();
151
		$('#zone-stats > h1').text(stats);
980 jpm 152
	}
1438 aurelien 153
	centrerTitreEtStats();
836 jpm 154
}
155
 
1442 aurelien 156
function attribuerListenersOverlay() {
157
 
158
	$(window).resize(function() {
1445 aurelien 159
		google.maps.event.trigger($('#carte'), 'resize');
1442 aurelien 160
		definirTailleOverlay();
161
		centrerTitreEtStats();
1445 aurelien 162
		programmerRafraichissementCarte();
1442 aurelien 163
	});
164
 
165
	$('#lien_plein_ecran a').click(function(event) {
166
		window.open(window.location.href);
1445 aurelien 167
		event.preventDefault();
1442 aurelien 168
	});
169
 
170
	$('#lien_voir_cc a').click(function(event) {
171
		window.open($(this).attr('href'));
1445 aurelien 172
		event.preventDefault();
1442 aurelien 173
	});
174
}
175
 
176
function definirTailleOverlay() {
980 jpm 177
	var largeurViewPort = $(window).width();
1445 aurelien 178
	var taille = '1.6';
1442 aurelien 179
	var tailleMaxLogo = 50;
180
	var tailleMaxIcones = 20;
181
	var padding_icones = 8;
1445 aurelien 182
	var tailleFiltre = 80;
1442 aurelien 183
	if (largeurViewPort <= 500) {
980 jpm 184
		taille = '0.8';
1442 aurelien 185
		tailleMaxLogo = 20;
186
		tailleMaxIcones = 10;
1445 aurelien 187
		tailleFiltre = 60;
1442 aurelien 188
		padding_icones = 2;
189
 
190
	} else if (largeurViewPort > 500 && largeurViewPort <= 800) {
980 jpm 191
		taille = '1.0';
1442 aurelien 192
		tailleMaxLogo = 40;
193
		tailleMaxIcones = 15;
194
		padding_icones = 6;
1445 aurelien 195
		tailleFiltre = 60;
1442 aurelien 196
	} else if (largeurViewPort > 800) {
980 jpm 197
		taille = '1.6';
1442 aurelien 198
		tailleMaxLogo = 50;
199
		tailleMaxIcones = 20;
200
		padding_icones = 8;
1445 aurelien 201
		tailleFiltre = 80;
980 jpm 202
	}
1438 aurelien 203
 
204
	// Aménagement de la taille de police selon l'écran
980 jpm 205
	$("#carte-titre").css('font-size', taille+'em');
1442 aurelien 206
 
1438 aurelien 207
	$("#zone-stats h1").css('font-size', taille+'em');
1442 aurelien 208
	$("#zone-stats").css('padding', padding_icones+"px "+padding_icones+"px "+Math.round(padding_icones/4)+"px");
1438 aurelien 209
 
1442 aurelien 210
	$('.icone').height(tailleMaxIcones);
211
	$('#lien_plein_ecran').css("padding", padding_icones+"px "+padding_icones+"px "+Math.ceil(padding_icones/2)+"px");
212
	$('#lien_voir_cc').css("padding", padding_icones+"px "+padding_icones+"px "+Math.ceil(padding_icones/2)+"px");
213
 
214
	$('#zone-stats').height(tailleMaxIcones*1.5);
215
 
1445 aurelien 216
	$("#panneau-lateral").css('font-size', (taille*0.80)+'em');
217
	$("#panneau-lateral").css('padding', padding_icones+"px "+padding_icones+"px "+Math.round(padding_icones/4)+"px");
218
	$("#panneau-lateral").width(tailleFiltre);
219
 
1438 aurelien 220
	// Dimensionnement du titre et du logo
221
	if(urlLogo != "null") {
222
		hauteurLogo = $('#logo img').height();
223
		// Redimensionnement du logo s'il est trop grand
224
		// on perd en qualité mais ça vaut mieux que de casser l'affichage
1442 aurelien 225
		if(hauteurLogo > tailleMaxLogo) {
226
			hauteurLogo = tailleMaxLogo;
227
			$('#logo img').height(tailleMaxLogo);
1438 aurelien 228
		}
229
 
230
		if(hauteurLogo == 0) {
231
			$('#logo img').load(function(event) {
1442 aurelien 232
				definirTailleOverlay();
1438 aurelien 233
			});
234
			return;
235
		}
236
 
237
		largeurLogo = $('#logo img').width();
238
		largeurTitre = $('#carte-titre-infos').width();
239
 
1445 aurelien 240
		$('#zone-titre').css("height", (hauteurLogo+5)+"px");
1438 aurelien 241
		$('#zone-titre').css("width", (largeurLogo+largeurTitre+16)+"px");
242
 
243
		if(titreCarte != 'null' && titreCarte != 0) {
244
			$('#carte-titre-infos').css("position", "absolute");
245
			$('#carte-titre-infos').css("left", (largeurLogo+16)+"px");
1442 aurelien 246
			$('#carte-titre-infos').css("top", (hauteurLogo/2)+"px");
1438 aurelien 247
		}
1445 aurelien 248
	} else {
249
		$('#zone-titre').css("height", (tailleMaxIcones+5)+"px");
1438 aurelien 250
	}
980 jpm 251
}
252
 
1438 aurelien 253
function centrerTitreEtStats() {
1442 aurelien 254
	centrerTitre();
255
	centrerStats();
256
}
257
 
258
function centrerTitre() {
1438 aurelien 259
	var largeurViewPort = $(window).width();
260
	var largeurTitre = $('#zone-titre').width();
261
	var marge = (largeurViewPort - largeurTitre)/2;
262
	$('#zone-titre').css("margin-left",marge);
1445 aurelien 263
	var tailleRestante = largeurViewPort - (marge + largeurTitre);
264
	if(tailleRestante <= 170) {
265
		$('#zone-titre').css("top", "25px");
266
	} else {
267
		$('#zone-titre').css("top", "5px");
268
	}
1442 aurelien 269
}
270
 
271
function centrerStats() {
272
	var largeurViewPort = $(window).width();
1438 aurelien 273
	var largeurStats = $('#zone-stats').width();
1445 aurelien 274
	var marge = ((largeurViewPort - largeurStats)/2) - 10;
1438 aurelien 275
	$('#zone-stats').css("left",marge);
276
}
277
 
915 jpm 278
/*+--------------------------------------------------------------------------------------------------------+*/
279
// CARTE
280
 
836 jpm 281
function initialiserAffichageCarte() {
1438 aurelien 282
	$('#carte').height($(window).height());
283
	$('#carte').width($(window).width());
836 jpm 284
}
285
 
286
function initialiserCarte() {
287
	map = new google.maps.Map(document.getElementById('carte'), carteOptions);
288
	// Ajout de la couche OSM à la carte
289
	map.mapTypes.set('OSM', osmMapType);
290
}
291
 
980 jpm 292
function initialiserGestionnaireMarqueurs() {
293
	mgr = new MarkerManager(map);
294
}
836 jpm 295
 
296
function chargerLimitesCommunales() {
297
	if (urlsLimitesCommunales != null) {
298
		for (urlId in urlsLimitesCommunales) {
299
			var url = urlsLimitesCommunales[urlId];
1107 aurelien 300
			ctaLayer = new google.maps.KmlLayer(url, {preserveViewport: true});
836 jpm 301
			ctaLayer.setMap(map);
302
		}
303
	}
304
}
1039 aurelien 305
 
980 jpm 306
var listener = null;
307
var timer = null;
1032 aurelien 308
function attribuerListenerCarte() {
980 jpm 309
	listener = google.maps.event.addListener(map, 'bounds_changed', function(){
1032 aurelien 310
		programmerRafraichissementCarte();
980 jpm 311
	});
1032 aurelien 312
	listener = google.maps.event.addListener(map, 'zoom_changed', function(){
313
		programmerRafraichissementCarte();
314
	});
980 jpm 315
}
1032 aurelien 316
function programmerRafraichissementCarte() {
317
	if(timer != null) {
318
        window.clearTimeout(timer);
1035 aurelien 319
    }
320
	if(requeteChargementPoints != null) {
321
		requeteChargementPoints.abort();
322
	}
1032 aurelien 323
	timer = window.setTimeout(function() {
1342 aurelien 324
		if(map.getBounds() != undefined) {
325
			var zoom = map.getZoom();
1434 aurelien 326
			var lngNE = map.getBounds().getNorthEast().lng();
327
			var lngSW = map.getBounds().getSouthWest().lng()
328
			if(map.getBounds().getNorthEast().lng() < map.getBounds().getSouthWest().lng()) {
329
				lngNE = 176;
330
				lngSW = -156;
331
			}
332
			var NELatLng = (map.getBounds().getNorthEast().lat())+'|'+(lngNE);
333
			var SWLatLng = (map.getBounds().getSouthWest().lat())+'|'+(lngSW);
1342 aurelien 334
			chargerMarqueurs(zoom, NELatLng, SWLatLng);
335
		} else {
336
			programmerRafraichissementCarte();
337
		}
1032 aurelien 338
    }, 400);
339
}
836 jpm 340
 
980 jpm 341
var marqueurs = new Array();
342
function chargerMarqueurs(zoom, NELatLng, SWLatLng) {
1445 aurelien 343
	cacherMessageAucuneObs()
980 jpm 344
	var url = stationsUrl+
345
		'&zoom='+zoom+
346
		'&ne='+NELatLng+
347
		'&sw='+SWLatLng;
348
 
1032 aurelien 349
	if(infoBulleOuverte) {
350
		return;
351
	}
352
 
1035 aurelien 353
	if(requeteChargementPoints != null) {
354
		requeteChargementPoints.abort();
1037 aurelien 355
		cacherMessageChargementPoints();
1035 aurelien 356
	}
357
 
358
	afficherMessageChargementPoints();
359
	requeteChargementPoints = $.getJSON(url, function(data) {
360
		rafraichirMarqueurs(data);
361
		cacherMessageChargementPoints();
980 jpm 362
	});
363
}
364
 
1442 aurelien 365
function centrerDansLaPage(selecteur) {
366
	var largeurViewport = $(window).width();
367
	var hauteurViewport = $(window).height();
368
	selecteur.css('display','block');
369
	var left = (largeurViewport/2) - (selecteur.width())/2;
370
	var top = (hauteurViewport/2) - (selecteur.height())/2
371
	selecteur.css('left',left);
372
	selecteur.css('top',top);
373
}
374
 
1035 aurelien 375
function afficherMessageChargementPoints() {
1442 aurelien 376
	centrerDansLaPage($('#zone-chargement-point'));
1035 aurelien 377
	$('#zone-chargement-point').css('display','block');
378
}
379
 
380
function cacherMessageChargementPoints() {
381
	$('#zone-chargement-point').css('display','none');
382
}
383
 
1442 aurelien 384
function afficherMessageAucuneObs() {
385
	centrerDansLaPage($('#message-aucune-obs'));
1445 aurelien 386
	$('#message-aucune-obs').show();
1442 aurelien 387
}
388
 
1445 aurelien 389
function cacherMessageAucuneObs() {
390
	centrerDansLaPage($('#message-aucune-obs'));
391
	$('#message-aucune-obs').hide();
392
}
393
 
1107 aurelien 394
premierChargement = true;
1142 aurelien 395
function doitCentrerCarte() {
396
	return premierChargement && urlVars != null && urlVars.length > 0;
397
}
1107 aurelien 398
 
1035 aurelien 399
function rafraichirMarqueurs(data) {
1442 aurelien 400
	if(data.points.length > 0) {
401
		$.each(marqueurs, function(index, marqueur) {
402
			marqueur.setMap(null);
403
		});
404
		marqueurs = new Array();
405
 
406
		stations = data;
407
		afficherTitreCarteEtStats();
408
 
409
		$.each(stations.points, function (index, station) {
410
			if(station != null) {
411
				var nouveauMarqueur = creerMarqueur(station);
412
				marqueurs.push(nouveauMarqueur);
413
			}
414
		});
415
 
416
		if(doitCentrerCarte()) {
417
			premierChargement = false;
418
			var bounds = new google.maps.LatLngBounds();
419
			var latMax = new google.maps.LatLng(data.stats.coordmax.latMax, data.stats.coordmax.lngMax);
420
			var latMin = new google.maps.LatLng(data.stats.coordmax.latMin, data.stats.coordmax.lngMin);
421
			bounds.extend(latMax);
422
			bounds.extend(latMin);
423
			rendrePointsVisibles(bounds);
1035 aurelien 424
		}
1442 aurelien 425
	} else {
426
		afficherMessageAucuneObs();
1107 aurelien 427
	}
1035 aurelien 428
}
429
 
980 jpm 430
function creerMarqueur(station) {
1037 aurelien 431
	var titre = '';
432
	if(station.nbreMarqueur) {
433
		titre = station.nbreMarqueur+' points renseignés';
434
	} else {
435
		if(station.nom) {
436
			titre = station.nom;
437
		}
438
	}
1434 aurelien 439
 
980 jpm 440
	var icone = attribuerImageMarqueur(station['id'], station['nbreMarqueur']);
441
	var latLng = new google.maps.LatLng(station['lat'], station['lng']);
442
	var marqueur = new google.maps.Marker({
443
		position: latLng,
444
		icon: icone,
445
		title: ''+titre,
446
		map: map,
447
		stationInfos: station
448
	});
449
	attribuerListenerClick(marqueur, station['id']);
450
	marqueur.setMap(map);
451
    return marqueur;
452
}
453
 
1039 aurelien 454
function rendrePointsVisibles(bounds) {
455
	map.setCenter(bounds.getCenter());
456
	map.fitBounds(bounds);
457
}
458
 
980 jpm 459
function attribuerImageMarqueur(id, nbreMarqueur) {
460
	var marqueurImage = null;
461
	if (etreMarqueurCommune(id)) {
462
		marqueurImage = new google.maps.MarkerImage(communeImageUrl, new google.maps.Size(24, 32));
463
	} else if (etreMarqueurStation(id)) {
464
		marqueurImage = new google.maps.MarkerImage(pointImageUrl, new google.maps.Size(16, 16));
465
	} else if (etreMarqueurGroupe(id)) {
466
		var type = 0;
467
		var largeur = 0;
468
		var hauteur = 0;
469
		if (nbreMarqueur != null) {
470
			if (nbreMarqueur >= 2 && nbreMarqueur < 100 ) {
471
				type = '1';
472
				largeur = 53;
473
				hauteur = 52;
474
			} else if (nbreMarqueur >= 100 && nbreMarqueur < 1000 ) {
475
				type = '2';
476
				largeur = 56;
477
				hauteur = 55;
478
			} else if (nbreMarqueur >= 1000 && nbreMarqueur < 10000 ) {
479
				type = '3';
480
				largeur = 66;
481
				hauteur = 65;
482
			} else if (nbreMarqueur >= 10000 && nbreMarqueur < 20000 ) {
483
				type = '4';
484
				largeur = 78;
485
				hauteur = 77;
486
			} else if (nbreMarqueur >= 20000) {
487
				type = '5';
488
				largeur = 66;
489
				hauteur = 65;
490
			}
491
		}
492
		groupeImageUrl = groupeImageUrlTpl.replace(/\{type\}/, type);
493
		groupeImageUrl = groupeImageUrl.replace(/\{nbre\}/, nbreMarqueur);
494
		marqueurImage = new google.maps.MarkerImage(groupeImageUrl, new google.maps.Size(largeur, hauteur));
495
	}
496
	return marqueurImage
497
}
498
 
499
function attribuerListenerClick(marqueur, id) {
500
	if (etreMarqueurCommune(id) || etreMarqueurStation(id)) {
501
		google.maps.event.addListener(marqueur, 'click', surClickMarqueur);
502
	} else if (etreMarqueurGroupe(id)) {
503
		google.maps.event.addListener(marqueur, 'click', surClickGroupe);
504
	}
505
}
506
 
1445 aurelien 507
var pointCentreAvantAffichageInfoBulle = null;
1032 aurelien 508
function surClickMarqueur(event) {
1445 aurelien 509
	pointCentreAvantAffichageInfoBulle = map.getCenter();
510
 
1039 aurelien 511
	if(infoBulleOuverte) {
512
	    infoBulle.close();
513
	}
514
 
1035 aurelien 515
	pointClique = this;
980 jpm 516
	infoBulle.open(map, this);
517
	actualiserPagineur();
1035 aurelien 518
 
519
	var limites = map.getBounds();
520
	var centre = limites.getCenter();
521
	var nordEst = limites.getNorthEast();
522
	var centreSudLatLng = new google.maps.LatLng(nordEst.lat(), centre.lng());
523
	map.panTo(centreSudLatLng);
524
 
980 jpm 525
	afficherInfoBulle();
526
}
527
 
528
function surClickGroupe() {
529
	map.setCenter(this.getPosition());
530
	var nouveauZoom = map.getZoom() + 2;
531
	map.setZoom(nouveauZoom);
532
	mgr.clearMarkers();
533
}
534
 
535
function etreMarqueurGroupe(id) {
536
	var groupe = false;
537
	var motif = /^GROUPE/;
538
	if (motif.test(id)) {
539
		groupe = true;
540
	}
541
	return groupe;
542
}
543
 
544
function etreMarqueurCommune(id) {
545
	var commune = false;
546
	var motif = /^COMMUNE:/;
547
	if (motif.test(id)) {
548
		commune = true;
549
	}
550
	return commune;
551
}
552
 
553
function etreMarqueurStation(id) {
554
	var station = false;
555
	var motif = /^STATION:/;
556
	if (motif.test(id)) {
557
		station = true;
558
	}
559
	return station;
560
}
561
 
562
function deplacerCarteSurPointClique() {
915 jpm 563
	map.panTo(pointClique.position);
564
}
565
 
566
/*+--------------------------------------------------------------------------------------------------------+*/
567
// INFO BULLE
1032 aurelien 568
var infoBulleOuverte = false;
915 jpm 569
function initialiserInfoBulle() {
570
	google.maps.event.addListener(infoBulle, 'domready', initialiserContenuInfoBulle);
980 jpm 571
	google.maps.event.addListener(infoBulle, 'closeclick', surFermetureInfoBulle);
572
	google.maps.event.addListener(infoBulle, 'content_changed', definirLargeurInfoBulle);
915 jpm 573
}
574
 
980 jpm 575
function surFermetureInfoBulle() {
1032 aurelien 576
	infoBulleOuverte = false;
1445 aurelien 577
	map.panTo(pointCentreAvantAffichageInfoBulle);
1032 aurelien 578
	programmerRafraichissementCarte();
980 jpm 579
}
580
 
581
function centrerInfoBulle() {
582
	var limites = map.getBounds();
583
	var centre = limites.getCenter();
584
	var nordEst = limites.getNorthEast();
585
	var centreSudLatLng = new google.maps.LatLng(nordEst.lat(), centre.lng());
586
	map.panTo(centreSudLatLng);
587
}
588
 
915 jpm 589
function afficherInfoBulle() {
590
	var obsHtml = $("#tpl-obs").html();
980 jpm 591
	var largeur = definirLargeurInfoBulle();
1445 aurelien 592
	var taillePolice = definirTaillePoliceInfoBulle();
980 jpm 593
	obsHtml = obsHtml.replace(/\{largeur\}/, largeur);
915 jpm 594
	infoBulle.setContent(obsHtml);
1445 aurelien 595
	$('#observations').css('font-size',taillePolice+'em');
1035 aurelien 596
	chargerObs(0, 0);
1032 aurelien 597
	infoBulleOuverte = true;
915 jpm 598
}
599
 
980 jpm 600
function definirLargeurInfoBulle() {
601
	var largeurViewPort = $(window).width();
1445 aurelien 602
	var largeurInfoBulle = null;
603
	if (largeurViewPort < 400) {
604
		largeurInfoBulle = 300;
605
	} else if (largeurViewPort < 800) {
980 jpm 606
		largeurInfoBulle = 400;
607
	} else if (largeurViewPort >= 800 && largeurViewPort < 1200) {
608
		largeurInfoBulle = 500;
609
	} else if (largeurViewPort >= 1200) {
610
		largeurInfoBulle = 600;
611
	}
612
	return largeurInfoBulle;
613
}
614
 
1445 aurelien 615
function definirTaillePoliceInfoBulle() {
616
	var largeurViewPort = $(window).width();
617
	var taillePolice = null;
618
	if (largeurViewPort < 400) {
619
		taillePolice = 0.8;
620
	} else if (largeurViewPort < 800) {
621
		taillePolice = 1;
622
	}
623
	return taillePolice;
624
}
625
 
915 jpm 626
function afficherMessageChargement(element) {
627
	if ($('#chargement').get() == '') {
628
		$('#tpl-chargement').tmpl().appendTo(element);
629
	}
630
}
631
 
1035 aurelien 632
function afficherMessageChargementTitreInfoBulle() {
633
	$("#obs-station-titre").text("Chargement des observations");
634
}
635
 
915 jpm 636
function supprimerMessageChargement() {
637
	$('#chargement').remove();
638
}
639
 
640
function chargerObs(depart, total) {
939 jpm 641
	if (depart == 0 || depart < total) {
915 jpm 642
		var limite = 300;
643
		if (depart == 0) {
1036 aurelien 644
			viderTableauObs();
915 jpm 645
		}
1035 aurelien 646
 
939 jpm 647
		var urlObs = observationsUrl+'&start={start}&limit='+limite;
1166 aurelien 648
		urlObs = urlObs.replace(/\{stationId\}/g, encodeURIComponent(pointClique.stationInfos.id));
1044 aurelien 649
		if (pointClique.stationInfos.type_emplacement == 'communes') {
1342 aurelien 650
			urlObs = urlObs.replace(/commune=%2A/g, formaterParametreCommunePourRequete(pointClique.stationInfos.nom));
1042 aurelien 651
		}
939 jpm 652
		urlObs = urlObs.replace(/\{nt\}/g, nt);
915 jpm 653
		urlObs = urlObs.replace(/\{start\}/g, depart);
654
 
655
		$.getJSON(urlObs, function(observations){
1036 aurelien 656
			surRetourChargementObs(observations, depart, total);
1035 aurelien 657
			chargerObs(depart+limite, observations.total);
915 jpm 658
		});
1036 aurelien 659
	}
660
}
661
 
1342 aurelien 662
function formaterParametreCommunePourRequete(nomCommune) {
663
	var chaineRequete = "";
664
	if(nomCommune.indexOf("(", 0) !== false) {
665
		var infosCommune = nomCommune.split("(");
666
		var commune = infosCommune[0];
667
		chaineRequete = 'commune='+encodeURIComponent($.trim(commune));
668
	} else {
669
		chaineRequete = 'commune='+encodeURIComponent($.trim(nomCommune));
670
	}
671
	return chaineRequete;
672
}
673
 
1036 aurelien 674
function viderTableauObs() {
675
	obsStation = new Array();
676
	surClicPagePagination(0, null);
677
}
678
 
679
function surRetourChargementObs(observations, depart, total) {
680
	obsStation = obsStation.concat(observations.observations);
681
	if (depart == 0) {
682
		actualiserInfosStation(observations);
683
		creerTitreInfoBulle();
1041 aurelien 684
		surClicPagePagination(0, null);
915 jpm 685
	}
1036 aurelien 686
 
1039 aurelien 687
	afficherPagination();
1036 aurelien 688
	actualiserPagineur();
1041 aurelien 689
	selectionnerOnglet("#obs-vue-"+pagineur.format);
915 jpm 690
}
691
 
1035 aurelien 692
function actualiserInfosStation(infos) {
693
	pointClique.stationInfos.commune = infos.commune;
694
	pointClique.stationInfos.obsNbre = infos.total;
695
}
696
 
697
function creerTitreInfoBulle() {
698
	$("#obs-total").text(station.obsNbre);
699
	$("#obs-commune").text(station.commune);
700
	var titre = '';
701
	titre += pointClique.stationInfos.obsNbre+' observation';
702
	titre += (pointClique.stationInfos.obsNbre > 1) ? 's': '' ;
703
	titre += ' pour ';
704
	if (etreMarqueurCommune(pointClique.stationInfos.id)) {
705
		nomStation = 'la commune : ';
706
	} else {
707
		nomStation = 'la station : ';
708
	}
709
	titre += pointClique.stationInfos.nom;
710
	$("#obs-station-titre").text(titre);
711
}
712
 
939 jpm 713
function actualiserPagineur() {
980 jpm 714
	pagineur.stationId = pointClique.stationInfos.id;
1035 aurelien 715
	pagineur.total = pointClique.stationInfos.obsNbre;
1435 aurelien 716
	// Si on est en mode photo on reste en mode liste quelque soit le
717
	// nombre de résultats
1438 aurelien 718
	if (pagineur.total > 4 && photos != 1) {
939 jpm 719
		pagineur.format = 'tableau';
720
	} else {
721
		pagineur.format = 'liste';
722
	}
723
}
724
 
915 jpm 725
function afficherPagination(observations) {
726
	$(".navigation").pagination(pagineur.total, {
727
		items_per_page:pagineur.limite,
728
		callback:surClicPagePagination,
729
		next_text:'Suivant',
730
		prev_text:'Précédent',
731
		prev_show_always:false,
732
		num_edge_entries:1,
953 jpm 733
		num_display_entries:4,
915 jpm 734
		load_first_page:true
735
	});
736
}
737
 
738
function surClicPagePagination(pageIndex, paginationConteneur) {
739
	var index = pageIndex * pagineur.limite;
740
	var indexMax = index + pagineur.limite;
741
	pagineur.depart = index;
742
	obsPage = new Array();
743
    for(index; index < indexMax; index++) {
744
    	obsPage.push(obsStation[index]);
745
    }
746
 
747
    supprimerMessageChargement();
748
    mettreAJourObservations();
749
	return false;
750
}
751
 
752
function mettreAJourObservations() {
753
	$("#obs-"+pagineur.format+"-lignes").empty();
754
   	$("#obs-vue-"+pagineur.format).css('display', 'block');
755
   	$(".obs-conteneur").css('counter-reset', 'item '+pagineur.depart);
756
	$("#tpl-obs-"+pagineur.format).tmpl(obsPage).appendTo("#obs-"+pagineur.format+"-lignes");
757
 
758
	// Actualisation de Fancybox
1414 aurelien 759
	ajouterFormulaireContact("a.contact");
915 jpm 760
	if (pagineur.format == 'liste') {
836 jpm 761
		ajouterGaleriePhoto("a.cel-img");
762
	}
763
}
764
 
915 jpm 765
function initialiserContenuInfoBulle() {
980 jpm 766
	afficherMessageChargement('#observations');
767
	cacherContenuOnglets();
915 jpm 768
	afficherOnglets();
769
	ajouterTableauTriable("#obs-tableau");
770
	afficherTextStationId();
771
	corrigerLargeurInfoWindow();
772
}
773
 
980 jpm 774
function cacherContenuOnglets() {
775
	$("#obs-vue-tableau").css("display", "none");
776
	$("#obs-vue-liste").css("display", "none");
777
}
778
 
915 jpm 779
function afficherOnglets() {
780
	var $tabs = $('#obs').tabs();
781
	$('#obs').bind('tabsselect', function(event, ui) {
782
		if (ui.panel.id == 'obs-vue-tableau') {
783
			surClicAffichageTableau();
784
		} else if (ui.panel.id == 'obs-vue-liste') {
785
			surClicAffichageListe();
786
		}
787
	});
980 jpm 788
	if (pointClique.stationInfos.nbre > 4) {
789
		$tabs.tabs('select', "#obs-vue-tableau");
790
	} else {
791
		$tabs.tabs('select', "#obs-vue-liste");
792
	}
793
 
915 jpm 794
}
795
 
939 jpm 796
function selectionnerOnglet(onglet) {
980 jpm 797
	$(onglet).css('display', 'block');
939 jpm 798
	$('#obs').tabs('select', onglet);
799
}
800
 
915 jpm 801
function afficherTextStationId() {
980 jpm 802
	$('#obs-station-id').text(pointClique.stationInfos.id);
915 jpm 803
}
804
 
805
function corrigerLargeurInfoWindow() {
953 jpm 806
	$("#info-bulle").width($("#info-bulle").width() - 17);
915 jpm 807
}
808
 
809
function surClicAffichageTableau(event) {
810
	pagineur.format = 'tableau';
811
	mettreAJourObservations();
812
	mettreAJourTableauTriable("#obs-tableau");
813
}
814
 
815
function surClicAffichageListe(event) {
816
	pagineur.format = 'liste';
817
	mettreAJourObservations();
818
	ajouterGaleriePhoto("a.cel-img");
819
}
820
 
836 jpm 821
function ajouterTableauTriable(element) {
822
	// add parser through the tablesorter addParser method
823
	$.tablesorter.addParser({
824
		// Définition d'un id unique pour ce parsseur
825
		id: 'date_cel',
826
		is: function(s) {
915 jpm 827
			// doit retourner false si le parsseur n'est pas autodétecté
828
			return /^\s*\d{2}[\/-]\d{2}[\/-]\d{4}\s*$/.test(s);
836 jpm 829
		},
915 jpm 830
		format: function(date) {
836 jpm 831
			// Transformation date jj/mm/aaaa en aaaa/mm/jj
915 jpm 832
			date = date.replace(/^\s*(\d{2})[\/-](\d{2})[\/-](\d{4})\s*$/, "$3/$2/$1");
836 jpm 833
			// Remplace la date par un nombre de millisecondes pour trier numériquement
915 jpm 834
			return $.tablesorter.formatFloat(new Date(date).getTime());
836 jpm 835
		},
836
		// set type, either numeric or text
837
		type: 'numeric'
838
	});
839
	$(element).tablesorter({
840
        headers: {
915 jpm 841
			1: {
842
            	sorter:'date_cel'
843
        	}
844
    	}
845
	});
836 jpm 846
}
847
 
915 jpm 848
function mettreAJourTableauTriable(element) {
849
	$(element).trigger('update');
850
}
851
 
836 jpm 852
function ajouterGaleriePhoto(element) {
853
	$(element).fancybox({
915 jpm 854
		transitionIn:'elastic',
855
		transitionOut:'elastic',
856
		speedIn	:600,
857
		speedOut:200,
858
		overlayShow:true,
859
		titleShow:true,
860
		titlePosition:'inside',
861
		titleFormat:function (titre, currentArray, currentIndex, currentOpts) {
862
			var motif = /urn:lsid:tela-botanica[.]org:cel:img([0-9]+)$/;
863
			motif.exec(titre);
864
			var id = RegExp.$1;
865
			var info = $('#cel-info-'+id).clone().html();
866
			var tpl =
867
				'<div class="cel-legende">'+
868
				'<p class="cel-legende-vei">'+'Image n°' + (currentIndex + 1) + ' sur ' + currentArray.length +'<\/p>'+
869
				(titre && titre.length ? '<p>'+info+'<\/p>' : '' )+
870
				'<\/div>';
871
			return tpl;
836 jpm 872
		}
1032 aurelien 873
	}).live('click', function(e) {
874
		if (e.stopPropagation) {
875
			e.stopPropagation();
876
		}
877
		return false;
878
	});
836 jpm 879
}
880
 
1414 aurelien 881
function ajouterFormulaireContact(element) {
941 jpm 882
	$(element).fancybox({
883
		transitionIn:'elastic',
884
		transitionOut:'elastic',
885
		speedIn	:600,
886
		speedOut:200,
887
		scrolling: 'no',
888
		titleShow: false,
889
		onStart: function(selectedArray, selectedIndex, selectedOpts) {
890
			var element = selectedArray[selectedIndex];
891
 
892
			var motif = / contributeur-([0-9]+)$/;
893
			motif.exec($(element).attr('class'));
894
			var id = RegExp.$1;
950 jpm 895
			//console.log('Destinataire id : '+id);
941 jpm 896
			$("#fc_destinataire_id").attr('value', id);
897
 
898
			var motif = / obs-([0-9]+) /;
899
			motif.exec($(element).attr('class'));
900
			var id = RegExp.$1;
950 jpm 901
			//console.log('Obs id : '+id);
941 jpm 902
			chargerInfoObsPourMessage(id);
903
		},
904
		onCleanup: function() {
950 jpm 905
			//console.log('Avant fermeture fancybox');
941 jpm 906
			$("#fc_destinataire_id").attr('value', '');
907
			$("#fc_sujet").attr('value', '');
908
			$("#fc_message").text('');
909
		},
910
		onClosed: function(e) {
950 jpm 911
			//console.log('Fermeture fancybox');
941 jpm 912
			if (e.stopPropagation) {
913
				e.stopPropagation();
914
			}
915
			return false;
916
		}
917
	});
918
}
919
 
920
function chargerInfoObsPourMessage(idObs) {
980 jpm 921
	var nomSci = jQuery.trim($(".cel-obs-"+idObs+" .nom-sci:eq(0)").text());
922
	var date = jQuery.trim($(".cel-obs-"+idObs+" .date:eq(0)").text());
923
	var lieu = jQuery.trim($(".cel-obs-"+idObs+" .lieu:eq(0)").text());
953 jpm 924
	var sujet = "Observation #"+idObs+" de "+nomSci;
925
	var message = "\n\n\n\n\n\n\n\n--\nConcerne l'observation de \""+nomSci+'" du "'+date+'" au lieu "'+lieu+'".';
941 jpm 926
	$("#fc_sujet").attr('value', sujet);
927
	$("#fc_message").text(message);
928
}
929
 
930
function initialiserFormulaireContact() {
950 jpm 931
	//console.log('Initialisation du form contact');
941 jpm 932
	$("#form-contact").validate({
933
		rules: {
934
			fc_sujet : "required",
935
			fc_message : "required",
953 jpm 936
			fc_utilisateur_courriel : {
937
				required : true,
938
				email : true}
941 jpm 939
		}
940
	});
941
	$("#form-contact").bind("submit", envoyerCourriel);
950 jpm 942
	$("#fc_annuler").bind("click", function() {$.fancybox.close();});
941 jpm 943
 
944
}
945
 
946
function envoyerCourriel() {
950 jpm 947
	//console.log('Formulaire soumis');
941 jpm 948
	if ($("#form-contact").valid()) {
950 jpm 949
		//console.log('Formulaire valide');
941 jpm 950
		//$.fancybox.showActivity();
951
		var destinataireId = $("#fc_destinataire_id").attr('value');
952
		var urlMessage = "http://www.tela-botanica.org/service:annuaire:Utilisateur/"+destinataireId+"/message"
953
		var erreurMsg = "";
954
		var donnees = new Array();
955
		$.each($(this).serializeArray(), function (index, champ) {
956
			var cle = champ.name;
957
			cle = cle.replace(/^fc_/, '');
953 jpm 958
 
980 jpm 959
			if (cle == 'sujet') {
953 jpm 960
				champ.value += " - Carnet en ligne - Tela Botanica";
961
			}
962
			if (cle == 'message') {
963
				champ.value += "\n--\n"+
980 jpm 964
					"Ce message vous est envoyé par l'intermédiaire du widget carto "+
953 jpm 965
					"du Carnet en Ligne du réseau Tela Botanica.\n"+
966
					"http://www.tela-botanica.org/widget:cel:carto";
967
			}
968
 
941 jpm 969
			donnees[index] = {'name':cle,'value':champ.value};
970
		});
971
		$.ajax({
972
			type : "POST",
973
			cache : false,
974
			url : urlMessage,
975
			data : donnees,
976
			beforeSend : function() {
977
				$(".msg").remove();
978
			},
979
			success : function(data) {
980
				$("#fc-zone-dialogue").append('<pre class="msg info">'+data.message+'</pre>');
981
			},
982
			error : function(jqXHR, textStatus, errorThrown) {
983
				erreurMsg += "Erreur Ajax :\ntype : "+textStatus+' '+errorThrown+"\n";
984
				reponse = jQuery.parseJSON(jqXHR.responseText);
985
				if (reponse != null) {
986
					$.each(reponse, function (cle, valeur) {
987
						erreurMsg += valeur + "\n";
988
					});
989
				}
990
			},
991
			complete : function(jqXHR, textStatus) {
992
				var debugMsg = '';
993
				if (jqXHR.getResponseHeader("X-DebugJrest-Data") != '') {
994
					debugInfos = jQuery.parseJSON(jqXHR.getResponseHeader("X-DebugJrest-Data"));
995
					if (debugInfos != null) {
996
						$.each(debugInfos, function (cle, valeur) {
997
							debugMsg += valeur + "\n";
998
						});
999
					}
1000
				}
1001
				if (erreurMsg != '') {
1002
					$("#fc-zone-dialogue").append('<p class="msg">'+
1003
							'Une erreur est survenue lors de la transmission de votre message.'+'<br />'+
1004
							'Vous pouvez signaler le disfonctionnement à <a href="'+
1005
							'mailto:cel@tela-botanica.org'+'?'+
980 jpm 1006
							'subject=Disfonctionnement du widget carto'+
941 jpm 1007
							"&body="+erreurMsg+"\nDébogage :\n"+debugMsg+
1008
							'">cel@tela-botanica.org</a>.'+
1009
							'</p>');
1010
				}
1011
				if (DEBUG) {
1012
					console.log('Débogage : '+debugMsg);
1013
				}
950 jpm 1014
				//console.log('Débogage : '+debugMsg);
1015
				//console.log('Erreur : '+erreurMsg);
941 jpm 1016
			}
1017
		});
1018
	}
1019
	return false;
1020
}
915 jpm 1021
/*+--------------------------------------------------------------------------------------------------------+*/
1022
// PANNEAU LATÉRAL
836 jpm 1023
 
1438 aurelien 1024
function initialiserAffichagePanneauLateral() {
915 jpm 1025
	if (nt == '*') {
1026
		$('#pl-ouverture').bind('click', afficherPanneauLateral);
1027
		$('#pl-fermeture').bind('click', cacherPanneauLateral);
1430 aurelien 1028
	} else {
1029
		$('#panneau-lateral').width(0);
1030
		$('#carte').width('100%');
836 jpm 1031
	}
939 jpm 1032
	chargerTaxons(0, 0);
836 jpm 1033
}
1034
 
939 jpm 1035
function chargerTaxons(depart, total) {
1036
	if (depart == 0 || depart < total) {
1037
		var limite = 7000;
950 jpm 1038
		//console.log("Chargement des taxons de "+depart+" à "+(depart+limite));
939 jpm 1039
		var urlTax = taxonsUrl+'&start={start}&limit='+limite;
1040
		urlTax = urlTax.replace(/\{start\}/g, depart);
1041
		$.getJSON(urlTax, function(infos) {
1042
			taxonsCarte = taxonsCarte.concat(infos.taxons);
950 jpm 1043
			//console.log("Nbre taxons :"+taxonsCarte.length);
939 jpm 1044
			chargerTaxons(depart+limite, infos.total);
1045
		});
1046
	} else {
1047
		if (nt == '*') {
1048
			afficherTaxons();
1049
		}
1438 aurelien 1050
		afficherTitreCarteEtStats();
939 jpm 1051
	}
1052
}
1053
 
1054
function afficherTaxons() {
980 jpm 1055
	$(".plantes-nbre").text(taxonsCarte.length);
939 jpm 1056
	$("#tpl-taxons-liste").tmpl({'taxons':taxonsCarte}).appendTo("#pl-corps");
1057
	$('.taxon').live('click', filtrerParTaxon);
1445 aurelien 1058
	$('.raz-filtre-taxons').live('click', viderFiltreTaxon);
939 jpm 1059
}
1060
 
1445 aurelien 1061
var largeurPanneauLateralFerme = null;
915 jpm 1062
function afficherPanneauLateral() {
1445 aurelien 1063
	$('#panneau-lateral').height($(window).height() - $('#panneau-lateral').offset().top);
1064
	largeurPanneauLateralFerme = $('#panneau-lateral').width();
836 jpm 1065
	$('#panneau-lateral').width(300);
1066
	$('#pl-contenu').css('display', 'block');
1067
	$('#pl-ouverture').css('display', 'none');
1068
	$('#pl-fermeture').css('display', 'block');
1445 aurelien 1069
	// correction pour la taille de la liste des taxons
1070
	$('#pl-corps').height($(window).height() - $('#pl-corps').offset().top);
836 jpm 1071
 
1072
	google.maps.event.trigger(map, 'resize');
1073
};
1074
 
915 jpm 1075
function cacherPanneauLateral() {
1445 aurelien 1076
	$('#panneau-lateral').height("65px");
1077
	$('#panneau-lateral').width(largeurPanneauLateralFerme+"px");
836 jpm 1078
	$('#pl-contenu').css('display', 'none');
1079
	$('#pl-ouverture').css('display', 'block');
1080
	$('#pl-fermeture').css('display', 'none');
1081
 
1082
	google.maps.event.trigger(map, 'resize');
1083
};
1084
 
1445 aurelien 1085
function viderFiltreTaxon() {
1086
	$('.taxon-actif .taxon').click();
1087
}
1088
 
836 jpm 1089
function filtrerParTaxon() {
1090
	var ntAFiltrer = $('.nt', this).text();
1091
	infoBulle.close();
1037 aurelien 1092
	var zoom = map.getZoom();
1093
	var NELatLng = map.getBounds().getNorthEast().lat()+'|'+map.getBounds().getNorthEast().lng();
1094
	var SWLatLng = map.getBounds().getSouthWest().lat()+'|'+map.getBounds().getSouthWest().lng();
1095
 
836 jpm 1096
	$('#taxon-'+nt).removeClass('taxon-actif');
1097
	if (nt == ntAFiltrer) {
1098
		nt = '*';
1037 aurelien 1099
		stationsUrl = stationsUrl.replace(/num_taxon=[*0-9]+/, 'num_taxon='+nt);
1100
		chargerMarqueurs(zoom, NELatLng, SWLatLng);
836 jpm 1101
	} else {
1035 aurelien 1102
		stationsUrl = stationsUrl.replace(/num_taxon=[*0-9]+/, 'num_taxon='+ntAFiltrer);
1103
		url = stationsUrl;
1104
		url += '&zoom='+zoom+
1105
			'&ne='+NELatLng+
1106
			'&sw='+SWLatLng;
1107
		requeteChargementPoints = $.getJSON(url, function (stationsFiltrees) {
939 jpm 1108
			stations = stationsFiltrees;
836 jpm 1109
			nt = ntAFiltrer;
1110
			$('#taxon-'+nt).addClass('taxon-actif');
1035 aurelien 1111
			rafraichirMarqueurs(stations);
836 jpm 1112
		});
1113
	}
1114
};
1115
 
915 jpm 1116
/*+--------------------------------------------------------------------------------------------------------+*/
1117
// FONCTIONS UTILITAIRES
1118
 
980 jpm 1119
function ouvrirPopUp(element, nomPopUp, event) {
1120
	var options =
1121
		'width=650,'+
1122
		'height=600,'+
1123
		'scrollbars=yes,'+
1124
		'directories=no,'+
1125
		'location=no,'+
1126
		'menubar=no,'+
1127
		'status=no,'+
1128
		'toolbar=no';
1129
	var popUp = window.open(element.href, nomPopUp, options);
1130
	if (window.focus) {
1131
		popUp.focus();
1132
	}
1133
	return arreter(event);
1134
};
1135
 
1136
function ouvrirNouvelleFenetre(element, event) {
1137
	window.open(element.href);
1138
	return arreter(event);
1139
}
1140
 
915 jpm 1141
function arreter(event) {
1142
	if (event.stopPropagation) {
1143
		event.stopPropagation();
1144
	} else if (window.event) {
1145
		window.event.cancelBubble = true;
1146
	}
980 jpm 1147
	if (event.preventDefault) {
1148
		event.preventDefault();
1149
	}
1150
	event.returnValue = false;
915 jpm 1151
	return false;
1152
}
1153
 
836 jpm 1154
/**
1155
 * +-------------------------------------+
1156
 * Number.prototype.formaterNombre
1157
 * +-------------------------------------+
1158
 * Params (facultatifs):
1159
 * - Int decimales: nombre de decimales (exemple: 2)
1160
 * - String signe: le signe precedent les decimales (exemple: "," ou ".")
1161
 * - String separateurMilliers: comme son nom l'indique
1162
 * Returns:
1163
 * - String chaine formatee
1164
 * @author	::mastahbenus::
1165
 * @author	Jean-Pascal MILCENT <jpm@tela-botanica.org> : ajout détection auto entier/flotant
1166
 * @souce	http://www.javascriptfr.com/codes/FORMATER-NOMBRE-FACON-NUMBER-FORMAT-PHP_40060.aspx
1167
 */
1168
Number.prototype.formaterNombre = function (decimales, signe, separateurMilliers) {
1169
	var _sNombre = String(this), i, _sRetour = "", _sDecimales = "";
1170
 
1171
	function is_int(nbre) {
1172
		nbre = nbre.replace(',', '.');
1173
		return !(parseFloat(nbre)-parseInt(nbre) > 0);
1174
	}
1175
 
1176
	if (decimales == undefined) {
1177
		if (is_int(_sNombre)) {
1178
			decimales = 0;
1179
		} else {
1180
			decimales = 2;
1181
		}
1182
	}
1183
	if (signe == undefined) {
1184
		if (is_int(_sNombre)) {
1185
			signe = '';
1186
		} else {
1187
			signe = '.';
1188
		}
1189
	}
1190
	if (separateurMilliers == undefined) {
1191
		separateurMilliers = ' ';
1192
	}
1193
 
1194
	function separeMilliers (sNombre) {
1195
		var sRetour = "";
1196
		while (sNombre.length % 3 != 0) {
1197
			sNombre = "0"+sNombre;
1198
		}
1199
		for (i = 0; i < sNombre.length; i += 3) {
1200
			if (i == sNombre.length-1) separateurMilliers = '';
1201
			sRetour += sNombre.substr(i, 3) + separateurMilliers;
1202
		}
1203
		while (sRetour.substr(0, 1) == "0") {
1204
			sRetour = sRetour.substr(1);
1205
		}
1206
		return sRetour.substr(0, sRetour.lastIndexOf(separateurMilliers));
1207
	}
1208
 
1209
	if (_sNombre.indexOf('.') == -1) {
1210
		for (i = 0; i < decimales; i++) {
1211
			_sDecimales += "0";
1212
		}
1213
		_sRetour = separeMilliers(_sNombre) + signe + _sDecimales;
1214
	} else {
1215
		var sDecimalesTmp = (_sNombre.substr(_sNombre.indexOf('.')+1));
1216
		if (sDecimalesTmp.length > decimales) {
1217
			var nDecimalesManquantes = sDecimalesTmp.length - decimales;
1218
			var nDiv = 1;
1219
			for (i = 0; i < nDecimalesManquantes; i++) {
1220
				nDiv *= 10;
1221
			}
1222
			_sDecimales = Math.round(Number(sDecimalesTmp) / nDiv);
1223
		}
1224
		_sRetour = separeMilliers(_sNombre.substr(0, _sNombre.indexOf('.')))+String(signe)+_sDecimales;
1225
	}
1226
	return _sRetour;
915 jpm 1227
}
1228
 
1229
function debug(objet) {
1230
	var msg = '';
1231
	if (objet != null) {
1232
		$.each(objet, function (cle, valeur) {
1233
			msg += cle+":"+valeur + "\n";
1234
		});
1235
	} else {
1236
		msg = "La variable vaut null.";
1237
	}
1238
	console.log(msg);
836 jpm 1239
}