

var cityData =    "Beijing|北京|1@Shanghai|上海|2@Tianjin|天津|3@Guangzhou|广州|4@Shenzhen|深圳|4@Zhuhai|珠海|4@Shantou|汕头|4@Huizhou|惠州|4@Dongguan|东莞|4@Zhongshan|中山|4@Foshan|佛山|4@Zhanjiang|湛江|4@Yunfu|云浮|4@Conghua|从化|4@Jieyang|揭阳|4@Meizhou|梅州|4@Zhaoqing|肇庆|4@Shanwei|汕尾|4@Shaoguan|韶关|4@Panyu|番禺|4@Maoming|茂名|4@Chaozhou|潮阳|4@Jiangmen|江门|4@Sanshui|三水|4@Heyuan|河源|4@Gaoming|高明|4@Qingyuan|清远|4@Chaozhou|潮州|4@Zengcheng|增城|4@Yangjiang|阳江|4@Nanhai|南海|4@Hangzhou|杭州|5@|Ningbo|宁波|5@Jiaxing|嘉兴|5@Huzhou|湖州|5@Shaoxing|绍兴|5@Jinhua|金华|5@Quzhou|衢州|5@Zhoushan|舟山|5@Wenzhou|温州|5@Taizhou|台州|5@Shengzhou|嵊州|5@Lishui|丽水@Nanjing|南京|6@Xuzhou|徐州|6@Lianyungang|连云港|6@Huaian|淮安|6@Suqian|宿迁|6@Yancheng|盐城|6@Yangzhou|扬州|6@Nantong|南通|6@Zhenjiang|镇江|6@Changzhou|常州|6@Wuxi|无锡|6@Suzhou|苏州|6@Changshu|常熟|6@Zhunyin|准阴|6@Huaiyin|淮阴|6@Qinzhou|泰州|6@Zhangjiagang|张家港|6@Jinan|济南|7@Qingdao|青岛|7@Zibo|淄博|7@Weifang|潍坊|7@Yantai|烟台|7@Weihai|威海|7@Rizhao|日照|7@Dezhou|德州|7@Binzhou|滨州|7@Taian|泰安|7@Dongying|东营|7@Jining|济宁|7@Liaocheng|聊城|7@Laiwu|莱芜|7@Zaozhuang|枣庄|7@Linyi|临沂|7@Heze|菏泽|7@Chengdu|成都|8@Panzhihua|攀枝花|8@Deyang|德阳|8@Mianyang|绵阳|8@Zigong|自贡|8@Neijiang|内江|8@Leshan|乐山|8@Luzhou|泸州|8@Yibin|宜宾|8@Yaan|雅安|8@Ganzi|甘孜|8@Aba|阿坝|8@Kangding|康定|8@Maerkang|马尔康|8@Fuling|涪陵|8@Dazhou|达州|8@Xichang|西昌|8@Suining|遂宁|8@Ziyang|资阳|8@Liangshan|凉山|8@Guangan|广安|8@Guangyuan|广元|8@Dachuan|达川|8@Meishan|眉山|8@Bazhong|巴中|8@Nanchong|南充|8@Qianjiang|黔江|9@Chongqing|重庆|9@Wanzhou|万州|9@Fuling|涪陵|9@Fuzhou|福州|10@Xiamen|厦门|10@Sanming|三明|10@Putian|莆田|10@Quanzhou|泉州|10@Zhangzhou|漳州|10@Nanping|南平|10@Ningde|宁德|10@Longyan|龙岩|10@Wuhan|武汉|11@Xiangfan|襄樊|11@Shiyan|十堰|11@Yichang|宜昌|11@Jingmen|荆门|11@Xiaogan|孝感|11@Huanggang|黄岗|11@Enshi|恩施|11@Jianghan|江汉|11@Xianning|咸宁|11@Tianmen|天门|11@Jiangling|江陵|11@Jingzhou|荆州|11@Huangshi|黄石|11@Ezhou|鄂州|11@Suizhou|随州|11@Changsha|长沙|12@Xiangtan|湘潭|12@Hengyang|衡阳|12@Yueyang|岳阳|12@Changzhou|常德|12@Chenzhou|郴州|12@Yiyang|益阳|12@Huaihua|怀化|12@Zhangjiajie|张家界|12@Shaoyang|邵阳|12@Jishou|吉首|12@Loudi|娄底|12@Anyang|安阳|12@Yongzhou|永州|12@Zizhizhou|自治州|12@Zhuzhou|株洲|12@Nanchang|南昌|13@Jingdezhen|景德镇|13@Xinyu|新余|13@Jiujiang|九江|13@Yingtan|鹰潭|13@Shangrao|上饶|13@Yichun|宜春|13@Jian|吉安|13@Ganzhou|赣州|13@Fuzhou|抚州|13@Pingxiang|萍乡|13@Zhengzhou|郑州|14@Kaifeng|开封|14@Luoyang|洛阳|14@Xinxiang|新乡|14@Puyang|濮阳|14@Shangqiu|商丘|14@Nanyang|南阳|14@Zhoukou|周口|14@Hebi|鹤壁|14@Anyang|安阳|14@Jiaozuo|焦作|14@Huangchuan|潢川|14@Xinyang|信阳|14@Zhumadian|驻马店|14@Sanmenxia|三门峡|14@Xuchang|许昌|14@Luohe|漯河|14@Pingdingshan|平顶山|14@Gongyi|巩义|14Shijiazhuang|石家庄|15@Handan|邯郸|15@Xingtai|邢台|15@Baoding|保定|15@Zhangjiakou|张家口|15@Chengde|承德|15@Tangshan|唐山|15@Qinhuangdao|秦皇岛|15@Cangzhou|沧州|15@Langfang|廊坊|15@Hengshui|衡水|15@Shenyang|沈阳|16@Dalian|大连|16@Anshan|鞍山|16@Fushun|抚顺|16@Benxi|本溪|16@Dandong|丹东|16@Jinzhou|锦州|16@Yingkou|营口|16@Buxin|阜新|16@Liaoyang|辽阳|16@Tieling|铁岭|16@Panjin|盘锦|16@Huludao|葫芦岛|16@Chaoyang|朝阳|16@Jinxi|锦西|16@Hefei|合肥|17@Bengbu|蚌埠|17@Maanshan|马鞍山|17@Anqing|安庆|17@Huangshan|黄山|17@Suzhou|宿州|17@Chaohu|巢湖|17@Buyang|阜阳|17@Haozhou|毫州|17@Tongling|铜陵|17@Xuancheng|宣城|17@Suxian|宿县|17@Wuhu|芜湖|17@Liuan|六安|17@Chuzhou|滁州|17@Huaibei|淮北|17@Chizhou|池州|17@Huainan|淮南|17@Nanning|南宁|18@Liuzhou|柳州|18@Guilin|桂林|18@Beihai|北海|18@Wuzhou|梧州|18@Qinzhou|钦州|18@Fangchenggang|防城港|18@Yulin|玉林|18@Hechi|河池|18@Fangcheng|防城|18@Guigang|贵港|18@Baise|百色|18@Hezhou|贺州|18@Xian|西安|19@Tongzhou|铜川|19@Baoji|宝鸡|19@Weinan|渭南|19@Shangzhou|商州|19@Shangluo|商洛|19@Yanan|延安|19@Yulin|榆林|19@Hanzhong|汉中|19@Xianyang|咸阳|19@Ankang|安康|19@Kunming|昆明|20@Zhaotong|昭通|20@Qujing|曲靖|20@Simao|思茅|20@Lijiang|丽江|20@Chuxiong|楚雄|20@Dehong|德宏|20@Yuxi|玉溪|20@Banna|版纳|20@Honghe|红河|20@Jinghong|景洪|20@Liuku|六库|20@Wenshan|文山|20@Xianggelila|香格里拉|20@Dali|大理|20@Baoshan|保山|20@Zhongdian|中甸|20@Diqing|迪庆|20@Luxi|潞西|20@Gejiu|个旧|20@Diqingzhou|迪庆州|20@Lincang|临沧|20@Nujiang|怒江|20@Haerbin|哈尔滨|21@Qiqihaer|齐齐哈尔|21@Daqing|大庆|21@Yichun|伊春|21@Mudanjiang|牡丹江|21@Jiamusi|佳木斯|21@Suihua|绥化|21@Heihe|黑河|21@Jixi|鸡西|21@Qitaihe|七台河|21@Shuangyashan|双鸭山|21@Hegang|鹤岗|21@Daxinganlin|大兴安岭|21@Taiyuan|太原|22@Datong|大同|22@Yangquan|阳泉|22@Changzhi|长治|22@Shuozhou|朔州|22@Yuci|榆次|22@Linfen|临汾|22@Yuncheng|运城|22@Lishi|离石|22@Jinzhong|晋中|22@Xinzhou|忻州|22@Jincheng|晋城|22@Lvliang|吕梁|22@Changchun|长春|23@Jilin|吉林|23@Siping|四平|23@Liaoyuan|辽源|23@Tonghua|通化|23@Yanji|延吉|23@Huichun|珲春|23@Meihekou|梅河口|23@Baicheng|白城|23@Baishan|白山|23@Songyuan|松源|23@Yanbian|延边|23@Songyuan|松原|23@Guiyang|贵阳|24@Zunyi|遵义|24@Anshun|安顺|24@Liupanshui|六盘水|24@Tongren|铜仁|24@Qiandongnan|黔东南|24@Xiangyi|兴义|24@Kaili|凯里|24@Bijie|毕节|24@Qiannan|黔南|24@Douyun|都匀|24@Qianxinan|黔西南|24@Lanzhou|兰州|25@Jinchang|金昌|25@Tianshui|天水|25@Pingliang|平凉|25@Linxia|临夏|25@Baiyin|白银|25@Longnan|陇南|25@Dingxi|定西|25@Zhangye|张掖|25@Jiayuguan|嘉峪关|25@Jiuquan|酒泉|25@Wuwei|武威|25@Qingyang|庆阳|25@Gannanzhou|甘南州|25@Huhehaote|呼和浩特|26@Baotou|包头|26@Tongliao|通辽|26@Wulanhaote|乌兰浩特|26@Linhe|临河|26@Hailaer|海拉尔|26@Alashanzuo|阿拉善左|26@Wuhai|乌海|26@Jining|集宁|26@Chifeng|赤峰|26@Eerduosi|鄂尔多斯|26@Xilinhaote|锡林浩特|26@Dongsheng|东胜|26@Keerqinyouyizhongqi|科尔沁右翼中旗|26@Bayanhaote|巴彦浩特|26@Alashanzuoqi|阿拉善左旗|26@Lasa|拉萨|27@Rikeze|日喀则|27@Ali|阿里|27@Naqu|那曲|27@Shannan|山南|27@Linzhi|林芝|27@Zedang|泽当|27@Gaer|噶尔|27@Changdu|昌都|27@Yinchuan|银川|28@Shizuishan|石嘴山|28@Yinbei|银北|28@Shijushan|石咀山|28@Yinnan|银南|28@Wuzhong|吴忠|28@Guyuan|固原|28@Xining|西宁|29@Pingan|平安|29@Geermu|格尔木|29@Maqin|玛沁|29@Haidong|海东|29@Yushu|玉树|29@Gonghe|共和|29@Hainan|海南|29@Huangnan|黄南|29@Beihai|海北|29@Delingha|德令哈|29@Haixi|海西|29@Guoluo|果洛|29@Tongren|同仁|29@Menyuan|门源|29@Haiyan|海晏|29@Wulumuqi|乌鲁木齐|30@Kelamayi|克拉玛依|30@Tulufan|吐鲁番|30@Kashi|喀什|30@Atushi|阿图什|30@Kuerle|库尔勒|30@Yili|伊犁|30@Hetian|和田|30@Kuitun|奎屯|30@Hami|哈密|30@Bole|博乐|30@Tacheng|塔城|30@Bozhou|博州|30@Akesu|阿克苏|30@Aletai|阿勒泰|30@Changji|昌吉|30@Yining|伊宁|30@Shihezi|石河子|30@Kezhou|克州|30@Gehui|咯会|30@Haikou|海口|31@Sanya|三亚|31@Zhanzhou|儋州|31"




