jQuery.fn.hosAutoComplete=function(options){return this.each(function(){var settings=jQuery.extend({$container:null,serviceMethod:"",maxNumberOfResults:15,anchorHref:"ProductDetailPage?ACODE={VALUE}",emptyText:"",currentValue:"",useGeoLocations:false,geoAppPath:"",geoAjaxRequestManager:null},options);var $this=$(this);var container=settings.$container;var hasContent=false;var mouseOverContainer=false;var urlBeginning=settings.anchorHref.slice(0,settings.anchorHref.indexOf("{VALUE}"));var urlEnd=settings.anchorHref.slice(settings.anchorHref.indexOf("{VALUE}")+7);var selectedAnchor=null;var ajaxRequestManager=settings.ajaxRequestManager;var autoCompleteTextBox=$this.get(0);if(autoCompleteTextBox.value==""||settings.currentValue==""){autoCompleteTextBox.value=settings.emptyText;}else{autoCompleteTextBox.value=settings.currentValue;}$this.click(function(){if(autoCompleteTextBox.value==settings.emptyText){autoCompleteTextBox.value="";}else{this.select();}});$this.keydown(function(e){if(e.which==13){if($(".autoComplete_container").val()==""){$("#autoCompleteError").html("Invalid code or name");}if(selectedAnchor!=null){selectedAnchor.click();}return false;}});$this.keyup(function(e){if(hasContent&&e.which==38){if(selectedAnchor!=null&&selectedAnchor.prev().length!=0){selectedAnchor.removeClass("selected");selectedAnchor=selectedAnchor.prev();selectedAnchor.addClass("selected");}}else{if(hasContent&&e.which==40){if(selectedAnchor!=null&&selectedAnchor.next().length!=0){selectedAnchor.removeClass("selected");selectedAnchor=selectedAnchor.next();selectedAnchor.addClass("selected");}}else{if(this.value.length>1){if(settings.useGeoLocations==true){var requestUid="GeoLocation_"+settings.maxNumberOfResults+"_"+this.value;var requestQueryString="Method=GEOLOCATIONS--GET-TOP-X-LOCATIONS&COUNT="+settings.maxNumberOfResults+"&SEARCHTEXT="+this.value;settings.geoAjaxRequestManager.beginGetResponse(this,settings.geoAppPath,requestUid,requestQueryString,function(request){GeoLocationCallSuccess(request);},function(){});}else{PageMethods[settings.serviceMethod](this.value,settings.maxNumberOfResults,CallSuccess);}}else{container.css("display","none");hasContent=false;}}}});$this.blur(function(e){if(!mouseOverContainer){container.css("display","none");}if(autoCompleteTextBox.value==""){autoCompleteTextBox.value=settings.emptyText;}});$this.focus(function(e){if(hasContent){showContainer();}});container.hover(function(e){mouseOverContainer=true;},function(e){mouseOverContainer=false;});function showContainer(){container.css("top",$this.position().top+24+"px");container.css("left",$this.position().left+"px");container.css("display","block");}container.find("a").live("mouseenter",function(e){if(selectedAnchor!=null){selectedAnchor.removeClass("selected");}selectedAnchor=$(this);selectedAnchor.addClass("selected");});function CallSuccess(res){container.html("");var data=null;data=eval(res);if(data.length>0){for(var k=0;k<data.length;k++){var anchor='<a href="'+urlBeginning+data[k].value+urlEnd+'" onclick=\'$("#'+$this.get(0).id+"\").val(this.innerHTML); window.location = this.href;'>"+data[k].text+"</a>";container.append(anchor);}showContainer();selectedAnchor=container.find("a").first();selectedAnchor.addClass("selected");hasContent=true;}else{container.css("display","none");hasContent=false;selectedAnchor=null;}}function GeoLocationCallSuccess(request){try{container.html("");var data=request.response.data;if(data.length>0){for(var k=0;k<data.length;k++){var anchor='<a href="'+urlBeginning+data[k].value+urlEnd+'" onclick=\'$("#'+$this.get(0).id+"\").val(this.innerHTML); window.location = this.href;'>"+data[k].text+"</a>";container.append(anchor);}showContainer();selectedAnchor=container.find("a").first();selectedAnchor.addClass("selected");hasContent=true;}else{container.css("display","none");hasContent=false;selectedAnchor=null;}}catch(err){}}});};
