// aimsLayers.js
/*
*  JavaScript template file for ArcIMS HTML Viewer
*		dependent on aimsXML.js, ArcIMSparam.js, aimsCommon.js, aimsMap.js,
*		aimsDHTML.js
*/

var mapLoaded = false;
var aimsLayersPresent=true;
var findOpen = false;
var LayerName = new Array();
var displayGroupName = new Array();
var displayGroupVisible = new Array();
var groupLayerName = new Array();
var groupLayerDetail = new Array();
var cadastralLayers = new Array();
var electricLayers = new Array();
var landLayers = new Array();
var politicLayers = new Array();
var sanitaryLayers = new Array(); 
var stormLayers = new Array();
var transLayers = new Array();
var waterLayers = new Array();
var selectLayers = new Array();
var LayerID = new Array();
var LayerVisible = new Array();
var LayerShow = new Array();
var LayerType = new Array();
var LayerIsFeature = new Array();
var LayerExtent = new Array();
var LayerMinScale = new Array();
var LayerMaxScale = new Array();
var LayerRenderString = new Array();
var LayerShapeField = new Array();
var LayerIDField = new Array();
var LayerFieldList = new Array();
var LayerFieldTypeList = new Array();
var LayerFieldSizeList = new Array();
var LayerFieldPrecisionList = new Array();
var LayerFields = new Array();
var LayerFieldType = new Array();
var LayerFieldCount=0;
var ActiveLayer="";
var ActiveLayerType="";
var layerCount = 0;
var layerLeft = 0;
var layerRight = 0;
var layerTop = 0;
var layerBottom = 0;
var fieldIndex = 0;
var FeatureLayerCount = 0;
var hasOrthos = false;

// field aliases arrays
var AliasFieldName = new Array();
var AliasFieldAlias = new Array();

var LayerListOpen=false;
var queryOpen = false;

var displayLayerInfoButton=true;

// check for query form. . . if present, update field list
function setActiveLayer(i) {
	fieldIndex=0;
	selectCount=0;
	showBuffer=false;
	ActiveLayer=LayerID[i];
	ActiveLayerType=LayerType[i];
	ActiveLayerIndex=i;

	setLayerFields(i);
	if (isPublic == false) {
		if (toolMode == 8) {
			queryForm();
		} else if (toolMode == 9) {
			findForm();
		}
	}
}

// write out form for layerList in separate window
function writeLayerListForm() {
	var Win1 = open(appDir + "toc.htm","LayerListWindow","width=190,height=300,scrollbars=yes,resizable=yes");
	Win1.focus();
	Win1=null;

}

