var LayerName = new Array();
var LayerID = new Array();
var LayerVisible = new Array();
var LayerVisibleOrig = '';
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 LayerFieldPrefix = 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 LayerAliasname = new Array();
var LayerIDTab = new Array();
var LayerBerechtigung = new Array();
//var LayerUrlSwatch = new Array();
var LayerVisibleOriginal="";
var LayerUrlImage = new Array();
var LayerGruppe = new Array();
var LayerLegendeSortierung = new Array();
var LayerLegendeOrdner = new Array();
var LayerLegendeThema = new Array();
var LayerSelFieldList = new Array();
var LayerFieldAliasList = new Array();
var LayerThemaID = new Array();
var LayerWmsMap = new Array();
var LayerWmsMapInfo = new Array();
var LayerWmsMapPrt = new Array();
var LayerSortierung = new Array();
var LayerThemaID = new Array();
var LayerHyperlinkList = new Array();
var LayerVisibleInLegend = new Array();
var LayerMS = new Array();
var LayerSelAttr = new Array();
var LayerSelBuffer = new Array();
var LayerSelEnv = new Array();
var LayerInfoInvisibleLayer = new Array();
var LayerPixelTolerance = new Array();


var ActiveLayerIndex = -1;
var LastActiveLayerIndex = -1;
var ActiveLayer;
var layerCount=0;

