// ,js

var g_ASBObjects;function asbAddObj(sTextBoxID,oJSAutoSuggestBox)
{if(typeof(g_ASBObjects)=="undefined")
g_ASBObjects=new Array();g_ASBObjects[sTextBoxID]=oJSAutoSuggestBox;}
function asbGetObj(sTextBoxID)
{return g_ASBObjects[sTextBoxID];}
function JSAutoSuggestBox()
{var msTextBoxID;var msMenuDivID;var msDataType;var mnMaxSuggestChars;var mnKeyPressDelay;var mnNumMenuItems;var mbIncludeMoreMenuItem;var msMoreMenuItemLabel;var msMenuCSSClass;var msMenuItemCSSClass;var msSelMenuItemCSSClass;var mbUseIFrame;var mmCodeLanguage;var mbFillFullText;var msResourceDir;var mbHasFocus;var mnSelMenuItem=0;var mbCancelSubmit;var msOldTextBoxValue="";this.GetKey=GetKey;this.GetTextBoxCtrl=GetTextBoxCtrl;this.GetMenuDiv=GetMenuDiv;this.GetXmlHttp=GetXmlHttp;this.GetDataFromServer=GetDataFromServer;this.SetSelectedValue=SetSelectedValue;this.SetTextBoxValue=SetTextBoxValue;this.GetTextBoxValue=GetTextBoxValue;this.OnMouseClick=OnMouseClick;this.OnMouseOver=OnMouseOver;this.OnKeyDown=OnKeyDown;this.OnKeyPress=OnKeyPress;this.OnKeyUp=OnKeyUp;this.OnBoxClick=OnBoxClick;this.OnBlur=OnBlur;this.GetSelMenuItemDiv=GetSelMenuItemDiv;this.GetMenuItemDivID=GetMenuItemDivID;this.GetMenuItemDiv=GetMenuItemDiv;this.MoveUp=MoveUp;this.MoveDown=MoveDown;this.MoveFirst=MoveFirst;this.SelectMenuItem=SelectMenuItem;this.UnselectMenuItem=UnselectMenuItem;this.IsVisibleMenuDiv=IsVisibleMenuDiv;this.MoveMenuDivIfAbsolutePos=MoveMenuDivIfAbsolutePos;this.ShowMenuDiv=ShowMenuDiv;this.HideMenuDiv=HideMenuDiv;function GetKey(evt)
{evt=(evt)?evt:(window.event)?event:null;if(evt)
{var cCode=(evt.charCode)?evt.charCode:((evt.keyCode)?evt.keyCode:((evt.which)?evt.which:0));return cCode;}}
function GetTextBoxCtrl()
{return document.getElementById(this.msTextBoxID);}
function GetMenuDiv()
{return document.getElementById(this.msMenuDivID);}
function GetXmlHttp()
{var oXmlHttp=false;if(!oXmlHttp&&typeof XMLHttpRequest!='undefined')
{oXmlHttp=new XMLHttpRequest();}
return oXmlHttp;}
function myEscape(sValue)
{return escape(sValue.replace("<",""));}
function GetDataFromServer(sValue)
{var sUrl;sUrl=this.msResourcesDir+"/GetAutoSuggestData.aspx?TextBoxID="+myEscape(this.msTextBoxID)+"&MenuDivID="+myEscape(this.msMenuDivID)+"&DataType="+myEscape(this.msDataType)+"&MoreMenuItemLabel="+myEscape(this.msMoreMenuItemLabel)+"&MenuItemCSSClass="+myEscape(this.msMenuItemCSSClass)+"&Keyword="+myEscape(sValue)+"&lang="+myEscape(this.mmCodeLanguage);TRACE("GetDataFromServer: "+sUrl);var oXmlHttp=GetXmlHttp();oXmlHttp.open("GET",sUrl,true);var me=this;oXmlHttp.onreadystatechange=function()
{if(oXmlHttp.readyState==4)
{if(oXmlHttp.responseText!="")
{if(me.mbHasFocus)
{me.ShowMenuDiv(oXmlHttp.responseText);}}
else
{me.HideMenuDiv()}}}
oXmlHttp.send(null)}
function SetSelectedValue(sValue)
{TRACE("SetSelectedValue: "+sValue);var hdnSelectedValue=document.getElementById(this.msTextBoxID+"_SelectedValue");hdnSelectedValue.value=sValue;}
function SetTextBoxValue(fillFullText)
{var divMenuItem=this.GetSelMenuItemDiv();if(divMenuItem)
{var sValue=divMenuItem.getAttribute('xvalue');TRACE("SetTextBoxValue : Set selected item to "+sValue);this.SetSelectedValue(sValue);var txtCtrl=this.GetTextBoxCtrl();if(fillFullText)
{txtCtrl.value=GetInnerHtml(divMenuItem);}
else
{txtCtrl.value=sValue;}}}
function GetTextBoxValue()
{var txtCtrl=this.GetTextBoxCtrl();return(txtCtrl.value);}
function OnMouseClick(nMenuIndex)
{this.mnSelMenuItem=nMenuIndex;this.SetTextBoxValue(this.mbFillFullText);this.HideMenuDiv();}
function OnMouseOver(nMenuIndex)
{this.SelectMenuItem(nMenuIndex);}
function OnKeyDown(evt)
{TRACE("OnKeyDown : "+this.GetKey(evt)+", "+this.msTextBoxID);this.mbHasFocus=true;this.msOldTextBoxValue=this.GetTextBoxValue();TRACE("OnKeyDown : old text box value='"+this.msOldTextBoxValue+"'");var nKey;nKey=this.GetKey(evt);TRACE("OnKeyDown : Key is "+nKey);if(nKey==38)
{this.MoveDown()}
else if(nKey==40)
{this.MoveUp()}
else if(nKey==13)
{TRACE("OnKeyDown : IsVisibleMenuDiv - "+this.IsVisibleMenuDiv());if(this.IsVisibleMenuDiv())
{this.SetTextBoxValue(this.mbFillFullText);this.HideMenuDiv();evt.cancelBubble=true;if(evt.returnValue)evt.returnValue=false;if(evt.stopPropagation)evt.stopPropagation();this.mbCancelSubmit=true;}
else
{this.mbCancelSubmit=false;}}
else
{this.HideMenuDiv();}
return true;}
function OnBoxClick(evt)
{{var txtCtrl=this.GetTextBoxCtrl();txtCtrl.focus();txtCtrl.select();}
return true;}
function OnKeyPress(evt)
{TRACE("OnKeyPress : "+this.GetKey(evt));if((this.GetKey(evt)==13)&&(this.mbCancelSubmit))
{return false;}
return true;}
function OnKeyUp(evt)
{var nKey;nKey=this.GetKey(evt);TRACE("OnKeyUp : "+nKey);if((nKey!=38)&&(nKey!=40)&&(nKey!=13))
{var sNewValue;sNewValue=this.GetTextBoxValue();if((sNewValue.length<=this.mnMaxSuggestChars)&&(sNewValue.length>0))
{TRACE("OnKeyUp : Getting data for '"+sNewValue+"'");var divMenu=this.GetMenuDiv();if(divMenu.timer)window.clearTimeout(divMenu.timer);sNewValue=sNewValue.replace(/\'/,"\\\'");var sFunc="asbGetObj('"+this.msTextBoxID+"').GetDataFromServer('"+sNewValue+"')";TRACE("OnKeyUp : "+sFunc);divMenu.timer=window.setTimeout(sFunc,this.mnKeyPressDelay);}
if(this.msOldTextBoxValue!=sNewValue)
{this.SetSelectedValue("");}}}
function OnBlur()
{TRACE("OnBlur");this.HideMenuDiv();this.mbHasFocus=false;}
function GetSelMenuItemDiv()
{return this.GetMenuItemDiv(this.mnSelMenuItem);}
function GetMenuItemDivID(nMenuItem)
{return(this.msTextBoxID+"_mi_"+nMenuItem);}
function GetMenuItemDiv(nMenuItem)
{var sDivMenuItemID=this.GetMenuItemDivID(nMenuItem);return document.getElementById(sDivMenuItemID)}
function MoveUp()
{var nMenuItem;nMenuItem=this.mnSelMenuItem+1;if(this.GetMenuItemDiv(nMenuItem))
{this.SelectMenuItem(nMenuItem)}}
function MoveFirst()
{var nMenuItem;nMenuItem=1;if(this.GetMenuItemDiv(nMenuItem))
{this.SelectMenuItem(nMenuItem)}}
function MoveDown()
{var nMenuItem;nMenuItem=this.mnSelMenuItem-1;if(nMenuItem!=0)
{this.SelectMenuItem(nMenuItem)}}
function SelectMenuItem(nMenuItem)
{var divMenuItem=this.GetMenuItemDiv(nMenuItem)
if(divMenuItem)
{if(nMenuItem!=this.mnSelMenuItem)
{this.UnselectMenuItem();this.mnSelMenuItem=nMenuItem;divMenuItem.className=this.msSelMenuItemCSSClass;}}}
function UnselectMenuItem()
{var divMenuItem=this.GetSelMenuItemDiv()
if(divMenuItem)
{divMenuItem.className=this.msMenuItemCSSClass;}}
function IsVisibleMenuDiv()
{if(this.GetMenuDiv().style.visibility=='hidden')
{return false;}
else
{return true;}}
function MoveMenuDivIfAbsolutePos()
{var txtCtrl=this.GetTextBoxCtrl();var divMenu=this.GetMenuDiv();if(txtCtrl.style.position!="absolute")
return;TRACE("MoveMenuDivIfAbsolutePos Moving absolute");divMenu.style.left=txtCtrl.offsetLeft;divMenu.style.top=txtCtrl.offsetTop+txtCtrl.offsetHeight;}
function ShowMenuDiv(sDivContent)
{this.MoveMenuDivIfAbsolutePos();TRACE("ShowMenuDiv : "+this.msTextBoxID);var divMenu=this.GetMenuDiv();var sInnerHtml;if(IsIE()&&this.mbUseIFrame)
{sInnerHtml="<div id='"+this.msMenuDivID+"_content'>";sInnerHtml+=sDivContent;sInnerHtml+="</div>";var sBlankPage=this.msResourcesDir+"/Blank.html";sInnerHtml+="<iframe id='"+this.msMenuDivID+"_iframe' src='"+sBlankPage+"' frameborder='1' scrolling='no'></iframe>";}
else
{sInnerHtml=sDivContent;}
divMenu.innerHTML=sInnerHtml;if(IsIE()&&this.mbUseIFrame)
{var divContent;divContent=document.getElementById(this.msMenuDivID+"_content");var divIframe;divIframe=document.getElementById(this.msMenuDivID+"_iframe");divContent.className=this.msMenuCSSClass;divMenu.className="asbMenuBase";divIframe.style.width=divContent.offsetWidth+'px';divIframe.style.height=divContent.offsetHeight+'px';divIframe.marginTop="-"+divContent.offsetHeight+'px';}
divMenu.style.visibility='visible';this.MoveFirst();}
function HideMenuDiv()
{this.GetMenuDiv().style.visibility='hidden';this.mnSelMenuItem=0;}
function IsIE()
{return(window.navigator.userAgent.indexOf("MSIE ")>0&&window.navigator.userAgent.indexOf("Opera")<=0);}
function IsNav()
{return(navigator.appName=="Netscape");}
function GetInnerHtml(oItem)
{var sOut;if(oItem.innerText)
{sOut=oItem.innerText;}
else if(oItem.textContent)
{sOut=oItem.textContent;}
return(sOut);}
function TRACE(sText)
{var txtTrace=document.getElementById("txtASBTrace");if(txtTrace!=null)
txtTrace.value=txtTrace.value+sText+"\n";}}
