﻿// JavaScript
// Jfp 08-12-09
// Init

var vM = null, vMe = null,vEyeZoomBar = null, _vMTop = 0;
var _isFullScreen = false;
var _srcexitBut = null;
var _isBeginScale = false,_isBeginPloy = false, _isBeginMark = false, _isBeginPane = false;
var _bodyWidth = fnGetWindowWidth(), _bodyHeight = fnGetWindowHeight();
var _zoomPer = 1/2, _zoomPerE = 1/32;
var centerPoint = {x:19721, y:8366};
var gisFmt = "default";
var _MarkLayer = null;
var _mapAreaLayer = null;

function fnLoadInit(initFun, vMTop){
	if(typeof initFun == "function") this.initFun = initFun;
    if(typeof vMTop != 'undefined') _vMTop = vMTop;
	if(typeof vEdushiMap =='undefined' || typeof veyeEdushiMap=='undefined' ||
					typeof vEdushiMap.Body.NewMapLayer !='function' ||
					typeof veyeEdushiMap.Body.NewMapLayer !='function' ){
		setTimeout("fnLoadInit()",50);
		return;
	}

    vM = vEdushiMap;
    vM.ViewPlots(false);
    vM.Body.flgContextMenu = false;
    vMe = veyeEdushiMap;
    
	var div = $To($C("div"), document.body);
	div.id = "version";
	div.className = "copyright";
	div.innerHTML = "<div style='opacity:;filter:;'>无锡数字城管系列软件&nbsp;技术支持:<a href='http://www.3dwuxi.com' target='blank' class='white'>三维无锡</a><br>地图审图号:苏S(2009)011号</div>";
	
	div = $To($C("div"), document.body);
	div.id = "mapGisDiv";
	div.className = "mapGis";
	div.innerHTML = "<div id='mapGis' style='opacity:;filter:;'>X:" + centerPoint.x + "&nbsp;&nbsp;Y:" + centerPoint.y + "<br>" + getJW(centerPoint.x, centerPoint.y) + "</div>";
	vM.mapGis = $("mapGis");
    
	window.onresize = function(){
		_bodyWidth = fnGetWindowWidth();
		_bodyHeight = fnGetWindowHeight();
		document.body.style.Height = _bodyHeight + 'px';
		$('EdushiMap').style.Width = _bodyWidth + 'px';
		$('EdushiMap').style.Height = _bodyHeight - _vMTop + 'px';
		vM.MapHeight(_bodyHeight - _vMTop);
		vM.MapWidth(_bodyWidth);
		if(_srcexitBut && _srcexitBut.style.display != "none") {
		    _srcexitBut.style.left = (_bodyWidth - _srcexitBut.offsetWidth - 5) + "px";
		    $('Eye').style.top = (_vMTop + 36) + "px";
		} else $('Eye').style.top = (_vMTop + 5) + "px";
		$('Eye').style.left = _bodyWidth - ($('EyeHid').className=='EyeHid' ? ($('EyeMapEx').className=='EyeExpand' ? 229 : 537) : 39) + 'px';
		$("version").style.left = (_bodyWidth - $("version").offsetWidth - 5) + "px";
		$("version").style.top = (_bodyHeight - $("version").offsetHeight - 5) + "px";
		$("mapGisDiv").style.top = (_bodyHeight - $("mapGisDiv").offsetHeight - 5) + "px";
		refMapArea();
	};
    setTimeout('window.onresize();', 100);
	
	vEyeZoomBar = new fnZoomBar();
	vEyeZoomBar.Init();
	
	vM.onMapMouseMove = function (event){
	    if(!vM)return;
	    var x = vM.PointerX(),y = vM.PointerY();
	    vM.mapGis.innerHTML = "X:" + x + "&nbsp;&nbsp;Y:" + y + "<br>" + getJW(x, y);
	}
	
    vM.onPaneEnd = function (x1, y1, x2, y2, flg){
        if(flg == 0){
           fnShowPaneSearchDlg(x1, y1, x2, y2);
        }        
    }
    
    vM.onMapZoomChange = function(zoom) {
        _zoomPer = vM.Property.ZoomPer[vM.Zoom()];
		if($('MapSilder'))
		    $('MapSilder').style.top = (50+21 * vM.Zoom()) + 'px';
		vMe.FlatZoom(vM.Zoom());
        if(_isBeginScale)
            fnReDrawScale();
        if(_isBeginPloy)
            fnReDrawPloy();
        refMapArea();
    }
    
    vMe.onMapZoomChange = function() {
        _zoomPerE = vMe.Property.ZoomPer[vM.Zoom()];
        refMapArea();
    }
    
	vMe.onMapMoveEnd = function(x,y,flg){
		if(flg==0){vM.MoveTo(x,y,true);}
	}
	
	vM.onMapMove = function(x,y,flg) {
	    refMapArea();
	}
	
	vMe.onEntityDragEnd = function(entity) {
	    if(entity == "mapAreaDiv") {
	        var mapAreaDiv = vMe.getEntityInfo("mapAreaDiv");
            vMe.MoveTo(mapAreaDiv.X, mapAreaDiv.Y, true);
	    }
	}
	
	vM.onMapMoveEnd = function(x,y,flg){
		if(flg==0){vMe.MoveTo(x,y,true);}
	}
  
    if(typeof(this.initFun) == "function") this.initFun();
    
    appendLink(vM.Body, "/js/dialog.css");
    appendLink(vM.Body, "/js/dialog.js");
}