function getLayers(theReply,idx) {
	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 = "";
		//alert("Getting layer parameters");
		var fieldCount = 0;
		var layerMinX=0;
		var layerMinY=0;
		var layerMaxX=0;
		var layerMaxY=0;
		var jrendpos=-1;
		//alert("Processing LayerInfo");
		lpos = theReplyUC.indexOf("<LAYERINFO",zpos);
		while (lpos > -1) {
				zpos = theReplyUC.indexOf("</LAYERINFO",lpos);
				if (zpos!=-1) {
					pos = theReplyUC.indexOf("NAME=",lpos);
					if (pos != -1) {
						startpos = pos + 6;
						endpos = theReply.indexOf(dQuote, startpos);
						tempString = theReply.substring(startpos,endpos);
						LayerMS[layerCount]=MsListMs[intActiveMapservice];
						LayerName[layerCount] = tempString;
						LayerAliasname[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 = theReplyUC.substring(startpos,endpos);
							LayerVisible[layerCount] = "1";
							if (visString=="FALS"){
								LayerVisible[layerCount] = "0";
							}
						}
				LayerVisible[layerCount] = "1";
						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];
						}
						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] = Math.round(parseFloat(minString)/0.000264583333);
						} 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] = Math.round(parseFloat(maxString)/0.000264583333);
						} else {
							LayerMaxScale[layerCount] = 999999999;
						}
						//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;
						if (jrendpos > -1)
							{endpos=jrendpos};
						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] += ",";
						LayerSelFieldList[layerCount] += " ";
											
											LayerFieldTypeList[layerCount] += ",";
											LayerFieldSizeList[layerCount] += ",";
											LayerFieldPrecisionList[layerCount] += ",";
										}
										LayerFieldList[layerCount] +=  tempString ;
										LayerFieldTypeList[layerCount] += testString;
										startpos = theReply.indexOf("size=",jpos);
										startpos= startpos + 6;
										endpos = theReply.indexOf(dQuote, startpos);
										testString = theReply.substring(startpos,endpos);
										LayerFieldSizeList[layerCount] += testString;
										startpos = theReply.indexOf("precision=",jpos);
										startpos += 11;
										endpos = theReply.indexOf(dQuote, startpos);
										testString = theReply.substring(startpos,endpos);
										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]="";
						}
					
						LayerBerechtigung[layerCount]="1";
						// LayerUrlSwatch[layerCount]="1";
						LayerUrlImage[layerCount]="";
						LayerGruppe[layerCount]="";
						LayerLegendeSortierung[layerCount]="";
						LayerLegendeOrdner[layerCount]=MsListMs[intActiveMapservice];
						LayerSelFieldList[layerCount]="#ALL#";
						LayerFieldAliasList[layerCount]="";
						LayerThemaID[layerCount]="0";
						LayerWmsMap[layerCount]="";
						LayerSortierung[layerCount]="50";
						LayerHyperlinkList[layerCount]="";
						LayerVisibleInLegend[layerCount]="1";
						LayerMS[layerCount]=0;
						layerCount += 1;
						endpos = zpos;
					}
					lpos = theReplyUC.indexOf("<LAYERINFO",zpos);
					jrendpos=lpos;
				} else {
					lpos = -1;
				}
		}
	writeProtokoll("getlayers "+LayerID.length);
}
function editLayerFieldListe(){
	for (var i=0;i<LayerID.length;i++) {
		if (LayerSelFieldList[i]=="*"){
			LayerSelFieldList[i]="#ALL#";
		}
		if (LayerSelFieldList[i]!="" && LayerFieldPrefix[i]!=""){
			if (LayerSelFieldList[i]=="#ALL#"){
				if (LayerFieldList[i]!=""){
					LayerSelFieldList[i]=LayerFieldList[i];
				}
			}
			if (LayerFieldAliasList[i]!=""){
				var f=LayerFieldAliasList[i].split("|");
				if (f.length>0){
					if (LayerFieldPrefix[i]!=""){
						LayerFieldAliasList[i]="";
						for (var j=0;j<f.length;j++) {
							var g=f[j].split(":");
							if (g[0]!="SHAPE.AREA"&&g[0]!="SHAPE.LEN"&&g[0]!="#SHAPE#"){
								g[0]=LayerFieldPrefix[i]+"."+g[0];
							}
							f[j]=g[0]+":"+g[1];
						}
						LayerFieldAliasList[i]=f.join("|");
					}
				}else{
					LayerFieldAliasList[i]=LayerFieldPrefix[i]+"."+LayerFieldAliasList[i];
				}
			}
			var f=LayerSelFieldList[i].split(",");
			LayerSelFieldList[i]="";
			for (var j=0;j<f.length;j++) {
				if (j>0){
					LayerSelFieldList[i]+=",";
				}
				if (f[j]!="SHAPE.AREA"&&f[j]!="SHAPE.LEN"&&f[j]!="#SHAPE#"){
					LayerSelFieldList[i]+=LayerFieldPrefix[i]+"."+f[j];
				}else{
					LayerSelFieldList[i]+=f[j];
				}
				
			}
		}
	}
}
function getLayerVisibility(idx){
	if (idx > -1 && LayerVisible[idx]==1 && LayerBerechtigung[idx]==1){
		return true;
	}else{
		return false;
	}			
}
function showlayerInfo(idx) {
	//hann
	/*
	var url = "js/layerliste.cfm?NAME="+LayerName[idx]+"&ID="+LayerThemaID[idx]+"&IMG="+LayerUrlImage[idx]+"&VON="+LayerMinScale[idx]+"&BIS="+LayerMaxScale[idx]+"#" + LayerThemaID[idx];
	var Win1 = open(url,"LayerInfo","width=700,height=300,scrollbars=yes,resizable=yes,location=yes,menubar=yes,toolbar=yes");
	Win1.focus();
	if (LayerHyperlinkList[idx]){
	*/
		var url = LayerHyperlinkList[idx];
		var Win1 = open(url,"LayerInfo","width=700,height=300,scrollbars=yes,resizable=yes,location=yes,menubar=yes,toolbar=yes");
		Win1.focus();
	/*
	}else{
		if (urllayerinfo!=""){
			var url = urllayerinfo+"?LAYERID="+LayerIDTab[idx]+"#"+LayerIDTab[idx];
			var Win1 = open(url,"LayerInfo","width=700,height=300,scrollbars=yes,resizable=yes,location=yes,menubar=yes,toolbar=yes");
			Win1.focus();
		}
	}
	*/
}
function getLayerIndexByTabID(tabid){
	var lidx=-1;
	for (i=0;i<LayerIDTab.length;i++){
		if (LayerIDTab[i]==tabid){
			lidx=i;
		}
	}
	return lidx;
}
function getLayerIndexByServiceID(serviceid,layerid){
	var intId=-1;
	for (i=0;i<LayerID.length;i++){
		if (LayerMS[i]==serviceid && LayerID[i]==layerid && LayerBerechtigung[i]==1){
			intId=i;
		}
	}
	if (intId<0){
		writeProtokoll("Fehler: getLayerIndexByServiceID "+serviceid +" " +layerid+" nicht erkannt ! ");
	}

	return intId;
}
function getServiceIdByName(servicename){
	var intId=-1;
	/*
	for (var i=0;i<MsListMs.length;i++){
		if (MsListMs[i]==servicename){
			intId=i;
		}
	}
	*/
	i=-1;
	intId=-1;
	while (i<MsListMs.length && intId<0) {
		i++;
		if (MsListMs[i]==servicename){
			intId=i;
		}
	}

	if (intId<0){
		writeProtokoll("Fehler: getServiceIdByName\n"+servicename+" nicht erkannt ! " );
	}
	return intId;
	
}