var hotData = "Beijing|北京|1@Shanghai|上海|2@Shenzhen|深圳|4@Guangzhou|广州|4@Wuhan|武汉|11@Changsha|长沙|12@Nanjing|南京|6@Chongqing|重庆|9";

var shengData = "Beijing|北京(省)|1@Shanghai|上海(省)|2@Tianjin|天津(省)|3@Guangdong|广东(省)|4@Zhejiang|浙江(省)|5@Jiangsu|江苏(省)|6@Shandong|山东(省)|7@Sichuan|四川(省)|8@Chongqing|重庆(省)|9@Fujian|福建(省)|10@Hubei|湖北(省)|11@Hunan|湖南(省)|12@Jiangxi|江西(省)|13@Henan|河南(省)|14@Hebei|河北(省)|15@Liaoning|辽宁(省)|16@Anhui|安徽(省)|17@Guangxi|广西(省)|18@Shanxi|陕西(省)|19@Yunnan|云南(省)|20@Heilongjiang|黑龙江(省)|21@Shanxi|山西(省)|22@Jilin|吉林(省)|23@Guizhou|贵州(省)|24@Gansu|甘肃(省)|25@Neimenggu|内蒙古(省)|26@Xizang|西藏(省)|27@Ningxia|宁夏(省)|28@Qinghai|青海(省)|29@Xinjiang|新疆(省)|30@Hainan|海南(省)|31@Xianggang|香港(特区)|32@Aomen|澳门(特区)|33@Taiwan|台湾(省)|34";



