function QuerySuggester(){this.id=querySuggesters.length;querySuggesters[this.id]=this;}QuerySuggester.prototype.useInlineSuggestion=true;QuerySuggester.prototype.clearInlineSuggestionBeforeSubmit=false;QuerySuggester.prototype.initialize=function(suggestionUrl,resultId){this.__enabled=new BackgroundLoader().isEnabled();if(this.__enabled){this.__suggestionUrl=suggestionUrl;this.__form=GetFormElement();if(!this.__form){this.__enabled=false;this.debug("Couldn't find the form, disabling.");}else{this.__tooltip=this.byId(resultId);}}else{this.debug("Unable to instantiate XMLHttpRequest, disabling.");}};QuerySuggester.prototype.setDebugAreaId=function(debugAreaId){this.__debugAreaId=debugAreaId;};QuerySuggester.prototype.setQueryId=function(queryId){this.__queryId=queryId;this.__query=this.byId(queryId);};QuerySuggester.prototype.getSuggestionUrl=function(query){return this.__suggestionUrl+query;};QuerySuggester.prototype.submitForm=function(){Browse("search.aspx?q="+document.getElementById(SEARCHBOX_ID).value);};QuerySuggester.prototype.keyUp=function(event,field){if(!this.__enabled)return;else if(field!=this.__queryId)this.setQueryId(field);if(event){if(this.__timeout){clearTimeout(this.__timeout);this.__timeout=false;}if(event.ctrlKey||event.altKey){return;}var timeout=100;this.__deletePressed=false;switch(event.keyCode){case 9:case 27:this.hide();return;case 8:case 46:this.__deletePressed=true;timeout=200;break;case 13:case 16:case 17:case 18:case 20:case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 45:return;default:timeout=100;break;}this.__index=-1;var qc=this;this.__timeout=setTimeout(function(){qc.fetchAndDisplaySuggestions();},timeout);}};QuerySuggester.prototype.keyDown=function(event,field){if(!this.__enabled)return;else if(field!=this.__queryId)this.setQueryId(field);if(event&&event.keyCode){switch(event.keyCode){case 9:this.hide();break;case 13:if(this.__index==-1)this.clearInlineSuggestion();break;case 38:if(this.__index>=0)this.updateSuggestions(this.__index--,-2);break;case 40:if(this.__index<this.__terms.length-1)this.updateSuggestions(this.__index++,-2);break;}}};QuerySuggester.prototype.mouseOver=function(index){if(!this.__enabled)return;var previous=this.__mouseIndex>=0?this.__mouseIndex:this.__index;this.__mouseIndex=index;this.updateSuggestions(-2,previous);};QuerySuggester.prototype.mouseOut=function(index){if(!this.__enabled)return;var previous=this.__mouseIndex;this.__mouseIndex=-1;this.updateSuggestions(-2,previous);};QuerySuggester.prototype.mouseClick=function(index){if(!this.__enabled)return;if(index>=0){this.__query.value=this.__terms[index];this.submitForm();}else{this.hide();}};QuerySuggester.prototype.fetchAndDisplaySuggestions=function(){var val=this.__query.value;if(this.canHandleRanges()){val=val.substring(0,this.getCaretPosition());}if(val.length==0){this.hide();this.__prev=val;return;}else{val=val.replace(new RegExp("\\\\","g"),"\\\\");}this.__prev=val;if(this.__cache[val]){this.debug("cache: "+val);this.displaySuggestions(this.__cache[val],this.__prev);}else{this.debug("query: '"+val+"'");this.fetchSuggestion(val);}};QuerySuggester.prototype.fetchSuggestion=function(query){var qc=this;var bl=new BackgroundLoader();bl.setLoadedCallback(function(content){qc.parseSuggestions(content);});bl.setErrorCallback(function(error){qc.debug("Couldn't get suggestions:\n"+error);});bl.loadUrl(this.getSuggestionUrl(query));};QuerySuggester.prototype.parseSuggestions=function(matches){if(matches=="")return;var params=eval(matches);if(params.length>2){this.__cache[params[0]]=params;}this.displaySuggestions(params,params.length>2?params[0]:"");};QuerySuggester.prototype.displaySuggestions=function(matches,query){if(matches.length<=2){this.noSuggestions();return;}if(this.__tooltip&&this.__query){this.buildSuggestionsHtml(matches);this.show();}};QuerySuggester.prototype.buildSuggestionsHtml=function(matches){var text="";var length=matches.length/2-1;this.__terms=new Array(length);var suggestion="";for(var i=0;i<length;++i){suggestion=this.getSuggestion(matches,i);text+="<div class=\"suggest\" id=\"tooltip_"+i+"\" onmouseover=\"mouseOver("+this.id+","+i+")\" onmouseout=\"mouseOut("+this.id+","+i+")\" onclick=\"mouseClick("+this.id+","+i+")\" style=\"cursor: pointer\">"+suggestion+"</div>\n";this.__terms[i]=suggestion;}this.__tooltip.innerHTML=text;};QuerySuggester.prototype.getSuggestion=function(matches,position){var lower=matches[position*2+2];var upper=matches[position*2+3];var split=upper.indexOf(";");return split>=0&&split<upper.length-1?upper.substring(split+1):lower;};QuerySuggester.prototype.showInlineSuggestions=function(query){if(this.__terms.length>0&&this.__query.value==query&&!this.__deletePressed&&this.useInlineSuggestion){this.__original=this.__query.value;if(this.canHandleRanges()){this.__query.value=this.__terms[0];this.selectRange(this.__original.length,this.__query.value.length);}}};QuerySuggester.prototype.updateSuggestions=function(previousIndex,previousMouseIndex){var previous=this.byId("tooltip_"+previousIndex);var previousMouse=this.byId("tooltip_"+previousMouseIndex);var current=this.byId("tooltip_"+this.__index);var currentMouse=this.byId("tooltip_"+this.__mouseIndex);if(previous){if(previousIndex!=this.__mouseIndex){previous.className="suggest";}}if(current){current.className="suggestCurrent";if(this.canHandleRanges()){this.__query.value=this.__terms[this.__index];this.selectRange(this.__original.length,this.__query.value.length);}}if(previousMouse&&previousMouseIndex!=this.__index){previousMouse.className="suggest";}if(currentMouse){currentMouse.className="suggestCurrent";}};QuerySuggester.prototype.noSuggestions=function(){this.hide();};QuerySuggester.prototype.show=function(){if(this.__tooltip&&this.__query){if(is_ie&&typeof(ieOffsetX)=="number"){this.__tooltip.style.left=(this.findPosX(this.__query)+ieOffsetX)+"px";}else{this.__tooltip.style.left=this.findPosX(this.__query)+"px";}var topOffset=(this.findPosY(this.__query)+this.__query.offsetHeight);if(is_opera)topOffset+=5;this.__tooltip.style.top=topOffset+"px";this.__tooltip.style.width=(this.__query.offsetWidth-3)+"px";this.__tooltip.style.visibility="visible";}};QuerySuggester.prototype.hide=function(){if(this.__tooltip){this.__terms=new Array();this.__tooltip.style.visibility="hidden";}};QuerySuggester.prototype.canHandleRanges=function(){return this.__query.createTextRange||this.__query.setSelectionRange;};QuerySuggester.prototype.selectRange=function(from,to){if(this.__query.createTextRange){var t=this.__query.createTextRange();t.moveStart("character",from);t.select();}else if(this.__query.setSelectionRange){this.__query.setSelectionRange(from,to);}else{this.debug("Couldn't select range.");}};QuerySuggester.prototype.getCaretPosition=function(){if(document.selection){var range=document.selection.createRange().duplicate();range.collapse(true);range.moveStart("character",-1000);return range.text.length;}else if(this.__query.setSelectionRange){return this.__query.selectionStart;}else{this.debug("Couldn't find caret position.");return this.__query.value.length;}};QuerySuggester.prototype.clearInlineSuggestion=function(){if(this.__query&&this.canHandleRanges()&&this.clearInlineSuggestionBeforeSubmit){this.__query.value=this.__query.value.substring(0,this.getCaretPosition());}};QuerySuggester.prototype.findPosX=function(obj){var curleft=0;if(obj.offsetParent){while(obj.offsetParent){curleft+=obj.offsetLeft;obj=obj.offsetParent;}}else if(obj.x)curleft+=obj.x;return curleft;};QuerySuggester.prototype.findPosY=function(obj){var curtop=0;if(obj.offsetParent){while(obj.offsetParent){curtop+=obj.offsetTop;obj=obj.offsetParent;}}else if(obj.y){curtop+=obj.y;}return curtop;};QuerySuggester.prototype.byId=function(id){var element=document.getElementById?document.getElementById(id):false;return element&&element!=null?element:false;};QuerySuggester.prototype.debug=function(message){if(this.__debugAreaId){var err=this.byId(this.__debugAreaId);if(err){err.value+=message+"\n";}}};QuerySuggester.prototype.__suggestionUrl=false;QuerySuggester.prototype.__form=false;QuerySuggester.prototype.__query=false;QuerySuggester.prototype.__queryId=false;QuerySuggester.prototype.__tooltip=false;QuerySuggester.prototype.__debugAreaId=false;QuerySuggester.prototype.__timeout=false;QuerySuggester.prototype.__prev="";QuerySuggester.prototype.__original="";QuerySuggester.prototype.__index=-1;QuerySuggester.prototype.__mouseIndex=-1;QuerySuggester.prototype.__terms=new Array();QuerySuggester.prototype.__cache=new Array();QuerySuggester.prototype.__enabled=false;QuerySuggester.prototype.__deletePressed=false;var querySuggesters=new Array();function mouseOver(id,index){if(id>=0&&id<querySuggesters.length){querySuggesters[id].mouseOver(index);}}function mouseOut(id,index){if(id>=0&&id<querySuggesters.length){querySuggesters[id].mouseOut(index);}}function mouseClick(id,index){if(id>=0&&id<querySuggesters.length){querySuggesters[id].mouseClick(index);}else if(id==-1&&index==-1){for(var i=0;i<querySuggesters.length;++i){querySuggesters[i].mouseClick(index);}}}function BackgroundLoader(){}BackgroundLoader.prototype.__request=false;BackgroundLoader.prototype.__sequenceNumber=false;BackgroundLoader.prototype.__loadedCallback=function(content){};BackgroundLoader.prototype.__errorCallback=function(error){};BackgroundLoader.prototype.setSequenceNumber=function(sequenceNumber){this.__sequenceNumber=sequenceNumber;};BackgroundLoader.prototype.setLoadedCallback=function(loadedCallback){this.__loadedCallback=loadedCallback;};BackgroundLoader.prototype.setErrorCallback=function(errorCallback){this.__errorCallback=errorCallback;};BackgroundLoader.prototype.loadUrl=function(url){this.__request=this.__getXmlHttpRequest();if(this.__request){var loader=this;this.__request.onreadystatechange=function(){loader.__processReqChange();};this.__request.open("GET",url.replace(new RegExp(" ","g"),"%20"),true);this.__request.send(null);}};BackgroundLoader.prototype.isEnabled=function(){return this.__getXmlHttpRequest()!=null;};BackgroundLoader.prototype.__processReqChange=function(){var request=this.__request;if(request.readyState==4){if(request.status==200){this.sequenceNumber==false?this.__loadedCallback(request.responseText):this.__loadedCallback(request.responseText,this.__sequenceNumber);}else{this.sequenceNumber==false?this.__errorCallback(request.status+": "+request.statusText):this.__errorCallback(request.status+": "+request.statusText,this.__sequenceNumber);}}};BackgroundLoader.prototype.__getXmlHttpRequest=function(){if(typeof XMLHttpRequest!="undefined"){return new XMLHttpRequest();}else{try{return new ActiveXObject("Msxml2.XMLHTTP");}catch(e1){try{return new ActiveXObject("Microsoft.XMLHTTP");}catch(e2){return null;}}}};var prevFlashIn=null;function scopeMouseClick(id,url,srcAnchor){var tooltip=document.getElementById(id);if(tooltip){if(!srcAnchor.Tooltip){Tooltip.add(srcAnchor.id,id);}if(prevFlashIn!=null&&prevFlashIn.Tooltip.isVisible&&prevFlashIn!=srcAnchor){Tooltip.toggle(prevFlashIn,null);}if(!tooltip.loaded){tooltip.loaded=true;tooltip.tooltip=new EntityTooltip(tooltip,url,srcAnchor);}else{Tooltip.toggle(srcAnchor,null);}prevFlashIn=srcAnchor;}}function EntityTooltip(tooltip,url,srcAnchor){this.__tooltip=tooltip;this.__url=url;this.__srcAnchor=srcAnchor;this.__loader=new BackgroundLoader();var entityTooltip=this;this.__loader.setLoadedCallback(function(content){entityTooltip.loaded(content);});this.__loader.setErrorCallback(function(error){entityTooltip.error(error);});this.__loader.loadUrl(this.__url);}EntityTooltip.prototype.loaded=function(content){this.__tooltip.innerHTML=content;this.position();};EntityTooltip.prototype.error=function(error){this.__tooltip.innerHTML=error;};EntityTooltip.prototype.position=function(){var qs=new QuerySuggester();var linkX=qs.findPosX(this.__srcAnchor);var linkY=qs.findPosY(this.__srcAnchor);var tool=this.__tooltip;tool.style.left="-1000px";tool.style.display="block";var tooltipWidth=tool.offsetWidth;var tooltipHeight=tool.offsetHeight;tool.style.display="none";tool.style.left=(linkX-tooltipWidth)+"px";if((linkX-tooltipWidth)<0)tool.style.left="0px";var topPos=(linkY-tooltipHeight+this.__srcAnchor.offsetHeight)+ENTITY_OFFSET;if(topPos<0)topPos=0;tool.style.top=topPos+"px";Tooltip.toggle(this.__srcAnchor,null);};