// Puffer in Meter
var bufferinm=0;
// Ausdehnung für Ausdruck
var minxprt=0;
var maxxprt=0;
var minyprt=0;
var maxyprt=0;
// Startausdehnung 
var startLeft   = 0;
var startRight  = 0;
var startTop    = 0;
var startBottom = 0;
// maximale Ausdehnung
var limitLeft   = 0;
var limitRight  = 999999999;
var limitTop    = 999999999;
var limitBottom = 0;
// maximale Kartengröße innerhalb des Kartenfensters
// var maxmapwidth=9999;
//var maxmapheight=9999;
// MinimalMassstab
// siehe aimsParam var minmaszstab=100;
// MaximalMassstab
// siehe aimsParam var maxmaszstab=5000000;
// Standardkoordinatensystem Gauß-Krüger, Zone 3
//var featurecoordsys="31493";
//var filtercoordsys="31493";
// Maßstab
var lngMapMassstab="0";

 
function setlayerid(){
	rgs_layerid_f001_f=getLayerIndexByID(1);
	rgs_layerid_f011_f=getLayerIndexByID(2);
	rgs_layerid_f021_f=getLayerIndexByID(5);
	rgs_layerid_wmslgngrauak5=getLayerIndexByName(rgs_wmslgngrauak5_name);
	rgs_layerid_wmslgnfarbeak5=getLayerIndexByName(rgs_wmslgnfarbeak5_name);
	rgs_layerid_wmslgngrau=getLayerIndexByName(rgs_wmslgngrau_name);
	rgs_layerid_wmslgnfarbe=getLayerIndexByName(rgs_wmslgnfarbe_name);
	rgs_layerid_wmslgndop=getLayerIndexByName(rgs_wmslgndop_name);
	rgs_layerid_gemarkungen=getLayerIndexByName(rgs_gemarkungen_name);
	rgs_layerid_gemeinden=getLayerIndexByName(rgs_gemeinden_name);
	rgs_layerid_dop=getLayerIndexByName(rgs_dop_name);
	rgs_layerid_dop2007=getLayerIndexByName(rgs_dop2007_name);
	rgs_layerid_dop2007ir=getLayerIndexByName(rgs_dop2007ir_name);
	rgs_layerid_dophh=getLayerIndexByName(rgs_dophh_name);
	rgs_layerid_metropolregion=getLayerIndexByName(rgs_metropolregion_name);
	rgs_layerid_bplanuebers=getLayerIndexByName(rgs_bplanuebers_name);
	rgs_layerid_floralkh=getLayerIndexByName(rgs_floralkh_name);
	rgs_layerid_schilderstandorte=getLayerIndexByName(rgs_schilderstandorte_name);
	rgs_layerid_bauplatz=getLayerIndexByName(rgs_bauplatz_name);
	writeProtokoll("setlayerid\n"+rgs_f001_f_name+"="+rgs_layerid_f001_f+"\n"+rgs_f011_f_name+"="+rgs_layerid_f011_f+"\n"+rgs_f021_f_name+"="+rgs_layerid_f021_f+"\n"+rgs_gemarkungen_name+"="+rgs_layerid_gemarkungen+"\n"+rgs_dop_name+"="+rgs_layerid_dop+"\nrgs_layerid_dop2007="+rgs_layerid_dop2007+"\nrgs_layerid_dophh"+rgs_layerid_dophh+"\n"+rgs_bplanuebers_name+"="+rgs_layerid_bplanuebers+"\n"+rgs_gemeinden_name+"="+rgs_layerid_gemeinden+"\n"+rgs_floralkh_name+"="+rgs_layerid_floralkh+"\n"+rgs_schilderstandorte_name+"="+rgs_layerid_schilderstandorte);
}
function setScale(){
	var w=replaceCommaByPoint(String(maxx))-replaceCommaByPoint(String(minx));
	var m = getscale(mwidth,w);
	var h=replaceCommaByPoint(String(maxy))-replaceCommaByPoint(String(miny));
	var n = getscale(mheight,h);
	if (n>m){
		m=n;
	}
	if (m!="NaN"){
		if (m<minmaszstab){
			zoomByScale(minmaszstab);
		}else if(m>maxmaszstab){
			zoomByScale(maxmaszstab);
		}
		lngMapMassstab=m;
		document.mstab.massstab.value = lngMapMassstab;
		for (var i=0;i<LayerID.length;i++) {
			if (LayerVisible[i]>0){
				if (lngMapMassstab<LayerMinScale[i] || lngMapMassstab>LayerMaxScale[i]){
					LayerVisible[i] = 2;
				}else{
					LayerVisible[i] = 1;
				}
				
			}
		}
	}
}

