/**
 * Fonctions utiles pour Kogis.
 * @author Nicolas Fagart
 * @version du 19/10/2004 : Supression du clearSelection lors du choix des outils...
 */

var PathSite = getPath(document.location.pathname);
var KogisCurrentTool = "zoom";
var Geonote_Surfacique = "Dessin surfacique";
var Geonote_Lineaire = "Dessin lineaire";
var Geonote_Ponctuelle = "Dessin ponctuel";
var Geonote_Symboliqe = "Dessin symbolique";

// get directory path of URL
function getPath(theFullPath) {
 var theSlash = theFullPath.lastIndexOf("/");
 var theDir = theFullPath.substring(0,theSlash);
 if (theDir==null) theDir="";
 //theDir = theDir + "/";
 return theDir;

}

/** 
 * Passe en mode Zoom Avant fixe : appelé par le bouton de la visioneuse
 */
function zoomAvantFixe()
{
	InitBouton();
	getAppletKogis().doDynamicFunction('com.esrifrance.kogis.client.functions.FZoomINFixed');
}

/** 
 * Passe en mode Zoom Arrière fixe : appelé par le bouton de la visioneuse
 */
function zoomArriereFixe()
{
	KogisCurrentTool = '';
	InitBouton();
	getAppletKogis().doDynamicFunction('com.esrifrance.kogis.client.functions.FZoomOUTFixed');
}

/** 
 * Passe en mode Zoom Avant : appelé par le bouton de la visioneuse
 */
function zoomAvant()
{
	KogisCurrentTool = 'zoom';
	ChangeBouton('com.esrifrance.kogis.client.functions.FZoom');
	getAppletKogis().doDynamicFunction('com.esrifrance.kogis.client.functions.FZoom');
}

/** 
 * Passe en mode Zoom Arriere : appelé par le bouton de la visioneuse
 */
function zoomArriere()
{	
	KogisCurrentTool = 'zoommoins';
	ChangeBouton('com.esrifrance.kogis.client.functions.FZoomOut');
	getAppletKogis().doDynamicFunction('com.esrifrance.kogis.client.functions.FZoomOut');
}

/** 
 * Passe en mode Pan : appelé par le bouton de la visioneuse
 */
function pan()
{	
	KogisCurrentTool = 'deplacement';
	ChangeBouton('com.esrifrance.kogis.client.functions.FPan');
	getAppletKogis().doDynamicFunction('com.esrifrance.kogis.client.functions.FPan');
}


/** 
 * Revient à l'extension précédente
 */
function vuePrecedente()
{
	KogisCurrentTool = '';
	InitBouton();
	getAppletKogis().doDynamicFunction('com.esrifrance.kogis.client.functions.FZoomPrec');
}

/** 
 * Repasse à l'extension suivante
 */
function vueSuivante()
{
	KogisCurrentTool = '';
	InitBouton();
	getAppletKogis().doDynamicFunction('com.esrifrance.kogis.client.functions.FZoomNext');
}

/** 
 * Zoom Global
 */
function vueGlobale()
{
	getAppletKogis().doCmd('ZoomAll');
}


/** 
 * Outil de dmesure de distance
 */
function outilMesure()
{
	KogisCurrentTool = 'mesure';
	ChangeBouton('com.esrifrance.kogis.client.functions.FMeasure');
	getAppletKogis().doDynamicFunction('com.esrifrance.kogis.client.functions.FMeasure');
}

/** 
 * Passe en mode Identification / Sélection simple (par point)
 */
function outilIdentification()
{
	KogisCurrentTool = 'infos';
	ChangeBouton('com.esrifrance.kogis.client.functions.FIdentify');
	getAppletKogis().doDynamicFunction('');
	doSelectALLEx('1');
//	clearSelection();
}


/** 
 * Vide la sélection actuelle.
 */
function viderSelection()
{
	KogisCurrentTool = '';
	InitBouton();
	getAppletKogis().doDynamicFunction('');
	clearSelection();
}


/** 
 * Passe en mode Sélection par polygone (doubleclic pour finir le polygone)
 */
