// aimsLayers.js
/*
*  JavaScript template file for ArcIMS HTML Viewer
*		dependent on aimsXML.js, ArcIMSparam.js, aimsCommon.js, aimsMap.js,
*		aimsDHTML.js
*/

aimsLayersPresent=true;

var LayerName = new Array();
var LayerMETAURL = new Array();  //NJDEP-Dnyanada 1/30/03
var LayerID = new Array();
var LayerVisible = 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;

	// field aliases arrays
var AliasFieldName = new Array();
var AliasFieldAlias = new Array();

var LayerListOpen=false;
var queryOpen = false;

var displayLayerInfoButton=false;

var setLayerVisible = new Array();

// check for query form. . . if present, update field list
function setActiveLayer(i) {
//alert("In aimsLayers setactivelayer");
	fieldIndex=0;
	selectCount=0;
	showBuffer=false;
	ActiveLayer=LayerID[i];
	//alert("ActiveLayer = " + ActiveLayer);
	ActiveLayerType=LayerType[i];
	ActiveLayerIndex=i;
	setLayerFields(i);

	if (useGeocode) {
		// if active layer is geocodeable - set current geocode layer to active layer
		if (GCLayerCount>0) {
			var j =-1;
			for (var k=0;k<GCLayerId.length;k++) {
				if (ActiveLayer==GCLayerId[k]) j=k;
			}
			if (j!=-1) {
				GCActiveLayer=j;
			}
		}
	}

	if (queryOpen) {
		//alert("in queryOpen");
		queryForm();
	} else {
		//alert("in else queryOpen");
		if ((useExternalWindow) || (!useTextFrame)) {
			//Win1 = window.open("","QueryWindow","width=575,height=120,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><meta http-equiv="Content-Type" content="text/html; charset=' + charSet + '"><head><title>' + titleList[1] + '</title></head>');
		//Win1.document.writeln('<body bgcolor="' + tableBackColor + '" text="Black" link="Blue" vlink="Gray" LEFTMARGIN=0 onload="window.focus()">');
		//Win1.document.writeln('<center><FONT FACE="Arial" SIZE="-1"><b>' + LayerName[ActiveLayerIndex] + msgList[20] + '</b>');
		//Win1.document.writeln('</font></center></body></html>');
		//Win1.document.close();
	}

}

// write out form for layerList in separate window
function getLayerMETAURL(lname) {
        switch(lname) {
	  case "Aerial Photos 1930":
              return "sde.image1930";
              break
          case "Aerial Photos 1995/97":
              return "Image";
              break
          case "Aerial Photos 2002":
              return "sde.aerials2002";
              break
		  case "Air Monitoring Stations":
              return "sde.airqm";
              break
          case "Ambient Biomonitoring Network (AMNET)":
              return "sde.biopts";
              break
          case "CAFRA":
              return "sde.cafra";
              break
          case "Category One Waters":
              return "sde.c1waters";
              break
          case "Chromate Sites":
              return "sde.chromsites";
              break
          case "Congressional Districts":
              return "sde.condis";
              break
          case "Counties":
              return "sde.stco";
              break
          case "Critical Environmental and Historic Sites":
              return "sde.cehs2";
              break
          case "Deed Notice Areas":
              return "sde.dna";
              break
          case "Delaware and Raritan Canal Commission Review Zones":
              return "sde.drcczones";
              break
		  case "Fish Index Of Biotic Integrity":
              return "sde.fibi";
              break
              //Dnyanada 2/7/2007
         // case "Freshwater Wetlands":
           //   return "sde.fww";
             // break
          case "Groundwater Contamination Areas (CEA)":
              return "sde.cea";
              break
          case "Groundwater Contamination Areas (CKE)":
              return "sde.cke";
              break
          case "Highlands":
              return "sde.highlands";
              break
          case "Impervious Surface % (2002)":
              return "sde.is02";
              break
          case "Known Contaminated Sites List":
              return "sde.kcsl";
              break
          case "Land Use 1995":
              return "sde.lulc95_02";
              break
          case "Land Use 2002":
              return "sde.lulc2002_gen";
              break
          case "Land Use Change 1995-2002":
              return "sde.change95_02";
              break
          case "Landscape Project 2.1 - Bald Eagle Foraging":
              return "baldeagleforaging";
              break
          case "Landscape Project 2.1 - Beach":
              return "beach_view";
              break
          case "Landscape Project 2.1 - Emergent Wetlands":
              return "emergent_view";
              break
          case "Landscape Project 2.1 - Forest":
              return "forest_view";
              break
 		  case "Landscape Project 2.1 - Forested Wetlands":
              return "forestedwetland_view";
              break
          case "Landscape Project 2.1 - Grassland":
              return "grassland_view";
              break
		  case "Landscape Project 2.1 - Urban Peregrine":
              return "urbanperegrine";
              break
		  case "Landscape Project 2.1 - Wood Turtle":
              return "woodturtle";
              break
		  case "Landscape Project 3.0 - Landscape Version":
              return "landscapeversion";
              break
              case "Landscape Project 3.0 - Species Based Patches":
              return "sbp_view";
              break
              case "Landscape Project 3.0 - Streams":
              return "highlands_streams";
              break
              case "Landscape Project 3.0 - Vernal Habitat":
              return "vernal_habitat";
              break
          case "Legislative Districts":
              return "sde.legdis";
              break
		  case "Mid-Atlantic States":
              return "sde.midatl";
              break
          case "Municipalities":
              return "sde.stmun";
              break
		  case "NJEMS Sites":
              return "sde.njemssites";
              break
          case "Natural Heritage Priority Sites":
              return "sde.prisites";
              break
              //commented out by Dnyanada 4/21/2006 New Jersey layer is removed from the app
         // case "New Jersey":
           //   return "sde.stcoast";
             // break

          case "Open Space (State)":
              return "sde.newstate";
              break
          case "Pinelands Boundary":
              return "sde.pinelands";
              break
          case "Pinelands Management Area":
              return "sde.pma";
              break
          case "Place Names":
              return "sde.placename";
              break
          case "Public Community Water Supply Wells":
              return "sde.pcws";
              break
          case "Quarter Quad Grid":
              return "sde.qq91";
              break
          case "Roads (Tele Atlas)":
              return "sde.ta_roads";
              break
		  case "Sewer Service Areas":
              return "sde.statessa";
              break
          case "Shellfish Classification":
              return "sde.shellfish";
              break
          case "Soils (SSURGO)":
              return "sde.ssurgo_view";
              break
 		  case "State Plan Centers":
              return "sde.cenlne2";
              break
		  case "State Planning Areas":
              return "sde.splan2";
              break
          case "Streams":
              return "sde.streams";
              break
          case "Sub-Watersheds (HUC14)":
              return "sde.dephuc14";
              break
          case "Surface Water Quality Standards":
              return "sde.swqs";
              break
          case "Urban Enterprise Zones":
              return "sde.uez";
              break
          case "Water Bodies":
              return "sde.waterbody";
              break
          case "Watershed Management Areas":
              return "sde.depwmas";
              break
		  case "Watersheds by Name (HUC11)":
              return "sde.dephuc11";
              break
          case "Well Head Protection Areas (Community)":
              return "sde.njwhpa";
              break
		  case "Well Head Protection Areas (Non-Community)":
              return "sde.njncwhpa";
              break
          case "Well Program Grid":
              return "sde.atlasgrid";
              break
          case "Wetlands (2002)":
              return "sde.wet02";
              break
		  case "Zip Codes":
              return "sde.zipcodes_ta";
              break
          default:
			  return "Layer" ;

			}
}




// set up the LayerVisible array for map display
function setupLayerVisible() {
	//alert("in setupLayerVisible");  //1/27/2004
	var toggleCount = LayerVisible.length;
	if (setLayerVisible.length<toggleCount) toggleCount = setLayerVisible.length;
	for (var i=0;i<toggleCount;i++) {
		LayerVisible[i] = setLayerVisible[i];
	}
}



// get list of layers, id/shape fields, scalefactors, etc.
function getLayers(theReply) {
	//alert("LayerInfo:\n" + theReply.length);
	var theReplyUC = theReply.toUpperCase();
	LayerFields.length = 1;
	var startpos = 0;
	var endpos = 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 = "";
	if (LayerID.length>0) {
		//layerCount = LayerID.length;
		//alert("Already got layer parameters");
	} else {
		//alert("Getting layer parameters");
		var fieldCount = 0;
		layerCount = 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;
		//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);
						tempString = tempString.replace(/&apos;/g, "'");
						LayerName[layerCount] = tempString;
						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);
							tempString = theReply.substring(startpos,endpos);
							tempString = tempString.replace(/&apos;/g, "'");
							LayerID[layerCount] = tempString;
						} else {
							LayerID[layerCount] = LayerName[layerCount];
						}
						//alert(LayerID[layerCount]);
						if (visString=="true") {LayerVisible[layerCount] = 1} else {LayerVisible[layerCount] = 0};

						//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);
							minString = setDecimalString(minString);
							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);
							maxString = setDecimalString(maxString);
							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";
							}
						} else {
							typeString = "image";
						}
						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] = "";
						LayerIDField[layerCount] = "";
						LayerShapeField[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]="";
						}
                            LayerMETAURL[layerCount] = getLayerMETAURL(LayerName[layerCount]);
                            layerCount += 1;
							endpos = zpos;
					}
					lpos = theReplyUC.indexOf("<LAYERINFO",zpos);
				} else {
					lpos = -1;
				}

			}
		}
		//alert("LayerInfo processed");
		LayerName.reverse();
		LayerMETAURL.reverse();
		LayerVisible.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();
	}
	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) {
		//alert("No Feature Layers");
		canQuery=false;
		useZoomActive=false;
		useIdentify=false;
 		useSelect=false;
		useQuery=false;
		useFind=false;
		useBuffer=false;
		useStoredQuery=false;
		useHyperLink=false;
		queryZoom=false;
	}
	if (noListLayer.length<LayerName.length) {
		noListLayer.length = LayerName.length;
		for (var i=0;i<LayerName.length;i++) {
			if (noListLayer[i]==null) {
				noListLayer[i]=false;
			}
		}
	}
