﻿	
	//=================================鹰眼图工具类=============================================
	
	/**
     * 创建一个鹰眼图工具控件    
     */
	function KNavigateControl(type,isOpen)
    {                     
        this.isOpen=isOpen; 
        this.type=type;										//位置类型        
        this.left=KConfig.NavigateLeft;						//鹰眼图左上角X直角坐标
        this.top=KConfig.NavigateTop;						//鹰眼图左上角Y直角坐标
        this.right=KConfig.NavigateRight;					//鹰眼图右下角X直角坐标
        this.bottom=KConfig.NavigateBottom;					//鹰眼图右下角Y直角坐标        
        this.width=KConfig.NavigateWidth;					//鹰眼图宽
        this.height=KConfig.NavigateHeight;					//鹰眼图高      
        this.loaded = false;
        this.startPosition=[0,0];             
       
        
        //创建边界层
        this.borderObj = KBase.createDiv(1, null);
        this.borderObj.ID = "borderObjDiv";
        KBase.setSize(this.borderObj, [1, 1]);
        KBase.setUnSelectable(this.borderObj);
        KBase.getStyle(this.borderObj)["backgroundColor"] = "#C4CFFF";
        KBase.getStyle(this.borderObj)["border"] = "#0000ff solid 2px";
        KBase.getStyle(this.borderObj)["fontSize"] = "0px";
        KBase.setOpacity(this.borderObj, 0.5);
        
        
        //创建框选层
        this.zoomInObj = KBase.createDiv(1, null);
        this.zoomInObj.ID = "zoomInObjDIV";
        KBase.setSize(this.zoomInObj, [1, 1]);
        KBase.setUnSelectable(this.zoomInObj);        
        KBase.getStyle(this.zoomInObj)["backgroundColor"] = "#C4CFFF";
        KBase.getStyle(this.zoomInObj)["border"] = "#0000ff solid 1px";
        KBase.getStyle(this.zoomInObj)["fontSize"] = "0px";
        KBase.getStyle(this.zoomInObj)["visibility"] = "hidden";
        KBase.setOpacity(this.zoomInObj, 0.5);
        
        //创建容器层
        this.div = KBase.createDiv(1, null,500);        
        this.div.ID = "NavigateContainDiv";
        KBase.getStyle(this.div)["border"] = "#bbbbbb solid 2px";        
        KBase.setSize(this.div,[this.width+8,this.height+8]);
        
        
        
        //在地图图层下创建图片对象
        this.mapImg=new Image(this.width,this.height);
        this.mapImg.style.position= "absolute";        
        this.mapImg.useMap="";
        this.mapImg.border=0;        
        KBase.setUnSelectable(this.mapImg);
        this.mapImg.src=KConfig.NavigateMap;  
              
        this.div.appendChild(this.mapImg);        
        this.div.appendChild(this.borderObj);
        this.div.appendChild(this.zoomInObj);
        KEvent.addEventListener(this.div, "mousedown", this, this.onMouseDown);        
		
        
        //创建按钮
        this.buttonImg=new Image(14,14);        
        
        this.buttonImg.border=0;  
        this.buttonImg.style.position= "absolute"; 
        
        KBase.setCursorStyle(this.buttonImg, "hand");
        
        KEvent.addEventListener(this.buttonImg, "mousedown", KEvent.cancelBubble);         
        KEvent.addEventListener(this.buttonImg, "click", this, this.onBtnClick);
        
       
        
    }    
   
    
    /**
     * 初始化
     */
    var KNavigateControl_initialize = function(mapObject)
    {
        var controlObject = this;
        if (controlObject.Map && mapObject == controlObject.Map)
        {
            return;
        }
        controlObject.Map = mapObject;
        controlObject.loaded = true;
        
        controlObject.divPosition=[0,0];			//容器位置
        controlObject.btnPosition=[0,0];			//容器按钮位置
        controlObject.hiddenPosition=[0,0];			//容器隐藏位置
        
        controlObject.closeSrc=KConfig.ToolImagePath + "close" + controlObject.type + ".gif";
        controlObject.openSrc=KConfig.ToolImagePath + "open" + controlObject.type + ".gif";
        
        var mapSize=controlObject.Map.getViewSize();
        
        //不同位置参数计算
        if (controlObject.type==1)
        {
			controlObject.divPosition=[-4,-4];
			controlObject.btnPosition=[0,0];
			controlObject.hiddenPosition=[0-this.width-8,0-this.height-8];
        }
        else if (controlObject.type==2)
        {
			controlObject.divPosition=[mapSize[0]-this.width-4,-4];
			controlObject.btnPosition=[mapSize[0]-16,0];
			controlObject.hiddenPosition=[mapSize[0],0-this.height-8];
        }
        else if (controlObject.type==3)
        {
			controlObject.divPosition=[-4,mapSize[1]-this.height-4];
			controlObject.btnPosition=[0,mapSize[1]-16];
			controlObject.hiddenPosition=[0-this.width-8,mapSize[1]];
        }
        else 
        {
			controlObject.divPosition=[mapSize[0]-this.width-4,mapSize[1]-this.height-4];
			controlObject.btnPosition=[mapSize[0]-16,mapSize[1]-16];
			controlObject.hiddenPosition=[mapSize[0],mapSize[1]];
        }
        
        
        if (controlObject.isOpen)
        {
			controlObject.buttonImg.src=controlObject.closeSrc;
			KBase.setPosition(controlObject.div,controlObject.divPosition);
		}
		else
		{
			controlObject.buttonImg.src=controlObject.openSrc;
			KBase.setPosition(controlObject.div,controlObject.hiddenPosition);
		}
		
        //增加鹰眼图容器层
        controlObject.Map.container.appendChild(controlObject.div);                
        KBase.setPosition(controlObject.buttonImg,controlObject.btnPosition);   
             
        controlObject.mapChangeListener = KEvent.addListener(controlObject.Map, "mapload", controlObject, controlObject.reDraw);     
        controlObject.mapResizeListener = KEvent.addListener(controlObject.Map, "resize", controlObject, controlObject.onResize);
    }
    
     /**
     * 地图大小改变事件响应
     */
    var KNavigateControl_onResize=function(mapSize)
    {
		var controlObject = this;   
		        
        //不同位置参数计算
        if (controlObject.type==1)
        {
			controlObject.divPosition=[-4,-4];
			controlObject.btnPosition=[0,0];
			controlObject.hiddenPosition=[0-this.width-8,0-this.height-8];
        }
        else if (controlObject.type==2)
        {
			controlObject.divPosition=[mapSize[0]-this.width-4,-4];
			controlObject.btnPosition=[mapSize[0]-16,0];
			controlObject.hiddenPosition=[mapSize[0],0-this.height-8];
        }
        else if (controlObject.type==3)
        {
			controlObject.divPosition=[-4,mapSize[1]-this.height-4];
			controlObject.btnPosition=[0,mapSize[1]-16];
			controlObject.hiddenPosition=[0-this.width-8,mapSize[1]];
        }
        else 
        {
			controlObject.divPosition=[mapSize[0]-this.width-4,mapSize[1]-this.height-4];
			controlObject.btnPosition=[mapSize[0]-16,mapSize[1]-16];
			controlObject.hiddenPosition=[mapSize[0],mapSize[1]];
        }               
		
        if (controlObject.isOpen)
        {			 
			 KBase.setPosition(controlObject.div,controlObject.divPosition);			 
		}
        else
        {
			KBase.setPosition(controlObject.div,controlObject.hiddenPosition);			
		}             
                    
        KBase.setPosition(controlObject.buttonImg,controlObject.btnPosition);   
		
    }
    
    
    /**
	 * 地图鼠标按下事件
	 */
	var KNavigateControl_onMouseDown = function(x)
    {        
        KEvent.cancelBubble(x);         
        var controlObject = this; 
        KBase.setSize(controlObject.zoomInObj, [1,1]);
        KBase.getStyle(controlObject.borderObj)["visibility"] = "hidden";        
        controlObject.startPosition=KBase.getEventPosition(x, controlObject.div);             
        KBase.getStyle(controlObject.zoomInObj)["visibility"] = "visible";
        if (!controlObject.mouseMoveListener)
        {
            controlObject.mouseMoveListener = KEvent.addListener(controlObject.div, "mousemove", controlObject, controlObject.onMouseDrag);
        }
        if (!controlObject.mouseUpListener)
        {
            controlObject.mouseUpListener = KEvent.addListener(controlObject.div, "mouseup", controlObject, controlObject.onMouseUp);
        }        
    }
    
    /**
	 * 按钮点击事件
	 */
	var KNavigateControl_onBtnClick = function(x)
    {        
        KEvent.cancelBubble(x); 
        var controlObject = this; 
        if (controlObject.isOpen)
        {			 
			 KBase.setPosition(controlObject.div,controlObject.hiddenPosition);
			 controlObject.buttonImg.src=controlObject.openSrc;
		}
        else
        {
			KBase.setPosition(controlObject.div,controlObject.divPosition);
			controlObject.buttonImg.src=controlObject.closeSrc;
		}        
        controlObject.isOpen=!controlObject.isOpen;
        
    }
    
    
    /*
     * 地图鼠标拉动事件
	 */
    var KNavigateControl_onMouseDrag = function(x)
    {        
        KEvent.cancelBubble(x);        
        var controlObject = this;         		
        controlObject.endPosition=KBase.getEventPosition(x, controlObject.div);
        KBase.setPosition(controlObject.zoomInObj, [Math.min(controlObject.startPosition[0], controlObject.endPosition[0]), Math.min(controlObject.startPosition[1], controlObject.endPosition[1])]);
        KBase.setSize(controlObject.zoomInObj, [Math.abs(controlObject.startPosition[0] - controlObject.endPosition[0]),
                          Math.abs(controlObject.startPosition[1] - controlObject.endPosition[1])]);
    }

	/**
	 * 地图鼠标放开事件
	 */
    var KNavigateControl_onMouseUp = function(x)
    {        
        KEvent.cancelBubble(x); 
        var controlObject = this;         
        
        if (!controlObject.mouseMoveListener)
        {
            KEvent.removeListener(controlObject.mouseMoveListener);
        }
        if (!controlObject.mouseUpListener)
        {
            KEvent.removeListener(controlObject.mouseUpListener);
        }       
             
        KBase.getStyle(controlObject.zoomInObj)["visibility"] = "hidden";         
        //计算拉框的直角坐标
        var point=KBase.getEventPosition(x, controlObject.div);         
          
        var xLeft=Math.min(controlObject.startPosition[0],point[0])*(controlObject.right-controlObject.left)/controlObject.height+controlObject.left;
        var yTop=Math.min(controlObject.startPosition[1],point[1])*(controlObject.bottom-controlObject.top)/controlObject.width+controlObject.top;
        var xRight=Math.max(controlObject.startPosition[0],point[0])*(controlObject.right-controlObject.left)/controlObject.height+controlObject.left;
        var yBottom=Math.max(controlObject.startPosition[1],point[1])*(controlObject.bottom-controlObject.top)/controlObject.width+controlObject.top;
                     
        //根据直角坐标定位地图
        controlObject.Map.fitMap(xLeft,yTop,xRight,yBottom);      
        
    }
    
    
    
    
    
    /**
	 * 重新绘制边界
	 */	
    var KNavigateControl_reDraw = function()
    {
        
        var controlObject = this;
        var mapObject=controlObject.Map;
        var xLeft=(mapObject.mapLeft-controlObject.left)*controlObject.height/(controlObject.right-controlObject.left);
          
        var yTop=(mapObject.mapTop-controlObject.top)*controlObject.width/(controlObject.bottom-controlObject.top);         
        var xRight=(mapObject.mapRight-controlObject.left)*controlObject.height/(controlObject.right-controlObject.left);          
        var yBottom=(mapObject.mapBottom-controlObject.top)*controlObject.width/(controlObject.bottom-controlObject.top);        
        xLeft=Math.max(0,xLeft);
        yTop=Math.max(0,yTop);
        xRight=Math.min(controlObject.width,xRight);
        yBottom=Math.min(controlObject.height,yBottom);         
        
        KBase.setPosition(controlObject.borderObj,[xLeft, yTop]);
        KBase.setSize(controlObject.borderObj, [Math.abs(xRight - xLeft),Math.abs(yBottom - yTop)]);
        KBase.getStyle(controlObject.borderObj)["visibility"] = "visible";
    }
    
    
    
    
    /**
	 * 获取控件对象
	 */
    var KNavigateControl_getObject = function()
    {
        var controlObject = this;
        return controlObject.buttonImg;
    }
    
        
    /**
	 * 释放对象
	 */
    var KNavigateControl_depose = function()
    {
        var controlObject = this;        
        controlObject.loaded = false;
//	if (controlObject.div)
//        {                
//			controlObject.div.removeChild(controlObject.mapImg);
//			controlObject.div.removeChild(controlObject.borderObj);
//			controlObject.div.removeChild(controlObject.zoomInObj);	
//				
//			
//			KEvent.removeListener([controlObject.div,"mousedown",controlObject.onMouseDown]) ;
//			KEvent.removeListener([controlObject.buttonImg,"mousedown",KEvent.cancelBubble]) ;
//			KEvent.removeListener([controlObject.buttonImg,"click",controlObject.onBtnClick]) ;
//			
//			
//			
//			
//			if (controlObject.mouseMoveListener)
//			{
//				KEvent.removeListener(controlObject.mouseMoveListener);				
//			}
//			if (controlObject.mouseUpListener)
//			{				
//				KEvent.removeListener(controlObject.mouseUpListener);
//			}   
//			
//			controlObject.Map.container.removeChild(controlObject.div);
//			
//        }        
//        if (controlObject.mapChangeListener)
//        {
//			KEvent.removeListener(controlObject.mapChangeListener);
//			controlObject.mapChangeListener=null;
//        }        
//        if (controlObject.mapResizeListener)
//        {
//			KEvent.removeListener(controlObject.mapResizeListener);
//			controlObject.mapResizeListener=null;
//        }
//        
//       
//        KEvent.removeListener([controlObject.borderObj,"selectstart",KBase.falseFunction]);
//        KEvent.removeListener([controlObject.mapImg,"selectstart",KBase.falseFunction]);
//        KEvent.removeListener([controlObject.zoomInObj,"selectstart",KBase.falseFunction]);

		if(controlObject.Map.isLogout)
		{
			controlObject.mapImg = null;
			controlObject.borderObj = null;
			controlObject.zoomInObj = null;
			controlObject.div = null;
			controlObject.buttonImg = null;
			controlObject.Map = null;
			controlObject.loaded = null;
	        
			controlObject.divPosition=null;
			controlObject.btnPosition=null;
			controlObject.hiddenPosition=null;
			controlObject.type = null;
			controlObject.closeSrc=null;
			controlObject.openSrc=null;
			controlObject = null;
        }
    }
    
    

    KConfig.defineClass("KNavigateControl", KNavigateControl);   
    KConfig.defineFunction(KNavigateControl, "initialize", KNavigateControl_initialize);   
    KConfig.defineFunction(KNavigateControl, "getObject", KNavigateControl_getObject);
    KConfig.defineFunction(KNavigateControl, "depose", KNavigateControl_depose);
    
    
    KConfig.defineFunction(KNavigateControl, "reDraw", KNavigateControl_reDraw);
    KConfig.defineFunction(KNavigateControl, "onResize", KNavigateControl_onResize);
    KConfig.defineFunction(KNavigateControl, "onMouseDown", KNavigateControl_onMouseDown);
    KConfig.defineFunction(KNavigateControl, "onMouseDrag", KNavigateControl_onMouseDrag);
    KConfig.defineFunction(KNavigateControl, "onMouseUp", KNavigateControl_onMouseUp);
    KConfig.defineFunction(KNavigateControl, "onBtnClick", KNavigateControl_onBtnClick);