// JavaScript Document
// x_map.js
// uses: X x417_xc106_z1, Cross-Browser DHTML Library from www.Cross-Browser.com
//
// Interface zur x-Library;

//xAnimation für WheelZoom
var xaMapSize = new xAnimation();

function registerMapEvents() {
  xAddEventListener('boxMap', 'mousedown', xMapOnMousedown, false);
  xAddEventListener('boxMap', 'mousemove', xMapOnMousemove, false);
  xAddEventListener('boxMap', 'mouseup', xMapOnMouseup, false);
  xAddEventListener('boxMap', 'mouseout', xMapOnMouseout, false);
  xAddEventListener('boxMap', 'dblclick', xMapOnDblclick, false);  
  xAddEventListener('boxReference', 'mousedown', xReferenceOnMousedown, false);
  xAddEventListener('client', 'mouseup', xClientOnMouseup, false);
  if (useWheelZoom) {
  	//IE
  	xAddEventListener('boxMap', 'mousewheel', xOnMouseWheel, false);
  	//Firefox 
  	xAddEventListener('boxMap', 'DOMMouseScroll', xOnMouseWheel, false);
  }
  xEnableDrag('elMap',null,onDragMap,null);//, handleMapOnDragStart, handleMapOnDrag, handleMapOnDragEnd);
  disableDragMap();
}

function xOnMouseWheel(e){
	var evt = new xEvent(e);
	var delta;
	if (e.detail) {
		delta=e.detail;//Mozilla
	} else if (e.wheelDelta) {
		delta=-e.wheelDelta;//IE
	}
	delta = delta / Math.abs(delta);
	handleOnMouseWheel(delta);
}

function xMapOnMousedown(e) // mousedown
{
  var evt = new xEvent(e);
  var x,y;
  if (e.preventDefault) {
  	e.preventDefault();
  } else {
  	if (window.event) {
  		window.event.returnValue = false;
  	}
  }
  //alert(getMapX(evt.offsetX) + "," + getMapY(evt.offsetY));
  //if ((evt.target.id=='elBoxtool')||(xParent(evt.target,true).id=='elCanvasTemp')||(xParent(evt.target,true).id=='elCanvas')) {  
  if (evt.target.id!='theMap') {
  	x=evt.offsetX + xOffsetLeft(evt.target);
  	y=evt.offsetY + xOffsetTop(evt.target);
  } else {
  	x=evt.offsetX;
  	y=evt.offsetY;
  }
  handleMapOnMousedown(x, y);
}

function xMapOnMousemove(e) // mousemove
{
  var evt = new xEvent(e);
  var x,y;
  if (e.preventDefault) {
    	e.preventDefault()
  } else {
  		if (window.event) window.event.returnValue = false;
  }
  //if ((evt.target.id=='elBoxtool')||(xParent(evt.target,true).id=='elCanvasTemp')||(xParent(evt.target,true).id=='elCanvas')) {
  if (evt.target.id!='theMap') {
  	x=evt.offsetX + xOffsetLeft(evt.target);
  	y=evt.offsetY + xOffsetTop(evt.target);
  } else {
  	x=evt.offsetX;
  	y=evt.offsetY;
  }
  handleMapOnMousemove(x,y);
  //}
}

function xMapOnMouseup(e) // mouseup
{
  var evt = new xEvent(e);
  var x,y;
  if (evt.target.id!='theMap') {
  	//x=evt.offsetX + xOffsetLeft(evt.target);
  	//y=evt.offsetY + xOffsetTop(evt.target);
  	x=evt.pageX-xPageX('boxMap');
  	y=evt.pageY-xPageY('boxMap');
  } else if (xGetElementById('elMap').xDragEnabled) {
  	x=evt.offsetX + xLeft('elMap');
  	y=evt.offsetY + xTop('elMap');
  } else {
  	x=evt.offsetX;
  	y=evt.offsetY;  }
  //xStopPropagation(evt); // macht Probleme beim IE
  handleMapOnMouseup(x,y);
}

function xMapOnDblclick(e) // Doubleclick
{
  var evt = new xEvent(e);
  var x,y;
  if (e.preventDefault) {
  	e.preventDefault();
  } else {
  	if (window.event) {
  		window.event.returnValue = false;
  	}
  }
  
  //if ((evt.target.id=='elBoxtool')||(xParent(evt.target,true).id=='elCanvasTemp')||(xParent(evt.target,true).id=='elCanvas')) {
  if (evt.target.id!='theMap') {
  	x=evt.offsetX + xOffsetLeft(evt.target);
  	y=evt.offsetY + xOffsetTop(evt.target);
  } else {
  	x=evt.offsetX;
  	y=evt.offsetY;
  }  
  handleMapOnDblclick(x, y);
}