// get list of layers, id/shape fields, scalefactors, etc.
function getLayers(theReply) {
	hasOrthos = false;
	//alert("LayerInfo:\n" + theReply.length);
	var theReplyUC = theReply.toUpperCase();
	LayerFields.length = 1;
	var startpos = 0;
	var endpos = 0;
	layerCount = 0;
	var pos = -1;
	var lpos = 1;
	var epos = 1;
	var zpos=1;
	var zpos2 = 1;
	var tempString="";
	var visString = "";
	var typeString="";
	var fieldString = "";
	var testString = "";
	var testString2 = "";
	var minString = "";
	var maxString = "";
	var fieldCount = 0;
	LayerName.length=1;
	LayerType.length=1;
	LayerVisible.length=1;
	LayerExtent.length=1;
	LayerIsFeature.length=1;
	LayerID.length=1;
	LayerIDField.length=1;
	LayerShapeField.length=1;
	LayerMinScale.length=1;
	LayerMaxScale.length=1;
	LayerFieldTypeList.length=1;
	LayerFieldList.length=1;
	LayerRenderString.length=1;
	LayerFieldSizeList.length=1;
	LayerFieldPrecisionList.length=1;
	layerCount = 0;
	var layerMinX=0;
	var layerMinY=0;
	var layerMaxX=0;
	var layerMaxY=0;
	//New code for Regis
	//These arrays will store the layers assigned to each Feature Group
	cadastralLayers.length=0;
	var cadCount = 0;
	electricLayers.length=0;
	var elecCount = 0;
	landLayers.length=0;
	var landCount = 0;
	politicLayers.length=0;
	var poliCount = 0;
	sanitaryLayers.length=0;
	var saniCount = 0; 
	stormLayers.length=0;
	var stormCount = 0;
	transLayers.length=0;
	var transCount = 0;
	waterLayers.length=0;
	var watCount = 0;
	groupLayerName.length = 0;
	groupLayerDetail.length = 0;
	selectLayers.length = 0;
	LayerShow.length = 0;
	//alert("Processing LayerInfo");
	lpos = theReplyUC.indexOf("<LAYERINFO",zpos);

	while (lpos > -1) {
		//alert("<LAYERINFO - pos " + lpos );
		
		if (lpos != -1) {
			
			zpos = theReplyUC.indexOf("</LAYERINFO",lpos);
			//alert("</LAYERINFO - pos " +  zpos);
			if (zpos!=-1) {
				pos = theReplyUC.indexOf("NAME=",lpos);
				if (pos != -1) {
					startpos = pos + 6;
					endpos = theReply.indexOf(dQuote, startpos);
					tempString = theReply.substring(startpos,endpos);
					LayerName[layerCount] = tempString;
					if (tempString == "Orthophotography") hasOrthos = true; 
					testString2 = 'TYPE="FEATURECLASS"';
					pos = theReplyUC.indexOf(testString2,lpos);
					if ((pos != -1) && (pos<zpos)) 
						LayerIsFeature[layerCount]=true;
					else LayerIsFeature[layerCount]=false;
					//startpos = theReplyUC.indexOf("VISIBLE=",endpos);
					startpos = theReplyUC.indexOf("VISIBLE=",lpos);
					if (startpos != -1) {
						startpos = startpos + 9;
						endpos = startpos + 4;
						visString = theReply.substring(startpos,endpos);
					}
					startpos = theReplyUC.indexOf("ID=",lpos);


					if ((startpos != -1) && (startpos<zpos)) {
						startpos = startpos + 4;
						endpos = theReply.indexOf(dQuote, startpos);
						LayerID[layerCount] = theReply.substring(startpos,endpos);
					} else {
						LayerID[layerCount] = LayerName[layerCount];
					}
					//alert(LayerID[layerCount]);
					if (visString=="true") {
						LayerVisible[layerCount] = 1;
						LayerShow[layerCount] = 1;
					} else {
						LayerVisible[layerCount] = 0;
						LayerShow[layerCount] = 0;
					}
					//alert(LayerName[layerCount]+"   "+LayerShow[layerCount]+"   "+LayerVisible[layerCount]);			
					//alert(startpos + "/" + LayerName[layerCount] + ":" + visString);
					startpos = theReplyUC.indexOf("MINSCALE=",lpos);
					if ((startpos != -1) && (startpos<zpos)) {
						startpos += 10;
						endpos = theReply.indexOf(dQuote, startpos);
						minString = theReply.substring(startpos,endpos);
						LayerMinScale[layerCount] = parseFloat(minString);
					} else {
						LayerMinScale[layerCount] = 0;
					}
					startpos = theReplyUC.indexOf("MAXSCALE=",lpos);
					if ((startpos != -1) && (startpos<zpos)) {
						startpos += 10;
						endpos = theReply.indexOf(dQuote, startpos);
						maxString = theReply.substring(startpos,endpos);
						LayerMaxScale[layerCount] = parseFloat(maxString);
					} else {
						LayerMaxScale[layerCount] = 1.7976931348623157E308;
					}
					//alert("MinScale:" + LayerMinScale[layerCount] + "\nMaxScale:" + LayerMaxScale[layerCount]);
					if (LayerIsFeature[layerCount]) {
						startpos = theReplyUC.indexOf("<FCLASS TYPE=",lpos);
						zpos2= theReplyUC.indexOf("</FCLASS",lpos);
						if (startpos != -1) {
							startpos = startpos+14;
							endpos = theReply.indexOf(dQuote, startpos);
							typeString = theReply.substring(startpos,endpos);
						} else {
							typeString = "image";
							noOverLay=true;
						}
					} else {
						typeString = "image";
						noOverLay=true;
					}
					LayerType[layerCount] = typeString;
					
					var theXYs = getEnvelopeXYs(theReply, lpos);
					tempString = theXYs[0] + "," + theXYs[1] + "," + theXYs[2] + "," + theXYs[3];
					endpos = xmlEndPos;
					theXYs=null;
					LayerExtent[layerCount] = tempString;
					LayerFieldList[layerCount] = "";
					LayerFieldTypeList[layerCount] = "";
					LayerFieldSizeList[layerCount] = "";
					LayerFieldPrecisionList[layerCount] = "";
					if (LayerIsFeature[layerCount]) {
						var jpos = 1;
						var fldCount = 0;
						FeatureLayerCount += 1;
						while ((jpos<zpos) && (jpos!=-1)) {
							jpos = theReply.indexOf("<FIELD name=",endpos);
							if (zpos2 > jpos) {
								
								if (jpos != -1) {
									startpos = jpos + 13
									endpos = theReply.indexOf(dQuote, startpos);
									tempString = theReply.substring(startpos,endpos);
									
									startpos = theReply.indexOf("type=",endpos);
									startpos= startpos + 6;
									endpos = theReply.indexOf(dQuote, startpos);
									testString = theReply.substring(startpos,endpos);
									if (testString=="-99") LayerIDField[layerCount] = tempString;
									if (testString=="-98") LayerShapeField[layerCount] = tempString;
									if (fldCount>0) {
										LayerFieldList[layerCount] = LayerFieldList[layerCount] + ",";
										LayerFieldTypeList[layerCount] = LayerFieldTypeList[layerCount] + ",";
										LayerFieldSizeList[layerCount] = LayerFieldSizeList[layerCount] + ",";
										LayerFieldPrecisionList[layerCount] = LayerFieldPrecisionList[layerCount] + ",";
									}
									LayerFieldList[layerCount] = LayerFieldList[layerCount] + tempString ;
									LayerFieldTypeList[layerCount] = LayerFieldTypeList[layerCount] +  testString;
									startpos = theReply.indexOf("size=",jpos);
									startpos= startpos + 6;
									endpos = theReply.indexOf(dQuote, startpos);
									testString = theReply.substring(startpos,endpos);
									LayerFieldSizeList[layerCount] = LayerFieldSizeList[layerCount] +  testString;
									startpos = theReply.indexOf("precision=",jpos);
									startpos += 11;

									endpos = theReply.indexOf(dQuote, startpos);
									testString = theReply.substring(startpos,endpos);
									LayerFieldPrecisionList[layerCount] = LayerFieldPrecisionList[layerCount] +  testString;
									
									fldCount += 1;
									
								}
								
							}
							else {
								// search for next Layer
								endpos = zpos;
								jpos = -1;
								
							}
						}
						if (ClassRenderLayer.length>0) {
							var sr1 = -1
							for (var u=0;u<ClassRenderLayer.length;u++) {
								if (ClassRenderLayer[u]==LayerName[layerCount]) sr1=u;
							}
							if (sr1>-1) {
								LayerRenderString[layerCount] = ClassRenderString[sr1];
								//alert(ClassRenderLayer[sr1]);
							} else {
								LayerRenderString[layerCount]="";
							}
						}
					
					} else {
						LayerRenderString[layerCount]="";
					}
				
					//alert("Layer " + layerCount + ": " + LayerName[layerCount]);
					layerCount += 1;
					endpos = zpos;
					
				}
				lpos = theReplyUC.indexOf("<LAYERINFO",zpos);
			} else {
				lpos = -1;
			}
			
		}
	}
	//alert(cadastralLayers.length);
	var group = -1;
	for (var e=0;e<LayerName.length;e++) {
		//alert(LayerName[e]);
		group = -1;
		for (var f=0;f<8;f++) {
			if (layerGroup[f].indexOf(LayerName[e]) != -1) {
			group = f;
			}
		}
		//alert("The Layer:"+LayerName[e]+"//Visible?:"+LayerVisible[e]);
		switch(group) {
			case 0:
				cadastralLayers[cadCount] = LayerName[e];
				cadCount++;
				break;
			case 1:	
				electricLayers[elecCount] = LayerName[e];
				elecCount++;
				break;
			case 2:
				landLayers[landCount] = LayerName[e];
				landCount++;
				break;
			case 3:
				politicLayers[poliCount] = LayerName[e];
				poliCount++;
				break;
			case 4:
				sanitaryLayers[saniCount] = LayerName[e];
				saniCount++;
				break;
			case 5:
				stormLayers[stormCount] = LayerName[e];
				stormCount++;
				break;
			case 6:
				transLayers[transCount] = LayerName[e];
				transCount++;

				break;
			case 7:
				waterLayers[watCount] = LayerName[e];
				watCount++;
				break;
			default:
				//there shouldn't be any other kind
				break;
		}
	}
	var group = 0;
	if (cadastralLayers.length > 0) {
		groupLayerName[group] = "Cadastral";
		groupLayerDetail[group] = false;
		group++;
	}
	if (electricLayers.length > 0) {
		groupLayerName[group] = "Electric/Steam";
		groupLayerDetail[group] = false;
		group++;
	}
	if (landLayers.length > 0) {
		groupLayerName[group] = "Landbase";
		groupLayerDetail[group] = false;
		group++;
	}
	if (politicLayers.length > 0) {
		groupLayerName[group] = "Political/Plan.";
		groupLayerDetail[group] = false;
		group++;
	}
	if (sanitaryLayers.length > 0) {
		groupLayerName[group] = "Sanitary";
		groupLayerDetail[group] = false;
		group++;
	}
	if (stormLayers.length > 0) {
		groupLayerName[group] = "Storm";
		groupLayerDetail[group] = false;
		group++;
	}
	if (transLayers.length > 0) {
		groupLayerName[group] = "Transportation";
		groupLayerDetail[group] = false;
		group++;
	}
	if (waterLayers.length > 0) {
		groupLayerName[group] = "Water";
		groupLayerDetail[group] = false;
		group++;
	}
	LayerName.reverse();
	LayerVisible.reverse();
	LayerShow.reverse();
	LayerType.reverse();
	LayerIDField.reverse();
	LayerShapeField.reverse();
	LayerExtent.reverse();
	LayerIsFeature.reverse();
	LayerMinScale.reverse();
	LayerMaxScale.reverse();
	LayerFieldTypeList.reverse();
	LayerFieldList.reverse();
	LayerFieldSizeList.reverse();
	LayerFieldPrecisionList.reverse();
	LayerID.reverse();
	LayerRenderString.reverse();
	readAlias();
	if (ActiveLayerIndex>=layerCount) ActiveLayerIndex = 0;
	if (!LayerIsFeature[ActiveLayerIndex]) {
		var chk = 0;
		
		for (var i=layerCount-1;i>=0;i--) {
			if (LayerIsFeature[i]) chk = i;
		}
		ActiveLayerIndex = chk;
	}
	ActiveLayer = LayerID[ActiveLayerIndex];
	ActiveLayerType = LayerType[ActiveLayerIndex];
	if (FeatureLayerCount==0) canQuery=false;

	//alert(layerCount + " layers");
}