function setextentbym(m){
	writeProtokoll("setextentbym width_in_m "+m+ " minx "+minx+ " maxx "+maxx+ " miny "+miny+ " maxy "+maxy)	
	if (m<minmaszstab){
		m=minmaszstab;
	}
	if (m>maxmaszstab){
		m=maxmaszstab;
	}
	var midx=minx+((maxx-minx)/2);
	var midy=miny+((maxy-miny)/2);
	var pixel_in_m=(1 / (mwidth * pixelinm));
	width_in_m=m / pixel_in_m;	 
	minx=midx-(width_in_m/2);
	maxx=minx+width_in_m;
	pixel_in_m=(1 / (mheight * pixelinm));
	height_in_m=m / pixel_in_m;	 
	miny=midy-(height_in_m/2);
	maxy=miny+height_in_m;
	
}
function zoomByScale(m){
	writeProtokoll("zoomByScale 1:"+m)
	setextentbym(m);
}
function zoomByWheel(delta) {
	writeProtokoll("zoomByWheel"+delta)
    zright=10;
	zleft=10;
	zbottom=10;
	ztop=10;
	if (delta==-1){
		getExtentForZoomIn(mapX, mapY,mapX, mapY);
	}
	if (delta==1){
		getExtentForZoomOut(mapX, mapY,mapX, mapY);
	}
	getAllMaps(true);
}
function wheel(event){
	var delta = 0;
	if (!event) /* For IE. */
		event = window.event;
	if (event.wheelDelta) { /* IE/Opera. */
		delta = event.wheelDelta/120;
		/** In Opera 9, delta differs in sign as compared to IE.
		 */
		if (window.opera)
				delta = -delta;
	} else if (event.detail) { /** Mozilla case. */
		/** In Mozilla, sign of delta is different than in IE.
		 */
		delta = -event.detail;
	}
	/** If delta is nonzero, handle it.
	 * Basically, delta is now positive if wheel was scrolled up,
	 * and negative, if wheel was scrolled down.
	 */
	if (delta)
		zoomByWheel(parseInt(delta));
	/** Prevent default actions caused by mouse wheel.
	 * That might be ugly, but we handle scrolls somehow
	 * anyway, so don't bother here..
	 */
	if (event.preventDefault)
		event.preventDefault();
	event.returnValue = false;
}

function checkMassstab(e) {
	if (activate_rb){
		finishPolyline();
	}
	var kcode=-1;
	if (!e) e = window.event
	if (e.keyCode) kcode = e.keyCode;
	else if (e.which) kcode = e.which;
	if (kcode == 13)
		{
		var lmstab=document.mstab.massstab.value;
		if (document.mstab.massstab.value<minmaszstab){
			lmstab=minmaszstab;
		}
		if (document.mstab.massstab.value>maxmaszstab){
			lmstab=maxmaszstab;
		}
		zoomByScale(lmstab);
		getAllMaps(true);
		return true;
	}else{
		if (kcode > 47 && kcode < 58){
			return true;
		}else{
			return false;
		}
	}
}
function checkpuffer(e) {
	document.onkeypress=null;
	var kcode=-1;
	if (!e) e = window.event
	if (e.keyCode) kcode = e.keyCode;
	else if (e.which) kcode = e.which;
	if (kcode == 13)
		{
		setbuffer(document.puffer.txtpuffer.value);
		return true;
	}else{
		if (kcode==45 || (kcode > 47 && kcode < 58)){
			return true;
		}else{
			return false;
		}
	}
}
function getLayerIndexByName(name) {
	for (var i=0; i<LayerName.length; i++) {
		if (LayerName[i] == name){
			return i;
  		}
	}
  	return -1;
}
function getLayerIndexByID(nr){
	for (var i=0; i<LayerName.length; i++) {
		if (LayerIDTab[i] == nr){
			return i;
  		}
	}
  	return -1;
}
function setlayerhidden(idx){
	LayerVisible[idx] = 0;
	if (LayerGruppe[idx]!=""){
	   for (var k=0;k<LayerID.length;k++) {
		   if (LayerGruppe[k]==LayerGruppe[idx]) {
				LayerVisible[k]=0;
		   }
	   }
	}
}
function setlayervisible(idx){
	LayerVisible[idx] = 1;
	if (LayerGruppe[idx]!=""){
	   for (var k=0;k<LayerID.length;k++) {
		   if (LayerGruppe[k]==LayerGruppe[idx]) {
				LayerVisible[k]=1;
		   }
	   }
	}
}

