﻿


//定义名字空间
var MapSystem={};






//读取用户自定义参数
MapSystem.loadFromDom=function(container, option){

	var i;
	//获取dl标签中的所有dt标签
	var o=container.getChildren("dl")[0].getChildren("dt");
	var length = o.length;
	var isLoadSuccess;
	
	
	
	var isAutoResizeWidth=false;
	var isAutoResizeHeight=false;
	var center={Mx:718848, My:1390592};
	var level=1;
	var atlasArray=[MAP3D_Shenzhen_3D_MAP];

	for(i=0; i<length; i++){		
		switch(o[i].innerHTML.trim()){
			case MapSystem.lang.config.mapName:
				//this.container.title=$E(o).next().innerHTML.trim();
				break;
			case MapSystem.lang.config.mapContainerSize: 
				try{
					//解析用户设定
					var viewSize=o[i].getNext().innerHTML.trim().split("*");
					
					//判断宽度值是否含有%符号
					if(viewSize[0].indexOf("%")!=-1){
						viewSize[0]=window.getSize().x*(viewSize[0].split("%")[0]/100);
						isAutoResizeWidth=true;
					}
					
					//判断高度值是否含有%符号
					if(viewSize[1].indexOf("%")!=-1){
						viewSize[1]=window.getSize().y*(viewSize[1].split("%")[0]/100);
						isAutoResizeHeight=true;
					}
					//alert(viewSize[0].toInt())
					//设定容器的宽度和高度
					container.setStyles({
						"width":viewSize[0].toInt()+"px",
						"height":viewSize[1].toInt()+"px"
					});
				}catch(error_1){alert(MapSystem.lang.load.onGetContainerSizeError);}
				break;
			
			case MapSystem.lang.config.mapCenter:
				try{
					//解析中心点的设定
					var center=o[i].getNext().innerHTML.trim().split(",");
					
					//坐标转换成整数
					center.Mx=center[0].toInt();
					center.My=center[1].toInt();
					level=center[2].toInt();
					
					//载入中心点成功标志
					isLoadSuccess=true;
				}catch(error_2){
					//载入中心点失败
					isLoadSuccess=false;
					//弹出出错提示
					alert(MapSystem.lang.load.onGetCenterError);
				}
				break;
				
			case "地图比例尺":
				try{
					//var scale=$E(o).next().innerHTML.trim();
					//this.scale=scale;
				}catch(error_3){alert("地图比例尺设置有问题！");}
				break;
				
			case MapSystem.lang.config.mapShowModel:
				try{
					//me.setShowMode(eval(o[i].getNext().innerHTML.trim()));
				}catch(error_4){alert(MapSystem.lang.load.onGetShowModelError);}
				break;

			default: break;
		}
	}
	
	//清空所有子元素
	Jos.emptyNode(container);


	if(option){
		atlasArray=option.atlas||[MAP3D_Shenzhen_3D_MAP];
		center=option.center||center;
		level=option.level||level;
	}
	
	var mapEngineOption={
		//定义鼠标样式包
		"cursor": MapSystem.cursorA,
		
		//定义默认语言包
		"text": MapSystem.lang
	};
	
	option=$merge(mapEngineOption, option);

	//实例化地图引擎类
	window.map = new MapSystem.Engine(container, option);
	
	//输出版本号
	//document.title="新地图引擎 版本:"+ map.version;
	//document.title="查查吧教育地图 网罗深圳培训教育机构的专业地图!";
	
	//设定地图中心点
	map.setCenter(center, level, atlasArray);

	if(atlasArray[0].eagleEyeMap){
		
		/*
		if(map.getAtlas()[0].hotSpot){
			map.enableHotSpot();
		}
		map.enableKeyboardHandler();
	
		map.enablePlaceShower();
		
		map.enablePlaceLabel();
		
		map.enableLocationSign();
		
		map.enableAdBoard();	
	
		map.addControler(new MapSystem.EagleEyeMapControler({"center": center, "level": level, "atlas": [atlasArray[0].eagleEyeMap]}));
		*/
		
	}else{
		
	}
	//map.addOverlay(new MapSystem.Marker("c1"));
	
	//map.addOverlay(new MapSystem.PlaceLabel(718888, 1392222, "Kinvix", "http://www.a.com"));
	//map.locateTo(718888, 1392222, "Kinvix", "http://www.a.com");
	
	
	

	/*
	map.addControler(new MapSystem.MapTypeControler(), {container: map.controlers["EagleEyeMapControler"].controlerContainer});
	map.addControler(new MapSystem.ZoomControler());
	*/
	
	//map.removeControler(c1);

	//判断是否允许自动适应窗口容器尺寸
	if(isAutoResizeWidth||isAutoResizeHeight){
	
		//定义一个重设容器大小的函数
		var resizeContainer=function(){
			
			//通过此值来协调onresize事件的异步特性为同步方式
			if(map.isToSetContainerSize){
				
				//翻转开关标志
				map.isToSetContainerSize=false;
				
				//获取当前视图的中心点位置
				var oldCenter=map.getCenter();
				
				var width,height;
				
				//判断x轴的宽度值是否需要自适应
				if(isAutoResizeWidth){
					width=window.getSize().x;
				}else{
					//不需要自适应的话，则保持原大小
					width=container.getStyle("width").toInt();
				}
				
				//判断y轴的高度值是否需要自适应
				if(isAutoResizeHeight){
					height=window.getSize().y;
				}else{
					//不需要自适应的话，则保持原大小
					height=container.getStyle("height").toInt();
				}
				
				//调用地图引擎的设置容器大小方法setContainerSize();
				map.setContainerSize(width, height);
				
				//将原来的中心点移动过来
				//alert(oldCenter.Px)
				map.setViewCenter(oldCenter);
			}
		}
		
		//绑定到窗口改变事件中
		window.addEvent("resize", resizeContainer);
	}
	/*
	var indicatePlaceLabelJson={
		id:["GPSLocate"],
		pid:[],
		name:["Kinvix ^_^"],
		type:["company"],
		showType:["iconText"],
		isshop:["2"],
		x:[689536],
		y:[1375360],
		shopUrl:["http://www.kdv.cn"]
	};
	map.showIndicatePlaceLabel(indicatePlaceLabelJson);
	*/
	
	//返回DOM中是否有定义好地图的默认中心点
	return isLoadSuccess;

};






