//aggiunto da SM
toolHandlers.measure = new Object();
toolHandlers.measure.down  = toolMeasureDown;
toolHandlers.measure.move  = toolMeasureMove;
toolHandlers.measure.start = toolMeasureStart;
toolHandlers.measure.stop  = toolMeasureStop;
toolHandlers.measure.up    = toolMeasureUp;

//variabili utilizzate per disegnare un poligono sopra la mappa con VML (Sergio Morstabilini)
var absolutePointsX_MEAS = new Array();
var absolutePointsY_MEAS = new Array();
var relativePointsX_MEAS = new Array();
var relativePointsY_MEAS = new Array();
var realPointsX_MEAS = new Array();
var realPointsY_MEAS = new Array();
var nClick_MEAS = 0;
var stringaCoordinate_MEAS='';
var poligonoChiuso_MEAS = false;

var currentArea_MEAS = 0;
var currentPerimeter_MEAS = 0;

var welcomeMessage = "Clicca sulla mappa per disegnare l'area.\n";
//welcomeMessage += "Il risultato verra' mostrato nella status bar del browser.\n\n";
welcomeMessage += "Premere nuovamente il bottone sulla toolbar per una nuova misura.";

function toolMeasureDown(evento) {
  if (toolButtaEvento) {
//    toolButtaEvento = false;
    return false;
  } else {
    //mapStartZoomBox(evento);
    	if (poligonoChiuso_MEAS == true) {
   		stringaCoordinate_MEAS = '';
   		poligonoChiuso_MEAS = false;
   		nClick_MEAS = 0;
  	}
	if (stringaCoordinate_MEAS.length>0) {
	//alert(stringaCoordinate_MEAS);
	stringaCoordinate_MEAS = stringaCoordinate_MEAS.substr(0, stringaCoordinate_MEAS.length-3)
	//alert(stringaCoordinate_MEAS);

	}
	absolutePointsX_MEAS[nClick_MEAS] = mouseX;
	absolutePointsY_MEAS[nClick_MEAS] = mouseY;
	relativePointsX_MEAS[nClick_MEAS] = mouseX - mappaLeft;
	relativePointsY_MEAS[nClick_MEAS] = mouseY - mappaTop;
	//var minX = document.processa.minX.value;
	//var minY = document.processa.minY.value;
	//alert("coordinate assolute:" + absolutePointsX_MEAS[nClick_MEAS] + ", " + absolutePointsY_MEAS[nClick_MEAS]);
	//alert("coordinate relative:" + relativePointsX_MEAS[nClick_MEAS] + ", " + relativePointsY_MEAS[nClick_MEAS]);
	////////mapReorderCoords();  //cosa fa?????????????????????????????
	var g_extent = mapGetExtent();
    	var g_coord = mapGetCoordinateGeografiche(relativePointsX_MEAS[nClick_MEAS], relativePointsY_MEAS[nClick_MEAS], mappaWidth, mappaHeight, g_extent);
	realPointsX_MEAS[nClick_MEAS] = g_coord[0];
	realPointsY_MEAS[nClick_MEAS] = g_coord[1];
	//alert("coordinate reali:" + realPointsX_MEAS[nClick_MEAS] + ", " + realPointsY_MEAS[nClick_MEAS]);

	//costruzione della stringa 'path' da inserire nello shape VML
	if (stringaCoordinate_MEAS=='') {
		stringaCoordinate_MEAS +='m ' + relativePointsX_MEAS[nClick_MEAS] +', ' + relativePointsY_MEAS[nClick_MEAS];
		stringaCoordinate_MEAS += '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_MEAS(relativePointsX_MEAS[nClick_MEAS], relativePointsY_MEAS[nClick_MEAS]);
		nClick_MEAS++
	} else if (stringaCoordinate_MEAS.indexOf('l')<0) {
		stringaCoordinate_MEAS += ' l ' + relativePointsX_MEAS[nClick_MEAS] +', ' + relativePointsY_MEAS[nClick_MEAS];
		nClick_MEAS++;
		chiudiPoligonoMeasure();

	} else {
		stringaCoordinate_MEAS += ', ' + relativePointsX_MEAS[nClick_MEAS] +', ' + relativePointsY_MEAS[nClick_MEAS];
		nClick_MEAS++;
		chiudiPoligonoMeasure();
	}
    return false;
  }
}


