﻿var m_currentDrawToolbarTool = "";
var m_drawToolbarImagePath = "images/";
var m_drawToolbarImageExtension = ".gif";
var m_drawDisplay = "MeasureDisplay";
var m_drawToolbarId = "MeasureToolbar";
var m_drawLengthsTotal = 0.0;
var m_drawAreasTotal = 0.0;
var m_drawXOffset = 0;
var m_drawYOffset = 0;
var m_DrawTypes = new Array();
m_DrawTypes[0] = "point";
m_DrawTypes[1] = "polyline";
m_DrawTypes[2] = "polygon";
var m_drawMoveFunction = null;
var m_drawCoords = "";
var m_drawLastCoords = "";
var m_drawMouseUpSet = false;

var m_drawToolbar = null;
var m_drawGraphicFeature = null;

// set current draw tool
function setDrawToolbarTool(type) {
    removeDrawToolbarTool();
	m_currentDrawToolbarTool = type.toLowerCase();
	//startDraw();
}

// set current measure tool
function removeDrawToolbarTool() {
	m_currentDrawToolbarTool = null;
	if (map!=null) {
	    map.remove_mouseUp(DrawCoordsMouseUp); 
		map.cancelGetGeometry();        
	}   
	//startDraw();
}

// measure tool is selected... call current type (polyline for distance, polygon for area)
function startDraw(type) {
//    setDrawToolbarTool(type);
    if (m_drawGraphicFeature != null){
        map.removeGraphic(m_drawGraphicFeature);
    }
    
	if (m_currentDrawToolbarTool=="point") {
		DrawPoint(map);
	}else if (m_currentDrawToolbarTool=="polygon") {
		DrawPolygon(map);
	}
    var message = "StartDrawGraphics";
    var context = "StartDrawGraphics";
    WebForm_DoCallback('__Page',message,processCallbackResult,context,postBackError,true);   
	if (!m_drawMouseUpSet) {
	    map.add_mouseUp(DrawCoordsMouseUp);
	    m_drawMouseUpSet = true;
	}
}

// Polyline Measure action ... for distances
function DrawPolyline(map) {
	if (map!=null) {
		map.getGeometry(ESRI.ADF.Graphics.ShapeType.Path,MapCoordsClick,null,'black','blue','crosshair', true);
	}
}

// Polygon Measure action ... for areas
function DrawPolygon(map) {
	if (map!=null) {
		map.getGeometry(ESRI.ADF.Graphics.ShapeType.Ring,MapCoordsClick,null,'red','yellow','crosshair', true);        
	}
}

// Point Measure action ... for location coordinates
function DrawPoint(map) {
	if (map!=null) {
		map.getGeometry(ESRI.ADF.Graphics.ShapeType.Point,MapCoordsClick,null,'red',null,'pointer', true);        
	}    
}

// Handler for MeasurePoint clicks
function MapCoordsClick(geom, evtArgs) {
	var geomString = '';
	var type = '';
    removeDrawGraphic();
    var style = null; 
	if(ESRI.ADF.Geometries.Point.isInstanceOfType(geom)) {
		geomString = geom.toString(':');
		type = 'point';
		style = new ESRI.ADF.Graphics.MarkerSymbol("images/crosshair_red.png",6,6);
	}
	else if(ESRI.ADF.Geometries.Polyline.isInstanceOfType(geom)) {
		geomString = geom.getPath(0).toString('|',':');
		type = 'polyline';
		style = new ESRI.ADF.Graphics.LineSymbol("red",2);
	}
	else if(ESRI.ADF.Geometries.Polygon.isInstanceOfType(geom)) {
		geomString = geom.getRing(0).toString('|',':');
		type = 'polygon';
		style = new ESRI.ADF.Graphics.FillSymbol(null,"red",2);	
		style.set_opacity(0.2);	
	}
	m_drawGraphicFeature = $create(ESRI.ADF.Graphics.GraphicFeature,
		        {"id": "MeasurePointIcon","geometry":geom,"symbol":style});
	map.addGraphic(m_drawGraphicFeature);        
	coordString = geomString;
	  	
	m_drawLastCoords = m_drawCoords;
	m_drawCoords = "";
//	var argument = 'ControldID='+map.get_id()+'&EventArg='+type+'&coords='+geomString+'&VectorMode=draw';	
//    if (checkForFormElement(document, 0, "MeasureUnits")) argument += "&MeasureUnits=" + document.forms[0].MeasureUnits.value;
//    if (checkForFormElement(document, 0, "AreaUnits")) argument += "&AreaUnits=" + document.forms[0].AreaUnits.value;
//    if (checkForFormElement(document, 0, "MapUnits")) argument += "&MapUnits=" + document.forms[0].MapUnits.options[document.forms[0].MapUnits.selectedIndex].value;

//	var context = this;
	
	
	var message = "DrawGraphics" + "-" + type + "-" + geomString;
    var context = "DrawGraphics";
	WebForm_DoCallback('__Page',message,processCallbackResult,context,postBackError,true);    
//	eval(drawVectorCallbackFunctionString);
}

