//Werkzeugeinstellungen
var zooming = true;
var panning = false;


//Browser ueberpruefen
var isIE;
var isNav;
var isNav6;
 
if (navigator.userAgent.indexOf("MSIE") != -1 ) {
	//MSIE
	isIE = true;
	isNav = false;
	isNav6 = false;
	browserOffsetX=0;
	browserOffsetY=0;
} else if (document.getElementById&&!document.all) {
	//Netscape 6er Generation
	isIE = false;
	isNav = false;
	isNav6 = true;
	browserOffsetX=0;
	browserOffsetY=0;
} else {
	//Netscape aelter als 6er Generation
	isIE = false;
	isNav = true;
	isNav6 = false;
	browserOffsetX=0;
	browserOffsetY=0;
}

//zoombox Funktionen

var startX;
var startY;

function addZoomBox() {
	content = '<img name="boxTop" src="./bilder/px.gif" width=1 height=1>';
	createLayer("BoxTop", posleft+browserOffsetX, postop-browserOffsetY, layerwidth, layerheight, z_index, zoomColor, false, content);
	content = '<img name="boxLeft" src="./bilder/px.gif" width=1 height=1>';
	createLayer("BoxLeft", posleft+browserOffsetX, postop-browserOffsetY, layerwidth, layerheight, z_index, zoomColor, false, content);
	content = '<img name="boxRight" src="./bilder/px.gif" width=1 height=1>';
	createLayer("BoxRight", posleft+browserOffsetX, postop-browserOffsetY, layerwidth, layerheight, z_index, zoomColor, false, content);
	content = '<img name="boxBottom" src="./bilder/px.gif" width=1 height=1>';
	createLayer("BoxBottom", posleft+browserOffsetX, postop-browserOffsetY, layerwidth, layerheight, z_index, zoomColor, false, content);
	//initialisierung des event-capturing
	setEvents();
	//done
}

// start zoom in.... box displayed
function startBox(e) {
		
	//check positions
	var newposleft = leftPos("map");  
    var newpostop = topPos("map");
	if(newposleft!=posleft||newpostop!=postop){
		postop = newpostop;
		posleft = newposleft;
		moveLayer('BoxTop', postop, posleft);
		moveLayer('BoxLeft', postop, posleft);
		moveLayer('BoxRight', postop, posleft);
		moveLayer('BoxBottom', postop, posleft);
		
	}
	//
	
	//
	//moveLayer("theMap",posleft,postop);
	getImageXY(e);
	if (insideMap) {
	// keep it within the MapImage
	if ((mouseX<layerwidth+posleft+browserOffsetX) && (mouseY<layerheight+postop-browserOffsetY)) {
		if (zooming) {
			startX=mouseX;
			startY=mouseY;
			x2=startX+1;
			y2=startY+1;
			clipLayer("BoxTop",startX,startY,x2,y2);
			clipLayer("BoxRight",startX,startY,x2,y2);
			clipLayer("BoxBottom",startX,startY,x2,y2);
			clipLayer("BoxLeft",startX,startY,x2,y2);
			zooming=true;
			showLayer("BoxTop");
			showLayer("BoxRight");
			showLayer("BoxBottom");		
			showLayer("BoxLeft");
		}
	} else {
		if (zooming) {
			stopBox(e);
		}
	}
	}
	return false;	
}

// stop zoom box display... zoom in
function stopBox(e) {
	if (insideMap) {
		zooming=false;
		getImageXY(e);
		if (isNav6) {
			startX = startX-posleft//-browserOffsetX;
			startY = startY-postop//-browserOffsetY;
			stopX=mouseX-posleft//-browserOffsetX;
			stopY=mouseY-postop//-browserOffsetY;
		} else {
			stopX=mouseX;
			stopY=mouseY;
		}
		if(stopX>layerwidth) stopX=layerwidth;
		if(stopY>layerheight) stopY=layerheight;
		var tempX=startX;
		var tempY=startY;
		if (startX>stopX) {
			xmax=startX;
			xmin=stopX;
		} else {
			xmin=startX;
			xmax=stopX;
		}
		if (startY<stopY) {
			ymin=startY;
			ymax=stopY;
		} else {
			ymax=startY;
			ymin=stopY;
		}
		
		if(xmin<0) xmin=0;
		if(ymin<0) ymin=0;
		if(xmin>layerwidth) xmin=layerwidth;
		if(ymin>layerheight) ymin=layerheight;
		if(xmax>layerwidth) xmax=layerwidth;
		if(ymax>layerheight) ymax=layerheight;
		if(xmax<0) xmax=0;
		if(ymax<0) ymax=0;
		
		hideLayer("BoxTop");
		hideLayer("BoxRight");
		hideLayer("BoxBottom");		
		hideLayer("BoxLeft");
		this.document.coords.minx.value = xmin;
		this.document.coords.maxx.value = xmax;
		this.document.coords.miny.value = ymin;
		this.document.coords.maxy.value = ymax;
		this.document.coords.submit();
		return true;
	}
}

