extensions.push('navigator');



function navigatorBegin() {
	eventListeners.attachToEvent('scaleChange','updateNavigator');
	eventListeners.attachToEvent('positionChange','updateNavigator');
	eventListeners.attachToEvent('configurationLoaded','initNavigator');
	//otherMapGui.push('navDiv');
	//initialMapGui.push('navDocked');
	//initialMapGui.push('navMonitor');
	/*initialMapGui.push('navDiv');
	initialMapGui.push('navImageDiv');*/

	/*commands['navigatorOpen']='navigatorOpen';
	commands['navigatorClose']='navigatorClose';*/
	commands['moveNavigator']='moveNavigator';
	
	
	
	//var popup=new Popup('navigator',document.getElementById('navDiv'),document.navMovie,null,document.getElementById('navTitle'));
	/*var popup=new Popup('navigator',document.getElementById('navDiv'),null,null,document.getElementById('navTitle'));
	popups.addPopup(popup);*/
}


/**
 * Aggiorna lo stato del navigatore.
 */
function updateNavigator() {
	
	if(map && map.maxRange && map.maxRange.maxX) {
		
		var maxRange=map.maxRange;
		
		var maxWidth=maxRange.getDeltaX();
		var maxHeight=maxRange.getDeltaY();

		var navWidth=mapInfo.getProperty('navigatorWidth');
		var navHeight=mapInfo.getProperty('navigatorHeight');
		var initialWidth=mapInfo.getProperty('initialNavigatorWidth');
		/*var offsetX=parseInt((initialWidth-navWidth)/2);
		var offsetY=parseInt((initialWidth-navHeight)/2);*/

		var offsetX=0;
		var offsetY=0;
		
		var range=map.currRange;
		
		var factorX=navWidth/maxRange.getDeltaX();
		var factorY=navHeight/maxRange.getDeltaY();
		var minX=Math.ceil(range.minX*factorX)+offsetX;
		var maxX=Math.ceil(range.maxX*factorX)+offsetX;
		var minY=Math.ceil(range.minY*factorY)+offsetY;
		var maxY=Math.ceil(range.maxY*factorY)+offsetY;
		
		var ref=document.getElementById('navImage');
		var navX=ref.offsetLeft;
		var navY=ref.offsetTop;
		
		document.getElementById('navMonitor').style.pixelLeft=navX+minX;
		document.getElementById('navMonitor').style.pixelTop=navY+minY;
		document.getElementById('navMonitor').style.width=maxX-minX;
		document.getElementById('navMonitor').style.height=maxY-minY;
		
		document.getElementById('navMonitor').style.visibility='visible';	
	}
	
	
	/*if(mapInfo.getProperty('toponimoX'))
		updateToponimoSymbol(mapInfo.getProperty('toponimoX'),mapInfo.getProperty('toponimoY'));*/
	

	//document.navMovie.gotoFrame(4);
	
	//document.navMovie.play();
}


function initNavigator() {
	var range=map.maxRealRange;

	var width=range.getDeltaX();
	var height=range.getDeltaY();
	var navWidth=mapInfo.getProperty('navigatorWidth');
	
	mapInfo.setProperty('initialNavigatorWidth',navWidth);
	if(width>height)
		navHeight=parseInt(height/width*navWidth);
	else if(height>width)
		navWidth=parseInt(width/height*navHeight);
	
	mapInfo.setProperty('navigatorWidth',navWidth);
	mapInfo.setProperty('navigatorHeight',navHeight);
	//alert(mapInfo.getProperty('applicationName'));
	document.getElementById('navImage').src="navigators/"+mapInfo.getProperty('applicationName')+"/mappa"+guiVersion+".png";	
	
}

function endDragMonitor() {
	document.onmousemove=null;
	document.onmouseup=null;
	
	var div=document.getElementById('navMonitor');
	
	var ref=document.getElementById('navImage');
	var navX=ref.offsetLeft;
	var navY=ref.offsetTop;

	doCommand('moveNavigator',(div.style.pixelLeft-navX)+','+(div.style.pixelWidth+div.style.pixelLeft-navX)+','+(div.style.pixelTop-navY)+','+(div.style.pixelHeight+div.style.pixelTop-navY));
}

