var gMapBase = null;

var fullLeft = 0;
var fullTop = 0;
var fullWidth = 0;
var fullHeight = 0;
var myMapLevel;

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;
}
/*
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);

			//eye 
			gMapBase = new MapBase(oGlobal, 0, 0, "100%", "100%", ImgWidth, ImgHeight,0);
			gEye = new BEyeView(gMapBase,ImgWidth, ImgHeight,150,150,4,true);
			//eye
			
			//eye mark
			//gMapBase = new MapBase(oGlobal, 0, 0, "100%", "100%", ImgWidth, ImgHeight);
			//eye mark
			
			gMapBase.putMapMaxLevel(maxLevel);
			gMapBase.RefreshMap(true, true);
			
			//eye
			gEye.MapTo(gMapBase.getCenterX(),gMapBase.getCenterY());
   			gEye.SetCuboidSize(gMapBase.ToMapPoint(0,0),gMapBase.ToMapPoint(gMapBase.getClientWidth(),gMapBase.getClientHeight()),true);
			//eye
			
			/*
			pTools = new MapTools(oTools, 0, 0, 1);	
			pTools.AddTool(gMapBase, new MapSliderAdmin, "Images/Slider.gif", "縮放工具");
			pTools.AddTool(gMapBase, new MapMagniAdmin(2), "Images/Magnifier.gif", "放大鏡");
			pTools.AddTool(gMapBase, new MapMove, "Images/Move.gif", "平移");
			pTools.AddTool(gMapBase, new MapZoom(0), "Images/ZoomIn.gif", "放大");
			pTools.AddTool(gMapBase, new MapZoom(1), "Images/ZoomOut.gif", "縮小");
			pTools.AddTool(gMapBase, new MapFullExtent, "Images/FullExtent.gif", "全景");
			pTools.AddTool(gMapBase, new MapZoomLast, "Images/ZoomLast.gif", "回上一畫面");
			pTools.AddTool(gMapBase, new MapQuery(thematicLayerName, thematicLayerField), "Images/RecordQuery.gif", "查詢");
			pTools.AddTool(gMapBase, new MapSelectPoint(thematicLayerName), "Images/SelectPoint.gif", "點");
			pTools.AddTool(gMapBase, new MapRectangle(thematicLayerName), "Images/SelectRect.gif", "矩型");
			pTools.AddTool(gMapBase, new MapLineString(thematicLayerName, false), "Images/SelectPolyline.gif", "線");
			pTools.AddTool(gMapBase, new MapLineString(thematicLayerName, true), "Images/SelectPolygon.gif", "面");
			pTools.AddTool(gMapBase, new MapMeasure, "Images/Measure.gif", "測量");
			pTools.AddTool(gMapBase, null, "Images/Buffer.gif", "環域");
			pTools.AddTool(gMapBase, null, "Images/PrintMap.gif", "列印");
			pTools.AddTool(gMapBase, null, "Images/MailMap.gif", "郵寄");
			*/
			
			gMapBase.SelectMapTool(new MapMove);
			_LayerManager = new LayerManager(gMapBase); 
			
				 hl = new HttpLink();	
hl.SetLinkLoss = SetLinkLoss2;
 GetTraffic('');
//AddSearchList();AddSelectEvent();
		
		//city~~~~~~~~~~	
			myCity = new City(WeatherLayerTD);
			myCity.Location(5,5);
			myCity.GetCityName(MapToRealPosX(0.5) ,MapToRealPosY(0.5));
		//layer 縮放	
			myMapLevel = new MapLevel(ZoomLayer,10,15,15);
	//myMapTool = new MapTool(100,100);
	
	Drag.init(Drag0,LeftLayer);
//Drag.init(Drag1,ZoomLayer);
Drag.init(Drag2,WeatherLayer);
Drag.init(Drag3,DisHelpLayer);
Drag.init(Drag4,LegendLayer);
		}
	}
	hr.open("GET", "Config.xml", true);
	hr.send(null);
	
	CollectGarbage();
}


// 小彬彬亂亂加~~~~~~~~





