/*
* Copyright (c) 2003-2009 NETGIS GdbR Benediktinerstr. 32a 54292 Trier Germany http://www.netgis.de
* The NETGIS Mapserver Client uses folowing JavaScript frameworks:
*
* Prototype JavaScript framework, version 1.6.0.3
*  Copyright (c) 2005-2008 Sam Stephenson
*  Prototype is freely distributable under the terms of an MIT-style license.
*  For details, see the Prototype web site: http://www.prototypejs.org/
*
* script.aculo.us scriptaculous.js v1.7.0, Fri Jan 19 19:16:36 CET 2007
* Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
*
* wz_jsgraphics.js    v. 2.36,  wz_tooltip.js	 v. 4.12
* Copyright (c) 2002-2007 Walter Zorn. All rights reserved
* The latest version is available at http://www.walterzorn.com or http://www.devira.com or http://www.walterzorn.de
*
* dTree 2.05 | www.destroydrop.com/javascript/tree/ 
* Copyright (c) 2002-2003 Geir Landrö 

*SortTable  version 2  7th April 2007
*Stuart Langridge, http://www.kryogenix.org/code/browser/sorttable/
 */

//Globale Variablen
	var hostName = document.location.host;
	var protocolName = document.location.protocol;
	var mapdim,extArray,x1,y1,x2,y2,imgArray,mapWidth,mapHeight,quotRw,quotHw;
	var clickX = 0;
	var clickY = 0;
	var xoffset = 0; // X-Offset des Kartenlayers in px
	var yoffset = 0; //Y-Offset des Kartenlayers in px
	var buttomoffset = 25; //unterer Rand in px entsprechende Anpassungen bei #coordbackId, #mapimgId, #imgId
	var rightoffset = 0; //rechter Rand in px
	var markeroffset = 13;
	var scalefactor = 1; //Scalefactor des Betriebsystems (ab V4 immer 1)
	//Framedefinitionen
	var winTop = parent.topFrame;
	var winLeft = parent.leftFrame;
	var winMap = parent.mapFrame;
	var winData = parent.dataFrame;
	var winMainlayer = parent.mainlayerFrame;
	//Fensterdefinition
	var querywin;	
	var querywinwidth = 480;
	var querywinheight = 320;
	var editwin;
	var googlewin;

//Initialisierung
function init(){
	winMap.focus();
	toggleInit('refimgcontentId','refimgopenId');
	extArray = $("imgextId").value.split(' ');
	x1 = parseFloat(extArray[0]);
	y1 = parseFloat(extArray[1]);
	x2 = parseFloat(extArray[2]);
	y2 = parseFloat(extArray[3]);
	imgArray = $("imgsizeId").value.split(' ');
	mapWidth = imgArray[0];
	mapHeight = imgArray[1];
	quotRw = (x2- x1)/mapWidth;
	quotHw =(y2- y1)/mapHeight;
	mapdim = windim().split(' ');
	$("imgId").setStyle({width : mapdim[0] , height : mapdim[1]});
	$("mapimgId").setStyle({width : mapdim[0] , height : mapdim[1]});
	setCursor($("cursorId").value);
	setMode($("getmodeId").value);
	winTop.$("realscaleId").value = Math.round($("scaleId").value * scalefactor);
	showMeasure();
	showMarker();
	loadLegend();
	checkLegend();
	checkMainLayer();
	addHistory();
	hiliteNquery();
	Event.observe($('refimgcontentId'), 'click', getrefCoords);
	Event.observe($('imgId'), 'mousemove', showCoords);
}

//SetMode-Funktion//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Mode setzen
function setMode(mode){
  stopObserveall();
  switch (mode) {
	//Zoomin
	case "zoomin":
		Event.observe($("imgId"), 'mousedown', startZoombox);
		$("getmodeId").value ="zoomin";
		winTop.$("getmodeId").value ="zoomin";
		setCursor("crosshair");
		hiliteImg("but_zoomrect");
		break;
	//Pan
	case "pan":
		Event.observe($("imgId"), 'mousedown', startPan);
		$("getmodeId").value ="pan";
		winTop.$("getmodeId").value ="pan";
		setCursor("move");
		hiliteImg("but_pan");
		break;
	//Query
	case "query":
		Event.observe($("imgId"), 'click', queryClick);
		$("getmodeId").value ="query";
		winTop.$("getmodeId").value ="query";
		setCursor("help");
		hiliteImg("but_query");
		break;
	//Multiquery Rechteck
	case "nquery":
		Event.observe($("imgId"), 'mousedown', startZoombox);
		$("getmodeId").value ="nquery";
		winTop.$("getmodeId").value ="nquery";
		setCursor("help");
		hiliteImg("but_nquery");
		break;
	//Multiquery Polygon
	case "nquerypoly":
	    winData.$("editcoordId").value = "";
		Event.observe($("imgId"), 'click', polyQuerystart);
		Event.observe(document, 'dblclick', polyQueryend);
		$("getmodeId").value ="nquerypoly";
		winTop.$("getmodeId").value ="nquerypoly";
		setCursor("help");
		hiliteImg("but_nquerypoly");
		break;
	//query point
	case "rquery":
		Event.observe($("imgId"), 'click', rquery);
		$("getmodeId").value ="rquery";
		winTop.$("getmodeId").value ="rquery";
		setCursor("crosshair");
		hiliteImg("but_rquery");
		break;
	//measure point
	case "measure":
		//Event.observe(document, 'keypress', function(event){ if(event.keyCode == Event.KEY_DELETE) alert('Lösch mich');});
		Event.observe($("imgId"), 'click', mesPoint);
		Event.observe($("imgId"), 'dblclick', getArea);
		$("getmodeId").value ="measure";
		winTop.$("getmodeId").value ="measure";
		setCursor("crosshair");
		hiliteImg("but_mes");
		break;
	//edit point (Linkgenerator)
	case "editpoint":
		Event.observe($("imgId"), 'click', setPoint);
		$("getmodeId").value ="editpoint";
		winTop.$("getmodeId").value ="editpoint";
		setCursor("crosshair");
		hiliteImg("none");
		if (winLeft.$("editbutId")){
			winLeft.$("editbutId").addClassName('activeBut');
			//Sprachversion?
			if (winLeft.$("langactivebutId")){
			winLeft.$("editbutId").innerHTML = winLeft.$("langactivebutId").value;
			}
			else{
			winLeft.$("editbutId").innerHTML = "Bearbeitungsmodus aktiv!";
			}
		}
		break;	
	//scetch point, Zeichnen von Punkten (Editmodul)
	case "scetchpoint":
		Event.observe($("imgId"), 'click', scetchPoint);
		$("getmodeId").value ="scetchpoint";
		winTop.$("getmodeId").value ="scetchpoint";
		setCursor("crosshair");
		hiliteImg("none");
	    hiliteEditimg();
		break;
	//scetch line, Zeichnen von Linien  (Editmodul)
	case "scetchline":
		Event.observe($("imgId"), 'click', scetchLinestart);
		Event.observe(document, 'dblclick', scetchLineend);
		$("getmodeId").value ="scetchline";
		winTop.$("getmodeId").value ="scetchline";
		setCursor("crosshair");
		hiliteImg("none");
	    hiliteEditimg();
		break;
	//Queryedit, Abfrage von Objekten  (Editmodul)
	case "queryedit":
		if (winData.$("edittableId").value == ""){
			alert("Bitte eine Zielebene auswaehlen!");
		}
		else{	
			Event.observe($("imgId"), 'click', queryeditClick);
			$("getmodeId").value ="queryedit";
			winTop.$("getmodeId").value ="queryedit";
			setCursor("help");
			hiliteImg("none");
		    hiliteEditimg();
		}			
		break;
	//nix
	case "noevent":
		$("getmodeId").value ="noevent";
		winTop.$("getmodeId").value ="noevent";
		setCursor("default");
		hiliteImg("none");
		hiliteEditimg();
		break;
	} //Ende switch
}
//Ende SetMode-Funktion//////////////////////////////////////////////////////////////////////////////////////////////////////////////