function selectionParPolygone()
{
	getAppletKogis().doDynamicFunction('');
	getAppletKogis().setValue('IdentifyMethod', 'POLYGON');
	getAppletKogis().doDynamicFunction('com.esrifrance.kogis.client.functions.FIdentify');
//	clearSelection();
}


/** 
 * Passe en mode Sélection par Rectangle (drag)
 */
function selectionParRectangle()
{
	if ( ( getAppletKogis().getValue("ActiveLayer") == Geonote_Surfacique ) || 
	      ( getAppletKogis().getValue("ActiveLayer") == Geonote_Lineaire ) || 
	      ( getAppletKogis().getValue("ActiveLayer") == Geonote_Ponctuelle ) || 
	      ( getAppletKogis().getValue("ActiveLayer") == Geonote_Symboliqe ) ) {
		alert("Désolé, cette fonctionnalité n'est pas valable pour cette couche active"); 
		return;
	}
	
	KogisCurrentTool = 'rectangle';
	ChangeBouton('com.esrifrance.kogis0.client.functions.FSelectRectangle');
	getAppletKogis().doDynamicFunction('');
	//alert('com.esrifrance.kogis0.client.functions.FSelectRectangle');
	getAppletKogis().doDynamicFunction('com.esrifrance.kogis0.client.functions.FSelectRectangle');
//	clearSelection();
}


/** 
 * Passe en mode HyperLien : ouvre le MapTips d'hyperlien lors du survol d'un objet
 */
function outilHyperlien()
{
	getAppletKogis().doDynamicFunction('');
	getAppletKogis().doDynamicFunction('com.esrifrance.kogis0.client.functions.JSMapTip?hyperlinkCallBackFunction');
//	clearSelection();
}


/** 
 * Passe en mode Outil Infobulle
 */
function outilInfoBulle()
{
	KogisCurrentTool = 'infob';
	ChangeBouton('com.esrifrance.kogis0.client.functions.JSMapTip');
	getAppletKogis().doDynamicFunction('');
	getAppletKogis().doDynamicFunction('com.esrifrance.kogis0.client.functions.JSMapTip?infoBulleCallBackFunction');
//	clearSelection();
}


/** 
 * Passe en mode HyperLien : ouvre le MapTips d'hyperlien lors du survol d'un objet
 */
function outilMiniFiche()
{
	getAppletKogis().doDynamicFunction('');
	getAppletKogis().doDynamicFunction('com.esrifrance.kogis0.client.functions.JSMapTip?minificheCallBackFunction');
//	clearSelection();
}


/** 
 * Fonction de CallBack appelée par l'outil hyperlien
 * @param bAffiche : affiche ou masque l'infobulle ("true" ou "false") 
 * @param x : position en x (pixel) de l'infobulle
 * @param y : position en y (pixel) de l'infobulle
 */
function infoBulleCallBackFunction(sAffiche, sX ,sY ){

	var urlHyperlinkMapTip = "jsp/maptips_description.jsp";
	showMapTipLayer(sAffiche, sX ,sY , urlHyperlinkMapTip);
}

/** 
 * Fonction de CallBack appelée par l'outil hyperlien
 * @param bAffiche : affiche ou masque l'infobulle ("true" ou "false") 
 * @param x : position en x (pixel) de l'infobulle
 * @param y : position en y (pixel) de l'infobulle
 */
function hyperlinkCallBackFunction(sAffiche, sX ,sY ){

	var urlHyperlinkMapTip = "jsp/hyperlink_maptips.jsp";
	showMapTipLayer(sAffiche, sX ,sY , urlHyperlinkMapTip);
}

/** 
 * Fonction de CallBack appelée par l'outil MiniFiche
 * @param bAffiche : affiche ou masque l'infobulle ("true" ou "false") 
 * @param x : position en x (pixel) de l'infobulle
 * @param y : position en y (pixel) de l'infobulle
 */
function minificheCallBackFunction(sAffiche, sX ,sY ){

	var urlHyperlinkMapTip = "jsp/maptips_description.jsp";
	showMapTipLayer(sAffiche, sX ,sY , urlHyperlinkMapTip);

}


/** 
 * Afficher ou masque la zone d'Infobulle correspondant à la jsp dont l'url est passée en paramètre.
 * @param bAffiche : affiche ou masque l'infobulle
 * @param x : position en x (pixel) de l'infobulle
 * @param y : position en y (pixel) de l'infobulle
 */
