function city(v,t,h){
	this.value =v;
	this.text =t;
	this.isHot = h;
}

var cList = {
	cityArr:[], 
	add:function (value,text,isHot){
		var leng = this.cityArr.length;
		this.cityArr[leng] = new city(value,text,isHot);
	}
}

cList.add('AKU','Aksu',0);
cList.add('AAT','Altay',0);
cList.add('AKA','Ankang',0);
cList.add('AQG','Anqing',0);
cList.add('AOG','Anshan',0);
cList.add('BSD','Baoshan',0);
cList.add('BAV','Baotou',0);
cList.add('BHY','Beihai',0);
cList.add('PEK','Beijing',1);
cList.add('BFU','Bengbu',0);
cList.add('CGQ','Changchun',0);
cList.add('CGD','Changde',0);
cList.add('CIH','Changzhi',0);
cList.add('CZX','Changzhou',0);
cList.add('CSX','Changsha',0);
cList.add('CHG','Chaoyang',0);
cList.add('CTU','Chengdu',1);
cList.add('CIF','Chifeng',0);
cList.add('CKG','Chongqing',0);
cList.add('DLC','Dalian',1);
cList.add('DLU','Dali',0);
cList.add('DDG','Dandong',0);
cList.add('DAT','Datong',0);
cList.add('DAX','Daxian',0);
cList.add('DYG','Dayong',0);
cList.add('DIG','Diqing',0);
cList.add('DOY','Dongying');
cList.add('DNH','Dunhuang',0);
cList.add('ENH','Enshi',0);
cList.add('FUG','Fuyang',0);
cList.add('FYN','Fuyun',0);
cList.add('FOC','Fuzhou',0);
cList.add('KOW','Ganzhou',0);
cList.add('GOQ','Golmud',0);
cList.add('GHN','Guanghan',0);
cList.add('CAN','Guangzhou(Canton)',0);
cList.add('KWL','Guilin',0);
cList.add('KWE','Guiyang',0);
cList.add('HAK','Haikou',0);
cList.add('HLD','Hailar',0);
cList.add('HMI','Hami',0);
cList.add('HGH','Hangzhou',1);
cList.add('HZG','Hanzhong',0);
cList.add('HRB','Harbin',0);
cList.add('HFE','Hefei',0);
cList.add('HEK','Heihe',0);
cList.add('HNY','Hengyang',0);
cList.add('HET','Hohhot',0);
cList.add('HTN','Hotan(Hetian)',0);
cList.add('JMU','Jiamusi',0);
cList.add('KNC','Jian',0);
cList.add('JGN','Jiayuguan',0);
cList.add('JIL','Jilin',0);
cList.add('TNA','Jinan',0);
cList.add('JDZ','Jingdezhen',0);
cList.add('JHG','Jinghong',0);
cList.add('JNG','Jining',0);
cList.add('JJN','Jinjiang',0);
cList.add('JNZ','Jinzhou',0);
cList.add('JIU','Jiujiang',0);
cList.add('CHW','Jiuquan',0);
cList.add('JZH','Jiuzhaigou',0);
cList.add('JUZ','Juzhou',0);
cList.add('KRY','Karamay',0);
cList.add('KHG','Kashgar',0);
cList.add('KRL','Korla',0);
cList.add('KMG','Kunming',0);
cList.add('KCA','Kuqa',0);
cList.add('LHW','Lanzhou',0);
cList.add('LXA','Lhasa',0);
cList.add('LYG','Lianyungang',0);
cList.add('LJG','Lijiang',0);
cList.add('LYI','Linyi',0);
cList.add('LZH','Liuzhou',0);
cList.add('LYA','Luoyang',0);
cList.add('LUM','Luxi',0);
cList.add('LZO','Luzhou',0);
cList.add('NZH','Manzhouli',0);
cList.add('MXZ','Meixian',0);
cList.add('MIG','Mianyang',0);
cList.add('MDG','Mudanjiang',0);
cList.add('KHN','Nanchang',0);
cList.add('NAO','Nanchong',0);
cList.add('NKG','Nanjing',0);
cList.add('NNG','Nanning',1);
cList.add('NTG','Nantong',0);
cList.add('NNY','Nanyang',0);
cList.add('NGB','Ningbo',0);
cList.add('IQM','Qiemo',0);
cList.add('TAO','Qingdao',1);
cList.add('IQN','Qingyang',0);
cList.add('SHP','Qinhuangdao',0);
cList.add('NDG','Qiqihar',0);
cList.add('JJN','Quanzhou',0);
cList.add('SYX','Sanya',0);
cList.add('SWA','Shantou',0);
cList.add('SHA','Shanghai(Hongqiao)',1);
cList.add('PVG','Shanghai(Pudong)',1);
cList.add('SHS','Shashi',0);
cList.add('SHE','Shenyang',0);
cList.add('SZX','Shenzhen',0);
cList.add('SJW','Shijiazhuang',0);
cList.add('SYM','Simao',0);
cList.add('SZV','Suzhou',0);
cList.add('TCG','Tacheng',0);
cList.add('TYN','Taiyuan',0);
cList.add('HYN','Taizhou(Huangyan)',0);
cList.add('TSN','Tianjin',0);
cList.add('TNH','Tonghua',0);
cList.add('TGO','Tongliao',0);
cList.add('TEN','Tongren',0);
cList.add('TXN','Huangshan',0);
cList.add('HLH','Ulanhot',0);
cList.add('URC','Urumqi',0);
cList.add('WJD','Wangjiadun',0);
cList.add('WXN','Wanxian',0);
cList.add('WEF','Weifang',0);
cList.add('WEH','Weihai',0);
cList.add('WNZ','Wenzhou',0);
cList.add('WUH','Wuhan',0);
cList.add('WUX','Wuxi',0);
cList.add('WUS','Wuyishan',0);
cList.add('WUZ','Wuzhou',0);
cList.add('XIY','Xian',0);
cList.add('XMN','Xiamen',0);
cList.add('XFN','Xiangfan',0);
cList.add('XIC','Xichang',0);
cList.add('XIL','Xilinhot',0);
cList.add('XNN','Xining',0);
cList.add('XUZ','Xuzhou',0);
cList.add('ENY','Yanan',0);
cList.add('YNZ','Yancheng',0);
cList.add('YNJ','Yanji',0);
cList.add('YNT','Yantai',0);
cList.add('YBP','Yibin',0);
cList.add('YIH','Yichang',0);
cList.add('INC','Yinchuan',0);
cList.add('YIN','Yining',0);
cList.add('YIW','Yiwu',0);
cList.add('UYN','Yulin',0);
cList.add('YCU','Yuncheng',0);
cList.add('DYG','Zhangjiajie',0);
cList.add('ZHA','Zhanjiang',0);
cList.add('ZAT','Zhaotong',0);
cList.add('CGO','Zhengzhou',0);
cList.add('HSN','Zhoushan',0);
cList.add('ZUH','Zhuhai',0);
cList.add('ZYI','Zunyi',0);

	/*
 ** public function --------------------------------------------
*/
function $obj(element){
    if (typeof element == "string"){
		return document.getElementById(element);
	}else{
		return null;
	}
}

