_package("bjmap.main");

bjmap.main.poi=function(){
	$this=this;
	/**
	 * POI初始化区域
	 */
	var outmaxlength="注意！输入字符过长，应小于100";//超出限制后提示的文本
	var specialchar="注意！包含特殊字符将无法进行查询";
	//绑定地图搜索
	var btnMapSearch=DCI.get("btnMapSearch");
	DCI.event.bindDom(btnMapSearch,"click",btnProcess,this,[1]);
	//绑定周边搜索
	var btnNearSearch=DCI.get("btnNearSearch");
	DCI.event.bindDom(btnNearSearch,"click",btnProcess,this,[2]);
	var isNull=function(e){
		var isnull=true;		//默认是传递进来的是空值
		var value=e.value;
		var tip=e.title;
		if(value){
			if(value!=tip&&value!=outmaxlength&&value!=specialchar){
				isnull=false;
			}
		}
		return isnull;
	}
	function btnProcess(event,n){
		if(n==1){	//n代表poi的功能
			var sv=DCI.get("searchvalue");
			if(isNull(sv)){
				return;
			}
			this.search(sv.value);
		}else if(n==2){
			var cn=DCI.get("cenname");
			var nn=DCI.get("nearsearchname");
			if(isNull(cn)||isNull(nn)){
				return;	
			}
			this.near(cn.value,nn.value);
		}
	}
	
	/**
	 * 私有属性定义区域
	 */
	var poiname;
	var cenname;
	var nearsname;
	var page;
	var searchtype;
	var range=1000;
	var flag;
	var xmlTags=["name","address","type","x","y","tel"];
	var query=new DCI.Service.POI(1);
	var $this=this;
	var norp;
	var pointx;
	var pointy;
	var lonlat;
	var ispoint=false;
	
	
	/**
	 * 公开方法定义区域
	 */
	this.search=function(keyword,t,point){

		//切换顶部查询模块
		module.changeModule("search");
		ispoint=false;
		searchtype=t||searchtype;
		poiname=keyword;
		page=new Page();
		flag=1;
		if(point){
			doSearch(point);
			return;
		}
		doSearch();
	}
	this.near=function(cn,nn,r){
		//切换顶部查询模块
		module.changeModule("near");
		ispoint=false;
		if(cn&&nn){
			cenname=cn;
			nearsname=nn;
			range=r||range;
			page=new Page();
			flag=2;
			norp=1;
			doSearch();
		}
	}
	
	
	this.nearByPoint=function(ll,nn,r){
		if(typeof(ll)=="string"){
			ll=new DLonLat(ll);			
		}
		//切换顶部查询模块
		module.changeModule("near");
		//设置文本框的值
		var b1=DCI.get("cenname");	
		var b2=DCI.get("nearsearchname");
		b2.setAttribute("value",nn);
		b1.style.color="#000";
		b2.style.color="#000";
		
		if(ll){
			if(ll.ClassName=="DCI.Pojo.POI"){
				lonlat=new DLonLat(ll.x,ll.y);
				pointx=ll.x||116.2948855;
				pointy=ll.y||39.9230625;
				cenname=ll.name;
			}else{
				lonlat=ll;
				pointx=lonlat.lon||116.2948855;
				pointy=lonlat.lat||39.9230625;
				cenname="中心点";
			}
			b1.setAttribute("value",cenname);
			nearsname=nn;
			range=r||range;
			page=new Page();
			flag=2;
			norp=2;
			ispoint=true;
			doSearch();
		}
	}
	
	function doSearch(point){
		var result_list=$("#result_list");result_list.empty();
		var result_title=$("#result_title");result_title.empty();
		var rp=DCI.get("result_page");rp.style.display="block";
		var title_div=$("<div class='result_list_title'></div>");result_title.append(title_div);
		if(point){
				var p={};
				var arr=new Array();
				arr.push(point);
				p.pois=arr;
				p.total=1;
				p.count=1;
				process(p);
				return;
		}
		var batch=page.getCurPage();
		if(flag==1){
	
			//设置文本框的值
			var searchvalue=DCI.get("searchvalue");
			searchvalue.setAttribute("value",poiname);
			searchvalue.style.color="#000";
			
			title_div.append("<span class='result_title_search'>地图搜索:</span><span class='result_title_text'>"+substr(poiname,10)+"</span>");
			var wh={
				searchName:poiname,
				pageNum:batch,
				srctype:"BUS:5%2BPOI",
				searchType:searchtype
			};
			query.getByName(wh,process,xmlTags);
		}else{
			
			//设置文本框的值
			var b1=DCI.get("cenname");	
			var b2=DCI.get("nearsearchname");
			b1.setAttribute("value",cenname);
			b2.setAttribute("value",nearsname);
			b1.style.color="#000";
			b2.style.color="#000";
		
			title_div.append("<span class='result_title_around'>在<span class='result_title_around_cenname'>"+substr(cenname,12)+"</span>附近搜索<span class='result_title_around_keyword'>"+substr(nearsname,12)+"</span></span><span>范围</span>");
  			var aSelect=document.createElement("select");
  			aSelect.options[0] = new Option('500米','500');
  			aSelect.options[1] = new Option('1公里','1000');
			aSelect.options[2] = new Option('2公里','2000');
  			aSelect.options[3] = new Option('5公里','5000');
  			aSelect.options[4] = new Option('10公里','10000');
  			if(range=="500"){
				aSelect.options[0].selected=true;
  			}else if(range=="1000"){
  				aSelect.options[1].selected=true;
  			}else if(range=="2000"){
				aSelect.options[2].selected=true;
  			}else if(range=="5000"){
  				aSelect.options[3].selected=true;
  			}else if(range=="10000"){
  				aSelect.options[4].selected=true;
  			}
			DCI.event.bindDom(aSelect,"change",function(){				
				range=this.value;
				page=new Page();
				doSearch();				
			},aSelect);
  			title_div.append($(aSelect));
  			if(norp==1){
  				var wh={
					cenName:cenname,
					srctype:"BUS:5%2BPOI",
					searchName:nearsname,
					range:range,
					pageNum:batch
				};
	  			query.getByCenName(wh,process,xmlTags);
  			}else{
  				var wh={
					x:pointx,
					y:pointy,
					srctype:"BUS:5%2BPOI",
					searchName:nearsname,
					range:range,
					pageNum:batch
				};
	  			query.getByPoint(wh,process,xmlTags);
  			}
		}
	}
	
	//定义热门分类
     var pop_tree=[
     	{text:'餐饮服务',items:[
     		{text:'火锅'},{text:'烧烤'},{text:'中餐'},{text:'西餐'},{text:'冷饮'},{text:'咖啡馆'},{text:'酒吧'},{text:'宾馆'},{text:'饭店'}
     	]},
     	{text:'生活便利',items:[
     		{text:'银行'},{text:'ATM'},{text:'邮局'},{text:'药店'},{text:'诊所'},{text:'医院'},{text:'超市'},{text:'商场'},{text:'公交车站'}
     	]},
     	{text:'娱乐健身',items:[
     		{text:'KTV'},{text:'歌舞厅'},{text:'影剧院'},{text:'度假村'},{text:'健身场所'},{text:'体育场馆'},{text:'球类场馆'},{text:'游泳馆'}
     	]},
     	{text:'汽车服务',items:[
     		{text:'加油站'},{text:'停车场'},{text:'修理厂'}
     	]}
     ]; 
     function substr(str,len){
		if(str.length>len){
			return str.substr(0,len)+"...";
		}
		return str;
	}
	/**
	 * 处理poi xml 数据
	 */
	function process(poi,data){
		map.clearOverlays();
		var cenpoi=poi.cenpoi;
		if(cenpoi&&flag==2){
			//添加范围和中心点渲染
			if(!ispoint){
				cenname=cenpoi.name;
			}
			lonlat=new DLonLat(cenpoi.x,cenpoi.y);
		 	var circle=new DCircle(lonlat.toString(),range,{color:"#000",weight:1,dashstyle:"dashdot",opacity:0.3,fillColor:"#037B03",fillOpacity:0.2});
		 	map.addOverlay(circle);
//		 	var circle1=new DCircle(lonlat.toString(),10,{color:"#000",weight:1,dashstyle:"dashdot",opacity:0.3,fillColor:"#037B03",fillOpacity:0.2});
//		 	map.addOverlay(circle1);
			var right_cen=new DIcon(lonlat,{style:{cursor:"default"},image:"images/main/around.png",width:20,height:20,left:-10,top:-10});
			var right_cen_title=new DTitle(lonlat,cenname,{style:{cursor:"default"},offsety:-10,fontPosition:8,fontColor:"red",borderColor:"red"});
			map.addOverlay(right_cen);
			map.addOverlay(right_cen_title);
		}
		//设置分页数量	
		var tt=poi.total;
		var ct=poi.count;
		var pois=poi.pois;
		if(!page.isCal){
			page.setTotalrows(ct);
		}
		
		//获取元素
		var rl=DCI.get("result_list");rl.innerHTML="";
		var result_page=DCI.get("result_page");result_page.innerHTML="";
		
		
		if(pois.length<=0){//判断是否是0条记录
			var no_result=$("<div id='poi_null_result'><div class='nearNowfounddiv'>未找到相关搜索结果！</div><div class='poi_null_descriptioin'>" +
					"<div class='pnd_icon'></div><div>您可以尝试搜索类似的关键字:</div><div class='pnd_keywords'></div></div></div>");
			$(rl).append(no_result);
		
			//添加类别
	     	$.each(pop_tree,function(i,iitem){
	     		var items=iitem.items;
	     		var itext=iitem.text;
	     		var igroup=$("<div class='right_near_sort_t'>"+itext+"</div><div class='right_near_sort_c'></div>");
	     		$.each(items,function(j,jitem){
	     			var jtext=jitem.text;
	     			var ja=$("<a href='#'>"+jtext+"</a>");
	     			$(igroup[1]).append(ja);
	     			ja.bind("click",function(){
	     				if(flag==1){
	     					poiname=ja.html();
	     					doSearch();
	     				}else{
	     					nearsname=ja.html();
	     					doSearch();
	     				}
	     			});
	     		});
	     		no_result.find(".pnd_keywords").append(igroup);
	     	});
			return;
		}else{
			$(rl).append($("<div class='result_poi_count'><span>共"+tt+"条信息</span></div>"));
		}
		
		
		//收集坐标，缩放到所有poi的最小矩形时使用
		window.min_lonlats="";
		
		DCI.each(pois,function(poi,i){
			var poi_row=$this.createPoirow(poi,i);
			rl.appendChild(poi_row);
		});	
		
		//截取并缩放
		if(min_lonlats){
			var ls=min_lonlats.split(",");
			if(ls.length==3){
				var icenter=new DLonLat(ls[1],ls[2]);
				map.setCenter(icenter,3);
			}
			min_lonlats=min_lonlats.substr(1);
			var b=DLonLatBounds.minBox(min_lonlats);
			var level=map.getBoundsZoomLevel(b);
			map.setCenter(b.getCenter(),level);
		}
			
		//示例分页html元素和事件
		var result_page=DCI.get("result_page");
	  	result_page.innerHTML="";
	  	if(page.getCurPage()==1){
	  		var aA=document.createElement('a');
			aA.innerHTML="上一页";
			aA.href="#";
			aA.style.color="#747474";
			aA.style.letterSpacing='0px';
	  	}else{
	  		var aA=document.createElement('a');
			aA.innerHTML="<font color='black'>上一页</font>";
			aA.href="#";
			aA.style.letterSpacing='0px';
			DCI.event.bindDom(aA,"click",$this.pre);
	  	}
		result_page.appendChild(aA);
		//分页页码算法
		if(page.getPagesNum()<=page.pagesize){
			page.viewpage=page.getPagesNum()-1;
		}else{
			page.viewpage=8;
			if(page.getCurPage()>=6&&page.getCurPage()<=page.getPagesNum()-5){
				page.startpage=page.getCurPage()-4;
			}else if(page.getCurPage()>page.getPagesNum()-5){
				page.startpage=page.getPagesNum()-8;
			}else if(page.getCurPage()<6){
				page.startpage=1;
			}	
		}
		for(var j=page.startpage;j<=(page.viewpage+page.startpage);j++){
			if(j==page.getCurPage()){
				var aA=document.createElement('a');
				aA.innerHTML="["+"<font color='red'>"+j+"</font>"+"]";
				aA.href="javascript:void(0)";
			}else{
				var aA=document.createElement('a');
				aA.innerHTML="<font color='red'>"+j+"</font>";
				aA.href="javascript:void(0)";
			}
			DCI.event.bindDom(aA,"click",
				function(e,num){
					this.go(num);
				},$this,[j]
			);
			result_page.appendChild(aA);
		}
		if(page.getCurPage()==page.getPagesNum()){
			var aA=document.createElement('a');
			aA.innerHTML="下一页";
			aA.href="javascript:void(0)";
			aA.style.color="#747474";
			aA.style.letterSpacing='0px';
		}else{
			var aA=document.createElement('a');
			aA.innerHTML="<font color='black'>下一页</font>";
			aA.href="javascript:void(0)";
			aA.style.letterSpacing='0px';
			DCI.event.bindDom(aA,"click",$this.next);
		}
		result_page.appendChild(aA);
	
	}
	
	this.createPoirow=function(poi,i){
		var name=poi.name;
		var address=poi.address||"暂无";
		var pp_address=address;
		var pp_name=name;
		var dl=new DLonLat(poi.x,poi.y);	//经纬度坐标对象
		var phone=poi.tel||"暂无";
		if(name.length>15){
			name=name.substr(0,18);
			pp_name=name.substr(0,13)+"...";
		}
		if(address.length>17){
			address=address.substr(0,20);
			pp_address=address.substr(0,17);
		}
		
		//创建一行poi详情
		if(i+1>9){
			var pl_width=4;
		}else{
			var pl_width=5;
		}
		var poi_row=document.createElement("div");poi_row.className="poi_row";
		var pw_info=document.createElement("div");pw_info.className="pw_info";
		var pw_icon=document.createElement("div");pw_icon.className="pw_icon";
		poi_row.appendChild(pw_info);
		poi_row.appendChild(pw_icon);
		//rl.appendChild(poi_row);	//添加到列表中
		
		//图标
		var pwc_img=document.createElement("div");pwc_img.className="pwc_img";pwc_img.innerHTML=i+1;
		pw_icon.appendChild(pwc_img);

		//标题(名称、详情)
		var pwi_title=document.createElement("div");pwi_title.className="pwi_title";
		var pwit_name=document.createElement("span");pwit_name.className="pwit_name";pwit_name.innerHTML=name;pwit_name.title=poi.name;
		var pwit_details=document.createElement("span");pwit_details.className="pwit_details";pwit_details.innerHTML="详情";
		pwi_title.appendChild(pwit_name);
//			pwi_title.appendChild(pwit_details);
		pw_info.appendChild(pwi_title);
		//地址
		var pwi_address=document.createElement("div");pwi_address.className="pwi_address";pwi_address.innerHTML="<span class='poi_row_info_title'>地址:</span>";
		var pwia_address=document.createElement("span");pwia_address.className="pwia_address";pwia_address.innerHTML=address;pwia_address.title=poi.address;
		pwi_address.appendChild(pwia_address);
		pw_info.appendChild(pwi_address);
		//电话
		var pwi_phone=document.createElement("div");pwi_phone.className="pwi_phone";pwi_phone.innerHTML="<span class='poi_row_info_title'>电话:</span>";
		var pwip_phone=document.createElement("span");pwip_phone.className="pwip_phone";pwip_phone.innerHTML=phone;
		pwi_phone.appendChild(pwip_phone);
		pw_info.appendChild(pwi_phone);
		//功能(从这里出发、到这里来、周边搜索、纠错)
		var pwi_fn=document.createElement("div");pwi_fn.className="pwi_fn";
		var pwif_around=document.createElement("span");pwif_around.className="pwif_around";pwif_around.innerHTML="周边搜索";
		var pwif_from=document.createElement("span");pwif_from.className="pwif_from";pwif_from.innerHTML="从这里出发";
		var pwif_to=document.createElement("span");pwif_to.className="pwif_to";pwif_to.innerHTML="到这里";
		var pwif_fix=document.createElement("span");pwif_fix.className="pwif_fix";pwif_fix.innerHTML="纠错";
		pwi_fn.appendChild(pwif_around);
		pwi_fn.appendChild(pwif_from);
		
		var pwif_h=document.createElement("span");pwif_h.className="pwif_h";pwif_h.innerHTML="或";
		pwi_fn.appendChild(pwif_h);
		
		pwi_fn.appendChild(pwif_to);
//			pwi_fn.appendChild(pwif_fix);
		pw_info.appendChild(pwi_fn);
		
		
		//叠加泡泡
		var di=new DIcon(dl);	
		map.addOverlay(di);	//叠加到地图		
		//图标对象
		min_lonlats+=","+dl.toString();		//记录坐标，以在此基础上缩放。
		var die=di.getElement();die.className="poi_dicon";
		var ne=document.createElement("div");ne.className="poi_dicon_number"; ne.innerHTML=i+1;			
		die.appendChild(ne);	
		if(i+1>=10){ne.style.marginLeft=-8;}else{ne.style.marginLeft=-4;}	//数字实在DIcon对象上的二次扩展，所以数字位置需要计算一下
		
		
		/*组织泡泡内容和标题*/
		//----内容
		var pp_div=document.createElement("div");pp_div.className="pp_div";
		//地址
		var ppd_address=document.createElement("div");ppd_address.className="ppd_address";ppd_address.innerHTML="<span class='ppd_content_title'>地址:</span>";
		var ppda_address=document.createElement("span");ppda_address.className="ppda_address";ppda_address.innerHTML=pp_address;ppda_address.title=poi.address;
		ppd_address.appendChild(ppda_address);
		pp_div.appendChild(ppd_address);
		//电话
		var ppd_phone=document.createElement("div");ppd_phone.className="ppd_phone";ppd_phone.innerHTML="<span class='ppd_content_title'>电话:</span>";
		var ppdp_phone=document.createElement("span");ppdp_phone.className="ppdp_phone";ppdp_phone.innerHTML=phone;
		ppd_phone.appendChild(ppdp_phone);
		pp_div.appendChild(ppd_phone);
		//功能(从这里出发、到这里来、周边搜索、纠错)
		var ppd_fn=document.createElement("div");ppd_fn.className="ppd_fn";
		var ppdf_around=document.createElement("span");ppdf_around.className="ppdf_around";ppdf_around.innerHTML="周边搜索";
		var ppdf_from=document.createElement("span");ppdf_from.className="ppdf_from";ppdf_from.innerHTML="从这里出发";
		var ppdf_to=document.createElement("span");ppdf_to.className="ppdf_to";ppdf_to.innerHTML="到这里";
//			var ppdf_fix=document.createElement("span");ppdf_fix.className="ppdf_fix";ppdf_fix.innerHTML="纠错";
		ppd_fn.appendChild(ppdf_around);
		ppd_fn.appendChild(ppdf_from);
		
		var ppdf_h=document.createElement("span");ppdf_h.className="ppdf_h";ppdf_h.innerHTML="或";
		ppd_fn.appendChild(ppdf_h);
		
		ppd_fn.appendChild(ppdf_to);
//			ppd_fn.appendChild(ppdf_fix);
		
		pp_div.appendChild(ppd_fn);
		//----标题
		var pp_title="<span class='nav_pp_title' title='"+poi.name+"'><span class='pp_title_num'>"+(i+1)+".</span><span class='pp_title_name'>"+pp_name+"</span></span>";
		
		var dp=new DPopup(dl,pp_title,pp_div,{color:"red",titleType:"html",flash:true,height:80,offsety:-25});
		
		map.addOverlay(dp);
		
		
		/* 定义小的功能，但某个时间出发时，整合这些小组件 */
		function poiRowOver(){	//高亮显示poi信息的行
			DCI.addClass(poi_row,"poi_row_hover");
		}
		function poiRowOut(){	//去除高亮显示
			DCI.removeClass(poi_row,"poi_row_hover");
		}
		function iconzIndex(){	//切换poi的图标层叠顺序到最顶层
			if(window.poi.currentIcon){
				window.poi.currentIcon.style.zIndex=1;
			}
			die.style.zIndex=100;
			window.poi.currentIcon=die;
		}
		function popup(){		//弹出泡泡
			if(window.poi.pre_dp&&window.poi.pre_dp!=dp){
				window.poi.pre_dp.hide();
			}
			if(!dp.isShow)
				dp.show();
			else
				dp.hide();
			window.poi.pre_dp=dp;				
		}
		function to(){			//到这里来
			nav.poi(1,null,poi);
		}
		function from(){		//从这里出发
			nav.poi(1,poi,null);
		}
		function near(event){
			right.showNear(poi);
			DCI.event.stop(event);
			return false;
		}
		
		//列表poi信息的划过事件绑定
		DCI.event.bindDom(poi_row,"mouseover",function(){
			poiRowOver();
			iconzIndex();		
		});
		DCI.event.bindDom(poi_row,"mouseout",function(){
			poiRowOut();		
		});			
		//叠加的POI图标切换顺序
		DCI.event.bindDom(die,"mouseover",function(){
			poiRowOver();
			iconzIndex();
		});
		DCI.event.bindDom(die,"mouseout",function(){
			poiRowOut();
		});			
		//气泡弹出			
		DCI.event.bindDom(die,"click",function(){
			popup();
		});
		DCI.event.bindDom(poi_row,"click",function(){
			popup();
//				map.panTo(dl);
		});
		//到这里去
		DCI.event.bindDom(pwif_to,"click",to);
		DCI.event.bindDom(ppdf_to,"click",to);
		//从这里出发
		DCI.event.bindDom(pwif_from,"click",from);
		DCI.event.bindDom(ppdf_from,"click",from);
		//周边查询
		DCI.event.bindDom(pwif_around,"click",near);
		DCI.event.bindDom(ppdf_around,"click",near);
 		return poi_row;
	}
	
	/**
	 * 分页
	 */
	this.go=function(pageNum){
		page.go(pageNum);
		doSearch();
	}
	this.next=function(){
		page.next();
		doSearch();
	}
	this.pre=function(){
		page.pre();
		doSearch();
	}
	/**
	 * 内部类定义区域
	 */
	 
	function Page(){
		this.totalrows=0;/*总记录数*/
		this.pagesize=10;/*每页显示记录数*/
		this.curbatch=1;/*当前页数（默认当前页数为1）*/
		this.startrow=0;/*当前页起始行ID*/
		this.viewpage=0;/*显示页数*/
		this.startpage=1;/*显示开始页数*/
		this.isCal=false;
		this.pageNum=0;
		//总页数
		this.getPagesNum=function(){
			if(this.totalrows>0){
				var remainder=this.totalrows%this.pagesize;
				if(remainder==0){
					var pagesNum=this.totalrows/this.pagesize;
				}else{
					var pagesNum=Math.floor(this.totalrows/this.pagesize)+1;
				}
				return pagesNum;
			}else{
				return this.totalrows;
			}
		};
		this.getStartRow=function(){
			 startRow=this.startrow;
			 return parseInt(startRow);
		};
		this.getCurPage=function(){
			return this.curbatch;
		};
		this.setTotalrows=function(total){
			this.isCal=true;
			this.totalrows=total;
			this.pageNum=this.getPagesNum();
		};
		//下一页
		this.next=function(){
			var nb=this.curbatch+1;
			if(nb>this.pageNum){	//超出总页数，变更为最后一页
				nb=this.pageNum;
			}
			this.curbatch=nb;			
		}
		//上一页
		this.pre=function(){
			var pb=this.curbatch-1;
			if(pb<0){	//超出总页数，变更为最后一页
				pb=0;
			}
			this.curbatch=pb;	
		}
		//跳转
		this.go=function(num){
			if(num>this.pageNum){
				this.curbatch=this.pageNum;
				return;
			}
			if(num<0){
				this.curbatch=0;
				return;
			}
			this.curbatch=num;	
		}
	};
	
	/*
	 * 添加a标签common
	 */
	this.addA=function(inner,id,href){
		var ainner=inner||"a";
		var ahref=href||"javascript:void(0)";
		var aA=document.createElement("a");
		aA.innerHTML=ainner;
		aA.href=ahref;
		if(typeof(id)!="undefined"){
			aA.className=id;
		}
		return aA;
	}
	
}
