	function fct_openPopup_aideCarto(type) {
		popup_aideCarto = Window('aideCarto', '/carto_popup_aide.php?window_name=aideCarto&window_height=550&type='+type, '770', '550', true);
		openModal('aideCarto');
	}
	
	function fct_openPopup_choisirVilles() {
		popup_choisirVilles = Window('choisirVilles', '/carto_popup_choisirVilles.php?window_name=choisirVilles&window_height=550', '746', '550', true);
		openModal('choisirVilles');
	}
	
	function fct_openPopup_ville_cp(type) {
		Window('ville_cp', '/carto_popup_villeCP.php?window_name=ville_cp&window_height=620&type='+type, '746', '620', true);
		openModal('ville_cp');
	}
	
	function get_nbBPs() {
		var obj_BPs = document.getElementById('BPs');
		var nbBPs = 0;
		if ( obj_BPs.value.length > 0 ) {
			var tab_BPs	= obj_BPs.value.split(';');
			nbBPs = tab_BPs.length;
		}
		return nbBPs;
	}
	
	function showExecutionTimes(dates, dates_msg, title) {
		obj_txt_result = document.getElementById('txt_result');
		
		if ( obj_txt_result.style.display != 'none' ) {
			var message = '\n';
			message += title + ' :\n';
			for ( var timeInterval = 1; timeInterval < dates.length; timeInterval++ ) {
				message += dates_msg[timeInterval] + ' : ' + (dates[timeInterval] - dates[timeInterval - 1]) + ' ms\n';
			}
			message += '///' + title + '\n';
			
			obj_txt_result.value += message;
		}
	}
	
	function selectionGeo_addBureaux(tab_bureaux) {
		var obj_BPs		= document.getElementById('BPs');
		var tab_obj_BPs = new Array();
		if ( obj_BPs.value.length != 0 ) {
			tab_obj_BPs = obj_BPs.value.split(';');
		}
		
		for ( var i = 0; i < tab_bureaux.length; i++ ) {
			var bureau = tab_bureaux[i];
			
			var BP_insee	= bureau.insee;
			var BP_cp		= bureau.cp;
			var BP_nom		= bureau.nom;
			
			BP = BP_insee + ',' + BP_cp + ',' + BP_nom;
			if ( BP.length != 0 && tab_obj_BPs.in_array(BP) == -1 ) {
				tab_obj_BPs.push(BP);
			}
			
			// N'ajouter le bureau de poste que s'il n'existe pas déjà
			if ( cfg_useQuartier ) {
				var quartiers	= bureau.quartiers;
				for ( var j = 0; j < quartiers.length; j++ ) {
					var quartier_id			= quartiers[j].id;
					var quartier_nom		= quartiers[j].nom;
					var quartier_selected	= quartiers[j].selected;
					if ( quartier_selected == 1 ) selectionGeo_addQuartier(BP_insee + ',' + BP_cp + ',' + BP_nom + ',' + quartier_id);
				}
			}
		}
		obj_BPs.value = tab_obj_BPs.join(';');
		if ( !firstLoad ) {
			try {
				if ( fct_onModif != undefined ) eval(fct_onModif);
			} catch(err) {}
		}
	}
	
	function selectionGeo_addBureau(bureau) {
		var BP_insee	= bureau.insee;
		var BP_cp		= bureau.cp;
		var BP_nom		= bureau.nom;
		
		selectionGeo_addBP(BP_insee + ',' + BP_cp + ',' + BP_nom);
		
		if ( cfg_useQuartier ) {
			var quartiers	= bureau.quartiers;
			for ( var j = 0; j < quartiers.length; j++ ) {
				var quartier_id			= quartiers[j].id;
				var quartier_nom		= quartiers[j].nom;
				var quartier_selected	= quartiers[j].selected;
				if ( quartier_selected == 1 ) selectionGeo_addQuartier(BP_insee + ',' + BP_cp + ',' + BP_nom + ',' + quartier_id);
			}
		}
	}
	
	function selectionGeo_addBP(BP) {
		if ( BP.length == 0 ) return;
		
		var obj_BPs		= document.getElementById('BPs');
		if ( obj_BPs.value.length == 0 ) {
			obj_BPs.value = BP;
			return;
		}
		
		// N'ajouter le bureau de poste que s'il n'existe pas déjà
		var tab_obj_BPs = obj_BPs.value.split(';');
		
		if ( tab_obj_BPs.in_array(BP) == -1 ) {
			obj_BPs.value += ';' + BP;
			if ( !firstLoad ) {
				try {
					if ( fct_onModif != undefined ) eval(fct_onModif);
				} catch(err) {}
			}
		}
	}
	
	function selectionGeo_delBureau(BP) {
		if ( BP.length == 0 ) return;
		
		var obj_BPs		= document.getElementById('BPs');
		
		// N'ajouter le code insee que s'il n'existe pas déjà
		var tab_obj_BPs = obj_BPs.value.split(';');
		
		var indice = tab_obj_BPs.in_array(BP);
		if ( indice == -1 ) return;
		
		tab_obj_BPs.splice(indice,1);
		
		// Effacer les quartiers du bureau
		selectionGeo_delQuartiersOfBureau(BP);
		
		obj_BPs.value = tab_obj_BPs.join(';');
		if ( !firstLoad ) {
			try {
				if ( fct_onModif != undefined ) eval(fct_onModif);
			} catch(err) {}
		}
	}
	
	function selectionGeo_addQuartier(quartier) {
		if ( quartier.length == 0 ) return;
		
		var obj_quartiers		= document.getElementById('quartiers');
		
		if ( obj_quartiers.value.length == 0 ) {
			obj_quartiers.value = quartier;
			return;
		}
		
		// N'ajouter le bureau de poste que s'il n'existe pas déjà
		var tab_obj_quartiers = obj_quartiers.value.split(';');
		
		if ( tab_obj_quartiers.in_array(quartier) == -1 ) {
			obj_quartiers.value += ';' + quartier;
			if ( !firstLoad ) {
				try {
					if ( fct_onModif != undefined ) eval(fct_onModif);
				} catch(err) {}
			}
		}
	}
	
	function selectionGeo_delQuartiersOfBureau(BP) {
		if ( BP.length == 0 ) return;
		
		var obj_quartiers		= document.getElementById('quartiers');
		var tab_obj_quartiers = obj_quartiers.value.split(';');
		for ( var i = tab_obj_quartiers.length - 1; i >= 0; i-- ) {
			if ( tab_obj_quartiers[i].indexOf(BP) == 0 ) {
				tab_obj_quartiers.splice(i, 1);
			}
		}
		
		obj_quartiers.value = tab_obj_quartiers.join(';');
		
		if ( !firstLoad ) {
			try {
				if ( fct_onModif != undefined ) eval(fct_onModif);
			} catch(err) {}
		}
	}
	
	function selectionGeo_delQuartier(quartier) {
		if ( quartier.length == 0 ) return;
		
		var obj_quartiers		= document.getElementById('quartiers');
		
		// N'ajouter le code insee que s'il n'existe pas déjà
		var tab_obj_quartiers = obj_quartiers.value.split(';');
		
		var indice = tab_obj_quartiers.in_array(quartier);
		if ( indice == -1 ) return;
		
		tab_obj_quartiers.splice(indice,1);
		
		obj_quartiers.value = tab_obj_quartiers.join(';');
		if ( !firstLoad ) {
			try {
				if ( fct_onModif != undefined ) eval(fct_onModif);
			} catch(err) {}
		}
	}
	
	function selectionGeo_reset() {
		var obj_BPs			= document.getElementById('BPs');
		var obj_quartiers	= document.getElementById('quartiers');
		
		if ( obj_BPs != undefined )			obj_BPs.value		= "";
		if ( obj_quartiers != undefined )	obj_quartiers.value	= "";
		if ( !firstLoad ) {
			try {
				if ( fct_onModif != undefined ) eval(fct_onModif);
			} catch(err) {}
		}
	}
	
	function selectionGeo_secteurs_reset() {
		var obj_secteurs	= document.getElementById('secteurs');
		
		if ( obj_secteurs != undefined )	obj_secteurs.value	= "";
		if ( !firstLoad ) {
			try {
				if ( fct_onModif != undefined ) eval(fct_onModif);
			} catch(err) {}
		}
	}
	
	function selectionGeo_addSecteur(secteur_id) {
		if ( secteur_id.length == 0 ) return;
		
		var obj_secteurs		= document.getElementById('secteurs');
		if ( obj_secteurs.value.length == 0 ) {
			obj_secteurs.value = secteur_id;
			return;
		}
		
		// N'ajouter le bureau de poste que s'il n'existe pas déjà
		var tab_obj_secteurs = obj_secteurs.value.split(';');
		
		if ( tab_obj_secteurs.in_array(secteur_id) == -1 ) {
			obj_secteurs.value += ';' + secteur_id;
			if ( !firstLoad ) {
				try {
					if ( fct_onModif != undefined ) eval(fct_onModif);
				} catch(err) {}
			}
		}
	}
	
	function selectionGeo_delSecteur(secteur_id) {
		if ( secteur_id.length == 0 ) return;
		
		var obj_secteurs		= document.getElementById('secteurs');
		
		// N'ajouter le code insee que s'il n'existe pas déjà
		var tab_obj_secteurs = obj_secteurs.value.split(';');
		
		var indice = tab_obj_secteurs.in_array(secteur_id);
		if ( indice == -1 ) return;
		
		tab_obj_secteurs.splice(indice,1);
		
		obj_secteurs.value = tab_obj_secteurs.join(';');
		if ( !firstLoad ) {
			try {
				if ( fct_onModif != undefined ) eval(fct_onModif);
			} catch(err) {}
		}
	}

	var ajouterVillesCPs_handleLightBtn_timeOut = undefined;
	function HandleKeyAddVilleCPs(e) {
		var obj_liste_ville_cp = document.getElementById('liste_ville_cp');
		if ( obj_liste_ville_cp.value == form_villeCP_exemple ) obj_liste_ville_cp.value = '';
		if (!e) e = window.event;
		
		var code;
		if (e.keyCode) code = e.keyCode;
		else if (e.which) code = e.which;
		
		if (code == 13) {
			moteurGeo_addCPsAndVilles();
			return true;
		}
		
		if (code == 44) { // Interdire plus de 25 villes d'un coup //  virgule
			// Compter le nombre de virgule dans le champ ville
			var obj = document.getElementById('liste_ville_cp');
			var obj_value;
			if ( obj.value == form_villeCP_exemple ) {
				obj_value = '';
			} else {
				obj_value = trim(obj.value);
			}
			
			var tab	= obj_value.split(',');
			var CPs			= "";
			var villes		= "";
			var nbVilles	= 0;
			var nbCPsDeps	= 0;
			for ( var i = 0; i < tab.length; i++ ) {
				var valeur = trim(tab[i]);
				var longeur = valeur.length;
				if ( (( longeur == 5 ) && ( !isNaN(valeur) )) || (( longeur == 2 ) && ( !isNaN(valeur) )) ){
					nbCPsDeps++;
					CPs += valeur;
					if ( i+1 < tab.length )
						CPs += ",";
				}else{
					nbVilles++;
					villes += valeur;
					if ( i+1 < tab.length )
						villes += ",";
				}
			}
			if ( (nbVilles + 1 <= limite_villes) && (nbCPsDeps + 1 <= (limite_deps + limite_CPs)) ) {
				return true;
			} else {
				var message = '';
				if ( nbCPsDeps <= (limite_deps + limite_CPs) ) {
					message += erreur_carto_limite_nbCPsEtDeps + '\n';
				}
				if ( nbVilles <= limite_villes ) {
					message += erreur_carto_limite_nbVilles + '\n';
				}
				alert(message);
				return false;
			}
		}
	}

	function reset_onClick() {
		if ( document.getElementById('selectionsGeographiques_secteurs') == undefined || document.getElementById('selectionsGeographiques').style.visibility == 'visible' ) {
			moteurGeographique_reset();
		}
		if ( document.getElementById('selectionsGeographiques_secteurs') != undefined && document.getElementById('selectionsGeographiques_secteurs').style.visibility == 'visible' ) {
			moteurGeographique_secteurs_reset();
		}
	}

	function listing_openCloseBureau(BP_insee, BP_cp, BP_nom) {
		var obj_div_quartiers = document.getElementById('listing_quartiers_' + BP_insee + ',' + BP_cp + ',' + BP_nom);
		if ( obj_div_quartiers.style.display == 'block' ) {
			obj_div_quartiers.style.display = 'none';
		} else {
			obj_div_quartiers.style.display = 'block';
		}
	}
	
	function listing_countSelectedQuartiers(BP_insee, BP_cp, BP_nom) {
		// Déterminer si la commune est partiellement sélectionnée ou complètement
		var obj_quartiers	= document.getElementById('listing_quartiers_' + BP_insee + ',' + BP_cp + ',' + BP_nom);

		var tab_quartiers_input	= obj_quartiers.getElementsByTagName('input');
		var nb_quartiers = 0;
		for ( var i = 0; i < tab_quartiers_input.length; i++ ) {
			if ( tab_quartiers_input[i].type == "checkbox" && tab_quartiers_input[i].checked ) {
				nb_quartiers++;
			}
		}
		
		return nb_quartiers;
	}
	
	function listing_refreshState(BP_insee, BP_cp, BP_nom) {
		// Déterminer si la commune est partiellement sélectionnée ou complètement
		var obj_quartiers	= document.getElementById('listing_bpCode_' + BP_insee + ',' + BP_cp + ',' + BP_nom);
		var tab_quartiers_input	= obj_quartiers.getElementsByTagName('input');
		
		var bureau_allQuartiersSelected		= true;
		var bureau_allQuartiersNotSelected	= true;
		for ( var i = 1; i < tab_quartiers_input.length; i++ ) {
			if ( tab_quartiers_input[i].type == "checkbox" && !tab_quartiers_input[i].checked ) {
				bureau_allQuartiersSelected		= false;
			}
			if ( tab_quartiers_input[i].type == "checkbox" && tab_quartiers_input[i].checked ) {
				bureau_allQuartiersNotSelected	= false;
			}
		}
		
		// Changer l'état
		var obj_bureau_nom	= document.getElementById('listing_bp_nom_' + BP_insee + ',' + BP_cp + ',' + BP_nom);
		var obj_bureau_img;
		if ( cfg_useQuartier ) {
			obj_bureau_img	= document.getElementById('listing_bp_img_' + BP_insee + ',' + BP_cp + ',' + BP_nom);
		}
		if ( bureau_allQuartiersNotSelected ) { // Complet
			obj_bureau_nom.className	= 'r_m_Commune_complete';
			
			if ( cfg_useQuartier ) {
				obj_bureau_img.src		= 'http://www.les-maisons-de-france.com/images/carto/dossier-contenant.gif';
			}
		} else { // Partiel
			obj_bureau_nom.className	= 'r_m_Commune_partielle';
		
			if ( cfg_useQuartier ) {
				obj_bureau_img.src		= 'http://www.les-maisons-de-france.com/images/carto/dossier-contenant-partiel.gif';
			}
		}
	}
	
	function listing_addBureaux(tab_bureaux, refreshRowClasses) {
var dates		= new Array();
var dates_msg	= new Array();
dates.push( new Date().getTime() );
dates_msg.push('');
		if ( refreshRowClasses == undefined ) refreshRowClasses = true;
		
		if ( tab_bureaux.length == 0 ) return;
		
		var obj_listing = document.getElementById("selectionsGeographiques");
		var tmp_tab_obj_bureaux	= obj_listing.childNodes;
		if ( document.getElementById("selectionsGeographiques").innerHTML.indexOf(SelectionnezZoneGeo) != -1 ) { // Listing vide
			tmp_tab_obj_bureaux	= new Array();
		} else {
			tmp_tab_obj_bureaux	= obj_listing.childNodes;
		}
dates.push( new Date().getTime() );
dates_msg.push('Récupération des objets du listing');
		
		var tab_obj_bureaux = tmp_tab_obj_bureaux;
/** DESACTIVE, censé éviter les div qui ne sont pas des villes /
		var tab_obj_bureaux = new Array();
		for ( var i = 0; i < tmp_tab_obj_bureaux.length; i++ ) {
			if ( tmp_tab_obj_bureaux[i].innerHTML ) {
				tab_obj_bureaux.push(tmp_tab_obj_bureaux[i]);
			} else {
			}
		}
//alert( tmp_tab_obj_bureaux.length + ' -> ' + tab_obj_bureaux.length );
dates.push( new Date().getTime() );
dates_msg.push('Tri des objets du listing');
/**/
		
		var indice_obj_bureaux	= 0;
		var obj_listing_new_HTML = '';
		var tab_bureaux_reloaded = new Array();
		
		for ( var i = 0; i < tab_bureaux.length; i++ ) {
			var bureau = tab_bureaux[i];
			
			var BP_insee	= bureau.insee;
			var BP_cp		= bureau.cp;
			var BP_nom		= bureau.nom;
			var quartiers	= bureau.quartiers;
			
			tab_bureaux_reloaded.push(BP_insee + ',' + BP_cp + ',' + BP_nom);
			
			// Si la commune n'existe pas ALORS l'ajouter
			if ( !document.getElementById('listing_bpCode_' + BP_insee + ',' + BP_cp + ',' + BP_nom) ) {
				// Le bureau
				var img_src;
				if ( cfg_useQuartier ) {
					if ( 0 < quartiers.length ) {
						img_src		= 'http://www.les-maisons-de-france.com/images/carto/dossier-contenant.gif';
					} else {
						img_src		= 'http://www.les-maisons-de-france.com/images/carto/dossier-complet.gif';
					}
				}
				
				var txt_bureau = '';
				txt_bureau += '<DIV id="listing_bpCode_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '" class="r_m_Liste_1" nom="' + (BP_cp.split('|')).join(',') + ' ' + sup_french_char(BP_nom) + '" cp="' + BP_cp + '">\n';
				
				txt_bureau += '<table width="100%" id="listing_bp_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '" border="0" cellpadding="0" cellspacing="0" style="height: 24px;">\n';
				txt_bureau += '	<colgroup>\n';
				if ( cfg_useQuartier ) {
					txt_bureau += '		<col width="25">\n';
					txt_bureau += '		<col>\n';
				} else {
					txt_bureau += '		<col width="6">\n';
					txt_bureau += '		<col>\n';
				}
				if ( cfg_useBPDelete ) {
					txt_bureau += '		<col width="20">\n';
				}
				txt_bureau += '	</colgroup>\n';
				txt_bureau += '	<tr>\n';
				if ( cfg_useQuartier ) {
					txt_bureau += '		<td align="center" style="cursor:pointer;"' + (quartiers.length?'onClick="listing_openCloseBureau(\'' + BP_insee + '\',\'' + BP_cp + '\',\'' + BP_nom + '\');"':'') + '>\n';
					txt_bureau += '			<img id="listing_bp_img_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '" src="' + img_src + '" style="width: 19px; height: 19px;"><br>\n';
					txt_bureau += '		</td>\n';
				} else {
					txt_bureau += '		<td></td>\n';
				}
				txt_bureau += '		<td id="listing_bp_nom_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '" class="r_m_Commune_complete"' + (cfg_useQuartier?' style="cursor:pointer;"':'') + (quartiers.length?' onClick="listing_openCloseBureau(\'' + BP_insee + '\',\'' + BP_cp + '\',\'' + BP_nom + '\');"':'') + '>\n';
				txt_bureau += ( BP_cp.split('|') ).join(',')  + ' ' + BP_nom + '<br>\n';
				txt_bureau += '		</td>\n';
				if ( cfg_useBPDelete ) {
					txt_bureau += '		<td align="center">\n';
					txt_bureau += '			<img src="http://www.les-maisons-de-france.com/images/carto/trash.gif" width="11" height="13" style="cursor: pointer;" onClick="javascript:moteurGeographique_delBureau(\'' + BP_insee + '\',\'' + BP_cp + '\',\'' + BP_nom + '\'); stopPropagation(event);"><br>\n';
					txt_bureau += '		</td>\n';
				}
				txt_bureau += '	</tr>\n';
				txt_bureau += '</table>\n';
				
				// Quartiers du bureau de poste
				txt_bureau += '<div id="listing_quartiers_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '" style="display: none;">\n';
				if ( 0 < quartiers.length ) {
					txt_bureau += '<table id="listing_quartiers_tab_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '_all" border="0" cellpadding="0" cellspacing="0" class="r_m_BP_sel" style="height: 18px;">\n';
					txt_bureau += '	<colgroup>\n';
					if ( cfg_useQuartier ) {
						txt_bureau += '		<col width="20">\n';
					} else {
						txt_bureau += '		<col width="5">\n';
					}
					txt_bureau += '		<col width="20">\n';
					txt_bureau += '		<col width="200">\n';
					txt_bureau += '	</colgroup>\n';
					txt_bureau += '	<tr>\n';
					txt_bureau += '		<td></td>\n';
					txt_bureau += '		<td>\n';
					txt_bureau += '			<input type="checkbox" id="listing_quartiers_chk_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '_all" class="inputCheckbox" style="cursor: pointer;" CHECKED onClick="if ( this.checked ) moteurGeographique_unselectAllQuartiers(\'' + BP_insee + '\', \'' + BP_cp + '\', \'' + BP_nom + '\'); else return false;"><br>\n';
					txt_bureau += '		</td>\n';
					txt_bureau += '		<td>\n';
					txt_bureau += '			<label for="listing_quartiers_chk_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '_all">Toute la ville<br></label>\n';
					txt_bureau += '		</td>\n';
					txt_bureau += '	</tr>\n';
					txt_bureau += '</table>\n';
				}
				for ( var j = 0; j < quartiers.length; j++ ) {
					var quartier_id			= quartiers[j].id;
					var quartier_nom		= quartiers[j].nom;
					var quartier_selected	= quartiers[j].selected;
					
					if ( firstLoad ) {
						var tab_quartiers = ( document.getElementById('quartiers').value ).split(';');
						var tab_BP_cp = BP_cp.split('|');
						if ( tab_BP_cp.length == 1 ) tab_BP_cp = BP_cp;
						if ( tab_quartiers.in_array(BP_insee + ',' + tab_BP_cp[0] + ',' + BP_nom + ',' + quartier_id) != -1 ) {
							quartier_selected = true;
							
							var tab_txt_bureau = txt_bureau.split('			<input type="checkbox" id="listing_quartiers_chk_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '_all" class="inputCheckbox" style="cursor: pointer;" CHECKED onClick="if ( this.checked ) moteurGeographique_unselectAllQuartiers(\'' + BP_insee + '\', \'' + BP_cp + '\', \'' + BP_nom + '\'); else return false;"><br>\n');
							txt_bureau = tab_txt_bureau.join('			<input type="checkbox" id="listing_quartiers_chk_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '_all" class="inputCheckbox" style="cursor: pointer;" onClick="if ( this.checked ) moteurGeographique_unselectAllQuartiers(\'' + BP_insee + '\', \'' + BP_cp + '\', \'' + BP_nom + '\'); else return false;"><br>\n');
							var tab_txt_bureau = txt_bureau.split('<table id="listing_quartiers_tab_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '_all" border="0" cellpadding="0" cellspacing="0" class="r_m_BP_sel" style="height: 18px;">\n');
							txt_bureau = tab_txt_bureau.join('<table id="listing_quartiers_tab_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '_all" border="0" cellpadding="0" cellspacing="0" class="r_m_BP" style="height: 18px;">\n');
							var tab_txt_bureau = txt_bureau.split('			<img id="listing_bp_img_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '" src="' + img_src + '" style="width: 19px; height: 19px;"><br>\n');
							txt_bureau = tab_txt_bureau.join('			<img id="listing_bp_img_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '" src="http://www.les-maisons-de-france.com/images/carto/dossier-contenant-partiel.gif" style="width: 19px; height: 19px;"><br>\n');
							var tab_txt_bureau = txt_bureau.split('		<td id="listing_bp_nom_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '" class="r_m_Commune_complete"' + (cfg_useQuartier?' style="cursor:pointer;"':'') + (quartiers.length?' onClick="listing_openCloseBureau(\'' + BP_insee + '\',\'' + BP_cp + '\',\'' + BP_nom + '\');"':'') + '>\n');
							txt_bureau = tab_txt_bureau.join('		<td id="listing_bp_nom_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '" class="r_m_Commune_partielle"' + (cfg_useQuartier?' style="cursor:pointer;"':'') + (quartiers.length?' onClick="listing_openCloseBureau(\'' + BP_insee + '\',\'' + BP_cp + '\',\'' + BP_nom + '\');"':'') + '>\n');
						}
					}
					
					txt_bureau += '<table id="listing_quartiers_tab_' + BP_insee + ',' + BP_cp + ',' + BP_nom + ',' + quartier_id + '" border="0" cellpadding="0" cellspacing="0" class="' + (quartier_selected == 1 ? ' r_m_BP_sel':' r_m_BP') + '" style="height: 18px;">\n';
					txt_bureau += '	<colgroup>\n';
					if ( cfg_useQuartier ) {
						txt_bureau += '		<col width="20">\n';
					} else {
						txt_bureau += '		<col width="5">\n';
					}
					txt_bureau += '		<col width="20">\n';
					txt_bureau += '		<col width="200">\n';
					txt_bureau += '	</colgroup>\n';
					txt_bureau += '	<tr>\n';
					txt_bureau += '		<td></td>\n';
					txt_bureau += '		<td>\n';
					txt_bureau += '			<input type="checkbox" id="listing_quartiers_chk_' + BP_insee + ',' + BP_cp + ',' + BP_nom + ',' + quartier_id + '" class="inputCheckbox" style="cursor: pointer;"' + (quartier_selected == 1 ? ' CHECKED':'') + ' onClick="moteurGeographique_selectQuartier(\'' + BP_insee + '\', \'' + BP_cp + '\', \'' + BP_nom + '\', \'' + quartier_id + '\');"><br>\n';
					txt_bureau += '		</td>\n';
					txt_bureau += '		<td>\n';
					txt_bureau += '			<label for="listing_quartiers_chk_' + BP_insee + ',' + BP_cp + ',' + BP_nom + ',' + quartier_id + '">' + quartier_nom + '<br></label>\n';
					txt_bureau += '		</td>\n';
					txt_bureau += '	</tr>\n';
					txt_bureau += '</table>\n';
				}
				txt_bureau += '</div>\n';
				
				txt_bureau += '</DIV>';
				
				// Placer le bureau (ordre alphabétique)
				if ( document.getElementById("selectionsGeographiques").innerHTML.indexOf(SelectionnezZoneGeo) != -1 && obj_listing_new_HTML.length == 0 ) { // Listing vide
					obj_listing_new_HTML += txt_bureau;
				} else { // Listing non vide, trouver l'endroit où insérer le bureau
					// Copier les bureaux déjà chargés qui vont avant le nouveau bureau en cours
					while ( indice_obj_bureaux < tab_obj_bureaux.length && tab_obj_bureaux[indice_obj_bureaux].getAttribute('nom') < (BP_cp + ' ' + BP_nom) ) {
						obj_listing_new_HTML += '<DIV id="' + tab_obj_bureaux[indice_obj_bureaux].getAttribute('id') + '" class="' + tab_obj_bureaux[indice_obj_bureaux].getAttribute('class') + '" style="display: ' + tab_obj_bureaux[indice_obj_bureaux].style.display + '" nom="' + tab_obj_bureaux[indice_obj_bureaux].getAttribute('nom') + '" cp="' + tab_obj_bureaux[indice_obj_bureaux].getAttribute('cp') + '">';
						obj_listing_new_HTML += tab_obj_bureaux[indice_obj_bureaux].innerHTML;
						obj_listing_new_HTML += '</DIV>\n';
						indice_obj_bureaux++;
					}
					
					// Copier le bureau en cours
					obj_listing_new_HTML += txt_bureau;
				}
			}
		}
dates.push( new Date().getTime() );
dates_msg.push('Ajout des objets reçus');
		
		// Copier les derniers bureaux qui vont après le tout dernier bureau reçu
		while ( indice_obj_bureaux < tab_obj_bureaux.length ) {
			obj_listing_new_HTML += '<DIV id="' + tab_obj_bureaux[indice_obj_bureaux].getAttribute('id') + '" class="' + tab_obj_bureaux[indice_obj_bureaux].getAttribute('class') + '" style="display: ' + tab_obj_bureaux[indice_obj_bureaux].style.display + '" nom="' + tab_obj_bureaux[indice_obj_bureaux].getAttribute('nom') + '" cp="' + tab_obj_bureaux[indice_obj_bureaux].getAttribute('cp') + '">';
			obj_listing_new_HTML += tab_obj_bureaux[indice_obj_bureaux].innerHTML;
			obj_listing_new_HTML += '</DIV>\n';
			indice_obj_bureaux++;
		}
dates.push( new Date().getTime() );
dates_msg.push('Copie des derniers bureaux du listing');
		
		// Rafraîchir les classes alternées des différents bureaux
		if (refreshRowClasses && !firstLoad) listing_refreshRowClasses();
dates.push( new Date().getTime() );
dates_msg.push('Rafraichissement des classes des lignes du listing');
		
		// Rafraichir l'état de toutes les villes
		if ( cfg_useQuartier ) {
			// Sauvegarder l'ancienne sélection des quartiers
			var tab_quartiers = ( document.getElementById('quartiers').value ).split(';');
//alert('document.getElementById(quartiers).value = ' + document.getElementById('quartiers').value);
			document.getElementById('quartiers').value = '';
			
			// Forcer la sélection de "toute la ville" de toutes les villes
			var tab_bureaux = ( document.getElementById('BPs').value ).split(';');
			for (var i = 0; i < tab_bureaux.length; i++ ) {
				var bureau = tab_bureaux[i].split(',');
				
				var BP_insee	= bureau[0];
				var BP_cp		= bureau[1];
				var BP_nom		= bureau[2];
				if ( document.getElementById('listing_quartiers_chk_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '_all') != undefined ) {
					document.getElementById('listing_quartiers_chk_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '_all').checked = true;
					moteurGeographique_unselectAllQuartiers(BP_insee, BP_cp, BP_nom);
				}
			}
			
			// Resélectionner les quartiers dont les villes n'ont pas été rechargées
			for ( var j = 0; j < tab_quartiers.length; j++ ) {
				if ( tab_quartiers[j].length != 0 ) {
					var quartier = tab_quartiers[j].split(',');
					var BP_insee		= quartier[0];
					var BP_cp			= quartier[1];
					var BP_nom			= quartier[2];
					var quartier_id		= quartier[3];
					
					if ( firstLoad || tab_bureaux_reloaded.in_array(BP_insee + ',' + BP_cp + ',' + BP_nom) == -1 ) {
						var obj_chk_quartier = document.getElementById('listing_quartiers_chk_' + BP_insee + ',' + BP_cp + ',' + BP_nom + ',' + quartier_id);
//alert('listing_quartiers_chk_' + BP_insee + ',' + BP_cp + ',' + BP_nom + ',' + quartier_id + ' - ' + obj_chk_quartier);
						obj_chk_quartier.checked = true;
						moteurGeographique_selectQuartier(BP_insee, BP_cp, BP_nom, quartier_id);
					}
				}
			}
		}
dates.push( new Date().getTime() );
dates_msg.push('Rafraichissement de l\'état des quartiers');

if ( !firstLoad ) {
showExecutionTimes(dates, dates_msg, 'listing_refreshState')
}
	}
	
	function listing_delBureau(BP_insee, BP_cp, BP_nom) {
//alert('listing_delBureau - ' + BP_insee + ', ' + BP_cp + ', ' + BP_nom);
		var obj_bureau = document.getElementById('listing_bpCode_' + BP_insee + ',' + BP_cp + ',' + BP_nom);
		obj_bureau.parentNode.removeChild(obj_bureau);
		
		var obj_listing = document.getElementById("selectionsGeographiques");
		var tab_obj_bureau = obj_listing.childNodes;
		if ( tab_obj_bureau.length == 0 ) {
			obj_listing.innerHTML = '&nbsp;' + SelectionnezZoneGeo;
		}
		
		// Rafraîchir les classes alternées des différentes communes
		listing_refreshRowClasses();
	}
	
	function listing_refreshRowClasses() { // Rafraîchit l'alternance des classes des lignes
		var obj_listing = document.getElementById("selectionsGeographiques");
		
		var tab_obj_bureaux	= obj_listing.childNodes;
		var num_bureaux		= 0;
		for ( var i = 0; i < tab_obj_bureaux.length; i++ ) {
			if ( tab_obj_bureaux[i].innerHTML ) {
				var className = 'r_m_Liste_' + ( (num_bureaux % 2) + 1 );
				tab_obj_bureaux[i].className = className;
				num_bureaux++;
			}
		}
	}
	
	function listing_reset() {
		TAB_reset();
		var obj_listing = document.getElementById('selectionsGeographiques');
		obj_listing.innerHTML = '&nbsp;' + SelectionnezZoneGeo;
	}
	
	function listing_secteurs_addSecteur(secteur_id, secteur_nom, secteur_couleur) {
		if ( secteur_id.length == 0 || secteur_nom.length == 0 ) return;
		
		var obj_listing_secteurs = document.getElementById("selectionsGeographiques_secteurs");
		var tmp_tab_obj_secteurs	= new Array();
		if ( document.getElementById("selectionsGeographiques_secteurs").innerHTML.indexOf(SelectionnezZoneGeo_secteurs) != -1 ) { // Listing vide
			tmp_tab_obj_secteurs	= new Array();
		} else {
			tmp_tab_obj_secteurs	= obj_listing_secteurs.childNodes;
		}
		
		var tab_obj_secteurs = new Array();
		for ( var i = 0; i < tmp_tab_obj_secteurs.length; i++ ) {
			var message = tmp_tab_obj_secteurs[i] + '\n';
			if ( tmp_tab_obj_secteurs[i].innerHTML ) {
				tab_obj_secteurs.push(tmp_tab_obj_secteurs[i]);
				message += 'On garde\n';
			} else {
				message += 'On garde PAS\n';
			}
		}
		
		var indice_obj_secteurs	= 0;
		var obj_listing_secteurs_new_HTML = '';
		
		// Si le secteur existe déjà ALORS ne rien faire
		if ( document.getElementById('listing_secteurs_secteurId_' + secteur_id) ) {
			return;
		} else { // SINON le créer
			// Le secteur
			var txt_secteur = '';
			txt_secteur += '<DIV id="listing_secteurs_secteurId_' + secteur_id + '" class="r_m_Liste_1" nom="' + sup_french_char(secteur_nom) + '" couleur="' + secteur_couleur + '">\n';
			
			txt_secteur += '<table width="100%" id="listing_secteurs_secteur_' + secteur_id + '" border="0" cellpadding="0" cellspacing="0" style="height: 24px;">\n';
			txt_secteur += '	<colgroup>\n';
			txt_secteur += '		<col width="6">\n';
			txt_secteur += '		<col>\n';
			txt_secteur += '		<col width="20">\n';
			txt_secteur += '	</colgroup>\n';
			txt_secteur += '	<tr>\n';
			txt_secteur += '		<td></td>\n';
			txt_secteur += '		<td id="listing_secteurs_secteur_nom_' + secteur_id + '" class="r_m_Commune_complete">\n';
			txt_secteur += secteur_nom + '<br>\n';
			txt_secteur += '		</td>\n';
			txt_secteur += '		<td align="center">\n';
			txt_secteur += '			<img src="http://www.les-maisons-de-france.com/images/carto/trash.gif" width="11" height="13" style="cursor: pointer;" onClick="javascript:moteurGeographique_delSecteur(\'' + secteur_id + '\',\' true\'); stopPropagation(event);"><br>\n';
			txt_secteur += '		</td>\n';
			txt_secteur += '	</tr>\n';
			txt_secteur += '</table>\n';
			
			txt_secteur += '</DIV>';
			
			// Placer le secteur (ordre alphabétique)
			if ( document.getElementById("selectionsGeographiques_secteurs").innerHTML.indexOf(SelectionnezZoneGeo_secteurs) != -1 && obj_listing_secteurs_new_HTML.length == 0 ) { // Listing vide
				obj_listing_secteurs_new_HTML += txt_secteur;
			} else { // Listing non vide, trouver l'endroit où insérer le secteur
var message = i + ' :\n';
message += 'indice_obj_secteurs de démarrage : ' + indice_obj_secteurs + '\n';
message += 'tab_obj_secteurs.length : ' + tab_obj_secteurs.length + '\n';
if ( false && !confirm(message) ) {
return;
}
				// Copier les secteurs déjà chargés qui vont avant le nouveau secteur en cours
				while ( indice_obj_secteurs < tab_obj_secteurs.length && tab_obj_secteurs[indice_obj_secteurs].getAttribute('nom') < secteur_nom ) {
					obj_listing_secteurs_new_HTML += '<DIV id="' + tab_obj_secteurs[indice_obj_secteurs].getAttribute('id') + '" class="' + tab_obj_secteurs[indice_obj_secteurs].getAttribute('class') + '" style="display: ' + tab_obj_secteurs[indice_obj_secteurs].style.display + '" nom="' + tab_obj_secteurs[indice_obj_secteurs].getAttribute('nom') + '" couleur="' + tab_obj_secteurs[indice_obj_secteurs].getAttribute('couleur') + '">';
					obj_listing_secteurs_new_HTML += tab_obj_secteurs[indice_obj_secteurs].innerHTML;
					obj_listing_secteurs_new_HTML += '</DIV>\n';
message += tab_obj_secteurs[indice_obj_secteurs].getAttribute('nom') + ' < ' + secteur_nom + ' -> ' + (tab_obj_secteurs[indice_obj_secteurs].getAttribute('nom') < secteur_nom) + '\n';
message += '-> déplacement indice_obj_secteurs : ' + indice_obj_secteurs + '\n';
message += 'tab_obj_secteurs[indice_obj_secteurs] : ' + tab_obj_secteurs[indice_obj_secteurs] + '\n';
					indice_obj_secteurs++;
				}
				
				// Copier le bureau en cours
				obj_listing_secteurs_new_HTML += txt_secteur;
message += 'PLACEMENT du secteur\n';
if ( false && !confirm(message) ) {
return;
}
			}
		}
		
		// Copier les derniers bureaux qui vont après le tout dernier bureau reçu
message = '';
		while ( indice_obj_secteurs < tab_obj_secteurs.length ) {
			obj_listing_secteurs_new_HTML += '<DIV id="' + tab_obj_secteurs[indice_obj_secteurs].getAttribute('id') + '" class="' + tab_obj_secteurs[indice_obj_secteurs].getAttribute('class') + '" style="display: ' + tab_obj_secteurs[indice_obj_secteurs].style.display + '" nom="' + tab_obj_secteurs[indice_obj_secteurs].getAttribute('nom') + '" couleur="' + tab_obj_secteurs[indice_obj_secteurs].getAttribute('couleur') + '">';
			obj_listing_secteurs_new_HTML += tab_obj_secteurs[indice_obj_secteurs].innerHTML;
			obj_listing_secteurs_new_HTML += '</DIV>\n';
message = '-> déplacement indice_obj_secteurs : ' + indice_obj_secteurs + '\n';
			indice_obj_secteurs++;
if ( false && message.length != 0 && !confirm(message) ) {
return;
}
		}
		
		document.getElementById("selectionsGeographiques_secteurs").innerHTML = '';
		document.getElementById("selectionsGeographiques_secteurs").innerHTML = obj_listing_secteurs_new_HTML;
			
		// Rafraîchir les classes alternées des différents secteurs
		listing_secteurs_refreshRowClasses();
	}
	
	function listing_secteurs_delSecteur(secteur_id) {
//alert('listing_bpCode_' + BP_insee + ',' + BP_cp + ',' + BP_nom);
		var obj_secteur = document.getElementById('listing_secteurs_secteurId_' + secteur_id);
		obj_secteur.parentNode.removeChild(obj_secteur);
		
		var obj_listing_secteurs = document.getElementById("selectionsGeographiques_secteurs");
		var tab_obj_secteurs = obj_listing_secteurs.childNodes;
		if ( tab_obj_secteurs.length == 0 ) {
			obj_listing_secteurs.innerHTML = '&nbsp;' + SelectionnezZoneGeo_secteurs;
		}
			
		// Rafraîchir les classes alternées des différents secteurs
		listing_secteurs_refreshRowClasses();
	}
	
	function listing_secteurs_refreshRowClasses() { // Rafraîchit l'alternance des classes des lignes
		var obj_listing_secteurs = document.getElementById("selectionsGeographiques_secteurs");
		
		// Vérifier si le listing est vide
		if ( obj_listing_secteurs.innerHTML.indexOf(SelectionnezZoneGeo_secteurs) != -1 ) return;
		
		var tab_obj_secteurs	= obj_listing_secteurs.childNodes;
		var num_secteurs		= 0;
		for ( var i = 0; i < tab_obj_secteurs.length; i++ ) {
			if ( tab_obj_secteurs[i].innerHTML ) {
				var className = 'r_m_Liste_' + ( (num_secteurs % 2) + 1 );
				tab_obj_secteurs[i].className = className;
				num_secteurs++;
			}
		}
	}
	
	function listing_secteurs_reset() {
		var obj_listing_secteurs = document.getElementById('selectionsGeographiques_secteurs');
		obj_listing_secteurs.innerHTML = '&nbsp;' + SelectionnezZoneGeo_secteurs;
	}

			var propositions, rejetes;
		
		function checkAjaxError(res_xml) {
			//on recupere les erreurs eventuels
			var erreur = getFirstNodeValue(res_xml, "erreur");
			if (erreur.length) {
				openInfoPopup(erreur,"","",1);
				return true;
			}
			return false;
		}
		
		function popup_treatXML() {
			var res_xml_share = XML_communes;
			
			// PROPOSITIONS
			propositions	= res_xml_share.getElementsByTagName("propositions");
			rejetes			= res_xml_share.getElementsByTagName("rejetes");
			
			var tab_propositions	= new Array();
			var tab_rejetes_villes	= new Array();
			var tab_rejetes_cps		= new Array();
			if ( propositions[0] ) {
				tab_propositions	= propositions[0].getElementsByTagName("proposition");
			}
			if ( rejetes[0] ) {
				tab_rejetes_villes	= rejetes[0].getElementsByTagName("ville");
				tab_rejetes_cps		= rejetes[0].getElementsByTagName("cp");
			}
			
			if ( tab_propositions.length || tab_rejetes_villes.length || tab_rejetes_cps.length ) {
				var txt_formulaire = '<div align="left" style="height: 431px; padding: 0; overflow-y: auto;"><div style="padding-top: 20px;">';
				
				// VILLES REJETEES
				if ( tab_rejetes_villes.length > 0 ) {
					// BLOC DE VILLES REJETEES
						// Section
						txt_formulaire += '<table cellpadding="0" callspacing="0" border="0" style="margin: 0 0 15px 16px;"><tr><td><img src="http://www.les-maisons-de-france.com/images/popups/picto-alerte.gif" alt="" /></td><td class="carto_titre3" style="padding-left: 5px;">' + erreur_carto_donnees_invalide + '</td></tr></table>\n';
						
						// Contenu : la liste des bureaux de poste retenus
						var villes	= tab_rejetes_villes;
						var nb_colonnes		= 3;
						var nb_affiches		= 0;
						var nb_a_afficher	= villes.length;
						var nb_par_colonnes	= parseInt(nb_a_afficher / nb_colonnes);
						
						if ( nb_par_colonnes * nb_colonnes < nb_a_afficher ) nb_par_colonnes++;
						
						txt_formulaire += '<table width="100%" cellspacing="0" cellspacing="0" border="0" class="carto_titre4">\n';
						txt_formulaire += '	<colgroup>\n';
						txt_formulaire += '		<col width="' + (100 / nb_colonnes) + '%">\n';
						txt_formulaire += '	</colgroup>\n';
						txt_formulaire += '	<tr>\n';
						txt_formulaire += '		<td valign="top">\n';
						txt_formulaire += '			<table cellspacing="0" cellspacing="0" border="0" class="form_text">\n';
						for ( var j = 0; j < nb_a_afficher; j++ ) {
							var ville_nom		= villes[j].getAttribute('nom');
							
							txt_formulaire += '				<tr>\n';
							//      LAISSÉ AU CAS OU PUCE
							txt_formulaire += '					<td>\n';
							txt_formulaire += '					</td>\n';
							//    / LAISSÉ AU CAS OU PUCE
							txt_formulaire += '					<td class="carto_titre4" style="padding: 8px 8px 8px 31px; width: 210px;">\n';
							txt_formulaire += '						' + ville_nom + '<br>\n';
							txt_formulaire += '					</td>\n';
							txt_formulaire += '				</tr>\n';
							
							nb_affiches++;
							
							if ( nb_affiches == nb_a_afficher ) {
								txt_formulaire += '			</table ' + nb_affiches + ' == ' + nb_a_afficher + '>\n';
								txt_formulaire += '		</td>\n';
							} else if ( nb_affiches != 0 && nb_affiches % nb_par_colonnes == 0 ) {
								txt_formulaire += '			</table>\n';
								txt_formulaire += '		</td>\n';
								if ( nb_affiches != nb_a_afficher ) {
									txt_formulaire += '		<td valign="top" style="width: 210px;">\n';
									txt_formulaire += '			<table cellspacing="0" cellspacing="0" border="0" class="form_text">\n';
								}
							}
						}
						
						txt_formulaire += '	</tr>\n';
						txt_formulaire += '</table>\n';
						
						if ( tab_rejetes_cps.length > 0 || tab_propositions.length > 0 ) txt_formulaire += '<div style="height: 20px; overflow-y: auto;"></div>';
				}
				
				
				// CPS REJETES
				if ( tab_rejetes_cps.length > 0 ) {
					// BLOC DE CPS REJETES
						// Section
						txt_formulaire += '<table style="margin: 0 0 15px 16px;"><tr><td><img src="http://www.les-maisons-de-france.com/images/popups/picto-alerte.gif" alt="" /></td><td class="carto_titre3" style="padding-left: 5px;">' + erreur_carto_donnees_invalide + '</td></tr></table>\n';
						
						// Contenu : la liste des bureaux de poste retenus
						var cps	= tab_rejetes_cps;
						var nb_colonnes		= 3;
						var nb_affiches		= 0;
						var nb_a_afficher	= cps.length;
						var nb_par_colonnes	= parseInt(nb_a_afficher / nb_colonnes);
						
						if ( nb_par_colonnes * nb_colonnes < nb_a_afficher ) nb_par_colonnes++;
						
						txt_formulaire += '<table width="100%" cellspacing="0" cellspacing="0" border="0" class="carto_titre4">\n';
						txt_formulaire += '	<colgroup>\n';
						txt_formulaire += '		<col width="' + (100 / nb_colonnes) + '%">\n';
						txt_formulaire += '	</colgroup>\n';
						txt_formulaire += '	<tr>\n';
						txt_formulaire += '		<td valign="top">\n';
						txt_formulaire += '			<table cellspacing="0" cellspacing="0" border="0" class="form_text">\n';
						for ( var j = 0; j < nb_a_afficher; j++ ) {
							var ville_nom		= cps[j].getAttribute('codepostal');
							
							txt_formulaire += '				<tr>\n';
							//      LAISSÉ AU CAS OU PUCE
							txt_formulaire += '					<td>\n';
							txt_formulaire += '					</td>\n';
							//    / LAISSÉ AU CAS OU PUCE
							txt_formulaire += '					<td class="carto_titre4" style="padding: 8px 8px 8px 31px; width: 210px;">\n';
							txt_formulaire += '						' + ville_nom + '<br>\n';
							txt_formulaire += '					</td>\n';
							txt_formulaire += '				</tr>\n';
							
							nb_affiches++;
							
							if ( nb_affiches == nb_a_afficher ) {
								txt_formulaire += '			</table ' + nb_affiches + ' == ' + nb_a_afficher + '>\n';
								txt_formulaire += '		</td>\n';
							} else if ( nb_affiches != 0 && nb_affiches % nb_par_colonnes == 0 ) {
								txt_formulaire += '			</table>\n';
								txt_formulaire += '		</td>\n';
								if ( nb_affiches != nb_a_afficher ) {
									txt_formulaire += '		<td valign="top" style="width: 210px;">\n';
									txt_formulaire += '			<table cellspacing="0" cellspacing="0" border="0" class="form_text">\n';
								}
							}
						}
						
						txt_formulaire += '	</tr>\n';
						txt_formulaire += '</table>\n';
						
						if ( tab_propositions.length > 0 ) txt_formulaire += '<div style="height: 20px; overflow-y: auto;"></div>';
				}
				
				
				// PROPOSITIONS
				for (var i = 0; i < tab_propositions.length; i++ ) {
					// BLOC DE PROPOSITION
					
					
						// Contenu : la liste des bureaux de poste retenus
						var bureaux	= tab_propositions[i].getElementsByTagName("bp");
						var nb_colonnes		= 3;
						var nb_affiches		= 0;
						var nb_a_afficher	= bureaux.length;
						var nb_par_colonnes	= parseInt(nb_a_afficher / nb_colonnes);
						
						txt_formulaire += '<table cellpadding="0" cellspacing="0" border="0" width="100%"><tr><td style="padding-right: 5px;">';
						txt_formulaire += '<div  etat="1" class="cadre_g-out cadre_g_popupChoix-out" style="width: 100%; height: 100%;"><div class="h"><div class="d"><div class="b"><div class="g"><div class="coin1"><div class="coin2"><div class="coin3"><div class="coin4"><div class="contenu">';
						
						if ( i != tab_propositions.length - 1 ) {
							txt_formulaire += '<table width="100%" border="0" cellspacing="0" cellpadding="0" class="form_section">\n';
						} else {
							txt_formulaire += '<table width="100%" border="0" cellspacing="0" cellpadding="0" class="form_section" style="margin: 0 0 15px 0;">\n';
						}
						txt_formulaire += '	<tr>\n';
						txt_formulaire += '		<td class="titre_cadre">\n';
						
						txt_tmp = erreur_carto_donnees_plusieursPossibilitePourVille;
						txt_tmp = ( txt_tmp.split('{1}') ).join('<b>' + tab_propositions[i].getAttribute('nom') + '</b>');
						txt_formulaire += '			' + txt_tmp + ' :<br>\n';
						txt_formulaire += '		</td>\n';
						txt_formulaire += '	</tr>\n';
						txt_formulaire += '	<tr>\n';
						txt_formulaire += '		<td class="form_contenu">\n';
						
						if ( nb_par_colonnes * nb_colonnes < nb_a_afficher ) nb_par_colonnes++;
						txt_formulaire += '<table width="100%" border="0" cellspacing="0" cellpadding="0" class="form_text">\n';
						txt_formulaire += '	<tr>\n';
						txt_formulaire += '		<td valign="top" style="padding: 8px;">\n';
						txt_formulaire += '			<table style="border-collapse: collapse;" class="form_text">\n';
						for ( var j = 0; j < nb_a_afficher; j++ ) {
							var BP_insee	= bureaux[j].getAttribute('insee');
							var BP_cp		= bureaux[j].getAttribute('cp');
							var BP_nom		= bureaux[j].getAttribute('nom');
							
							txt_formulaire += '				<tr>\n';
							txt_formulaire += '					<td>\n';
							txt_formulaire += '						<input type="checkbox" id="bp_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '" name="BPs[]" value="' + BP_insee + ',' + BP_cp + ',' + BP_nom + '" class="inputCheckbox" style="cursor: pointer;">\n';
							txt_formulaire += '					</td>\n';
							txt_formulaire += '					<td style="width: 210px; padding-left: 8px;">\n';
							txt_formulaire += '						<label for="bp_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '">' + BP_cp + ' - ' + BP_nom + '<br></label>\n';
							txt_formulaire += '					</td>\n';
							txt_formulaire += '				</tr>\n';
							
							nb_affiches++;
							
							if ( nb_affiches == nb_a_afficher ) {
								txt_formulaire += '			</table>\n';
								txt_formulaire += '		</td>\n';
							} else if ( nb_affiches != 0 && nb_affiches % nb_par_colonnes == 0 ) {
								txt_formulaire += '			</table>\n';
								txt_formulaire += '		</td>\n';
								if ( nb_affiches != nb_a_afficher ) {
									txt_formulaire += '		<td valign="top" style="padding: 8px;">\n';
									txt_formulaire += '			<table cellspacing="0" cellspacing="0" border="0" class="form_text">\n';
								}
							}
						}
						txt_formulaire += '	</tr>\n';
						txt_formulaire += '</table>\n';
						
						txt_formulaire += '		</td>\n';
						txt_formulaire += '	</tr>\n';
						txt_formulaire += '</table>\n';
						
						txt_formulaire += '</div></div></div></div></div></div></div></div></div></div>';
						txt_formulaire += '</td></tr></table>';
						
						if ( i + 1 != tab_propositions.length ) txt_formulaire += '<div style="height: 15px; overflow-y: auto;"></div>';
						
				}
				
				txt_formulaire += '</div></div>';
				
				var frame;
				for ( i = 0; i < window.frames.length; i++ ) {
					if ( window.frames[i].name == 'choisirVilles' ) {
						frame = window.frames[i];
						i = window.frames.length;
					}
				}
				
				frame.document.getElementById('div_formulaire').innerHTML = txt_formulaire;
			}
		}
		
		function treatXML(res_xml_share) {
			if (!res_xml_share) {
				openInfoPopup(err_chargement,"","",1);
				return;
			}
			res_xml_share = res_xml_share.getElementsByTagName("root")[0];
			
			// On quitte si erreurs eventuelles
			if (checkAjaxError(res_xml_share)) {
				XML_communes = '';
				return;
			}
			
			XML_communes = res_xml_share;
			
			// NOUVEAUX BUREAUX
			var bureaux = res_xml_share.getElementsByTagName("bps");
			if ( bureaux[0] ) {
				var tab_insees = new Array();
				var bureaux = bureaux[0].getElementsByTagName("bp");
				var bureaux_futurTotal = get_nbBPs();
				
				var tab_bureaux = new Array();
				for (var i = 0; i < bureaux.length; i++ ) {
					var BP_insee	= bureaux[i].getAttribute('insee');
					var BP_cp		= bureaux[i].getAttribute('cp');
					var BP_nom		= bureaux[i].getAttribute('nom');
					
					// Garder le code insee pour la carto
					if ( tab_insees.in_array(BP_insee) == -1 ) tab_insees.push(BP_insee);
					
					// Fabriquer l'objet bureau
					var bureau = new Array();
					bureau.insee	= BP_insee;
					bureau.cp		= BP_cp;
					bureau.nom		= BP_nom;
					
					// Lui ajouter ses quartiers
					var quartiers	= bureaux[i].getElementsByTagName("quartier");
					bureau.quartiers	= new Array;
					for ( var j = 0; j < quartiers.length; j++ ) {
						var indice = bureau.quartiers.length;
						bureau.quartiers[indice] = new Array();
						bureau.quartiers[indice].id			= quartiers[j].getAttribute('id');
						bureau.quartiers[indice].nom		= quartiers[j].getAttribute('nom');
						bureau.quartiers[indice].selected	= quartiers[j].getAttribute('selected');
					}
					
					tab_bureaux.push(bureau); // TRES IMPORTANT, ON CONSIDERE LES BUREAUX BIEN CLASSES DANS L'ORDRE ALPHABETIQUE
					
					// SI le bureau n'existe pas ALORS le compter comme supplémentaire
					if ( !document.getElementById('listing_bpCode_' + BP_insee + ',' + BP_cp + ',' + BP_nom) ) {
						bureaux_futurTotal++;
					}
				}
				
				// SI la demande fait dépasser le nombre de villes maximum ALORS invalider la demande
				if ( bureaux_futurTotal > limite_BPS ) {
					// Demander à la carte de désélectionner les insees demandées
					txt_tmp = erreur_carto_donnees_demandeTropImportante;
					txt_tmp = ( txt_tmp.split('{1}') ).join(bureaux_futurTotal);
					openInfoPopup(txt_tmp,"","",1);
					return;
				} else {
					moteurGeographique_addBPs(tab_bureaux, true, false);
					
					if ( !firstLoad ) carto_selectInsees(tab_insees.join(';'));
				}
			}
			
			// PROPOSITIONS, VILLES et CPS REJETEES
			propositions	= res_xml_share.getElementsByTagName("propositions");
			rejetes			= res_xml_share.getElementsByTagName("rejetes");
			var tab_propositions	= new Array();
			var tab_rejetes_villes	= new Array();
			var tab_rejetes_cps		= new Array();
			if ( propositions[0] ) {
				tab_propositions	= propositions[0].getElementsByTagName("proposition");
			}
			if ( rejetes[0] ) {
				tab_rejetes_villes	= rejetes[0].getElementsByTagName("ville");
				tab_rejetes_cps		= rejetes[0].getElementsByTagName("cp");
			}
			if ( tab_propositions.length || tab_rejetes_villes.length || tab_rejetes_cps.length ) {
				valider_autorisationSansPopup = true;
				fct_openPopup_choisirVilles();
			} else {
				valider_autorisationPopup = true;
			}
			valider_autorisationSansPopup = true;
		}
		
		function castSetTimeout_onValiderFormCarto() {
			valider_autorisationPopup = true;
			if ( validerFormCarto != undefined ) setTimeout("validerFormCarto()", 10);
		}
		
		function get_bureauxByCPsAndVilles(CPs, villes) {
			if ( CPs.length == 0 && villes.length == 0 ) return;
			
			var url_ajax = '/carto_AJAX.php?date='+ new Date().getTime() +'&cmd=get_bureauxByCPsAndVilles&CPs='+ CPs + '&villes='+ villes + '&showQuartiers=0';
// window.open(url_ajax);
// return;
			var res_xml_share = AjaxXMLRequest(url_ajax);
			treatXML(res_xml_share);
		}
		
		function get_bureauxByVilles(villes) {
			if ( villes.length == 0 ) return;
			
			var url_ajax = '/carto_AJAX.php?date='+ new Date().getTime() +'&cmd=get_bureauxByVilles&villes='+ villes + '&showQuartiers=0';
//window.open(url_ajax);
//return;
			var res_xml_share = AjaxXMLRequest(url_ajax);
			treatXML(res_xml_share);
		}
		
		function get_bureauxByCPs(CPs) {
			if ( CPs.length == 0 ) return;
			
			var url_ajax = '/carto_AJAX.php?date='+ new Date().getTime() +'&cmd=get_bureauxByCPs&CPs='+ CPs + '&showQuartiers=0';
//window.open(url_ajax);
//return;
var dates		= new Array();
var dates_msg	= new Array();
dates.push( new Date().getTime() );
dates_msg.push('');
			var res_xml_share = AjaxXMLRequest(url_ajax);
dates.push( new Date().getTime() );
dates_msg.push('Chargement du XML');
			treatXML(res_xml_share);
dates.push( new Date().getTime() );
dates_msg.push('Traitement du XML');

showExecutionTimes(dates, dates_msg, 'get_bureauxByCPs')
		}
		
		function get_bureauxByCPs_strict(CPs) {
			if ( CPs.length == 0 ) return;
			
			var url_ajax = '/carto_AJAX.php?date='+ new Date().getTime() +'&cmd=get_bureauxByCPs_strict&CPs='+ CPs + '&showQuartiers=0';
//window.open(url_ajax);
//return;
			var res_xml_share = AjaxXMLRequest(url_ajax);
			treatXML(res_xml_share);
		}
		
		function get_bureauxByBPs(BPs) {
			if ( BPs.length == 0 ) return;
			
			// Découper la requête
			var i = 0;
			var jump = 1950;
			while ( i < BPs.length ) {
				var partBPs = BPs.substr(i, jump);
				i += jump;
				while ( i < BPs.length && BPs.substr(i, 1) != ';' ) {
					partBPs += BPs.substr(i, 1);
					i++;
				}
				i++;
				
				var url_ajax = '/carto_AJAX.php?date='+ new Date().getTime() +'&cmd=get_bureauxByBPs&BPs='+ partBPs + '&showQuartiers=0';
//window.open(url_ajax);
//return;
				var res_xml_share = AjaxXMLRequest(url_ajax);
				treatXML(res_xml_share);
			}
		}
		
		function get_bureauxByBPs_strict(BPs) {
			if ( BPs.length == 0 ) return;
			
			var url_ajax = '/carto_AJAX.php?date='+ new Date().getTime() +'&cmd=get_bureauxByBPs_strict&BPs='+ BPs + '&showQuartiers=0';
//window.open(url_ajax);
//return;
			var res_xml_share = AjaxXMLRequest(url_ajax);
			treatXML(res_xml_share);
		}
		
		function get_bureauxByInsees(insees) {
			if ( insees.length == 0 ) return;
			
			if ( get_nbBPs() > limite_BPS ) {
				openInfoPopup(erreur_carto_limite_nbBPs_total,"","",1);
				
				// Ordonner à la carto de déselectionner les communes qui ont appelé cette fonction
				carto_unselectInsees(insees);
				
				return false;
			}
			
			var url_ajax = '/carto_AJAX.php?date='+ new Date().getTime() +'&cmd=get_bureauxByInsees&insees='+ insees + '&showQuartiers=0';
//window.open(url_ajax);
//return;
			var res_xml_share = AjaxXMLRequest(url_ajax);
			treatXML(res_xml_share);
		}
		// MOTEUR GEO //
		
	// ???
		function moteurGeo_addCPsAndVilles() {
			if ( get_nbBPs() > limite_BPS ) {
				openInfoPopup(erreur_carto_limite_nbBPs_total,"","",1);
				return false;
			}
			
			var obj_liste_ville_cp = document.getElementById('liste_ville_cp');
			var obj_liste_ville_cp_value;
			if ( obj_liste_ville_cp.value == form_villeCP_exemple ) {
				obj_liste_ville_cp_value = '';
			} else {
				obj_liste_ville_cp_value = trim(obj_liste_ville_cp.value);
			}
			
			if ( obj_liste_ville_cp_value == '' ) {
				openInfoPopup(erreur_carto_champs_saisie,"","",1);
				return;
			}
			
			var message = '';
			
			// Compter le nombre de codes postaux
			var tab	= obj_liste_ville_cp_value.split(',');
			
			var CPs			= "";
			var villes		= "";
			var nbVilles	= 0;
			var nbCPs		= 0;
			var nbDeps		= 0;
			for ( var i = 0; i < tab.length; i++ ) {
				var valeur = trim(tab[i]);
				var longeur = valeur.length;
				if (( longeur == 5 ) && ( !isNaN(valeur) )){
					nbCPs++;
					CPs += valeur;
					if ( i+1 < tab.length )
						CPs += ",";
				} else if (( longeur == 2 ) && ( !isNaN(valeur) || valeur == '2a' || valeur == '2A' || valeur == '2b' || valeur == '2B' )){
					nbDeps++;
					CPs += valeur;
					if ( i+1 < tab.length )
						CPs += ",";
				} else{
					nbVilles++;
					villes += valeur;
					if ( i+1 < tab.length )
						villes += ",";
				}
			}
			if ( nbVilles > limite_villes ) {
				message += erreur_carto_limite_nbVilles + '\n';
			}
			if ( nbCPs > limite_CPs ) {
				message += '\n';
			}
			if ( nbDeps > limite_deps ) {
				message += erreur_carto_limite_nbDeps + '\n';
			}
			
			if ( message.length > 0 ) {
				openInfoPopup(message,"","",1);
				return false;
			}
			
			// Demander la liste des communes/BPs/quartiers au serveur qui correspondent
			get_bureauxByCPsAndVilles(CPs,villes);
			
			// Vider les champs
			document.getElementById('liste_ville_cp').value = form_villeCP_exemple;
			
			try {
				if ( valider_check != undefined && valider_check ) {
					valider_autorisationSansPopup = true;
					valide_en_cours	= false;
					if ( validerFormCarto != undefined ) validerFormCarto();
				}
			} catch(err) {}
		}
		
		function moteurGeo_addVilles() {
			var obj_villes = document.getElementById('liste_ville');
			var villes = trim(obj_villes.value);
			if ( villes == '' ) {
				openInfoPopup(erreur_carto_ville_saisie,"","",1);
				return;
			}
			
			var message = '';
			
			// Demander la liste des communes/BPs/quartiers au serveur qui correspondent
			get_bureauxByVilles(villes);
			
			// Vider le champ ville
			obj_villes.value = '';
			ajouterVilles_handleLightBtn();
		}
		
		function moteurGeo_addCPs() {
			var obj_CPs = document.getElementById('liste_departement');
			var CPs = trim(obj_CPs.value);
			if ( CPs == '' ) {
				openInfoPopup(erreur_carto_CP_saisie,"","",1);
				return;
			}
			
			// Demander la liste des communes/BPs/quartiers au serveur qui correspondent
			get_bureauxByCPs(CPs);
			
			// Vider le champ ville
			obj_CPs.value = '';
			ajouterCPs_handleLightBtn();
		}
		
		function moteurGeographique_addBPs(tab_bureaux, refreshRowClasses, refreshCarto) {
			if ( refreshRowClasses == undefined ) refreshRowClasses = true;
			if ( refreshCarto == undefined ) refreshCarto = false;
			
var dates		= new Array();
var dates_msg	= new Array();
dates.push( new Date().getTime() );
dates_msg.push('');
			TAB_addBureaux(tab_bureaux, refreshRowClasses);
dates.push( new Date().getTime() );
dates_msg.push('màj du tableau qui aidera le listing');
/* /
			listing_addBureaux(tab_bureaux, refreshRowClasses);
dates.push( new Date().getTime() );
dates_msg.push('màj du listing');
/**/

			selectionGeo_addBureaux(tab_bureaux);
dates.push( new Date().getTime() );
dates_msg.push('màj des champs');
			if ( refreshCarto ) {
				var tab_insees = new Array();
				for ( var i = 0; i < tab_bureaux.length; i++ ) {
					if ( !tab_insees.in_array(tab_bureaux[i].insee) ) tab_insees.push(tab_bureaux[i].insee);
				}
				carto_selectInsees(tab_insees.join(';'));
			}
dates.push( new Date().getTime() );
dates_msg.push('màj de la cartographie');
if ( !firstLoad ) {
	showExecutionTimes(dates, dates_msg, 'moteurGeographique_addBPs')
}
		}
		
		function moteurGeographique_delBureau(BP_insee, BP_cp, BP_nom, prevenirCarto) {
			if ( prevenirCarto == undefined ) prevenirCarto = true;
			
			TAB_delBureau(BP_insee, BP_cp, BP_nom);
			listing_delBureau(BP_insee, BP_cp, BP_nom);
			selectionGeo_delBureau(BP_insee + ',' + BP_cp + ',' + BP_nom);
			
			if ( prevenirCarto ) {
				var tab_bureaux		= document.getElementById('BPs').value.split(';');
				var reste = false;
				for ( var i = 0; i < tab_bureaux.length; i++ ) {
					var bureau = tab_bureaux[i].split(',');
					var tmp_BP_insee	= bureau[0];
					if ( tmp_BP_insee == BP_insee ) {
						reste = true;
					}
				}
				if ( !reste ) carto_unselectInsees(BP_insee);
			}
			
			// Rafraichir le listing s'il doit être vide
			var obj_BPs		= document.getElementById('BPs');
			if ( obj_BPs.value.length == 0 ) listing_reset();
		}
		
		function moteurGeographique_delInsees(codesInsee, prevenirCarto) {
			if ( prevenirCarto == undefined ) prevenirCarto = true;
			
			var tab_codesInsee	= codesInsee.split(';');
			var tab_bureaux		= document.getElementById('BPs').value.split(';');
			for ( var i = 0; i < tab_bureaux.length; i++ ) {
				var bureau = tab_bureaux[i].split(',');
				var BP_insee	= bureau[0];
				var BP_cp		= bureau[1];
				var BP_nom		= bureau[2];
				if ( tab_codesInsee.in_array(BP_insee) != -1 ) {
					moteurGeographique_delBureau(BP_insee, BP_cp, BP_nom, prevenirCarto);
				}
			}
		}
		
		function moteurGeographique_selectQuartier(BP_insee, BP_cp, BP_nom, quartier_id) {
			var obj_listing_quartiers_chk	= document.getElementById('listing_quartiers_chk_' + BP_insee + ',' + BP_cp + ',' + BP_nom + ',' + quartier_id);
			var obj_listing_quartiers_tab	= document.getElementById('listing_quartiers_tab_' + BP_insee + ',' + BP_cp + ',' + BP_nom + ',' + quartier_id);
			
			if ( obj_listing_quartiers_chk.checked ) {
				obj_listing_quartiers_tab.className = 'r_m_BP_sel';
				selectionGeo_addQuartier(BP_insee + ',' + BP_cp + ',' + BP_nom + ',' + quartier_id);
				
				// Désélectionner le "Toute la ville"
				var obj_listing_quartiers_all_chk	= document.getElementById('listing_quartiers_chk_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '_all');
				var obj_listing_quartiers_all_tab	= document.getElementById('listing_quartiers_tab_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '_all');
				obj_listing_quartiers_all_tab.className	= 'r_m_BP';
				obj_listing_quartiers_all_chk.checked	= false;
				obj_listing_quartiers_all_chk.enabled	= '';
			} else {
				obj_listing_quartiers_tab.className = 'r_m_BP';
				selectionGeo_delQuartier(BP_insee + ',' + BP_cp + ',' + BP_nom + ',' + quartier_id);
				
				// SI tous les quartiers sont désélectionnés ALORS Sélectionner le "Toute la ville"
				var obj_quartiers	= document.getElementById('listing_bpCode_' + BP_insee + ',' + BP_cp + ',' + BP_nom);
				var tab_quartiers_input	= obj_quartiers.getElementsByTagName('input');
				
				var bureau_allQuartiersSelected		= true;
				var bureau_allQuartiersNotSelected	= true;
				for ( var i = 1; i < tab_quartiers_input.length; i++ ) {
					if ( tab_quartiers_input[i].type == "checkbox" && !tab_quartiers_input[i].checked ) {
						bureau_allQuartiersSelected		= false;
					}
					if ( tab_quartiers_input[i].type == "checkbox" && tab_quartiers_input[i].checked ) {
						bureau_allQuartiersNotSelected	= false;
					}
				}
				
				if ( bureau_allQuartiersNotSelected ) {
					var obj_listing_quartiers_all_chk	= document.getElementById('listing_quartiers_chk_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '_all');
					var obj_listing_quartiers_all_tab	= document.getElementById('listing_quartiers_tab_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '_all');
					obj_listing_quartiers_all_tab.className	= 'r_m_BP_sel';
					obj_listing_quartiers_all_chk.checked	= true;
					obj_listing_quartiers_all_chk.enabled	= 'ENABLED';
				}
			}
			
			// Rafraîchir l'état du bureau
			listing_refreshState(BP_insee, BP_cp, BP_nom);
		}
		
		function moteurGeographique_unselectAllQuartiers(BP_insee, BP_cp, BP_nom) {
			var obj_listing_quartiers_all_chk	= document.getElementById('listing_quartiers_chk_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '_all');
			var obj_listing_quartiers_all_tab	= document.getElementById('listing_quartiers_tab_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '_all');
			
			if ( obj_listing_quartiers_all_chk.checked ) {
				obj_listing_quartiers_all_tab.className = 'r_m_BP_sel';
				
				// Désélectionner tous les quartiers du bureau de poste
				var obj_quartiers	= document.getElementById('listing_bpCode_' + BP_insee + ',' + BP_cp + ',' + BP_nom);
				var tab_quartiers_input	= obj_quartiers.getElementsByTagName('input');
				for ( var i = 1; i < tab_quartiers_input.length; i++ ) {
					if ( tab_quartiers_input[i].type == "checkbox" ) {
						tab_quartiers_input[i].checked = false;
						var tab_quartier_id = tab_quartiers_input[i].getAttribute('id').split(',');
						var quartier_id = tab_quartier_id[tab_quartier_id.length - 1];
						moteurGeographique_selectQuartier(BP_insee, BP_cp, BP_nom, quartier_id);
					}
				}
				
				// Désactiver la checkbox
				obj_listing_quartiers_all_chk.enabled = false;
			}
			
			// Rafraîchir l'état du bureau
			listing_refreshState(BP_insee, BP_cp, BP_nom);
		}
		
		function moteurGeographique_reset(prevenirCarto) {
			if ( prevenirCarto == undefined ) prevenirCarto = true;
			
			if ( confirm(confirmation_carto_reinitialiserVilles) ) {
				selectionGeo_reset();
				listing_reset();
				if ( prevenirCarto ) carto_reset();
			}
		}
		
		function moteurGeographique_addSecteur(secteur_id, secteur_nom, secteur_couleur, prevenirCarto) {
			if ( prevenirCarto == undefined ) prevenirCarto = false;
			
			if ( secteur_id.length == 0 || secteur_nom.length == 0 ) return;
			
			selectionGeo_addSecteur(secteur_id);
			listing_secteurs_addSecteur(secteur_id, secteur_nom, secteur_couleur);
		}
		
		function moteurGeographique_delSecteur(secteur_id, prevenirCarto) {
			if ( prevenirCarto == undefined ) prevenirCarto = false;
			
			if ( secteur_id.length == 0 ) return;
			
			selectionGeo_delSecteur(secteur_id);
			listing_secteurs_delSecteur(secteur_id);
			
			carto_unselectSecteur(secteur_id);
		}
		
		function moteurGeographique_secteurs_reset(prevenirCarto) {
			if ( prevenirCarto == undefined ) prevenirCarto = true;
			
			if ( confirm(confirmation_carto_reinitialiserSecteurs) ) {
				selectionGeo_secteurs_reset();
				listing_secteurs_reset();
				if ( prevenirCarto ) carto_secteurs_reset();
			}
		}
		
		function moteurGeographique_changeSelection(secteur_id, codesInsee) {
			firstLoad = true;
			
			// Vider la carte
			moteurGeographique_brutalReset(true);
			
			// Changer la sélection dans la carto
			carto_changeSelection('&secteur_id=' + secteur_id, codesInsee);
			
			// Demander les bureaux
			get_bureauxByInsees(codesInsee);
			
			firstLoad = false;
		}
		
		function moteurGeographique_brutalReset(prevenirCarto) {
			if ( prevenirCarto == undefined ) prevenirCarto = true;
			
			selectionGeo_reset();
			listing_reset();
			if ( prevenirCarto ) carto_reset();
		}
		
		function moteurGeographique_secteurs_brutalReset(prevenirCarto) {
			if ( prevenirCarto == undefined ) prevenirCarto = true;
			try {
				selectionGeo_secteurs_reset();
				listing_secteurs_reset();
				if ( prevenirCarto ) carto_secteurs_reset();
			}
			catch (ex) {
			}
		}
		
		// ???
		var TAB_BPs			= new Array();
		var TAB_BPs_index	= new Array();
		
		function TAB_addBureaux(tab_bureaux, refreshRowClasses, majListing) {
var dates		= new Array();
var dates_msg	= new Array();
dates.push( new Date().getTime() );
dates_msg.push('');
			
var message = '\n';
message += 'TAB_addBureaux';
message += 'TAB_BPs.length : ' + TAB_BPs.length + '\n';
			var new_TAB_BPs			= new Array();
			var new_TAB_BPs_index	= new Array();
			
			if ( refreshRowClasses == undefined ) refreshRowClasses = true;
			if ( majListing == undefined ) majListing = true;
			
			if ( tab_bureaux.length == 0 ) return;
			
			var j	= 0;
			var tab_bureaux_reloaded = new Array();
			
			for ( var i = 0; i < tab_bureaux.length; i++ ) {
//alert( i + ' / ' + tab_bureaux.length );
				var bureau = tab_bureaux[i];
				
				var BP_insee	= bureau.insee;
				var BP_cp		= bureau.cp;
				var BP_nom		= bureau.nom;
				var quartiers	= bureau.quartiers;
				
				tab_bureaux_reloaded.push(BP_insee + ',' + BP_cp + ',' + BP_nom);
				
				// Si la commune n'existe pas ALORS l'ajouter
				if ( firstLoad || !document.getElementById('listing_bpCode_' + BP_insee + ',' + BP_cp + ',' + BP_nom) ) {
					// Copier les bureaux déjà chargés qui vont avant le nouveau bureau en cours
message += '(avant while) ' + j + ' < ' + TAB_BPs.length;
if ( j < TAB_BPs.length ) message += ' && ' + (TAB_BPs[j].cp + ' ' + TAB_BPs[j].nom) + ' < (' + BP_cp + ' ' + BP_nom + ')\n';
else message += '\n';
					while ( j < TAB_BPs.length && (TAB_BPs[j].cp + ' ' + TAB_BPs[j].nom) < (BP_cp + ' ' + BP_nom) ) {
message += j + ' < ' + TAB_BPs.length + ' && ' + TAB_BPs[j].nom + ' < (' + BP_cp + ' ' + BP_nom + ')\n';
message += 'BP en cours (TAB_BPs) : ' + TAB_BPs[j].insee + ',' + TAB_BPs[j].cp + ',' + TAB_BPs[j].nom + '\n';
						new_TAB_BPs.push(TAB_BPs[j]);
						new_TAB_BPs_index[TAB_BPs[j].insee + ',' + TAB_BPs[j].cp + ',' + TAB_BPs[j].nom] = new_TAB_BPs.length - 1;
						j++;
					}
					
					// Copier le bureau en cours
message += 'BP en cours (new_TAB_BPs) : ' + tab_bureaux[i].insee + ',' + tab_bureaux[i].cp + ',' + tab_bureaux[i].nom + '\n';
					new_TAB_BPs.push(tab_bureaux[i]);
					new_TAB_BPs_index[tab_bureaux[i].insee + ',' + tab_bureaux[i].cp + ',' + tab_bureaux[i].nom] = new_TAB_BPs.length - 1;
				}
			}
dates.push( new Date().getTime() );
dates_msg.push('Ajout des objets reçus');
			
			// Copier les derniers bureaux qui vont après le tout dernier bureau reçu
			while ( j < TAB_BPs.length ) {
message += j + ' < ' + TAB_BPs.length + '\n';
message += 'BP en cours (TAB_BPs) : ' + TAB_BPs[j].insee + ',' + TAB_BPs[j].cp + ',' + TAB_BPs[j].nom + '\n';
				new_TAB_BPs.push(TAB_BPs[j]);
				new_TAB_BPs_index[TAB_BPs[j].insee + ',' + TAB_BPs[j].cp + ',' + TAB_BPs[j].nom] = new_TAB_BPs.length - 1;
				j++;
			}
dates.push( new Date().getTime() );
dates_msg.push('Copie des derniers bureaux du listing');
			
			// Mettre à jour le listing
		if ( majListing ) {
			var obj_listing_new_HTML = '';
			for (var k = 0; k < new_TAB_BPs.length; k++ ) {
				var bureau = new_TAB_BPs[k];
				
				var BP_insee	= bureau.insee;
				var BP_cp		= bureau.cp;
				var BP_nom		= bureau.nom;
				var quartiers	= bureau.quartiers;
				
				// Le bureau
				var img_src;
				if ( cfg_useQuartier ) {
					if ( 0 < quartiers.length ) {
						img_src		= 'http://www.les-maisons-de-france.com/images/carto/dossier-contenant.gif';
					} else {
						img_src		= 'http://www.les-maisons-de-france.com/images/carto/dossier-complet.gif';
					}
				}
				
				var txt_bureau = '';
				txt_bureau += '<DIV id="listing_bpCode_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '" class="r_m_Liste_1" nom="' + (BP_cp.split('|')).join(',') + ' ' + sup_french_char(BP_nom) + '" cp="' + BP_cp + '">\n';
				
				txt_bureau += '<table width="100%" id="listing_bp_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '" border="0" cellpadding="0" cellspacing="0" style="height: 24px;">\n';
				txt_bureau += '	<colgroup>\n';
				if ( cfg_useQuartier ) {
					txt_bureau += '		<col width="25">\n';
					txt_bureau += '		<col>\n';
				} else {
					txt_bureau += '		<col width="6">\n';
					txt_bureau += '		<col>\n';
				}
				if ( cfg_useBPDelete ) {
					txt_bureau += '		<col width="20">\n';
				}
				txt_bureau += '	</colgroup>\n';
				txt_bureau += '	<tr>\n';
				if ( cfg_useQuartier ) {
					txt_bureau += '		<td align="center" style="cursor:pointer;"' + (quartiers.length?'onClick="listing_openCloseBureau(\'' + BP_insee + '\',\'' + BP_cp + '\',\'' + BP_nom + '\');"':'') + '>\n';
					txt_bureau += '			<img id="listing_bp_img_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '" src="' + img_src + '" style="width: 19px; height: 19px;"><br>\n';
					txt_bureau += '		</td>\n';
				} else {
					txt_bureau += '		<td></td>\n';
				}
				txt_bureau += '		<td id="listing_bp_nom_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '" class="r_m_Commune_complete"' + (cfg_useQuartier?' style="cursor:pointer;"':'') + (quartiers.length?' onClick="listing_openCloseBureau(\'' + BP_insee + '\',\'' + BP_cp + '\',\'' + BP_nom + '\');"':'') + '>\n';
				txt_bureau += ( BP_cp.split('|') ).join(',')  + ' ' + BP_nom + '<br>\n';
				txt_bureau += '		</td>\n';
				if ( cfg_useBPDelete ) {
					txt_bureau += '		<td align="center">\n';
					txt_bureau += '			<img src="http://www.les-maisons-de-france.com/images/carto/trash.gif" width="11" height="13" style="cursor: pointer;" onClick="javascript:moteurGeographique_delBureau(\'' + BP_insee + '\',\'' + BP_cp + '\',\'' + BP_nom + '\'); stopPropagation(event);"><br>\n';
					txt_bureau += '		</td>\n';
				}
				txt_bureau += '	</tr>\n';
				txt_bureau += '</table>\n';
				
				// Quartiers du bureau de poste
				txt_bureau += '<div id="listing_quartiers_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '" style="display: none;">\n';
				if ( 0 < quartiers.length ) {
					txt_bureau += '<table id="listing_quartiers_tab_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '_all" border="0" cellpadding="0" cellspacing="0" class="r_m_BP_sel" style="height: 18px;">\n';
					txt_bureau += '	<colgroup>\n';
					if ( cfg_useQuartier ) {
						txt_bureau += '		<col width="20">\n';
					} else {
						txt_bureau += '		<col width="5">\n';
					}
					txt_bureau += '		<col width="20">\n';
					txt_bureau += '		<col width="200">\n';
					txt_bureau += '	</colgroup>\n';
					txt_bureau += '	<tr>\n';
					txt_bureau += '		<td></td>\n';
					txt_bureau += '		<td>\n';
					txt_bureau += '			<input type="checkbox" id="listing_quartiers_chk_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '_all" name="BPs_all[]" class="inputCheckbox" style="cursor: pointer;" value="' + BP_insee + ',' + BP_cp + ',' + BP_nom + '_all" CHECKED onClick="if ( this.checked ) moteurGeographique_unselectAllQuartiers(\'' + BP_insee + '\', \'' + BP_cp + '\', \'' + BP_nom + '\'); else return false;"><br>\n';
					txt_bureau += '		</td>\n';
					txt_bureau += '		<td>\n';
					txt_bureau += '			<label for="listing_quartiers_chk_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '_all">Toute la ville<br></label>\n';
					txt_bureau += '		</td>\n';
					txt_bureau += '	</tr>\n';
					txt_bureau += '</table>\n';
				}
				for ( var j = 0; j < quartiers.length; j++ ) {
					var quartier_id			= quartiers[j].id;
					var quartier_nom		= quartiers[j].nom;
					var quartier_selected	= quartiers[j].selected;
					
					if ( firstLoad ) {
						var tab_quartiers = ( document.getElementById('quartiers').value ).split(';');
						var tab_BP_cp = BP_cp.split('|');
						if ( tab_BP_cp.length == 1 ) tab_BP_cp = BP_cp;
						if ( tab_quartiers.in_array(BP_insee + ',' + tab_BP_cp[0] + ',' + BP_nom + ',' + quartier_id) != -1 ) {
							quartier_selected = true;
							
							var tab_txt_bureau = txt_bureau.split('			<input type="checkbox" id="listing_quartiers_chk_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '_all" name="BPs_all[]" class="inputCheckbox" style="cursor: pointer;" value="' + BP_insee + ',' + BP_cp + ',' + BP_nom + '_all" CHECKED onClick="if ( this.checked ) moteurGeographique_unselectAllQuartiers(\'' + BP_insee + '\', \'' + BP_cp + '\', \'' + BP_nom + '\'); else return false;"><br>\n');
							txt_bureau = tab_txt_bureau.join('			<input type="checkbox" id="listing_quartiers_chk_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '_all" name="BPs_all[]" class="inputCheckbox" style="cursor: pointer;" value="' + BP_insee + ',' + BP_cp + ',' + BP_nom + '_all" onClick="if ( this.checked ) moteurGeographique_unselectAllQuartiers(\'' + BP_insee + '\', \'' + BP_cp + '\', \'' + BP_nom + '\'); else return false;"><br>\n');
							var tab_txt_bureau = txt_bureau.split('<table id="listing_quartiers_tab_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '_all" border="0" cellpadding="0" cellspacing="0" class="r_m_BP_sel" style="height: 18px;">\n');
							txt_bureau = tab_txt_bureau.join('<table id="listing_quartiers_tab_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '_all" border="0" cellpadding="0" cellspacing="0" class="r_m_BP" style="height: 18px;">\n');
							var tab_txt_bureau = txt_bureau.split('			<img id="listing_bp_img_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '" src="' + img_src + '" style="width: 19px; height: 19px;"><br>\n');
							txt_bureau = tab_txt_bureau.join('			<img id="listing_bp_img_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '" src="http://www.les-maisons-de-france.com/images/carto/dossier-contenant-partiel.gif" style="width: 19px; height: 19px;"><br>\n');
							var tab_txt_bureau = txt_bureau.split('		<td id="listing_bp_nom_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '" class="r_m_Commune_complete"' + (cfg_useQuartier?' style="cursor:pointer;"':'') + (quartiers.length?' onClick="listing_openCloseBureau(\'' + BP_insee + '\',\'' + BP_cp + '\',\'' + BP_nom + '\');"':'') + '>\n');
							txt_bureau = tab_txt_bureau.join('		<td id="listing_bp_nom_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '" class="r_m_Commune_partielle"' + (cfg_useQuartier?' style="cursor:pointer;"':'') + (quartiers.length?' onClick="listing_openCloseBureau(\'' + BP_insee + '\',\'' + BP_cp + '\',\'' + BP_nom + '\');"':'') + '>\n');
						}
					}
					
					txt_bureau += '<table id="listing_quartiers_tab_' + BP_insee + ',' + BP_cp + ',' + BP_nom + ',' + quartier_id + '" border="0" cellpadding="0" cellspacing="0" class="' + (quartier_selected == 1 ? ' r_m_BP_sel':' r_m_BP') + '" style="height: 18px;">\n';
					txt_bureau += '	<colgroup>\n';
					if ( cfg_useQuartier ) {
						txt_bureau += '		<col width="20">\n';
					} else {
						txt_bureau += '		<col width="5">\n';
					}
					txt_bureau += '		<col width="20">\n';
					txt_bureau += '		<col width="200">\n';
					txt_bureau += '	</colgroup>\n';
					txt_bureau += '	<tr>\n';
					txt_bureau += '		<td></td>\n';
					txt_bureau += '		<td>\n';
					txt_bureau += '			<input type="checkbox" id="listing_quartiers_chk_' + BP_insee + ',' + BP_cp + ',' + BP_nom + ',' + quartier_id + '" class="inputCheckbox" style="cursor: pointer;"' + (quartier_selected == 1 ? ' CHECKED':'') + ' onClick="moteurGeographique_selectQuartier(\'' + BP_insee + '\', \'' + BP_cp + '\', \'' + BP_nom + '\', \'' + quartier_id + '\');"><br>\n';
					txt_bureau += '		</td>\n';
					txt_bureau += '		<td>\n';
					txt_bureau += '			<label for="listing_quartiers_chk_' + BP_insee + ',' + BP_cp + ',' + BP_nom + ',' + quartier_id + '">' + quartier_nom + '<br></label>\n';
					txt_bureau += '		</td>\n';
					txt_bureau += '	</tr>\n';
					txt_bureau += '</table>\n';
				}
				txt_bureau += '</div>\n';
				
				txt_bureau += '</DIV>';
				obj_listing_new_HTML += txt_bureau;
			}
			
			document.getElementById("selectionsGeographiques").innerHTML = '';
			document.getElementById("selectionsGeographiques").innerHTML = obj_listing_new_HTML;
			
dates.push( new Date().getTime() );
dates_msg.push('Mise à jour du listing avec le innerHTML');
			
			// Rafraîchir les classes alternées des différents bureaux
			if ( refreshRowClasses ) listing_refreshRowClasses();
dates.push( new Date().getTime() );
dates_msg.push('Rafraichissement des classes des lignes du listing');
			
			// Rafraichir l'état de toutes les villes
			if ( cfg_useQuartier ) {
				// Sauvegarder l'ancienne sélection des quartiers
				var tab_quartiers = ( document.getElementById('quartiers').value ).split(';');
				document.getElementById('quartiers').value = '';
				
				// Forcer la sélection de "toute la ville" de toutes les villes
				var tab_bureaux = ( document.getElementById('BPs').value ).split(';');
				for (var i = 0; i < tab_bureaux.length; i++ ) {
					var bureau = tab_bureaux[i].split(',');
					
					var BP_insee	= bureau[0];
					var BP_cp		= bureau[1];
					var BP_nom		= bureau[2];
					if ( document.getElementById('listing_quartiers_chk_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '_all') != undefined ) {
						document.getElementById('listing_quartiers_chk_' + BP_insee + ',' + BP_cp + ',' + BP_nom + '_all').checked = true;
						moteurGeographique_unselectAllQuartiers(BP_insee, BP_cp, BP_nom);
					}
				}
				
				// Resélectionner les quartiers dont les villes n'ont pas été rechargées
				for ( var j = 0; j < tab_quartiers.length; j++ ) {
					if ( tab_quartiers[j].length != 0 ) {
						var quartier = tab_quartiers[j].split(',');
						var BP_insee		= quartier[0];
						var BP_cp			= quartier[1];
						var BP_nom			= quartier[2];
						var quartier_id		= quartier[3];
						
						if ( firstLoad || tab_bureaux_reloaded.in_array(BP_insee + ',' + BP_cp + ',' + BP_nom) == -1 ) {
							var obj_chk_quartier = document.getElementById('listing_quartiers_chk_' + BP_insee + ',' + BP_cp + ',' + BP_nom + ',' + quartier_id);
							obj_chk_quartier.checked = true;
							moteurGeographique_selectQuartier(BP_insee, BP_cp, BP_nom, quartier_id);
						}
					}
				}
			}
		}
dates.push( new Date().getTime() );
dates_msg.push('Rafraichissement de l\'état des quartiers');

if ( !firstLoad ) {
	showExecutionTimes(dates, dates_msg, 'TAB_addBureaux')
}
			
			TAB_BPs			= new_TAB_BPs;
			TAB_BPs_index	= new_TAB_BPs_index;
message += 'TAB_BPs.length finale : ' + TAB_BPs.length + '\n';
message += '///TAB_addBureaux\n';
message += '\n';
if ( document.getElementById("txt_result").style.display == 'block' ) document.getElementById("txt_result").value = message + document.getElementById("txt_result").value;
		}
		
		function TAB_delBureau(BP_insee, BP_cp, BP_nom) {
//alert('TAB_delBureau - ' + BP_insee + ', ' + BP_cp + ', ' + BP_nom);
var message = '\n';
message += 'TAB_delBureau\n';
message += 'TAB_BPs.length : ' + TAB_BPs.length + '\n';
message += 'TAB_BPs_index.length : ' + TAB_BPs_index.length + '\n';
			// SI  le bureau existe ALORS le sortir du tableau
			if ( TAB_BPs_index[BP_insee + ',' + BP_cp + ',' + BP_nom] != undefined ) {
message += 'trouvé : ' + BP_insee + ',' + BP_cp + ',' + BP_nom + '\n';
				TAB_BPs.splice(TAB_BPs_index[BP_insee + ',' + BP_cp + ',' + BP_nom], 1);
				
				// Downgrader tous les indices supérieurs à celui supprimé
				for ( var i in TAB_BPs_index ) {
					if ( typeof(TAB_BPs_index[i]) != 'function' && TAB_BPs_index[i] > TAB_BPs_index[BP_insee + ',' + BP_cp + ',' + BP_nom] ) {
						TAB_BPs_index[i]--;
					}
				}
				
				TAB_BPs_index[BP_insee + ',' + BP_cp + ',' + BP_nom] = undefined;
				delete( TAB_BPs_index[BP_insee + ',' + BP_cp + ',' + BP_nom] );
			}
else {
	message += 'NON TROUVÉ !! : ' + BP_insee + ',' + BP_cp + ',' + BP_nom + '\n';
}
message += 'TAB_BPs_index.length : ' + TAB_BPs_index.length + '\n';
message += 'TAB_BPs.length : ' + TAB_BPs.length + '\n';
message += '///TAB_delBureau\n';
message += '\n';
if ( document.getElementById("txt_result").style.display == 'block' ) document.getElementById("txt_result").value = message + document.getElementById("txt_result").value;
		}
		
		function TAB_reset() {
			TAB_BPs = new Array();
		}
	// ??? //