function disegnaPunto_MEAS(x, y) {
	nascondiPoligonoMeasure()
	var testo = '';
	testo += '<div id="areaMeasure">';
	testo += '<v:shape style="filter:alpha(opacity=70);position:absolute;width:1000;height:1000" strokecolor="ff0000" strokeweight="1" fillcolor="#ff0000">';
	testo += '	<v:path v="';
	testo += 'm ' + (x-3) + ', ' + (y-3) + ' l ' + (x+3) + ', ' + (y-3) + ', ' + (x+3) + ', ' + (y+3) + ', ' + (x-3) + ', ' + (y+3) + ' x e';
	testo += '">';
	testo += '	</v:shape>';
	testo += '</div>';

	//this.contenitoreareaMeasure.insertAdjacentHTML('beforeEnd', testo);
	this.theVMLCanvas.insertAdjacentHTML('afterBegin', testo);

}



function toolMeasure_ShowResults(reset) {
  if (reset) {
    window.status="";
  } else {
    window.status += "    ";
  }
  window.status += "Misura del poligono disegnato: A="+currentArea_MEAS;
  window.status += "  (m2), 2p="+currentPerimeter_MEAS+" (m).";
}

function toolMeasure_getResultsString() {
	if (nClick_MEAS<=2) {
    return toolMeasure_getResultsString_AsDistance();
	}	else {
  	return toolMeasure_getResultsString_AsArea();
	}
}

function toolMeasure_getResultsString_AsArea() {
	var retval = "";
  retval = "A="+currentArea_MEAS;
  retval += "(m2), 2p="+currentPerimeter_MEAS+"(m).";
  return retval;
}

function toolMeasure_getResultsString_AsDistance() {
	var retval = "";
  retval = "distanza = "+currentPerimeter_MEAS+" (m)";
  return retval;
}

function toolMeasureMove(evento) {
	toolMeasure_ShowResults(false);
}

function toolMeasureStart(id) {
  //alert(welcomeMessage);
  annullaDisegnoMeasure();
  toolLongActionStart(id);
  mostraMessaggioIniziale();
}

function toolMeasureStop(id) {
  annullaDisegnoMeasure();
  toolLongActionStop(id);
}

function toolMeasureUp(evento) {
  if (toolButtaEvento) {
    toolButtaEvento = false;
    return false;
  } else {
//   mapStopZoomBox(evento);
    return false;
  }
}

function chiudiPoligonoMeasure() {
	//  if (nClick_MEAS<=2) {    //nClick_MEAS è l'indice del prossimo punto. Se nClick_MEAS == 2 vuol dire che sono stati inseriti solo i punti 0 e 1.
	stringaCoordinate_MEAS += 'x e';
	//alert (stringaCoordinate_MEAS);
	currentArea_MEAS=Math.round(calcolaAreaPoligono_MEAS()*100)/100;
	currentPerimeter_MEAS=Math.round(calcolaPerimetroPoligono_MEAS()*100)/100;
	disegnaAreaMeasure();
}



function azzeraDisegnoMeasure(){
	poligonoChiuso_MEAS=true;
	nascondiPoligonoMeasure();
	currentArea_MEAS=0;
	currentPerimeter_MEAS=0;
}


function annullaDisegnoMeasure() {
  nClick_MEAS = 0;
  stringaCoordinate_MEAS = '';
  nascondiPoligonoMeasure();
}

function nascondiPoligonoMeasure() {
	var div = document.getElementById('areaMeasure');
	if (div) {
		div.parentNode.removeChild(div);
	}
}

