// XML di risposta
var xmlResponseItinerario=null;
//Lista dei punti
var geometrypointlistItinerario=[];

//Contatore per evitare problemi di caching della richiesta su IE
var count = 0;

/* *************************************
 * Avvia la ricerca dell'itinerario per localit�
 ************************************ */
function ricercaItinerarioPerLocSubmit(alter) {
	
		//Visualizziamo il messaggio di "elaborazione in corso"
	loadingMsg.startLoad();
    
  	var start = $('startGeom').value;
  	var point1 = $('viaPoint1Geom').value;
  	var point2 = $('viaPoint2Geom').value;
  	var end = $('endGeom').value;
  	
	var url = urlSentieriWebBackend;
	
/*	if (MW.Proxy && url.startsWith("http")) {
		url = MW.Proxy + MW.Util.escapeUri(url);
	}*/

	if (start==null || start=="")
	{
		//Nascondiamo il messaggio di "elaborazione in corso"
		loadingMsg.stopLoad();
		alert(tappaInizialeNotSetted);
		
		return 0;
	} 
	
	var geom_list = "&geomLoc1="+start;
	if (point1 != null && point1!="")
	{
		geom_list += "&geomLoc2="+point1;
	} 
	if (point2 != null && point2!="")
	{
		geom_list += "&geomLoc3="+point2;
	} 
	if (end==null || end=="")
	{
		//Nascondiamo il messaggio di "elaborazione in corso"
		loadingMsg.stopLoad();
		alert(tappaFinaleNotSetted);
		
		return 0;
	} 
	geom_list += "&geomLoc4="+end;
	
  	var par = "?locale=" +language+"&command=TrovaItinerario" + geom_list;
  	
  	if (alter)
  	{
  		par += "&alternative=true&c=" + count;
  		//aumentiamo il contatore per evitare che la richiesta venga messa in cache (soprattuto da IE)
  		count = count +1;  	
  	}
  	else
  	{
  		//Nuova ricerca itinerario: azzeriamo il contatore
  		count = 0;
  	}
  	  	  
    new OpenLayers.Ajax.Request(url + par,
                     {   method: 'get',
                         parameters: null,
                         onComplete: successTrovaItinerarioLocFunc,
                         onFailure: failureTrovaItinerarioLocFunc
                      }
                     );
}

/* *************************************
 * Funzione richiamata se la ricerca per il trova localit� per denominazione funziona 
 * correttamente
 ************************************ */
