/**
*city info
*jquery plugin v0.2
*by benson 2009-6-16
*/
(function($){

jQuery.fn.cityinfo = function(opts){
	opts = jQuery.extend({
		s_hidden:"_system_city_hidden",  //隐藏区域id 用于code
		s_showdiv:"_show"+(new Date().getTime()),  //默认的下拉层id (保证唯一性)
		s_url:system_js_basepath_support+"/common/cityinfo.dhtml?jsoncallback=?",  //默认的数据集url
		s_type:"",
		i_speed:0, //默认下拉速度
		callback:function(data){return false;}
	},opts||{});
	var o_this = $(this);
	var o_hidden = $("#"+opts.s_hidden); 
	var i_city_count =0;
	var i_city_index =-1;
	if(opts.s_type=="i18n"){
		opts.s_url = system_js_basepath_support+"/common/cityinfo-i18n.dhtml?jsoncallback=?";
	}
	
	o_this.blur(function(){
		f_close();
		//统一为当时去焦点的时候给隐藏域赋值
		if( o_this.val() != ""){
			for(var i=0;i<a_data.length;i++){
				if(a_data[i].name == o_this.val()){ 
					o_hidden.val(a_data[i].code);
				}
			}
			if(o_hidden.val() == "" ){
				alert('您输入的城市不存在');
				o_this.val("");
			}
		}
	});
	
	var a_data;
	$.ajax({
	  type: "GET",
	  cache: true,
	  url: opts.s_url,
	  dataType: "jsonp",
	  async: false,
	  success: function(json){
    	a_data = json.citys;
    	if(o_hidden.val() != ""){//初始化
			for(var i=0;i<a_data.length;i++){
				if(a_data[i].code == o_hidden.val()){ 
					o_this.val(a_data[i].name);
				}
			}
		}
		if (opts.callback) {
			opts.callback(json);
		}
  	  }
	});
	

	
	$("body").append("<div id='"+opts.s_showdiv+"' style='background:#FFFFFF'></div>"); //init showdiv
	o_this.attr("autocomplete","off");
	var o_showdiv = $("#"+opts.s_showdiv);
	o_showdiv.css("z-index", "5000");
	if ($.browser.msie) {//ie下拉框 bug情况
		if(!$("#_system_city_iframe").attr("id")){
			$("body").append("<iframe id='_system_city_iframe' scrolling='no'></iframe>");
		}
		var o_showdiviframe = $("#_system_city_iframe");
		o_showdiviframe.hide();
		o_showdiviframe.css("position", "absolute");
		o_showdiviframe.css("z-index", "99");
	}
	o_showdiv.hide();
	
	var f_show = function(event){
		o_hidden.val("");
		if(event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40 || event.keyCode == 13 || event.keyCode == 27 || event.keyCode == 9){return;};//回车键、ESC键 
		o_showdiv.empty();  
		var s_val = o_this.val() +"";  //如果跟上次值一样不解析,未完成
		if(true){
			o_showdiv.css("position", "absolute");
			o_showdiv.css("left",  o_this.offset().left + 1 + "px");
			o_showdiv.css("top",  o_this.offset().top + 23 + "px");
			o_showdiv.append(f_parse(s_val));  
			o_showdiv.slideDown(opts.i_speed);
			
			if($("#"+opts.s_showdiv +" table").width() < o_this.width()){
				$("#"+opts.s_showdiv +" table").width(o_this.width()+10);
			}
			if ($.browser.msie) {//ie下拉框 bug情况
				o_showdiviframe.show();
				o_showdiviframe.css("left",  o_this.offset().left + 1 + "px");
				o_showdiviframe.css("top",  o_this.offset().top + 23 + "px");
				o_showdiviframe.css("height",$("#"+opts.s_showdiv +" table").height()+2);
				o_showdiviframe.css("width",$("#"+opts.s_showdiv +" table").width()+2);
			}
			i_city_count = $("#"+opts.s_showdiv +" table tr").size();
			i_city_index = -1;
		}
	}
	
	var f_close  = function (){
		o_showdiv.fadeOut(opts.i_speed);
		if ($.browser.msie) {//ie下拉框 bug情况
			o_showdiviframe.hide();
		}
	    return false;
	}
	
	var f_parse = function (s_wd){
		s_wd = s_wd.toLowerCase();
		var b_ispinyin=!function(){ 
			 var reg = /^[a-zA-Z]+$/;     
      		 var r = s_wd.match(reg);     
      	 	 if(r==null){
      	 	 	return true;
      	 	 }
      	 	 return false;
		}();		
		var b_iscode=!isNaN(s_wd); 
	
		var s_result="";
		if(s_wd!=""){
			s_result = s_result + "<table cellpadding='1' cellspacing='0' style='border:1px #000 solid;'>";
			var j = 0;
			if(b_ispinyin){
				for(var i=0;i<a_data.length;i++){
					if(a_data[i].pinyin.toLowerCase().indexOf(s_wd)==0){   
						j++;
						if(j>10){break;}
						s_result = s_result + "<tr><td style='display: none;'>"+ a_data[i].code +"</td><td >"+ a_data[i].name +"</td></tr>";
					}
				}
			}else if(b_iscode){
				for(var i=0;i<a_data.length;i++){
					if( (a_data[i].code+"").indexOf(s_wd)==0){
						j++;
						if(j>10){break;}
						s_result = s_result + "<tr><td style='display: none;'>"+ a_data[i].code +"</td><td >"+ a_data[i].name +"</td></tr>";
					}
				}
			}else{
				for(var i=0;i<a_data.length;i++){
					if(a_data[i].name.indexOf(s_wd)!=-1){  //!=-1
						j++;
						if(j>10){break;}
						s_result = s_result + "<tr><td style='display: none;'>"+ a_data[i].code +"</td><td >"+ a_data[i].name +"</td></tr>";
					}
				}
			}
			s_result = s_result + "</table>";
	  	}else if(opts.s_type != "i18n"){
	  		s_result = s_result + "<table cellpadding='1' cellspacing='0' style='border:1px #000 solid;'>";
	  		s_result = s_result + "<tr><td style='display: none;'></td><td >上海</td></tr>";
	  		s_result = s_result + "<tr><td style='display: none;'></td><td >北京</td></tr>";
	  		s_result = s_result + "<tr><td style='display: none;'></td><td >三亚</td></tr>";
	  		s_result = s_result + "<tr><td style='display: none;'></td><td >杭州</td></tr>";
	  		s_result = s_result + "<tr><td style='display: none;'></td><td >深圳</td></tr>";
	  		s_result = s_result + "<tr><td style='display: none;'></td><td >丽江</td></tr>";
	  		s_result = s_result + "<tr><td style='display: none;'></td><td >成都</td></tr>";
	  		s_result = s_result + "<tr><td style='display: none;'></td><td >厦门</td></tr>";
	  		s_result = s_result + "<tr><td style='display: none;'></td><td >广州</td></tr>";
	  		s_result = s_result + "<tr><td style='display: none;'></td><td >大连</td></tr>";
	  		s_result = s_result + "</table>";
	  	}
		return s_result;
	}

  	o_this.live("keyup" ,f_show);
	o_this.live("click" ,f_show);
	o_this.focus(f_show);

	$("#"+opts.s_showdiv +" table tr").live("mousedown", function(){
		 o_this.val($(this).find("td:eq(1)").text());
	});
	$("#"+opts.s_showdiv +" table tr").live("mouseover", function(){
		 $(this).css({"cursor":"pointer","background-color":"72A6E0"});	
	});
	$("#"+opts.s_showdiv +" table tr").live("mouseout", function(){
		 $(this).removeAttr("style");
	});
	o_this.keydown(function(e){
		var  code= e.keyCode;
		if(code == 13){f_close();}//回车键
			
		if(code==40 || code == 39){
			o_showdiv.slideDown(opts.i_speed);
			i_city_index = i_city_index + 1;
			
			if( i_city_index  == i_city_count){
				$("#"+opts.s_showdiv +" table tr:last").removeAttr("style");	
				i_city_index =0;
			}			
			$("#"+opts.s_showdiv +" table tr:eq("+(i_city_index-1)+")").removeAttr("style");
			$("#"+opts.s_showdiv +" table tr:eq("+i_city_index+")").css({"cursor":"pointer","background-color":"72A6E0"});	
			o_this.val($("#"+opts.s_showdiv +" table tr:eq("+i_city_index+")").find("td:eq(1)").text());
			
		}else if(code==37 || code == 38){
			o_showdiv.slideDown(opts.i_speed);
			if( i_city_index  == -1 || i_city_index==0){
				$("#"+opts.s_showdiv +" table tr:frist").removeAttr("style");	
				i_city_index =i_city_count;
			}
			i_city_index = i_city_index - 1;
			$("#"+opts.s_showdiv +" table tr:eq("+(i_city_index+1)+")").removeAttr("style");
			$("#"+opts.s_showdiv +" table tr:eq("+i_city_index+")").css({"cursor":"pointer","background-color":"72A6E0"});	
			o_this.val($("#"+opts.s_showdiv +" table tr:eq("+i_city_index+")").find("td:eq(1)").text());
		}
	});
	
}

})(jQuery)

