
/***************************************/
/** FILE rect_sel.js                   */
/*  Funktionen für ein Auswahlrechteck */
/*  								   */
/*  Funktionen für Navigation          */
/***************************************/
/***** gueltig fuer Netscape ab Version 6, Mozilla, Internet Explorer ab Version 4 *****/

//Das Objekt, das gerade bewegt wird.
var dragobjekt = null;

// Position, an der das Objekt angeklickt wurde.
var dragx = 0;
var dragy = 0;

// Mausposition
var posx = 0;
var posy = 0;

// Objekt f. Maxima des Auswahltrechteckes
function xrMaxima()
{
	this.maxx = 0;
	this.maxy = 0;
	this.minx = 0;
	this.miny = 0;
}


// Maximale Grenzwerte ( Ausmaße des MapImg) feststellen fuer Auswahlrechteck
function getLimit()
{
	mapImg = document.getElementById("MapImg");
	mapContainer = document.getElementById("mapDiv");
	this.h_offset = Number(mapContainer.style.left.substr(0,mapContainer.style.left.length-2));
	this.v_offset = Number(mapContainer.style.top.substr(0,mapContainer.style.top.length-2));
	this.left = Number(mapImg.style.left.substr(0,mapImg.style.left.length-2));
	this.right = Number(mapImg.style.width.substr(0,mapImg.style.width.length-2)) + Number(this.left);
	this.top = Number(mapImg.style.top.substr(0,mapImg.style.top.length-2));
	this.bottom = Number(mapImg.style.height.substr(0,mapImg.style.height.length-2)) + Number(this.top);
}

// Elemente des Auswahlrechtecks
var elements = new Array(4);
var do_getLimit = null;
var eleWidth = null;
var eleHeight = null;

// Status der Auswahl
var rectActive = false;

// Zoomdirection
var zoomDir = 1;

function getRectExtent(sty)
/*	Liefert einen String mit den Koordinaten des Rechteckes
	in der Form maxx=1232&minx=1256....
	passend für den Mapserver.
*/
{
var maxx;
var maxy;
var minx;
var miny;
for (var i = 0;i < elements.length;i++)
	{
	if (elements[i].id == "UR")
		{
		maxx = Number(elements[i].style.left.substr(0,elements[i].style.left.length-2)) + eleWidth;
		maxy = Number(elements[i].style.top.substr(0,elements[i].style.top.length-2));
		}
	if (elements[i].id == "LL")
		{
		minx = Number(elements[i].style.left.substr(0,elements[i].style.left.length-2));
		miny = Number(elements[i].style.top.substr(0,elements[i].style.top.length-2))+ eleHeight;
		}
	}
	if (sty == "str")
		{
		return "maxx=" + maxx.toString() + "&maxy=" + maxy.toString() + "&minx=" + minx.toString() + "&miny=" + miny.toString();
		}
	else
		{
		Rmaxima = new xrMaxima();
		Rmaxima.maxx = maxx;
		Rmaxima.maxy = maxy;
		Rmaxima.minx = minx;
		Rmaxima.miny = miny;
		return Rmaxima;
		}
}

function draginit() {
 // Initialisierung der Überwachung der Events
		zdragStop();
        document.onmousemove = drag;
        document.onmouseup = dragstop;
        elements[0] = document.getElementById("UL");
        elements[1] = document.getElementById("UR");
        elements[2] = document.getElementById("LL");
        elements[3] = document.getElementById("LR");
		eleWidth = Number(elements[0].style.width.substr(0,elements[0].style.width.length - 2));
		eleHeight = Number(elements[0].style.height.substr(0,elements[0].style.height.length - 2));
		do_getLimit = new getLimit();
// DEBUG ::::::::::::::::::::::::::::
		if (top.igmehead.showLimit) top.igmehead.showLimit(do_getLimit.top,do_getLimit.right,do_getLimit.left,do_getLimit.bottom);
}

function refreshMap(evt)
{
	if (!evt) obj = window.event; else obj = evt;

if (top.map.rectActive)
	 {
		top.zoomRect(obj); 
	//	top.map.show_leg();
	}
		document.getElementById("MapImg").onclick = null;

}

function dragstart(element) {
   //Wird aufgerufen, wenn ein Objekt bewegt werden soll.

  dragobjekt = element;
  dragx = posx - dragobjekt.offsetLeft;
  dragy = posy - dragobjekt.offsetTop;
//DEBUG :::::::::::::::::::::::::::::::
	if (top.igmehead.showPos) top.igmehead.showPos(posx,posy,dragx,dragy);
}


function dragstop() {
  //Wird aufgerufen, wenn ein Objekt nicht mehr bewegt werden soll.
//DEBUG :::::::::::::::::::::::::::::::::::::::::
	if (top.igmehead.showPos) top.igmehead.showPos(posx,posy,dragx,dragy);
	if (top.igmehead.showRectangleStr) top.igmehead.showRectangleStr(getRectExtent("str"));
// DEBUG END ::::::::::::::::::::::::::::::::::::
  dragobjekt=null;
}

  // bewegt die restlichen Ecken des Auswahlrechtecks