//Alle relevanten aktiven Events entladen
function stopObserveall(){
	//RubberBand Fix für Firefox3
	if(navigator.userAgent.match("rv:1\.9")){
		$("rubberBand").innerHTML = '<img src="img/dot.gif">';
		$("rubberBand").setStyle({width :'', height : '', visibility : '', left: '', top : ''});
		$("imgId").innerHTML = '<img src="img/dot.gif">';	
		$("imgId").setStyle({width :'', height : '', visibility : '', left: '', top : ''});
	}
	//Pan-Events
	Event.stopObserving($("imgId"), 'mousedown', startPan);
	Event.stopObserving($("imgId"), 'mousemove', movePan);
	Event.stopObserving(document, 'mouseup', stopPan);
	Event.stopObserving(document, 'mouseout', stopPan);
	//Zoom-Events
	Event.stopObserving($("imgId"), 'mousedown', startZoombox);
	Event.stopObserving($("imgId"), 'mousemove', moveZoombox);
	Event.stopObserving(document, 'mouseup', stopZoombox);
	Event.observe($('imgId'), 'mousewheel', zoomWheel);
	Event.observe($('imgId'), "mousewheel", zoomWheel, false);
	Event.observe($('imgId'), "DOMMouseScroll", zoomWheel, false); // Firefox
	//Query-Events
	Event.stopObserving($("imgId"), 'click', queryClick);
	Event.stopObserving($("imgId"), 'click', rquery);
	Event.stopObserving($("imgId"), 'click', polyQuerystart);
	Event.stopObserving(document, 'dblclick', polyQueryend);
	Event.stopObserving($("imgId"), 'click', queryeditClick);
	//Edit u. Mess-Events
	Event.stopObserving($("imgId"), 'click', mesPoint);
	Event.stopObserving($("imgId"), 'dblclick', getArea);
	//mod_Events
	Event.stopObserving($("imgId"), 'click', scetchPoint);
	Event.stopObserving($("imgId"), 'click', scetchLinestart);
	Event.stopObserving(document, 'dblclick', scetchLineend);
	//Selektier- und Editbuttons zurücksetzen
	resetEditButtons();
}

//Editier-Buttons zurücksetzen wenn Modus deaktiv
function resetEditButtons(){
	//Selektierbutton zurücksetzen wenn selectmodus deaktiv
	if($("getmodeId").value != "multiselect" && winLeft.document.getElementById("multiselectimgId")){
	winLeft.$("multiselectimgId").removeClassName('activeBut');
	winLeft.$("multiselectimgId").innerHTML = "&raquo; Selektiermodus aktivieren";
	}
	//Editbutton zurücksetzen wenn editpointmodus deaktiv
	else if($("getmodeId").value != "editpoint" && winLeft.document.getElementById("editbutId")){
	winLeft.$("editbutId").removeClassName('activeBut');
	winLeft.$("editbutId").innerHTML = " &raquo;&raquo; Punkt bearbeiten";
	}
	//Editbutton zurücksetzen wenn queryeditmodus deaktiv
	else if($("getmodeId").value != "queryedit" && winLeft.document.getElementById("imgeditId")){
	winLeft.$("imgeditId").src= "img/but_edit.gif";
	}
}

//Pan-Funktion//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Pan start
function startPan(event){
	$("mapimgId").focus();
	clickX = Event.pointerX(event)-xoffset;
	clickY = Event.pointerY(event)-yoffset;
	Event.observe($("imgId"), 'mousemove', movePan);
	Event.observe(document, 'mouseup', stopPan);
	Event.observe(document, 'mouseout', stopPan);
}
//Pan move
function movePan(event){
	$("markerlayId").setStyle({visibility : 'hidden'});
	$("graph1Id").setStyle({visibility : 'hidden'});
	$("graph2Id").setStyle({visibility : 'hidden'});
	$("point1Id").setStyle({visibility : 'hidden'});
	$("point2Id").setStyle({visibility : 'hidden'});
	$("point_edit_Id").setStyle({visibility : 'hidden'});
	$("point_interpol_Id").setStyle({visibility : 'hidden'});
	$("maphiliteId").innerHTML = "";
	$("mapeditId").innerHTML = "";
	var posx = Event.pointerX(event)-clickX;
	var posy = Event.pointerY(event)-clickY;
    $("mapimgId").setStyle({left: + posx + 'px'});
    $("mapimgId").setStyle({top: + posy + 'px'});
	$('poiId').hide();
	$('hilitepoiId').hide();
}
//Pan Stop
function stopPan(event){
	Event.stopObserving($("imgId"), 'mousemove', movePan);
	var sclickX = (Event.pointerX(event)-xoffset);
	var sclickY = (Event.pointerY(event)-yoffset);
	var newX, newY;
	if (clickX > sclickX){
	newx = (mapWidth/2) - (sclickX-clickX);
	}
	else{
	newx = (mapWidth/2) + (clickX-sclickX);
	}
	if (clickY > sclickY){
	newy = (mapHeight/2) + (clickY-sclickY);
	}
	else{
	newy = (mapHeight/2) - (sclickY-clickY);
	}	
	$("imgxyId").value = (newx) + " " + (newy);
	$("imgboxId").value = "";
	$("scaleId").value = "";
    $("mapxyId").value = "";
	$("refxyId").value = "";
	showStatlay();
}
//Ende Pan-Funktion//////////////////////////////////////////////////////////////////////////////////////////////////////////////

//Zoombox-Funktion//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Zoombox (Rubberband) start
function startZoombox(event){
	//$("mapimgId").focus();
	$("mapimgId").focus();
	clickX = Event.pointerX(event);
	clickY = Event.pointerY(event);
	$("rubberBand").setStyle({left: clickX +'px' , top: clickY  +'px'});
	$("rubberBand").setStyle({width : 0, height : 0, visibility : 'visible'});
	Event.stopObserving($("imgId"), 'mousedown', startZoombox);
	Event.observe($("imgId"), 'mousemove', moveZoombox);
	Event.observe(document, 'mouseup', stopZoombox);
}
//Zoombox (Rubberband) bewegen
function moveZoombox(event){
	 $('poiId').hide();
	 $('hilitepoiId').hide();
	 var diffx = Event.pointerX(event) - clickX;
	 var diffy = Event.pointerY(event) - clickY;
	 if ( diffx < 0) {
	 var corrx = clickX + diffx
	 $("rubberBand").setStyle({left: + corrx + 'px'});
	 }
	 if ( diffy < 0 ){
	 var corry = clickY + diffy
	 $("rubberBand").setStyle({top: + corry + 'px'});
	 }
 $("rubberBand").setStyle({width: + Math.abs(diffx) , height: + Math.abs(diffy)});
}
//Zoombox (Rubberband) stop
function stopZoombox(event){
	$("rubberBand").setStyle({visibility : 'hidden'});	
   Event.stopObserving($("imgId"), 'mousemove', moveZoombox);    
   clickX = clickX-xoffset;
   clickY = clickY-yoffset;
   if (clickX > $("xId").value && clickY > $("yId").value){
   $("imgboxId").value = $("xId").value + " " + $("yId").value + " " + clickX + " " + clickY;
   }
   else if (clickX > $("xId").value){
   $("imgboxId").value = $("xId").value + " " + clickY + " " + clickX + " " + $("yId").value;
   }
   else if (clickY > $("yId").value){
   $("imgboxId").value = clickX + " " + $("yId").value + " " + $("xId").value + " " + clickY;
   }
   else if (clickX < $("xId").value && clickY < $("yId").value){
   $("imgboxId").value = clickX + " " + clickY + " " + $("xId").value + " " + $("yId").value;
   }
   //wenn Anfangs und Endkoordinaten identisch sind
   if (clickX == $("xId").value || clickY == $("yId").value) {
		//wenn zoommodus aktiv
		if  ($("getmodeId").value == "zoomin"){	
			navClick(event);
			}
		//Wenn nQuerymode aktiv (Rechteckabfrage) und nur einfacher Klick in Querymodus wechseln
	   	else if  ($("getmodeId").value == "nquery"){
			setMode("query");
			queryClick(event);
		}
   }
   //wenn Anfangs und Endkoordinaten nicht identisch sind (bbox)
   else {	
		//Wenn nQuerymode aktiv (Rechteckabfrage)
		if  ($("getmodeId").value == "nquery"){
			nqueryClick();		
			setMode("nquery");			
		}
		//Wenn Zoommodus aktiv
		else {
		$("scaleId").value = "";
        $("mapxyId").value = "";
        $("imgxyId").value = "";
        $("refxyId").value = "";
		showStatlay();
		}
	}
}
//Ende Zoombox-Funktion//////////////////////////////////////////////////////////////////////////////////////////////////////////////