//刷新大地图在小地图上的区域范围
function refMapArea() {
    var mapWidth = _bodyWidth / _zoomPer;
    var mapHeight = _bodyHeight / _zoomPer;
    var x = vM.CenterX();
    var y = vM.CenterY();
    var winEWidth = mapWidth * _zoomPerE;
    var winEHeight = mapHeight * _zoomPerE;
    if(!_mapAreaLayer) {
        _mapAreaLayer = vMe.NewMapLayer('mapAreaLayer', 10000);
        _mapAreaLayer.div = vMe.$C("div");
        _mapAreaLayer.div.id = "mapAreaDiv";
        _mapAreaLayer.div.style.background = "url('/images/center.gif') no-repeat center center ";
        _mapAreaLayer.div.innerHTML = "<div style='border:1px solid #000000;width:100%;height:100%;background-color:#68D5F4;cursor:move;filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=20,finishOpacity=100);opacity: 0.20;'></div>"
        vMe.appendEntity(_mapAreaLayer.div, _mapAreaLayer, false, x, y, winEWidth, winEHeight, winEWidth / 2, winEHeight / 2, true);
    }
    _mapAreaLayer.div.style.width = winEWidth + "px";
    _mapAreaLayer.div.style.height = winEHeight + "px";
    if(navigator.B != 'IE') {
        _mapAreaLayer.div.childNodes[0].style.width = winEWidth - 2 + "px";
        _mapAreaLayer.div.childNodes[0].style.height = winEHeight - 2 + "px";
    }
    var entity = vMe.getEntityInfo("mapAreaDiv");
    entity.exX = winEWidth / 2;
    entity.exY = winEHeight / 2;
    vMe.moveEntity("mapAreaDiv", x, y);
}

function getJW(mapX, mapY) {
    var gis = mapToGis(mapX, mapY);
    return "纬度:" + gisConvert(gis.w) + "N&nbsp;&nbsp;经度:" +  gisConvert(gis.j) + "E";
}

function mapToGis(x, y) {
    var xJ = 0.000002186986962562;
    var xW = 0.00000186134514748;
    var yJ = 0.000003641167826862;
    var yW = -0.000003102722061843;
    var r = {};

    
    r.j = x * xJ + y * yJ + 120.2215712512;
    r.w = x * xW + y * yW + 31.56848112478;
    return r;
}

function gisToMap(j, w) {
    var xj = 228757.7023682;
    var xw = 268457.7988242;
    var xc = -35976415.02247;

    var yj = 137233.7282206;
    var yw = -161244.6728975;
    var yc = -11408204.83558;

    var r= {};

    r.x = Math.round(xj * j + xw * w + xc);
    r.y = Math.round(yj * j + yw * w + yc);
    return r;
}