function DrawCoordsMouseUp(sender, args) {//alert(m_currentDrawToolbarTool);
	if (m_currentDrawToolbarTool!="point" && m_currentDrawToolbarTool!="polygon") {
	    alert("Please choise 'SALES BY RADIUS' or SALES BY AREA' Method at first.");
	    return;
	} 
    if (m_currentDrawToolbarTool!="point") {
        var coords = args.coordinate;
        if (coords!=null && !isNaN(coords.get_x()) && !isNaN(coords.get_y())) {
            // ignore null or non-numeric input
            if (m_drawCoords.length>0) {
                if (args.button==Sys.UI.MouseButton.rightButton) {
                    var pos = m_drawCoords.lastIndexOf("|");
                    m_drawCoords =  m_drawCoords.substring(0,pos);
                } else if (args.button==Sys.UI.MouseButton.leftButton){  
                    m_drawCoords += (m_drawCoords.length>0 ? "|" : "") + coords.get_x() + ":" + coords.get_y();
                } else 
                    return;
                    

//	            var argument = 'ControldID='+map.get_id()+'&EventArg='+m_currentDrawToolbarTool+'&coords='+m_drawCoords+'&VectorMode=draw';	
//                if (checkForFormElement(document, 0, "MeasureUnits")) argument += "&MeasureUnits=" + document.forms[0].MeasureUnits.value;
//                if (checkForFormElement(document, 0, "AreaUnits")) argument += "&AreaUnits=" + document.forms[0].AreaUnits.value;
//                if (checkForFormElement(document, 0, "MapUnits")) argument += "&MapUnits=" + document.forms[0].MapUnits.options[document.forms[0].MapUnits.selectedIndex].value;

//	            var context = this;
//	            eval(drawVectorCallbackFunctionString);
	            var message = "EveryDrawGraphicsClick" + "-" + m_drawCoords;
                var context = "EveryDrawGraphicsClick";
	            WebForm_DoCallback('__Page',message,processCallbackResult,context,postBackError,true);   
	        } else {
                removeDrawGraphic();
                if (args.button==Sys.UI.MouseButton.rightButton)
                    m_drawCoords = "";
                else if (args.button==Sys.UI.MouseButton.leftButton)
	                m_drawCoords = coords.get_x() + ":" + coords.get_y(); 
	        }
	        m_drawLastCoords = m_drawCoords;
//	    } else {
//	        window.status = "no coords";
	    }
	}
}

function removeDrawGraphic() {
    if (m_drawGraphicFeature!=null) {
        map.removeGraphic(m_drawGraphicFeature);
        m_drawGraphicFeature.dispose();
        m_drawGraphicFeature = null;
    }
}

function drawComplete(result,id,area,perimeter,segment, totaldistance) {
	var md = $get(m_drawDisplay);
	if(result) {
		md.innerHTML = result;
	}
	else {
		//just replace values
		var tdperimeter = $get("tdperimiter");
		var tdarea = $get("tdarea");
		var tdsegment = $get("tdsegment");
		var tdtotaldistance = $get("tdtotaldistance");
		
		if(tdarea) { tdarea.innerHTML = area; }
		if(tdperimeter) { tdperimeter.innerHTML = perimeter; }
		if(tdsegment && segment) { tdsegment.innerHTML = segment; }
		if(tdtotaldistance && totaldistance) { tdtotaldistance.innerHTML = totaldistance; }
	}
}


// update distance unit settings... request new totals from server
function changeDrawUnits() {
    var f = document.forms[docFormID];
    var i = f.MeasureUnits2.selectedIndex;
    var m = f.MeasureUnits2.options[i].value;
    f.MeasureUnits.value = m; 
    if (coordString==null) coordString="";
    var argument = "ControlID=" + map.get_id() + "&EventArg=" + m_currentDrawToolbarTool + "&ControlType=Map&coords=" + m_drawLastCoords + "&VectorMode=measure&VectorAction=AddPoint&MeasureUnits=" + m + "&refresh=true";
   if (checkForFormElement(document, 0, "AreaUnits")) {
        argument += "&AreaUnits=" + f.AreaUnits.value ;
   } 
    var context = map.get_id() + "," + m_currentDrawToolbarTool;

    eval(drawVectorCallbackFunctionString);    
}

// update area unit settings... request new totals from server
function changeAreaUnits() {
    var f = document.forms[docFormID];
    var i = f.AreaUnits2.selectedIndex;
    var a = f.AreaUnits2.options[i].value;
    f.AreaUnits.value = a
    coordString = map.coords;
    if (coordString==null) coordString="";
    var argument = "ControlID=" + map.get_id() + "&EventArg=" + m_currentDrawToolbarTool + "&ControlType=Map&coords=" + m_drawLastCoords + "&VectorMode=measure&VectorAction=AddPoint&AreaUnits=" + a + "&refresh=true";
   if (checkForFormElement(document, 0, "MeasureUnits")) {
        argument += "&MeasureUnits=" + f.MeasureUnits.value;
   } 
    var context = map.get_id() + "," + m_currentDrawToolbarTool;

	eval(drawVectorCallbackFunctionString);    
}


// set up the images for transparency in IE6
function setIE6DrawToolbarImages() {
    var imageId = "";
    var imgSrc = ""; 
    var imgObj = document.images["MeasureToolbar_CloseButton"];
    if (imgObj!=null) {
        imgObj.src = "images/blank.gif";
        imgObj.style.filter =  "progid:DXImageTransform.Microsoft.AlphaImageLoader(src=/aspnet_client/ESRI/WebADF/images/dismiss.png)";
    }
    for (var i=0; i<m_DrawTypes.length; i++) {
	    imageId = "ToolbarImage_" + m_MeasureTypes[i];
	    imgObj = document.images[imageId];
	    if (imgObj!=null) {
	        imgSrc = imgObj.src;
            imgObj.src = "images/blank.gif";
            imgObj.style.filter =  "progid:DXImageTransform.Microsoft.AlphaImageLoader(src=" + imgSrc + ")";
	    }
    }
}

function UpdateDrawArea(area){
    var txtRadius = $get("textArea"); 
    txtRadius.value=area + " [ACRE(S)]";
}