// set the Layer Field array using the current Active Layer's fields
function setLayerFields(layerIndex) {
	//alert("setLayerFields");
	//alert("index: "+layerIndex);
	LayerFields.length=1;
	LayerFieldType.length=1;
	var tempList = new Array();
	if (swapSelectFields) {
		//alert("layerIndex = " + layerIndex);
		selectFields=selFieldList[layerIndex];
	}
	if (LayerFieldList[layerIndex]!="") {
		// /*
		if (useFieldAlias) {
			AliasFieldName.length=0;
			AliasFieldAlias.length=0;
			var msg = LayerName[layerIndex] + " - aliases: ";
			//alert("LayerIndex: "+layerIndex);
			//alert("LoadedFields: "+fieldAliasList[layerIndex]);
			if (fieldAliasList[layerIndex]!=null) {
				if (fieldAliasList[layerIndex]!="") {
					if (fieldAliasList[layerIndex].indexOf("|")==-1) {
						var tempPair = fieldAliasList[layerIndex].split(":");
						AliasFieldName[0] = tempPair[0];
						AliasFieldAlias[0] = tempPair[1];
						msg += fieldAliasList[layerIndex];
						tempPair=null;
					} else {
						tempList = fieldAliasList[layerIndex].split("|");
						for (var i=0;i<tempList.length;i++) {
							var tempPair = tempList[i].split(":");
							AliasFieldName[i] = tempPair[0];
							AliasFieldAlias[i] = tempPair[1];
							msg += tempList[i] + " ";
						
						}
					}
				} else {
					AliasFieldName[0] = "";
					AliasFieldAlias[0] = "";
				}
			} else {
				//alert("This function can not be used until a map is loaded!");
				//return false;
				AliasFieldName[0] = "";
				AliasFieldAlias[0] = "";			
			}
		}
		// */
		var fList = LayerFieldList[layerIndex].split(",");
		var ftList = LayerFieldTypeList[layerIndex].split(",");
		//alert("Original Field List: " + LayerFieldList);
		//alert("Original Field Type: " + LayerFieldTypeList);	
		var fieldCount = 0;
		for (var i=0;i<fList.length;i++) {
			var useIt = selectFields.toUpperCase().indexOf(fList[i].toUpperCase());
			//selectFields is pulled from aimsParam.js, but no entries there correspond to
			//...the correct field entries in fList. Commented out for now, until a fix can be found.
			//alert(fList[i]);
			//alert(selectFields);
			
			if ((useIt!=-1) || (selectFields=="#ALL#")) {
				if (fList[i].toUpperCase()!=LayerShapeField[layerIndex].toUpperCase()) {
					LayerFields[fieldCount] = fList[i];

					//alert(ftList[i]);
					LayerFieldType[fieldCount] = ftList[i];
					fieldCount += 1;
				}
			}
		}
		//alert("New Field List: " + LayerFields);
		//alert("New Field Types: " + LayerFieldType);
		LayerFieldCount=fieldCount;
		canQuery=true;
		fList=null;
		ftList=null;
	} else {
		var msg ="Unable to obtain Field names.\nUnable to query layer.";
		alert(msg);
		canQuery=false;
	
	}
}