//==============================================
//定制信息
//==============================================


//定义主机
var host,hotspotHost;
var s;


//document.domain="www.chachaba.com";
host="http://www.chachaba.com/image/";
s="_";

hotspotHost="http://www.chachaba.com/image/";




//定义鹰眼地图,鹰眼图必须先于主图定义
var MAP3D_Shenzhen_EagleEyeMap={
	id: "mapEagleEyeMapLayer",
	name: "MAP3D_Shenzhen_EagleEyeMap",
	imagePath: host + "1/",
	styleType: 4,
	//缩略比率，此为鹰眼图的特有属性
	reducedRate: 16,
	scale: [50,100,500,1200],
	level: [1,2,3,4],
	sliceSize: 256,
	sizeUnit: "px",
	imageType: "gif",
	defaultOpacity: 100
};

//定义地图集一，每个地图引擎可以有多个地图集，而且同一个地图集可以同事被页面中的多个地图引擎同时使用。
var MAP3D_Shenzhen_3D_MAP={
	//地图的id
	id: "map3DMapLayer",
	//地图的名称
	name: "MAP3D_Shenzhen_3D_MAP",
	//指定其鹰眼图的变量名,鹰眼图必须事前定义好！！！
	eagleEyeMap: MAP3D_Shenzhen_EagleEyeMap,
	//地图的路径
	imagePath: host + "1/",
	//地图所属的类型
	styleType: 3,
	
	hotSpot: {
		//热区的路径
		filePath: hotspotHost+ "js/map/1/",
		//热区寄存对象
		area: {},
		//热区切片级别
		sliceSize: 256,
		//热区所针对的地图级别
		level: 3
	},
	//比例尺
	scale: [50,100,500,1200],
	//缩放级别
	level: [1,2,3,4],
	//地图切片尺寸
	sliceSize: 256,
	//地图切片单位
	sizeUnit: "px",
	//地图图片格式
	imageType: "jpg",
	//地图显示的不透明度
	defaultOpacity: 100,
	
	//地图默认坐标和缩放级别
	defaultCoordinate: [128137980,128136390,500],
	//地图正北的角度值
	directionNorth: 360.0000
};