function showMapTipLayer(sAffiche, sX ,sY, urlMalTip ){
	
	mapTipLayer = document.getElementById("LayerMapTips");
	var x = parseInt(sX);
	var y = parseInt(sY);

	if (sAffiche == "false"){
		setMapTipLayer(false);
		return;
	}

	// Affichage de l'infobulle : 
	var applet = getAppletKogis();
	
	// Déplacement de la layer HTML pour les MapTips :
	mapTipLayer.style.left  = x-2;
	mapTipLayer.style.top   = y-5;

	var xReel = parseInt( applet.screenToMapX( x ) );
	var yReel = parseInt( applet.screenToMapY( y ) );

	var url = "http://" + document.location.host + PathSite + "/";
	url = url + urlMalTip;
	url = url + "?x=" + xReel ;
	url = url + "&y=" + yReel ;
	url = url + "&objectClass=" + escape( applet.getValue("ActiveLayer") );

	//var test = openIT(url, 250, 500, null, null, 'MapTips');

	result = applet.loadURL(url);
	// alert("Resultat de la requête :" + result);
	mapTipLayer.innerHTML = result;
	setMapTipLayer(true);
}


function setMapTipLayer(state)
{
	var LayerMapTips = document.getElementById('LayerMapTips');
	var IfrRef = document.getElementById('DivShim');
	if(state)
	{
		LayerMapTips.style.display = "block";
		IfrRef.style.width = LayerMapTips.offsetWidth;
		IfrRef.style.height = LayerMapTips.offsetHeight;
		IfrRef.style.top = LayerMapTips.style.top;
		IfrRef.style.left = LayerMapTips.style.left;
		IfrRef.style.zIndex = LayerMapTips.style.zIndex - 1;
		IfrRef.style.display = "block";
	}
	else
	{
		LayerMapTips.style.display = "none";
		IfrRef.style.display = "none";
	}
}


/** 
 * Passe en mode Sélection par Ligne
 */
function selectionParLigne()
{
	getAppletKogis().setValue('IdentifyMethod', 'LINE');
	getAppletKogis().doDynamicFunction('com.esrifrance.kogis.client.functions.FIdentify');
//	clearSelection();
}


/** 
 * Affiche la Table attributaire pour la couche active (tous les éléments sélectionnés)
 */
function vueTable()
{
	var sActiveLayer = getAppletKogis().getValue( "ActiveLayer" );
	if ((sActiveLayer == null) || (sActiveLayer == "") ){
		alert("Aucune couche n'est active, impossible de voir la vue tabulaire !");
		return;
	}
	var whereClause = "(2>1)";
	
	var url = getAppletKogis().getServletURL();
	url += "&htmlrequest=getObjectAttribute";
	url += "&objectClass=" + escape(sActiveLayer);
	url += "&whereClause=" + escape(whereClause);
	url += "&beginFeature=0";
	
	// Ici, si on veut tous les éléments : changer le 25 en 999999
	url += "&maxFeature=25";

	openIT( url, defaultFicheW, defaultFicheH, null, null, 'VueTabulaire' );
}



/** 
 * Fonction permettant de changer d'echelle (appelée lors du changement de la liste déroulante)
 * @param nouvelleEchelle inverse de l'echelle.
 */
function changeEchelle(nouvelleEchelle)
{
	if ( nouvelleEchelle == "" ) return;
	doMVCmd( "ZoomScale&x=0&y=0&scale=" + nouvelleEchelle );
}


/** 
 * Changement de la couche active (appelée lors du changement de la liste déroulante)
 * @param nom de la couche
 */
function selectCouche(nomCouche)
{
	getAppletKogis().setValue( "ActiveLayer", nomCouche );
}



/**
 * Localise ET affiche la fiche attributaire correspondant aux paramètres
 * @param layerName : nom de la couche
 * @param objectID : identifiant de l'objet (ou null si requête par clause Where)
 * @param whereClause (optionnel) clause Where pour exécuter une recherche d'objets par exemple : "POPULATION>1000"
 * Si la clause where est renseignée, objectID doit être null ou "".
 * @param bufferDistance (optionnel, mais associé à objectBufferClass) : entier utilisé pour les recherches spatiales par buffer autour des éléments sélectionnés de la couche objectBufferClass
 * @param objectBufferClass (optionnel, à renseigner en même temps bufferDistance
 */
