var map_overIcon = false;

var vspc = 0;
var hspc = 0;

var map_zoomMode = "";
var mapContainer = null;

var map_mouseX = 0;
var map_mouseY = 0;
	
var map_xdown = 0;
var map_ydown = 0;
	
var map_xup = 0;
var map_yup = 0;

var zleft = 0;
var ztop = 0;

var zright = 0;
var zbottom = 0;
	
var map_zooming = false;

var x1 = 0;
var y1 = 0;

var x2 = 0;
var y2 = 0;

var drag = false;
var dragX = 0;
var dragY = 0;

var xycounter = 0;
var over = null;
var ns4 = (document.layers)? true:false
var ie4 = (document.all)? true:false

var xmlStringa = "";

function setZoomMode(zoomMode) 
	{

	var mapStyle = null;

	// getElementById restituisce l'elemento (oggetto) il cui ID e' stato specificato
	if (document.getElementById)
		mapStyle = document.getElementById('zoomat').style;

	else if (document.all)
		mapStyle = document.all.zoomat.style;

	else if (document.layers)
		mapStyle = document.layers['zoomat'].style;

	if (zoomMode == 'in' || zoomMode == 'out')
		mapStyle.cursor = "hand";
			
	else if(zoomMode == 'area')
		mapStyle.cursor = "crosshair";

	else if(zoomMode == 'drag')
		mapStyle.cursor = "move";
			
	else
		mapStyle.cursor = "hand";

	// Assegno alla variabile globale il tipo di zoom correntemente scelto
	map_zoomMode = zoomMode;
	
	document.map_form.map_zoom.value = zoomMode;

	
}

function createZoomBox() 
	{

	// Verifico se il browser supporta il DHTML
	var DHTML = (document.getElementById);
	if (!DHTML) 
		return;

	onResize();
	setZoomBoxSettings();

	var zBgColor ="#FF0000";

	// Creo i tag DIV su cui tracciare il rettangolo (uno per ogni lato del rettangolo)
	createLayer("zoomBoxTop",hspc,vspc,map_width,map_height,false,zBgColor);
	createLayer("zoomBoxLeft",hspc,vspc,map_width,map_height,false,zBgColor);
	createLayer("zoomBoxRight",hspc,vspc,map_width,map_height,false,zBgColor);
	createLayer("zoomBoxBottom",hspc,vspc,map_width,map_height,false,zBgColor);

	//window.status = 'hspc=' + hspc + ' - vspc=' + vspc;
}

function setZoomBoxSettings() 
	{

    mapContainer = document.getElementById('map');
    if (!mapContainer)
        return;

    addEventListenerEx(mapContainer, 'mousedown', MouseDown, true);
    addEventListenerEx(mapContainer, 'mousemove', MouseMove, true);
    addEventListenerEx(mapContainer, 'mouseup', MouseUp, false);
    addEventListenerEx(mapContainer, 'mouseout', MouseOut, false);

    addEventListenerEx(mapContainer, 'draggesture', Cancel, false);
    addEventListenerEx(mapContainer, 'dragstart', Cancel, false);

}

function addEventListenerEx(EventSource,EventType,EventHandler,captures) 
	{
    captures = (captures) ? captures : false;
	    
    if ( document.addEventListener ) {
        EventSource.addEventListener(EventType,EventHandler,captures);
	        
    } else if (document.attachEvent) {
        EventType = 'on' + EventType;
        EventSource.attachEvent(EventType,EventHandler);
	        
    } else {
        EventType = 'on' + EventType;
        EventSource[EventType] = EventHandler;
    }
}

