//  COPYRIGHT © 2006 ESRI
//
//  TRADE SECRETS: ESRI PROPRIETARY AND CONFIDENTIAL
//  Unpublished material - all rights reserved under the
//  Copyright Laws of the United States and applicable international
//  laws, treaties, and conventions.
// 
//  For additional information, contact:
//  Environmental Systems Research Institute, Inc.
//  Attn: Contracts and Legal Services Department
//  380 New York Street
//  Redlands, California, 92373
//  USA
// 
//  email: contracts@esri.com

ï»¿// display_navigation.js
    //functions for using draggable navigation control
       

var useDirections = 8;	// 4 for just up,right,bottom,left ... 8 for all directions

// global var for panner object
var panner = null;
var NavControlNames = new Array();
var NavControls = new Array();

var getMoreTiles = true;
var navDragOn = false;

var initialMouseX = 0;
var initialMouseY = 0;

function PannerObject(controlName, buddyName) { 
	inheritsFrom(new ControlObject(controlName, "Panner", 0, 0, 0, 0), this);
	this.buddyName = buddyName;	
	this.divId = this.controlName;
	this.divObject = null;
	this.containerId = null;
	this.containerObject = null;
	this.dirArray = null;
	this.mapMoveIncrement = 3;
	this.tempMoveFunction = null;
	

	
	this.setObjects = function(dArray) {
		this.divObject = document.getElementById(this.divId);
		var box = calcElementPosition(panner.divId);	
		initialMouseX = box.left + Math.round(box.width / 2);
		initialMouseY = box.top + Math.round(box.height / 2);
		
		if (this.buddyName==null || this.buddyName=="")
		    hideLayer(this.divId);
		 
		    
	}
}

var navControlVert = 0;
var navControlHoriz = 0;
var navControlCheckInterval = null;
var lastCol = -1;
var lastRow = -1;

function navMouseDown(e, controlName) {
    if (getSessionLapse() < maximumLapseTime) {
	    if (!navDragOn) {
	        panner = NavControls[controlName];
	        map = Maps[panner.buddyName];
	        if (map!=null) {
		        var box = calcElementPosition(map.divId);
	            var box2 = calcElementPosition(map.containerDivId); 
				panStartLeft = box.left - box2.left;
				panStartTop = box.top - box2.top;
		        map.dragImage = true;
		        getXY(e);
				var box = calcElementPosition(panner.divId);	
				initialMouseX = box.left + Math.round(box.width / 2);
				initialMouseY = box.top + Math.round(box.height / 2);
		        getNavDirection(e);
		        nav_active = true;
		        panner.divObject.onmousemove = navMouseMove;
		        panner.divObject.onmouseup = navMouseUp;
		        panner.tempMoveFunction = document.onmousemove;
				document.onmousemove = navMouseMove;
				document.onmouseup = navMouseUp;
		        
		        var chkInterval = 6
		        if (isNav) chkInterval /= 2;
		        navControlCheckInterval = window.setInterval("checkNavDirection( navDir);",chkInterval);
		        tempToolMode = map.mode;
		        map.mode = "MapPan";
        	    if (map.vectorObject!=null) map.vectorObject.restart();
        	
		    }
	    }
	} else
	    showLapseAlert();
	return false;
}

function navMouseMove(e) {
		getXY(e);
		getNavDirection(e);
		//window.status = navDir;
		
		checkNavDirection(navDir);
	return false;
}

function navMouseUp(e) {
	//getNavDirection(e);
	document.onmousemove = panner.tempMoveFunction;
	document.onmouseup = null;
	map.dragImage = false;
	panner.divObject.onmousemove = null;
	panner.divObject.onmouseup = null;
	window.clearInterval(navControlCheckInterval);
	nav_active = false;
	
	finishDragImage(map);
	map.mode = tempToolMode;	
    return false;
}

function setDir(dir) {
	navDir = dir;
	return false;
}

function getNavDirection(e) {
	var shiftX = mouseX - initialMouseX;
	var shiftY = mouseY - initialMouseY;
	var dist = Math.sqrt(Math.pow(shiftX, 2) + Math.pow(shiftY, 2));
    var dir;
    var shift = (shiftX / shiftY);
    if (shift == 0) {
      if (shiftY > 0)
        dir = "down";
      else //if (shiftY < 0)
        dir = "up";
    }
    else if (shiftX < 0) {
      if (shift >= 0 && shift <= 0.5)
        dir = "up";
      else if (shift > 0.5 && shift <= 1.5)
        dir = "ul";
      else if (shift > 1.5 || shift <= -1.5)
        dir = "left";
      else if (shift > -1.5 && shift <= -0.5)
        dir = "ll";
      else
        dir = "down";
    }
    else {
      if (shift >= 0 && shift <= 0.5)
        dir = "down";
      else if (shift > 0.5 && shift <= 1.5)
        dir = "lr";
      else if (shift > 1.5 || shift <= -1.5)
        dir = "right";
      else if (shift > -1.5 && shift <= -0.5)
        dir = "ur";
      else
        dir = "up";
    }
	
	navDir = dir;

}

