toolDescrizioni["polygon"]="Seleziona Area";
toolDescrizioni["carotaggio"]="Crea CDU";

toolImageOn["polygon"]="img/map/upnet/traccia_on.gif";
toolImageOff["polygon"]="img/map/upnet/traccia_off.gif";

toolHandlers.polygon = new Object();
toolHandlers.polygon.down  = toolPolygonDown;
toolHandlers.polygon.move  = toolPolygonMove;
toolHandlers.polygon.start = toolPolygonStart;
toolHandlers.polygon.stop  = toolPolygonStop;
toolHandlers.polygon.up    = toolPolygonUp;

/* polygon non usa per niente la form principale */
actionAction["polygon"] = "polygon_UNUSED";
actionOp["polygon"] = "polygon";
actionTarget["polygon"] = "targer_UNUSED"; // usato da refresh
ATR["polygon"] = "polygon_UNUSED";


//variabili utilizzate per disegnare un poligono sopra la mappa  
var absolutePointsX = new Array();
var absolutePointsY = new Array();
var relativePointsX = new Array();
var relativePointsY = new Array();
var realPointsX = new Array();
var realPointsY = new Array();
var nClick = 0;
var stringaCoordinate='';
var poligonoChiuso = false;

var myCoordinate;
var timerID;
var areaMax = 40000; //dimensione massima dell'area su cui si pu? effettuare il carotaggio


function toolPolygonDown(evento) {
  if (toolButtaEvento) {
  	return false;
  } else {  	
    if (poligonoChiuso == true) {
   	  stringaCoordinate = '';
   	  //PoligonoChiuso = false;
   	  poligonoChiuso = false;
   	  nClick = 0;
  	}
	if (stringaCoordinate.length>0) {
	  //alert(stringaCoordinate);
	  //tolgo 'x e' dalla fine di stringaCoordinate
	  stringaCoordinate = stringaCoordinate.substr(0, stringaCoordinate.length-3)	
	}	

	absolutePointsX[nClick] = mouseX;
	absolutePointsY[nClick] = mouseY;
	relativePointsX[nClick] = mouseX - mappaLeft;
	relativePointsY[nClick] = mouseY - mappaTop;
	var g_extent = mapGetExtent();	

	//alert(mappaWidth);
	//alert(mappaHeight);	

    var g_coord = mapGetCoordinateGeografiche(relativePointsX[nClick], relativePointsY[nClick], mappaWidth, mappaHeight, g_extent);
	realPointsX[nClick] = g_coord[0];
	realPointsY[nClick] = g_coord[1];

	coord_width = g_extent[1]-g_extent[0];
	coord_height = g_extent[3]-g_extent[2];
	
	/* INVECE DI COSTRUIRE LA STRINGA VML COSTRUISCO L'AXL E LO SALVO NELLA GFMAPLET
	//costruzione della stringa 'path' da inserire nello shape VML
	if (stringaCoordinate=='') {
		stringaCoordinate +='m ' + relativePointsX[nClick] +', ' + relativePointsY[nClick];
		stringaCoordinate += 'x e';    //devo aggiungerlo qui perch? in questo caso (il primo punto del poligono) non richiamo 'chiudiPoligono'
		//disegno un punto per mostrare all'utente dove ha cliccato. Dal secondo punto in poi uso la funzione 'chiudiPoligono'
		disegnaPunto(relativePointsX[nClick], relativePointsY[nClick]);
		nClick++
	} else if (stringaCoordinate.indexOf('l')<0) {
		stringaCoordinate += ' l ' + relativePointsX[nClick] +', ' + relativePointsY[nClick]; 
		nClick++;
		chiudiPoligono();		
	} else {
		stringaCoordinate += ', ' + relativePointsX[nClick] +', ' + relativePointsY[nClick]; 
		nClick++;
		chiudiPoligono();
	}
	*/
	
	//var stringaAXL ="<?xml version=\"8.0\" encoding=\"ISO-8859-1\"?><AXLGLOBO><RESPONSE application=\"GFMAPLETScript\" code=\"0\"><FEATURES><FEATURE featureid=\"243\"><POLYGON><RING><POINT x=\"1585642.025\" y=\"5056402.51\" /><POINT x=\"1585599.887\" y=\"5056418.998\" /><POINT x=\"1585589.851\" y=\"5056422.856\" /><POINT X=\"1617548.57239387\" Y=\"5040743.02456566\" /></RING></POLYGON></FEATURE></FEATURES></RESPONSE></AXLGLOBO>";

	nClick++;	
	//document.carotaggio.axlGeometria.value = creaAXL();
	setGeometriaAttiva(creaAXL());
	disegnaAreaAXL(false);
    return false;
  }
}