// get the Field names from the LayerFieldList array
function getLayerFieldNames(layerIndex) {
	if (LayerFieldList[layerIndex]!="") {
		var fList = LayerFieldList[layerIndex].split(",");
	} else {
		var fList=null;
	} 
	return fList;
}

// get the Field types from the LayerFieldTypeList array
function getLayerFieldTypes(layerIndex) {
	if (LayerFieldList[layerIndex]!="") {
		var ftList = LayerFieldTypeList[layerIndex].split(",");	
	} else {
		var ftList=null;
	} 
	//alert("ftList = " + ftList);
	return ftList;
}

// get the Field types from the LayerFieldTypeList array
function getLayerFieldSizes(layerIndex) {
	if (LayerFieldList[layerIndex]!="") {
		var ftList = LayerFieldSizeList[layerIndex].split(",");	
	} else {
		var ftList=null;
	} 
	return ftList;
}

// get the Field types from the LayerFieldTypeList array
function getLayerFieldPrecisions(layerIndex) {
	if (LayerFieldList[layerIndex]!="") {
		var ftList = LayerFieldPrecisionList[layerIndex].split(",");	
	} else {
		var ftList=null;
	} 
	return ftList;
}

//display individual fields for the given layer
//decides which individual layers may be toggles visible or invisible when the group is marked visible or invisible
function showLayerInfo(groupIndex) {
	switch(groupIndex) {
		case 99:
			var resp = "";
			//alert(parent.TOCFrame.document.forms[0].featureVisible.checked);
			for(var w=0;w<displayGroupName.length;w++) {
				if(displayGroupVisible.length == 1) {
					resp = parent.TOCFrame.document.forms[0].featureVisible.checked;
				} else {
					resp = parent.TOCFrame.document.forms[0].featureVisible[w].checked;
				}   
				if(resp == true) {
					displayGroupVisible[w] = 1;
				} else {
					displayGroupVisible[w] = 0;
				}
			}
			for(var x=0;x<displayGroupName.length;x++) {
				for(var y=0;y<LayerName.length;y++) {
					if(LayerName[y].indexOf(displayGroupName[x]) != -1) {
						LayerShow[y] = displayGroupVisible[x];
					}
				}
			}
			parent.TOCFrame.document.location="toc.htm";				
			break;	
		default:		
			parent.TOCFrame.document.location="toc.htm";
			break;
	}
			
} 