function MouseDown(evt) 
	{
	onResize();
	getImageXY(evt);

	map_xdown = document.map_form.map_xdown.value = map_mouseX;
	map_ydown = document.map_form.map_ydown.value = map_mouseY;

	switch(map_zoomMode) 
		{
		case 'in':
			document.map_form.map_action.value = 'zoom';
			document.map_form.submit();
			return true;

			break;

		case 'out':
			document.map_form.map_action.value = 'zoom';
			document.map_form.submit();
			return true;

			break;

		case 'info':
			document.map_form.map_action.value = 'zoom';
			document.map_form.submit();

			return true;

			break;

		case 'sposta':
			document.map_form.map_action.value = 'zoom';
			document.map_form.submit();
			return true;

			break;

		case 'area':
			if (!map_zooming )
				{

				startZoomBox(evt);
				return false;
				} 
				else 
					{
					MouseMove(evt);
					}

				return true;

			break;

		case 'drag':
			DragStart(evt);

			break;

		case 'multiplexy':
			xycounter++; 
			
			if (xycounter>=50) 
				{
				alert('si possono selezionare al massimo 50 zone per volta');
				return false;
			}

			var myOverDiv = document.getElementById('overDiv'+xycounter);
			
			if ( (ns4) || (ie4) ) 
				{
				if (ns4) over = document.myOverDiv
				if (ie4) over = myOverDiv.style
			}
			
			var oOption = document.createElement("OPTION"); 
			oOption.text="x: "+map_xdown+' - y:'+map_ydown; 
			oOption.value=map_xdown+"|"+map_ydown; 
			oOption.selected=true;
			document.map_form.mapxy.add(oOption);
			
			var txt = "<img src=icone/ico_show.gif alt=selezione>"
			layerWrite(txt, xycounter);
			layerMoveTo(over,map_xdown+hspc-8,map_ydown+vspc-8);
			
			break;
			
		default: // same as case else
			break;
		}

	return true;
}

function MouseMove(evt) 
	{

	if (map_zoomMode=="drag")
		{
		Drag(evt);			
		return false;
	}

	if (map_zoomMode=='area' && map_zooming) 
			{

			getImageXY(evt);

			if (map_mouseX < 0)
				map_mouseX = 0;
					
			if (map_mouseX > map_width)
				map_mouseX = map_width;
					
			if (map_mouseY < 0)
				map_mouseY = 0;
					
			if (map_mouseY > map_height)
				map_mouseY = map_height;

			x2 = map_mouseX;
			y2 = map_mouseY;

			map_xup = document.map_form.map_xup.value = x2;
			map_yup = document.map_form.map_yup.value = y2;

			// Associa le coordinate del mouse al rettangolo da disegnare
			setClip();
			return false;
	}

			
	return true;
}

function MouseOut(evt) 
	{
	if (map_zoomMode=='area')
		{
			
		if (map_zooming) 
			{

			getImageXY(evt);

			if (map_mouseX < 0)
			 	map_mouseX = 0;
				 	
			if (map_mouseX > map_width)
				map_mouseX = map_width;
					
			if (map_mouseY < 0)
				map_mouseY = 0;
					
			if (map_mouseY > map_height)
				map_mouseY = map_height;

			stopZoomBox(evt);
				
			document.map_form.map_action.value = 'zoom';
			document.map_form.submit();
		}
			
		return true;
	}

	if (map_zoomMode=='drag')
		{
		DragAutoEnd(evt);
		return true;
	}
		
	return true;
}

function MouseUp(evt) 
	{

	switch(map_zoomMode) 
		{

		case 'area':
			if (map_zooming) 
				{
				if (map_mouseX < 0)
				 	map_mouseX = 0;
					 	
				if (map_mouseX > map_width)
					map_mouseX = map_width;
						
				if (map_mouseY < 0)
					map_mouseY = 0;
						
				if (map_mouseY > map_height)
					map_mouseY = map_height;

				stopZoomBox(evt);
					
				document.map_form.map_action.value = 'zoom';
				document.map_form.submit();
			}

			break;

		case 'drag':
			DragEnd(evt);

			break;

		case 'multiplexy':
			break;
			
		default: // same as case else
			break;
		}
		
	return true;
}

function getImageXY(evt) 
	{
	if(!evt) var evt = window.event;

	if(evt.pageX || evt.pageY) 
		{
		map_mouseX = evt.pageX;
		map_mouseY = evt.pageY;
		}
		else 
			{
			map_mouseX = evt.clientX + document.body.scrollLeft - 2;
			map_mouseY = evt.clientY + document.body.scrollTop - 2;
			}

	map_mouseX = map_mouseX - hspc;
	map_mouseY = map_mouseY - vspc;

	//window.status = 'X=' + (evt.clientX-hspc) + ' - Y=' + (evt.clientY-vspc) + ' - hspc=' + hspc + ' - vspc=' + vspc + '- map_zoomMode=' + map_zoomMode + ' - map_zooming=' + map_zooming;

}