function moveOther(drag_objekt)
{
	for (var i = 0;i < elements.length;i++)
        {
        if (elements[i].id != drag_objekt.id)
                {
				// Vertikale Bewegung
                if (elements[i].id.charAt(0) == drag_objekt.id.charAt(0)) elements[i].style.top  = drag_objekt.style.top;

				// Horizontale Bewegung
                if (elements[i].id.charAt(1) == drag_objekt.id.charAt(1)) elements[i].style.left = drag_objekt.style.left;
                }
        }
}

function max_limit(dir) // Grenzen erreicht ?
{
	var retVal = false;
	if(dir == "H")
	{
		// Rechte Grenze pruefen
		if ((posx + eleWidth - dragx) >= do_getLimit.right) 
			{
			dragobjekt.style.left = (do_getLimit.right - eleWidth) + "px";
				retVal = true;
			}
		// linke Grenze prüfen
		if ((posx - dragx) <= do_getLimit.left){dragobjekt.style.left = do_getLimit.left; retVal = true;}
		// Kollision ?
		for (var i = 0;i < elements.length;i++)
        {
        if (elements[i].id != dragobjekt.id)
                {
				// Horizontale Kollision
				if (elements[i].id.charAt(1) != dragobjekt.id.charAt(1))
					{
					if (dragobjekt.id.charAt(1) == "L") // dragobjekt ist linkes Element
						{
						if ((posx + eleWidth - dragx)
							>=
							Number(elements[i].style.left.substr(0,elements[i].style.left.length - 2))
							)
							{
							dragobjekt.style.left = (Number(elements[i].style.left.substr(0,elements[i].style.left.length - 2)) - 
									eleWidth) + "px";
							retVal = true;
							break;
							}
						}
					else // dragobjekt ist rechtes Element
						{
						if ((posx - dragx)
							<=
							(eleWidth + 
							Number(elements[i].style.left.substr(0,elements[i].style.left.length-2)))
							)
							{
							dragobjekt.style.left = 
								(eleWidth + 
								Number(elements[i].style.left.substr(0,elements[i].style.left.length-2))) + "px";
							retVal = true;
							break;
							}
						}
					}
				}
		}
	}
	else /* dir == "V" */
	{
		// Obere Grenze prüfen
		if ((posy - dragy)<= do_getLimit.top){dragobjekt.style.top = do_getLimit.top;retVal = true;}
		// Untere Grenze prüfen
		if ((posy + eleHeight - dragy) >= do_getLimit.bottom)
			{
			dragobjekt.style.top = 
				(do_getLimit.bottom - eleHeight) + "px"; 
				retVal = true;
			}
		// Kollision ?
		for (var i = 0;i < elements.length;i++)
        {
        if (elements[i].id != dragobjekt.id)
                {
				// Vertikale Kollision
                if (elements[i].id.charAt(0) != dragobjekt.id.charAt(0))
					{
					if (dragobjekt.id.charAt(0) == "U") // dragobjekt ist oberes Element
						{
						if ((posy + eleHeight - dragy)
							>=
							Number(elements[i].style.top.substr(0,elements[i].style.top.length - 2))
							)
								{
								dragobjekt.style.top = (Number(elements[i].style.top.substr(0,elements[i].style.top.length - 2)) - 
									eleHeight) + "px";
								retVal = true;
								break;
								}
						}
					else
						{
						if ((posy - dragy)
							<=
							(eleHeight + 
							Number(elements[i].style.top.substr(0,elements[i].style.top.length-2)))
							)
								{
								dragobjekt.style.top = 
								(eleHeight + 
								Number(elements[i].style.top.substr(0,elements[i].style.top.length-2))) + "px";
								retVal = true;
								break;
								}
						}
					}

                }
		}

	}
	return retVal;
}
function zdragInit(ereignis)
		{
		if (!ereignis) obj = window.event; else obj = ereignis;
		do_deactivate();
		do_getLimit = new getLimit();
		zoomDir = obj.id;
		document.getElementById("MapImg").style.cursor = "crosshair";
		document.onmousemove = zdrag;
		document.onclick = zclick;
		document.onmouseup = null;
		}
function zdragStop()
		{
		document.onclick = null;
		document.onmousemove = null;
		}
function zdrag(ereignis) {
  var zposx = document.all ? window.event.clientX : ereignis.pageX;
  var zposy = document.all ? window.event.clientY : ereignis.pageY;
	if (top.igmehead.showPos) top.igmehead.showPos(zposx.toString(),zposy.toString(),"z","z");
}