// display layer information
function listLayers(layerIndex) {
	alert("showlayerinfo function");
	if ((useExternalWindow) || (!useTextFrame)) {
		Win1 = window.open("","QueryWindow","width=575,height=250,scrollbars=yes,resizable=yes");
		theFrame = "opener";
		if (parent.MapFrame!=null) theFrame = "opener.parent.MapFrame";
	} else {
		Win1 = parent.TextFrame;
		Win1.document.open();
	}
	//Win1.document.open();
	Win1.document.writeln('<html><head><title>Layer Information - ' + LayerName[layerIndex] + '</title></head>');
	Win1.document.writeln('<body bgcolor="' + textFrameBackColor + '" text="#003366" link="Red" vlink="Blue" LEFTMARGIN=0 onload="window.focus()">');
	Win1.document.writeln('<center><FONT FACE="Arial" SIZE="-2"><b>Layer Information</b>');
	Win1.document.writeln('<table border="1" cellspacing="0" cellpadding="2" nowrap bgcolor="' + tableBackColor + '">');
	
	Win1.document.write('<tr><td><FONT FACE="Arial" SIZE="-2"><b>Name:</b></font></td><TD COLSPAN="3"><FONT FACE="Arial" SIZE="-2">' +  LayerName[layerIndex] + '</td></tr>');
	//Win1.document.write('<tr><td><FONT FACE="Arial" SIZE="-2"><b>Id:</b></font></td><td COLSPAN="3"><FONT FACE="Arial" SIZE="-2">' +  LayerID[layerIndex] + '</td></tr>');
	Win1.document.write('<tr><td><FONT FACE="Arial" SIZE="-2"><b>Type:</b></font></td><td COLSPAN="3"><FONT FACE="Arial" SIZE="-2">');
	if (LayerIsFeature[layerIndex]) {
		Win1.document.write('Feature - ' + LayerType[layerIndex]);
	} else {
		Win1.document.write('Image');
	}
        var tempMin = Math.round(LayerMinScale[layerIndex] * 72);
        var tempMax = Math.round(LayerMaxScale[layerIndex] * 97);
	Win1.document.writeln('</td></tr>');
	Win1.document.write('<tr><td><FONT FACE="Arial" SIZE="-2"><b>Extent:</b></font></td><td COLSPAN="3"><FONT FACE="Arial" SIZE="-2">' +  LayerExtent[layerIndex] + '</td></tr>');
	Win1.document.write('<tr><td><FONT FACE="Arial" SIZE="-2"><b>Min Scale:</b></font></td><td COLSPAN="3"><FONT FACE="Arial" SIZE="-2">Approx 1 inch = ' +  tempMin + ' feet</td></tr>');
	Win1.document.write('<tr><td><FONT FACE="Arial" SIZE="-2"><b>Max Scale:</b></font></td><td COLSPAN="3"><FONT FACE="Arial" SIZE="-2">Approx 1 inch = ' +  tempMax + ' feet</td></tr>');
	if (LayerIsFeature[layerIndex]) {
		
		var fieldNames = getLayerFieldNames(layerIndex);
		var fieldTypes = getLayerFieldTypes(layerIndex);
		var fieldSizes = getLayerFieldSizes(layerIndex);
		var fieldPrecisions = getLayerFieldPrecisions(layerIndex);
		if (fieldNames!=null) {
			Win1.document.writeln('<tr><TD COLSPAN="4"><FONT FACE="Arial" SIZE="-2"><b>&nbsp;</b></font></TD></TR>');
			Win1.document.writeln('<tr><TH COLSPAN="4"><FONT FACE="Arial" SIZE="-2"><b>Fields:</b></font></TH></TR>');
			Win1.document.writeln('<tr><TD><FONT FACE="Arial" SIZE="-2"><b>Name:</b></font></TD><TD><FONT FACE="Arial" SIZE="-2"><b>Type:</b></font></TD>');
			Win1.document.writeln('<TD><FONT FACE="Arial" SIZE="-2"><b>Size:</b></font></TD><TD><FONT FACE="Arial" SIZE="-2"><b>Precision:</b></font></TD></TR>');
			for (var i=0;i<fieldNames.length;i++) {
				Win1.document.writeln('<tr><td><FONT FACE="Arial" SIZE="-2">' + fieldNames[i] + '</font></TD>');
				Win1.document.write('<td><FONT FACE="Arial" SIZE="-2">[' + fieldTypes[i] + '] - ');
				var f = fieldTypes[i];
				var theType = "Unknown";
				if (f=="12") {
					theType = "String";
				} else if (f=="-99") {
					theType = "Id";

				} else if (f=="-98") {
					theType = "Shape";
				} else if (f=="4") {
					theType = "Integer";
				} else if (f=="8") {
					theType = "Double";
				} else if (f=="-7") {
					theType = "Boolean";
				} else if (f=="6") {
					theType = "Floating";
				} else if (f=="5") {
					theType = "Small Integer";
				} else if (f=="2005") {
					theType = "BLOB";
				} else if (f=="91") {
					theType = "Date";
				}
				Win1.document.writeln(theType + '</font></TD>');
				Win1.document.writeln('<TD><FONT FACE="Arial" SIZE="-2">' + fieldSizes[i] + '</font></TD>');
				Win1.document.writeln('<td><FONT FACE="Arial" SIZE="-2">' + fieldPrecisions[i] + '</font></td>');
				Win1.document.writeln('</TR>');
			}
		} else {
			Win1.document.write('<tr><td><FONT FACE="Arial" SIZE="-2"><b>Fields:</b></font></td><td COLSPAN="3"><FONT FACE="Arial" SIZE="-2">None</td></tr>');
	
		}
		fieldNames=null;
		fieldTypes=null;
		fieldSizes=null;
		fieldPrecisions=null;
	} else {
	Win1.document.write('<tr><td><FONT FACE="Arial" SIZE="-2"><b>Address Match:</b></font></td><td COLSPAN="3"><FONT FACE="Arial" SIZE="-2">No</td></tr>');
			Win1.document.write('<tr><td><FONT FACE="Arial" SIZE="-2"><b>Fields:</b></font></td><td COLSPAN="3"><FONT FACE="Arial" SIZE="-2">None</td></tr>');
	}
	Win1.document.writeln('</table>');
	Win1.document.writeln('</font></center></body></html>');
	Win1.document.close();

}

//When the existing function just isn't enough....
function fullSetActiveLayer(layerName) {
	var theLayerIndex = -1;
	for (var i=0;i<LayerName.length;i++) {
		if (LayerName[i] == layerName) theLayerIndex = i;
	}
	setActiveLayer(theLayerIndex);
}