function onResize() 
	{

	var oMap = document.getElementById('zoomat');

	vspc = oMap.offsetTop; //custom values
	hspc = oMap.offsetLeft;

	var parent = oMap.offsetParent;

	while( parent.tagName != "BODY") {
		vspc += parent.offsetTop;
		hspc += parent.offsetLeft;
		parent = parent.offsetParent;

		/*if ( parent==null )
			return true;*/
	}


	//window.status = 'Left hspc:' + hspc + 'Top vspc' + vspc;

}

// Disegna il rettangolo sulla mappa
function startZoomBox(evt)
	{
	getImageXY(evt);

	if ((map_mouseX < map_width) && (map_mouseY < map_height)) 
		{
		if (!map_zooming) 
			{
			x1=map_mouseX;
			y1=map_mouseY;
				
			x2=x1+1;
			y2=y1+1;
				
			clipLayer("zoomBoxTop",(x1+hspc),(y1+vspc),(x2+hspc),(y2+vspc));
			clipLayer("zoomBoxLeft",(x1+hspc),(y1+vspc),(x2+hspc),(y2+vspc));
			clipLayer("zoomBoxRight",(x1+hspc),(y1+vspc),(x2+hspc),(y2+vspc));
			clipLayer("zoomBoxBottom",(x1+hspc),(y1+vspc),(x2+hspc),(y2+vspc));
				
			map_zooming=true;
				
			showLayer("zoomBoxTop");
			showLayer("zoomBoxLeft");
			showLayer("zoomBoxRight");
			showLayer("zoomBoxBottom");
			}
		}
		else 
			{
			if (map_zooming)
				stopZoomBox(evt);
	}
	
	return false;
}

function stopZoomBox(evt)
	{
	map_zooming = false;

	if ( zright < zleft + 4 && ztop < zbottom + 4 )
		{
		// Se il rettangolo e' troppo piccolo
		zright = zleft;
		zbottom = ztop;
		}
	return true;
}

// Associa le coordinate del mouse al rettangolo da disegnare durante l'evento MOUSEMOVE
function setClip() 
	{

	if (x1 > x2) 
		{
		zright = x1;
		zleft = x2;
		} 
		else 
			{
			zleft = x1;
			zright = x2;
			}
				
	if (y1 > y2) 
		{
		zbottom = y1;
		ztop = y2;
			
		}
		else 
			{
			ztop = y1;
			zbottom = y2;
			}
		
	if (x1 != x2 && y1 != y2) 
		{

		var ovBoxSize = 2;// Dimensione linea rettangolo
		// Visualizza le linee

		//window.status = 'zleft=' + zleft + 'ztop=' + ztop + 'zright=' + zright + 'zbottom=' + zleft + 'x1=' + x1;
			
		clipLayer("zoomBoxTop",zleft,ztop,zright,ztop+ovBoxSize);
		clipLayer("zoomBoxLeft",zleft,ztop,zleft+ovBoxSize,zbottom);
		clipLayer("zoomBoxRight",zright-ovBoxSize,ztop,zright,zbottom);
		clipLayer("zoomBoxBottom",zleft,zbottom-ovBoxSize,zright,zbottom);
	}
}
	
function DragStart(evt)
	{
	drag = true;
	dragX = map_mouseX;
	dragY = map_mouseY;
}

function Drag(evt)
	{
    if (!drag)
        return false;

    var map = mapContainer.firstChild;
    if (!map)
        return false;

	getImageXY(evt);

    var dX = map_mouseX - dragX;
    var dY = map_mouseY - dragY;

    map.style.left = dX + 'px';
    map.style.top = dY + 'px';

	evt.cancelBubble = true;
	
	//map.src="asyncpicture.asp?ContextName="+map_form.ContextName.value+"&DragX="+dX+"&DragY="+dY;


	//var urlimage="asyncpicture.asp?ContextName="+map_form.ContextName.value+"&DragX="+dX+"&DragY="+dY;
	//var elem=document.getElementById('map_pane');
	//elem.style.backgroundImage='url('+urlimage+')';

	//window.status = urlimage;

	return false;
}
		