function creaAXL() {
	var retVal = "";
	//alert("nClick = " + nClick);
	retVal = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><AXLGLOBO><RESPONSE application=\"GFMAPLETScript\" code=\"0\"><FEATURES><FEATURE>";
	if (nClick == 1) {
		retVal += "<MULTIPOINT><POINT x=\"" + realPointsX[0] + "\" y=\"" + realPointsY[0] + "\" /></MULTIPOINT>";
	} else if (nClick == 2) {
		retVal += "<POLYLINE><PATH><POINT x=\"" + realPointsX[0] + "\" y=\"" + realPointsY[0] + "\" /><POINT x=\"" + realPointsX[1] + "\" y=\"" + realPointsY[1] + "\" /></PATH></POLYLINE>";
	} else {
		retVal += "<MULTIPOLYGON><POLYGON><RING>";
		for (var i = 0; i < nClick; i++) {
			retVal += "<POINT X=\"" + realPointsX[i] + "\" Y=\"" + realPointsY[i] + "\" />";
		}
		retVal += "</RING></POLYGON></MULTIPOLYGON>";
	}
	retVal += "</FEATURE></FEATURES></RESPONSE></AXLGLOBO>";
	return retVal;
}

function toolPolygonMove(evento) {
}

function toolPolygonStart(id) {
  annullaDisegno();
  toolLongActionStart(id);
/*
  toolHandlers[window.document.processa.op.value].stop(window.document.processa.op.value);
  toolSetOperazione(idO);
  winChangeImage(toolDescrizione,Gimgpath + idO + '_desc.gif');
  toolAttivaImmagine(idO + 'Img',Gimgpath + idO + '_on.gif');
  return false;
  */
}

function toolPolygonStop(id) {
  //annullaDisegno();
  toolLongActionStop(id);
  /*form_setAction('refresh');
  winChangeImage(toolDescrizione,Gimgpath + 'blank_desc.gif');
  toolAttivaImmagine(idO + 'Img',Gimgpath + idO + '_off.gif');
  return false;*/
}

function toolPolygonUp(evento) {
  if (toolButtaEvento) {
    toolButtaEvento = false;
    return false;
  } else {
//   mapStopZoomBox(evento);
    return false;
  }
}

function chiudiPoligono() {
  //  if (nClick<=2) {    //nClick ? l'indice del prossimo punto. Se nClick == 2 vuol dire che sono stati inseriti solo i punti 0 e 1.
  stringaCoordinate += 'x e';
  //alert (stringaCoordinate);
  disegnaArea(); 
  if (calcolaAreaPoligono() > areaMax) { 
    alert("L'area selezionata e' troppo estesa! L'ultimo punto aggiunto verra' rimosso.");
    rimuoviUltimoPunto();
  }   
}