//Query-Funktionen//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Einfache Punktquery
function queryClick(event) {
	//Bildkoordinaten in Gauss umrechnen
	var mousex = Event.pointerX(event)-xoffset;
	var mousey = Event.pointerY(event)-yoffset;
	var Gx = x1 + ((mousex *  (x2 - x1 )) / mapWidth);
	var Gy = y2 - ((mousey *  (y2 - y1 )) / mapHeight);
	var qlayer = winData.$("activelayerId").value;
	var qextent = winMap.$("imgextId").value;
	var qsize = winMap.$("imgsizeId").value;
	var lang = winData.$("langId").value;
	var standardquery = true;
	//Spezialabfrage in definierter Konfiguration (custom.js)
	if(isDefined("specialqlayer")==true){
		for (var i = 0; i < specialqlayer.length; i++) {
			if(qlayer == specialqlayer[i]["name"]){
				standardquery = false;
				specialqlayer[i]["frame"].location.href = protocolName + '//' + hostName + '/' + serviceName + '/' + specialqlayer[i]["path"] + '?qx=' + Gx + '&qy=' + Gy + '&qxpix=' + mousex + '&qypix=' + mousey + '&qlayer=' + qlayer +  '&qextent=' + qextent + '&qsize=' + qsize + '&lang=' + lang;
			}
		}
	}
	//Standardabfrage in Fenster
	if(standardquery == true){
		querywin = window.open('' + protocolName + '//' + hostName + '/' + serviceName + '/query/query.php?qx=' + Gx + '&qy=' + Gy + '&qxpix=' + mousex + '&qypix=' + mousey + '&qlayer=' + qlayer +  '&qextent=' + qextent + '&qsize=' + qsize +  '&lang=' + lang + '','query','status=yes,resizable=yes,menubar=yes,locationbar=false,toolbar=false,width=' + querywinwidth +  ',height=' + querywinheight +  ',scrollbars=yes');
		//Bugfix Google Chrome
		var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
		if (is_chrome) {querywin.parent.blur();}
		querywin.focus();
	}
}

//Query über Rechteck
function nqueryClick() {
	//Bildkoordinaten in Gauss umrechnen
	var imgboxvars = $("imgboxId").value.split(' ');
	var qlayer = winData.$("activelayerId").value;
	var qextent = winMap.$("imgextId").value;
	var qsize = winMap.$("imgsizeId").value;
	var Gx1 = x1 + ((imgboxvars[0] *  (x2 - x1 )) / mapWidth);
	var Gy1 = y2 - ((imgboxvars[1] *  (y2 - y1 )) / mapHeight);
	var Gx2 = x1 + ((imgboxvars[2] *  (x2 - x1 )) / mapWidth);
	var Gy2 = y2 - ((imgboxvars[3] *  (y2 - y1 )) / mapHeight);
	var lang = winData.$("langId").value;
	var standardquery = true;
	//Spezialabfrage in definierter Konfiguration (custom.js)
	if(isDefined("specialqlayer")==true){
		for (var i = 0; i < specialqlayer.length; i++) {
			if(qlayer == specialqlayer[i]["name"]){
				standardquery = false;
				specialqlayer[i]["frame"].location.href = protocolName + '//' + hostName + '/' + serviceName + '/' + specialqlayer[i]["path"] + '?qx1=' + Gx1 + '&qy1=' + Gy1 + '&qx2=' + Gx2 + '&qy2=' + Gy2 + '&qlayer=' + qlayer + '&qextent=' + qextent + '&qsize=' + qsize  + '&lang=' + lang;
			}
		}
	}
	//Standardabfrage in Fenster
	if(standardquery == true){
		querywin = window.open('' + protocolName + '//' + hostName + '/' + serviceName + '/query/nquery.php?qx1=' + Gx1 + '&qy1=' + Gy1 + '&qx2=' + Gx2 + '&qy2=' + Gy2 + '&qlayer=' + qlayer + '&qextent=' + qextent + '&qsize=' + qsize + '&lang=' + lang + '','query','status=yes,resizable=yes,menubar=yes,locationbar=false,toolbar=false,width=' + querywinwidth +  ',height=' + querywinheight +  ',scrollbars=yes');
		//Bugfix Google Chrome
		var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
		if (is_chrome) {querywin.parent.blur();}
		querywin.focus();
	}
}

//Markieren einer Mehrfachabfrage via Ajax Updater-Objekt
var hiliteNquery = function()
{
var qparam = winData.$("nquerystringId").value;
	if(qparam != ""){
		var rnd = parseInt(Math.random()*99999999);	
		var qlayer = winData.$("activelayerId").value;
		var qextent = winMap.$("imgextId").value;
		var qsize = winMap.$("imgsizeId").value;
		var qscale = winMap.$("scaleId").value;
		param = qparam +  '&qextent=' + qextent + '&qsize=' + qsize + '&qscale=' + qscale +'&random='+rnd;
		//alert (param);
	     var myAjax = new Ajax.Updater(
	        "maphiliteId",
			"" + protocolName + "//" + hostName + "/" + serviceName + "/query/nquery_hilite.php",
	        {
	            parameters:param,
	            onFailure:showError,
				onLoading:loadingAjax,
				onLoaded:stoploadingAjax,
				onComplete:function(){
			    window.setTimeout("stoploadingAjax()",100);
			}
	        }
	    );	
	}
	else{
	return 0;
	}
}

//aller Query Markierungen löschen
function clearHilite(){	
	winData.$("nquerystringId").value = "";
	winMap.$("hiliteimgId").src = "../" + serviceName + "/img/dot.gif";
	winMap.$("editimgId").src = "../" + serviceName + "/img/dot.gif";
	winMap.hideMarker();
	winMap.clearMeasure();
	winMap.clearPolyline();
	//alle markierten Objekte aus dem Editmodus demarkieren
	winData.$("editkeyId").value = "";
	winData.$("editgeomId").value = "";
	winData.$("editpindexId").value = "";
	winData.$("editpmodeId").value = "";
	if (winLeft.document.getElementById("editdactiveobjectId")){
		winLeft.$("editdactiveobjectId").innerHTML = '';
		winLeft.$("editmessageId").innerHTML = '';
		winMap.$("point_edit_Id").innerHTML = '';
		//winLeft.setEditpmode('none'); 
		winMap.setMode("queryedit");
	}
}