//******************************************************//
//Layer Funktionen//
//bisherige Funktion, erzeugt MapLayer und Zoombox-Layer
//Eigenschaften: content = image, mit Hintergrundfarbe
function createLayer(name, left, top, width, height, z, bgColor, visible, content) {
	var layer;
	if (isNav) {
		document.writeln('<layer name="' + name + '" left="' + left + '" top="' + top + '" width="' + width + '" height="' + height + '" z-index="' + z + '" bgcolor="' + bgColor + '" visibility=' + (visible ? '"show"' : '"hide"') +  '>');
		addRest(content);
		layer = getLayer(name);
		layer.width = width;
		layer.height = height;
	}
	
	if (isIE||isNav6) {
		document.writeln('<div id="' + name + '" style="position:absolute; overflow:none; left:' + left + 'px; top:' + top + 'px; width:' + width + 'px; height:' + height + 'px;' + 'z-index:' + z + ';' + 'background-color:' + bgColor + ';' + 'visibility:' + (visible ? 'visible;' : 'hidden;') +  '">');
		addRest(content);
		layer = getLayer(name);
	}
	
	if (isNav6) {
		clipLayer(name, left, top, width+left, height+top);
	} else {
		clipLayer(name, 0, 0, width, height);
	}
}

//fuegt bei der Layererzeugung den Inhalt und den End-Tag an
function addRest(content) {
	if (isNav) {
		document.writeln(content);
		document.writeln('</layer>');
	} else {
		document.writeln(content);
		document.writeln('</div>');
	}
}

//toggle layer to visible
function showLayer(name) {		
  	var layer = getLayer(name);	
	if (layer != null) {
	  	if (isNav)
    		layer.visibility = "show";
	  	if (isIE||isNav6) 
   		 layer.visibility = "visible";
	}
}

//toggle layer to visible
function hideLayer(name) {		
  	var layer = getLayer(name);	
	if (layer != null) {
	  	if (isNav)
    		layer.visibility = "hide";
	  	if (isIE||isNav6) 
   		 layer.visibility = "hidden";
	}
}


//clip layer display to clipleft, cliptop, clipright, clipbottom
function clipLayer(name, clipleft, cliptop, clipright, clipbottom) {	
	  var layer = getLayer(name);
	   if (layer != null) {
		  if (isNav) {
		   if(cliptop!=null&&clipright!=null&&clipbottom!=null&&clipleft!=null){
			    layer.clip.left   = clipleft;
			    layer.clip.top    = cliptop;
		    	layer.clip.right  = clipright;
			    layer.clip.bottom = clipbottom;
			}
		  } else if (isNav6) {
		  //layer.clip = 'rect(' + cliptop + ' ' +  clipright + ' ' + clipbottom + ' ' + clipleft +')';
		  if(cliptop!=null&&clipright!=null&&clipbottom!=null&&clipleft!=null){		
			var newWidth = clipright - clipleft;
			var newHeight = clipbottom - cliptop;
			layer.height = newHeight;
			layer.width	= newWidth;
			layer.top	= cliptop;
			layer.left	= clipleft;
		 }
			//layer.display= "none";
		  }	else {
		  if(cliptop!=null&&clipright!=null&&clipbottom!=null&&clipleft!=null){
		  	layer.clip = 'rect(' + cliptop + ' ' +  clipright + ' ' + clipbottom + ' ' + clipleft +')';
		 }
		  }  
	 }
}


//clip zoom box layer to mouse coords
function setClip() {	
	var tempX=startX;
	var tempY=startY;
	if (startX>x2) {
		zright=startX;
		zleft=x2;
	} else {
		zleft=startX;
		zright=x2;
	}
	if (startY>y2) {
		zbottom=startY;
		ztop=y2;
	} else {
		ztop=startY;
		zbottom=y2;
	}
	
	if ((startX != x2) && (startY != y2)) {
		var ovBoxSize = 2;
		//clipLayer("Box",zleft,ztop,zright,zbottom);
		clipLayer("BoxTop",zleft,ztop,zright,ztop+ovBoxSize);
		clipLayer("BoxLeft",zleft,ztop,zleft+ovBoxSize,zbottom);
		clipLayer("BoxRight",zright-ovBoxSize,ztop,zright,zbottom);
		clipLayer("BoxBottom",zleft,zbottom-ovBoxSize,zright,zbottom);
	}
}


