function collapseAll() {
	var myMap = GetMap();
	if (GetMap().isBusy()) {
		var theTimeout = setTimeout("collapseAll()",500);
	} else {
		clearTimeout(theTimeout);
		var lyrGroups = myMap.getMapLayerGroups();
		if (!(lyrGroups.isEmpty())) {
			for(i=0;i<lyrGroups.Count;i++) {
				lyrGroups.item(i).collapse();
			}
		}
	}
}

function printFrData() {
	window.frData.focus();
	window.frData.print();
}

var selectableLayers = new Array();
function fillSelectableLayers() {
	var allLayers = GetMap().getMapLayers();
	for(i=0;i<allLayers.Count;i++) {
		var lyr = allLayers.item(i);
		if ((lyr.getName()!="") && lyr.getSelectability()) {
			selectableLayers[selectableLayers.length] = lyr.getName();
		}
	}
	selectableLayers.sort();
}

function setCurrentLayer(oSelect) {
	currentLayer = oSelect.options[oSelect.selectedIndex].text;
	var allLayers = GetMap().getMapLayers();
	for(i=0;i<allLayers.Count;i++) {
		allLayers.item(i).setSelectability((allLayers.item(i).getName()==currentLayer) || (allLayers.item(i).getName()=="Buffer layer") || (allLayers.item(i).getName()=="Redline"));
	}
}

function FillCurrentLayerList(oSelect) {
	while (oSelect.options.length > 0) {
		oSelect.options.remove(0)
	}
	var myMap = GetMap();
	var j = -1
	var k = -1
	for(i=0;i<selectableLayers.length;i++) {
		var lyr = myMap.getMapLayer(selectableLayers[i]);
		if (lyr && (lyr.getName()!="")) {
		//if (lyr && (lyr.getName()!="") && (lyr.getVisibility())){
			//var lyrgrp = lyr.getMapLayerGroup();
			//if (lyrgrp && lyrgrp.getVisibility()) {
				var oOption = document.createElement("OPTION");
				oSelect.options.add(oOption);
				oOption.value = lyr.getName();
				oOption.innerText =  oOption.value;
				if (lyr.getName() == currentLayer) j = (oSelect.length-1);
				if (lyr.getName() == currentLayerDefault) k = (oSelect.length-1);
			//}
		}
	}
	if (oSelect.length> 0) {
		if (j >= 0) {
			oSelect.selectedIndex = j;
		} else if (k >= 0) {
			oSelect.selectedIndex = k;
		} else {
			oSelect.selectedIndex = 0;
		}
	}
	//setCurrentLayer(oSelect);
}

function zoomCoord(lat,lng,z,infeet,drawPnt,pntSize,pntName,pntSym) {
	if (GetMap().isBusy()) {
		var theTimeout = setTimeout("zoomCoord(" + lat + "," + lng + "," + z + "," + infeet + "," + drawPnt + "," + pntSize + ",'" + pntName + "','" + pntSym + "')",500);
	} else {
		clearTimeout(theTimeout);
		var myMap = GetMap();
		if (infeet==1) {
			// Convert MCS to lat/lon
			var latLonPt = myMap.mcsToLonLat(lng, lat);
			 // pull out lat/lon vals and display in dialog
			var lng = latLonPt.getX();
			var lat = latLonPt.getY();
		} else {
			if (lng > 0) lng = 0-lng;
		}
		if (drawPnt==1) {
			//need to do this here to avoid busy state after zoomScale
			var rlSup = myMap.getRedlineSetup();
			var symAtt = rlSup.getSymbolAttr();
			pntSize = Number(pntSize);
			if (!(pntSize >= 1)) pntSize=(z/100);
			symAtt.setHeight(pntSize,"FT");
			symAtt.setWidth(pntSize,"FT");
		}
		myMap.zoomScale(lat,lng,z);
		if (drawPnt==1) {
			drawPoint(lat,lng,pntName);
		}
//alert(myMap.getSymbols().size());
	}
}

function drawPoint(lat, lng, pntName) {
	if (GetMap().isBusy()) {
		var theTimeout = setTimeout("drawPoint(" + lat + "," + lng + ",'" + pntName + "')",500);
	} else {
		var rlLayer = GetMap().getMapLayer('Redline');
		if (!rlLayer) {
			rlLayer = GetMap().createLayer('redline','Redline');
			if (rlLayer) {
				rlLayer.setPriority(100);
				rlLayer.setShowInLegend(false);
			} else {
				alert("Error: Could not create redline layer.");
			}
		}
		if (rlLayer) {
			var myObj = rlLayer.createMapObject("", pntName, "");
			if (myObj) {
				var point = GetMap().createObject("MGPoint");
				if (point) {
					point.setX(lng);
					point.setY(lat);
					myObj.addSymbolPrimitive(point, false);
				} else {
					alert("bummer");
				}
			} else {
				alert("Error: Could not create redline object.");
			}
		} else {
			alert("Error: Could not find/create redline layer.");
		}
	}
}

