/**
 * @author apellet
 */


/**
 * Méthode qui initialise l'application lorsqu'elle est executée en tant que module externe.
 * C'est une association.
 * @param {Object} code_struct le a_code
 */
function loadMapAsso ( code_struct )
{
	
	/*Les coordonnées du centre de la carte au chargement*/						
	var map_center = new GLatLng (46.72480037466717,2.04345703125);	

	//Création des icons des associations.
	createIconAssoc ();
	
	//Affectation de la taille du conteneur
	jQuery("#map").css("width", cust_map_width);
	jQuery("#map").css("height", cust_map_height);
	jQuery("#all_map").css("width", cust_map_width);
	jQuery("#block_full_map").css("width", cust_map_width);
	
							
	//Creation de la carte
	map = new GMap2(document.getElementById("map"));		
	map.setCenter ( map_center, 6 );						
	map.enableScrollWheelZoom ();
	
	//Création du gif ed chargement
	loading = new Loading ( {w:200,h:200} );
	loading.start ();
	
	//Ajout des controles
	//Type de carte
	jQuery('#maptypecontrol').gmap_type( {  
			map: map,  
			types: [0,1,2,3],
			type:1,
			f_size:10
		});
	
	//Bouton FullScreen
	jQuery('#mapfullscreen').gmap_fullscreen( {  
		map: map,  
		block_map: 'map',
		block_parent:'all_map'
		
	});
	
	//Barre de zoom
	jQuery('#mapzoomcontrol').gmap_zoom( {  
			map: map,
			b_center:true,
			size : 25,
			prefix_path:'',
			rep_img:'./styles/controls/images/'
		});
	
	
	//Barre d'echelle
	map.addControl ( new GScaleControl()  );
	
	
	
	//Initialisation des layers
	initLayerAssoc ();
	
	//Initialisation des templates
	initTemplates ();
	
	//Chargement des listes du moteur de recherche
	loadListeActivite ();
	
	//Chargement de l'association
	loadOneAsso ( code_struct );
	
	jQuery("#moteur-recherche").css ('display', 'none');
	jQuery("#list-result").css ('display', 'none');
}


/**
 * Méthode qui initialise l'application lorsqu'elle est executée en tant que module externe.
 * C'est une association.
 * @param {Object} code_struct le numéro de département
 */
function loadMapDep ( code_struct )
{
	/*Les coordonnées du centre de la carte au chargement*/						
	var map_center = new GLatLng (46.72480037466717,2.04345703125);	

	//Création des icons des associations.
	createIconAssoc ();
	createIconAdresse (),
	
	//Affectation de la taille du conteneur
	jQuery("#map").css("width", cust_map_width);
	jQuery("#map").css("height", cust_map_height);
	jQuery("#all_map").css("width", cust_map_width);
	jQuery("#block_full_map").css("width", cust_map_width);
	
	
	//Creation de la carte
	map = new GMap2(document.getElementById("map"));		
	map.setCenter ( map_center, 6 );						
	map.enableScrollWheelZoom ();
	
	//Création du gif ed chargement
	loading = new Loading ( {w:200,h:200} );
	loading.start ();
	
	//Ajout des controles
	//Type de carte
	jQuery('#maptypecontrol').gmap_type( {  
			map: map,  
			types: [0,1,2,3],
			type:1,
			f_size:10
		});
	
	//Bouton FullScreen
	jQuery('#mapfullscreen').gmap_fullscreen( {  
		map: map,  
		block_map: 'map',
		block_parent:'all_map'
		
	});
	
	//Barre de zoom
	jQuery('#mapzoomcontrol').gmap_zoom( {  
			map: map,
			b_center:true,
			size : 25,
			prefix_path:'',
			rep_img:'./styles/controls/images/'
		});
	
	//Legende active 
	if ( show_legende == 1 )
	{
		map.addControl ( new LegendControl(map, createJsonLegend ()  ) );
		jQuery("#chk_legende").click();
	}
	
	//Barre d'echelle
	map.addControl ( new GScaleControl()  );
	
	
	//Initialisation des layers
	initLayerAssoc ();
	
	
	//Initialisation des templates
	initTemplates ();
	
	//Chargement des listes du moteur de recherche
	loadListeActivite ();
	
	//Mise à jour de la liste déroulante des départements
	var sel = document.getElementById('list_dep');
	sel[sel.options.length] = new Option ( code_struct, code_struct );
	jQuery("#filtre_dep").css ('display', 'none' );
	
	
	//Affichage ou non de la liste de résultat
	if ( show_liste_resultat == 0 )
	{
		jQuery("#list-result").css ('display', 'none' );
	}
	
	
	
	//Charger les coordonnées du département
	loadCoordDep ( code_struct );
}


