﻿/*
 * jQuery AutoComplete
 *
 * Author: cntlis
 * http://blog.csdn.net/cntlis
 *
 * Licensed like jQuery, see http://docs.jquery.com/License
 *
 * 釬氪ㄩcntlis
 * QQㄩ8112857
 */
$.fn.AutoComplete = function(url,option){
	var me= this;
	var strKey= $(me).val();
	var strKeyBak= "";
	//var addr_lat1="";
	var isShow = false;
	var json_test1=[];
	var json_test2=[];
	var json_test3=[];
	var json_test4=[];
	var json_test5=[];
	var doption={
		iwidth: '0px',	//狟嶺遺腔遵僅
		iLengthLower: 1,	//絞桶等腔酗僅湮衾iLengthLower苤衾iLengthUpper奀符羲宎硒俴刲坰
		iLengthUpper: 50,
		strPara: "Keyword",	//曹講靡備
		zIndex: 1,	//枑尨遺腔Z-INDEX硉
		hasscroll: 0,	//岆瘁堤珋幗雄沭0拸1衄
		hasclose: 1,	//岆瘁茧衄壽敕敦諳
		desfun:function(){}
	};
	
	$.extend(doption,option);	
	var iLengthLower= doption.iLengthLower;
	var iLengthUpper= doption.iLengthUpper;
	var strPara= doption.strPara;
	if ($("#autocomplete").length<1){$("body").append("<div id='autocomplete' class='autocompletefloor'></div>");}
	$("#autocomplete").hide();
	$(me).keyup(function(e){keysearch(e.keyCode);});
	$(me).keydown(function(e){LineSelect(e.keyCode);});
	$(me).bind("blur",function(){
		strKeyBak= $("#autocomplete ul .selected .keyname").text();	//峈click岈璃崝樓揭燴
		if (strKeyBak.length>0 && strKeyBak!=$(me).val()){
			$(me).val(strKeyBak);
			doption.desfun();
			//alert($("#autocomplete ul .selected .keyname").next().text());
			$('#key_lat').val($("#autocomplete ul .selected .keyname").next().next().text());
			$('#key_longt').val($("#autocomplete ul .selected .keyname").next().next().next().text());
			$('#key_town').val($("#autocomplete ul .selected .keyname").next().next().next().next().text());
			$('#key_codeid').val($("#autocomplete ul .selected .keyname").next().next().next().next().next().text());
			//alert($('#key_lat').val());
			//alert($('#key_longt').val());
			//alert($('#key_town').val());
			//alert($('#key_codeid').val());
		};
		floorHide();
	});
	
	var encode=function(v){//如果包含中文就escape,避免重复escape
  return escape(v).replace(/\+/g, '%2B').replace(/\"/g,'%22').replace(/\'/g, '%27').replace(/\//g,'%2F');
 }
	
	function floorHide(){
		$("#autocomplete").hide().html("");
		strKey= "";
		isShow = false;
	}
	
	function floorShow(){
		var p= $(me).offset();
		var w= (doption.iwidth == "0px") ? $(me).width()+2 : doption.iwidth;
		$("#autocomplete").css({
		 'z-index:':doption.zIndex,
		 width:220,
		 top:parseInt(p.top+$(me).outerHeight())+"px",
		 left:parseInt(p.left)+"px"
	 }).show();
		strKey= "";
		isShow = true;
		
	
	}
	
	function keysearch(code){
		var strKeyNow=$(me).val();
		
		if(code == 38 || code == 40 || code == 13 || code == 27 || code == 9) return;    //TAB/隙陬﹜ESC﹜砃奻﹜砃狟
		if((strKey == "" || strKeyNow != strKey) && strKeyNow.length >= iLengthLower && strKeyNow.length <= iLengthUpper){
			$.ajax({
				type: "Get",
				dataType: "json",
				url: url,
                timeout:5000,
				data: strPara != "" ? strPara + "=" + encode(strKeyNow) : "",
				success: function(json){
					json=json.keylist;
					if (json.length>0){
						//鳳刲坰杅擂
						var strContent= '<ul class="auto">';
						var getpic;
						$.each(json, function(i, n){
						//alert(i);
						//alert(json.keylist);
						//alert(json.length);
							if(n.keyname.length>0){	//彆
								//alert(n.keyname);
								strContent+= '<li class="keyinfo"><span class="keyname">'+n.keyname+'</span>';
								json_test1[i] = n.key_lat;
								json_test2[i] = n.key_longt;
								json_test3[i] = n.key_flag;
								json_test4[i] = n.key_town;
								json_test5[i] = n.key_codeid;
								//alert(json_test1[i]);
                                //alert(json_test3[i-1]);
								//json_test2[n] = n.key_longt;
								//json_test3[n] = n.key_flag;
								//json_test[n]=n.keyname+','+n.key_lat;
								try{
								if (n.keyextend.length>0)
								if (n.keyextend =='M')
								{
								//alert("mmm");
								getpic = '<img align="top" src="/i/icon_landmark.jpg" border=0></a>';

								strContent+='<span class="keyextend">'+getpic+'</span>'+'<span class="keyvale" style="display:none">'+n.key_lat+'</span>'+'<span class="keyvale"" style="display:none">'+n.key_longt+'</span>'+'<span class="keyvale"" style="display:none">'+n.key_town+'</span>'+'<span class="keyvale"" style="display:none">'+n.key_codeid+'</span>'+'<span class="keyvale"" style="display:none">'+n.key_flag+'</span>';
								
								}
								else 
								{strContent+='<span class="keyextend">'+n.keyextend+'</span>'+'<span class="keyvale" style="display:none">'+n.key_lat+'</span>'+'<span class="keyvale"" style="display:none">'+n.key_longt+'</span>'+'<span class="keyvale"" style="display:none">'+n.key_town+'</span>'+'<span class="keyvale"" style="display:none">'+n.key_codeid+'</span>'+'<span class="keyvale"" style="display:none">'+n.key_flag+'</span>';
								//json_test1[i] = n.key_lat;
								//alert(n.key_lat);

								}
								}catch(E){};
								strContent+='</li>';
								//strContent+='('+n.keyextend+')'+'</li>';
							};
						});
						if (doption.hasclose==1){
							strContent+= '<li class="close"><span>關閉</span></li>';
						}
						strContent+='</ul>';
						$("#autocomplete").html(strContent);
						$("#autocomplete .keyinfo").mouseover(function(){$("#autocomplete .selected").removeClass("selected");$(this).removeClass("unselected").addClass("selected");}).mouseout(function(){$(this).removeClass("selected").addClass("unselected");}).click(function(){if(strKeyBak.length()>0){$(me).val(strKeyBak);}});
						floorShow();
						//alert(json_test3[0]);
						if (json_test3[0] == 'Y')
						{
						//alert("aaaa:");
						//$('#key_lat').val($("#autocomplete ul .selected .keyname").next().next());
			            //$('#key_longt').val($("#autocomplete ul .selected .keyname").next().next().next().text());
						//$('#key_town').val($("#autocomplete ul .selected .keyname").next().next().next().next().text());
			            //$('#key_codeid').val($("#autocomplete ul .selected .keyname").next().next().next().next().next().text());
					    //alert(json_test1[0]);
			            //alert(json_test2[0]);
						$('#key_lat').val(json_test1[0]);
			            $('#key_longt').val(json_test2[0]);
						$('#key_town').val(json_test4[0]);			            
			            $('#key_codeid').val(json_test5[0]);
						//alert(json_test5[0]);
						}
						else 
						{
						json_test1[0] = "";
						json_test2[0] = "";
						json_test3[0] = "";
						json_test4[0] = "";
						json_test5[0] = "";
						$('#key_lat').val(json_test1[0]);
			            $('#key_longt').val(json_test2[0]);
						$('#key_town').val(json_test4[0]);			            
			            $('#key_codeid').val(json_test5[0]);     					
						}
						$('#autocomplete').bgiframe();
					}else{
						//羶衄刲坰杅擂
						floorHide();
						return;
					}
				}
			});
			strKey=$(me).val();
		}
		if(strKey.length == 0 || strKey.length <= iLengthLower || strKey.length >= iLengthUpper) floorHide();
	}
	
	function LineSelect(code){
		//if(code == 27){floorHide();};//隙陬瑩﹜ESC瑩
		//if(code == 13){floorHide();doption.desfun();};
		
		if(!isShow) return;
		ObjSelected=$("#autocomplete ul .selected");
		if (ObjSelected.length>0){	//彆眒冪衄恁隅
			//alert('dasfdas');
			if(code == 38){	//砃奻瑩
				if(ObjSelected.prev().text() != ""){	//彆祥岆菴珨跺杅擂
					ObjSelected.removeClass("selected").addClass("unselected").prev().removeClass("unselected").addClass("selected");
					$(me).val($("#autocomplete ul .selected .keyname").text());
					//alert($("#autocomplete ul .selected .keyname").next().text());
					//define lat longt
					$('#key_lat').val($("#autocomplete ul .selected .keyname").next().next().text());
			        $('#key_longt').val($("#autocomplete ul .selected .keyname").next().next().next().text());
				}else{
					ObjSelected.removeClass("selected").addClass("unselected");
					$("#autocomplete .keyinfo:last").removeClass("unselected").addClass("selected");
					$(me).val($("#autocomplete ul .selected .keyname").text());
					//alert($("#autocomplete ul .selected .keyname").next().text());
					//define lat longt
					$('#key_lat').val($("#autocomplete ul .selected .keyname").next().next().text());
			        $('#key_longt').val($("#autocomplete ul .selected .keyname").next().next().next().text());
				}
			}else if (code == 40){	//砃狟瑩
				if(ObjSelected.next().text() != ""){	//彆祥岆菴珨跺杅擂
					ObjSelected.removeClass("selected").addClass("unselected").next().removeClass("unselected").addClass("selected");
					$(me).val($("#autocomplete ul .selected .keyname").text());
					//alert($("#autocomplete ul .selected .keyname").next().text());
					//$('#key_lat').val(
					//define lat longt
					$('#key_lat').val($("#autocomplete ul .selected .keyname").next().next().text());
			        $('#key_longt').val($("#autocomplete ul .selected .keyname").next().next().next().text());
				}else{
					ObjSelected.removeClass("selected").addClass("unselected");
					$("#autocomplete .keyinfo:first").removeClass("unselected").addClass("selected");
					$(me).val($("#autocomplete ul .selected .keyname").text());
					//alert($("#autocomplete ul .selected .keyname").next().text());
					//define lat longt
					$('#key_lat').val($("#autocomplete ul .selected .keyname").next().next().text());
			        $('#key_longt').val($("#autocomplete ul .selected .keyname").next().next().next().text());
				}
			}
		}else if(code == 38){
				$("#autocomplete .keyinfo:last").removeClass("unselected").addClass("selected");
				$(me).val($("#autocomplete .keyinfo:last .keyname").text());
		}else if(code == 40){
				$("#autocomplete .keyinfo:first").removeClass("unselected").addClass("selected");
				$(me).val($("#autocomplete .keyinfo:first .keyname").text());
		}
	}
}