function configuration(SearchBoxId,SuggestionBoxId,SearchButtonId){this.SearchBoxId=SearchBoxId;this.SuggestionBoxId=SuggestionBoxId;this.HighLightedClass='current';this.SuggestionTableId='Table_'+SuggestionBoxId;this.isTextBoxFocused=false;this.SearchButtonId=SearchButtonId;this.hideSuggestionsAfter=function(timeout){setTimeout('document.getElementById("'+this.SuggestionBoxId+'").style.visibility="hidden"',timeout);}
this.hideSuggestions=function(){$('#'+this.SuggestionBoxId).css('visibility','hidden');}
this.CreateDropDownMenu=function(oEvent){var val=$('#'+this.SearchBoxId).val();var iKeyCode=oEvent.keyCode;
//for backspace (8) and delete (46), shows suggestions without typeahead
if(iKeyCode==8||iKeyCode==46){this.getSuggestion(val,this);}else if(iKeyCode<32||(iKeyCode>=33&&iKeyCode<46)||(iKeyCode>=112&&iKeyCode<=123)){}else{this.getSuggestion(val,this);}}
this.getSuggestion=function(str,Conf){var p=/^\s*$/;var THIS=this;if(!p.test(str)){var prefix,url;prefix="/include/ajax/";url="auto-suggestion-ajax.php";$.post(prefix+url,{SearchFor:str,MaxLength:35,TableId:this.SuggestionTableId},function(data,textStatus){
//alert(typeof(data.suggestion)+data.suggestion.length);
//return false;
var p=/^\s*$/;var val=$('#'+THIS.SearchBoxId).val();if(THIS.isTextBoxFocused&&!p.test(val)){if(typeof(data.suggestion)=='object'&&data.suggestion.length>0){var suggest='',tbl='';tbl+='<table width="100%" class="auto_suggest" id="'+THIS.SuggestionTableId+'" >';for(var i=0;i<data.suggestion.length;i++){var suggest=data.suggestion[i].suggestion;var text=suggest;var re=new RegExp(data.search,"g");text=text.replace(re,'<b>'+data.search+'</b>');tbl+='<tr><td>'+text+'<input type="hidden" value="'+suggest+'" ></td></tr>';}
tbl+='</table>';//var height = $('#'+THIS.SearchBoxId).css('height');
var height=17;var offset=$('#'+THIS.SearchBoxId).offset();var txtBox=document.getElementById(THIS.SearchBoxId);var left=offset.left;var top=height+offset.top;$('#'+THIS.SuggestionBoxId).html(tbl).css('visibility','visible').css('left',''+left+'px').css('top',''+top+'px');$('#'+THIS.SuggestionBoxId+' td:not(.SuggestionType)').mouseover(function(){$('#'+THIS.SuggestionBoxId+' td:not(.SuggestionType)').removeClass(THIS.HighLightedClass);$(this).addClass(THIS.HighLightedClass);});$('#'+THIS.SuggestionBoxId+' td:not(.SuggestionType)').click(function(){var current_suggestion=$(this).children('input').val();$('#'+THIS.SearchBoxId).val(current_suggestion);$('#'+THIS.SearchButtonId).click();});}
else{$('#'+THIS.SuggestionBoxId).css('visibility','hidden');}}},"json");}else{$('#'+this.SuggestionBoxId).css('visibility','hidden');}}
this.HighLightSuggestion=function(oEvent){var iKeyCode=oEvent.keyCode;var Visibility=$('#'+this.SuggestionBoxId).css('visibility');if(Visibility!='hidden'){switch(iKeyCode){
case 38: //up arrow
this.previousSuggestion();break;
case 40: //down arrow 
this.nextSuggestion();break;
case 27: //escape
this.hideSuggestions();break;
case 13: //enter
//alert(this);
//var cell=this.selectCurrentSuggestion();
//if(cell!=null){this.selectAsset(cell);}
//return false;
return true;break;}}
else{if(iKeyCode==13){return false;}}
return true;}
this.previousSuggestion=function(){var Table=document.getElementById(this.SuggestionTableId);var Rows=Table.childNodes[0].rows;var Length=Table.childNodes[0].rows.length;if(Length>0){if(this.getSelectedIndex()==-1){$(Rows[Length-1].cells[0]).addClass(this.HighLightedClass);this.selectCurrentSuggestion();return true;}
for(i=0;i<Length;i++){var Class=Rows[i].cells[0].className;if(Class.indexOf(this.HighLightedClass)!=-1){if(i>0){$(Rows[i].cells[0]).removeClass(this.HighLightedClass);if(Rows[i-1].cells[0].className.indexOf(this.SuggestionType)==-1){$(Rows[i-1].cells[0]).addClass(this.HighLightedClass);}
else{$(Rows[i-2].cells[0]).addClass(this.HighLightedClass);}
break;}}}
this.selectCurrentSuggestion();}
return true;}
this.nextSuggestion=function(){var Table=document.getElementById(this.SuggestionTableId);var Rows=Table.childNodes[0].rows;if(!Rows){return true;}
var Length=Table.childNodes[0].rows.length;if(Length>0){if(this.getSelectedIndex()==-1){$(Rows[0].cells[0]).addClass(this.HighLightedClass);this.selectCurrentSuggestion();return true;}
for(i=0;i<Length;i++){var Class=Rows[i].cells[0].className;if(Class.indexOf(this.HighLightedClass)!=-1){if(i!=Length-1){$(Rows[i].cells[0]).removeClass(this.HighLightedClass);if(Rows[i+1].cells[0].className.indexOf(this.SuggestionType)==-1){$(Rows[i+1].cells[0]).addClass(this.HighLightedClass);}
else{$(Rows[i+2].cells[0]).addClass(this.HighLightedClass);}
break;}}}
this.selectCurrentSuggestion();}
return true;}
this.getSelectedIndex=function(){var Table=document.getElementById(this.SuggestionTableId);var Length=Table.childNodes[0].rows.length;var Rows=Table.childNodes[0].rows;var i;for(i=0;i<Length;i++){var Class=Rows[i].cells[0].className;if(Class.indexOf(this.HighLightedClass)!=-1){return i;}}
return-1;}
this.selectCurrentSuggestion=function(){var Table=document.getElementById(this.SuggestionTableId);var Length=Table.childNodes[0].rows.length;var Rows=Table.childNodes[0].rows;var i,cell=null;for(i=0;i<Length;i++){var Class=Rows[i].cells[0].className;if(Class.indexOf(this.HighLightedClass)!=-1){cell=Rows[i].cells[0];$('#'+this.SearchBoxId).val($(cell).children('input').val());break;}}
return cell;}
//end configuration
}
function ClickHandler(Conf){}
function KeyUpHandler(Conf,e){Conf.CreateDropDownMenu(e);}
function KeyDownHandler(Conf,e){return Conf.HighLightSuggestion(e);}
function BlurHandler(Conf){Conf.hideSuggestionsAfter(250);Conf.isTextBoxFocused=false;}
function FocusHandler(Conf){Conf.isTextBoxFocused=true;}
function configureAutoSuggest(Conf){$('#'+Conf.SearchBoxId).click(function(e){ClickHandler(Conf,e)});$('#'+Conf.SearchBoxId).keyup(function(e){KeyUpHandler(Conf,e)});$('#'+Conf.SearchBoxId).keydown(function(e){return KeyDownHandler(Conf,e)});$('#'+Conf.SearchBoxId).blur(function(e){BlurHandler(Conf,e)});$('#'+Conf.SearchBoxId).focus(function(e){FocusHandler(Conf,e)});}

