// XML di risposta
var xmlResponsePersorso=null;
//Lista dei punti
var geometrypointlist=[];

/* *************************************
 * Avvia la ricerca del percorso per denominazione
 ************************************ */
function ricercaPercorsoPerDenomSubmit() {
	
	//Visualizziamo il messaggio di "elaborazione in corso"
	loadingMsg.startLoad();
    
  	var denom = $('namePercInput').value;
  	
	var url = urlSentieriWebBackend;
	
/*	if (MW.Proxy && url.startsWith("http")) {
		url = MW.Proxy + MW.Util.escapeUri(url);
	}*/
	
  	var par = "?locale=" +language+"&command=TrovaPercorsoPerDenom" + 
  				"&denom_perc="+denom+
  				"&ente=01"
  	
    new OpenLayers.Ajax.Request(url + par,
                     {   method: 'get',
                         parameters: null,
                         onComplete: successTrovaPercorsoDenomFunc,
                         onFailure: failureTrovaPercorsoDenomFunc
                      }
                     );
}

/* *************************************
 * Avvia la ricerca del percorso per identificativo
 ************************************ */
function ricercaPercorsoPerCodiceSubmit(codice) {
	
	//Visualizziamo il messaggio di "elaborazione in corso"
	loadingMsg.startLoad();
    
	var url = urlSentieriWebBackend;
	
  	var par = "?locale=" +language+"&command=TrovaPercorsoPerCodice" + 
  				"&codice="+codice+
  				"&ente=01"
  	
    new OpenLayers.Ajax.Request(url + par,
                     {   method: 'get',
                         parameters: null,
                         onComplete: successTrovaPercorsoCodiceFunc,
                         onFailure: failureTrovaPercorsoCodiceFunc
                      }
                     );
}
/* *************************************
 * Avvia la ricerca del percorso vicino localit�
 ************************************ */
function ricercaPercorsoVicinoLocSubmit() {

	//Visualizziamo il messaggio di "elaborazione in corso"
	loadingMsg.startLoad();
    
  	var geometry = $('locPercInputGeom').value;
  	var durataMax = $('durPercInput').value;
  	var difficoltaMax = $('diffPercInput').value;
  	
	var url = urlSentieriWebBackend;
	
	if (MW.Proxy && url.startsWith("http")) {
		url = MW.Proxy + MW.Util.escapeUri(url);
	}
	
  	var par = "?locale=" +language+"&command=TrovaPercorsoVicinoLoc" + 
  				"&geometry_point="+geometry+
  				"&durata_max="+durataMax+
  				"&diffic_max="+difficoltaMax
  	
    new OpenLayers.Ajax.Request(url + par,
                     {   method: 'get',
                         parameters: null,
                         onComplete: successTrovaPercorsoDenomFunc,
                         onFailure: failureTrovaPercorsoDenomFunc
                      }
                     );
}

/* *************************************
 * Funzione richiamata se la ricerca per il trova percorso per denominazione funziona 
 * correttamente
 ************************************ */
function successTrovaPercorsoDenomFunc(request) {
	var xml = request.responseText;

	var html = MW.transformXml(xml,xslPercorsi);
	html=html.replace(/&lt;/g , "<");
	html=html.replace(/&gt;/g , ">");

	//Nascondiamo il messaggio di "elaborazione in corso"
	loadingMsg.stopLoad();
    
	$('resultsContentsDiv').innerHTML = html;
	showResultsDiv('true');
	
	xmlResponsePersorso = request.responseXML;
	if (!xmlResponsePersorso || request.fileType!="XML") {
		xmlResponsePersorso = OpenLayers.parseXMLString(request.responseText);
	}
}

/* *************************************
 * Funzione richiamata se la ricerca per il trova percorso per denominazione fallisce
 ************************************ */
function failureTrovaPercorsoDenomFunc(request) {
	$('resultsContentsDiv').innerHTML = errorOnSearch;
	
	//Nascondiamo il messaggio di "elaborazione in corso"
	loadingMsg.stopLoad();
    
	showResultsDiv('true');
}

/* *************************************
 * Funzione richiamata se la ricerca per il trova percorso per codice funziona 
 * correttamente
 ************************************ */
function successTrovaPercorsoCodiceFunc(request) {
	var xml = request.responseText;

	xmlResponsePersorso = request.responseXML;
	if (!xmlResponsePersorso || request.fileType!="XML") {
		xmlResponsePersorso = OpenLayers.parseXMLString(request.responseText);
	}
	
	//Nascondiamo il messaggio di "elaborazione in corso"
	loadingMsg.stopLoad();
    
	showPercorsoOnMap(0);
}

/* *************************************
 * Funzione richiamata se la ricerca per il trova percorso per codice fallisce
 ************************************ */