var suggest = function(id,option,callBack){
	this.currItem = null;
	this.currData = this.formatData(cityData);
	this.shiData = this.formatData(cityData);
	this.shengData = this.formatData(shengData);
	this.commData = this.formatData(hotData);
	this.currSheng = false;
	this.lang = 0;
	this.run = false;
	this.templates = [];
	this.templates.push("<li sheng='@@city_sheng@@'><span class='sug_s1'>@@city_py@@</span><span class='sug_s2'>@@city_cn@@</span></li>");
	this.templates.push("<li sheng='@@city_sheng@@'><span class='sug_s1'>@@city_cn@@</span><span class='sug_s2'>@@city_py@@</span></li>");
	
	this.id = id;
	this.startValue = "输入地区名";
	this.obj = this.$(id);
	this.dom_cont = null;
	this.iframeBg = null;
	this.dom_list = null;
	
	this.initDom();
	this.setStartValue();
	this.initEvent();
	//this.buildItem();
	var styleSheet = [[".myForm li","{height:30px;line-height:30px;border-bottom:1px solid #EEE;position:relative;overflow:hidden}"],[".myForm li .sug_s1","{display:inline-block;padding:0 5px}"],[".myForm li .sug_s2","{display:inline-block;right:0;position:absolute;top:0;padding-right:20px}"]];
	//this.styleSheet(styleSheet,id);
	if(option){
		for(var p in option){
			this[p] = option[p];
		}	
	}
	
	if(callBack){
		callBack.call(this);
	}

};