//	alert(layerCount + " layers");
}

// set the Layer Field array using the current Active Layer's fields
function setLayerFields(layerIndex) {
	LayerFields.length=1;
	LayerFieldType.length=1;
	var tempList = new Array();
	if (swapSelectFields) {
		selectFields=selFieldList[layerIndex];
	}
	if (LayerFieldList[layerIndex]!="") {
		// /*
		if (useFieldAlias) {
			AliasFieldName.length=0;
			AliasFieldAlias.length=0;
			var msg = LayerName[layerIndex] + " - aliases: ";
			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 {
				AliasFieldName[0] = "";
				AliasFieldAlias[0] = "";
			}
			//alert(msg);
		}
		// */
		var fList = LayerFieldList[layerIndex].split(",");
		var ftList = LayerFieldTypeList[layerIndex].split(",");
		var fieldCount = 0;
		for (var i=0;i<fList.length;i++) {
			var useIt = selectFields.toUpperCase().indexOf(fList[i].toUpperCase());
			if ((useIt!=-1) || (selectFields=="#ALL#")) {
				if (fList[i].toUpperCase()!=LayerShapeField[layerIndex].toUpperCase()) {
					LayerFields[fieldCount] = fList[i];
					LayerFieldType[fieldCount] = ftList[i];
					fieldCount += 1;
				}
			}
		}
		LayerFieldCount=fieldCount;
		canQuery=true;
		fList=null;
		ftList=null;
	} else {
		alert(msgList[21]);
		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;
	}
	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 layer information
function showLayerInfo(layerIndex) {
	var url = appDir + "showlayerinfo.htm?" + layerIndex;
	if (useTextFrame) {
		parent.TextFrame.document.location = url;
	} else {
		Win1 = open(url,"LayerInfoWindow","width=575,height=250,scrollbars=yes,resizable=yes");
	}
}