//publick objects / vars neded for meaure to work.
var drawArrayX = new Array();
var drawArrayY = new Array();
var measureClickX = new Array();
var measureClickY = new Array();
var jg = new Array();
var jgDot = '';
var currentMeasure =0;
var theDist = 0;
var distanceArray = new Array();
var grandTotalDistanceInFeet = 0;

var clearMeasureFieldsOnly = false;
var numDecimals = 2;
var MapUnits;
var measuring = false;


function startMeasure() {
var measureContent = '';
//measureContent += '<form name="measureForm">';
measureContent += '<table border=0 class="toolTable" width="" cellpadding="2" cellspacing="0">\n';
measureContent += '<tr>\n';

measureContent += '<td align=right> <span class="settingsFont"> Total:</span></td>\n';
measureContent += '<td>\n';
measureContent += '<input class="measureTextboxes" type="text" name="totalMeasure" id="totalMeasure" size="13" value="0" style="text-align:center;" /></td>\n';
measureContent += '<td align=right><span class="settingsFont">Segment:</span><span class="mediumBlueFont"> </span></td>\n';
measureContent += '<td><input class="measureTextboxes" type="text" name="currentMeasure" size="13" id="currentMeasure" value="0" style="text-align:center;"  /></td>\n';
measureContent += '<td>\n';

measureContent += '<span class="settingsFont"> Units:</span><select name="select" class="measureTextboxes" onChange="swapMeasureUnits(this.value)">\n';
measureContent += '<option value="FEET">Feet</option>\n';
measureContent += '<option value="MILES">Miles</option>\n';
measureContent += '<option value="METERS">Meters</option>\n';
measureContent += '<option value="KILOMETERS">KM</option>\n';
measureContent += '</select></td>\n';
measureContent += '<td>';
measureContent += '<td>';
measureContent += '<td><span valign=middle class="smallWhiteFont">Area:</span> <input class="measureTextboxes" type="text" name="measureAreaTotal" size="13" id="measureAreaTotal" value="0" style="text-align:center;"  />';

measureContent += ' <select name="select" class="measureTextboxes" id="areaType" onChange="calculateArea()">\n';
measureContent += '<option value="acres" selected>Acres</option>\n';
measureContent += '<option value="sqFeet">Sq Ft</option>\n';
measureContent += '</select>';

measureContent += '</td>';
//<span valign=middle class="smallWhiteFont" id="measureAreaTotal"><span>

measureContent += '</td>';
measureContent += '<td><input name="clearMeasureFields" type="button" class="measureTextboxes" value="Clear" onClick="clearMeasureFieldsOnly=true; clearMeasure(); return false;" /></td>\n';

//measureContent += '<td><input name="area" type="button" class="settingsForms" value="Area" onClick="calculateArea(measureClickX,measureClickY); return false;" /></td>\n';
//calculateArea(measureClickX,measureClickY);

measureContent += '</tr>\n';
measureContent += '</table>\n';
//measureContent += '</form>\n';
addContentToSettingsLayer(measureContent);

}


function measureClick() {
	//if (drawArrayX.length ==0) { clearMeasure() } 
	measuring = true;
	document.onselectstart = function(){ return false }
	
	MapUnits =RESPONSE.MAPUNITS


	measureClickX.push(IMouse.coordX)
	measureClickY.push(IMouse.coordY)
	drawArrayX.push(IMouse.x);
	drawArrayY.push(IMouse.y);
	

	//alert(IMouse.x + " " + IMouse.y + " " + IMouse.coordX + " " + IMouse.coordY)
	measureClicks = drawArrayX.length -1;
	
	if (drawArrayX.length == 1)
	{
		
		//draw the initial dot for a visual reference
		jgDot = new jsGraphics(myMap.div.toString());
		jgDot.setColor("#ff0000"); // red
		jgDot.setStroke(4)
		jgDot.drawLine(drawArrayX[0], drawArrayY[0], drawArrayX[0] + 0.5, drawArrayY[0] + 0.5); 
		jgDot.paint();
	}
	
	else 
	{
		//create the drawing object
		jg[measureClicks] = new jsGraphics(myMap.div.toString());
		
		//draw the line
		jg[measureClicks].setColor("#000000"); // red
		jg[measureClicks].setStroke(2)
		jg[measureClicks].drawLine(drawArrayX[drawArrayX.length-2], drawArrayY[drawArrayY.length-2], drawArrayX[drawArrayX.length -1], drawArrayY[drawArrayY.length-1]); 
		
		//draw the text
		jg[measureClicks].setColor("#FF0000");
		jg[measureClicks].setFont("arial","15px",Font.ITALIC_BOLD);
		jg[measureClicks].drawString(drawArrayX.length -1,drawArrayX[drawArrayX.length -1],drawArrayY[drawArrayY.length -1] + 5);
	
		//paint on the screen
		jg[measureClicks].paint();
	}
	
		distanceArray.push(theDist);
		addAllDistance()
		dd = document.getElementById("totalMeasure").value;
		
		tt = parseFloat(dd) + currentMeasure;
		document.onselectstart = function(){ return true }
	
		document.getElementById("totalMeasure").value = tt;
		
		
		calculateArea()

		
		
}