function localiserEtVoirFicheInfo(objectClass, objectID, whereClause, bufferDistance , objectBufferClass )
{
    localiser(objectClass, objectID, whereClause, bufferDistance , objectBufferClass );
    voirFicheInfo(objectClass, objectID, whereClause, bufferDistance , objectBufferClass );
}


/**
 * Sélectionne l'objet objectID de la couche layerName et zoome dessus.
 * Le nom de la couche peut contenir des espaces et caractères spéciaux (il sera encodé)
 * @param layerName : nom de la couche
 * @param objectID : identifiant de l'objet (ou null si requête par clause Where)
 * @param whereClause (optionnel) clause Where pour exécuter une recherche d'objets par exemple : "POPULATION>1000"
 * Si la clause where est renseignée, objectID doit être null ou "".
 * @param bufferDistance (optionnel, mais associé à objectBufferClass) : entier utilisé pour les recherches spatiales par buffer autour des éléments sélectionnés de la couche objectBufferClass
 * @param objectBufferClass (optionnel, à renseigner en même temps bufferDistance
 */
function localiser(objectClass, objectID, whereClause, bufferDistance , objectBufferClass )
{
	// alert("localiser("+objectClass+","+ objectID+","+ whereClause+","+ bufferDistance+","+ objectBufferClass+")");

	var mvApplet = getAppletKogis();
	if ( mvApplet == null ) {
		alert( "Je ne trouve pas l'applet!" );
		return;
	}

	var commande = "addObjectToSelection" + 
		"&objectClass=" + escape(objectClass) + 
		"&zoomTo=2" ;

	if ( (objectID != null) && (objectID != 'null') &&  (objectID != '') )
		commande += "&objectID=" + escape(objectID);

	if ( (whereClause != null) && (whereClause != 'null') &&  (whereClause != '') )
		commande += "&whereClause=" + escape(whereClause);

	if ( (bufferDistance != null) && (bufferDistance != 'null') &&  (bufferDistance != '') )
		commande += "&bufferDistance=" + escape(bufferDistance);

	if ( (objectBufferClass != null) && (objectBufferClass != 'null') &&  (objectBufferClass != '') )
		commande += "&objectBufferClass=" + escape(objectBufferClass);

	// alert("localiser() : commande = " +commande);
	mvApplet.doCmd(commande);
}


/**
 * Affiche la fiche d'info de l'objet objectID de la couche layerName
 * @param layerName : nom de la couche
 * @param objectID : identifiant de l'objet (ou null si requête par clause Where)
 * @param whereClause (optionnel) clause Where pour exécuter une recherche d'objets par exemple : "POPULATION>1000"
 * Si la clause where est renseignée, objectID doit être null ou "".
 * @param bufferDistance (optionnel, mais associé à objectBufferClass) : entier utilisé pour les recherches spatiales par buffer autour des éléments sélectionnés de la couche objectBufferClass
 * @param objectBufferClass (optionnel, à renseigner en même temps bufferDistance
 */
function voirFicheInfo(objectClass, objectID, whereClause, bufferDistance , objectBufferClass )
{
	// alert(objectClass);
	var mvApplet = getAppletKogis();
	if ( mvApplet == null ){
		alert( "Applet Kogis introuvable !" );
		return;
	}

	if ( objectClass == "" ){
		alert( "Couche inconnue lors de la recherche de la fiche d'info de l'objet " + objectID, "voirFicheInfo" );
		return;
	}

	var url = mvApplet.getServletURL();
	url += "&htmlrequest=getObjectAttribute";
	url += "&objectClass=" + escape(objectClass);

	if ( (objectID != null) && (objectID != 'null') &&  (objectID != '') )
		url += "&objectID=" + escape(objectID);

	if ( (whereClause != null) && (whereClause != 'null') &&  (whereClause != '') ){
		url += "&whereClause=" + escape(whereClause);
	}

	if ( (bufferDistance != null) && (bufferDistance != 'null') &&  (bufferDistance != '') )
		url += "&bufferDistance=" + escape(bufferDistance);

	if ( (objectBufferClass != null) && (objectBufferClass != 'null') &&  (objectBufferClass != '') )
		url += "&objectBufferClass=" + escape(objectBufferClass);

//	alert("voirFicheInfo() : url = " +url);

	openIT( url, defaultFicheW, defaultFicheH, null, null, 'Résultat' );
}