//Rasterquery DHM via Ajax Updater-Objekt
function rquery(event) {
	//Bildkoordinaten in Gauss umrechnen
	var mousex = Event.pointerX(event)-xoffset;
	var mousey = Event.pointerY(event)-yoffset;
	var Gx = x1 + ((mousex *  (x2 - x1 )) / mapWidth);
	var Gy = y2 - ((mousey *  (y2 - y1 )) / mapHeight);
	//falls Koordinatenberechnung aktiv im linken Frame
	if(winLeft.document.getElementById("myoutepsgId")){
		winLeft.$("myxId").value = Math.round(Gx);
		winLeft.$("myyId").value = Math.round(Gy);
	}
	//Gausskoordinaten in Form schreiben
	//winLeft.location.href = "" + protocolName + "//" + hostName +"/"+ serviceName +"/query/rasterquery.php?coord="+Gx+","+Gy;
	$("savesearchId").value = Math.round(Gx) + " " + Math.round(Gy);
	showMarker ();
	var rnd = parseInt(Math.random()*99999999);
	var lang = winData.$("langId").value;
    var param = "coord="+Gx+","+Gy+"&random="+rnd + "&lang="+lang;
    var myAjax = new Ajax.Updater(
        "qId",
        "" + protocolName + "//" + hostName + "/" + serviceName + "/query/rasterquery.php",
        {
            parameters:param,
            onFailure:showError,
			onLoading:loadingAjax,
			onLoaded:stoploadingAjax
        }
    );
}

//Ende Query-Funktionen//////////////////////////////////////////////////////////////////////////////////////////////////////////////

//Funktion einfacher Klick
function navClick(event) {
	$("imgxyId").value = (Event.pointerX(event)-xoffset) + " " + (Event.pointerY(event)-yoffset);
	$("imgboxId").value = "";
	$("scaleId").value = "";
	$("mapxyId").value = "";
	$("refxyId").value = "";
	showStatlay();
}

//Pfeilnavigation für Himmelsrichtungen
function moveMap (fx, fy){
	if ($("getmodeId").value =="query" || $("getmodeId").value =="nquery"){
	//setMode("pan");
	$("imgboxId").value = "";
	}
	dx = (x2-x1)*fx;
	dy = (y2-y1)*fy;
	s = (" "+(x1+dx)+" "+(y1+dy)+" "+(x2+dx)+" "+(y2+dy)).substr(1);
	$("imgextId").value = s;
	$("scaleId").value = "";
    $("mapxyId").value = "";
	$("imgxyId").value = "";
	$("refxyId").value = "";
	showStatlay();	
}

function moveMapBlom (d){
	if ($("getmodeId").value =="query" || $("getmodeId").value =="nquery"){
	//setMode("pan");
	$("imgboxId").value = "";
	}
	var dx;
	var dy;
	if(d == "n") {
	alert("nord");
	dx = mapWidth / 2;
	dy = 1;	
	}
	else if(d == "s"){
	dx = mapWidth / 2;
	dy = mapHeight;
	}
	else if(d == "e"){
	dx = mapWidth;
	dy = mapHeight / 2;
	}
	else if(d == "w"){
	dx = 1;
	dy = mapHeight / 2;
	}
	$("imgextId").value = "";
	$("scaleId").value = winTop.$("realscaleId").value;
    $("mapxyId").value = "";
	$("imgxyId").value = dx + " " + dy;
	alert(dx + " " + dy);
	$("refxyId").value = "";
	showStatlay();	
}

//zoom auf Wheelrad
function zoomWheel(e){
	var counterSite=0;
	counterSite +=	Event.wheel(e);
	//Bildkoordinaten in Gauss umrechnen
	var mousex = Event.pointerX(e)-xoffset;
	var mousey = Event.pointerY(e)-yoffset;
	var Gx = x1 + ((mousex *  (x2 - x1 )) / mapWidth);
	var Gy = y2 - ((mousey *  (y2 - y1 )) / mapHeight);
	$("mapxyId").value = Gx + " " + Gy;
	if(Event.wheel(e) < 0){
	$("scaleId").value = $("scaleId").value / 2;
	}
	else{
	$("scaleId").value = $("scaleId").value * 2;
	}
	$("imgxyId").value = "";
	$("imgboxId").value = "";
	$("refxyId").value = "";
	showStatlay();
}

//direkt Zoomin/out, Zoomfaktor 2
function zoomMap(inout){
	setMode('pan');
	$("mapxyId").value = (x1 + x2)/2 + " " + (y1 + y2)/2;
	if (inout == "zoomin"){
	$("scaleId").value = $("scaleId").value / 2;
	}
	else {
	$("scaleId").value = $("scaleId").value * 2;
	}
    $("imgxyId").value = "";
	$("imgboxId").value = "";
	$("refxyId").value = "";
	showStatlay();
}

//Maßstab ändern 
function changeScale(){
	$("imgxyId").value = "";
	$("imgboxId").value = "";
	$("mapxyId").value = "";
	$("refxyId").value = "";
	showStatlay();
}

//Maßstab ändern 
function changetopScale(){
	$("scaleId").value = winTop.$("realscaleId").value / scalefactor;
	$("imgxyId").value = "";
	$("imgboxId").value = "";
	$("mapxyId").value = "";
	$("mapxyId").value = (x1 + x2)/2 + " " + (y1 + y2)/2;
	$("refxyId").value = "";
	showStatlay();
}

//Ausgangsausdehnung herstellen
function fullExtent(){
	if ($("getmodeId").value =="query" || $("getmodeId").value =="nquery" || $("getmodeId").value =="nquerypoly") {
	setMode("pan");
	}
	$("scaleId").value = "";
	$("mapxyId").value = "";
	$("imgxyId").value = "";
	$("imgextId").value = "";
	$("imgboxId").value = "";
	$("refxyId").value = "";
	showStatlay();
}

//Funktion Suchergebnis zentrieren (Auf Koordinate mit Maßstab)
function searchLoc(x,y,s) {
	//winMap.$("imgextId").value = "";
	winMap.$("imgxyId").value = "";
	winMap.$("imgboxId").value = "";
	winMap.$("scaleId").value = s / scalefactor;
	winMap.$("mapxyId").value = x + " " + y;
	winMap.$("savesearchId").value = x + " " + y;
	winMap.$("refxyId").value = "";
	winMap.showStatlay();
}

//Hilitefunktion aus dem Modul streetsearch
function searchSetcoord(s){
	var rqx = winMap.$("rqx").value;
	var rqy = winMap.$("rqy").value;
	searchLoc(rqx,rqy,s);
}

//Hilitefunktion aus dem Modul streetsearch
function searchLoctmp(x,y){
	winMap.$("savesearchId").value = x + " " + y;
	winMap.showMarker();
}

//auf Ausdehnung zoomen
function zommtoBounds(bounds){
	//Aktion
	winMap.$("imgextId").value = bounds;
	winMap.$("imgboxId").value = "";
	winMap.$("scaleId").value = "";
	winMap.$("refxyId").value = "";
	winMap.$("imgxyId").value = "";
	winMap.$("mapxyId").value = "";
	winMap.showStatlay();
}


//Auslesen von Zoombox für Zoom auf Objekte aus Query diverser Module
function zoomModobject(qlayer,qfield,idstring,qmode){
	var rnd = parseInt(Math.random()*99999999);
	var param = 'idstring=' + idstring + '&qlayer=' + qlayer + '&qfield=' + qfield + '&qmode=' + qmode + '&random=' +rnd;
	var myAjax = new Ajax.Request(
		"" + protocolName + "//" + hostName + "/" + serviceName + "/ajax/ajax_zoomboundquery.php",
		{
			parameters:param,
			onFailure:showError,
			onLoading:loadingAjax,
			onLoaded:stoploadingAjax,
			onComplete:function(r){
				zommtoBounds(r.responseText);
			}
		}
	);
}

//Hilite auf Objekte aus Query diverser Module
function loadModhilite(qlayer,qfield,idstring,mode){
	var currentmapscale = winMap.$("scaleId").value;
	var currentimgext = winMap.$("imgextId").value;	
	winData.$("nquerystringId").value = "qlayer=" +qlayer+ "&qfield=" + qfield + "&qidstring=" + idstring;
	if(mode==true){
	winMap.hiliteNquery();
	}
}


