﻿	
	//=================================标准地图工具类=============================================
	
	/**
     * 创建一个标准地图工具控件    
     */
	function KStandMapControl(isShowZoom)
    {
        KBase.inherit(this, KBaseControl);
        
        this.showZoom = (isShowZoom == false) ? false : true;     
        
        this.zoomNodeImageSrc = KConfig.ToolImagePath + "levelScale.gif";
        this.loaded = false;
        //this.inited = false;
        this.div = KBase.createDiv(1, [10, 10]);
        this.div.ID= "StandMapControlDiv";
        KBase.setUnSelectable(this.div);
        this.levelNodes = new Array(0);
        //放大按钮
        this.btnZoomIn = new Image(20, 20);
        KStandMapControl_setControlImage(this.btnZoomIn);
        this.btnZoomIn.title = "放大";
        this.btnZoomIn.src = KConfig.ToolImagePath + "zoomin.gif";
        //缩小按钮
        this.btnZoomOut = new Image(20, 20);        
        KStandMapControl_setControlImage(this.btnZoomOut);
        this.btnZoomOut.title = "缩小";
        this.btnZoomOut.src = KConfig.ToolImagePath + "zoomout.gif";
        //全图按钮
        
        this.btnFitMap = new Image(20, 20);
        KStandMapControl_setControlImage(this.btnFitMap);
        this.btnFitMap.title="全图";
        this.btnFitMap.src = KConfig.ToolImagePath + "refresh.gif";
        //上移按钮
        this.btnUp = new Image(20, 20);
        KStandMapControl_setControlImage(this.btnUp);
        this.btnUp.title = "上移";
        this.btnUp.src = KConfig.ToolImagePath + "up.gif";
        //右移按钮
        this.btnRight = new Image(20, 20);
        KStandMapControl_setControlImage(this.btnRight);
        this.btnRight.title = "右移";
        this.btnRight.src = KConfig.ToolImagePath + "right.gif";
        
        //下移按钮
        this.btnDown = new Image(20, 20);
        KStandMapControl_setControlImage(this.btnDown);
        this.btnDown.title = "下移";
        this.btnDown.src = KConfig.ToolImagePath + "down.gif";
        //左移按钮
        this.btnLeft = new Image(20, 20);
        KStandMapControl_setControlImage(this.btnLeft);
        this.btnLeft.title = "左移";
        this.btnLeft.src = KConfig.ToolImagePath + "left.gif";
        //创建工具栏表格
        this.zoomObj = KBase.createElement("TABLE");
        KBase.getStyle(this.zoomObj)["backgroundColor"] = "transparent";
        KBase.setUnSelectable(this.zoomObj);
        this.zoomObj.border = 0;
        this.zoomObj.cellSpacing = 0;
        this.zoomObj.cellPadding = 1;
        //第一行
        var row = this.zoomObj.insertRow(this.zoomObj.rows.length);
        var col = row.insertCell(row.cells.length);
        col.innerHTML = "&nbsp";
        var col = row.insertCell(row.cells.length);
        col.appendChild(this.btnUp);
        var col = row.insertCell(row.cells.length);
        col.innerHTML = "&nbsp";
        //第二行
        var row = this.zoomObj.insertRow(this.zoomObj.rows.length);
        var col = row.insertCell(row.cells.length);
        col.appendChild(this.btnLeft);
        var col = row.insertCell(row.cells.length);
        col.appendChild(this.btnFitMap);
        var col = row.insertCell(row.cells.length);
        col.appendChild(this.btnRight);
        //第三行
        var row = this.zoomObj.insertRow(this.zoomObj.rows.length);
        var col = row.insertCell(row.cells.length);
        col.innerHTML = "&nbsp";
        var col = row.insertCell(row.cells.length);
        col.appendChild(this.btnDown);
        var col = row.insertCell(row.cells.length);
        col.innerHTML = "&nbsp";
        //第四行
        var row = this.zoomObj.insertRow(this.zoomObj.rows.length);
        var col = row.insertCell(row.cells.length);
        col.innerHTML = "&nbsp";
        var col = row.insertCell(row.cells.length);
        //创建拉杆表格
        var levelTable = KBase.createElement("TABLE");
        KBase.getStyle(levelTable)["backgroundColor"] = "transparent";
        KBase.setUnSelectable(levelTable);
        levelTable.border = 0;
        levelTable.cellPadding = 0;
        levelTable.cellSpacing = 0;
        var levelRow = levelTable.insertRow(0);
        var levelCol = levelRow.insertCell(0);
        levelCol.appendChild(this.btnZoomIn);
        //显示刻度
        if (this.showZoom)
        {
            this.zoomCursor = new Image(20, 11);
            KStandMapControl_setControlImage(this.zoomCursor, true);
            this.zoomCursor.src = KConfig.ToolImagePath + "leveldrag.gif";
            levelRow = levelTable.insertRow(1);
            levelCol = levelRow.insertCell(0);
            this.zoomObj.zoomDiv = KBase.createDiv(2);
            this.zoomObj.ID = "zoomDiv";
            KBase.setUnSelectable(this.zoomObj.zoomDiv);
            levelCol.appendChild(this.zoomObj.zoomDiv);
            this.cursor = KBase.createDiv(1, [0, 0]);
            this.cursor.ID = "cursorDiv";
            
            KBase.setUnSelectable(this.cursor);
            this.cursor.ondblclick = KEvent.cancelBubble;
            this.cursor.appendChild(this.zoomCursor);
            this.zoomObj.zoomTab = KBase.createElement("TABLE");
            KBase.getStyle(this.zoomObj.zoomTab)["backgroundColor"] = "transparent";
            KBase.setUnSelectable(this.zoomObj.zoomTab);
            this.zoomObj.zoomTab.border = 0;
            this.zoomObj.zoomTab.cellPadding = 0;
            this.zoomObj.zoomTab.cellSpacing = 0;
            this.zoomObj.zoomDiv.appendChild(this.cursor);
            this.zoomObj.zoomDiv.appendChild(this.zoomObj.zoomTab);
            KEvent.addEventListener(this.zoomObj.zoomTab, "click", this, this.onZoomTableClick);
            
        }
		levelRow = levelTable.insertRow(levelTable.rows.length);
        levelCol = levelRow.insertCell(0);
        levelCol.appendChild(this.btnZoomOut);
        
        this.levelTable = levelTable;
        
        col.appendChild(levelTable);        
        
        var col = row.insertCell(row.cells.length);
        col.innerHTML = "&nbsp";
        this.div.appendChild(this.zoomObj);
    }
    
    /**
     * 设置控件图片 
     * isListener 待整理
     */
    var KStandMapControl_setControlImage = function(imgObject, isListener)
    {
        KBase.setUnSelectable(imgObject);
        KEvent.addEventListener(imgObject, "dblclick", KEvent.cancelBubble);
        if (!isListener)
        {
            KEvent.addEventListener(imgObject, "mousedown", KEvent.cancelBubble);
        }
        KBase.setCursorStyle(imgObject, "hand");
    }
    
    /**
     * 初始化
     */
    var KStandMapControl_initialize = function(mapObject)
    {
        var controlObject = this;
        if (controlObject.Map && mapObject == controlObject.Map)
        {
            return;
        }
        controlObject.Map = mapObject;
        controlObject.loaded = true;
        
              
        
        //增加按钮点击响应        
        KEvent.addEventListener(this.btnZoomIn,"click",this, this.doZoomin); 
        KEvent.addEventListener(this.btnZoomOut,"click",this, this.doZoomout);
        KEvent.addEventListener(this.btnFitMap,"click",this, this.doFitmap);
        KEvent.addEventListener(this.btnUp,"click",this, this.doMoveup);
        KEvent.addEventListener(this.btnRight,"click",this, this.doMoveright);
        KEvent.addEventListener(this.btnDown,"click",this, this.doMovedown);
        KEvent.addEventListener(this.btnLeft,"click",this, this.doMoveleft);
        
        //debugger;
        //var levelCount=KConfig.MapMaxLevel-KConfig.MapMinLevel;
        //levelCount=parseInt((levelCount+1)/2+1);        
        
        var levelCount=KConfig.MapMaxLevel-KConfig.MapMinLevel;
        levelCount=parseInt(levelCount/KConfig.MoveScale/2 + 1);
        
        if (this.showZoom)
        {
            for (var i = 0;i <levelCount;i++)
            {
                this.levelNodes[i] = new Image(20, 15);
                KBase.setUnSelectable(this.levelNodes[i]);
                this.levelNodes[i].src = this.zoomNodeImageSrc;
                //this.levelNodes[i].style.verticalAlign = "auto"; 
                 this.levelNodes[i].title="缩放等级:" + (i+1);      
                       
               
                KEvent.addEventListener(this.levelNodes[i], "dblclick", KEvent.cancelBubble);
                KEvent.addEventListener(this.levelNodes[i], "mousedown", KEvent.cancelBubble);
               
               
                var row = this.zoomObj.zoomTab.insertRow(this.zoomObj.zoomTab.rows.length);
                var col = row.insertCell(0);
                col.appendChild(this.levelNodes[i]);
            }
           KEvent.addEventListener(this.cursor, "mousedown", this, this.onCursorMousedown);            
           KEvent.addListener(this.Map, "mapload", this, this.setCursor);
        }
        
        //alert(this.cursor.outerHTML);
    }
    
    /*
     * 缩放刻度点击事件
     */
    var KStandMapControl_onZoomTableClick = function(x)
    {
        var controlObject = this;
        var levelNodeObj = x.srcElement;
        if(levelNodeObj && levelNodeObj.tagName.toUpperCase() == "IMG" && levelNodeObj.title.indexOf("缩放等级")!=-1)
        {
			var level = levelNodeObj.title.replace("缩放等级:","");
			level = parseInt( level * KConfig.MoveScale*2 + KConfig.MapMinLevel -1);
			
			if(level < KConfig.MapMinLevel)level = KConfig.MapMinLevel;
			if(level > KConfig.MapMaxLevel)level = KConfig.MapMaxLevel;
			controlObject.Map.zoomTo(level);
        }
        
       //szx del 2007-12-12 改为通过缩放等级图片的title来判断要缩放到哪一级
       //var controlObject = this;
       //var w = KBase.getEventPosition(x, controlObject.zoomObj.zoomTab);
       //var level=parseInt((w[1]-0.1) / 7.5 + 1);
       //controlObject.Map.zoomTo(level);
    }
    
    /*
     * 缩放游标点击事件
     */
    var KStandMapControl_onCursorMousedown = function(x)
    {
        var controlObject = this;
        KEvent.cancelBubble(x);
        controlObject.cursorMouseUpListener = KEvent.addListener(document, "mouseup", controlObject, this.onCursorMouseup);
        controlObject.cursorMouseMoveListener = KEvent.addListener(document, "mousemove", controlObject, this.onCursorMousemove);
        controlObject.draggingPoint = parseInt(KBase.getStyle(controlObject.cursor)["top"]) - x.clientY;
        controlObject.enableDrag = true;
        controlObject.isDragging = true;
    }
    
    /*
     * 缩放游标移动事件
     */
    var KStandMapControl_onCursorMousemove = function(x)
    {
        KEvent.cancelBubble(x);
        if (this.enableDrag && this.isDragging)
        {
            this.enableDrag = true;
            position = this.draggingPoint + x.clientY;
            if (position > 0 && position < (((KConfig.MapMaxLevel-KConfig.MapMinLevel)/2)+0.3) * 15)
            {
                KBase.getStyle(this.cursor)["top"] = position + "px";                
            }
        }
    }
    /*
     * 缩放游标鼠标放开事件
     */
    var KStandMapControl_onCursorMouseup = function(x)
    {
        var controlObject = this;
        KEvent.removeListener(controlObject.cursorMouseMoveListener);
        KEvent.removeListener(controlObject.cursorMouseUpListener);
        var w = parseInt(KBase.getStyle(controlObject.cursor)["top"]);        
        var level=parseInt(w / 7.5)+KConfig.MapMinLevel;
        controlObject.Map.zoomTo(level);
        controlObject.enableDrag = false;
        controlObject.isDragging = false;
    }
    
    /**
	 * 获取控件对象
	 */
    var KStandMapControl_getObject = function()
    {
        var controlObject = this;
        return controlObject.div;
    }
    
    /**
	 * 设置游标位置
	 */
    var KStandMapControl_setCursor = function()
    {
        var controlObject = this;
        var level=controlObject.Map.level;
        if (level<KConfig.MapMinLevel)	level=KConfig.MapMinLevel;
        if (level>KConfig.MapMaxLevel)	level=KConfig.MapMaxLevel;			
        KBase.getStyle(controlObject.cursor)["top"] = (7.5 * (level-KConfig.MapMinLevel)) + "px";
    }
    
    /**
	 * 释放对象
	 */
    var KStandMapControl_depose = function()
    {        
        var controlObject = this;        
               
 
        if (controlObject.zoomObj.zoomTab)
        {
            KEvent.removeListener([controlObject.zoomObj.zoomTab,"click",controlObject.onZoomTableClick]); 
        }
        
       
        if (controlObject.btnZoomIn)
        {
            
            KEvent.removeListener([controlObject.btnZoomIn,"dblclick",KEvent.cancelBubble]);                  
            KEvent.removeListener([controlObject.btnZoomIn,"mousedown",KEvent.cancelBubble]);
            KEvent.removeListener([controlObject.btnZoomIn,"click",controlObject.doZoomin]);  
            
       }
        
        if (controlObject.btnZoomOut)
        {
            KEvent.removeListener([controlObject.btnZoomOut,"dblclick",KEvent.cancelBubble]);
            KEvent.removeListener([controlObject.btnZoomOut,"mousedown",KEvent.cancelBubble]);     
            KEvent.removeListener([controlObject.btnZoomOut,"click",controlObject.doZoomout]); 
            
        }
        
        if (controlObject.btnFitMap)
        {
            KEvent.removeListener([controlObject.btnFitMap,"dblclick",KEvent.cancelBubble]);
            KEvent.removeListener([controlObject.btnFitMap,"mousedown",KEvent.cancelBubble]);   
            KEvent.removeListener([controlObject.btnFitMap,"click",controlObject.doFitmap]);       
            
        }
        
        if (controlObject.btnUp)
        {
            KEvent.removeListener([controlObject.btnUp,"dblclick",KEvent.cancelBubble]);       
            KEvent.removeListener([controlObject.btnUp,"mousedown",KEvent.cancelBubble]);  
            KEvent.removeListener([controlObject.btnUp,"click",controlObject.doMoveup]);    
            
        }
        
        if (controlObject.btnRight)
        {
            KEvent.removeListener([controlObject.btnRight,"dblclick",KEvent.cancelBubble]);    
            KEvent.removeListener([controlObject.btnRight,"mousedown",KEvent.cancelBubble]);   
            KEvent.removeListener([controlObject.btnRight,"click",controlObject.doMoveright]);    
             
        }
        
        if (controlObject.btnDown)
        {
            KEvent.removeListener([controlObject.btnDown,"dblclick",KEvent.cancelBubble]);     
            KEvent.removeListener([controlObject.btnDown,"mousedown",KEvent.cancelBubble]);      
            KEvent.removeListener([controlObject.btnDown,"click",controlObject.doMovedown]);   
            
        }
        
        if (controlObject.btnLeft)
        {
            KEvent.removeListener([controlObject.btnLeft,"dblclick",KEvent.cancelBubble]);      
            KEvent.removeListener([controlObject.btnLeft,"mousedown",KEvent.cancelBubble]);
            KEvent.removeListener([controlObject.btnLeft,"click",controlObject.doMoveleft]);      
            
        }
        
        if (controlObject.zoomCursor)
        {
            KEvent.removeListener([controlObject.zoomCursor,"dblclick",KEvent.cancelBubble]);      
            KEvent.removeListener([controlObject.zoomCursor,"mousedown",KEvent.cancelBubble]);               
            
        }
        
        
        var levelCount=KConfig.MapMaxLevel-KConfig.MapMinLevel;
        levelCount=parseInt((levelCount+1)/2+1);        
        if (controlObject.showZoom)
        {
            
            
            if(controlObject.cursorMouseUpListener) KEvent.removeListener(controlObject.cursorMouseUpListener)  ;
            if(controlObject.cursorMouseMoveListener)KEvent.removeListener(controlObject.cursorMouseMoveListener)  ;
             
			if(controlObject.Map.isLogout)
			{
				for (var i=levelCount-1;i>=0;i--)
				{				
					controlObject.levelNodes[i] = null;
				}
				
				KEvent.removeListener([controlObject.cursor,"dblclick",KEvent.cancelBubble])  ;
				KEvent.removeListener([controlObject.cursor,"mousedown",controlObject.onCursorMousedown])  ;
				KEvent.removeListener([controlObject.Map,"mapload",controlObject.setCursor]) ;
            }
            
        }        
        
        if(controlObject.Map.isLogout)
        {
			KBase.removeDeepChildren(controlObject.div);
			controlObject.levelTable = null;
			controlObject.zoomObj.zoomTab = null;
			controlObject.zoomObj.zoomDiv = null;
			controlObject.btnZoomIn = null;
			controlObject.btnZoomOut = null;
			controlObject.btnFitMap = null;     
			controlObject.btnUp = null;  
			controlObject.btnRight = null;    
			controlObject.btnDown = null;
			controlObject.btnLeft = null;
	        
			controlObject.zoomObj = null;        
			controlObject.div = null;
			controlObject.Map = null;
			controlObject.cursor = null;            
			controlObject.levelNodes = null;
			controlObject.loaded = false;
			controlObject.showZoom = null;
			controlObject.zoomNodeImageSrc = null;
			controlObject.zoomCursor = null;
			controlObject.enableDrag = null;
			controlObject.isDragging = null;
			controlObject = null;
        }
        
       
    }
    
    /**
	 * 设置放大接钮图片
	 */
    var KStandMapControl_setZoomInImage = function(cp)
    {
        var controlObject = this;
        controlObject.btnZoomIn.src = cp;
    }
    
    /**
	 * 设置缩小接钮图片
	 */
    var KStandMapControl_setZoomOutImage = function(cp)
    {
        var controlObject = this;
        controlObject.btnZoomOut.src = cp;
    }
    
    /**
	 * 设置刻度图片
	 */
    var KStandMapControl_setZoomNodeImage = function(cp)
    {
        var controlObject = this;
        controlObject.zoomNodeImageSrc = cp;
        if (controlObject.loaded)
        {
            for (var f = 0;f < controlObject.levelNodes.length;f++)
            {
                controlObject.levelNodes[f].src = cp;
            }

        }
    }
    /**
	 * 设置拖动游标接钮图片
	 */
    var KStandMapControl_setCursorImage = function(cp)
    {
        var controlObject = this;
        controlObject.zoomCursor.src = cp;
    }
    /**
	 * 设置向上接钮图片
	 */
    var KStandMapControl_setControlUpImage = function(cp)
    {
        var controlObject = this;
        controlObject.btnUp.src = cp;
    }
    /**
	 * 设置向右接钮图片
	 */
    var KStandMapControl_setControlRightImage = function(cp)
    {
        var controlObject = this;
        controlObject.btnRight.src = cp;
    }
    /**
	 * 设置向下接钮图片
	 */
    var KStandMapControl_setControlDownImage = function(cp)
    {
        var controlObject = this;
        controlObject.btnDown.src = cp;
    }
    /**
	 * 设置向左接钮图片
	 */
    var KStandMapControl_setControlLeftImage = function(cp)
    {
        var controlObject = this;
        controlObject.btnLeft.src = cp;
    }
    /**
	 * 设置全图接钮图片
	 */
    var KStandMapControl_setFitMapImage = function(cp)
    {
        var controlObject = this;
        controlObject.btnFitMap.src = cp;
    }
    
    
    var KStandMapControl_doZoomin =  function(){		
		this.Map.zoomIn();		
    }
    
    var KStandMapControl_doZoomout =  function(){
		this.Map.zoomOut();
    }
    
	var KStandMapControl_doFitmap =  function(){
		this.Map.fitMap();
    }
    
    var KStandMapControl_doMoveup =  function(){		
        var size=this.Map.getViewSize();        
        var moveY=parseInt(parseInt(size[1])*KConfig.MoveScale);          
		this.Map.move(0,-1*moveY);
    }
    
    var KStandMapControl_doMoveright =  function(){		
        var size=this.Map.getViewSize();
        var moveX=parseInt(parseInt(size[0])*KConfig.MoveScale);          
		this.Map.move(moveX,0);
    }
    
    var KStandMapControl_doMovedown =  function(){		
        var size=this.Map.getViewSize();        
        var moveY=parseInt(parseInt(size[1])*KConfig.MoveScale);        
		this.Map.move(0,moveY);
    }
    
    var KStandMapControl_doMoveleft =  function(){		
        var size=this.Map.getViewSize();        
        var moveX=parseInt(parseInt(size[0])*KConfig.MoveScale);      
		this.Map.move(-1*moveX,0);
    }

    
    KConfig.defineClass("KStandMapControl", KStandMapControl);    


    KConfig.defineStaticFunction(KStandMapControl, "setControlImage", KStandMapControl_setControlImage);
    KConfig.defineFunction(KStandMapControl, "initialize", KStandMapControl_initialize);
    KConfig.defineFunction(KStandMapControl, "onZoomTableClick", KStandMapControl_onZoomTableClick);
    KConfig.defineFunction(KStandMapControl, "onCursorMousedown", KStandMapControl_onCursorMousedown);
    KConfig.defineFunction(KStandMapControl, "onCursorMousemove", KStandMapControl_onCursorMousemove);
    KConfig.defineFunction(KStandMapControl, "onCursorMouseup", KStandMapControl_onCursorMouseup);
   
    KConfig.defineFunction(KStandMapControl, "getObject", KStandMapControl_getObject);
    KConfig.defineFunction(KStandMapControl, "setCursor", KStandMapControl_setCursor);
    KConfig.defineFunction(KStandMapControl, "depose", KStandMapControl_depose);
    KConfig.defineFunction(KStandMapControl, "setZoomInImage", KStandMapControl_setZoomInImage);
    KConfig.defineFunction(KStandMapControl, "setZoomOutImage", KStandMapControl_setZoomOutImage);
    KConfig.defineFunction(KStandMapControl, "setZoomNodeImage", KStandMapControl_setZoomNodeImage);
    KConfig.defineFunction(KStandMapControl, "setCursorImage", KStandMapControl_setCursorImage);
    KConfig.defineFunction(KStandMapControl, "setControlUpImage", KStandMapControl_setControlUpImage);
    KConfig.defineFunction(KStandMapControl, "setControlRightImage", KStandMapControl_setControlRightImage);
    KConfig.defineFunction(KStandMapControl, "setControlDownImage", KStandMapControl_setControlDownImage);
    KConfig.defineFunction(KStandMapControl, "setControlLeftImage", KStandMapControl_setControlLeftImage);
    KConfig.defineFunction(KStandMapControl, "setFitMapImage", KStandMapControl_setFitMapImage);
    
    KConfig.defineFunction(KStandMapControl, "doZoomin", KStandMapControl_doZoomin);
    KConfig.defineFunction(KStandMapControl, "doZoomout", KStandMapControl_doZoomout);
    KConfig.defineFunction(KStandMapControl, "doFitmap", KStandMapControl_doFitmap);
    KConfig.defineFunction(KStandMapControl, "doMoveup", KStandMapControl_doMoveup);
    KConfig.defineFunction(KStandMapControl, "doMoveright", KStandMapControl_doMoveright);
    KConfig.defineFunction(KStandMapControl, "doMovedown", KStandMapControl_doMovedown);
    KConfig.defineFunction(KStandMapControl, "doMoveleft", KStandMapControl_doMoveleft);
    