var navDragXoffset, navDragYoffset;

function navDragStart(e, controlName) {
	navDragOn = true;
	getXY(e);
	panner = NavControls[controlName];
	if (panner!=null) {
	    var box = calcElementPosition(panner.divId);
	    navDragXoffset = mouseX - box.left;
	    navDragYoffset = mouseY - box.top;
	    panner.divObject.onmousemove = null;
	    panner.divObject.onmouseup = null;
	    panner.tempMoveFunction = document.onmousemove;
	    document.onmousemove = navDragMove;
	    document.onmouseup = navDragStop;
	} else {
	    alert(controlName + " not found.");
	} 
	return false;
}

function navDragMove(e) {
	getXY(e);
	if (panner.containerObject!=null) {
		panner.containerObject.style.left = (mouseX - navDragXoffset) + "px";
		panner.containerObject.style.top = (mouseY - navDragYoffset) + "px";
	} else {
		panner.divObject.style.left = (mouseX - navDragXoffset) + "px";
		panner.divObject.style.top = (mouseY - navDragYoffset) + "px";
	}
	return false;
}

function navDragStop(e) {
	document.onmousemove = panner.tempMoveFunction;
	document.onmouseup = null;
	navDragOn = false;
	return false;
}


function createNavControl(controlName,buddyName, slideIncrement) {
   NavControls[controlName] = new PannerObject(controlName, buddyName);
   panner = NavControls[controlName];
   NavControlNames[NavControlNames.length] = controlName;
   panner.setObjects();
   map = Maps[buddyName];
   if (map!=null) {
        if (isNav) slideIncrement *=2;
        map.mapMoveIncrement = slideIncrement; // found map... 
   } else
        mapMoveIncrement =  slideIncrement;  // map not rendered out yet... set global
}




// Zoom Control begin *****************************************************
var esriZoomLevels = new Array();
var esriZoomLevelNames = new Array();
var esriZoomLevel = null;
var _zoomLevel = 1;
var _zoomMap = "";
hasZoomLevel = true;
var _zoomInit = false;
var _zoomLevelID = "";


function zoomInit(imgTop, imgBottom, imgZoom, imgSelected, currentLevel, zoomMap, zoomLevelID) 
{
    esriZoomLevels[zoomLevelID] = new Object();
    esriZoomLevel = esriZoomLevels[zoomLevelID];
    _zoomLevel = currentLevel;
    _zoomMap = zoomMap;
    _zoomInit = true;
    _zoomLevelID = zoomLevelID;
    esriZoomLevel.topImage = imgTop;
    esriZoomLevel.bottomImage = imgBottom;
    esriZoomLevel.zoomImage = imgZoom;
    esriZoomLevel.selectedImage = imgSelected;
    esriZoomLevel.level = currentLevel;
    esriZoomLevel.map = zoomMap;
    esriZoomLevel.init = true;
    esriZoomLevel.zoomLevelID = zoomLevelID;   
    esriZoomLevelNames[esriZoomLevelNames.length] = zoomLevelID;      
}

function zoomToLevel(level, mapID) 
{
    if (getSessionLapse() < maximumLapseTime) {
        if (mapID==null) mapID = _zoomMap;
        map = Maps[mapID];
        if (map!=null) {
            if (level<0) level = 0;
            if (level>=map.totalLevels) level = map.totalLevels - 1;
            updateZoomLevelIcons(level, mapID);
            map.switchToLevel(level);
        }
    } else
        showLapseAlert();
}

function updateZoomLevelIcons(level, mapID) {
    if (esriZoomLevelNames.length>0) {
        var ezlName = ""; 
        for (var j=0;j<esriZoomLevelNames.length; j++) {
            ezlName = esriZoomLevelNames[j];
            if (esriZoomLevels[ezlName].map==mapID) {
                esriZoomLevel = esriZoomLevels[ezlName];
                if ( esriZoomLevel.init ) 
                {
                    esriZoomLevel.level = level;
                    for (var i=0;i<Maps[mapID].totalLevels;i++) {
                        var imgObj = document.images[esriZoomLevel.zoomLevelID+ "_z" + i];
                        if (imgObj!=null) {
                            if (i==level) 
                                imgObj.src = esriZoomLevel.selectedImage;
                            else
                                imgObj.src = esriZoomLevel.zoomImage;
                                
                        }
                    }
                }
            } 
        } 
   } 
}



// Zoom Control End *****************************************************		

