﻿var commoncitys = new Array();
commoncitys[0]=new Array('310100000','shanghai','상하이');
commoncitys[1]=new Array('110100000','beijing','베이징');
commoncitys[2]=new Array('210200000','dalian','대련');
commoncitys[3]=new Array('320100000','nanjing','남경');
commoncitys[4]=new Array('330100000','hangzhou','항주');
commoncitys[5]=new Array('370200000','qingdao','청도');
commoncitys[6]=new Array('420100000','wuhan','무한');
commoncitys[7]=new Array('440100000','guangzhou','광주');
commoncitys[8]=new Array('440300000','shenzhen','심천');
commoncitys[9]=new Array('510100000','chengdu','성도');


var nodelength=3;
var lastval=0;
var pageNew=1;
var areaCode="";
var areaName="";
var parentbject;
window.city_suggest = function()
{
this.object = '';
this.id2 = '';
this.pageIndex=1;
this.totalPage=1;
this.pageCount=5;
this.pageSize=10;
this.pageIndexCount=0;
this.taskid = 0;
this.delaySec = 100; // 默认延迟多少毫秒出现提示框
this.boolSearch=0;
this.init_zhaobussuggest=  function()
{
	var objBody = document.getElementsByTagName("body").item(0);
	var objiFrame = document.createElement("iframe");
	var objplatform = document.createElement("div");
	objiFrame.setAttribute('id','getiframe');
	objiFrame.style.zIndex='21';
	objiFrame.style.position = 'absolute';
	objplatform.style.zIndex='9999';
	objplatform.style.position = 'absolute';
	objplatform.setAttribute('id','getplatform');
	objplatform.setAttribute('align','left');
	objBody.appendChild(objiFrame);
	objiFrame.document.body.appendChild(objplatform);
	if(!document.all) 
	{
        window.document.addEventListener("click",this.hidden_suggest,false); //该方法有三个参数，第一个是事件类型，第二个是处理的函数，第三个是一个布尔值，true表示制定的事件处理程序将在事件传播的阶段用于捕捉事件，否则就不捕捉
	}
	else
	{
		window.document.attachEvent("onclick",this.hidden_suggest);
	}
}
this.fill_div = function(allplat)
{ 
    var msgplat = '';
	var platkeys = this.object.value;
    platkeys=this.ltrim(platkeys);
    pageNew=this.pageIndex;
    var totalRecord=allplat.length;
    var pageStart=(this.pageIndex-1)*this.pageSize;
    var pageEnd=this.pageIndex*this.pageSize;
    if(pageEnd>totalRecord)
    {
        pageEnd=totalRecord;
    }
    this.totalPage= totalRecord / this.pageSize; 
	if( totalRecord % this.pageSize > 0)
	{
		this.totalPage++;
	}
    this.totalPage=parseInt(this.totalPage);
    var pageNext=this.pageIndex+1;
    var pagePrevious=this.pageIndex-1;
    if(this.pageIndex>=this.totalPage)
    {
        pageNext=this.totalPage;
    }
    if(this.pageIndex<=1)
    {
        pagePrevious=1;
    }
    var ps=this.pageIndex;
    var pe=this.pageIndex+this.pageCount-1;
    if(pe>this.totalPage)
    {
        ps=this.totalPage-this.pageCount+1;
        pe=this.totalPage;
    }
    if(ps<1)
    {
        ps=1;
    }	    
	this.pageIndexCount=pageEnd-pageStart;
	var strnode=allplat[0].split(",");
	var alllength=strnode.length;
	if(!platkeys)
	{
		msgplat += '<table class="hint" ><tr align="left"><td id="gettd0" class="tdleft" height="10" align="left">한글 입력</td></tr></table><table class="mout" height="2"><tr><td></td></tr></table>';
		msgplat +=this.getInnerHTML(allplat,pageStart,pageEnd);
		msgplat +=this.getInnerPage(ps,pe,pagePrevious,pageNext);
    }
	else 
	{
		if(allplat.length < 1 || !allplat[0])
		{
			msgplat += '<table class="hint"><tr align="left"><td id="gettd0" class="tdleft" height="10" align="left">죄송합니다.찾을 수 없습니다.:'+platkeys+'</td></tr></table><table class="mout" height="2"><tr><td></td></tr></table>';
		}
		else
		{
			if(this.boolSearch)
			{
				msgplat += '<table class="hint" ><tr align="left"><td id="gettd0" class="tdleft" height="10" align="left">죄송합니다.찾을 수 없습니다.:'+platkeys+'</td></tr></table><table width="230" class="mout" height="2"><tr><td></td></tr></table>';
			}
			else
			{
				msgplat += '<table class="hint" ><tr align="left"><td id="gettd0" class="tdleft" height="10" align="left">'+platkeys+',병음순으로</td></tr></table><table width="230" class="mout" height="2"><tr><td></td></tr></table>';
			}
			msgplat +=this.getInnerHTML(allplat,pageStart,pageEnd);
			msgplat +=this.getInnerPage(ps,pe,pagePrevious,pageNext);
		}
	}
	document.getElementById("getplatform").innerHTML =  msgplat;
	var nodes = document.getElementById("getplatform").childNodes;
	nodes[0].className = "hint";
	var nodeslength=nodes.length;
	if(platkeys=="")
	{
		areaCode="";
		areaName="";
	}
    if(allplat.length < 1 || !allplat[0] )
    {
		areaCode="";
		areaName="";
    }
    else
    {
		if(this.totalPage>1)
        {
            nodeslength=nodeslength-1;
        } 
		if( lastval >= this.pageIndexCount)
        { 
            lastval= this.pageIndexCount-1;
        }
		if(platkeys)
		{
			this.setCodeAndName(lastval+2);
		}
		nodes[lastval+2].className = "selected";
		for(var i=2;i<this.pageIndexCount+2;i++)
		{
			nodes[i].onmouseover = function()
			{
				this.className = "mover";
			}
			nodes[i].onmouseout = function()
			{
				if(lastval==(parentIndexOf(this)-2))
				{
					this.className = "selected";
				}
				else
				{
					this.className = "mout";
				}
			}
		}
	}
	document.getElementById("getiframe").style.width = document.getElementById("getplatform").clientWidth+2;
    document.getElementById("getiframe").style.height = document.getElementById("getplatform").clientHeight+2;
}
this.getInnerHTML= function(allplat,pageStart,pageEnd)
{
	var alllength=allplat[0].split(",").length;
	var msgplat='';
	for(i=pageStart;i<pageEnd;i++)
	{
		all=allplat[i].split(",");
		szm=all[0];
		if(alllength<2)
		{}
		else if(alllength==2)
		{
			spell=all[1];
			chinese=all[1];
			chineseR=chinese.replace(/'/g,"\\'");
			msgplat += '<table class="mout"><tr onclick="parentbject.add_input_text(\'' + chineseR + '\',\'' + szm + '\')"><td style="display:none">' + szm + '</td><td class="tdleft" height="10" align="left">'+ spell +'</td></tr></table>';
		}
		else if(alllength==3)
		{
			spell=all[1];
			chinese=all[2];
			chineseR=spell.replace(/'/g,"\\'");
			msgplat += '<table class="mout"><tr onclick="parentbject.add_input_text(\'' + chineseR + '\',\'' + szm + '\')"><td style="display:none">' + szm + '</td><td class="tdleft" height="10" align="left">'+ spell +'</td><td class="tdright" align="right">' + chinese + '</td></tr></table>';
		}
		else
		{
			spell=all[1];
			chineseShow=all[2];
			chinese=all[3];
			chineseR=chinese.replace(/'/g,"\\'");
			msgplat += '<table class="mout"><tr onclick="parentbject.add_input_text(\'' + chineseR + '\',\'' + szm + '\')"><td style="display:none">' + szm + '</td><td class="tdleft" height="10" align="left">'+ spell +'</td><td class="tdright" align="right">' + chineseShow + '</td><td style="display:none">' + chineseR + '</td></tr></table>';
		}
	}
	if(this.pageIndexCount<this.pageSize)
	{	
		for(var j=this.pageIndexCount;j<this.pageSize;j++)
		{
			msgplat += '<table  class="mout" ><tr><td  id="getmout'+j+'"  height="10">&nbsp;</td></tr></table>';
		}
	}
	msgplat += '<table class="mout" height="2"><tr><td></td></tr></table>';
	return msgplat;
}
this.getInnerPage=function(ps,pe,pagePrevious,pageNext)
{
	var msgplat='';
	if(this.totalPage>=2)
	{ 
		msgplat += '<table id="getpage" class="page" ><tr><td id="gettd1" height="30"></td>';
		if(this.pageIndex>1)
	    {
	        msgplat +='<td width="20" valign="middle" onclick="pageSearch(\''+parentbject.object.id+'\',\''+parentbject.id2+'\','+pagePrevious+')">&lt;-</td>';
	    }
	    for(i=ps;i<=pe;i++)
	    {
	        if(i==this.pageIndex)
            {
                    msgplat +='<td width="10" valign="middle"  class="pageSelect" onclick="pageSearch(\''+parentbject.object.id+'\',\''+parentbject.id2+'\','+i+')">'+i+'</td>';
            }
            else
            {
                msgplat +='<td width="10" valign="middle"  onclick="pageSearch(\''+parentbject.object.id+'\',\''+parentbject.id2+'\','+i+')">'+i+'</td>';
            }
	    }
	    if(this.pageIndex < this.totalPage)
	    {
	        msgplat +='<td width="20" valign="middle" onclick="pageSearch(\''+parentbject.object.id+'\',\''+parentbject.id2+'\','+pageNext+')">-&gt;</td>';
	    }
		msgplat += '<td id="gettd2"></td></tr></table>';
	}
	return msgplat;
}
this.fix_div_coordinate = function()
{
	var leftpos=0;
	var toppos=0;
	aTag = this.object; 
	do 
	{
		aTag = aTag.offsetParent;
		if(aTag!=null)
		{
			leftpos	+= aTag.offsetLeft;
			toppos += aTag.offsetTop;
		}
		else
		{
			break;
		}
	}while(aTag.tagName!="BODY");
	document.getElementById("getiframe").style.width = '212px';
	if(document.layers)
	{
		document.getElementById("getiframe").style.left = this.object.offsetLeft	+ leftpos + "px";
		document.getElementById("getiframe").style.top = this.object.offsetTop +	toppos + this.object.offsetHeight + 2 + "px";
	}
	else
	{
		document.getElementById("getiframe").style.left =this.object.offsetLeft	+ leftpos  +"px";
		document.getElementById("getiframe").style.top = this.object.offsetTop +	toppos + this.object.offsetHeight + 'px';
	}
	document.getElementById("getplatform").style.width =  '210px';
	if(document.layers)
	{
		document.getElementById("getplatform").style.left = this.object.offsetLeft	+ leftpos + "px";
		document.getElementById("getplatform").style.top = this.object.offsetTop +	toppos + this.object.offsetHeight + 2 + "px";
	}
	else
	{
		document.getElementById("getplatform").style.left =this.object.offsetLeft	+ leftpos  +"px";
		document.getElementById("getplatform").style.top = this.object.offsetTop +	toppos + this.object.offsetHeight + 'px';
	}
}
this.hidden_suggest = function ()
{
	var obj=document.getElementById(parentbject.object.id);
	var hid=document.getElementById(parentbject.id2);
	if(areaCode=="" || areaName =="")
	{
		hid.value="";
	}
	if(areaName != "" || areaCode != "")
	{
		obj.style.color="#000000";
		obj.value=areaName;
		hid.value=areaCode;
	}
	lastval=0;
	document.getElementById("getiframe").style.visibility = "hidden";
	document.getElementById("getplatform").style.visibility = "hidden";
}
this.show_suggest = function ()
{
	document.getElementById("getiframe").style.visibility = "visible";
	document.getElementById("getplatform").style.visibility = "visible";
}
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(/[\$&\|\^*%#@! ]+/, '');
}
this.add_input_text = function (keys,szm)
{
	keys=this.ltrim(keys);
	areaCode=szm;
	areaName=keys;
	var id=this.object.id;
	this.object.value = keys;
	document.getElementById(this.id2).value = szm;
	document.getElementById(id).style.color="#000000";
	document.getElementById(id).value=keys;
}
this.setCodeAndName = function(i)
{
	var nodes = document.getElementById("getplatform").childNodes;
	if(nodelength<2)
	{}
	else if(nodelength==2)
	{
		areaCode=nodes[i].childNodes[0].childNodes[0].childNodes[0].innerHTML;
		areaName=nodes[i].childNodes[0].childNodes[0].childNodes[1].innerHTML;
	}
	else if(nodelength==3)
	{
		areaCode=nodes[i].childNodes[0].childNodes[0].childNodes[0].innerHTML;
		areaName=nodes[i].childNodes[0].childNodes[0].childNodes[1].innerHTML;
	}
	else
	{
		areaCode=nodes[i].childNodes[0].childNodes[0].childNodes[0].innerHTML;
		areaName=nodes[i].childNodes[0].childNodes[0].childNodes[3].innerHTML;
	}
}
this.keys_handleup = function ()
{
	lastval--;
	var nodes = document.getElementById("getplatform").childNodes;
	if(lastval < 0)
	{ 
		lastval = this.pageIndexCount-1; 
	}
	var b = 0;
	for(var i=2;i<this.pageIndexCount+2;i++)
	{
		if(b == lastval)
		{
			nodes[i].className = "selected";
			this.setCodeAndName(i);
		}
		else
		{
			nodes[i].className = "mout";
		}
		b++;
	}
	getSelectPos(this.object.id);
}
this.keys_handledown = function ()
{
	lastval++;
	var nodes = document.getElementById("getplatform").childNodes;
	if(lastval > this.pageIndexCount-1) 
	{
		lastval=0;
	}
	var b = 0;
	for(var i=2;i<this.pageIndexCount+2;i++)
	{
		if(b == lastval)
		{
			nodes[i].className = "selected";
			this.setCodeAndName(i);
		}
		else
		{
			nodes[i].className = "mout";
		}
		b++;
	}
	getSelectPos(this.object.id);
}
this.keys_handleright = function ()
{
	this.pageIndex=pageNew+1;
	if(this.pageIndex<=this.totalPage)
	{
		parentbject.localtext();
	}
	else
	{
		this.pageIndex=this.totalPage;
	}
	pageNew=this.pageIndex;
	getSelectPos(this.object.id);
}
this.keys_handleleft = function ()
{
	this.pageIndex = pageNew -1  ;
	if(this.pageIndex>0)
	{
		this.localtext();
	}
	else
	{
		this.pageIndex=1;
	}
	pageNew=this.pageIndex;
	getSelectPos(this.object.id);
}
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;
}
this.keys_enter = function ()
{	
	var nodes = document.getElementById("getplatform").childNodes;
	if(nodes.length<=2)
	{
		document.getElementById(this.id2).value = "";
	}
	for(var i=2;i<nodes.length;i++)
	{
		if(nodes[i].className == "selected")
		{ 
			if(nodelength<2)
			{}
			else if(nodelength==2)
			{
				this.add_input_text(nodes[i].childNodes[0].childNodes[0].childNodes[1].innerHTML,nodes[i].childNodes[0].childNodes[0].childNodes[0].innerHTML);
			}
			else if(nodelength==3)
			{	
				this.add_input_text(nodes[i].childNodes[0].childNodes[0].childNodes[1].innerHTML,nodes[i].childNodes[0].childNodes[0].childNodes[0].innerHTML);
			}
			else
			{
				this.add_input_text(nodes[i].childNodes[0].childNodes[0].childNodes[3].innerHTML,nodes[i].childNodes[0].childNodes[0].childNodes[0].innerHTML);			
			}
		}
	}
	this.hidden_suggest();
}
this.display = function (objectn,id2,e,pageIndex)
{   
	this.object = document.getElementById(objectn);
	this.id2 = id2;
	this.pageIndex=pageIndex;
	if(!document.getElementById("getplatform")) //没有找到getplatform元素则初始化
	{ 
		this.init_zhaobussuggest();
	}
	if (!e) 
	{
		e = window.event;
	}
	e.stopPropagation;//停止事件传播，也就是让其他元素对这个事件不可见，在IE 6中，就是把cancelBubble设置为true。
	e.cancelBubble = true;
	var inputkeys = this.ajaxac_getkeycode(e); //返回keydown和keyup事件发生的时候，按键的代码以及keypress事件的Unicode字符。
	switch(inputkeys)
	{
		case 38: //向上方向键
			if(this.is_showsuggest()) 
			{
				this.keys_handleup(this.object.id);
			}
			else
			{
			    this.show_suggest();
			}
			return;break;
		case 40: //向下方向键
			if(this.is_showsuggest()) 
			{
				this.keys_handledown(this.object.id); 
			}
			else
			{
			    this.show_suggest();
			}
			return;break;
		case 39: //向右方向键
			if(this.is_showsuggest()) 
			{
			    this.keys_handleright(this.object.id);
			}
			else 
			{
			    this.show_suggest();
			}
			return;break;
		case 37: //向左方向键
			if(this.is_showsuggest()) 
			{
			    this.keys_handleleft(this.object.id);
			}
			else
			{ 
			    this.show_suggest();
			}
			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;
	}
	if(window.opera)  //opera浏览器
	{    
		this.sleep(100);//延迟0.1秒
	}
	parentbject = this; 
	if(this.taskid) 
	{
		window.clearTimeout(this.taskid); //清除定时器
	}
    this.taskid = setTimeout("parentbject.localtext();" , this.delaySec);//过100毫秒以后调用localtext函数
}
this.localtext = function()
{
    var suggestions="";
    suggestions=this.getSuggestionByName();
	suggestions=suggestions.substring(0,suggestions.length-1);//alert(suggestions);
	parentbject.show_suggest();
	parentbject.fill_div(suggestions.split(';'));
	parentbject.fix_div_coordinate();
}
this.getSuggestionByName = function()
{
	this.boolSearch=0;
	platkeys = this.object.value;
	var strSearch="";
    platkeys=this.ltrim(platkeys);
	if(!platkeys)
	{ 
		strSearch=this.getDefaultNode();
    }
	else
	{
		var allcity = citys.split(";");
		var strnode=allcity[0].split(",");
		nodelength=strnode.length;
		var strSearchs = new Array();
		do
		{
			var l=0;
			platkeys=platkeys.toUpperCase();//输入字符转换为大写 
			for(i=0;i<allcity.length;i++)
			{
				var boolS=false;
				var area=allcity[i].split(",");
				for(k=0;k<nodelength;k++)
				{
					var index=this.countInstances(area[k].toUpperCase(),platkeys);
					if(index>=0)
					{
						boolS=true;
						area[nodelength]=index;
						break;
					}
				}
				if(boolS)
				{
					this.boolSearch=0;
					strSearchs[l]=area;
					l++;
				}
			}
			if(strSearchs.length==0)
			{
				this.boolSearch=1;
				platkeys=platkeys.substring(0,platkeys.length-1);
				if(platkeys=="")
				{
					strSearch=this.getDefaultNode();
					break;
				}
			}
		}while(strSearchs.length==0)
		if(strSearchs.length>0)
		{
			strSearchs=this.BubbleSort(strSearchs);
			for(i=0;i<strSearchs.length;i++)
			{
				if(nodelength<2)
				{}
				else if(nodelength==2)
				{
					strSearch+=strSearchs[i][0]+","+strSearchs[i][1]+";";
				}
				else if(nodelength==3)
				{
					strSearch+=strSearchs[i][0]+","+strSearchs[i][2]+","+strSearchs[i][1]+";";
				}
				else if(nodelength>3)
				{
					strSearch+=strSearchs[i][0]+","+strSearchs[i][1]+","+strSearchs[i][2]+"("+strSearchs[i][4]+"),"+strSearchs[i][2]+";";
				}
			}
		}
	}
	return strSearch;
}
this.BubbleSort =function(R)
{
	for(i=0;i<R.length;i++)
	{
		for(j=R.length-1;j>i;j--)
		{
			if(R[j][nodelength]<R[j-1][nodelength])
			{
				t=R[j-1];
				R[j-1]=R[j];
				R[j]=t;
			}
		}
	}
	return R;
}
this.countInstances = function(mainStr, subStr)
{
    var offset =-1;
    if(subStr=='')
    {
        offset=0;
    }
    else
    {
        do
        {
            offset = mainStr.indexOf(subStr, offset);
            if(offset != -1)
            {
                return offset;
            }
        }while(offset != -1)
    }
    return offset;
}
this.getDefaultNode = function()
{
	var strSearch="";
	nodelength=commoncitys[0].length;
	for(i=0;i<commoncitys.length;i++)
	{
		if(nodelength<2)
		{}
		else if(nodelength==2)
		{
			strSearch+=commoncitys[i][0]+","+commoncitys[i][1]+";";
		}
		else if(nodelength==3)
		{
			strSearch+=commoncitys[i][0]+","+commoncitys[i][2]+","+commoncitys[i][1]+";";
		}
		else if(nodelength>3)
		{
			strSearch+=commoncitys[i][0]+","+commoncitys[i][1]+","+commoncitys[i][2]+"("+commoncitys[i][4]+"),"+commoncitys[i][2]+";";
		}
	}
	return strSearch;
}
function parentIndexOf(node)
{
	for (var i=0; i<node.parentNode.childNodes.length; i++)
	{
		if(node==node.parentNode.childNodes[i])
		{
			return i;
		}
	}
}
}
var suggest = new city_suggest();
function pageSearch(objn,idn,p)
{
pageNew=p;
getSelectPos(objn);
suggest = new city_suggest();
suggest.display(objn,idn,event,p);
}
function getSelectPos(obj)
{
var esrc = document.getElementById(obj);
if(esrc==null)
{ 
    esrc=event.srcElement;
}
var rtextRange =esrc.createTextRange();
rtextRange.moveStart('character',esrc.value.length);
rtextRange.collapse(true);
rtextRange.select();
}