function zclick(ereignis) {
if (!ereignis) obj = window.event; else obj = ereignis;
  var zposx = document.all ? window.event.clientX : ereignis.pageX;
  var zposy = document.all ? window.event.clientY : ereignis.pageY;
//alert("zclick");
	if (do_getLimit.left + do_getLimit.h_offset <= zposx && do_getLimit.right + do_getLimit.h_offset >= zposx
		&& do_getLimit.top + do_getLimit.v_offset <= zposy && do_getLimit.bottom  + do_getLimit.v_offset >= zposy)
		{
		zdragStop();
			if (top.igmehead.showPos) top.igmehead.showPos(zposx.toString(),zposy.toString(),"inside","request send");
			if (top.igmehead.showLimit) top.igmehead.showLimit(do_getLimit.top,do_getLimit.right,do_getLimit.left,do_getLimit.bottom);

		if (zoomDir != "info")
			{
			document.getElementById("MapImg").style.cursor = "wait";
			top.refmap.setCursor("wait");
			top.legende.setCursor("wait");
			oLegTab = document.getElementById("LegTab");
			if (oLegTab) oLegTab.style.cursor = "wait";

			if (top.navigation.show_wait) top.navigation.show_wait();
			top.map.location.href="igme_map1.php?action="+zoomDir+"&posx="+(zposx-do_getLimit.h_offset)+"&posy="+(zposy-do_getLimit.v_offset);
			//show_leg(); /* Show Legend */
			}
		else
			{
			document.getElementById("MapImg").style.cursor = "default";
			wInfoWindow = window.open("igme_info.php?action="+zoomDir+"&posx="+(zposx-do_getLimit.h_offset)+"&posy="+(zposy-do_getLimit.v_offset), "Zweitfenster", "width=650px,height=700px,left=50px,top=50px,scrollbars=yes,resizable=yes,dependent=yes,location=no,toolbar=no,status=no,menubar=no");
			wInfoWindow.focus();
			}
		}
	else
		{
		if (top.igmehead.showPos) top.igmehead.showPos(zposx.toString(),zposy.toString(),"outside","no request");
		if (top.igmehead.showLimit) top.igmehead.showLimit(do_getLimit.top,do_getLimit.right,do_getLimit.left,do_getLimit.bottom);
		}

}


function show_leg()
{
	top.legende.location.href="igme_leg.php?action=lg";
}

function drag(ereignis) {
  //Wird aufgerufen, wenn die Maus bewegt wird und bewegt das Objekt.

  posx = document.all ? window.event.clientX : ereignis.pageX;
  posy = document.all ? window.event.clientY : ereignis.pageY;
  if(dragobjekt != null)
	{
	if (!max_limit("H"))dragobjekt.style.left = (posx - dragx) + "px";    
	if (!max_limit("V"))dragobjekt.style.top  = (posy - dragy) + "px";
	moveOther(dragobjekt);
//DEBUG :::::::::::::::::::::::::::::::::.
	if (top.igmehead.showPos) top.igmehead.showPos(posx,posy,dragx,dragy);

	
	}
// Aktivieren/Deaktivieren des Mauszeigers innerhalb des Rechteckes, setzen des Ereignisses
	rect = getRectExtent("num");
	if (posx - eleWidth < rect.maxx && posx - eleWidth > rect.minx && posy - eleHeight > rect.maxy && posy - eleHeight < rect.miny)
		{
		document.getElementById("MapImg").style.cursor = "pointer";
		document.getElementById("MapImg").onclick = refreshMap;		
		}
	else 
		{
		document.getElementById("MapImg").style.cursor = "auto";
		document.getElementById("MapImg").onclick = null;		
		}
	if (top.igmehead.showPos) top.igmehead.showPos(posx,posy,dragx,dragy);
  return false;
}

function do_activate() {
        document.getElementById("UL").style.zIndex=4;
        document.getElementById("UR").style.zIndex=4;
        document.getElementById("LL").style.zIndex=4;
        document.getElementById("LR").style.zIndex=4;
        document.getElementById("UL").style.visibility="visible";
        document.getElementById("UR").style.visibility="visible";
        document.getElementById("LL").style.visibility="visible";
        document.getElementById("LR").style.visibility="visible";
        draginit(); rectActive = true;
}

function do_deactivate(){
        document.getElementById("UL").style.zIndex=2;
        document.getElementById("UR").style.zIndex=2;
        document.getElementById("LL").style.zIndex=2;
        document.getElementById("LR").style.zIndex=2;
        document.getElementById("UL").style.visibility="hidden";
        document.getElementById("UR").style.visibility="hidden";
        document.getElementById("LL").style.visibility="hidden";
        document.getElementById("LR").style.visibility="hidden";
		rectActive = false;
}
function activate(evt) {do_activate();}
// DEBUG :::::::::::::::::::::::::::::::::::::::::::::
function test_mldg() {alert("Hier ist DragDropTest!");}

