/**************************
            Ajax
/*************************/
/**
 * Wrapper for Ajax requests (sent by measuring tools only)
 *
 * @param str strParams - Parameters to send with the request.
*/
function do_MeasuringAjax(strParams) {
    document.getElementById('ajax_results_id').value = "measuring_results";

    var strUrl = 'http://' + strDomain + '/' + strAjaxPath + 'ajax_measuring.asp';

		var strReqParams = "mapwidth=" + document.MapForm.mapwidth.value + "&mapheight=" + document.MapForm.mapheight.value + "&Left=" + document.MapForm.Left.value + "&Bottom=" + document.MapForm.Bottom.value + "&Right=" + document.MapForm.Right.value + "&Top=" + document.MapForm.Top.value;
		strParams = (strParams == "") ? strReqParams : strParams + "&" + strReqParams;


    var objAjax = new AJAXInteraction(strUrl, cb_genericAjax, "measuring_results");
    objAjax.doPost(strParams);
    start_AjaxIndicator();

    //-- Debug
    //MM_openBrWindow(strUrl + "?" + strParams, "Measuring_Tool_Debug", "width=500,height=700,scrollbars=yes,status=1,toolbar=1");
};



/**************************
        THE TOOLS
Called when drawing is finished.
**************************/
function mt_RectangleTool(x1, y1, x2, y2) {
    ms_setRect(x1, y1, x2, y2);
    TB_setLastTool(TOOL_RECT);

    var strParams = "tool=" + TOOL_RECT + "&x1=" + x1 + "&y1=" + y1 + "&x2=" + x2 + "&y2=" + y2;
    do_MeasuringAjax(strParams);
};

function mt_LineTool(x1, y1, x2, y2) {
    ms_setXY(x1, y1);
    ms_setXY2(x2, y2);
    TB_setLastTool(TOOL_LINE);

    var strParams = "tool=" + TOOL_LINE + "&x1=" + x1 + "&y1=" + y1 + "&x2=" + x2 + "&y2=" + y2;
    do_MeasuringAjax(strParams);
};

function mt_PolylineTool(pointsX, pointsY) {
    ms_setPoly(pointsX.join(";"), pointsY.join(";"));
    TB_setLastTool(TOOL_POLYLINE);

    var strParams = "tool=" + TOOL_POLYLINE + "&mt_pointsX=" + pointsX.join(";") + "&mt_pointsY=" + pointsY.join(";");
    do_MeasuringAjax(strParams);
};

function mt_PolygonTool(arrPointsX, arrPointsY) {
    ms_setPoly(arrPointsX.join(";"), arrPointsY.join(";"));
    TB_setLastTool(TOOL_POLYGON);

    var strParams = "tool=" + TOOL_POLYGON + "&mt_pointsX=" + arrPointsX.join(";") + "&mt_pointsY=" + arrPointsY.join(";");
    do_MeasuringAjax(strParams);
};



/**************************
        Miscellaneous
**************************/
/*
 * Convert a value between units of measurement.
 *
 * @param intValue - The value in kilometres or square kilometres (ie: the original value)
 * @param strToUnit - The unit to convert to.
 * @param strElmID - ID of the element to place the result in.
*/
function convertMeasurement(intValue, strToUnit, strElmID) {
	var strLabel = "";

	switch(strToUnit) {
		//-- KM
		case "feet":
			intValue *= 3280.839895013;
			strLabel = "ft";
			break;

		case "kilometres":
			intValue = Number(intValue);
			strLabel = "km";
			break;

		case "metres":
			intValue *= 1000;
			strLabel = "m";
			break;

		case "miles":
			intValue *= 0.621371192;
			strLabel = "mi";
			break;

		case "yards":
			intValue *= 1093.613298338;
			strLabel = "yards";
			break;

		//-- Square KM
		case "square feet":
			intValue *= 10763910.416709721;
			strLabel = "sq ft";
			break;

		case "square kilometres":
			intValue = Number(intValue);
			strLabel = "sq km";
			break;

		case "square metres":
			intValue *= 1000000;
			strLabel = "sq m";
			break;

		case "square miles":
			intValue *= 0.386102159;
			strLabel = "sq mi";
			break;

		case "square yards":
			intValue *= 1195990.04630108;
			strLabel = "sq yards";
			break;

		case "hectares":
			intValue *= 100;
			strLabel = "h";
			break;

		case "acres":
			intValue *= 247.105381467;
			strLabel = "acres";
			break;

		default:
			$(strElmID).innerHTML = "Invalid Unit";
	}

	intValue = (intValue < 1) ? intValue.toFixed(3) : intValue.toFixed(0);
	$(strElmID).innerHTML = formatNumber(intValue) + " " + strLabel;
};

/**
 * Takes the measuring tool results for the last tool and builds them into a simple text layout that gets passed
 * to map_output_A3.asp for displaying in the textarea.
*/
function mt_prepareForPrint() {
	var strMeasuringOutput = $("strMeasuringPrintOutput");

	switch(document.MapForm.lstmeasuring_tool.value) {
		case TOOL_LINE:
			strMeasuringOutput.value = "From: " + $("from_lat").innerHTML + ", " + $("from_long").innerHTML;
			strMeasuringOutput.value += " To: " + $("to_lat").innerHTML + ", " + $("to_long").innerHTML + "\n";
			strMeasuringOutput.value += "Total Distance = " + $("lineDistance").innerHTML + "\n";
			break;

		case TOOL_POLYLINE:
			strMeasuringOutput.value = "";
			var intTtlPoints = $("ttlPoints").innerHTML;
			for(var i = 1; i<=intTtlPoints; i++) {
				if(typeof $("point" + i) != "undefined")
					strMeasuringOutput.value += "Point " + i + " = " + $("point" + i).innerHTML + "\n";
			}

			strMeasuringOutput.value += "Total Length = " + $("polylineLength").innerHTML + "\n";
			break;

		case TOOL_POLYGON:
		case TOOL_RECT:
			strMeasuringOutput.value = "";
			var intTtlPoints = $("ttlPoints").innerHTML;
			for(var i = 1; i<=intTtlPoints; i++) {
				if(typeof $("point" + i) != "undefined")
					strMeasuringOutput.value += "Point " + i + " = " + $("point" + i).innerHTML + "\n";
			}

			strMeasuringOutput.value += "Perimeter = " + $("polygonPerimeter").innerHTML + "\n";
			strMeasuringOutput.value += "Area = " + $("polygonArea").innerHTML + "\n";
			break;
	}
};