/** 
 * @fileoverview Ce javascript permet de creer le fond de carte, il connait le fonctionnel 
 * et recupéère la reponse JSON pour créer la carte avec ses infos necessaires.
 * Il référence la classe principale ainsi que toutes les autres classes liées.
 *
 */

/**
 * Constante pour statistique carto
 */
var typeCarto = ["PLAN","VUE","MIXTE"]; 
var typeNav = ["INIT","NAV"];
var typeFournisseur = ["MAPPY","IA", "IGN"];
var initStatCartoDone = false;

/**
 * @namespace L'objet principal ToolkitCarto
 */
tlk_jsTlkImporte = true;
var ToolkitCarto	= {
	ctx		: TlkCContext
};

if(typeof jQuery!="undefined"){

ToolkitCarto.api	= Mappy.api.utils.Class(
/**
 * @lends ToolkitCarto.api
 * @extends Mappy.api.EventSource
 */
 {
	/** 
	* @constructs
	* @property {ToolkitCarto.api.mappyCarte} map La carte Mappy.
	* @property {Array} stateView Historique d'affichage.
	* @description
	* Il s'agit de l'api de base servant à initialiser la carte et commander les actions.
	*/
	initialize	: function (){
	 	
		// Initialise la carte
		this.map			= new ToolkitCarto.api.mappyCarte();
		this.map.map.setCenter(new Mappy.api.geo.Coordinates(tlk_reponseCarto.donnees.infosCarte.coordonneeCentreCarte.longitude,tlk_reponseCarto.donnees.infosCarte.coordonneeCentreCarte.latitude),tlk_reponseCarto.donnees.niveauZoom);
		if (!ToolkitCarto.conf.scrollWheelZoomEnabled) {
			this.map.map.disableScrollWheelZoom();	
		}
		
		// Stat : Plan ou vue aérienne - INIT
		if (tlk_reponseCarto.donnees.vueAerienne == true) {
		    pj.stats.carto(typeCarto[1],typeNav[0],typeFournisseur[1]);
            // Affiche les logos des fournisseurs IGN et InterAtlas.
            jQuery(ToolkitCarto.conf.identifiant.logoIGN).show();
            jQuery(ToolkitCarto.conf.identifiant.logoIA).show();
		} else {
		    pj.stats.carto(typeCarto[0],typeNav[0],typeFournisseur[0]);
		}
		initStatCartoDone = true; // La phase d'INIT a ete effectuee
	},

	/**
	* @name RechercheCarte.api#callRechercheBloc
	* @function
	* @param {int} idBloc Un identifiant de bloc.
	* @param {Marker} html L'html a afficher.
	* @param {String} name Le nom du layer ou est disposé le poi.
	* @description
	* Appel la recherche des éléments d'un bloc.
	*/
	afficheBloc	: function(poi, html, name){
		// efface les popups en roll-over
		jQuery(".yesPastillage-tooltip").fadeOut("fast");
		// ouvre la popup en clic
		poi.openPopUp("<div class='infoBulle'>" + html + "</div>",{
				beakOffset	: 10,
				cssClass	: toolkitCarto.map.layer[name]['config'].css
		});
		pj.firstScan(jQuery(".infoBulle"));
	},
	

	/**
	 * appel Ajax au serveur de POI pour récupérer en json les pois à positionner sur la carte
	 * @return
	 */
	recuperePoisPourCarte : function (){
	    var bounds = toolkitCarto.map.map.getVisibleBounds();
	    $.ajax({
	        type: "GET",
	        url: serveurPoiUrl+"getJSONPoisWithDetailsByCoordinatesAndZoom.do",
	        data:"xsw="+bounds.sw.x+"&ysw="+bounds.sw.y+"&xne="+bounds.ne.x+"&yne="+bounds.ne.y+"&zoom="+toolkitCarto.map.map.getZoomLevel(),
	        dataType: "json",
	        success: toolkitCarto.ajoutePOI
	    });
	},
	
	/**
	* @function
	* @returns {ToolkitCarto.api} L'objet ToolkitCarto
	* @description
	* Permet de récupérer de façon global l'objet ToolkitCarte
	*/
	ajoutePOI : function (reponseJSON){
	    if(reponseJSON.statut && reponseJSON.reponseService && reponseJSON.reponseService.length>0){
	        //reponse ok récupération de l'objet contenant la liste des pois        
	        //liste des pois regroupees par type de poi
	        for (var i = 0; i < reponseJSON.reponseService.length; i++) {
	            var listPoisByType = reponseJSON.reponseService[i];
	            var typePoiName = listPoisByType.typePoi;
	            for (var j = 0; j < listPoisByType.listPois.length; j++) {
	                var poi = listPoisByType.listPois[j];
	                if(poi){
	                    toolkitCarto.map.addPoi(ToolkitCarto.conf.layer.poi,{
	                        id          : poi.id,
	                        icone       : poi.poiType.pictoUrl==""?ToolkitCarto.ctx.staticPath+"/carto/images/pois/"+"default":ToolkitCarto.ctx.staticPath+"/carto/images/pois/"+poi.poiType.pictoUrl,
	                        latitude    : poi.y,
	                        longitude   : poi.x,
	                        labelDenom  : toolkitCarto.creerBoitePoi(typePoiName, poi),
	                        showNumber  : false
	                    });
	                }   
	            }   
	        }
	    }           
	},

	creerBoitePoi : function (typePoiName, poi){
	    var html = "<div class='gauche'></div><div class='middle'>";
	        html+=typePoiName;
	        html+=" : ";
	        html+=poi.name;
	        if(poi.address){
	            html+="<br/>";
	            html+=poi.address;
	        }
	        if( poi.details && poi.details.length>0){
	            for ( var i = 0; i < poi.details.length; i++) {
	                if(i!=0){
	                    html+=",";
	                }
	                html+="<br/>";
	                html+=poi.details[i].detailTypeName+" : "+poi.details[i].value;
	            }
	        }
	        html+="<div class='droite'></div></div>";
	     return html;
	}
});

var toolkitCarto;

/**
 * @name statNav
 * @function
 * @param {string} mode courant de carto.
 * @description
 * Envoi des stats eStat de navigation dans la carto
 */
function  statNav(modeName) {
    if (initStatCartoDone == true) {
        switch(modeName) {
            case "map": // Plan
                pj.stats.carto(typeCarto[0],typeNav[1],typeFournisseur[0]);
                break;
            case "photo": // Vue aerienne
                pj.stats.carto(typeCarto[1],typeNav[1],typeFournisseur[1]);
                break;
            case "hybrid": // mixte
                pj.stats.carto(typeCarto[2],typeNav[1],typeFournisseur[1]);
                break;
            default:
                break;
        }
    }
}
 
/**
* @function
* @returns {ToolkitCarto.api} L'objet ToolkitCarto
* @description
* Permet de récupérer de façon global l'objet ToolkitCarte
*/
function getToolkitCarto(){
	return (typeof toolkitCarto=="object")?toolkitCarto:null;
}

/**
* @function
* @description
* Permet d'importer les fichiers javascript nécessaire à la ToolkitCarto
* @see ToolkitCarto.conf
*/
function importJavascript(){

	var jsJQueryPlugIn = [/*"jquery.json-1.3", "aqCookie",*/"jquery.tooltip.pack"/*, "jScrollPane-1.2.3.min"*/];
	var jsTlkCModule = ["TlkCOutil", "TlkCMappyCarte"];
	var jsTlkCResource = ["TlkCConstantes", "TlkCMessages"];

	// Importe les plugins JQuery
	for(var i = 0; i < jsJQueryPlugIn.length; i++)
		document.write('<script type="text/javascript" src="' + ToolkitCarto.ctx.staticPath + '/commun/js/jquery/' + jsJQueryPlugIn[i]+'.js"></script>');
	
	// Importe les modules TlkC
	for(var i = 0; i < jsTlkCModule.length; i++)
		document.write('<script type="text/javascript" src="' + ToolkitCarto.ctx.staticPath + '/carto/js/' + jsTlkCModule[i]+'.js"></script>');

	// Importe les ressources TlkC
	for(var i = 0; i < jsTlkCResource.length; i++)
		document.write('<script type="text/javascript" src="' + ToolkitCarto.ctx.staticPath + '/carto/js/resources/' + jsTlkCResource[i]+'.js"></script>');
}
importJavascript();

/**
* @name ready
* @event
* @description
* Initialise la TlkC au chargement du DOM par l'intermédiaire de l'évènement ready de jQuery.
*/
jQuery(document).ready(function () {
	
	ToolkitCarto.conf = TlkCConstantes;
	ToolkitCarto.conf.message = TlkCMessages;
	toolkitCarto	= new ToolkitCarto.api();	

	toolkitCarto.map.addPoi(ToolkitCarto.conf.layer.cible,{
	    icone       : ToolkitCarto.ctx.staticPath+"/carto/images/cible_picto",
		latitude	: tlk_reponseCarto.donnees.infosCarte.coordonneeCentreCarte.latitude,
		longitude	: tlk_reponseCarto.donnees.infosCarte.coordonneeCentreCarte.longitude,
		showNumber	: false
	});
	
	if(tlk_reponseCarto.donnees.petiteCarte){
		//suppression de la barre d'outils
		jQuery(ToolkitCarto.conf.identifiant.menuCarte).hide();
		jQuery(".tools-scale").hide();
		jQuery(".default-logo").hide();
	}
	
	//ajout des pois correspondants à la réponse.
	if(!tlk_reponseCarto.donnees.notAffichePastille && tlk_reponseCarto.lstInscriptions!=null ){
		for (var i = 0; i < tlk_reponseCarto.lstInscriptions.length; i++) {
			var inscription = tlk_reponseCarto.lstInscriptions[i];
			if(inscription){
				toolkitCarto.map.addPoi(ToolkitCarto.conf.layer.pastillage,{
					id			: inscription.noBloc,
			        icone       : ToolkitCarto.ctx.staticPath+"/carto/images/picto_"+(inscription.particulier?'pb':'pj'),
					latitude	: inscription.coordonnees.latitude,
					longitude	: inscription.coordonnees.longitude,
					contenu		: inscription.htmlBloc,
					particulier	: inscription.particulier==false?"":"true",
					supportInfo : false, // Informations enrichies
					labelDenom	: (inscription.labelDenom!=null?"<div class='gauche'></div><div class='middle'>"+(inscription.labelDenom.length>24?inscription.labelDenom.substr(0,21)+"...":inscription.labelDenom)+"<div class='droite'></div></div>":""),
					showNumber	: true
				});
			}		
		}
        toolkitCarto.map.layer[ToolkitCarto.conf.layer.pastillage].explode();
	}
	toolkitCarto.map.outil.setZoomActif(tlk_reponseCarto.donnees.niveauZoom);
	
	if(tlk_reponseCarto.donnees.vueAerienne){
		toolkitCarto.map.outil.toolsMode(new Mappy.api.map.ViewMode("photo"));
	} else {
		toolkitCarto.map.outil.toolsMode(new Mappy.api.map.ViewMode("map"));
	}
});

}else
	alert("Erreur à l'initialisation du token Mappy");