function moveNavigator(args) {
	var coords=args.split(',');
	var minX=parseInt(coords[0]);
	var maxX=parseInt(coords[1]);
	var minY=parseInt(coords[2]);
	var maxY=parseInt(coords[3]);
	
	if((maxX-minX)<=0)
		maxX=minX+1;
	if((maxY-minY)<=0)
		maxY=minY+1;
	
	var width=map.maxRealRange.getDeltaX();
	var height=map.maxRealRange.getDeltaY();
	var navWidth=mapInfo.getProperty('navigatorWidth');
	var navHeight=mapInfo.getProperty('navigatorHeight');
	var initialWidth=mapInfo.getProperty('initialNavigatorWidth');
	/*var offsetX=parseInt((initialWidth-navWidth)/2);
	var offsetY=parseInt((initialWidth-navHeight)/2);*/
	var offsetX=0;
	var offsetY=0;
	
	if(offsetX<=0)
		offsetX=1;
	if(offsetY<=0)
		offsetY=1;

	var xFactor=width/navWidth;
	var yFactor=height/navHeight;

	var rminx=(minX-offsetX)*xFactor+map.maxRealRange.minX;
	var rmaxx=(maxX-offsetX)*xFactor+map.maxRealRange.minX;
	var rmaxy=-(minY-offsetY)*yFactor+map.maxRealRange.maxY;
	var rminy=-(maxY-offsetY)*yFactor+map.maxRealRange.maxY;
	
	var newRange=new Range(rminx,rmaxx,rminy,rmaxy);
	
	newRange.adjustAspectRatio(mapWidth,mapHeight);
	
	var scale=map.maxRealRange.getDeltaX()/newRange.getDeltaX();
//	alert(scale);
	i=-1;
	if(scale<=1)
		currentZoom=0;
	else if(scale>=zoomScale[zoomScale.length-1])
		currentZoom=zoomScale.length-1;
	else {
		for(var count=zoomScale.length-1;count>=0;count--) {
			if (scale<=zoomScale[count]) {
				currentZoom=count;
			}
		}
	}
	
	if(currentZoom>0) {
		
		var d1=Math.abs(scale-zoomScale[currentZoom]);
		
		var d2=Math.abs(scale-zoomScale[currentZoom-1]);
		
		if(d2<d1)
			currentZoom=currentZoom-1;
	}
	
	map.zoomBox(newRange);
	map.zoomAbsolute(zoomScale[currentZoom]);	
	eventListeners.fireEvent('positionChange');
	mapInfo.setProperty('currentZoom',currentZoom);
	//checkPalette();
	map.update();
	
	/*if(mapInfo.getProperty('toponimoX'))
		updateToponimoSymbol(mapInfo.getProperty('toponimoX'),mapInfo.getProperty('toponimoY'));*/
	
}

function dragMonitor() {
	var diffX=event.clientX-currentMonitorX;
	var diffY=event.clientY-currentMonitorY;
	var newX=initialX+diffX;
	var newY=initialY+diffY;
	if(newX<minMonitorX)
		newX=minMonitorX;
	if(newX>maxMonitorX)
		newX=maxMonitorX;
	if(newY<minMonitorY)
		newY=minMonitorY;
	if(newY>maxMonitorY)
		newY=maxMonitorY;
	document.getElementById('navMonitor').style.pixelLeft=newX;
	document.getElementById('navMonitor').style.pixelTop=newY;
}

function beginDragMonitor() {
	document.onmousemove=dragMonitor;
	document.onmouseup=endDragMonitor;
	currentMonitorX=event.clientX;
	currentMonitorY=event.clientY;

	var maxRange=map.maxRealRange;

	var width=maxRange.getDeltaX();
	var height=maxRange.getDeltaY();

	var navWidth=mapInfo.getProperty('navigatorWidth');
	var navHeight=mapInfo.getProperty('navigatorHeight');
	var initialWidth=mapInfo.getProperty('initialNavigatorWidth');

	var range=map.realRange;
	
	var factorX=navWidth/maxRange.getDeltaX();
	var factorY=navHeight/maxRange.getDeltaY();

	var currW=range.getDeltaX()*factorX;
	var currH=range.getDeltaY()*factorY;

	var ref=document.getElementById('navImage');
	var navX=ref.offsetLeft;
	var navY=ref.offsetTop;

	/*minMonitorX=parseInt((initialWidth-navWidth)/2)+navX;
	minMonitorY=parseInt((initialWidth-navHeight)/2)+navY;*/
	minMonitorX=navX;
	minMonitorY=navY;
	maxMonitorX=minMonitorX+navWidth-currW;
	maxMonitorY=minMonitorY+navHeight-currH;

	initialX=document.getElementById('navMonitor').style.pixelLeft;
	initialY=document.getElementById('navMonitor').style.pixelTop;
}