function DragAutoEnd(evt)
	{
	getImageXY(evt);
			
	if (drag) 
		{
		if (map_mouseX < 0)
		 	map_mouseX = 0;
				 	
		if (map_mouseX > map_width)
			map_mouseX = map_width;
					
		if (map_mouseY < 0)
			map_mouseY = 0;
					
		if (map_mouseY > map_height)
			map_mouseY = map_height;

		var dX = map_mouseX - dragX;
		var dY = map_mouseY - dragY;
				
		UpdateMap(dX, dY);
	}
}

function DragEnd(evt)
	{

	if (!drag)
	    return;

	drag = false;

	getImageXY(evt);
			
	var dX = map_mouseX - dragX;
	var dY = map_mouseY - dragY;

	if (dX == 0 && dY == 0)
	    return;

	UpdateMap(dX, dY);
}

function UpdateMap(deltaX, deltaY)
	{

	document.map_form.map_xdrag.value = deltaX;
	document.map_form.map_ydrag.value = deltaY;
		
	document.map_form.map_action.value = 'drag';
	document.map_form.submit();
	
}

function Cancel(evt)
	{
    evt.cancelBubble = true;
}

// Writes to a layer
function layerWrite(txt, cnt) {

		var myOverDiv = document.getElementById('overDiv'+cnt);
        if (ns4) {
                var lyr = document.myOverDiv.document;
                lyr.write(txt);
                lyr.close();
        }
        else 
			{
			if (ie4) 
				{
				myOverDiv.innerHTML = txt;
			}
		}
}

// Move a layer
function layerMoveTo(obj,xL,yL)
{
	obj.left = xL;
	obj.top = yL;
}



function createXMLHttpRequest()
{
    if ( window.ActiveXObject )
		xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		else
			{
			if (window.XMLHttpRequest)
				xmlHttp = new XMLHttpRequest();
			}
}

function startXmlRequest(url)
{
    createXMLHttpRequest();

	if ( xmlHttp != null )
		{
		xmlHttp.open("GET", url, false);
		xmlHttp.send(null);
		//alert( url );

		//alert( xmlHttp.status );
		if ( xmlHttp.status == 200)
			{
			xmlStringa = xmlHttp.responseText;
			return( true );
			}
		return( false );
		}
		else
			return( false );

}



/************************************************************************************************************
	(C) www.dhtmlgoodies.com, September 2005
	
	This is a script from www.dhtmlgoodies.com. You will find this and a lot of other scripts at our website.	
	
	Terms of use:
	You are free to use this script as long as the copyright message is kept intact. However, you may not
	redistribute, sell or repost it without our permission.
	
	Thank you!
	
	www.dhtmlgoodies.com
	Alf Magne Kalleland
	

************************************************************************************************************/
function showToolTip( x_pos, y_pos, text )
{
	
	var map_id = document.getElementById('map');

	if ( map_id != null )
		{
		var s_coord = findPos( map_id );
		
		var obj = document.getElementById('bubble_tooltip');
		var obj2 = document.getElementById('bubble_tooltip_content');
		obj2.innerHTML = text;
		obj.style.display = 'block';
		var st = Math.max(document.body.scrollTop,document.documentElement.scrollTop);
		
		var leftPos = ( x_pos + s_coord[ 0 ] ) - 30;
		
		if ( leftPos < 0 )
			leftPos = 0;

		var bubble_top = ( y_pos + s_coord[ 1 ] ) - obj.offsetHeight -1 + st; 
		
		obj.style.left = leftPos + 'px';
		obj.style.top = y_pos + s_coord[ 1 ] + st + 'px';
		}

}	
	
function hideToolTip()
{
	document.getElementById('bubble_tooltip').style.display = 'none';
		
}


function findPos(obj)
{
	var curleft = curtop = 0;
	if ( obj.offsetParent)
		{
		do
			{
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
			} while (obj = obj.offsetParent);
		}
	
	return [curleft,curtop];
}