function addSelectByAttribut(wherestringtab){
	writeProtokoll(wherestringtab);
	var wherestring=wherestringtab.split("|");
	var axl = "";
	for (var i=0; i<wherestring.length-1; i++) {
		axl +='<LAYER type="featureclass" name="selattr" id="selattr' + LayerIDTab[ActiveLayerIndex] + '" visible="true">\n';
		axl +='<DATASET fromlayer="' + LayerID[ActiveLayerIndex] + '" />\n';
		axl +='<SPATIALQUERY subfields="#SHAPE#" where="'+wherestring[i]+'" searchorder="optimize" featurelimit="'+intMaxFeaturInfo+'"/>\n';
		axl +='<SIMPLERENDERER>\n';
		if (LayerType[ActiveLayerIndex].toLowerCase() == "polygon"){
			axl +='<SIMPLEPOLYGONSYMBOL filltransparency="0" boundarywidth="3" boundarycolor="'+selobjectsbordercolor+'" />\n';
		}
		if (LayerType[ActiveLayerIndex].toLowerCase() == "point"){
			axl +='<SIMPLEMARKERSYMBOL color="'+selobjectsbordercolor+'" type="circle" width="18" overlap="true" />\n';
		}
		if (LayerType[ActiveLayerIndex].toLowerCase() == "line"){
			axl +='<SIMPLELINESYMBOL width="2" color="'+selobjectsbordercolor+'" antialiasing="false" overlap="true" />';
		}
		axl +='</SIMPLERENDERER>\n';
		axl +='</LAYER>\n';
		if (bufferinm!=0){
			axl +='<LAYER type="featureclass" name="selattrbuf" id="selattrbuf" visible="true">\n';
			axl +='<DATASET fromlayer="' + LayerID[ActiveLayerIndex] + '" />\n';
			axl +='<SPATIALQUERY subfields="#SHAPE#" where="'+wherestring[i]+'">\n';
			axl +='<BUFFER distance="'+bufferinm+'" bufferunits="METERS" />';
			axl +='</SPATIALQUERY>\n';
			axl +='<SIMPLERENDERER>\n';
			axl +='<SIMPLEPOLYGONSYMBOL filltransparency="0,2" fillcolor="'+selobjectsbuffercolor+'" boundary="false" />\n';
			axl +='</SIMPLERENDERER>\n';
			axl +='</LAYER>\n';
		}
	}
	return axl;
}
function addSelectByEnv(envelopetab){
	var envelope=envelopetab.split("|");
	var axl = "";
	var env;
	var b;
	for (var i=0; i<envelope.length-1; i++) {
		env=replacePointByComma(envelope[i]);
		b=env.split(":");
		axl +='<LAYER type="featureclass" name="SelByEnv" id="selbyenv' + LayerIDTab[ActiveLayerIndex] + '" visible="true">\n';
		axl +='<DATASET fromlayer="' + LayerID[ActiveLayerIndex] + '" />\n';
		axl +='<SPATIALQUERY>\n';
		axl +='<SPATIALFILTER relation="area_intersection">\n';
		axl +='<ENVELOPE minx="'+b[0]+'" miny="'+b[1]+'" maxx="'+b[2]+'" maxy="'+b[3]+'" />\n';
		axl +='</SPATIALFILTER>\n';
		axl +='</SPATIALQUERY>\n';
		axl +='<SIMPLERENDERER>\n';
		if (LayerType[ActiveLayerIndex] == "polygon"){
			axl +='<SIMPLEPOLYGONSYMBOL boundarywidth="3" filltransparency="0" boundarycolor="'+selobjectsbordercolor+'" />\n';
		}
		if (LayerType[ActiveLayerIndex] == "line"){
			axl +='<SIMPLELINESYMBOL width="3" color="'+selobjectsbordercolor+'" />\n';
		}
		if (LayerType[ActiveLayerIndex] == "point"){
			axl +='<SIMPLEMARKERSYMBOL width="3" type="circle" color="'+selobjectsbordercolor+'" />\n';
		}
		axl +='</SIMPLERENDERER>\n';
		axl +='</LAYER>\n';
		if (bufferinm!=0){
			axl +='<LAYER type="featureclass" name="SelByEnvBuf" id="SelByEnvBuf" visible="true">\n';
			axl +='<DATASET fromlayer="' + LayerID[ActiveLayerIndex] + '" />\n';
			axl +='<SPATIALQUERY accuracy="0">\n';
			axl +='<BUFFER distance="'+bufferinm+'" bufferunits="METERS" />';
			axl +='<SPATIALFILTER relation="area_intersection">\n';
			axl +='<ENVELOPE minx="'+b[0]+'" miny="'+b[1]+'" maxx="'+b[2]+'" maxy="'+b[3]+'" />\n';
			axl +='</SPATIALFILTER>\n';
			axl +='</SPATIALQUERY>\n';
			axl +='<SIMPLERENDERER>\n';
			axl +='<SIMPLEPOLYGONSYMBOL fillcolor="'+selobjectsbuffercolor+'" filltransparency="0,2" boundary="false" />\n';
			axl +='</SIMPLERENDERER>\n';
			axl +='</LAYER>\n';
		}
	}
	return axl;
}