/**
 * Méthode qui initialise l'application lorsqu'elle est executée en tant que module externe.
 * C'est une association.
 * @param {Object} code_struct l'identifiant de la région dans la BDD.
 */
function loadMapReg ( code_struct )
{
	/*Les coordonnées du centre de la carte au chargement*/						
	var map_center = new GLatLng (46.72480037466717,2.04345703125);	

	//Création des icons des associations.
	createIconAssoc ();
	createIconAdresse ();
	
	//Affectation de la taille du conteneur
	jQuery("#map").css("width", cust_map_width);
	jQuery("#map").css("height", cust_map_height);
	jQuery("#all_map").css("width", cust_map_width);
	jQuery("#block_full_map").css("width", cust_map_width);
	
	
	//Creation de la carte
	map = new GMap2(document.getElementById("map"));		
	map.setCenter ( map_center, 6 );						
	map.enableScrollWheelZoom ();
	
	//Création du gif ed chargement
	loading = new Loading ( {w:200,h:200} );
	loading.start ();
	
	//Ajout des controles
	//Type de carte
	jQuery('#maptypecontrol').gmap_type( {  
			map: map,  
			types: [0,1,2,3],
			type:1,
			f_size:10
		});
	
	//Bouton FullScreen
	jQuery('#mapfullscreen').gmap_fullscreen( {  
		map: map,  
		block_map: 'map',
		block_parent:'all_map'
		
	});
	
	//Barre de zoom
	jQuery('#mapzoomcontrol').gmap_zoom( {  
			map: map,
			b_center:true,
			size : 25,
			prefix_path:'',
			rep_img:'./styles/controls/images/'
		});
	
	//Legende active
	if ( show_legende == 1 )
	{
		map.addControl ( new LegendControl(map, createJsonLegend ()  ) );
		jQuery("#chk_legende").click();
	}
	
	//Barre d'echelle
	map.addControl ( new GScaleControl()  );
	
	//Initialisation des layers
	initLayerAssoc ();
	
	//Initialisation des templates
	initTemplates ();
	
	//Chargement des listes du moteur de recherche
	loadListeActivite ();
	
	//Affichage ou non de la liste de résultat
	if ( show_liste_resultat == 0 )
	{
		jQuery("#list-result").css ('display', 'none' );
	}
	
	//Chargement de l'emprise de la région
	loadRegion ( code_struct );
	
	//Chargement de la liste des départements de la région
}

/**
 * Méthode qui charge une association par son code
 * et l'affiche au centre de la carte.
 */
function loadOneAsso ( a_code )
{
	var data = {a_code:a_code, year:new Date().getFullYear()};
	var asso_res = {};
	var cpt = 0;
	var lat = 0;
	var lng = 0;
	
	jQuery.ajax({
            type: "POST",
            url: "./php/loadOneAsso.php",
            data: data,
			dataType:'xml',
            success: function(xml)
			{
				jQuery(xml).find("asso").each ( function()
				{
					readXmlAsso ( this, asso_res);
					lat = jQuery(this).attr ('lat');
					lng = jQuery(this).attr ('lng');
					cpt++;					
				});
				loading.stop();
				
				//Appel de la fonction de rendu
				//console.log(layer_dep.get ( dep ).getLatLng());
				drawAssociation ( asso_res, new GLatLng ( lat, lng ), true );
				
				
				//Appel de la fonction de mise à jour de la liste des résultats
				drawListeResultat ( asso_res, cpt );
            },
			error:function (XMLHttpRequest, textStatus, errorThrown)
			{
				alert(textStatus); 
			}
        });
}

