/**
*airport
*jquery plugin v0.2
*by benson 2009-7-2
*/
(function($){

jQuery.fn.airport = function(opts){
	opts = jQuery.extend({
		s_hidden:"_system_airport_hidden",  //隐藏区域id 用于code
		s_showdiv:"_show"+(new Date().getTime()),  //默认的下拉层id (保证唯一性)
		s_url:system_js_basepath_support+"/common/airport.dhtml?jsoncallback=?",  //默认的数据集url
		s_type:"",
		i_speed:0, //默认下拉速度
		callback:function(data){return false;}
	},opts||{});
	var o_this = $(this);
	var i_city_count =0;
	var i_city_index =-1;
	if(opts.s_type=="i18n"){
		opts.s_url = system_js_basepath_support+"/common/airport-i18n.dhtml?jsoncallback=?";
	}
	var a_data;
	$.ajax({
	  type: "GET",
	  cache: true,
	  url: opts.s_url,
	  dataType: "jsonp",
	  async: false,
	  success: function(json){
    	a_data = json.airports;
		if (opts.callback) {
			opts.callback(a_data);
		}
  	  }
	});
	
	$("body").append("<div id='"+opts.s_showdiv+"' style='background:#FFFFFF'></div>"); //init showdiv
	o_this.attr("autocomplete","off");
	var o_showdiv = $("#"+opts.s_showdiv);
	if ($.browser.msie) {//ie下拉框 bug情况
		if(!$("#_system_airport_iframe").attr("id")){
			$("body").append("<iframe id='_system_airport_iframe' scrolling='no'></iframe>");
		}
		var o_showdiviframe = $("#_system_airport_iframe");
		o_showdiviframe.hide();
		o_showdiviframe.css("position", "absolute");
		o_showdiviframe.css("z-index", "99");
		o_showdiv.css("z-index", "100");
	}
	o_showdiv.hide();
	
	var f_show = function(event){
		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();  
		$("#"+opts.s_hidden).val("");
		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){		
		var b_ispinyin=!function(){ 
			 var reg = /^[a-z]+$/;     
      		 var r = s_wd.match(reg);     
      	 	 if(r==null){
      	 	 	return true;
      	 	 }
      	 	 return false;
		}();		
		var b_iscode=!function(){ 
			 var reg = /^[A-Z]+$/;     
      		 var r = s_wd.match(reg);     
      	 	 if(r==null){
      	 	 	return true;
      	 	 }
      	 	 return false;
		}();
	
		var s_result="";
		if(s_wd!=""){
			s_result = s_result + "<table cellpadding='1' cellspacing='0' style='border:1px #000 solid;' bgcolor='ffffff'>";
			var j = 0;
			if(b_ispinyin){
				for(var i=0;i<a_data.length;i++){
					if(a_data[i].pinyin.indexOf(s_wd)==0){   //!=-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><td align='right'><font style='font-size:11px;color:#54A70D'>"+ a_data[i].airName +"</font></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><td align='right'><font style='font-size:11px;color:#54A70D'>"+ a_data[i].airName +"</font></td></tr>";
					}
				}
			}else{
				for(var i=0;i<a_data.length;i++){
					if(a_data[i].name.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><td align='right'><font style='font-size:11px;color:#54A70D'>"+ a_data[i].airName +"</font></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;'>SHA</td><td >上海</td><td align='right'><font style='font-size:11px;color:#54A70D'>虹桥机场</font></td></tr>";
	  		s_result = s_result + "<tr><td style='display: none;'>PEK</td><td >北京</td><td align='right'><font style='font-size:11px;color:#54A70D'>首都国际机场</font></td></tr></tr>";
	  		s_result = s_result + "<tr><td style='display: none;'>SYX</td><td >三亚</td><td align='right'><font style='font-size:11px;color:#54A70D'>凤凰国际机场</font></td></tr></tr>";
	  		s_result = s_result + "<tr><td style='display: none;'>HGH</td><td >杭州</td><td align='right'><font style='font-size:11px;color:#54A70D'>萧山国际机场</font></td></tr></tr>";
	  		s_result = s_result + "<tr><td style='display: none;'>SZX</td><td >深圳</td><td align='right'><font style='font-size:11px;color:#54A70D'>宝安国际机场</font></td></tr></tr>";
	  		s_result = s_result + "<tr><td style='display: none;'>LJG</td><td >丽江</td><td align='right'><font style='font-size:11px;color:#54A70D'>丽江机场</font></td></tr></tr>";
	  		s_result = s_result + "<tr><td style='display: none;'>CTU</td><td >成都</td><td align='right'><font style='font-size:11px;color:#54A70D'>双流国际机场</font></td></tr></tr>";
	  		s_result = s_result + "<tr><td style='display: none;'>XMN</td><td >厦门</td><td align='right'><font style='font-size:11px;color:#54A70D'>高崎国际机场</font></td></tr></tr>";
	  		s_result = s_result + "<tr><td style='display: none;'>CAN</td><td >广州</td><td align='right'><font style='font-size:11px;color:#54A70D'>白云国际机场</font></td></tr></tr>";
	  		s_result = s_result + "<tr><td style='display: none;'>DLC</td><td >大连</td><td align='right'><font style='font-size:11px;color:#54A70D'>周水子国际机场</font></td></tr></tr>";
	  		s_result = s_result + "</table>";
	  	}
		return s_result;
	}

  	o_this.live("keyup" ,f_show);
	o_this.live("click" ,f_show);
	o_this.blur(function(){
		f_close();
		//统一为当时去焦点的时候给隐藏域赋值
		if(o_this.val() != "" && $("#"+opts.s_hidden).val() == ""){
			var b_flag=true;
			for(var i=0;i<a_data.length;i++){
				if(a_data[i].name == o_this.val()){ 
					$("#"+opts.s_hidden).val(a_data[i].code);
					b_flag = false;
				}
			}
			if(b_flag){
				$("#"+opts.s_hidden).val("");
				o_this.val("");
			}
		}
	});
	$("#"+opts.s_showdiv +" table tr").live("mousedown", function(){
		 o_this.val($(this).find("td:eq(1)").text());
		 $("#"+opts.s_hidden).val($(this).find("td:eq(0)").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"});	
			$("#"+opts.s_hidden).val($("#"+opts.s_showdiv +" table tr:eq("+i_city_index+")").find("td:eq(0)").text());
			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"});	
			$("#"+opts.s_hidden).val($("#"+opts.s_showdiv +" table tr:eq("+i_city_index+")").find("td:eq(0)").text());
			o_this.val($("#"+opts.s_showdiv +" table tr:eq("+i_city_index+")").find("td:eq(1)").text());
		}
	});
	
}
})(jQuery)