function getscale(pixWidth,meterDist) {
	// pixWidth=Breite des Bildes in Pixeln
	// meterDist=entsprechende Kartenbreite in Metern
	var pixel_in_m=(1 / (pixWidth * pixelinm));
	var m = meterDist * pixel_in_m;
	var massstab=Math.round(m);
	if (massstab<1)
		massstab=massstab*-1;
	return massstab;

}
function addUsernameToMap(){
	var customString = "";
	var tmp_text=rgs_strLoginName;
	customString += '<LAYER type="acetate" name="InteregisUsername">\n';		
	customString += '<OBJECT units="pixel">\n<TEXT coords="10 3" label="'+rgs_strLoginName+'">\n';
	customString += '<TEXTMARKERSYMBOL fontsize="12" font="Arial" fontcolor="255,0,0" overlap="True" />';
	customString += '</TEXT>\n</OBJECT>\n';
	customString += '</LAYER>\n';
	return customString;
}
function afterMapRefresh(){
	if (activeTool!="print"){
		hideloading();
//		hideLayer("id");
	}
	rgs_kartecount += 1;
	writeLayerLogfile();
}
function convertPixelToMap(px, py){
	var mx = minx + (meterpropixelX * px);
	var my = miny + (dx * (mheight - py));
	var newpoint = new Array();
	newpoint[0] = mx;
	newpoint[1] = my;
	return newpoint;
}
function convertMapToPixel(mx, my){
	var mprp=((maxx - minx) / mwidth);
	var px=0;
	px=(maxx -mx)/mprp;
	var pp=(mwidth/2)-px;
	px=px+(2*pp)
	var newpoint = new Array();
	newpoint[0] = Math.round(px);
	
	var mprp=((maxy - miny) / mheight);
	px=0;
	px=(maxy -my)/mprp;
	newpoint[1] = Math.round(px);
	return newpoint;
/*
pixelPointY =((maxy - clickPointY[h][i]) / yIncr);
				Ypoints[h][i]=parseInt(pixelPointY);
				
	if (mx > minx){
		px=((mx-minx)/mprp)
	}else{
		px=((minx-mx)/mprp)
	}
	var newpoint = new Array();
	newpoint[0] = Math.round((mwidth/2)+(px*2));
	mprp=((maxy - miny) / mheight);
	px=0;
	if (my > miny){
		px=(my-miny)/mprp
	}else{
		px=(miny-my)/mprp
	}
	newpoint[1] = Math.round((mheight/2)+(px*2));
	alert("newpoint "+newpoint)
	*/
	/*
var xIncr = (maxx - minx) / mwidth;
	pixelPointX =((maxx - clickPointX[h][i]) / xIncr);
				pluspx=(mwidth/2)-pixelPointX;
				pixelPointX=pixelPointX + (2*pluspx);
				Xpoints[h][i]=parseInt(pixelPointX);
		*/		
}