//定义地图集二
var MAP3D_Shenzhen_2D_MAP={
	id: "map2DMapLayer",
	name: "MAP3D_Shenzhen_2D_MAP",
	//指定其鹰眼图的变量名,鹰眼图必须事前定义好！！！
	eagleEyeMap: MAP3D_Shenzhen_EagleEyeMap,
	//地图的路径
	imagePath: host + "1/",
	//地图所属的类型
	styleType: 2,
	
	hotSpot: null,
	//比例尺
	scale: [50,100,500,1200],
	//缩放级别
	level: [1,2,3,4],
	//地图切片尺寸
	sliceSize: 256,
	//地图切片单位
	sizeUnit: "px",
	//地图图片格式
	imageType: "jpg",
	//地图显示的不透明度
	defaultOpacity: 100,
	
	//地图默认坐标和缩放级别
	defaultCoordinate: [128137980,128136390,500],
	//地图正北的角度值
	directionNorth: 360.0000
};

//半透明的路名地图定义
var MAP3D_Shenzhen_ROAD={
	id:"map2DRoadLayer",
	name:"MAP3D_Shenzhen_ROAD",
	//指定其鹰眼图的变量名,鹰眼图必须事前定义好！！！
	eagleEyeMap: MAP3D_Shenzhen_EagleEyeMap,
	//地图的路径
	imagePath: host + "1/",
	//地图所属的类型
	styleType: 1,
	
	hotSpot: null,
	//比例尺
	scale: [50,100,500,1200],
	//缩放级别
	level: [1,2,3,4],
	//地图切片尺寸
	sliceSize: 256,
	//地图切片单位
	sizeUnit: "px",
	//地图图片格式
	imageType: "png",
	//地图显示的不透明度
	defaultOpacity: 100,
	
	onLoadErrorImage: "/js/blank.gif",
	
	//地图默认坐标和缩放级别
	defaultCoordinate: [128137980,128136390,500],
	//地图正北的角度值
	directionNorth: 360.0000
};





//定义鼠标样式
MapSystem.cursorB={
	onMap:"default",
	onMapMoving:"default"
};
//定义鼠标样式
MapSystem.cursorA={
	onMapDragable:"url(/style/1.0/mouse/openHand.cur), default",
	onMapDragging:"url(/style/1.0/mouse/closedHand.cur), default",
	
	onMapZoomIn:"url(/style/1.0/mouse/zoomIn.cur), default",
	onMapZoomOut:"url(/style/1.0/mouse/zoomOut.cur), default",
	
	onDefault:"default"
};

//定义语言包
MapSystem.lang={
	name:"zh-CN",
	config:{
		mapName:						"地图名称",
		mapContainerSize:				"显示大小",
		mapCenter:						"地图中心点位置",
		mapShowModel:					"图片效果"
	
	},
	load:{
		onGetCenterError: 				"地图显示位置或放大级别设置有问题！",
		onGetContainerSizeError: 		"显示大小设置有问题！",
		onGetShowModelError: 			"图片显示效果设置有问题！",
		onLoadMapImageError:			"<p>很抱歉，在这一缩放级别的地图上未找到此区域。</p><p>请缩小地图，扩大视野范围。</p>"
	
	},
	mapMarker:{
		center: 						"地图中心点"
	},
	menu:{
		menu1:"",
		menu2:""
	},
	message:{
		windowStatus: "完毕",
		m2:""
	},
	about:"Kinvix@Gmail.com, ^_^"
};





















