/* Copyright (c) 2008 Kean Loong Tan http://www.gimiti.com/kltan
 * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * Copyright notice and license must remain intact for legal use
 * jSuggest
 * Version: 1.0 (May 26, 2008)
 * Requires: jQuery 1.2.6+
 */
(function($) {
		  
	$.fn.jSuggest = function(options) {
		// merge users option with default options
		var opts = $.extend({}, $.fn.jSuggest.defaults, options);		
		var jH = ".jSuggestHover";
		var jsH = "jSuggestHover";
		var iniVal = this.value;
		var textBox = this;
		var textVal = this.value;	
		var jC = "#jSuggestContainer";
		var result_format=opts.resultFormat;
		var defaultData = opts.data;	
		var first_array="";	
		
		$("body").append('<div id="jSuggestContainer"></div>');
		$(jC).hide();
		$(this).bind("keyup click", function(e){
			textBox = this;
			textVal = this.value;
			$("#radio_new_area").attr("lat",-1);
			$("#radio_new_area").attr("lng",-1);
			$("#radio_new_area").attr("areaid",0);
			$("#radio_new_area").attr("shopid",0);
			$("#areaname_id").attr("value",0);
			//clearSearchValue(textVal);
			if (this.value.length >= opts.minchar && $.trim(this.value)!="Search Terms") {
				var offSet = $(this).offset();
				
				$(jC).css({
					position: "absolute",
					top: offSet.top + $(this).outerHeight() + "px",
					left: offSet.left,
					width: $(this).outerWidth()-2 + "px",
					opacity: opts.opacity,
					zIndex: opts.zindex
				}).show();
				
				// if escape key
				if (e.keyCode == 27 ) {
					$(jC).hide();
				}
				
				// if enter key
				else if (e.keyCode == 13 ) {
					if ($(jH).length == 1){
						$(textBox).val($(jH).text());
						setSearchValue(textBox,$(jH).text());
					}
						$(jC).hide();
						iniVal = textBox.value;
						
				}
				// if down arrow
				else if (e.keyCode == 40) {
					// if any suggestion is highlighted
					if ($(jH).length == 1) {
						if (!$(jH).next().length == 0) {
							$(jH).next().addClass(jsH);
							$(".jSuggestHover:eq(0)").removeClass(jsH);
							if (opts.autoChange){
								//$(textBox).val($(jH).text());
								setSearchValue(textBox,$(jH).text());
								
							}
							setSearchValue(textBox,$(jH).text());
						}
					}
					else {
						$("#jSuggestContainer ul li:first-child").addClass(jsH);
						if (opts.autoChange){
							//$(textBox).val($(jH).text());
							setSearchValue(textBox,$(jH).text());
						}
					}
					
				}
				
				// if up arrow
				else if (e.keyCode == 38) {
					// if any suggestion is highlighted
					if ($(jH).length == 1 ) {
						if (!$(jH).prev().length == 0) {
							$(jH).prev().addClass(jsH);
							$(".jSuggestHover:eq(1)").removeClass(jsH);
							if (opts.autoChange){
								//$(textBox).val($(jH).text());
								setSearchValue(textBox,$(jH).text());
							}
						}
						// if is first child
						else {
							$(jH).removeClass(jsH);
							//$(textBox).val(iniVal);
							setSearchValue(textBox,$(jH).text());
						}
					}
				}
				// new query detected
				else if (true){
					iniVal = textBox.value;
					if ($(".jSuggestLoading").length==0)
						$('<div class="jSuggestLoading"><img src="'+opts.loadingImg+'" align="bottom" /> '+ opts.loadingText+'</div>').prependTo("#jSuggestContainer");
					
					$(".jSuggestLoading").show();
					$(jC).find('ul').remove();
					
					if (opts.data == '')
						opts.data = $(this).serialize();
					else{
						opts.data = defaultData + "=" + encodeURIComponent(encodeURIComponent($(this).val()))+getParameter();
						//opts.data = opts.data + "=" + $(this).val();
					}
					// optimize server performance by loading at intervals
					setTimeout(function () {
						$.ajax({
							type: opts.type,
							url: opts.url,
							cache:false,
							data: opts.data,
							success: function(msg){
								$(jC).find('ul').remove();
								if(result_format=='text'){///text
									$(jC).append(msg);
									$("#jSuggestContainer ul li:first-child").addClass(jsH);
									//console.log(textBox.value+"======"+$(jH).text());
									//if($("#jSuggestContainer ul li").length==1&&str_equals(textBox.value,$(jH).text())){///判断搜索结果只有一条并且与搜索框内容相等就选中
									if($("#jSuggestContainer ul li").length>=1&&str_equals(textBox.value,$(jH).text())){
										setFristSearchValue(textBox,$(jH).text());
									}									
									//setFristSearchValue(textBox,$(jH).text());
								}else if(result_format=='json'){////json
									//alert(msg);
									var jsondata = eval('(' + msg + ')');	
									$(jC).append("<ul>");							
									for (var i=0;i<jsondata.results.length;i++){
										if(i==jsondata.results.length-1){
											$(jC).append("<li class=\"last\">"+jsondata.results[i].name+"</li>");
										}else{
											$(jC).append("<li>"+jsondata.results[i].name+"</li>");	
										}									
									}
									$(jC).append("</ul>");
								}
								$("#jSuggestContainer ul li").bind("mouseover",	function(){
										$(jH).removeClass(jsH);
										$(this).addClass(jsH);
										//textVal = $(this).text();
										if (opts.autoChange){
											//$(textBox).val($(jH).text());
											//setSearchValue(textBox,$(jH).text());
										}
								});
								$("#jSuggestContainer ul li").click(function(){
									$(this).addClass(jsH);
									//$(textBox).val(textVal);
									setSearchValue(textBox,$(jH).text());
									$(textBox).parent("form").submit();	
								});
								$(".jSuggestLoading").hide();
							}
						});
					}, opts.delay);
				}
			}
			// if text is too short do nothing and hide everything
			else {
				$(jH).removeClass(jsH);
				$(jC).hide();
			}
			
			// no bubbling, click is binded to textBox to prevent document bind from firing
			return false;
		});
		
		// why no use $(this).blur ?, because jSuggest box is hidden before click fires so this is the only way to do it
		// alternate way is to say that text blur will fire before$("#jSuggestContainer ul li") click.
		/*$(document).bind("click", function(){
			$(jC).hide();
			iniVal = textBox.value;
		});*/
		$(jC).bind("click", function(){
			$(jC).hide();
			iniVal = textBox.value;
		});
		$(".ui-resizable").bind("click", function(){
			$(jC).hide();
			iniVal = textBox.value;
		});
		$(this).bind("blur", function(){
			if ($(jH).length == 1){
				$(textBox).val($(jH).text());
				setSearchValue(textBox,$(jH).text());
			}
			$(jC).hide();
			iniVal = $(jH).text();
		});
	};
	
	$.fn.jSuggest.defaults = {
		minchar: 1,
		opacity: 1.0,
		zindex: 20000,
		delay: 2500,
		loadingImg: '/js/jqueryjsuggest10/ajax-loader.gif',
		loadingText: 'Loading...',
		autoChange: false,
		url: "",
		type: "GET",
		data: ""
	};
		
	
		  

})(jQuery);
function setSearchValue(textBox,textValue){////
	var split_value=textValue.split(",");
	$(textBox).val(replaceContent(split_value[0]));
	//$("#radio_new_area").val(split_value[0]);
	if(split_value.length>=2){
		$("#radio_new_area").attr("areaid",split_value[1]);
	}
	if(split_value.length>=5){
		$("#radio_new_area").attr("lat",split_value[3]);
		$("#radio_new_area").attr("lng",split_value[4]);
	}
	
	if(split_value.length>=2){
		$("#areaname_id").attr("value",split_value[1]);
	}
	if(split_value.length>=3){
		$("#primaryAddress").attr("value",split_value[2]);
	}
	if(split_value.length>=4){
		$("#levelcode").attr("value",split_value[3]);
	}
}
function setFristSearchValue(textBox,textValue){////
	if(textValue==""){
		$("#radio_new_area").attr("areaid",0);
		$("#radio_new_area").attr("level",0);
	}else{
		var split_value=textValue.split(",");
		//$(textBox).val(split_value[0]);
		//$("#radio_new_area").val(split_value[0]);
		if(split_value.length>=2){
			$("#radio_new_area").attr("areaid",split_value[1]);
		}
		if(split_value.length>=4){
			$("#radio_new_area").attr("level",split_value[3]);
		}
		
		if(split_value.length>=2){
			$("#areaname_id").attr("value",split_value[1]);
		}
		if(split_value.length>=3){
			$("#primaryAddress").attr("value",split_value[2]);
		}
		if(split_value.length>=5){
			$("#radio_new_area").attr("lat",split_value[3]);
			$("#radio_new_area").attr("lng",split_value[4]);
		}
		if(split_value.length>=4){
			$("#levelcode").attr("value",split_value[3]);
		}
	}
}
function clearSearchValue(textVal){////
	if(textVal!=$("#primaryAddress").val()){
		$("#areaname_id").attr("value","0");	
		$("#primaryAddress").attr("value","");
		//alert();
	}
}
function up_down(textBox,jsH,jH){
	$(this).addClass(jsH);
	setSearchValue(textBox,$(jH).text());
}
function getParameter(){
	return "&parentid="+$("#root_parentid").val();
}


function str_equals(textBox_value,text){////判断与标签框中的内容是否相等
	if(textBox_value==""||typeof(textBox_value)=="undefined"||text==""||typeof(text)=="undefined"){
		return false;
	}
	var split_value=text.split(",")
	if(split_value.length>=1){
		/*if(textBox_value==split_value[0]){
			return true
		}*/
		return split_value[0].indexOf(textBox_value)>-1;
	}
	return false;
	
}

function replaceContent(s){/////替换中间的特别字符
	if(s==""||typeof(s)=="undefined"){
		return "";
	}
	var beginIndex=s.lastIndexOf("没有找到\"");
	var endIndex=s.indexOf("\"地址");
	if(beginIndex!=-1){
		return s.substring(5,endIndex);
	}
	return s;
}