// Marker positionieren und anzeigen
function showMarker () {
	if ($("savesearchId").value != ""){
		var markarray = $("savesearchId").value.split(' ');
		var rw = Math.round((markarray[0]-x1)/quotRw)-markeroffset;
		var hw = Math.round((y2-markarray[1])/quotHw)-markeroffset;
		if (rw > 0 && hw > 0 && rw < mapWidth && hw < mapHeight){
		$("markerlayId").setStyle({visibility : 'visible' , left: rw +'px' , top: hw  +'px'});	
		$("hidemarkerId").setStyle({visibility : 'visible'});	
		}
		else{
		$("markerlayId").setStyle({visibility : 'hidden'});	
		$("hidemarkerId").setStyle({visibility : 'hidden'});	
		}
	}
	else {
    return 0;
  }
}

//Marker verstecken
function hideMarker(){
    $("savesearchId").value = "";
	$("markerlayId").setStyle({visibility : 'hidden'});
	$("hidemarkerId").setStyle({visibility : 'hidden'});
	if($("dhmqueryId")){
	$("dhmqueryId").setStyle({visibility : 'hidden'});
	}
}

//Legende aktualisieren wenn links Legende aktiv
function loadLegend(){
	if (winLeft.document.getElementById("legendimgId")){
	winLeft.$("legendimgId").innerHTML = winMap.$("legenddivId").innerHTML;
	}
	else {
	return 0;
	}
}

//Maplegende sichtbar / unsichtbar machen
function toggleLegend(){
	if(winMap.$("legimgopenId").value == "yes"){
	winMap.$("legenddivId").setStyle({visibility : 'hidden'});
	winMap.$("legimgopenId").value = "none";
	}
	else{
	winMap.$("legenddivId").setStyle({visibility : 'visible'});
	winMap.$("legimgopenId").value = "yes";
	}
}

//Zustand Map-Legende checken
function checkLegend(){
	if(winMap.$("legimgopenId").value == "yes"){
	winMap.$("legenddivId").setStyle({visibility : 'visible'});
	}
	else{
	winMap.$("legenddivId").setStyle({visibility : 'hidden'});
	}
}

//Messlayer anzeigen
function showMeasure(){
	if (winData.$("measurecoordId").value != ""){
	$("measureId").setStyle({visibility : 'visible'});
	}
	else {
	return 0;
	}
}

//Messlayer zurücksetzen
function clearMeasure(){
if (winData.$("measurecoordId"))
	{
	winData.$("measurecoordId").value="";
	winData.$("distanceId").value="";
	winData.$("sumdistanceId").value="0";
	writeMeasureline(true);
	$("areaId").innerHTML = "";
	$("measureId").setStyle({visibility : 'hidden'});
	}
	else {
	return 0;
	}
}

//Polylinien und Polygone aus Abfrage und Editiermodul entfernen
function clearPolyline(){
	winData.$("editcoordId").value="";
	checkScretchline();	
}

//Koordinaten anzeigen
function showCoords(event) {
	//Bildkoordinaten in Gauss umrechnen
	var mousex = Event.pointerX(event)-xoffset;
	var mousey = Event.pointerY(event)-yoffset;
	var Gx = x1 + ((mousex *  (x2 - x1 )) / mapWidth);
	var Gy = y2 - ((mousey *  (y2 - y1 )) / mapHeight);
	//Gausskoordinaten in Form anzeigen
	document.getElementById("rwId").value = Math.round(Gx);
	document.getElementById("hwId").value = Math.round(Gy);
	//Bildkoordinaten in Form anzeigen
	document.getElementById("xId").value = mousex;
	document.getElementById("yId").value = mousey;
}

//Polygonabfrage
function polyQuerystart(event){
	//Bildkoordinaten in Gauss umrechnen
	var mousex = Event.pointerX(event)-xoffset;
	var mousey = Event.pointerY(event)-yoffset;
	var Gx = x1 + ((mousex *  (x2 - x1 )) / mapWidth);
	var Gy = y2 - ((mousey *  (y2 - y1 )) / mapHeight);
	var pstring = winData.$("editcoordId").value;
	if (pstring ==""){
	pstring = Math.round(Gx) + " " + Math.round(Gy);
	}
	else
	{
	pstring += "," + Math.round(Gx) + " " + Math.round(Gy);
	}
	winData.$("editcoordId").value = pstring;
	checkScretchline();
}

//überprüfen welche Linie / Polygon gezeichnetwerden soll
function checkScretchline(){
//wenn Polygonabfrage aktiv
if ($("getmodeId").value == "nquerypoly") {
writeScretchline('polygon','#00FFFF','2'); //ESRI blau
}
//Standard Zeichenmodus via javascript
else {
writeScretchline('polyline','#FF00FF','2');
}
}



//Rechteck für Druckbereich zeichnen
function writeRectprint(){
	var mapscale = winMap.$("scaleId").value;
	if(winLeft.document.getElementById("printscaleId")){
		var printscale = winLeft.$("printscaleId").value;
		var formatvalue = winLeft.$("formatId").value.split("|");
		//bei aktueller Ausdehnung
		if (printscale == "currentextent"){
			jg_graph3.clear();
			jg_graph3.paint();
		}
		else if (printscale == "currentscale"){
			var printscale = winMap.$("scaleId").value;
		}
		else {
			var printscale = winLeft.$("printscaleId").value;
		}
		if (printscale != "currentextent"){
			var recWidth = Math.round(formatvalue[0]/mapscale * printscale);
			var recHeight = Math.round(formatvalue[1]/mapscale * printscale);
			//if(recWidth > mapWidth && recHeight > mapHeight){
			//	alert("Zoomen Sie weiter heraus um den Druckbereich des eingestellten Maßstabs (rotes Quadrat) zu sehen!");
			//}
			//Zentrumskoordinaten ermitteln
			var posx = Math.round((mapWidth / 2) - (recWidth / 2));
			var posy = Math.round((mapHeight / 2) - (recHeight / 2));
			jg_graph3.clear();
			jg_graph3.setStroke(5);
			jg_graph3.setColor('#FFFFFF'); // weiße Freistellung
			jg_graph3.drawRect(posx-1, posy-1, recWidth, recHeight);
			jg_graph3.setStroke(3);
			jg_graph3.setColor('#990000'); // weinrot			
			jg_graph3.drawRect(posx, posy, recWidth, recHeight);
			jg_graph3.drawString("Druckbereich", posx, posy + recHeight +1); //Text unten links schreiben
			jg_graph3.paint(); //Rechteck zeichnen
		}
	}
}