function addAllDistance()
{
	var x = 0;
	grandTotalDistanceInFeet =0;
		 for (x in distanceArray)
		 {
			grandTotalDistanceInFeet += distanceArray[x]
		 }

}


function calcDistance(mX,mY) {
	
	clickCount =  measureClickX.length
	clickPointX = measureClickX
	clickPointY = measureClickY
	// Note: decimal are not hard coded to allow use with locales using commas instead of points.
	if (clickCount>0) {
		var mUnits = MapUnits;
		var mDistance = 0;
		var p = clickCount-1;
		var Lon1 = clickPointX[p] * Math.PI / 180;
		
		var Lon2 = mX * Math.PI / 180;
		var Lat1 = clickPointY[p] * Math.PI / 180;
		var Lat2 = mY * Math.PI / 180;
		
		var LonDist = Lon1-Lon2;
		var LatDist = Lat1-Lat2;
		if (mUnits=="DEGREES") {
			var A = Math.pow(Math.sin(LatDist / 2),2) + Math.cos(Lat1) * Math.cos(Lat2) * Math.pow(Math.sin(LonDist /2),2);
			//var A = Math.cos(Lat1) * Math.cos(Lat2) * Math.pow(Math.sin(LonDist /2),2);
			var C = 2 * Math.asin(Math.min(1, Math.sqrt(A)));
			var D = (3963 - 13 * Math.sin((Lat1 + Lat2) / 2)) * C
			mDistance = D * 5280;
			mUnits = "FEET";
		} else {
			var xD = Math.abs(mX - clickPointX[p]);
			var yD = Math.abs(mY - clickPointY[p]);
			mDistance = Math.sqrt(Math.pow(xD,2) + Math.pow(yD,2));
		}
		
		theDist = convertUnits(mDistance,mUnits,ScaleBarUnits);
		var u = Math.pow(10,numDecimals);
		currentMeasure = parseInt(theDist*u+(5/10))/u;


		document.getElementById("currentMeasure").value = currentMeasure;
		//document.getElementById("totalMeasure").value += document.getElementById("currentMeasure").value;// addCommasAndRound(tt,2);
		
		
	
		
	}
}


// convert the amounts to new units
function convertUnits(theDist1,mUnits,sUnits) {
	// Note: decimal are not hard coded to allow use with locales using commas instead of points.	
	var theDist = parseFloat(theDist1);
	var mDistance = theDist;
	//alert(theDist);
	if (mUnits == "FEET") {
		if (sUnits=="MILES") {
			mDistance = theDist / 5280;
		} else if (sUnits == "METERS") {
			mDistance = theDist * (3048/10000);
		} else if (sUnits == "KILOMETERS") {
			mDistance = theDist * (3048/10000000);
		
		}
		
		//else if (sUnits == "FEET") { mDistance = theDist1 }
	} else {
		if (sUnits=="MILES") {
			mDistance = theDist * (6213711922/10000000000000);
		} else if (sUnits == "FEET") {
			mDistance = theDist * (3280839895/1000000000);
		} else if (sUnits == "KILOMETERS") {
			mDistance = theDist / 1000;
		}
	}
	var u = Math.pow(10,numDecimals);
	//alert(u);
	if (!isNav) mDistance = parseInt(mDistance * u + (5/10)) / u
	//alert(mDistance);
	return mDistance;
}



function swapMeasureUnits(mm)
{
 ScaleBarUnits = mm;
 mtDistance = grandTotalDistanceInFeet;
 convertTheTotal = convertUnits(mtDistance,MapUnits,ScaleBarUnits);
 document.getElementById("totalMeasure").value = convertTheTotal;
 tt =  document.getElementById("totalMeasure").value;
 
}