suggest.prototype = {
	initDom:function(){
		this.setStyle(this.obj.parentNode,{position:"relative",zIndex:"9999"});
		//alert(this.obj.offsetLeft);
		this.createDom("div",{id:this.id+"_suggest"},{
					   height:"210px",
					   background:"#FFF",
					   width:"250px",
					   position:"absolute",
					   left:this.obj.offsetLeft + "px",
					   top:this.obj.offsetTop + this.obj.offsetHeight - 1 + "px",
					   overflow:"auto",
					   border:"1px solid #999",
					   fontFamily:"verdana",
					   zIndex:"800",
					   display:"none"
					  },this.obj.parentNode);
		this.dom_cont = this.$(this.id+"_suggest");
		this.dom_cont.className = "suggest_cont";
		if(window.navigator.userAgent.indexOf("MSIE 6.0")>=1){
			this.createDom("iframe",{id:this.id+"_iframeBg",frameborder:"0",src:"about:blank"},{filter:"alpha(opacity=0)",position:"absolute",width:"100%",height:"100%"},this.dom_cont);
			this.iframeBg = this.$(this.id+"iframeBg");
		}
		this.createDom("ul",{id:this.id+"_suggest_list"},{},this.dom_cont);
		this.dom_list = this.$(this.id+"_suggest_list");
	},
	initEvent:function(){
		this.addEvent(this.obj,"focus",this.bind(this,this.showComm));
		this.addEvent(this.obj,"keyup",this.bind(this,this.buildItem));
		this.addEvent(this.obj,"dblclick",this.bind(this,this.buildItem));
		this.addEvent(this.obj,"keydown",this.bind(this,this.keyDown));
		this.addEvent(this.dom_list,"click",this.bind(this,this._pushValue));
		this.addEvent(document,"click",this.bind(this,this.hidden));
	},
	_pushValue:function(e){
		var kc = e.keyCode;
		var o = this.currItem;
		var shi = o.getElementsByTagName("span")[0].innerHTML,sheng = "";
			shi = escape(shi).indexOf("%u") > -1 ? shi : o.getElementsByTagName("span")[1].innerHTML;
		var shengId = o.getAttribute("sheng");
		for(var i = 0,len = this.shengData.length;i<len;i++){
			if(this.shengData[i][2] == shengId){
				sheng = this.shengData[i][1];
				break;
			}
		}
		this.pushValue(sheng.replace("(省)",""),shi.replace("(省)",""));
	},
	pushValue:function(sheng,shi){
		this.obj.focus();
		this.obj.value = shi;
		this.setResult(sheng,shi);
		this.hidden();
		
	},
	setStartValue:function(){
		this.obj.value = this.startValue;
		this.obj.style.color = "#999";
	},
	setResult:function(sheng,shi){
		this.$("sheng").value = sheng;
		this.$("shi").value = shi;
	},
	showComm:function(){
		var value =this.obj.value.replace(/(^\s*)|(\s*$)/g,""); 
		if(value == "" || value == this.startValue){
			this.obj.value = "";
			this.buildItem(false,"");
			this.obj.focus();
		}
	},
	keyDown:function(e){
		var keyCode = e.keyCode || e.which;
		switch(keyCode){
			case 40:
				this.itemFocus(false,this.currItem.nextSibling || this.currItem);
			break;
			case 38:
				this.itemFocus(false,this.currItem.previousSibling || this.currItem);
			break;
			case 13:
				if(this.dom_cont.style.display != "none"){
					if(e.stopPropagation){
						e.stopPropagation();
						e.preventDefault();
					}else{
						e.cancelBubble = true;
						e.returnValue = false
					}
					this._pushValue(e);
					return false;	
				}
			default:
			break;
		}
	},
	buildItem:function(e,wd,top){
		if(e.keyCode || e.which){
			var keyCode = e.keyCode || e.which;
				if(keyCode == 40 || keyCode == 38 || keyCode == 13){
					return false;
				}
		}
		
		if(!top){
			this.setData(this.shiData);
		}else{
			this.setData(this.shengData);
		}
		var wd = wd || this.obj.value.replace(/(^\s*)|(\s*$)/g,""),data = this.currData.sort(),_arr = [],tpl = this.templates[0];
		var isComm = false;
		if(wd == ""){
			data = this.commData.sort();
			for(var i=0,len=data.length;i<len;i++){
				_arr.push(tpl.replace("@@city_py@@",data[i][0]).replace("@@city_cn@@",data[i][1]).replace("@@city_sheng@@",data[i][2])); 
			}
			isComm = true;
		}else{
			var lang = escape(wd).indexOf("%u") > -1 ? 1 : this.lang,tpl = this.templates[lang];
			for(var i=0,len=data.length;i<len;i++){
				if(data[i][lang].toLowerCase().indexOf(wd.toLowerCase()) == 0){
					_arr.push(tpl.replace("@@city_py@@",data[i][0]).replace("@@city_cn@@",data[i][1]).replace("@@city_sheng@@",data[i][2]));
				}
			}	
		}
		if(!top){
			var _arr2 = _arr.join(""),_arr3 = this.buildItem(false,wd,true);
			this.dom_list.innerHTML = _arr2 == _arr3 ? _arr2 : _arr2 + _arr3;
		}
		var doms  = this.dom_list.getElementsByTagName("li"),len = doms.length;
		for(var i=0;i<len;i++){
			this.addEvent(doms[i],"mouseover",this.bind(this,this.itemFocus,doms[i]));
			//this.addEvent(doms[i],"mouseout",this.bind(this,this.itemBlur,doms[i]));
		}
		if(len > 0){
			this.itemFocus(false,doms[0]);
			this.obj.style.color = "#000";
			this.show();
		}else if(this.shengData.length > 0 && !top){
			this.buildItem(false,wd,true);
		}
		if(top && len <= 0){
			this.hidden();
		}
		return _arr.join("");
		
	},
	setData:function(data){
		this.currData = data; 
	},
	setCommData:function(data){
		this.commData = data;
	},
	formatData:function(data){
		var _d = data.split("@"),_data = [];
		for(var i=0,len=_d.length;i<len;i++){
			_data.push(_d[i].split("|"));
		}
		return _data;
	},
	itemFocus:function(e,o){
		var el = !e ? o : e.srcElement || e.target;
			if(el.tagName.toLowerCase() != "li" && el.parentNode.tagName.toLowerCase() != "li"){
				return;
			}
		if(!!this.currItem){
			this.itemBlur(this.currItem);
		}
		this.currItem = o;
		o.style.background = "#3366CC";
		o.style.color = "#FFF";
		o.style.fontWeight = "700";
	},
	itemBlur:function(o){
		o.style.background = "#FFF";
		o.style.color = "#333";
		o.style.fontWeight = "normal";
	},
	show:function(){
		this.dom_cont.style.display = "";
		this.onShow();
	},
	hidden:function(e){
		if(e){
			var el = e.srcElement || e.target;
			if(el != this.obj && this.dom_cont.style.display != "none"){
				this.dom_cont.style.display = "none";
				this.onHidden();
				if(this.obj.value.replace(/(^\s*)|(\s*$)/g,"") == "" ){
					this.setStartValue();
				}
				return;
			}else{
				return;
			}
		}
		this.dom_cont.style.display = "none";
		this.onHidden();
	},
	onShow:function(){},
	onHidden:function(){},
	//工具函数
	//
	//
	//
	$:function(id){
		return typeof id == "string" ? document.getElementById(id) : id;
	},
	styleSheet:function(styleSheet){
		if(document.all){
			var sheet = document.createStyleSheet();
			for(var i=0,len = styleSheet.length;i<len;i++){
				sheet.addRule(styleSheet[i][0],styleSheet[i][1].replace("{","").replace("}",""));
			}
		}else{
			var str = [];
			for(var i=0,len = styleSheet.length;i<len;i++){
				str.push(styleSheet[i].join(""));
			}
				str = str.join("");
			var dom = document.createElement("style");
				dom.type = "text/css";
				dom.innerHTML = str;
			document.getElementsByTagName('head')[0].appendChild(dom);
				dom = null;
		}
	},
	setStyle:function(o,styles){
		for(var p in styles){
			o.style[p] = styles[p];
		}
	},
	setPro:function(o,pros){
		for(var p in pros){
			o.setAttribute(p,pros[p]);
		}
	},
	createDom:function(type,pros,styles,parNode){
		var dom = document.createElement(type);
		this.setPro(dom,pros);
		this.setStyle(dom,styles);
		if(parNode){parNode.appendChild(dom);dom = null;
		}else{
			return dom;
		}
	},
	addEvent:function(o,type,fn){
		if (o.addEventListener) {
			if(type == "mousewheel"){o.addEventListener("DOMMouseScroll",fn,false);}
			o.addEventListener(type,fn,false);
		}else if(o.attachEvent){o.attachEvent("on" + type,fn);
		} else {o["on" + type] = fn;
		}
	},
	removeEvent:function(o,type,fn){
		if (o.removeEventListener){o.removeEventListener(type,fn,false);
		}else if(o.detachEvent) {o.detachEvent("on" + type,fn);
		}else{o["on" + type] = null;
		}
	},
	bind:function(o,fn,arr){
		var arr = arr || [];
		return function(e){
				fn.apply(o,[e || window.event].concat(arr));
			};
	},
	browser:function(v){
        var ua = navigator.userAgent.toLowerCase(); 
        var s; 
        (s = ua.match(/msie/)) ? "msie" : 
        (s = ua.match(/firefox/)) ? "firefox" : 
        (s = ua.match(/chrome/)) ? "chrome" : 
        (s = ua.match(/opera/)) ? "opera" : 
        (s = ua.match(/safari/)) ? "safari" : ""; 
		if(v){
			return s.indexOf(v) >= 0 ? true : false;
		}
		return s;
	}
};