function zoomToSelected(lyrName,zoom,id) {
	GetMap().zoomGotoLocation(zoom,id,800);
	selectIt(lyrName,id);
	waitSelectionChanged();
}

function waitZoomSelected() {
	if (GetMap().isBusy()) {
		var theTimeout = setTimeout("waitZoomSelected()",1000);
	} else {
		clearTimeout(theTimeout);
		GetMap().zoomSelected();
	}
}

function waitSelectionChanged() {
	if (GetMap().isBusy()) {
		var theTimeout = setTimeout("waitSelectionChanged()",1000);
	} else {
		clearTimeout(theTimeout);
		var myMap = GetMap();
////alert("yah");
		if (myMap.getSelection()) {
			if (myMap.getSelection().getNumObjects() > 0) {
				var mySel = myMap.getSelection().getMapObjectsEx(null);
				if (mySel.size()>0) {
					var lyr = mySel.item(0).getMapLayer();
					var lyrName= lyr.getName();
					runReport("Identify " + lyrName);
////				var txt = "identify.asp?lyr=" + lyrName + "&obj_keys='" + mySel.item(i).getKey() + "'";
////				for (var i=1; i< mySel.size(); i++) {
////					txt += ",'" + mySel.item(i).getKey() + "'";
////				}
////				//alert(txt);
////				document.frames("frData").document.location=txt;
				}
			}
		}
	}
}

function selectIt(lyrName,key) {
	if (GetMap().isBusy()) {
		var theTimeout = setTimeout("selectIt('" + lyrName + "','" + key + "')",1000);
		//alert('bummer');
	} else {
		clearTimeout(theTimeout);
		var myMap = GetMap();
		var myMapLayer = myMap.getMapLayer(lyrName);
		if (myMapLayer) {
			if (!myMapLayer.getVisibility()) {
				myMapLayer.setVisibility(true);
				myMap.refresh();
				selectIt(lyrName,key);
				//alert(myMapLayer.getVisibility());
			} else {
				var myObj = myMapLayer.getMapObject(key);
				if (myObj) {
					myMap.setAutoRefresh(false)
					var myCollection = myMap.createObject("MGCollection");
					var myMapSel = myMap.getSelection();
					myMapSel.clear();
					myCollection.add(myObj);
					myMapSel.addObjectsEx(myCollection,false);
					myMap.setAutoRefresh(true)
				} else {
					alert("Error: Can not find object [" + key +  "] on layer [" + lyrName + "].");
				}
			}
		} else {
			alert("Error: Can not find [" + lyrName + "].");
		}
	}
}

function runReport(rptName) {
	if (GetMap().isBusy()) {
		var theTimeout = setTimeout("runReport('" + rptName+ + "')",1000);
	} else {
		clearTimeout(theTimeout);
		var myMap = GetMap();
		myMap.viewReport(rptName);
	}
}

var g_bufferLayer;
var g_targetLayer;

function adjoin1(lyrName,key) {
	if (GetMap().isBusy()) {
		var theTimeout = setTimeout("adjoin1('" + lyrName + "','" + key + "')",1000);
		//alert('bummer');
	} else {
		clearTimeout(theTimeout);
		var myMap = GetMap();
		var myCollection = myMap.createObject("MGCollection");
		var myMapSel = myMap.getSelection();
		var myMapLayer = myMap.getMapLayer(lyrName);
		if (myMapLayer) {
			var myObj = myMapLayer.getMapObject(key);
			if (myObj) {
				myMap.setAutoRefresh(false)
				myMapSel.clear();
				myCollection.add(myObj);
				myMapSel.addObjectsEx(myCollection,false);
				myMap.setAutoRefresh(true);
				adjoiners(lyrName);
			} else {
				alert("Error: Can not find object [" + key +  "] on layer [" + lyrName + "].");
			}
		} else {
			alert("Error: Can not find [" + layer + "].");
		}
	}
}