//经纬度数格式互换
function gisConvert(data){
    var r;
    if(!isNaN(data)) {
        var d,f,m,t;
        d = Math.floor(data);
        t = (data - d) * 60;
        f = Math.floor(t);
        t = (t - f) * 60;
        m = t.toString();
        r = d + "°" + f + "'" + m.substring(0,m.indexOf(".") + 3) + "\"";
    }else {
        var a = data.replace(/[°'" ]+/g, "|").split("|");
        r = parseFloat(a[0]) + parseFloat(a[1]) / 60 + parseFloat(a[2]) / 3600;
    }
    return r;
}

//计算距离
function getDistance(x1, y1, x2, y2) {
    var jL = 94826.59;
    var wL = 110749.12;
    
    var gis1 = mapToGis(x1, y1), gis2 = mapToGis(x2, y2);
    var cJ = Math.abs(gis2.j - gis1.j) * jL;
    var cW = Math.abs(gis2.w - gis1.w) * wL;
    
    return Math.sqrt(cJ * cJ + cW * cW);
}

//计算面积
function getArea(pointArr) {
    if(pointArr.length < 3) return 0;
    var jL = 94826.59;
    var wL = 110749.12;
    var gis0 = mapToGis(pointArr[0][0], pointArr[0][1]), gis1, gis2;
    var cx1, cy1, cy2, cy2;
    var area = 0;
    
    for(var i=1; i<pointArr.length - 1; i++) {
        gis1 = mapToGis(pointArr[i][0], pointArr[i][1]);
        gis2 = mapToGis(pointArr[i + 1][0], pointArr[i + 1][1]);
        cx1 = (gis1.j - gis0.j) * jL;
        cy1 = (gis1.w - gis0.w) * wL;
        cx2 = (gis2.j - gis1.j) * jL;
        cy2 = (gis2.w - gis1.w) * wL;
        area += cx1 * cy2 - cx2 * cy1;
        //area += (cx2 - cx1) * (cy1 + cy2);
        //return (x2-x1)*(y1+y2)/2.0;
//        cx1 = (gis1.j - gis0.j) * jL;
//        cy1 = (gis0.w - gis1.w) * wL;
//        cx2 = (gis2.j - gis0.j) * jL;
//        cy2 = (gis0.w - gis2.w) * wL;
//        area += (cx2 - cx1) * (cy1 + cy2);
        
    }
//    gis1 = mapToGis(pointArr[i][0], pointArr[i][1]);
//    gis2 = mapToGis(pointArr[i + 1][0], pointArr[i + 1][1]);
//    cx1 = (gis1.j - gis0.j) * jL;
//    cy1 = -(gis1.w - gis0.w) * wL;
//    cx2 = (gis2.j - gis1.j) * jL;
//    cy2 = -(gis2.w - gis1.w) * wL;
//    area += (cx2 - cx1) * (cy1 + cy2);
    
    return Math.abs(area / 2);
}

function hidAds() {
	var mapIfm = $("EdushiMap").childNodes[0];
	mapIfm.flagN = 0;
	mapIfm.idArr = ['eCityMapLayer003','eCityMapLayer004','eCityMapLayer005'];
	mapIfm.doc = mapIfm.contentWindow.document;
	mapIfm.$ = function(id) {return this.doc.getElementById(id)};
	var interval;
	var hidAd = function() {
	    var layer;
	    for(var i = 0; i < this.idArr.length; i++){
	        layer = this.$(this.idArr[i]);
	        if(this.$(this.idArr[i]) && layer.style.display != "none"){
	            layer.style.display = "none";
	            layer.parentNode.removeChild(layer);
	            this.flagN ++;
	        }
	    }
	    if(this.flagN >= 3) {
	        clearInterval(interval);
	        with(this) {
	            $ = doc = idArr = flagN = null;
	        }
	    }
	}.bind(mapIfm);
    interval = setInterval(hidAd, 100);
}