function loadCoordDep ( dep )
{
	var data = {dep:dep};
	var lat = 0;
	var lng = 0;
	var lib = "";
	
	jQuery.ajax({
            type: "POST",
            url: "./php/loadCoordDep.php",
            data: data,
			dataType:'xml',
            success: function(xml)
			{
				jQuery(xml).find("dep").each ( function()
				{
					lat = jQuery(this).attr ('lat');
					lng = jQuery(this).attr ('lng');
					lib = jQuery(this).attr ('lib');
					
					//num
				});
				loading.stop();
				
				//Definition du filtre pour le géocodeur
				filtre_geocoder = lib;
				
				//Recentrage de la carte
				map.setCenter ( new GLatLng ( lat, lng ), 7 );
				
				loadAssoFromDep ( jQuery('#moteur_recherche #list_dep').val(), true );
            },
			error:function (XMLHttpRequest, textStatus, errorThrown)
			{
				alert(textStatus); 
			}
        });
}


/**
 * Méthode qui charge pour la région :
 * l'emprise
 * le libellé
 * la liste des départements 
 * @param {Object} reg l'identifiant de la région dans la BDD.
 */
function loadRegion ( reg )
{
	var data = {reg:reg};
	var south_west = null;
	var north_east = null;
	var lib = "";
	var deps = "";
	var bounds = null;
	
	jQuery.ajax({
            type: "POST",
            url: "./php/loadRegion.php",
            data: data,
			dataType:'xml',
            success: function(xml)
			{
				jQuery(xml).find("reg").each ( function()
				{
					south_west = jQuery(this).attr ('south_west');
					north_east = jQuery(this).attr ('north_east');
					lib = jQuery(this).attr ('lib');
					
					//Remplissage de la liste des départements
					obj_dep = new Object ();
					jQuery(this).find("dep").each ( function ()
					{
						obj_dep [jQuery(this).attr ('num')] = {
							lib : jQuery(this).attr ('lib'),
							num : jQuery(this).attr ('num')
						}
						
						deps += jQuery(this).attr ('num') + ",";					
					});
					fillSelectDep ();
				});
				loading.stop();
				
				south_west = south_west.split(",");
				north_east = north_east.split(",");
				bounds = new GLatLngBounds( new GLatLng (parseFloat(south_west[0]), parseFloat(south_west[1]) ) , 
											new GLatLng (parseFloat(north_east[0]), parseFloat(north_east[1]) ) );
				
				//Definition du filtre pour le géocodeur
				filtre_geocoder = lib;
				
				//Recentrage de la carte
				map.setCenter ( bounds.getCenter(), map.getBoundsZoomLevel(bounds) );
				
				
				loadAssoFromRegion ( deps.substring( 0, deps.length-1) );
				
            },
			error:function (XMLHttpRequest, textStatus, errorThrown)
			{
				alert(textStatus); 
			}
        });
}


var asso_res_reg = null;
var cpt_asso_reg = 0;

function loadAssoFromRegion ( deps )
{
	loading.start();
	map.closeInfoWindow();
	var data = {dep:deps, year:new Date().getFullYear()};
	var asso_res = {};
	var cpt = 0;
	jQuery.ajax({
            type: "POST",
            url: prefix_php + "php/loadAssoFromReg.php",
            data: data,
			dataType:'xml',
            success: function(xml)
			{
				jQuery(xml).find("asso").each ( function()
				{
					readXmlAsso ( this, asso_res);
					cpt++;					
				});
				loading.stop();
				
				//Appel de la fonction de rendu
				
				
				drawAssociation ( asso_res, null, true );
				
				
				//Appel de la fonction de mise à jour de la liste des résultats
				drawListeResultat ( asso_res, cpt, true );
				
				asso_res_reg = asso_res;
				cpt_asso_reg = cpt;
            },
			error:function (XMLHttpRequest, textStatus, errorThrown)
			{
				alert(textStatus); 
			}
        });
}