function cElement(tagName){
	return document.createElement(tagName);
}
function offsetPosition(oObj){
 	var left = oObj.offsetLeft;
	var top = oObj.offsetTop;
	var oObjHeight = oObj.offsetHeight;

	var valueT = 0, valueL = 0;
    do {
      valueT += oObj.offsetTop  || 0;
      valueL += oObj.offsetLeft || 0;
      oObj = oObj.offsetParent;
    } while (oObj);
	 
	return {"left":valueL,"top": valueT + oObjHeight};
}

String.prototype.trim = function(){return this.replace(/(^\s+)|\s+$/g,"");};   
  
var selectMsg =  "Please input a city or select one from the list!";
var noRecordMsg = "The city you input doesn't exist, please input or select a valid one!";
function focusEle(inputObj){
	this.div = null;
	this.iframe = null;
	this.inputObj  = inputObj;
	
	var div = cElement("div");

	var msgDiv = cElement("div");
		msgDiv.innerHTML = selectMsg;
	
    this.msgDiv = msgDiv;
	
	var objIframe = cElement("iframe");
	objIframe.src = "frame/js/box1.asp";
	objIframe.frameBorder = 0;
	objIframe.width = "168px";
	objIframe.height = "180px";
	
	with (msgDiv.style){
		width = objIframe.width + "px";
		backgroundColor = "#FFFAE4";
		color = "#F10112";
		wordWrap = "break-word";
		display = "none";
	}
	
	div.appendChild(msgDiv);
	div.appendChild(objIframe);

    this.div = div;
	this.iframe = objIframe;
	
	document.body.appendChild(div);
	var poxx = offsetPosition(inputObj);
	with (div.style){
		display = "none";
		position = "absolute";
		margin = "1px 0 0 0";
	}
}
	