//move layer to x,y
function moveLayer(name, x, y) {		
  	var layer = getLayer(name);		
  	if (isNav) {
    	layer.moveTo(x, y);
  	//if (document.all) {
	} else {
    	layer.left = x + "px";
   		layer.top  = y + "px";
  	}
}

//get the layer object called "name"
function getLayer(name) {
	  if (isNav){
	    return(this.document.layers[name]);
	}else if (isIE) {
	  	if ( eval('this.document.all.' + name) != null) {
			layer = eval('this.document.all.' + name + '.style');
			return(layer);
		} else {
			return(null);
		}
		
	 } else if (isNav6) {
	  		layer = eval('this.document.getElementById("'+name+'").style');
			return(layer);
	 } else{
	   return(null);
	  }
}

//********************************************************//
//Initialisierung des Event-Capturing und Event-Funktionen
function setEvents() {
	if (isNav) {
		this.document.captureEvents(Event.MOUSEMOVE);
		this.document.captureEvents(Event.MOUSEDOWN);
		this.document.captureEvents(Event.MOUSEUP);
		this.document.onmousemove = getMouse;
		this.document.onmousedown = whichTool;
		this.document.onmouseup = stop;
	} else{
		this.document.onmousemove = getMouse;
		this.document.onmousedown = whichTool;
		this.document.onmouseup = stop;
	}
}

//Event an entsprechende Funktion weiterleiten
function whichTool(e) {
	getImageXY(e);
	if(isNav6){
		if (windowX < posleft+browserOffsetX || windowY < postop-browserOffsetY || windowX > posleft+browserOffsetX+layerwidth || windowY > postop-browserOffsetY+layerheight) {
				insideMap=false;
		} else {
				insideMap = true;
				if (zooming) {
					startBox(e);
					return false;
				}
				if (panning){
					startPan(e);
					return false;	 
				}
		}
	}else{
		if (windowX+posleft+browserOffsetX < posleft+browserOffsetX  || windowY+postop-browserOffsetY  < postop-browserOffsetY  || windowX+posleft+browserOffsetX  > posleft+browserOffsetX +layerwidth || windowY+postop-browserOffsetY  > postop-browserOffsetY +layerheight) {
				insideMap=false;
		} else {
				insideMap = true;
				if (zooming) {
					startBox(e);
					return false;
				}
				if (panning){
					startPan(e);
					return false;	 
				}
		}
	}
}

function stop(e) {
		if (zooming) stopBox(e);
		if (panning) stopPan(e);
}

//get the coords at mouse position
function getMouse(e) {
		getImageXY(e);
		if (zooming) {
		if(isNav6){
			
			if (mouseX < posleft+browserOffsetX )
				mouseX = posleft+browserOffsetX;
			if (mouseX > layerwidth+posleft+browserOffsetX)
				mouseX = layerwidth+posleft+browserOffsetX;
			if (mouseY < postop-browserOffsetY)
				mouseY = postop-browserOffsetY;
			if (mouseY > layerheight+postop-browserOffsetY)
				mouseY = layerheight+postop-browserOffsetY;
			x2 = mouseX;
			y2 = mouseY;
			setClip();
		}else{		
		if (mouseX < 0)
				mouseX = 0;
			if (mouseX > layerwidth)
				mouseX = layerwidth;
			if (mouseY < 0)
				mouseY = 0;
			if (mouseY > layerheight)
				mouseY = layerheight;
			x2 = mouseX;
			y2 = mouseY;
			setClip(); 
		}
			
			if(isNav6){
				if (windowX < posleft/*+browserOffsetX*/ || windowY < postop/*-browserOffsetY*/ || windowX > posleft/*+browserOffsetX*/+layerwidth || windowY > postop/*-browserOffsetY*/+layerheight) {
					window.status = "";
				} else{				
				pixX = mouseX - posleft;
				pixY = mouseY -postop;
				getMapXY(pixX,pixY);
				window.status= "X:" + getDegMin(mapX) + " Y:" + getDegMin(mapY);
				}
			} else {
				if (windowX+posleft+browserOffsetX < posleft+browserOffsetX  || windowY+postop-browserOffsetY  < postop-browserOffsetY  || windowX+posleft+browserOffsetX  > posleft+browserOffsetX +layerwidth || windowY+postop-browserOffsetY  > postop-browserOffsetY +layerheight) {
					window.status = "";
				}else {
					pixX = mouseX;
					pixY = mouseY;
					getMapXY(pixX,pixY);
					window.status= "X:" + getDegMin(mapX) + " Y:" + getDegMin(mapY);
				}
			}
			
			return false;
		} else if (panning){
			if (isNav6) {
				if (mouseX < posleft+browserOffsetX)
					mouseX = posleft+browserOffsetX;
				if (mouseX > layerwidth+posleft+browserOffsetX)
					mouseX = layerwidth+posleft+browserOffsetX;
				if (mouseY < postop-browserOffsetY)
					mouseY = postop-browserOffsetY;
				if (mouseY > layerheight+postop-browserOffsetY)
					mouseY = layerheight+postop-browserOffsetY;
				x2 = mouseX;
				y2 = mouseY;
				moveLayer("mapimage", x2 + panOffsetX, y2 + panOffsetY);
				//clipLayer("mapimage", posleft, postop, MapWidth-posleft, MapHeight-postop);
				//Nachfolgendes war bereits auskommentiert
				clipLayer("mapimage", posleft+browserOffsetX - panOffsetX - x2,
									  postop-browserOffsetY - panOffsetY - y2 , 
									  layerwidth  + posleft+browserOffsetX - panOffsetX - x2, 
									  layerheight + postop-browserOffsetY - panOffsetY - y2);
				return false;
			} else {
				if (mouseX < 0)
					mouseX = 0;
				if (mouseX > layerwidth)
					mouseX = layerwidth;
				if (mouseY < 0)
					mouseY = 0;
				if (mouseY > layerheight)
					mouseY = layerheight;
				x2 = mouseX;
				y2 = mouseY;
				//Wertecheck
				tmpleft = posleft+browserOffsetX - panOffsetX - x2;
				tmptop = postop-browserOffsetY - panOffsetY - y2;
				topright = layerwidth  + posleft+browserOffsetX - panOffsetX - x2;
				topbottom = layerheight + postop-browserOffsetY - panOffsetY - y2;
				//mausstring = tmpleft.toString() + " " + tmptop.toString() + " " +  topright.toString() + " " +  topbottom.toString();
				//window.status = mausstring;
	
				moveLayer("mapimage", x2 + panOffsetX, y2 + panOffsetY) ;
				clipLayer("mapimage", posleft+browserOffsetX - panOffsetX - x2,
									  postop-browserOffsetY - panOffsetY - y2 , 
									  layerwidth  + posleft+browserOffsetX - panOffsetX - x2, 
									  layerheight + postop-browserOffsetY - panOffsetY - y2);
				return false;
			}
		} else 
		  return true;
		  return true;
}