//procedura per la rimozione dell'ultimo punto dell'area disegnata dall'utente
//la funzione ? chiamata dall'utente tramite GUI o in modo automatico quando l'area selezionata
//? troppo estesa
function rimuoviUltimoPunto() {
	if (nClick == 0) {
		//nothing
	} else if (nClick == 1) {
		azzeraDisegno();
	} else {
		nClick--;
		///document.carotaggio.axlGeometria.value = creaAXL();
		setGeometriaAttiva(creaAXL());
		disegnaAreaAXL(false);		
	}
	
	/*
  //elimino l'ultimo coordinata aggiunta, quindi faccio il substring fino alla penultima virgola
  //alert(stringaCoordinate);
  if ((nClick == 1) || (nClick == 0)) {
    //cancello tutto
    azzeraDisegno();
  } else if (nClick == 2) {
      //cancella il secondo punto    
      stringaCoordinate = stringaCoordinate.substring(0, stringaCoordinate.lastIndexOf('l')-1);
      disegnaPunto(relativePointsX[0], relativePointsY[0]);
      nClick--;      
    } else {
      //elimino l'ultimo coordinata aggiunta, quindi faccio il substring fino alla penultima virgola
      stringaCoordinate = stringaCoordinate.substring(0, stringaCoordinate.lastIndexOf(','));
      stringaCoordinate = stringaCoordinate.substring(0, stringaCoordinate.lastIndexOf(','));
      nClick--;		//nClick va decrementato prima di chiamare chiudiPoligono()
      chiudiPoligono();
    }  	
	*/
}


function azzeraDisegno(){
  poligonoChiuso=true;  
  nascondiVML();
 	setGeometriaAttiva("");
	disegnaAreaAXL(false);
}


function annullaDisegno() {
  nClick = 0;
  stringaCoordinate = '';
  nascondiVML();
}


//chiamata al servizio web che effettua il carotaggio
function chiamaSWCarotaggio() {

	//var axl = document.carotaggio.axlGeometria.value;	
	//leggo il valore axl dalla form della GFMaplet_FullPage
	var axl = getGeometriaAttiva();	
	document.carotaggio.axlGeometria.value = axl;
	if ((axl == null) || (axl=="") || (axl.length < 2)) {
		//alert("length " + axl.length):	
		alert("Impossibile determinare l'area di interrogazione del Piano Regolatore");
	} else {		
		
		// codice non pių necessario dalla versione 2.4.0 dell'urbanplannerWEB
		//document.carotaggio.urlMappa.value = document.getElementById("laMappa").src;
		//document.carotaggio.larghezzaMappa.value = document.processa.MapImageX.value;
		//document.carotaggio.altezzaMappa.value = document.processa.MapImageY.value;

		var dbDaInterrogare = "";
		
		var numeroCheckBoxes = document.carotaggio.chbNorme.length;				
		if (eval(numeroCheckBoxes) == null) {
			//alert("null");
			//un solo checkbox, non faccio nessun altro controllo
			dbDaInterrogare = document.carotaggio.chbNorme.value;
		} else {		
			//alert("numeroCheckBoxes = " + eval(numeroCheckBoxes));		
			for (var i = 0; i < numeroCheckBoxes; i++) {
				if (document.carotaggio.chbNorme[i].checked) {				
					if (dbDaInterrogare.length == 0) {
						//aggiungo il primo elemento alla variabile dbDaInterrogare
						dbDaInterrogare = document.carotaggio.chbNorme[i].value;
					} else {
						//aggiungo altri elementi			
						dbDaInterrogare += "_" + document.carotaggio.chbNorme[i].value;
					}
				}
			}
		}
		
		//alert("dbDaInterrogare = " + dbDaInterrogare);
		document.carotaggio.dbDaInterrogare.value = dbDaInterrogare;
				
		if (dbDaInterrogare.length == 0) {
			alert("Si deve selezionare almeno un db da interrogare");
			return;
		}
		/*
		alert("norme: " + document.carotaggio.chbNorme.length);
		alert("norme: " + document.carotaggio.chbNorme.values);
		alert("norme: " + document.carotaggio.chbNorme.getValue);
		
		//setto il/i db da interrogare
		if (document.carotaggio.chbPrg.checked && document.carotaggio.chbPtcp.checked) {
			document.carotaggio.dbDaInterrogare.value = "prg_ptcp";
		} else if (document.carotaggio.chbPrg.checked ) {
			document.carotaggio.dbDaInterrogare.value = "prg";
		} else if (document.carotaggio.chbPtcp.checked ){
			document.carotaggio.dbDaInterrogare.value = "ptcp";
		} else {
			alert("Si deve selezionare almeno un db da interrogare");
			return;
		}
		*/
		//se ho un solo db da interrogare si deve togliere il seguente commento 
		///document.carotaggio.dbDaInterrogare.value = "prg";

		var upExtent = mapGetExtent();
		var upEnvelope = upExtent[0] + "," + upExtent[2] + "," + upExtent[1] + "," + upExtent[3];
		document.carotaggio.envelope.value = upEnvelope;
		

		if (document.carotaggio.cmbTipoInterrogazione[0].checked == true) {
			//piano vigente: data odierna e tipoInterrogazione = "vigente"
			document.carotaggio.giorno.value = carotaggio_getDay();			
			document.carotaggio.mese.value = carotaggio_getMonth();
			document.carotaggio.anno.value = carotaggio_getYear();
			document.carotaggio.tipoInterrogazione.value = document.carotaggio.cmbTipoInterrogazione[0].value;
			document.carotaggio.submit();
			
		} else if (document.carotaggio.cmbTipoInterrogazione[1].checked == true) {
			//piano con varianti adottate: data odierna e tipoInterrogazione = "varianti_adottate"
			document.carotaggio.giorno.value = carotaggio_getDay();			
			document.carotaggio.mese.value = carotaggio_getMonth();
			document.carotaggio.anno.value = carotaggio_getYear();
			document.carotaggio.tipoInterrogazione.value = document.carotaggio.cmbTipoInterrogazione[1].value;
			document.carotaggio.submit();			
			
		} 
		/*      dalla versione 2.4.0 dell'urbanPlannerWEB č stata tolta l'interrogazione storica
		else if (document.carotaggio.cmbTipoInterrogazione[2].checked == true) {
			document.carotaggio.tipoInterrogazione.value = document.carotaggio.cmbTipoInterrogazione[2].value;
			//controllo che la data della variante da interrogare sia valida
			//se e' valida, faccio il submit della form e chiamo il carotaggio			
			var strData = document.carotaggio.dtTxt.value;
			if (cal_prs_date1(strData)) {
				var strGiorno = strData.substring(0,strData.indexOf("/"));
				var strMese = strData.substring(strData.indexOf("/")+1, strData.lastIndexOf("/"));
				var strAnno = strData.substring(strData.lastIndexOf("/")+1, strData.length);
				document.carotaggio.giorno.value = strGiorno;
				document.carotaggio.mese.value = strMese;
				document.carotaggio.anno.value = strAnno;			
				document.carotaggio.submit();
			} else {			
				//alert("La data specificata non e' valida!");
				//non mostro messaggio di errore perch? viene gi? mostrato durante il controllo della data
			}						
		} */
		
		else {
			alert('Impossibile chiamare il servizio web per la creazione della CDU. Tipo di interrogazione non riconosciuto.');
		}
	}


}