//Polylinie oder Polygon zeichen
function writeScretchline(modevar,colorvar,widthvar)
{
if (winData.$("editcoordId")!= "")
	{
	jg_graph2.clear();
	var polylineString = winData.$("editcoordId").value;
	var koordinatenpaar = polylineString.split(",");
	var xWerte = new Array();
	var yWerte = new Array();
	var zaehlerx = 0;
	var zaehlery = 0;
	var xvariable = 0;
	var yvariable = 0;	
	var pointstring = "";
	for (var i = 0; i<koordinatenpaar.length; i++)
	{
	//xvariable = Math.round((koordinatenpaar[i].split(" ")[0]-x1)/quotRw);
	//yvariable = Math.round((y2-koordinatenpaar[i].split(" ")[1])/quotHw);
	xvariable = (koordinatenpaar[i].split(" ")[0]-x1)/quotRw;
	yvariable = (y2-koordinatenpaar[i].split(" ")[1])/quotHw;
	xWerte.push(xvariable-2);
	yWerte.push(yvariable-2);
	//Stützpunkte generieren
	if (xvariable >0 && yvariable >0)
				{
				pointstring = pointstring + "<div style=\"position:absolute; left:" + (xvariable-2) + "px; top:" + (yvariable-2) + "px; \"><img src=\"../" + serviceName + "/img/point.gif\" border=\"0\" ></div>";
				}				
	//Überprüfung auf negative Koordinaten wegen IE-Fehler bei Darstellung von mapimg 
	if (xvariable > 0)
		{
		zaehlerx++;
		}
	if (yvariable > 0)
		{
		zaehlery++;
		}	
	} //Schleife Ende
	if (zaehlerx == 0 || zaehlery == 0)
		{
		$("point2Id").innerHTML = "";
		$("graph2Id").innerHTML = "";
		}
	else
		{
		// Stützpunkte schreiben	
		$("point2Id").innerHTML = pointstring;
		//Zeichnen von Polylinie wenn positive Werte vorhanden
		jg_graph2.setStroke(widthvar);
		jg_graph2.setColor(colorvar); // rot
		if (modevar == "polygon"){
		jg_graph2.drawPolygon(xWerte,yWerte);
		}
		else {
		jg_graph2.drawPolyline(xWerte,yWerte);
		}
		jg_graph2.paint(); //Polylinie zeichnen			
		}
     //interpolierte Punkte schreiben
	//for (var j=0; j	<xWerte.length-1; j++)
			//{
			//gbham(xWerte[j],yWerte[j],xWerte[j+1],yWerte[j+1])
			//}			
	} //end if
else{
	return 0;
	}
}

//Polygonabfrage Anfrage abschicken
function polyQueryend(event){
	$("mapimgId").focus();
	var qlayer = winData.$("activelayerId").value;
	var wktarr = winData.$("editcoordId").value.split(",");
	var qextent = winMap.$("imgextId").value;
	var qsize = winMap.$("imgsizeId").value;
	var standardquery = true;
	//Wenn mehr als 2 Digitalisierpunkte gesetzt wurden (3 wegen Doppelklick)
	if (wktarr.length > 3){
		var qlinestring = winData.$("editcoordId").value + "," + wktarr[0];
		var lang = winData.$("langId").value;
		//Spezialabfrage in definierter Konfiguration (custom.js)
		if(isDefined("specialqlayer")==true){
			for (var i = 0; i < specialqlayer.length; i++) {
				if(qlayer == specialqlayer[i]["name"]){
					standardquery = false;
					specialqlayer[i]["frame"].location.href = protocolName + '//' + hostName + '/' + serviceName + '/' + specialqlayer[i]["path"] + '?lang=' + lang + '&qlinestring=' + qlinestring + '&qlayer=' + qlayer + '&qextent=' + qextent + '&qsize=' + qsize;
				}	
			}
		}
		//Standardabfrage in Fenster
		if(standardquery == true){			
			querywin = window.open('' + protocolName + '//' + hostName + '/' + serviceName + '/query/nquery.php?lang=' + lang + '&qlinestring=' + qlinestring + '&qlayer=' + qlayer + '&qextent=' + qextent + '&qsize=' + qsize + '','query','status=yes,resizable=yes,width=' + querywinwidth +  ',height=' + querywinheight +  ',scrollbars=yes');	
			var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
			if (is_chrome) {querywin.parent.blur();}
			querywin.focus();
			}	
	}
	else {
		alert("Bitte mindestens drei Punkte digitalisieren!")
	}
}

//Messfunktion
function mesPoint(event){
	//Bildkoordinaten in Gauss umrechnen
	var mousex = Event.pointerX(event)-xoffset;
	var mousey = Event.pointerY(event)-yoffset;
	var Gx = x1 + ((mousex *  (x2 - x1 )) / mapWidth);
	var Gy = y2 - ((mousey *  (y2 - y1 )) / mapHeight);
	var pstring = winData.$("measurecoordId").value;
	if (pstring ==""){
		//pstring = Math.round(Gx) + " " + Math.round(Gy);
		pstring = Gx + " " + Gy;
	}
	else
	{
		//pstring += "," + Math.round(Gx) + " " + Math.round(Gy);
		pstring += "," + Gx + " " + Gy;
	}
	winData.$("measurecoordId").value = pstring;
	writeMeasureline(true);
	showMeasure();
}

//Koordinaten auslesen für Linkgenerator
function setPoint(event) {
	//Bildkoordinaten in Gauss umrechnen
	var mousex = Event.pointerX(event)-xoffset;
	var mousey = Event.pointerY(event)-yoffset;
	var Gx = x1 + ((mousex *  (x2 - x1 )) / mapWidth);
	var Gy = y2 - ((mousey *  (y2 - y1 )) / mapHeight);
	//Gausskoordinaten in Form schreiben
	winLeft.$("xId").value = Math.round(Gx);
	winLeft.$("yId").value = Math.round(Gy);
	$("savesearchId").value = Math.round(Gx) + " " + Math.round(Gy);
	showMarker ();
}

//Mess-Polyline zeichnen
function writeMeasureline(m)
{
if (winData.$("measurecoordId")!= "")
	{
	jg_graph1.clear();
	var polylineString = winData.$("measurecoordId").value;
	var koordinatenpaar = polylineString.split(",");
	var xWerte = new Array();
	var yWerte = new Array();
	var distText = new Array();
	var zaehlerx = 0;
	var zaehlery = 0;
	var xvariable = 0;
	var yvariable = 0;
	var pointstring = "";
	var n = koordinatenpaar.length;
	//Entfernungsmessung für metrische Systeme
	if (n > 1){
	//Berechnung für die letzten beiden Paare (i1 und i2)
	var i1 = koordinatenpaar.length-1;
	var i2 = koordinatenpaar.length-2;
	var rw1 = koordinatenpaar[i1].split(" ")[0];
	var rw2 = koordinatenpaar[i2].split(" ")[0];
	var hw1 = koordinatenpaar[i1].split(" ")[1];
	var hw2 = koordinatenpaar[i2].split(" ")[1];
	var distance = Math.sqrt((hw1-hw2)*(hw1-hw2) + (rw1-rw2)*(rw1-rw2));
	//winData.$("distanceId").value	= round2(distance);
	winData.$("distanceId").value	= distance;
	if(m==true){
	//winData.$("sumdistanceId").value = round2(winData.$("distanceId").value *1 + winData.$("sumdistanceId").value *1);
	winData.$("sumdistanceId").value = winData.$("distanceId").value *1 + winData.$("sumdistanceId").value *1;
	}
	}
	for (var i = 0; i<n; i++)
	{
	xvariable = (koordinatenpaar[i].split(" ")[0]-x1)/quotRw;
	yvariable = (y2-koordinatenpaar[i].split(" ")[1])/quotHw;
	xWerte.push(xvariable);
	yWerte.push(yvariable);
	//Stützpunkte generieren
	if (xvariable >0 && yvariable >0)
				{
				pointstring = pointstring + "<div style=\"position:absolute; left:" + (xvariable-1) + "px; top:" + (yvariable-1) + "px; \"><img src=\"../" + serviceName + "/img/point.gif\" border=\"0\" ></div>";
				}		
	//Überprüfung auf negative Koordinaten wegen IE-Fehler bei Darstellung von mapimg 
	if (xvariable > 0)
		{
		zaehlerx++;
		}
	if (yvariable > 0)
		{
		zaehlery++;
		}	
	} //Schleife Ende
	if (zaehlerx == 0 || zaehlery == 0)
		{
		$("point1Id").innerHTML = "";
		$("graph1Id").innerHTML = "";
		}
	else
		{
		// Stützpunkte schreiben und Tooltipinfo mit kummulierter Strecke ausgeben
		var sumdistance = winData.$("sumdistanceId").value
		if (sumdistance > 1000){
			sumdistance = round2(sumdistance/1000) +" km";
		}
		else{
			sumdistance = round2(sumdistance) + " m";
		}
		$("point1Id").innerHTML = pointstring + "<div id=\"measuretooltipId\" style=\" left:" + (xvariable-25) + "px; top:" + (yvariable-25) + "px; \">" +sumdistance+ "</div>";
		//Zeichnen von Polylinie wenn positive Werte vorhanden
		jg_graph1.setStroke(2);
		jg_graph1.setColor("#FF0000"); // rot
		jg_graph1.drawPolyline(xWerte,yWerte);
		jg_graph1.paint(); //Polylinie zeichnen
		}
	} //end if
else{
	return 0;
	}
}