function disegnaAreaMeasure() {
	nascondiPoligonoMeasure();
	var testo = '';
	testo += '<div id="areaMeasure" >';
	testo += '<v:shape style="filter:alpha(opacity=70);position:absolute;width:1000;height:1000" strokecolor="ff0000" strokeweight="1" fillcolor="#ff0000">';
	testo += '	<v:path v="';
	//testo += 'm 0,0 l 100,100, 200,0 x e';
	testo += stringaCoordinate_MEAS;
	testo += '" />';
	testo += '	</v:shape>';
	testo += '<v:roundrect arcsize="0.1" style="filter:alpha(opacity=80);position:absolute;left:20;top:20;width:200;height:40;" strokecolor="black" strokeweight="1" fillcolor="#DDDDDD" ><v:textbox style="text-align:center;text-valign:middle; font-weight:bold;font-family:verdana;font-size:10">'+toolMeasure_getResultsString()+'</v:textbox></v:roundrect>';
	testo += '</div>';

	//this.contenitoreareaMeasure.insertAdjacentHTML('beforeEnd', testo);
	this.theVMLCanvas.insertAdjacentHTML('afterBegin', testo);
	toolMeasure_ShowResults(true);
}

function mostraMessaggioIniziale() {
	nascondiPoligonoMeasure();
	var testo = '';
	testo += '<div id="areaMeasure">';
	testo += '<v:roundrect arcsize="0.1" style="filter:alpha(opacity=80);position:absolute;left:20;top:20;width:300;height:50;" strokecolor="black" strokeweight="1" fillcolor="#DDDDDD" >';
	testo += '<v:textbox style="text-align:left;text-valign:middle; font-weight:bold;font-family:verdana;font-size:10">';
	testo += welcomeMessage;
	testo += '</v:textbox></v:roundrect>';
	testo += '</div>';

	//this.contenitoreareaMeasure.insertAdjacentHTML('beforeEnd', testo);
	this.theVMLCanvas.insertAdjacentHTML('afterBegin', testo);
	toolMeasure_ShowResults(true);
}


function calcolaAreaPoligono_MEAS() {
	/*nClick_MEAS = 3;
	realPointsX_MEAS[0] = 16000;
	realPointsY_MEAS[0] = 1000;
	realPointsX_MEAS[1] = 16100;
	realPointsY_MEAS[1] = 1000;
	realPointsX_MEAS[2] = 16050;
	realPointsY_MEAS[2] = 1100;*/

	var areaPoligono = 0;
	var x1, y1, y2;
	for (var i=0; i<nClick_MEAS; i++) {
		if (i==0) {
			x1 = realPointsX_MEAS[i];
			y1 = realPointsY_MEAS[nClick_MEAS -1];
			y2 = realPointsY_MEAS[i+1];
		} else if (i == nClick_MEAS-1) {
			x1 = realPointsX_MEAS[i];
			y1 = realPointsY_MEAS[i-1];
			y2 = realPointsY_MEAS[0];
		} else {
			x1 = realPointsX_MEAS[i];
			y1 = realPointsY_MEAS[i-1];
			y2 = realPointsY_MEAS[i+1];
		}
		if (nClick_MEAS > 2){
			areaPoligono += x1 * (y1 -y2);
		}
	}
	areaPoligono = Math.abs(areaPoligono/2);
	//alert("area = " + areaPoligono);
 return areaPoligono;
}

function calcolaPerimetroPoligono_MEAS() {
	var retval = 0;
	var x1, x2, y1, y2;
  // i lati sono n-1
	for (var i=0; i<nClick_MEAS-1; i++) {
    var deltax = realPointsX_MEAS[i]-realPointsX_MEAS[i+1];
    var deltay = realPointsY_MEAS[i]-realPointsY_MEAS[i+1];
    retval += Math.sqrt(deltax*deltax+deltay*deltay);
	}
 return retval;
}