MapSystem.addDomEvent1=function(captureTarget, eventType, handler){
	var oldHandler;
	var newHandler;

	
	//转换成完整的事件描述字符串
	//eventType=("on"+eventType);
	
	//判断对象是否含有$Events对象
	if(!captureTarget.$Events){
		captureTarget.$Events={};
	}
	
	//判断对象的$Events对象是否含有eventType描述的事件类型
	if(captureTarget.$Events[eventType]){
		//若已经存在事件函数，则合并在一起
		oldHandler=captureTarget.$Events[eventType];
		newHandler=function(event){
			oldHandler(event);
			handler(event);
		}
		captureTarget.$Events[eventType]=newHandler;
		
	}else{
		//若没有则新建
		captureTarget.$Events[eventType]=handler;
	}
};

//触发函数的方法
MapSystem.trigger1=function(captureTarget, eventType, event){
	//eventType="on"+eventType;
	if(captureTarget.$Events && captureTarget.$Events[eventType]){
		captureTarget.$Events[eventType](event);
	}
};


















MapSystem.addDomEvent=function(captureTarget, eventType, handler){
	var handlers;
	var length;
	var handlerIndex;
	var i;
	
	//转换成完整的事件描述字符串
	eventType=("on"+eventType);
	
	//判断对象是否含有$Events对象
	if(!captureTarget.$Events){
		captureTarget.$Events={};
	}
	
	//判断对象的$Events对象是否含有eventType描述的事件类型
	if(!captureTarget.$Events[eventType]){
		//若没有则新建
		captureTarget.$Events[eventType]=[];
	}

	handlers=captureTarget.$Events[eventType];
	length=handlers.length;
	handlerIndex=-1;

	//通过循环，判断对象的handlers数组是否已经含有要添加的handler
	for(i=0;i<length;i++){
		if(handlers[i]==handler){
			isHandlerExist=i;
			
			break;
		}		
	}
	//如果没有找到，则加入此handler
	if(handlerIndex==-1){
		handlers.push(handler);
		//alert(handlers[handlers.length-1])
	}

};


MapSystem.trigger=function(captureTarget, eventType, event){
	eventType="on"+eventType;
	
	if(captureTarget.$Events && captureTarget.$Events[eventType]){
		var handlers=captureTarget.$Events[eventType];
		var length=handlers.length;
		var i;
		
		//通过循环，执行handlers数组所包含的所有函数function
		for(i=0;i<length;i++){
			/*
			if(typeof captureTarget.$Events[eventType][i]=="function"){
				captureTarget.$Events[eventType][i](event);
			}
			*/
			//事件的触发方法，可含event参数
			
			handlers[i](event);
		}
	}else{
		//alert("还没有定义: "+eventType+" 事件！！！");	
	}
};



//按照对象和事件处理函数来移除事件处理函数
MapSystem.removeDomEvent=function(captureTarget, eventType, handler){
	
	if(captureTarget.$Events){
		var i;
		var j;
		var Events=captureTarget.$Events;
		eventType="on"+eventType;
		
		//通过循环，判断对象的handlers数组是否已经含有要添加的handler

		var length=Events[eventType].length;
		
		for(j=0; j<length; j++){
			//alert(Events[eventType][j]);
			if(Events[eventType][j]==handler){
				
				Events[eventType].splice(j, 1);
				//alert(Events[eventType]);
				break;
			}	
		}

	}
	
	
};




MapSystem.addMapEvent=MapSystem.addDomEvent;

MapSystem.removeMapEvent=MapSystem.removeDomEvent;

























