﻿var gMapBase = null;
var pView = null;
var tImgTrans = 60;//dean NH SWG
var fullLeft = 0;
var fullTop = 0;
var fullWidth = 0;
var fullHeight = 0;

function MapToRealPosX(dX) {return MapToRealDistX(dX) + fullLeft;}   //X coordination conversion,Map Unit(0~1) to Real Position Unit(map projection)
function MapToRealPosY(dY) {return MapToRealDistY(dY) + fullTop;}    //Y coordination conversion,Map Unit(0~1) to Real Position Unit(map projection)
function RealToMapPosX(dX) {return RealToMapDistX(dX - fullLeft);}   //X coordination conversion,Real Position Unit(map projection) to Map Unit(0~1)
function RealToMapPosY(dY) {return RealToMapDistY(dY - fullTop);}    //Y coordination conversion,Real Position Unit(map projection) to Map Unit(0~1)

function MapToRealDistX(dX) {return dX * fullWidth;}                 //X distance unit conversion,Map Unit(0~1) to Real Position Unit(map projection)
function MapToRealDistY(dY) {return dY * fullHeight;}                //Y distance unit conversion,Map Unit(0~1) to Real Position Unit(map projection)
function RealToMapDistX(dX) {return dX / fullWidth;}                 //X distance unit conversion,Real Position Unit(map projection) to Map Unit(0~1)
function RealToMapDistY(dY) {return dY / fullHeight;}                //Y distance unit conversion,Real Position Unit(map projection) to Map Unit(0~1)

function SetMapBound(pMapBase, dLeft, dTop, dRight, dBottom)         //Set Map  boundary
{                                                                    //pMapBase as Map Base Object;dLeft, dTop, dRight, dBottom as Real Position Unit(map projection)
	pMapBase.MoveMapTo(RealToMapPosX((dLeft + dRight)/2), RealToMapPosY((dTop + dBottom)/2));
	var sw = Math.abs(pMapBase.getClientWidth() / pMapBase.getImageWidth() / RealToMapDistX(dRight - dLeft));
	var sh = Math.abs(pMapBase.getClientHeight() / pMapBase.getImageHeight() / RealToMapDistY(dBottom - dTop));
	pMapBase.putMapLevel(Math.log(Math.min(sw,sh))/Math.log(2));
}