/**
 * Affiche la fiche d'édition de la légende pour la couche passée en paramètre.
 * @param layerID : Identifiant de la couche
 */
function voirFicheLegende(layerID)
{
	
	var urlFicheLegende = PathSite + "/jsp/theme/layer/properties.jsp?layer=" + layerID;
	openIT( urlFicheLegende, 500, 600, null, null, 'Légende' );
}

function rafraichir()
{
	//alert("Rafraichir");
	var mvApplet = getAppletKogis();
	if ( mvApplet == null ){
		alert( "Applet Kogis introuvable !" );
		return;
	}
	mvApplet.doCmd('');	
	//alert("Fin Rafraichir");
}



/**
 * Fonction permettant de récupérer l'Applet Kogis, depuis n'importe quelle fenêtre fille ou frames.
 * @return l'applet Kogis ou Null 
 */	
function getAppletKogis()
{
	if ( MVApplet!= null)
		return MVApplet;

	var win = top;
	while (win != null){
		if (win.MVApplet != null)
			return win.MVApplet

		if (win.top.MVApplet != null)
			return win.top.MVApplet

		if (win.frame_visionneuse != null)
			if (win.frame_visionneuse.MVApplet != null)
				return win.frame_visionneuse.MVApplet;
		
		win = win.opener;
	}
	alert("Impossible de trouver l'Applet Kogis !", "Erreur");
	return null;
}
	

/**
 * Fonction permettant d'ouvrir la fenêtre de Log depuis une page quelquonque.
 */	
function afficherLog()
{
	var sURL = "servlet/com.esrifrance.kogis.server.KogisServlet?viewlog=1";
	openIT(sURL, 800, 600, null, null, 'Log');	
}



/**
 * Fonction permettant de lancer l'assistant de jointure
 */	
function jointureDynamique()
{
	openNamedFiche( PathSite + "/jsplib/dynamicjoin/step1.jsp", null, null, "AssistantJointure" );
}

/**
 * Fonction permettant d'enregistrer le projet en cours
 */	
function enregistrerProjet()
{
	openPopUpDroite( PathSite + "/jsp/enregistrer_projet.jsp", 400, 200, "Project" );
}

/**
 * Fonction permettant d'ouvrir un projet
 */	
function ouvrirProjet()
{
	openPopUpDroite( PathSite + "/jsp/ouvrir_projet.jsp", 400, 200, "Project" );
}

/**
 * Fonction permettant d'enregistrer un Géosignet
 */	
function enregistrerGeosignet()
{
	openPopUpDroite( PathSite + "/jsplib/geosignet/geosignet_save.jsp", 400, 200, "GS" );
}

/**
 * Fonction permettant de charger des géosignets
 */	
function chargerGeosignet()
{
	openPopUpDroite( PathSite + "/jsplib/geosignet/geosignet_load.jsp", 400, 200, "GS" );
}
/**
  * Ouverture d'une fenetre fille contenant l'image de la légende - Ajout Cyril le 27/07/2007
  */
	function openLegend()
	{
		var applet = MVApplet;
		if ( applet == null ) 
		{
			var url = getApplicationURL();
			url = url + "/servlet/com.esrifrance.kogis.server.KogisServlet?";
			url = url + "cmd=getlegend&lw=" + "200" + "&lh=" + "20";
			url = url + "";
			var legendWin = openIT(url, 300, 600, null, null, 'Legende');
		}
		else
		{
			var legendWin = openIT(applet.getLegendURL("280","80"), 300, 600, null, null, 'Legende');
		}
	}




function selCommunesFromCanton(CodeCanton){
	//alert("recherche des communes du canton " + CodeCanton);
	localiser('communes', null, "CANTON='"+CodeCanton+"'");
	voirFicheInfo('communes', null, "CANTON='"+CodeCanton+"'");
}