function reFocus(){
	this.foucsIndex = -1;
	
	this.listDB = [];
	
	this.create = function (inputObj){
	    inputObj = $obj(inputObj);
		var fe = new focusEle(inputObj);
		var leng = this.listDB.length;
		this.listDB[leng] = {};
		object = this;
		this.listDB[leng].Obj = fe;
		this.listDB[leng].inputObj = inputObj;
		object.listDB[leng].isfocus = 0;
		
		inputObj.autocomplete = "off";
		inputObj.onkeydown = function (event){
		   e=window.event?window.event:arguments[0];
		   var inputKeyCode = e.keyCode || e.which;
			try {
				 if (object.listDB[object.focusIndex].Obj.div.style.display == "none"){
					object.initEvent(object.focusIndex);
				}
			}catch (e){
				return false;
			}	   
           // 监听向上键
		   if (inputKeyCode == 38) {	
		   		object.keysUp();
				return false;
		   }
		  // 监听向下键
		   if (inputKeyCode == 40){
		  		object.keysDown();
				return false;
		   }
		   // enter 键
		   if (inputKeyCode == 13){
				var childNodes = object.listDB[leng].resultObj.getElementsByTagName("li");
				if (childNodes.length > 0){
					object.listDB[object.focusIndex].inputObj.value = childNodes[object.listDB[object.focusIndex].cursor].innerHTML;
				}
				object.closeShowBox(object.focusIndex);
		   		return false;
			}
		}
		inputObj.onclick = function (){
			this.select();
			object.initEvent(leng);
		}
		inputObj.onfocus = function (){
			object.initEvent(leng);
		}	
	}
	
	this.initEvent = function (leng){
		object.focusIndex = leng;
		object.checkFocus(leng);
		
		object.listDB[leng].Obj.div.style.display = "block";
		object.listDB[leng].isfocus = 0;
		object.listDB[leng].isBlur = 0;
		object.listDB[leng].lastValue = "";
						
		try {
			object.listDB[leng].resultObj = object.listDB[leng].Obj.iframe.contentWindow.getObject();
		}catch (e){
			return false;
		}
		
		var poxx = offsetPosition(object.listDB[leng].inputObj);
		with (object.listDB[leng].Obj.div.style){
			top = poxx.top + "px";
			left = poxx.left + "px";
			position = "absolute";
			padding = "1px";
			background = "#FFFFFF";
			border = "1px solid #D5C065";
		}
		
		document.onclick = function (){
			object.listDB[leng].Obj.div.style.display = "block";
		}
		
		object.listDB[leng].inputObj.onblur = function (){
			object.listDB[leng].isBlur = 1;
			object.checkBlur(leng);
		}
		
		object.listDB[leng].Obj.div.onmouseover = function (){
			object.listDB[leng].isfocus = 1;
		}
		
		object.listDB[leng].Obj.div.onmouseout = function (){
			object.listDB[leng].isfocus = 0;
			document.onclick = function (){
				object.listDB[leng].Obj.div.style.display = "none";
			}
		}
		
		if (object.listDB[leng].inputObj.value == ""){
			object.hotCity();
		}
		object.listDB[leng].intervalHandle = window.setInterval(object.filter,100);
	}
	
	this.filter = function (){
		inputValue = object.listDB[object.focusIndex].inputObj.value;
		lastValue = object.listDB[object.focusIndex].lastValue;
		
		if (inputValue != lastValue){
			list = cElement("ul");
			var cNum = 0;
			var div = cElement("div");
			var inputLeng = inputValue.length;
			
			object.listDB[object.focusIndex].lastValue = inputValue;		
			for(var i =0; i<cList.cityArr.length;i++){
				if (cList.cityArr[i].text.substr(0,inputLeng).toLowerCase() == inputValue.toLowerCase() || cList.cityArr[i].value.substr(0,inputLeng).toLowerCase() == inputValue.toLowerCase()){
					var lis = document.createElement("li");
						lis.innerHTML = cList.cityArr[i].text;
						lis.setAttribute ("va",cList.cityArr[i].value);
						list.appendChild(lis);
						cNum ++;
				}
			}
			
			if (cNum>0){
				if (object.listDB[object.focusIndex].inputObj.value == ""){
					object.listDB[object.focusIndex].Obj.msgDiv.innerHTML = selectMsg;
					object.hotCity();
				}
				div.appendChild(list);

				object.listDB[object.focusIndex].resultObj.innerHTML = div.innerHTML;
				object.listDB[object.focusIndex].cursor = 0;
				object.displayResult();
			}else{
				
				object.listDB[object.focusIndex].Obj.msgDiv.innerHTML = noRecordMsg;
			}
		}
	}
	
	this.hotCity = function (){
		list = cElement("ul");
		var cNum = 0;
		var div = cElement("div");
		
		for(var i =0; i<cList.cityArr.length;i++){
			if (cList.cityArr[i].isHot == 1){
				var lis = document.createElement("li");
				lis.innerHTML = cList.cityArr[i].text;
				lis.setAttribute ("va",cList.cityArr[i].value);
				list.appendChild(lis);
				cNum ++;
			}	
		}
		div.appendChild(list);

		object.listDB[object.focusIndex].resultObj.innerHTML = div.innerHTML;
		object.listDB[object.focusIndex].cursor = 0;
		object.displayResult();
	}
	
	this.displayResult = function (){
		var childNodes = object.listDB[object.focusIndex].resultObj.getElementsByTagName("li");
		
		for ( var i = 0;i<childNodes.length;i++){
			childNodes[i].setAttribute("idx",i);
			with (childNodes[i].style){
					padding ="2px 0 2px 3px";
					color = "#686868";
			}
			childNodes[i].onmouseover = function (){
				var childNodes = object.listDB[object.focusIndex].resultObj.getElementsByTagName("li");
				childNodes[object.listDB[object.focusIndex].cursor].onmouseout();
				
				object.listDB[object.focusIndex].cursor = this.getAttribute("idx");
				with (this.style){
					backgroundColor = "#FFEAAB";
					color = "#8F2C0F";
				}
			}
			
			childNodes[i].onmouseout = function (){
				with (this.style){
					backgroundColor = "#FFFFFF";
					color = "#686868";
				}
			}
			
			childNodes[i].onclick = function (){
				object.listDB[object.focusIndex].inputObj.value = this.innerHTML;
				object.closeShowBox(object.focusIndex);
			}
		}	
		childNodes[0].onmouseover();
	}

	/*
	 ** 向上 向下 键盘动作区 
	*/
	this.keysUp = function (){
		var childNodes = object.listDB[object.focusIndex].resultObj.getElementsByTagName("li");
		leng = childNodes.length;
		
		childNodes[object.listDB[object.focusIndex].cursor].onmouseout();
		
		if (object.listDB[object.focusIndex].cursor> 0){
			object.listDB[object.focusIndex].cursor --;
			childNodes[object.listDB[object.focusIndex].cursor].onmouseover();
		}else{
		
			object.listDB[object.focusIndex].cursor = leng-1;
			childNodes[object.listDB[object.focusIndex].cursor].onmouseover();
		}
	
	}
	
	this.keysDown = function (){
		
		var childNodes = object.listDB[object.focusIndex].resultObj.getElementsByTagName("li");
		leng = childNodes.length;
		
		childNodes[object.listDB[object.focusIndex].cursor].onmouseout();
		
		if (object.listDB[object.focusIndex].cursor <leng-1){
			object.listDB[object.focusIndex].cursor ++;
			childNodes[object.listDB[object.focusIndex].cursor].onmouseover();
		}else{
		
			object.listDB[object.focusIndex].cursor = 0;
			childNodes[object.listDB[object.focusIndex].cursor].onmouseover();
		}
	}
	
	this.checkFocus = function (leng){
		for (var i = 0;i<this.listDB.length;i++){
			if (i != leng){
				this.closeShowBox(i);
			}
		}
	}
	
	this.checkBlur = function (leng){
		if(this.listDB[leng].isfocus != 1){
			this.closeShowBox(leng);
		}	
	}
	
	this.closeShowBox  = function (leng){
		window.clearInterval(object.listDB[leng].intervalHandle);
		object.listDB[leng].Obj.div.style.display = "none";
		document.onclick = function (){
			object.listDB[leng].Obj.div.style.display = "none";
		}
	}
}
	