function failureTrovaPercorsoCodiceFunc(request) {
	
	//Nascondiamo il messaggio di "elaborazione in corso"
	loadingMsg.stopLoad();
    
	alert('Problemi durante la visualizzazione del percorso');
}

/* *************************************
 * Funzione per mostrare il percorso in mappa
 ************************************ */
function showPercorsoOnMap(pos) {
	
	//Visualizziamo il messaggio di "elaborazione in corso"
	loadingMsg.startLoad();
	
	if (vectorLayer != null)
	{
		this.vectorLayer.destroyFeatures();
	}
	else
	{
		var options = {
		   displayInLayerSwitcher:false
		}	
	    vectorLayer = new OpenLayers.Layer.Vector("Percorsi",options);
	    map.addLayer(vectorLayer);
	}

	var style= {
		        strokeColor: "yellow",
		        strokeOpacity: 0.7,
		        strokeWidth: 5,
		        pointRadius: 6,
		        pointerEvents: "visiblePainted"
		   };

    var percorso = xmlResponsePersorso.getElementsByTagName('percorso')[pos];
    var geometrie = percorso.getElementsByTagName('geometria');
    var minx=map.getMaxExtent().right;
    var miny=map.getMaxExtent().top;
    var maxx=map.getMaxExtent().left;
    var maxy=map.getMaxExtent().bottom;
    for (j=0; j<geometrie.length;j++)
    {
		geometrypointlist = [];
    	var geometria = geometrie[j];
	    var posNL = geometria.getElementsByTagName('punto');
	    for (i=0; i<posNL.length; i++)
	    {
	            var posEL = posNL[i].firstChild.nodeValue;
	            // punto iniziale dell'istruzione
	            var x = posEL.substring(0,posEL.indexOf(' '));
	            var y = posEL.substring(posEL.indexOf(' '));
	            x = parseFloat(x);
	            y = parseFloat(y);
	            var newPoint = new OpenLayers.Geometry.Point(x,y);
	            geometrypointlist.push(newPoint);
	            
	            if (minx > x)
	            {
	            	minx = x;
	            }
	            if (miny > y)
	            {
	            	miny = y;
	            }
	            if (maxx < x)
	            {
	            	maxx = x;
	            }
	            if (maxy < y)
	            {
	            	maxy = y;
	            }
   		}
		var lineFeature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(geometrypointlist),null,style);
		
		vectorLayer.addFeatures([lineFeature]);
    }
	var bounds = new OpenLayers.Bounds(minx,miny,maxx,maxy);
	
	//Nascondiamo il messaggio di "elaborazione in corso"
	loadingMsg.stopLoad();
	
	map.zoomToExtent(bounds);
		
}

/* *************************************
 * Funzione per il setting dei dati sul div del dettaglio
 ************************************ */
function showDetailPercorso(pos) {
	//Visualizziamo il messaggio di "elaborazione in corso"
	loadingMsg.startLoad();
	
	setPercorsoScaricoCartografiaData(pos);
    var percorso = xmlResponsePersorso.getElementsByTagName('percorso')[pos];

	detailHTML = MW.transformXml(xmlToString(percorso),xslDettaglioPercorso);
	
	
/*
	$('detailPageDiv').innerHTML = html;
	closeLocalitaMenu();
*/

	//Nascondiamo il messaggio di "elaborazione in corso"
	loadingMsg.stopLoad();
	
	stampa();
		
}


/* *************************************
 * Trasforma un xml in una stringa
 ************************************ */
function xmlToString(elem){
	
	var serialized;
	
	try {
		// XMLSerializer exists in current Mozilla browsers
		serializer = new XMLSerializer();
		serialized = serializer.serializeToString(elem);
	} 
	catch (e) {
		// Internet Explorer has a different approach to serializing XML
		serialized = elem.xml;
	}
	
	return serialized;
}

/* *************************************
 * Funzione per il set dei dati dello scarico cartografia
 ************************************ */
function setPercorsoScaricoCartografiaData(pos) {
    var percorso = xmlResponsePersorso.getElementsByTagName('percorso')[pos];
    
    idsTratte = (percorso.getElementsByTagName('ids_tratte')[0]).firstChild.nodeValue;
    layerNameScaricoCartografia="Percorso";
    numPercorso = trim((percorso.getElementsByTagName('num')[0]).firstChild.nodeValue);
}

/* *************************************
 * Funzione per l'avvio dello scarico cartografia
 ************************************ */
function percorsoScaricoCartografia(pos) {
	var copyright = downloadCopyright;	
    setPercorsoScaricoCartografiaData(pos);
    copyrightAlert(urlSentieriWebBackend+"?locale=" +language+"&senum="+numPercorso+"&command=ScaricoCartografia&idsTratte="+idsTratte+"&layerName="+layerNameScaricoCartografia);    
}