function calcolaAreaPoligono() {        		
	var areaPoligono = 0;	
	var x1, y1, y2;
	for (var i=0; i<nClick; i++) {
		if (i==0) {
			x1 = realPointsX[i];
			y1 = realPointsY[nClick -1];
			y2 = realPointsY[i+1];
		} else if (i == nClick-1) {
			x1 = realPointsX[i];
			y1 = realPointsY[i-1];
			y2 = realPointsY[0];
		} else {
			x1 = realPointsX[i];
			y1 = realPointsY[i-1];
			y2 = realPointsY[i+1];
		}
		if (nClick > 2){
			areaPoligono += x1 * (y1 -y2);
		}
	}
	areaPoligono = Math.abs(areaPoligono/2);
	//alert("area = " + areaPoligono);
 return areaPoligono;
} 


function disegnaParticella(coordinate) {
 var numeroPunti = coordinate.length;
 if (numeroPunti > 2) {
	var g_extent = mapGetExtent();
 	var m_coord = null;
 	
	for (var i=0; i < numeroPunti; i++) {
		//alert ("ricevo le coordinate " + coordinate[i][0] + ", "  + coordinate[i][1]);
		/*alert(iWidth);
		alert(iHeight);
		alert(g_extent);*/
		m_coord = mapGetCoordinateMonitor(coordinate[i][0], coordinate[i][1], iWidth, iHeight, g_extent);
		//alert ("coordinate trasformate: " + m_coord[0] + ", "  + m_coord[1]);
		realPointsX[i] = coordinate[i][0];
		realPointsY[i] = coordinate[i][1];
		relativePointsX[i] = m_coord[0];
		relativePointsY[i] = m_coord[1];
		//alert ("aggiungo la coordinata " + relativePointsX[i] + ", "  + relativePointsY[i]);
	} 
	
	nClick = numeroPunti;
	stringaCoordinate = "m " +relativePointsX[0] + ", " + relativePointsY[0] + " l ";
	//aggiunta delle coordinate oltre il primo punto
	for (var y = 1; y < numeroPunti; y++) {
		stringaCoordinate = stringaCoordinate + ", " + relativePointsX[y] + ", " + relativePointsY[y];
	}
	chiudiPoligono();	 
	alert(stringaCoordinate);
 } else {
 alert("Impossibile disegnare la particella selezionata. Le coordinate della particella devono essere almeno 3.");
 }
}