function selCantonFromCommune(CodeCanton){
	 //alert("recherche du canton " + CodeCanton);
	localiser('cantons', null, "NOM_MAJ='"+CodeCanton+"'");
	voirFicheInfo('cantons', null, "NOM_MAJ='"+CodeCanton+"'");
}

function selAccidentsFromRoute(idRoute){
//    alert("selAccidentsFromRoute : " + idRoute);
	localiser('complet', null, "IDROUTE='"+idRoute+"'");
	voirFicheInfo('complet', null, "IDROUTE='"+idRoute+"'");
}

function selBornesFromRoute(idRoute){
//    alert("selBornesFromRoute : " + idRoute);
	localiser('bornes', null, "IDROUTE='"+idRoute+"'");
	voirFicheInfo('bornes', null, "IDROUTE='"+idRoute+"'");
}


/**
 * Fonction permettant d'ouvrir la Visionneuse
 * Carto en Popup avec le thème et la carte passée en paramètre.
 * @param theme : le nom du thème
 * @param carte (optionnel)
 */	
function openVisionneuse(theme,carte){
	var urlVisio = PathSite + "/cadre_visionneuse.jsp?foo=foo";
	
	if (theme!=null)
		urlVisio = urlVisio + "&theme=" + theme;
	
	if (carte!= null)
		urlVisio = urlVisio + "&carte=" + carte;

     //============================================================================
     //Modification Cyril le 24/04/2007 : commentaire des lignes de vérification de la commune active pour charger la carte cadastre libre accès
     //============================================================================	
	//if (theme=='Cadastre')
	//    urlVisio = PathSite + "/cadre_visionneuse_cadastre.jsp?foo=foo";
		
	// alert(urlVisio);
	// Ouverture de la visionneuse :
	openIT(urlVisio, 1020, 710, 0, 0, 'Visionneuse');
}

// Ouverture d'une fiche
function openPopUpDroite(url,W,H,nom)
{
	LargE = window.screen.width;
        var X = LargE - W - 15;
        var Y = 25;
        if (nom=='') nom = 'PopUp_Geoloiret';
	openIT(url, W, H, X, Y, nom);
}		
	
function InitBouton()
{
	//alert(document.getElementById('zoom').src);
	document.getElementById('zoom').src = "img_visio/pict_zoom.gif";
	document.getElementById('deplacement').src = "img_visio/pict_depl.gif";				
	//document.getElementById('zoommoins').src = "img_visio/pict_moins.gif";	
	document.getElementById('mesure').src = "img_visio/pict_mesure.gif";
	document.getElementById('infob').src = "img_visio/pict_infob.gif";
	document.getElementById('infos').src = "img_visio/pict_info.gif";
	document.getElementById('rectangle').src = "img_visio/pict_sel_rect.gif";
	
	//document.getElementById('point').src = "img_visio/temp_symbol.gif";
	//document.getElementById('ligne').src = "img_visio/temp_line.gif";
	//document.getElementById('polygone').src = "img_visio/temp_polygon.gif";
	
}

function ChangeBouton(curF)
{
	//alert(	curF ) ;
	InitBouton();
	if(curF=="com.esrifrance.kogis.client.functions.FZoom")
	{
		document.getElementById('zoom').src = "img_visio/pict_zoom_f1.gif";
	} else	
	if (curF=="com.esrifrance.kogis.client.functions.FPan"){
		document.getElementById('deplacement').src = "img_visio/pict_depl_f1.gif";
	} else
	if(curF=="com.esrifrance.kogis.client.functions.FMeasure")
	{
		document.getElementById('mesure').src = "img_visio/pict_mesure_f1.gif";
	} else
	if (curF=="com.esrifrance.kogis.client.functions.FIdentify"){
		document.getElementById('infos').src = "img_visio/pict_info_f1.gif";
	} else
	if (curF=="com.esrifrance.kogis0.client.functions.JSMapTip"){
		document.getElementById('infob').src = "img_visio/pict_infob_f1.gif";
	} else
	if(curF=="com.esrifrance.kogis0.client.functions.FSelectRectangle")
	{
		document.getElementById('rectangle').src = "img_visio/pict_sel_rect_f1.gif";
	} 
}	
