﻿
$.fn.suggestShow = function(G){
	var D ={
			inputName : "search",                
			inputText : "",                     
			inputValue : "",                    
			inputlength : 1,                   
			url : "search.asp",                  
			zIndex : 1,                          
			isScroll : 0,                      
			arrow : 0 ,                         
			arrowUrl: "search.asp"  ,           
			suggestWidth:"",
			fns:function(){}                    
		};
	$.extend(D,G);	
	if (D.inputValue == "") D.inputValue = D.inputText;
	var temp = "";
	var objdiv,objInput,objSuggest,objtemp,objInputValue,objInputDiv,objIframe,InputValue,InputValueZZ,date,dzz;
	var objform;
	var obj,inputWidth,sugesstDivWidth;
	var zz=-1;
	var itemLength = 0;
	var t;
	InputValueZZ = "";
	if(typeof(D.inputlength)=="undefined"){D.inputlength = 1}
	
	
	
	var _d = new Date();
	var _tem = _d.getTime();	
	objdiv = $("<div></div>");
	objdiv.attr("id","ffsuggest"+_tem);
	objInputDiv = $("<div></div>");
	objInput = $("<input maxlength=\"50\" id=\""+D.inputName+"\" type=\"text\" style='border-width:1px;border-style:Solid;height:20px;width:420px;'/>");
	objInputValue = $("<input name=\""+D.inputName+"\" type = \"hidden\" />");
	objButton = $("<input type = \"button\" />");
	objSuggest = $("<div></div>");
	objIframe = $("<iframe frameborder=0></iframe>");
	
	objInputDiv.append(objInput);
	objInputDiv.append(objInputValue);
	objdiv.append(objInputDiv);
	objdiv.append(objSuggest);
	objdiv.appendTo(this);
	
	objform = objInput.parents("form");
	
	inputWidth = objInput.css("width");
	if (inputWidth == "auto") inputWidth = "200px";
	if (objInput.css("margin-left") == "auto") objInput.css("margin-left","0");
	if (D.suggestWidth == "" )
		sugesstDivWidth = parseInt(inputWidth)+3+"px";
	else
		sugesstDivWidth = parseInt(D.suggestWidth)+3+"px";

	if(D.isScroll){
		objSuggest.css("overflow-y","scroll");
		objSuggest.css("overflow-x","hidden");
		objSuggest.css("height","100px");
		objSuggest.css("padding-right","16px");
		sugesstDivWidth = (parseInt(sugesstDivWidth)-16)+"px";
	};
		objSuggest.css("margin-left",objInput.css("margin-left"));
	
	
	objInputDiv.css("position","relative")
               .css("width",inputWidth);
	objInputValue.val(D.inputValue);		   
	objInput.val(D.inputText)
		    .attr("class","key_normal")
		    .keyup(function(e){beKeyUp(e);})
			.keydown(function(e){beKeyDown(e);})
			.blur(function(e){
					if($.trim(objInput.val())==""||$.trim(objInput.val()).length==0)
					objInputValue.val("");
					objform.unbind("keydown",unbindSubmit(e));

					zz=-1; 

				})
		    .css("width",inputWidth);
	objSuggest.attr("class","suggest_hidden")
		      .css("width",sugesstDivWidth);

	if(D.arrow)
	{
		objInputDiv.append(objButton);
		objButton.attr("class","suggest_button")
				 .css("right",eval(-42-parseInt(objInput.css("margin-left")))+"px")
				 .mouseover(function(){$(this).css("clip","rect(0px,36px,22px,18px)");$(this).css("right",eval(-24-parseInt(objInput.css("margin-left")))+"px")})
				 .mouseout(function(){$(this).css("clip","rect(0px,18px,22px,0px)");$(this).css("right",eval(-42-parseInt(objInput.css("margin-left")))+"px")})
				 .click(function(e){
					if(objSuggest.attr("class") == "suggest_hidden")
					{
						if((D.arrowUrl=="") || (typeof(D.arrowUrl)=="undefined")) getdata(D.inputName,D.url);else getdata(D.inputName,D.arrowUrl);
					}
					else
					{
						objSuggest.attr("class","suggest_hidden");
						objInput.attr("class","key_normal");
					};
				 });
	}
	/*---------------------------------------------------------------------*/		 
	if (!isNaN(D.zIndex)) objdiv.css("z-index",D.zIndex);
	objdiv.css("position","relative");
	objIframe.css("position","absolute")
			 .css("width","100%")
			 .css("z-index","-1")
			 .css("border","0");

function beKeyUp(e)
{ 
	if(e.keyCode!=13&e.keyCode!=9&e.keyCode!=38&e.keyCode!=40)
	{ 
		objInputValue.val(objInput.val());

		zz = -1;
		if ($.trim(objInput.val()).length<D.inputlength) objSuggest.attr("class","suggest_hidden"); 
		if ($.trim(objInput.val()).length>=D.inputlength)
		{ 
			InputValue = $.trim(objInput.val());
			if (InputValueZZ == ""){
				InputValueZZ = InputValue;
				t=setTimeout(function(){sdd()},400);
			}
			else
			{
				clearTimeout(t);
				if(InputValueZZ == InputValue) return; else t=setTimeout(function(){sdd()},400);
			}
		} 
	} 
} 

function sdd()
{
	if(InputValueZZ == InputValue)
	{
		if ($.trim(objInput.val()).length>=D.inputlength) getdata(D.inputName,D.url);
	}
	else
	{
		InputValueZZ = InputValue;
		sdd();
	}
}


function getdata(inputName,url)
{
	var temp = "";
	var result = "";
	var objleft,objright;
	var objload;
	objload = $("<div>Loading....</div>")
	objInput.focus();
	objSuggest.html(objIframe);
	objSuggest.append(objload);
	objload.attr("class","loaddata");
	objIframe.css("height",objSuggest.height());
	objInput.attr("class","key_normal");
	objSuggest.attr("class","search_suggest");
	$.ajax({
		type:"post",
		url:D.url,
		dataType:"xml",
		data:D.inputName+"="+escape($.trim(objInput.val())) + "&type=" + type,
		success:function(Back){
			itemLength = $("response",Back).size();
			if(itemLength == 0)
			{
				objIframe.css("height",objSuggest.height());
				objInput.attr("class","key_normal");
				objSuggest.attr("class","suggest_hidden");
				return;
			}
			objSuggest.html(objIframe);
			$("response",Back).each(function(i){
				result = $(this).attr("result");
				if(typeof(result)=="undefined") result="";
				objleft = $("<span></span>");
				objright = $("<span></span>")
				objtemp = $("<div></div>");
				objtemp.append(objleft);
				objtemp.append(objright);
				objtemp.appendTo(objSuggest);
				
				objleft.text($(this).text());
				objright.text(result);
				
				objleft.attr("class","suggest_left");
				objright.attr("class","suggest_right");
				
				objtemp.attr("value",$(this,Back).attr("value"))
					   .attr("valuetext",$(this,Back).text())
					   .attr("class","item_normal")
					   .mouseover(function(){beMouseOver(i)})
					   .css("width",sugesstDivWidth)
					   .css("overflow","hidden")
					   .click(function(){beClick(i)});
			})
				$("<div>cancel</div>").click(function(){beClick2()})
									.attr("class","cancel")
									.appendTo(objSuggest);
				//objIframe.css("height",objSuggest.get(0).scrollHeight);
				objInput.attr("class","key_abnormal");
				objSuggest.attr("class","search_suggest");
				objIframe.css("height",objSuggest.get(0).scrollHeight);
				objIframe.css("height",objSuggest.get(0).scrollHeight);
				return;					
			},
		error:function(){
			//alert("Database update failed...");
			objInput.attr("class","key_normal");
			objSuggest.attr("class","suggest_hidden");
			return false;
			}					
	})
}


function beMouseOverEFF(i){$("div",objSuggest).eq(i).attr("class","item_high");} 

function beMouseOutEFF(i){if (i>=0) $("div",objSuggest).eq(i).attr("class","item_normal");} 
function beMouseOver(i)
{ 
	objInput.focus(); 
	beMouseOutEFF(zz); 
	zz=i; 
	beMouseOverEFF(zz); 
} 


function beClick(i)
{ 
	objform.keydown(function(e){return unbindSubmit(e)});
	objInput.val($("div",objSuggest).eq(i).attr("valuetext"));
	objInputValue.val($("div",objSuggest).eq(i).attr("value"));
	if($("div",objSuggest).eq(i).attr("value") == "undefined"){objInputValue.val($("div",objSuggest).eq(i).text())};
	objInput.attr("class","key_normal");
	objSuggest.attr("class","suggest_hidden");
	objInput.focus();
	zz=-1; 
	D.fns();
	//objform.unbind();
} 

function unbindSubmit(e)
{
	if(e.keyCode == 13){return false;}	
}

function beClick2()
{ 
	if($.trim(objInput.val()).length<D.inputlength){objInputValue.val("");}
	objInput.attr("class","key_normal");
	objSuggest.attr("class","suggest_hidden");
	zz=-1; 
} 


function beKeyDown(e){ 

	if (e.keyCode==40)
	{ 	if(zz == itemLength -1 ){beMouseOutEFF(zz);zz = -1;};
		if(zz<itemLength-1){beMouseOutEFF(zz++);} ;
		if(zz<itemLength){beMouseOverEFF(zz);} ;
	} 
	if (e.keyCode==38)
	{ 
		if (zz>0){beMouseOutEFF(zz--);} 
		if (zz>=0){beMouseOverEFF(zz);} 
	} 

	if (e.keyCode==13){if (zz!=-1)beClick(zz);} 
} 


var _sobj = objdiv.get(0);
$(document).click(function(e){
	e = e ? e : window.event;
	var tag = e.srcElement || e.target;
	if(_sobj.id==tag.id){return;}
	var _temObj = tag;
	while(_temObj)
	{
		if(_temObj.id=="ffsuggest"+_tem)return;
		_temObj = _temObj.parentNode;
	}
	objInput.attr("class","key_normal");
	objSuggest.attr("class","suggest_hidden");
});

}