//non so se esiste gia' una funzione getDay...
function carotaggio_getDay() {
	var today = new Date();	
	var retVal = today.getDate() < 10 ? "0" + today.getDate() : today.getDate()
	return retVal;
}


function carotaggio_getMonth() {
	var today = new Date();	
	var retVal = today.getMonth()+1 < 10 ? "0" + (today.getMonth()+1) : (today.getMonth()+1);
	return retVal;
}

function carotaggio_getYear() {
	var today = new Date();	
	if (today.getYear() < 1900) {
		//firefox
		return (today.getYear() + 1900) ;
	} else { 
		//IE
		return (today.getYear());
	}	
}

function carotaggio_init() {	
	document.carotaggio.dtTxt.value = carotaggio_getDay() + "/" + carotaggio_getMonth() + "/" + carotaggio_getYear();	
}



//da cancellare???? 10 aprile 2006

/*
function setCoordinateParticella(coordinate) {
	//setto la variabile globale myCoordinate, usata nel disegno della particella
	myCoordinate = coordinate;
	//var g_extent = mapGetExtent();
	//var deltaX = g_extent[1] - g_extent[0];
	clearInterval(timerID); 		
	//timerID = setInterval('checkExtent(deltaX)',50);
	timerID = setTimeout('drawParticellaFromCatview()',750);
}

//non pi? usata, da cancellare? (rivedere codice sul setInterval)
function checkExtent(deltaX) {
	var g_extent = mapGetExtent();
	var actualDeltaX = g_extent[1] - g_extent[0];
	alert("deltaX" + deltaX);
	alert("actualDeltaX" + actualDeltaX);
	if (deltaX != 0) {
		if (deltaX != actualDeltaX) {
			myDrawParticella();
			alert("l'extent ? cambiato");
			clearInterval(timerID); 
		} else {
			alert("extent non cambiato");
		}
	}

}


function drawParticellaFromCatview() {		
	coordinate = myCoordinate;
	//attiva modalit? disegno geometria con VML; serve a nascondere la mappa quando seleziono
	//un altro tool;
	toolStartOp("polygon")	
	
	var numeroPunti = coordinate.length;
	var g_extent = mapGetExtent();
 	var m_coord = null;
 	
	for (var i=0; i < numeroPunti; i++) {	
		
		m_coord = mapGetCoordinateMonitor(coordinate[i][0], coordinate[i][1], mappaWidth, mappaHeight, g_extent);
		realPointsX[i] = coordinate[i][0];
		realPointsY[i] = coordinate[i][1];
		relativePointsX[i] = m_coord[0];
		relativePointsY[i] = m_coord[1];
	} 
	
	nClick = numeroPunti;
	//primo punto
	stringaCoordinate = "m " +relativePointsX[0] + ", " + relativePointsY[0] + " l ";
	//secondo punto
	stringaCoordinate = stringaCoordinate + relativePointsX[1] + ", " + relativePointsY[1];	
	//aggiunta delle coordinate oltre il secondo punto
	for (var y = 2; y < numeroPunti; y++) {
		stringaCoordinate = stringaCoordinate + ", " + relativePointsX[y] + ", " + relativePointsY[y];
	}
	chiudiPoligono();	 
	
}
*/


