var CityPicker=function(f,b,g,e,c,d,a){this.hidObj=a;this.dataSource=f;this.hotCityList=b;this.classAccord=g;this.txtObj=e;this.perPageNum=c;this.pagerNum=d;this.config={acountResult:[],sortResult:[],pickCity:null,hotCity:null,searchCity:null,pattern_1:"",pattern_2:"",pattern_3:"",pattern_4:"",txtValue:$.trim(this.txtObj.value),resultList:[],currentPage:0,isFirstFocus:true,isDisppear:true,objSelf:null};this._bindEventHandleForTxt()};CityPicker.prototype._generateHotCityContainer=function(){this.config.pickCity=document.createElement("div");this.config.pickCity.id="pickCity";this.config.pickCity.style.display="none";this.config.hotCity=document.createElement("div");this.config.hotCity.id="hotCity";this.config.hotCity.className="hot_city";this.config.hotCity.style.display="none";this.config.hotCity.innerHTML="<div class='hot_city_head'><strong>热门城市</strong>（可直接输入城市名或拼音）</div><div class='hot_city_list'><ul class='hot_city_tag'></ul><ul class='hot_city_name' style='display:block;'></ul><ul class='hot_city_name' style='display:none;'></ul><ul class='hot_city_name' style='display:none;'></ul><ul class='hot_city_name' style='display:none;'></ul><ul class='hot_city_name' style='display:none;'></ul><ul class='hot_city_name' style='display:none;'></ul></div>";this._initializeHotCity();this.config.pickCity.appendChild(this.config.hotCity);document.body.appendChild(this.config.pickCity)};CityPicker.prototype._generateSearchCityContainer=function(){this.config.searchCity=document.createElement("div");this.config.searchCity.id="searchCity";this.config.searchCity.className="customer_search";this.config.searchCity.style.display="none";this.config.searchCity.innerHTML='<div class="search_tips"><strong>杨永鹏</strong><span>按拼音排序</span></div><div class="search_result"></div><div class="search_pager"></div>'},CityPicker.prototype._caculateNumOnLetter=function(){var e=[];for(var c in this.classAccord){e.push(0)}for(var d in this.dataSource){var b=d;for(var a in this.classAccord){if(this.classAccord[a].charCodeAt(0)<=this.dataSource[b][2].charCodeAt(0)&&this.dataSource[b][2].charCodeAt(0)<=this.classAccord[a].charCodeAt(2)){e[a]++;break}}}return e},CityPicker.prototype._sortByASCII=function(b,a){var c=[];c.push(b[2]);c.push(a[2]);c.sort();if(c[0]==b[2]){return -1}else{return 1}};CityPicker.prototype._setTab=function(){var d="<li class='on'>热门</li>";for(var c in this.classAccord){var b="";for(var a=this.classAccord[c].charCodeAt(0);a<=this.classAccord[c].charCodeAt(2);a++){b+=String.fromCharCode(a)}d+="<li>"+b+"</li>"}$("ul.hot_city_tag",this.config.hotCity).html(d)};CityPicker.prototype._renderHotCity=function(){var b="";for(var a in this.hotCityList){b+="<li><a href='#' title=\""+this.hotCityList[a][0]+'">'+this.hotCityList[a][1]+"</a></li>"}$("ul.hot_city_name",this.config.hotCity,this.config.pickCity).eq(0).html(b)};CityPicker.prototype._renderTabCity=function(){for(var c in this.classAccord){var f=0;var d="";for(var b=0;b<c;b++){f+=this.config.acountResult[b]}var e=this.config.sortResult.slice(f,f+this.config.acountResult[c]);for(var a in e){d+='<li title="'+e[a][1]+"\"><a href='#' title=\""+e[a][0]+'">'+e[a][1]+"</a></li>"}$("ul.hot_city_name",this.config.hotCity,this.config.pickCity).eq(parseInt(c)+1).html(d)}};CityPicker.prototype._bindEventHandleForTab=function(){var a=this;(function(){$(".hot_city_tag li",a.config.hotCity).each(function(c){var b=c;$(this).bind("mousedown",function(d){if($(this).hasClass("on")){return}$(".hot_city_tag li.on",a.config.hotCity).removeClass("on");$(this).addClass("on");$(".hot_city_name:visible",a.config.hotCity).hide();$("ul.hot_city_name",a.config.hotCity).eq(b).show()})})})()},CityPicker.prototype._selectElementClickHandle=function(a,c){var b=this;a.onmousedown=function(d){b.config.isDisppear=false;if(/msie/i.test(navigator.userAgent)){}else{$(b.txtObj).blur()}b.stopEvent(d)};$(c).each(function(){$(this).bind("mousedown",function(d){$(b.txtObj).val($("a",this).text());if(b.hidObj){$(b.hidObj).val($("a",this).attr("title"))}$(b.txtObj).blur();b.stopEvent(d)})})},CityPicker.prototype._initializeHotCity=function(){this.config.acountResult=this._caculateNumOnLetter();this.config.sortResult=this.dataSource.sort(this._sortByASCII);this._setTab();this._renderHotCity();this._renderTabCity();this._bindEventHandleForTab();this._selectElementClickHandle(this.config.hotCity,$("ul.hot_city_name li",this.config.hotCity))},CityPicker.prototype._generatePattern=function(){var e="";var c="";var a="";if(new RegExp("[\\u4e00-\\u9fa5]","g").test(this.txtObj.value)){for(var d=0;d<this.txtObj.value.length;d++){a+="("+this.txtObj.value.charAt(d)+")[\\u4e00-\\u9fa5]*?"}this.config.pattern_3=new RegExp(a,"g");this.config.pattern_4=new RegExp(this.txtObj.value+"[\\u4e00-\\u9fa5]*?","g");return}else{for(var b=0;b<this.txtObj.value.length;b++){e+="("+this.txtObj.value.toUpperCase().charAt(b)+")[A-z]*"}c+=(this.txtObj.value)+"[A-z]*?";this.config.pattern_1=new RegExp(e,"g");this.config.pattern_2=new RegExp(c,"gi")}},CityPicker.prototype._matchContent=function(e){var d=e.toString();d=d.split(",");var a;if(this.config.pattern_4&&d[1].search(this.config.pattern_4)>=0){a=d[1];a=a.replace(this.txtObj.value,this.txtObj.value.fontcolor("red"));d[1]=a;return d}else{if(this.config.pattern_3&&d[1].search(this.config.pattern_3)>=0){a=d[1];for(var b=0;b<this.txtObj.value.length;b++){var c=new RegExp(this.txtObj.value.charAt(b),"g");a=a.replace(c,this.txtObj.value.charAt(b).fontcolor("red"))}d[1]=a;return d}else{if(this.txtObj.value&&e[2].search(this.config.pattern_1)>=0){a=d[2];for(b=0;b<this.txtObj.value.length;b++){var c=new RegExp(this.txtObj.value.charAt(b).toUpperCase(),"g");a=a.replace(c,"<font color='#ff6600'>"+this.txtObj.value.charAt(b).toUpperCase()+"</font>")}d[2]=a;return d}else{if(this.txtObj.value&&e[2].search(this.config.pattern_2)>=0){a=d[2];var c=new RegExp("("+this.txtObj.value+")","gi");a=a.replace(c,("$1").fontcolor("#ff6600"));d[2]=a;return d}}}}},CityPicker.prototype._getAllPageNum=function(){return Math.ceil(this.config.resultList.length/this.perPageNum)},CityPicker.prototype._generateInterval=function(b){var c=0,a=0;if(this.config.currentPage<=2){c=0;a=Math.min(c+this.pagerNum-1,b)}if(this.config.currentPage>2){c=(b<=this.pagerNum-1)?0:((b-this.config.currentPage)<=Math.floor(this.pagerNum/2)?(b-this.pagerNum+1):this.config.currentPage-2);a=Math.min(c+this.pagerNum-1,b)}return{start:c,end:a}},CityPicker.prototype._generatePager=function(){var c=this._generateInterval(this._getAllPageNum()-1);var a="";if(this.config.currentPage>0){a+="<a href='#' id='prev'>&lt;&lt;</a>"}for(var b=c.start;b<=c.end;b++){if(b==this.config.currentPage){a+="<a href='#' class='on'>"+(b+1)+"</a>";continue}a+="<a href='#'>"+(b+1)+"</a>"}if(this.config.currentPage<this._getAllPageNum()-1){a+="<a href='#' id='next'>&gt;&gt;</a>"}$("div.search_pager",this.config.searchCity,this.config.pickCity).html(a);this._pageClickHandle()},CityPicker.prototype._pageClickHandle=function(){var a=this;$("div.search_pager a",this.config.searchCity,this.config.pickCity).each(function(){$(this).bind("mousedown",function(){if(this.id=="prev"){a.config.currentPage=a.config.currentPage-1}else{if(this.id=="next"){a.config.currentPage=a.config.currentPage+1}else{if(this.className!="on"){a.config.currentPage=parseInt(this.innerHTML)-1}else{return}}}a._searchEntry();document.getElementById("pickCity").appendChild(config.searchCity)})})};CityPicker.prototype._generateHeadTips=function(){if(this.config.resultList.length!=0){$("div.search_tips",this.config.searchCity).html('<strong class="padd_r_10">'+this.txtObj.value+"</strong><span>按拼音排序</span>")}else{$("div.search_tips",this.config.searchCity).html('<span>对不起，没有查到您输入的</span><strong class="padd_l_10">'+this.txtObj.value+"</strong>")}};CityPicker.prototype._literate=function(b){for(i=0;i<b.length;i++){var a=null;if(a=this._matchContent(b[i])){this.config.resultList.push(a)}}},CityPicker.prototype._generateSearchResult=function(){var e=0;var b=0;e=this.config.currentPage*this.perPageNum;b=Math.min(e+this.perPageNum,this.config.resultList.length);var d=this.config.resultList.slice(e,b);var a="<ul>";for(var c=0;c<b-e;c++){if(c==0){a+="<li class='on' ><a href='#' title=\""+d[c][0]+'">'+d[c][1]+"</a><span>"+d[c][2]+"</span></li>";continue}a+="<li ><a href='#' title=\""+d[c][0]+'">'+d[c][1]+"</a><span>"+d[c][2]+"</span></li>"}a+="</ul>";if(this.config.resultList.length!=0){$("div.search_result",this.config.searchCity,this.config.pickCity).html(a)}this._selectElementClickHandle(this.config.searchCity,$("div.search_result li",this.config.searchCity));this._bindHoverForsearchCity()},CityPicker.prototype._bindHoverForsearchCity=function(){$("div.search_result li",this.config.searchCity).each(function(b){var a=b;this.onmouseover=function(){$(this).siblings(".on").removeClass("on");this.className="on"}})};CityPicker.prototype._keyDown=function(a){var b=this.getEvent(a);switch(b.keyCode||b.which||b.charCode){case 37:this._shortcutLeftOrRight("left");this.stopEvent(b);break;case 39:this._shortcutLeftOrRight("right");this.stopEvent(b);break;case 38:this._shortcutDownOrUp("up");break;case 40:this._shortcutDownOrUp("down");break;default:}},CityPicker.prototype._keyUp=function(a){var a=this.getEvent(a);switch(a.keyCode){case 13:if(document.getElementById("searchCity")&&document.getElementById("searchCity").style.disable!="none"){this.txtObj.value=$("div.search_result li.on a",this.config.searchCity,this.config.pickCity).text();if(this.hidObj){this.hidObj.value=$("div.search_result li.on a",this.config.searchCity,this.config.pickCity).attr("title")}this.txtObj.blur()}break;default:this.stopEvent(a)}},CityPicker.prototype._onFocus=function(a){var b=this.getEvent(a);if(this.config.isFirstFocus){if(!document.getElementById("hotCity")){this._generateHotCityContainer()}this.txtObj.select();this.config.pickCity.style.display="block";this._setPosition();this.config.hotCity.style.display="block";if(document.getElementById("searchCity")){this.config.searchCity.style.display="none"}}else{this.config.pickCity.style.display="block";this._setPosition();this.config.hotCity.style.display="none";this.config.searchCity.style.display="block"}},CityPicker.prototype._onBlur=function(b){var a=this;var c=a.getEvent(b);if(!this.config.isDisppear){this.config.isDisppear=true;setTimeout(function(){$(a.txtObj).focus()},0);return}this.config.pickCity.style.display="none";this.config.isFirstFocus=true;this.config.resultList=[];if(document.getElementById("pickCity")){document.body.removeChild(document.getElementById("pickCity"))}},CityPicker.prototype._shortcutDownOrUp=function(b){if(b=="down"){var a=$(".search_result li.on");a.removeClass("on");if(a.next().length!=0){a.next().addClass("on")}else{$(".search_result li").eq(0).addClass("on")}}if(b=="up"){var a=$(".search_result li.on");a.removeClass("on");if(a.prev().length!=0){a.prev().addClass("on")}else{$(".search_result li").eq($(".search_result li").length-1).addClass("on")}}},CityPicker.prototype._shortcutLeftOrRight=function(a){if(a=="left"){this.config.currentPage=Math.max(this.config.currentPage-1,0)}else{this.config.currentPage=Math.min(this.config.currentPage+1,this._getAllPageNum()-1)}this._searchEntry();document.getElementById("pickCity").appendChild(this.config.searchCity)},CityPicker.prototype._renderSearchResultUI=function(){this._generateHeadTips();this._generateSearchResult();this._generatePager()},CityPicker.prototype._recoverVariableValue=function(){this.config.pattern_1=null;this.config.pattern_2=null;this.config.pattern_3=null;this.config.pattern_4=null;this.config.resultList=[];if(this.config.txtValue!=$.trim($(this.txtObj).val())){this.config.txtValue=$(this.txtObj).val();this.config.currentPage=0}},CityPicker.prototype._searchEntry=function(){this._recoverVariableValue();this._generatePattern();this._literate(this.dataSource);this._renderSearchResultUI()},CityPicker.prototype._setPosition=function(){var a=this.txtObj;if(!a||!a.ownerDocument){return null}var h={left:0,top:0};if("getBoundingClientRect" in document.documentElement){var b=a.getBoundingClientRect(),j=a.ownerDocument,c=j.body,m=j.documentElement,n=m.clientTop||c.clientTop||0,f=m.clientLeft||c.clientLeft||0;h.left=b.left+(self.pageXOffset||l&&m.scrollLeft||c.scrollLeft)-f;h.top=b.top+(self.pageYOffset||l&&m.scrollTop||c.scrollTop)-n}else{var k=0,g=0;do{k+=a.offsetLeft;g+=a.offsetTop}while((a=a.offsetParent));h.left=k;h.top=g}var l=(function(){var o=document.createElement("div");o.style.width=o.style.paddingLeft="1px";document.body.appendChild(o);var e=o.offsetWidth===2;document.body.removeChild(o).style.display="none";o=null;return e})();try{this.config.pickCity.style.position="absolute";this.config.pickCity.style.left=h.left+"px";this.config.pickCity.style.top=h.top+$(this.txtObj).outerHeight()+"px"}catch(d){}};CityPicker.prototype._bindInputHandle=function(a){var a=a;if(/msie/i.test(navigator.userAgent)){a.txtObj.onpropertychange=function(){if(a.txtObj.value==""){$(a.config.pickCity).css("display","block");a._setPosition();$(a.config.hotCity).css("display","none");if(a.config.searchCity){a.config.searchCity.style.display="none"}a.config.isFirstFocus=true;return false}if(!document.getElementById("searchCity")){a._generateSearchCityContainer()}a._searchEntry();a.config.pickCity.appendChild(a.config.searchCity);a.config.pickCity.style.display="block";a._setPosition();a.config.hotCity.style.display="none";a.config.searchCity.style.display="block"}}else{a.txtObj.addEventListener("input",function(b){if(a.txtObj.value==""){a.config.pickCity.style.display="block";a._setPosition();a.config.hotCity.style.display="block";if(a.config.searchCity){a.config.searchCity.style.display="none"}a.config.isFirstFocus=true;return false}if(!document.getElementById("searchCity")){a._generateSearchCityContainer()}a._searchEntry();a.config.pickCity.appendChild(a.config.searchCity);a.config.pickCity.style.display="block";a._setPosition();a.config.hotCity.style.display="none";a.config.searchCity.style.display="block"},false)}};CityPicker.prototype._bindEventHandleForTxt=function(){var a=this;this.txtObj.onkeydown=function(b){a._keyDown(b)};this.txtObj.onkeyup=function(b){if(a.txtObj.value!=""){a.config.isFirstFocus=false}a._keyUp(b)};this.txtObj.onfocus=function(b){a._onFocus(b)};this.txtObj.onblur=function(b){a._onBlur(b)};this._bindInputHandle(a)};CityPicker.prototype.getEvent=function(a){return a||window.event||top.window.event};CityPicker.prototype.stopEvent=function(a){var a=this.getEvent(a);if(a.stopPropagation){a.stopPropagation()}else{a.cancelBubble=true}if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}};