function adjoiners(lyrName) {
//	var bufferLayerName = "Buffer_layer_temp";
	var myMap = GetMap();
	var myMapSel = myMap.getSelection();
	var myBufferSetup = myMap.getBufferSetup();
	// save buffer settings
	//var saveBufferLayer = myBufferSetup.getLayerName();
	var saveDistance = myBufferSetup.getDistance();
	var saveUnit = myBufferSetup.getUnit();
	var saveOneObj = myBufferSetup.getOneObject();
	var saveSelMode = myMap.getSelectionMode();

	//myBufferSetup.setLayerName(bufferLayerName);
	myBufferSetup.setDistance(0.1);
	myBufferSetup.setUnit('FT');
	myBufferSetup.setOneObject(true);
	myMap.setSelectionMode("Intersection");

	//myMap.removeMapLayer(bufferLayerName);
	g_bufferLayer = myMap.viewBuffer();
	if (g_bufferLayer) {

		g_targetLayer = myMap.getMapLayer(lyrName);
		if (g_targetLayer) {
			myMap.setAutoRefresh(false);
			selectByBufferLayer();
			myMap.setAutoRefresh(true);
			myMap.refresh();
		} else {
			alert("ERROR: Could not find layer [" + lyrName + "].");
		}
	} else {
		alert("ERROR: viewBuffer(" + bufferLayerName + ") failed.");
	}
	myMap.setSelectionMode(saveSelMode);
	//myBufferSetup.setLayerName(saveBufferLayer);
	myBufferSetup.setDistance(saveDistance);
	myBufferSetup.setUnit(saveUnit);
	myBufferSetup.setOneObject(saveOneObj);
}

function selectByBufferLayer() {
	var myMap = GetMap();
	if (GetMap().isBusy()) {
		var theTimeout = setTimeout("selectByBufferLayer()",500);
	} else {
		clearTimeout(theTimeout);
		var buffCollect = g_bufferLayer.getMapObjectsEx();
		if (!(buffCollect.isEmpty())) {
			var myMapSel = myMap.getSelection();
			myMapSel.clear();
			myMapSel.addObjectsEx(buffCollect,false);
			var myCollection = myMap.createObject("MGCollection");
			myCollection.add(g_targetLayer);
			var b =	myMap.selectWithin(myCollection);
			//alert(b);
			//if (myMap.isBusy()) alert("b: " + myMap.isBusy());
			//myMap.removeMapLayer(bufferLayerName);
			if (myMap.isBusy()) alert("c: " + myMap.isBusy());
			myMap.removeMapLayer(g_bufferLayer.getName());
		} else {
			alert("ERROR: No features on " + g_bufferLayer.getName());
		}
	}
}

function DeleteBuffer() {
	var rlLayer = GetMap().getMapLayer('Buffer layer');
	if(rlLayer)
	{
		var selobjs = GetMap().getSelection().getMapObjectsEx(rlLayer);
		if (selobjs) rlLayer.removeObjects(selobjs);
	}
}

function ClearBuffer() {
	GetMap().removeMapLayer('Buffer layer');
}

function AddCopyright() {
	var myMap = GetMap();
	if (GetMap().isBusy()) {
		var theTimeout = setTimeout("AddCopyright()",500);
	} else {
		var needCR = false;
		var layers = myMap.getMapLayersEx();    
		// Use size() to step through collection      
		for (var i = 0; i < layers.size(); i++) {
			var layer = layers.item(i); 
			if (layer.getLayerType() == "Raster") {
				needCR = layer.isVisible();
				break;
			}
		}   
		if (needCR) {
			var h = myMap.getHeight("FT") * 0.025;
			var ext = myMap.getMapExtent(true,true);
			var x = ext.getMinX() + (h*0.5);
			var y = ext.getMinY() + (h*0.5);
			var p = myMap.createObject("MGPoint");
			p.setX(x);
			p.setY(y);
			var rlSetup = myMap.getRedlineSetup();
			var ta = rlSetup.getTextAttr();
			var saveBC = ta.getBackColor();
			var saveBM = ta.getBackMode();
			var saveC = ta.getColor();
			var saveH = ta.getHeight("FT");
			var saveHA = ta.getHorizAlign();
			var saveR = ta.getRotation();
			var saveVA = ta.getVertAlign();

			ta.setBackColor(1); //1=white
			ta.setBackMode(2); //ghosted
			ta.setColor(4); //4=black
			ta.setHeight(h,"FT");
			ta.setHorizAlign(0);
			ta.setRotation(0);
			ta.setVertAlign(0);

			var myLayer = myMap.getMapLayer("_copyright");
			if (myLayer == null) {
				var myLayer = myMap.createLayer("redline", "_copyright");
			}
			myLayer.setShowInLegend(false);
			myLayer.setVisibility(true);
			myLayer.removeAllObjects();
			var object = myLayer.createMapObject("","VGIN Copyright", "");
			var text = object.addTextPrimitive(p, true,"Aerial Imagery copyright 2002 Commonwealth of Virginia");

			ta.setBackColor(saveBC);
			ta.setBackMode(saveBM);
			ta.setColor(saveC);
			ta.setHeight(saveH,"FT");
			ta.setHorizAlign(saveHA);
			ta.setRotation(saveR);
			ta.setVertAlign(saveVA);
		} else {
			var myLayer = myMap.getMapLayer("_copyright");
			if (myLayer != null) myLayer.removeAllObjects();
		}
	}
}

