 var parentbject;
	window.destination = function(){
	this.object = '';
	this.taskid = 0;
	this.delaySec = 100; // 默认延迟多少毫秒出现提示框
	this.lastkeys_val = 0;
	this.lastinputstr = '';
	/**
	* 初始化类库
	*/
	this.init_suggest=  function(){
		var objBody = document.getElementsByTagName("body").item(0);
		var objplatform = document.createElement("div");
		objplatform.setAttribute('id','getplatform');
		objplatform.setAttribute('align','left');
		
		objBody.appendChild(objplatform);
		if(!document.all) {
			window.document.addEventListener("click",this.hidden_suggest,false);
		}else{
			window.document.attachEvent("onclick",this.hidden_suggest);
		}
	}

	/***************************************************constructHtml()*********************************************/
	//函数功能：动态填充div的内容，该div显示所有的提示内容
	//函数参数：allplat 一个字符串数组，包含了所有可能的提示内容
	this.constructHtml = function(allplat){
		var msgplat = '';
		var all = '';
		var spell = '';
		var chinese = '';
		var platkeys = this.object.value;
        platkeys=this.ltrim(platkeys);
		if(!platkeys){
			msgplat += '<li>输入中文/拼音/英文或&uarr;&darr;选择</li>';
			for(i=0;i<allplat.length;i++){
			    all=allplat[i].split(",");
				spell=all[1];
				chinese=all[0];					     
				msgplat += '<li  onclick="parentbject.add_input_text(\'' + spell + '\')"><span style="float:left; width:84px; height:20px; overflow:hidden;">' + spell + '</span><span style="float:right; height:20px; width:94px; white-space:nowrap;word-break:keep-all;overflow:hidden;text-align:right;margin-right:4px;">'+ chinese +'</span></li>';
			}
        }
		else {
			if(allplat.length < 1 || !allplat[0]){
				msgplat += '<li>对不起，找不到：'+platkeys+'</li>';

			}
			else{
			   msgplat += '<li>'+platkeys+'，按拼音/英文排序</li>';
			   for(i=0;i<allplat.length;i++){
					all=allplat[i].split(",");
					spell=all[1];
					chinese=all[0];
					msgplat += '<li onclick="parentbject.add_input_text(\'' + spell + '\')"><span style="float:left; width:84px; height:20px; overflow:hidden;">' + spell + '</span><span style="float:right; height:20px; width:94px; white-space:nowrap;word-break:keep-all;overflow:hidden;text-align:right;margin-right:4px;">'+ chinese +'</span></li>';
				}
			}
		}
		//IE6下select会遮盖 增加了iframe遮盖后，所有的nodes.length均要减1,nodes.length-1，另以[行数x行高]计算实际高度时行数lines也减1
		var h=20*allplat.length;
		var ieVersion=6;
		var w=190;
		if ((i = navigator.userAgent.indexOf("MSIE")) >= 0) {
		              ieVersion = parseFloat(navigator.userAgent.substr(i + 4));
		     }
		if (document.all&&ieVersion<7) {
			w = w+22;
		}

		msgplat +="<iframe id='maskIframe' src='javascript:false' style=\"position:absolute; visibility:inherit; top:0px; left:0px; width:"+w+"px; height:" + h + "; z-index:-1; filter='progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)' \"></iframe>"
		document.getElementById("getplatform").innerHTML =  msgplat;

		var nodes = document.getElementById("getplatform").childNodes;		
		
		nodes[0].style.borderBottom="1px #ddd dotted";
		if(allplat.length >= 1 && allplat[0]){
			nodes[1].className = "selected";
		}
		this.lastkeys_val = 0;
		for(var i=1;i<nodes.length;i++){
			nodes[i].onmouseover = function(){
				this.className = "mover";
				parentbject.lastkeys_val=parentIndexOf(this);
			}

			nodes[i].onmouseout = function(){
				if(parentbject.lastkeys_val==(parentIndexOf(this)-1)){this.className = "selected";}
				else{this.className = "mout";}
			}
		}
		

	}
/***************************************************获取窗口高度*********************************************/
	//函数功能：获取窗口高度，用于判断下拉列表的最大高度。如果产生的下拉内容过多，导致生成列表高度将超过窗口的一半，则下拉列高度设为窗口的一半
		//获取窗口高度
		var windowHeight;
		if (self.innerHeight) { 
			// 除IE外其他浏览器
			windowHeight = self.innerHeight;
			} else if (document.documentElement && document.documentElement.clientHeight) {
				// IE6 Strict模式
				windowHeight = document.documentElement.clientHeight;
				} else if (document.body) { 
					// 其他浏览器
					windowHeight = document.body.clientHeight;
		}

		
	/***************************************************fix_div_coordinate*********************************************/
	//函数功能：控制提示div的位置，使之刚好出现在文本输入框的下面
	this.fix_div_coordinate = function(){
		var leftpos=0;
		var toppos=0;
		var aTag =this.object;
	
			 leftpos= aTag.offsetLeft;
			 toppos = aTag.offsetTop;
            while (aTag=aTag.offsetParent) 
            {	
            	leftpos+=aTag.offsetLeft;
            	toppos+= aTag.offsetTop;
				
            }
	
		if(this.width){
			document.getElementById("getplatform").style.width = this.width+40;
		}else{			
			if(this.object.offsetWidth<160){
				document.getElementById("getplatform").style.width = '212px';
			}else{
				document.getElementById("getplatform").style.width = parseInt(this.object.offsetWidth+40) + 'px';
			}
		}
		//获取列表内容高度
		var divHeight=document.getElementById("getplatform").clientHeight;
		//如果列表内容高度大于窗口高度的一半，则出现滚动条
		var lines=document.getElementById("getplatform").childNodes.length;//增了个iframe遮照
		var divHeight=lines*20-20;

		if(divHeight>windowHeight/2){
			divHeight = windowHeight/2;
			document.getElementById("getplatform").style.overflowY = 'scroll';
			var liNodes=document.getElementById("getplatform").getElementsByTagName('li');
			for(var i=0;i<liNodes.length;i++)
			{
				liNodes[i].style.width="190px";
			}
		}		
		else{
			document.getElementById("getplatform").style.overflowY = 'visible';
			}

		document.getElementById("getplatform").style.height = divHeight+'px';
		document.getElementById("maskIframe").style.height=divHeight;
		document.getElementById("getplatform").style.left = leftpos + "px";
		document.getElementById("getplatform").style.top=toppos+document.getElementById('destinationKey').clientHeight+5+"px";
	}



    /***************************************************hidden_suggest*********************************************/
	//函数功能：隐藏提示框
	this.hidden_suggest = function (){
		this.lastkeys_val = 0;
		if(document.getElementById("getplatform"))
		document.getElementById("getplatform").style.visibility = "hidden";
	}

	/***************************************************show_suggest*********************************************/
	//函数功能：显示提示框
	this.show_suggest = function (){
		document.getElementById("getplatform").style.visibility = "visible";
		document.getElementById("getplatform").style.position='absolute';
		document.getElementById("getplatform").style.background='#fff';
		document.getElementById("getplatform").style.cursor="pointer";
		document.getElementById("getplatform").style.listStyle="none";
		document.getElementById("getplatform").style.lineHeight="20px";
		document.getElementById("getplatform").style.border = "1px solid #5AAEE7";
	}

	this.is_showsuggest= function (){
		if(document.getElementById("getplatform").style.visibility == "visible") return true;else return false;
	}

	this.sleep = function(n){
		var start=new Date().getTime(); //for opera only
		while(true) if(new Date().getTime()-start>n) break;
	}

	this.ltrim = function (strtext){
		return strtext.replace(/[$&\|\^*%#@! ]+/, '');
	}

    /***************************************************add_input_text*********************************************/
	//函数功能：当用户选中时填充相应的城市名字
	this.add_input_text = function (keys){
		keys=this.ltrim(keys)
		this.object.value = keys;	
     }
	/***************************************************keys_handleup*********************************************/
	//函数功能：用于处理当用户用向上的方向键选择内容时的事件
	this.keys_handleup = function (){
		if(this.lastkeys_val > 0) this.lastkeys_val--;
		var nodes = document.getElementById("getplatform").childNodes;
		if(this.lastkeys_val < 0) this.lastkeys_val = nodes.length-2;
		
		//当有滚动条，且所选的内容已不可见时，滚动条要随所选内容变化
		hNow = (this.lastkeys_val+1)*20;
		hBody = document.getElementById("getplatform").clientHeight;
		if(hNow-hBody>0){
			document.getElementById("getplatform").scrollTop -=20;
		} else {
			document.getElementById("getplatform").scrollTop =0;
		}
		
		var b = 0;
		if(this.lastkeys_val>0)
		for(var i=0;i<nodes.length-1;i++){//首行无向上事件
			if(b == this.lastkeys_val){	
				document.getElementById("getplatform").childNodes[i].className = "mover";
				if(this.listType==2){//如显示了拼音的
					this.add_input_text(document.getElementById("getplatform").childNodes[i].childNodes[0].innerHTML);					
				}else{
					this.add_input_text(document.getElementById("getplatform").childNodes[i].childNodes[0].innerHTML);
				}				
			}else{
				document.getElementById("getplatform").childNodes[i].className = "";
			}
			b++;			
		}
	}

/***************************************************keys_handledown*********************************************/
	//函数功能：用于处理当用户用向下的方向键选择内容时的事件
	this.keys_handledown = function (){
		this.lastkeys_val++;
		var nodes = document.getElementById("getplatform").childNodes;
		if(this.lastkeys_val >= nodes.length-1) {
			this.lastkeys_val--;
			return;
		}
		
		//当有滚动条，且所选的内容已不可见时，滚动条要随所选内容变化
		hNow = (this.lastkeys_val+1)*20;
		hBody = document.getElementById("getplatform").clientHeight;
		if(hNow-hBody>0){
			document.getElementById("getplatform").scrollTop +=20;
		}		
		
		var b = 0;
		for(var i=0;i<nodes.length-1;i++){
			if(b == this.lastkeys_val){
				document.getElementById("getplatform").childNodes[i].className = "mover";
				if(this.listType==2){//如显示了拼音的
					this.add_input_text(document.getElementById("getplatform").childNodes[i].childNodes[0].innerHTML);
				}else{
					this.add_input_text(document.getElementById("getplatform").childNodes[i].childNodes[0].innerHTML);
				}
			}else{
				document.getElementById("getplatform").childNodes[i].className = "";
			}
			b++;
		}

	}
	
	/***************************************************keys_enter*********************************************/
	//函数功能：用于处理当用户回车键选择内容时的事件
	this.keys_enter = function (){
		var nodes = document.getElementById("getplatform").childNodes;
		for(var i=1;i<nodes.length;i++){
			if(nodes[i].className == "selected"){
				this.add_input_text(nodes[i].childNodes[0].innerHTML);
			}
		}
		this.hidden_suggest();
	}
	
	this.ajaxac_getkeycode = function (e)
	{
		var code;
		if (!e) var e = window.event;
		if (e.keyCode) code = e.keyCode;
		else if (e.which) code = e.which;
		return code;
	}

    /***************************************************display*********************************************/
	//函数功能：入口函数，将提示层div显示出来
	//输入参数：object 当前输入所在的对象，如文本框
	//输入参数：e IE事件对象
	this.display = function (object,e){
		if(object.value.trim()=='')
		{	
			this.hidden_suggest();
			return false;
		}
		document.getElementById("popLayer").style.display = "none";
		if(!document.getElementById("getplatform")) this.init_suggest();
		if (!e) e = window.event;
		e.stopPropagation;
		e.cancelBubble = true;
		if (e.target) targ = e.target;  else if (e.srcElement) targ = e.srcElement;
		if (targ.nodeType == 3)  targ = targ.parentNode;

		var inputkeys = this.ajaxac_getkeycode(e);
		
		switch(inputkeys){
			case 38: //向上方向键
				this.keys_handleup(object.id);
			    return;break;
			case 40: //向下方向键
				//alert(inputkeys);
				if(this.is_showsuggest()) this.keys_handledown(object.id); else this.show_suggest();
			    return;break;
			case 39: //向右方向键
				return;break;
			case 37: //向左方向键
				return;break;
			case 13: //对应回车键
				this.keys_enter();
			    return;break;
			case 18: //对应Alt键
				this.hidden_suggest();
			    return;break;
			case 27: //对应Esc键
				this.hidden_suggest();
			    return;break;
		}

		this.object = object;
		if(window.opera) this.sleep(100);//延迟0.1秒
		parentbject = this;
		if(this.taskid) window.clearTimeout(this.taskid);
        this.taskid=setTimeout("parentbject.localtext();" , this.delaySec)

	}
		
	//函数功能：从本地js数组中获取要填充到提示层div中的文本内容
	this.localtext = function(){
		var id=this.object.id;
        var suggestions="";
        suggestions=this.getSuggestionByName();
		suggestions=suggestions.substring(0,suggestions.length-1);
		parentbject.show_suggest();
		parentbject.constructHtml(suggestions.split(';'));
		parentbject.fix_div_coordinate();
		//parentbject.repaint();
	}

	/***************************************************getSuggestionByName*********************************************/
	//函数功能：从本地js数组中获取要填充到提示层div中的城市名字
	this.getSuggestionByName = function(){
		platkeys = this.object.value;
		var str="";
        platkeys=this.ltrim(platkeys);
		if(!platkeys){
			for(i=0;i<destCitys.length;i++){
				str+=destCitys[i][2]+","+destCitys[i][1]+";";
			}
			return str;
        }
		else{
		   platkeys=platkeys.toUpperCase();
			for(i=0;i<destCitys.length;i++){
				
			    if(this.getLeftStr(destCitys[i][0],platkeys.length).toUpperCase()==platkeys||
				   (destCitys[i][1].toUpperCase().indexOf(platkeys)!=-1)||
				   this.getLeftStr(destCitys[i][2],platkeys.length).toUpperCase()==platkeys||
				   this.getLeftStr(destCitys[i][3],platkeys.length).toUpperCase()==platkeys)
				   {
					   var pinyinMatchIndex=2;
					   if(this.getLeftStr(destCitys[i][2],platkeys.length).toUpperCase()!=platkeys&&this.getLeftStr(destCitys[i][3],platkeys.length).toUpperCase()==platkeys)
							 pinyinMatchIndex=3;
					   str+=destCitys[i][pinyinMatchIndex]+","+destCitys[i][1]+";";
					}
			}
			return str;
		}
	}

	/***************************************************getLeftStr************* *************************************/
    //函数功能：得到左边的字符串
    this.getLeftStr = function(str,len){

        if(isNaN(len)||len==null){
            len = str.length;
        }
        else{
            if(parseInt(len)<0||parseInt(len)>str.length){
                len = str.length;
             }
        }
        return str.substr(0,len);
    }
	/***************************************************parentIndexOf************* *************************************/
    //函数功能：得到子结点在父结点的位置
	function parentIndexOf(node){
	  for (var i=0;i<node.parentNode.childNodes.length;i++){
			if(node==node.parentNode.childNodes[i]){return i;}
	  }
   }
}
String.prototype.trim=function()
{      
    return this.replace(/(^\s*)|(\s*$)/g, '');   
}