function successTrovaItinerarioLocFunc(request) {
	
	var xml = request.responseText;	
	var html = MW.transformXml(xml,xslItinerario);
		
	html=html.replace(/&lt;/g , "<");
	html=html.replace(/&gt;/g , ">");

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

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

/* *************************************
 * Funzione per mostrare l'itinerario in mappa
 ************************************ */
function showItinerarioOnMap() {
	if(xmlResponseItinerario.getElementsByTagName('tratte')[0]!= null)
	{
		//Visualizziamo il messaggio di "elaborazione in corso"
		loadingMsg.startLoad();
		
		if (vectorLayer != null)
		{
			vectorLayer.destroyFeatures();
		}
		else
		{
			var options = {
			   displayInLayerSwitcher:false
			}	
		    vectorLayer = new OpenLayers.Layer.Vector("Itinerario",options);
		    
		    map.addLayer(vectorLayer);
		}
	
		var style= {
			        strokeColor: "yellow",
			        strokeOpacity: 0.7,
			        strokeWidth: 5,
			        pointRadius: 6,
			        pointerEvents: "visiblePainted"
			   };
	
	    var itinerario = xmlResponseItinerario.getElementsByTagName('tratte')[0];
	    var geometrie = itinerario.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 showDetailItinerario() {
	
	//Visualizziamo il messaggio di "elaborazione in corso"
	loadingMsg.startLoad();
	
	setItinerarioScaricoCartografiaData();
	detailHTML = MW.transformXml(xmlToString(xmlResponseItinerario),xslDettaglioItinerario);

/*
	$('detailPageDiv').innerHTML = html;
	closeLocalitaMenu();
*/
	
	//Nascondiamo il messaggio di "elaborazione in corso"
	loadingMsg.stopLoad();	
	
	stampa();
	
}

/* *************************************
 * Funzione per il set dei dati per lo scarico cartografia
 ************************************ */
function setItinerarioScaricoCartografiaData() {
    idsTratte = (xmlResponseItinerario.getElementsByTagName('ids_tratte')[0]).firstChild.nodeValue;
    layerNameScaricoCartografia = "Itinerario";
}

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

/* *************************************
 * Funzione per il setting di un punto di ricerca
 ************************************ */
function setPoint(ele) {
	if (map.getZoom() < 3)
	{
		//Pulisco il radio button
		clearRadio();
		alert(selItinPerPuntiDisabled + ' ' + scaleArray[3]);		
	}
	else
	{
		//disattivo l'info
		switchInfo("false");
		//attivo il controllo per la gestione della ricerca della localit� a partire da punto
		navToolBar.activateControl(navToolBar.controls[3]);
		setPointControl.ele = ele;
	}
	
}

/* *************************************
 * Funzione per disabilitare il set point control
 ************************************ */
function disableSetPoint() {
	//attivo il controllo del pan
	navToolBar.activateControl(navToolBar.controls[0]);
	//Pulisco il radio button
	clearRadio();
}

/* *************************************
 * Funzione per la pulizia del radio button
 ************************************ */
function clearRadio() {
	var radioElements = document.getElementsByName("itinerariRadio");
	for (var i=0;i<radioElements.length;i++)
	{
		radioElement = radioElements[i];
		radioElement.checked = false;
	}
}

/* *************************************
 * Funzione per la pulizia dei campi contenenti le geometrie
 ************************************ */
function clearGeom() {
	document.getElementById('startGeom').value='';
    document.getElementById('viaPoint1Geom').value='';
    document.getElementById('viaPoint2Geom').value='';
    document.getElementById('endGeom').value='';
}

/* *************************************
 * Funzione per aggiungere un marker alla mappa
 ************************************ */
function addMarker() {
	//disableSetPoint();
	//Se esiste il layer dei marker lo ripulisco
	if (markersLayer!=null)
	{
		markersLayer.clearMarkers();
	}
	//altrimenti lo creo
	else
	{
		var options = {
		   displayInLayerSwitcher:false
		}	
		 markersLayer = new OpenLayers.Layer.Markers( "Markers",options);
         map.addLayer(markersLayer);
	}
		
	switch (setPointControl.ele){
		case 1:
			{
				$('startGeom').value = setPointControl.searchValue;
				$('partenzaRadioImg').src = OpenLayers.ImgPath + "sentieri/partenza.gif";	
                                $('itinerariRadio2').checked= true;
                                setPointControl.ele = 2;
				break;
			}
		case 2:
			{
				$('viaPoint1Geom').value = setPointControl.searchValue; 
				$('tappa1RadioImg').src = OpenLayers.ImgPath + "sentieri/tappa1.gif";				
                                $('itinerariRadio3').checked= true;
                                setPointControl.ele = 3;
				break;
			}
		case 3:
			{
				$('viaPoint2Geom').value = setPointControl.searchValue;
				$('tappa2RadioImg').src = OpenLayers.ImgPath + "sentieri/tappa2.gif";
                                $('itinerariRadio4').checked= true;
                                setPointControl.ele = 4;
				break;
			}
		case 4:
			{
				$('endGeom').value = setPointControl.searchValue;
				$('arrivoRadioImg').src = OpenLayers.ImgPath + "sentieri/arrivo.gif";
				break;
			}
	}
		
 
	for (var i=1;i<5;i++)
	{
		var iconUrl;
		switch (i){
			case 1:
				{
					iconUrl=OpenLayers.ImgPath + "sentieri/partenza.gif";
					break;
				}
			case 2:
				{
					iconUrl=OpenLayers.ImgPath + "sentieri/tappa1.gif";
					break;
				}
			case 3:
				{
					iconUrl=OpenLayers.ImgPath + "sentieri/tappa2.gif";
					break;
				}
			case 4:
				{
					iconUrl=OpenLayers.ImgPath + "sentieri/arrivo.gif";
					break;
				}
		}
		if (setPointControl.geomPointList[i] != null)
		{		
		    var options = {
		        lonlat: setPointControl.geomPointList[i],
		        iconSize: new OpenLayers.Size(15,15),
		        iconUrl: iconUrl
		    };		  
		    var marker = new MW.Marker(options);
		    markersLayer.addMarker(marker);
		}
	}
}

function test() {
}
