//Copyright: Copyright (c) 2006  Company: go2map  Author : xwg
//global function
function genRandom()
{	var ranNum=Math.random()+'';
	var strRan=ranNum.replace("0.","");
	strRan=strRan.substr(0,16);
	return strRan;
}
function errOut(errStr)
{	
	alert(errStr);//attation
}
//core

function Client()
{	this.engineURL="http://lspengine.go2map.com/WebSite/Engine";//默认引擎 
	this.appid="";
	var lastSubmit;
	var strIframe='<iframe id="submitpage" src="submitpage/submit.htm?x='+Date.UTC +'" style="display:none"></iframe>';
	document.write(strIframe);

	var userTag=genRandom();
	var logImg;
	this.submit=function(sn,so,eu,sv)//serviceName,submitObject,engineUrl,submitVariant
	{	var sp="hidden_MapTool="+sn;
		sp+="&hidden_Variant=";
		
		var strV="";
		var tmpRan=genRandom(); 
		for(var name in sv)
		{	if(strV)
			{	strV+="!!"+name+"=="+sv[name]+"";
			}
			else
			{	strV+=name+"=="+sv[name];
			}
		}
		sp+=strV;
		sp+="&hidden_APPID="+this.appid;
		sp+="&hidden_DISABLEQDS="+"true";
		sp+="&rnd="+tmpRan;
	
		var oWin=document.getElementById("submitpage").contentWindow;
		if(!oWin.is_loaded)
		{	this.setTimeout(this.submit,100,sn,so,eu,sv);	
			return;
		}
		oWin.rqUrl=eu?eu:this.engineURL;
		oWin.param=sp;
		oWin.callback=this.callback;
		lastSubmit=so;
		oWin.submit();
		
		//sendLog
		var logParam="?user="+userTag+"&&appid="+this.appid+"&&oprt="+sn+"&&type=request&&referrer=&&r="+tmpRan;
		logImg=null;
		logImg=document.createElement("img");
		logImg.src=logUrl+logParam;
		
	}
	this.callback=function(a)
	{	var result=getItems(a);
		lastSubmit.mapresultCallback(result);
	}
	function getItems(items)
	{	var objBack=new Object();
		var es=items.split("!!");
		for(var i=0;i<es.length;i++)
		{	var ds=es[i].split("==");
			objBack[ds[0]]=ds[1];
		}
		return objBack;
	}
}
Client.prototype.setTimeout=function(a,b)
{
	var c=this;
	var d;
	if(typeof a=="function"&&arguments.length>2)
	{
		d=Array.prototype.slice.call(arguments,2);
		return window.setTimeout(function(){a.apply(c,d)},b)
	}
	return window.setTimeout(function(){a.apply(c)},b)
};
function randomNum()
{	return Math.random();
}
function ClientEvent()
{	var events=[];
	this.addListener=function(a,b,c)
	{	a[b]=c;
	}
	this.trigger=function()
	{	var obj=arguments[0];
		var fun=arguments[1];
		var args=[];
		
		for(var j=2;j<arguments.length;j++)
		{	args[j-2]=arguments[j];
		}
		try
		{
		obj[fun].apply(this,args);//attation
		}
		catch(e)
		{	
			alert(e.message);
		}
	}
}
var Event=new ClientEvent();
//mapservice
function hiddenVariant(a,p,w)
{	this.APPID=a;
	this.ProtocolType=p;
	this.Wmsxml=w;
}
function QueryNav(client)
{	//public
	this.appid=client.appid;
	this.engineURL="";//默认引擎
	this.serviceName="nav.Navigation";
	//private
	var _client = client;
	var _lastFeatureDesc;
	//public methods
    
	this.nameTypeSubmit=function(f,t,qf,pn,ps,ta)//from,to,queryflag
	{	if(f&&t)
		{	this.submit(createFDesc(f,"name","1")+createFDesc(t,"name","2"),qf,pn,ps,ta);
		}
		else
		{	alert("起点或者终点为空");
			return;
		}
	};
	this.mixedTypeSubmit=function(f,f_type,t,t_type,qf,pn,ps,ta)
	{	
	
	    var ftdc=createFDesc(f,f_type,"1")+createFDesc(t,t_type,"2");
		this.submit(ftdc,qf,pn,ps,ta);
	};
	this.submit=function(ftDesc,qf,pn,ps,ta)//featureDesc,queryflag,pageNum,pageSize,tactic
	{	_lastFeatureDesc=ftDesc; 
		if(!qf) qf="NORMAL";
		if(!pn) pn="1";
		if(!ps) ps="10";
		if(!ta) ta="1"
		
		var wmsxml='<Request><MapService queryflag="'+qf+'"><Tactic>'+ta+'</Tactic><ResultOrder page="'+pn+'" recordnum="'+ps+'"/><Features>'+ftDesc+'</Features></MapService></Request>';
		var hdVariant = new hiddenVariant(this.appid,"WMSXML",wmsxml);
		_client.submit(this.serviceName,this,this.engineURL,hdVariant);
	};
	this.mapresultCallback=function(result)
	{	
	
	try
		{	var errStr=result["ErrorMessage"];
			if(errStr) {Event.trigger(this,"errormessage",errStr);return;}
			var xmlStr=result["Wmsxml"];
			
			if(!xmlStr)
			{	Event.trigger(this,"errormessage","地图服务引擎正忙,请稍后再试");
				return;
			}
			 var xmlDoc;
			 if(ff)
			 {
			    var xoc=DOMParser(); 
                xmlDoc = xoc.parseFromString(xmlStr,"text/xml"); 
                xmlDoc.async=false;
			    xmlDoc.implementation.hasFeature("XPath", "3.0")
			 }
			 else
			 {
			    var xmlDoc=new ActiveXObject("MSXML2.Domdocument");
			    xmlDoc.setProperty("SelectionLanguage", "XPath");
			    xmlDoc.loadXML(xmlStr);
			}
			Event.trigger(this,"domback",xmlDoc)//attation
		}
		catch(e)
		{	errOut(e.message);
		}
	};
	this.changeTacs=function(ta)
	{	
	this.submit(_lastFeatureDesc,"","","",ta);
	}
	function createFDesc(value,type,id)
	{	var rtStr;
		switch(type)
		{	case "name":
				rtStr='<FeatureDesc id="'+id+'" type="NAME" radius="1000"><Keyword>'+value+'</Keyword></FeatureDesc>';
				break;
			case "uid":
				rtStr='<FeatureDesc id="'+id+'" type="UID" radius="1000"><Uids>'+value+'</Uids></FeatureDesc>';
				break;
			case "coord":
				var ps=value.split(",");
				rtStr='<FeatureDesc id="'+id+'" type="COORD" radius="1000"><Point x="'+ps[0]+'" y="'+ps[1]+'"/></FeatureDesc>';
				break;
			default:
				rtStr='<FeatureDesc id="'+id+'" type="NAME" radius="1000"><Keyword>'+value+'</Keyword></FeatureDesc>';
		}
		return rtStr;
	}
}