function getImageXY(e) {
	if (isNav||isNav6) {
		windowX=e.pageX;
		windowY=e.pageY;
		if(isNav){
			windowX = windowX-posleft;
			windowY = windowY-postop;
		}
	} else {
		windowX= window.event.clientX-posleft;
		windowY= window.event.clientY-postop;
	}
	//subtract offsets from page left and top
	//Neu auskommentiert, da die Identify-Ergebnisse bei Nav6 verschoben waren
	if(isNav6||isNav){
		mouseX = windowX;
		mouseY = windowY;
	}else{
		mouseX = windowX+document.body.scrollLeft;
		mouseY = windowY+document.body.scrollTop;
	}
	x2 = mouseX;
	y2 = mouseY;
}	

//convert mouse click xy's into map coordinates
function getMapXY(xIn,yIn) {
		var pixelX = (right-left) / layerwidth;
		mapX = pixelX * xIn + left;
		var pixelY = (top-bottom) / layerheight;
		mapY = pixelY * (layerheight - yIn) + bottom;
}
/*
function findPos(el) {

    var xPos = 0;
    var yPos = 0;

    if(document.layers) {
        xPos = el.x;
        yPos = el.y;
    }
    else {
        while(el){
            xPos += el.offsetLeft;
            yPos += el.offsetTop;
            el   =  el.offsetParent;
        }
    }
    return {xPos: xPos, yPos: yPos};
}
*/

function getLeft(refObj)
	{
	xPos=refObj.offsetLeft;
	parentObj=refObj.offsetParent;
	while(parentObj != null) {xPos +=parentObj.offsetLeft;parentObj=parentObj.offsetParent}
	return xPos;
	}

	function getTop(refObj)
	{
	yPos=refObj.offsetTop;
	parentObj=refObj.offsetParent;
	while(parentObj != null) {yPos +=parentObj.offsetTop;parentObj=parentObj.offsetParent}
	return yPos;
	}



function leftPos(refName)
	{
	ref=document.images[refName];
	return (document.layers)? ref.x : getLeft(ref);
	}

function topPos(refName)
	{
	ref=document.images[refName];
	return (document.layers)? ref.y : getTop(ref);
	}
 
function getDegMin(decDegree){
	var Grad = parseInt(decDegree);
	rest = decDegree-Grad;
	var Minutes = parseInt(rest*60);
	rest = parseInt(rest*60)-Minutes;
	var Seconds = parseInt(rest*60);
	resultString = Grad.toString() + "°" + Minutes.toString()+ "'" + Seconds.toString()+"''";
	return resultString;
}