//Berechnung der Fläche via Ajax Updater-Objekt
var getArea = function()
{	
	var wktarr = winData.$("measurecoordId").value.split(",");
	//Wenn mehr als 2 Digitalisierpunkte gesetzt wurden
	if (wktarr.length > 2){
	var rnd = parseInt(Math.random()*99999999);	
	var lang = winData.$("langId").value;
	var coordstr = winData.$("measurecoordId").value + "," + wktarr[0];
	param = "wktstr=" + coordstr + "&random="+rnd + "&lang="+lang;
     var myAjax = new Ajax.Updater(
        "areaId",
		"" + protocolName + "//" + hostName + "/" + serviceName + "/ajax/ajax_area.php",
        {
            parameters:param,
            onFailure:showError,
			onComplete:function(){
			winData.$("measurecoordId").value = coordstr;
			writeMeasureline(true);
			winData.$("measurecoordId").value="";
			winData.$("distanceId").value="";
			winData.$("sumdistanceId").value="0";
			$("mapimgId").focus();
			}
        }
    );	
	} //end if
	else {
	alert ("Bitte mindestens 3 Messpunkte setzten!");
	}
}

//kaufmännische Rundung auf 2 Dezimalstellen
function round2(x) {
  var k = (Math.round(x * 100) / 100).toString();
  k += (k.indexOf('.') == -1)? '.00' : '00';
  return k.substring(0, k.indexOf('.') + 3);
}

//Koordinaten Referenzkarte auslesen und abschicken
function getrefCoords(event) {
	var mousex = Event.pointerX(event)-xoffset;
	var mousey = Event.pointerY(event)-yoffset+1; //+1px wegen An-Aus-Schalter Refkarte
	var refh = $("refimgId").getHeight();
	var refw = $("refimgId").getWidth();
	var refpos =  Position.page($("refimgId"));
	x = mousex -  refpos[0];
	y = mousey - refpos[1];
	$("refxyId").value = x + " " + y;
	$("imgxyId").value = "";
	$("mapxyId").value = "";
	showStatlay();
}

//Fensterbreite und höhe ausgeben
function windim(){  
	var x,y;
	if (self.innerHeight){ // all Explorer
		x = self.innerWidth;
		y = self.innerHeight;
	}
	else if (document.documentElement && document.documentElement.clientHeight){ // Explorer 6
		x = document.documentElement.clientWidth;
		y = document.documentElement.clientHeight;
	}
	else if (document.body){ // other Explorers
		x = document.body.clientWidth;
		y = document.body.clientHeight;
	}
	var mapw = x - rightoffset;
	var maph = y - buttomoffset;
	
	//Maximale Dimensionen überprüfen
	//maximale Breite aus Baseconfig
	var mymaxw = winData.$("mymaxwId").value
	//maximale Höhe aus Baseconfig
	var mymaxh = winData.$("mymaxhId").value
	//Überprüfung 
	if (mymaxw > 0 && mymaxh > 0){
		if (mapw > mymaxw) { mapw = mymaxw}
		if (maph > mymaxh) { maph = mymaxh}
	}
	return (mapw + " " + maph);	
}

//Kartengröße ändern / Karte bei gleier Dimensionierung aktualisieren
function changeDim(){
	if($("imgId")){
	$("imgId").setStyle({width : mapdim[0] , height : mapdim[1]});
	$("mapimgId").setStyle({width : mapdim[0] , height : mapdim[1]});
	mapdim = windim().split(' ');
	$("imgsizeId").value = mapdim[0] + ' ' + mapdim[1];
	$("mapxyId").value = (x1 + x2)/2 + " " + (y1 + y2)/2;
	$("imgxyId").value = "";
	//$("imgextId").value = "";
	$("refxyId").value = "";
	$("imgboxId").value = "";
	showStatlay();
	}
	else {
	return 0;
	}
}

//Loading-Layer anzeigen	
function showStatlay(){
	stopObserveall();
	Event.stopObserving($("imgId"), 'mousemove', showCoords);
	$("statlayId").setStyle({visibility : 'visible'});
	//window.setTimeout("submitForm()",100);
	submitForm();
}

//Formular abschicken
function submitForm(){
	$("mapservId").submit();
}

//Cursor setzen
function setCursor(cur) {
	$("imgId").style.cursor = cur;
	$("cursorId").value = cur;
}

//Toolbilder austauschen
function hiliteImg(tool){
	var toolid = tool +"Id";
	if (winTop.$("but_queryId")){
	winTop.$("but_queryId").src= "../" + serviceName + "/img/buttons/default/but_query.gif";
	}
	if (winTop.$("but_nqueryId")){
	winTop.$("but_nqueryId").src= "../" + serviceName + "/img/buttons/default/but_nquery.gif";
	}
	if (winTop.$("but_nquerypolyId")){
	winTop.$("but_nquerypolyId").src= "../" + serviceName + "/img/buttons/default/but_nquerypoly.gif";
	}
	if (winTop.$("but_rqueryId")){
	winTop.$("but_rqueryId").src= "../" + serviceName + "/img/buttons/default/but_rquery.gif";
	}
	winTop.$("but_zoomrectId").src= "../" + serviceName + "/img/buttons/default/but_zoomrect.gif";
	winTop.$("but_panId").src= "../" + serviceName + "/img/buttons/default/but_pan.gif";
	winTop.$("but_mesId").src= "../" + serviceName + "/img/buttons/default/but_mes.gif";
	if (tool != "none"){
	winTop.$(toolid).src= "../" + serviceName + "/img/buttons/default/"+tool+"1.gif";
	}
	winMap.resetEditButtons();
	winMap.hiliteEditimg();
}

//Auf und Zuklappen Initialisierung
function toggleInit(elem,elemvar){
	if ($(elemvar).value == 'yes'){	
		//falls Element Referenzkarte
		if (elem == "refimgcontentId"){
			$("myrefimgId").src = $("refimgurlId").innerHTML;
		}
		$(elem).show();
		$(elem + "img").src= "../" + serviceName + "/img/toggle_down.gif";
	}
	else {
		$(elem).hide();
		$(elem + "img").src= "../" + serviceName + "/img/toggle_open.gif";
	}
}

//Auf und Zuklappen klick
function toggleDiv(elem,elemvar){
	if ($(elemvar).value == 'none'){
		//falls Element Referenzkarte
		if (elem == "refimgcontentId"){
			$("myrefimgId").src = $("refimgurlId").innerHTML;
		}
		$(elem).show();
		$(elem + "img").src= "../" + serviceName + "/img/toggle_down.gif";
		$(elemvar).value = 'yes';
	}
	else {
		$(elem).hide();
		$(elem + "img").src= "../" + serviceName + "/img/toggle_open.gif";
		$(elemvar).value = 'none';
	}
}