function MapPercentToMapPixel(pMapBase,dX,dY)            //Map coordination conversion,Unit(0~1) to Pixel Unit
{                                                        //pMapBase as MapBase Object;dX,dY as Map Unit(0~1);return MapPoint Object
   var MapPt  = pMapBase.FromMapPoint(dX,dY);
   return MapPt;
}
function MapPixelToMapPercent(pMapBase,dX,dY)            //Map coordination conversion,Pixel Unit to Unit(0~1)
{                                                        //pMapBase as MapBase Object;dX,dY as Map Unit(Pixel);return MapPoint Object
   var MapPt  = pMapBase.ToMapPoint(dX,dY);
   return MapPt;
}
/*  //081216 小O
function SetMapCenter(pMapBase,dX, dY, dScale)          //quickly position,dX and dy are Real Position Unit(map projection)
{
	pMapBase.MoveMapTo(RealToMapPosX(dX), RealToMapPosY(dY));
	pMapBase.putMapLevel(dScale);
	pMapBase.RefreshMap(true, true);
}*/
function MapMark(pMapBase, dX, dY, imgUrl, imgTip)    //Show Map Mark function,pMapBase as Map Base Object;dX ,dY as Real Position Unit(map projection),imgUrl as Image URL,imgTip as Image Tip Word
{
	var pNode = pMapBase.getHObject();
	var m_hObj = pNode.ownerDocument.createElement("img");
	pNode.appendChild(m_hObj);
	m_hObj.src = imgUrl;
	m_hObj.style.position = "absolute";
	m_hObj.title = imgTip;
	m_hObj.alt=imgTip;
	this.CtrlShow = function()
	{
		if (m_hObj.style.visibility=="hidden")
			m_hObj.style.visibility="visible";
		else
			m_hObj.style.visibility="hidden";
	}
	
	this.RebuildElement = function() 
	{
		var pt = gMapBase.FromMapPoint(RealToMapPosX(dX), RealToMapPosY(dY));
		m_hObj.style.left = pt.X;
		m_hObj.style.top = pt.Y;
	}
	this.UpdateElement = function(imgRatio)
	{this.RebuildElement();}
	this.RebuildElement();
}
function InitWnd()                                     //Map initial function
{	
	var hr = new XMLHttpRequest;

	hr.onreadystatechange = function() {
	    if (hr.readyState == 4 && hr.status == 200) {
	        var MapConfig = hr.responseXML;

	        var pServ = MapConfig.documentElement.getElementsByTagName("MapExtent")[0];
	        fullLeft = parseFloat(pServ.getElementsByTagName("Left")[0].firstChild.nodeValue);
	        fullTop = parseFloat(pServ.getElementsByTagName("Top")[0].firstChild.nodeValue);
	        fullWidth = parseFloat(pServ.getElementsByTagName("Right")[0].firstChild.nodeValue) - fullLeft;
	        fullHeight = parseFloat(pServ.getElementsByTagName("Bottom")[0].firstChild.nodeValue) - fullTop;

	        var pSz = MapConfig.documentElement.getElementsByTagName("ImageSize")[0];
	        var ImgWidth = parseInt(pSz.getElementsByTagName("Width")[0].firstChild.nodeValue);
	        var ImgHeight = parseInt(pSz.getElementsByTagName("Height")[0].firstChild.nodeValue);

	        var pMi = MapConfig.documentElement.getElementsByTagName("MapInitial")[0];
	        var maxLevel = parseInt(pMi.getElementsByTagName("MaxScaleLevel")[0].firstChild.nodeValue);

	        var tLayer = pMi.getElementsByTagName("ThematicLayer")[0];
	        var thematicLayerName = tLayer.getElementsByTagName("Name")[0].firstChild.nodeValue;
	        var tFields = tLayer.getElementsByTagName("Fields")[0].getElementsByTagName("Field");
	        var thematicLayerField = new Array;
	        var i;
	        for (i = 0; i < tFields.length; i++)
	            thematicLayerField.push(tFields[i].firstChild.nodeValue);

	        //地圖
	        gMapBase = new MapBase(oGlobal, 0, 0, "100%", "100%", ImgWidth, ImgHeight);

	        //鷹眼圖
	        pView = new Overview(gMapBase, 128, 128, 6, false, false);

	        gMapBase.putMapMaxLevel(maxLevel);  //081216 小O

	        //20080903韋銘加 把地圖移到公司附近
	        gMapBase.MoveMapTo(RealToMapPosX(CenterX), RealToMapPosY(CenterY)); //公司 121.5533333 25.05183333
	        gMapBase.putMapLevel(parseInt(CenterL));

	        gMapBase.RefreshMap(true, true);
	        ReadToZoomFish();

	        /*
	        pTools = new MapTools(oTools, 0, 0, 1);	
	        pTools.AddTool(gMapBase, new MapSliderAdmin, "Images/Slider.gif", "Scale bar");
	        pTools.AddTool(gMapBase, new MapMagniAdmin(2), "Images/Magnifier.gif", "Magnifier");
	        pTools.AddTool(gMapBase, new MapMove, "Images/Move.gif", "Pan");
	        pTools.AddTool(gMapBase, new MapZoom(0), "Images/ZoomIn.gif", "Zoom in");
	        pTools.AddTool(gMapBase, new MapZoom(1), "Images/ZoomOut.gif", "Zoom out");
	        pTools.AddTool(gMapBase, new MapFullExtent, "Images/FullExtent.gif", "Full extent");
	        pTools.AddTool(gMapBase, new MapZoomLast, "Images/ZoomLast.gif", "Last extent");
	        pTools.AddTool(gMapBase, new MapQuery(thematicLayerName, thematicLayerField), "Images/RecordQuery.gif", "Query");
	        pTools.AddTool(gMapBase, new MapSelectPoint(thematicLayerName), "Images/SelectPoint.gif", "Point select");
	        pTools.AddTool(gMapBase, new MapRectangle(thematicLayerName), "Images/SelectRect.gif", "Rectangle select");
	        pTools.AddTool(gMapBase, new MapLineString(thematicLayerName, false), "Images/SelectPolyline.gif", "Polyline select");
	        pTools.AddTool(gMapBase, new MapLineString(thematicLayerName, true), "Images/SelectPolygon.gif", "Polygon select");
	        pTools.AddTool(gMapBase, new MapMeasure, "Images/Measure.gif", "Measure");
	        pTools.AddTool(gMapBase, null, "Images/Buffer.gif", "Buffer");
	        pTools.AddTool(gMapBase, null, "Images/PrintMap.gif", "Print");
	        pTools.AddTool(gMapBase, null, "Images/MailMap.gif", "Mail");
	        */

	        gMapBase.SelectMapTool(new MapMove);   //081216 小O
	        _LayerManager = new LayerManager(gMapBase);

	        hl = new HttpLink();
	        hl.SetLinkLoss = SetLinkLoss2;

	        //city~~~~~~~~~~	
	        myCity = new City(WeatherLayerTD);
	        myCity.Location(5, 5);
	        myCity.GetCityName(CenterX, CenterY);

	        Drag.init(Drag0, HelpDiv);
	        Drag.init(Drag1, RoadDiv);
	        //Drag.init(Drag2,WeatherLayer);
	        Drag.init(Drag3, RoadShowLayer);

	        mLayerManager = new LayerManager(gMapBase); //dean NH 貼SWG
	        SwitchLyr = new AddActiveLayer(gMapBase); //dean NH 貼SWG
	        go();	        
	    }
	}
	hr.open("GET", "Config.xml", true);
	hr.send(null);
}