//function to calculate the area of a polygon.
function calculateArea(va)
{
	var area = 0;
	var nPlusOne;
	
	var acres = false;
	var areaType = document.getElementById("areaType").value;
	if (areaType == "acres"){	acres = true;}
	
	
	for(var n = 0; n < measureClickX.length; n++ )
	{
		if (n ==parseInt(measureClickX.length) -1) { nPlusOne = 0; }
		else { nPlusOne = n+1 }
		
		areaXDiff = measureClickX[nPlusOne] - measureClickX[n];
		areaYDiff = measureClickY[nPlusOne] - measureClickY[n];
		area += measureClickX[n] * areaYDiff - measureClickY[n] * areaXDiff;
	}
	area = 0.5 * area;
	area = Math.abs(area); // if -'ive then get abs.
	
	//if (acres) { area =  Math.round((((area) * 0.000023)) * 100000) / 100000;}
	if (acres) { area *= 0.000022957; }
		//shorten the area result.
		var areaNoRound = addCommasAndRound(area,4)
		document.getElementById("measureAreaTotal").value = areaNoRound;

 }






//Clear the Measure completly....
function clearMeasure()
{
	
	//Clear the obj
	if (drawArrayY.length > 0 )
	{
	jgDot.clear(); 
	}
	
	
	var currentMeasure = document.getElementById("currentMeasure");
	
	var totalMeasure = document.getElementById("totalMeasure");
	//if (currentMeasure || totalMeasure) {
	currentMeasure.value = 0;
	totalMeasure.value = 0;
	clearMeauerNumbers()

	//Clear the layer on screen. (div layer)
	if (!clearMeasureFieldsOnly)
	{
		//hideLayer("measure")
	}
	clearMeasureFieldsOnly = false;
	measuring = false;
	
}

function clearMeauerNumbers() {

	drawArrayX.length = 0;
	drawArrayY.length = 0;
	measureClickX.length = 0;
	measureClickY.length = 0;
	
	currentMeasure =0;
	theDist = 0;
	distanceArray.length = 0;
	grandTotalDistanceInFeet = 0;
	clearMeasureFieldsOnly = false;
	document.getElementById("measureAreaTotal").value = '0';


	
}



//============================================================
//		Start to draw a polygon.
//============================================================
var startPolyX
var startPolyY
var movePolyX;
var movePolyY;
var PolyXArray = new Array();
var PolyYArray = new Array();
var movePolyLine = new Array()
var newPolyX,newPolyY;
var isMoveing;




















/*
function startPoly() {
	
if (movePolyLine.length == 0) {
startPolyX = IMouse.x
startPolyY = IMouse.y


poly = new jsGraphics(myMap.div.toString());
		poly.setColor("#ff0000"); // red
		poly.setStroke(4)
		poly.drawLine(startPolyX, startPolyY, startPolyX + 1, startPolyY + 1); 
		poly.paint();
}
else {
	newPolyX = IMouse.x
	newPolyY = IMouse.y
	addNewPolyLine(IMouse.x,IMouse.y) 
}
		
		document.onmousemove = movePoly;
}

function movePoly() {
	movePolyX = IMouse.x;
	movePolyY = IMouse.y
	
	if (isMoveing) { movePolyLine[0].clear(); }
	if (!movePolyLine[0]) {
	movePolyLine[0] = new jsGraphics(myMap.div.toString());
		movePolyLine[0].setColor("#ff0000"); // red
		movePolyLine[0].setStroke(5)
		}
		movePolyLine[0].drawLine(newPolyX, newPolyY, movePolyX, movePolyY); 
		movePolyLine[0].paint();
		isMoveing=true;
	
}

function addNewPolyLine(lastX,lastY) 
{
	
	var pLength = movePolyLine.length;
	newPolyX = IMouse.x;
	newPolyY = IMouse.y
	window.status = lastX+" "+ lastY+" "+ newPolyX+" "+newPolyY;
	movePolyLine[pLength] = new jsGraphics(myMap.div.toString());
		movePolyLine[pLength].setColor("#ff0000"); // red
		movePolyLine[pLength].setStroke(2)
		
		movePolyLine[pLength].drawLine(lastX, lastY, newPolyX, newPolyY); 
		movePolyLine[pLength].paint();
	
}


*/