function xMapOnMouseout(e) // mouseout
{
  var evt = new xEvent(e);
  if (!xHasPoint('boxMap', evt.pageX, evt.pageY)) {
  	handleMapOnMouseout();
  }
}

function xReferenceOnMousedown(e) // mousedown
{
  var evt = new xEvent(e);
  if (e.preventDefault) {
  	e.preventDefault();
  }	else {
  	if (window.event) {
  		window.event.returnValue = false;
  	}
  }
  
  if (evt.target.id=='theReference') {
	  handleReferenceOnMousedown(evt.offsetX, evt.offsetY);
  }
}

function xClientOnMouseup(e) // mouseup außerhalb Map
//Event wird beim Draggen (PAN) der Karte außerhalb des Kartenbereichs ausgelöst
//nicht beim IE! (siehe xMapOnMouseUp)
{
  var evt = new xEvent(e);
  handleClientOnMouseup(evt.pageX-xPageX('boxMap'), evt.pageY-xPageY('boxMap'));
}

function startDragMap(){
	xGetElementById('elMap').xDragEnabled=true;
}

function disableDragMap(){
	xGetElementById('elMap').xDragEnabled=false;
}
function onDragMap(el, dx, dy, ev) {
	xMoveTo(el, xLeft(el) + dx, xTop(el) + dy);
}

// zoom-Box-Funktionen
function showBox(x,y) {
  xResizeTo('elBoxtool', 5, 5);   
  xMoveTo('elBoxtool', x, y);   
  xVisibility('elBoxtool',true);
}

function hideBox() {
  xResizeTo('elBoxtool', 5, 5);
  xVisibility('elBoxtool',false);
}

function resizeBox(width, height) {
  xResizeTo('elBoxtool', width, height);
}

function moveBox(left, upper) {
  xMoveTo('elBoxtool', left, upper);
}

function pseudoZoom(f) {
	var mw=parent.UPGMainF.document.getElementById("theMap").width*f;
	var mh=parent.UPGMainF.document.getElementById("theMap").height*f;
	var ix=(mapwidth-mw)/2;
	var iy=(mapheight-mh)/2;
	xSlideTo('elMap', ix, iy, 15);
	xaMapSize.size('theMap', mw, mh, 10, 0);
}

function showProcessBar(type) {
  var animation;
  switch(type) {
   case 'generateMap':
   	  animation='images/generateMap.gif';
      break;
   case 'loadMap':
   	  animation='images/loadMap.gif';
      break;
   case 'initApp':
   	  animation='images/initApp.gif';    
   	  //animation='images/loadLists.gif';  
      break;
   case 'loadData':
   	  animation='images/loadMap.gif';    
   	  //animation='images/loadData.gif';  
      break;
   default:
   	  //animation='images/loadData.gif';
   }
  xGetElementById("theProcessBar").src=animation;
  xMoveTo('ProcessBar', xClientWidth()/2 - xWidth('ProcessBar')/2, xClientHeight()/2 - xHeight('ProcessBar')/2); 
  xVisibility('ProcessBar',true);
}

function hideProcessBar() {
  xVisibility('ProcessBar',false);
}

function hideMaptip() {
  xResizeTo('elMaptip', 0, 0);
  xVisibility('elMaptip',false);
  xMoveTo('elMaptip', -500, -500);
  maptipIsAdhesive=false;
  xVisibility('maptipCloseButton',false);
}

function attachMaptip(x,y) {
  var leftx = x - xWidth('elMaptip')-2;
  leftx= ((leftx>2) ? leftx : 2);
  var topy = y - xHeight('elMaptip')-2;
  topy= ((topy>2) ? topy : 2);
  xMoveTo('elMaptip', leftx + xOffsetLeft('boxMap') , topy + xOffsetTop('boxMap')); 
  if (maptipIsAdhesive) {
  	xVisibility('maptipCloseButton',true);
  }
  xVisibility('elMaptip',true);  
}

function toggleVisibility(ele) {
	xVisibility(ele,xVisibility(ele)=='hidden');
}