//Linkgenerator Funktion zum erzeugen des Links
function createLink(type){
	var linkx = winLeft.$("xId").value;
	var linky = winLeft.$("yId").value;
	if (linkx != "" && linky != "") {
		var linkscale = winTop.$("realscaleId").value;
		var linklayer = winData.$("layerstringId").value;
		var lang = winData.$("langId").value;
		if (type == "link"){
			var linkstr = "" + protocolName + "//" + hostName +"/"+ serviceName +"/index.php?mapxy="+linkx+","+linky+"&scale="+linkscale+"&layers="+linklayer+"&lang="+lang;
			var htmllinkstr = '<a href="'+linkstr+'" target="_blank" class="normal"> &raquo;&raquo; Test Link</a>';
			winLeft.$("linkId").innerHTML = htmllinkstr;
		}
		else if (type == "bookmark"){
			var linkstr = "mapxy="+linkx+","+linky+"&scale="+linkscale+"&layers="+linklayer+"&pois="+poistr;
		}
		winLeft.$("formlinkId").value = linkstr;
		winLeft.$("formlinkId").focus();
		winLeft.$("formlinkId").select();
	}
	else {
	alert ("Aktivieren Sie zuerst den Button \"Punkt bearbeiten\" und klicken dann in die Karte um einen Mittelpunkt zu definieren!");
	}
}

//Aktivierung Tab (alt)
function activTab(elem){
	$(elem).addClassName('activeTab');
	//winMap.disableClickmodus(); //im Falle einer Aktivierung des Bearbeitungsmodus auf Zoomin-Modus schalten!
}

//Bearbeitungsmodi deaktivieren und auf Zoommodus schalten
function disableClickmodus(){
	if ($("getmodeId")){
		if ($("getmodeId").value == "multiselect" || $("getmodeId").value == "editpoint"){
		setMode("zoomin");
		}
	}
	else {
	return 0;
	}
}

//Google Maps Aufruf
function sendext(){
	var extstr = x1 + "," + y1 + "," + x2 + "," + y2;
	googlewin = window.open('' + protocolName + '//' + hostName + '/' + serviceName + '/googlemaps/gmapin.php?extent=' + extstr + '','google','status=yes,resizable=no,width=602,height=472,scrollbars=no');
	googlewin.focus();	
}

//Maphistory aufzeichnen
function addHistory(){
    var historystring = "";
	//  + ";" + winData.$("layerstringId").value;
	if (winData.$("historystringId").value == ""){
	historystring = $("scaleId").value + ";" + (x1 + x2)/2 + " " + (y1 + y2)/2 + ";" + winData.$("layerstringId").value;
	}
	else {
	historystring = "|" + $("scaleId").value + ";" + (x1 + x2)/2 + " " + (y1 + y2)/2 + ";" + winData.$("layerstringId").value;
	}
	winData.$("historystringId").value += historystring;
}

//Maphistory abrufen und neuen String schreiben
function getlastHistory(){
    var historyArray = winData.$("historystringId").value.split("|");
	var hlength = historyArray.length;
	if(hlength > 1){
	var lastArray = historyArray[hlength-2].split(";");
	winMap.$("scaleId").value = lastArray[0];
	winMap.$("mapxyId").value = lastArray[1];
	winData.$("layerstringId").value = lastArray[2];
	winMap.$("layersId").value = lastArray[2];
	historyArray = historyArray.without(historyArray.last());
	historyArray = historyArray.without(historyArray.last());
	winData.$("historystringId").value = historyArray.join("|");
	if (winMap.$("getmodeId").value =="query" || winMap.$("getmodeId").value =="nquery"){
		winMap.setMode("zoomin");
	}
	winMap.$("imgxyId").value = "";
	winMap.$("imgboxId").value = "";	
	winMap.$("refxyId").value = "";
	winMap.showStatlay();
	}
	else{
	//alert(hlength);
	alert("Letzter Eintrag! Last entry!");
	}
}

//Modulmenu sichtbar/unsichtbar schalten
function showModulemenu(){
	if ($("menuLayerId").getStyle('visibility') == 'visible'){
		//Fix für IE 6: Selectboxen ein/ausblenden
		if ($("menuHideId") && navigator.appName == "Microsoft Internet Explorer" && typeof document.body.style.maxHeight == "undefined"){
			$("menuHideId").setStyle({visibility : 'visible'});
		}
		$("menuLayerId").setStyle({visibility : 'hidden'});
	}
	else {
		//Fix für IE 6: Selectboxen ein/ausblenden
		if ($("menuHideId") && navigator.appName == "Microsoft Internet Explorer" && typeof document.body.style.maxHeight == "undefined"){
			$("menuHideId").setStyle({visibility : 'hidden'});
		}
		$("menuLayerId").setStyle({visibility : 'visible'});
	}
}

//Querybuilder öffnen
function changeQuerybuilder(qlayer) {
	if (qlayer == 'none') {
		qlayer = winData.$("activelayerId").value;
		}
	else {
		winMap.$("qlayerId").value = qlayer;
		winData.$("activelayerId").value = qlayer;
		}
	var lang = winData.$("langId").value;
	winLeft.location.href = "" + protocolName + "//" + hostName +"/"+ serviceName +"/query/querybuilder.php?lang="+lang+"&qlayer="+qlayer;
}

//Querybuilder Attributtabelle öffnen
function openQuerybuilder(){
	var qlayer = winData.$("activelayerId").value;
	var qfield = winLeft.$("qfieldId").value;
	var qoperator = winLeft.$("qoperatorId").value;
	var qwert = winLeft.$("qwertId").value;
	if (qwert == ""){
		alert ('Bitte einen Wert eingeben!');
	}
	else {
	var lang = winData.$("langId").value;
	querywin = window.open('' + protocolName + '//' + hostName + '/' + serviceName + '/query/nquery.php?lang=' + lang + '&qlayer=' + qlayer + '&qfield=' + qfield + '&qoperator=' + qoperator + '&qwert=' + qwert + '','query','status=yes,resizable=yes,width=' + querywinwidth +  ',height=' + querywinheight +  ',scrollbars=yes');
	var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
	if (is_chrome) {querywin.parent.blur();}
	querywin.focus();
	}
}

//Auslesen von POI-Info via Ajax Updater-Objekt für Poastgres-Punkt-Objekte
var getpgPoidata = function()
{
	if (poiLayers != ""){
		//aktive Layer
		var mylayers = winMap.$("layersId").value.split(",");		
		var poiLayersarray = poiLayers.split(","); //Definition in custom.js
		
		var activeLayersarray = new Array();
		for (var i = 0; i<poiLayersarray.length; i++) {
			if (mylayers.indexOf(poiLayersarray[i]) != -1 ){
				activeLayersarray.push(poiLayersarray[i]);
			}
		}
		
		var activelayers = activeLayersarray.join(",");
		if(activelayers != ""){
			var lang = winData.$("langId").value;
			var rnd = parseInt(Math.random()*99999999);
			var param = "x1="+Math.round(x1)+"&x2="+Math.round(x2)+"&y1="+Math.round(y1)+"&y2="+Math.round(y2)+"&quotRw="+quotRw+"&quotHw="+quotHw+"&activelayers="+activelayers+"&random="+rnd+"&lang="+lang;
			var myAjax = new Ajax.Updater(
			     "hilitepoiId",
				//Postgis
				"" + protocolName + "//" + hostName + "/" + serviceName + "/ajax/ajax_get_pg_poi.php",
			     {
			         parameters:param,
			         onFailure:showError
			     }
			 );
		 } //end if
	} //end if
	else {
		return 0;
	}
}

//Minimum bzw Maximun eines Wertearrays ermitteln
Array.max = function( array ){
    return Math.max.apply( Math, array );
};

Array.min = function( array ){
    return Math.min.apply( Math, array );
};


//Error-Handler für Prototype-Ajax-Funktion
var showError = function(r)
{
	alert("Ein Ladefehler ist aufgetreten: " +r.status+ "\n" +r.statusText);
}

//Testen ob Variable vorhanden
function isDefined(variable){ 
	return this[variable] === undefined ? false : true;
}

//Ajax Loading-Anzeige
function loadingAjax(){
	winMap.$("statlayId").setStyle({visibility : 'visible'});
}
function stoploadingAjax(){
	winMap.$("statlayId").setStyle({visibility : 'hidden'});
}


