// // uncompressed / commented / renamed by Chris... // var w=""; var pa=false; var _oldInputFieldValue=""; // inputField value (set during call to google...)...(was ta) var da=false; var _currentInputFieldValue=""; // also inputField value (was g) var G=""; var _eventKeycode=""; // event keycode... (was m) var _highlightedSuggestionIndex=-1; // currently hightlighted suggestion index (was j) var _highlightedSuggestionDiv=null; // currently highlisted suggestion div... (was h) var _completeDivRows=-1; // completeDiv rows at time of keypress... (was Z) var _completeDivDivList=null; // completeDiv div list at time of keypress (was za) var _completeDivRows2=5; // was Ca... initially 5? not sure difference between this and _completeDivRows... var q=""; var _divTag="div"; // Was Lb var _spanTag="span"; // Was Bb var _documentForm=null; // Form on html page... (was la...) var _inputField=null; // Input field on form... (was a) var _completeDiv=null; // document.completeDiv (was b) var _submitButton=null; // submit button (was Xa) var mb=null; var X=null; var _enString=null; // This becomes the string "en" (was ha) var _cursorUpDownPressed=false; // Was ra... var kc=null; var hc=null; var _resultCache=new Object(); // This is a cache of results from google... (was Ua) var ca=1; var Aa=1; var Y=false; var _lastKeyCode=-1; // Gets set on keyDown... Was na... var Va=(new Date()).getTime(); var _hasXMLHTTP=false; // Gets set to true if XMLHTTP Supported (was Q) var _xmlHttp=null; // This is the XMLHttp Object... (was k) var _completeSearchEnString=null; // Gets set to "/complete/search/?hl=en" (was sa) var _completeSearchString=null; // Gets set to "/complete/search" ... (was E) var B=null; var aa=null; var Ba=false; var Ka=false; var p=60; var _searchString=null; // Gets set to "search" in installAC (was ia) var ya=null; var _timeoutAdjustment=0; // timeout adjustment... (was W)... gets adjusted over time... var a = null; // This is the function that get's called from the google html page... // Line from page: // InstallAC(document.f,document.f.q,document.f.btnG,"search","en"); // document.f is the name of the form on the page... // document.f.q is the input text box on the page... // -> // document.f.btnG Google Search button InstallAC=function(frm,fld,sb,pn,rl,hd,sm,ufn){ _documentForm=frm; _inputField=fld; _submitButton=sb; if(!pn) { pn="search"; } _searchString=pn; var Kb="en|"; var Jb="zh-CN|zh-TW|ja|ko|vi|"; if(!rl||Kb.indexOf(rl+"|")==-1) { rl="en"; } _enString=escapeURI(rl); if(Jb.indexOf(_enString+"|")==-1){ // We won't pass through here... X=true; Y=false; Ba=false }else{ // but will come through here... X=false; if(_enString.indexOf("zh")==0) { // not here... Y=false; } else { // but here... Y=true; } Ba=true } // hd is not defined, so becomes false... if(!hd) { hd=false; } ya=hd; // sm not defined, so becomes the string "query" if(!sm) { sm="query"; } w=sm; // ufn is not defined... mb=ufn; installACPartTwo() _inputField.readOnly = false; } ; // blurs focus, then sets focus again... // This is getting aclled when we press cursor up / cursor down... // Was Yb... function blurThenGetFocus(){ _cursorUpDownPressed=true; _inputField.blur(); setTimeout("setInputFieldFocus();",10); return } // setup a keydown event... // Was Fb... function setupKeydown1(){ if(document.createEventObject) { var y=document.createEventObject(); y.ctrlKey=true; y.keyCode=70; document.fireEvent("onkeydown",y) } } // setup a keydown event... // I can't figure out what calls this... // was nc... function setupKeydown2(vb){ var y=document.createEventObject(); y.ctrlKey=true; y.keyCode=vb; document.fireEvent("onkeydown",y) } function gc(event){} function ic(event){} // Was Pb function keyDownHandler(event){ if(!event&&window.event) { event=window.event; } if(event) { _lastKeyCode=event.keyCode; } var a; // We are backspacing here... if(event&&event.keyCode==8){ if(X&&(_inputField.createTextRange && (event.srcElement==a&&(bb(_inputField)==0&&lb(_inputField)==0)))){ cc(_inputField); event.cancelBubble=true; event.returnValue=false; return false } } } function mc(){} // Was Db.. function resizeHandler(){ if(w=="url"){ setInputFieldSize() } setCompleteDivSize() } // was ba... function setCompleteDivSize(){ if(_completeDiv){ _completeDiv.style.left=calculateOffsetLeft(_inputField)+2+"px"; _completeDiv.style.top=calculateOffsetTop(_inputField)+_inputField.offsetHeight+"px"; _completeDiv.style.width=calculateWidth() -3 +"px" } } // calculate width of inputField... Note browser specific adjustments... // Was Ja() function calculateWidth(){ if(navigator&&navigator.userAgent.toLowerCase().indexOf("msie")==-1){ return _inputField.offsetWidth-ca*2 }else{ return _inputField.offsetWidth } } // Called from InstallAC... // was ac() function installACPartTwo(){ if(getXMLHTTP()){ _hasXMLHTTP=true }else{ _hasXMLHTTP=false } // pa init'd to false at the top of this file... if(pa) { _completeSearchString="complete"; } else { _completeSearchString="/complete/"+_searchString; } _completeSearchEnString=_completeSearchString+"?hl="+_enString; if(!_hasXMLHTTP){ setCookie("qu","",0,_completeSearchString,null,null) } addEvent(_documentForm, "submit", Fa); //_documentForm.onsubmit = Fa; _inputField.autocomplete="off"; _inputField.onblur=onBlurHandler; if(_inputField.createTextRange) { _inputField.onkeyup=new Function("return okuh(event);"); } else { _inputField.onkeyup=okuh; } addEvent(_inputField, "submit", Fa); //_inputField.onsubmit=Fa; _currentInputFieldValue=_inputField.value; _oldInputFieldValue=_currentInputFieldValue; _completeDiv=document.createElement("DIV"); _completeDiv.id="completeDiv" + _inputField.id; ca=1; Aa=1; _completeDiv.style.borderRight="black "+ca+"px solid"; _completeDiv.style.borderLeft="black "+ca+"px solid"; _completeDiv.style.borderTop="black "+Aa+"px solid"; _completeDiv.style.borderBottom="black "+Aa+"px solid"; _completeDiv.style.zIndex="9999999"; _completeDiv.style.paddingRight="0"; _completeDiv.style.paddingLeft="0"; _completeDiv.style.paddingTop="0"; _completeDiv.style.paddingBottom="0"; setCompleteDivSize(); _completeDiv.style.display="none"; _completeDiv.style.position="absolute"; _completeDiv.style.backgroundColor="white"; document.body.appendChild(_completeDiv); cacheResults("",new Array(),new Array()); Gb(_completeDiv); var s=document.createElement("DIV"); s.style.display="none"; s.style.position="absolute"; s.style.left="-10000"; s.style.top="-10000"; s.style.width="0"; s.style.height="0"; var M=document.createElement("IFRAME"); M.completeDiv=_completeDiv; M.name="completionFrame"; M.id="completionFrame"; M.src=_completeSearchEnString; s.appendChild(M); document.body.appendChild(s); if(frames&&(frames["completionFrame"]&&frames["completionFrame"].frameElement)) { B=frames["completionFrame"].frameElement; } else { B=document.getElementById("completionFrame"); } if(w=="url"){ setInputFieldSize(); setCompleteDivSize() } window.onresize=resizeHandler; document.onkeydown=keyDownHandler; setupKeydown1() } function addEvent(obj, evType, fn) { if (obj.addEventListener) { obj.addEventListener(evType, fn, false); return true; } else if (obj.attachEvent) { var r = obj.attachEvent("on"+evType, fn); return r; } else { return false; } } // Was Ob function onBlurHandler(event){ if(!event&&window.event) { event=window.event; } if(!_cursorUpDownPressed){ hideCompleteDiv(); // check if tab pressed... if(_lastKeyCode==9){ _lastKeyCode=-1 } } _cursorUpDownPressed=false } okuh=function(e){ _eventKeycode=e.keyCode; aa=_inputField.value; Oa() } ; // Was Xb... function setSubmitButtonFocus(){ _submitButton.focus() } // Was sfi.. setInputFieldFocus=function(){ _inputField.focus() } ; // strip CR from string... // was Wb function stripCRFromString(va){ for(var f=0,oa="",zb="\n\r"; f0) { _timeoutAdjustment--; } var lc=(new Date()).getTime(); if(!fr) { fr=B; } cacheResults(is,cs,ds); var b=fr.completeDiv; b.completeStrings=cs; b.displayStrings=ds; b.prefixStrings=pr; displaySuggestedList(b,b.completeStrings,b.displayStrings); Pa(b,valueOfCAutoComplete); if(_completeDivRows2>0) { b.height=16*_completeDivRows2+4; } else { hideCompleteDiv(); } } function Oa(){ // 38 is up cursor key, 40 is down cursor key... if(_eventKeycode==40||_eventKeycode==38) { blurThenGetFocus(); } var N=lb(_inputField); var v=bb(_inputField); var V=_inputField.value; if(X&&_eventKeycode!=0){ if(N>0&&v!=-1) { V=V.substring(0,v); } if(_eventKeycode==13||_eventKeycode==3){ var d=_inputField; if(d.createTextRange){ var t=d.createTextRange(); t.moveStart("character",d.value.length); t.select() } else if (d.setSelectionRange){ d.setSelectionRange(d.value.length,d.value.length) } } else { if(_inputField.value!=V) { selectEntry(V) } } } _currentInputFieldValue=V; if(handleCursorUpDownEnter(_eventKeycode)&&_eventKeycode!=0) { Pa(_completeDiv,valueOfCAutoComplete) } } function Fa(e) { if (document.getElementById("completeDiv" + _inputField.id).style.display == "inline") { hideCompleteDiv(); if (e && e.preventDefault) e.preventDefault(); else false; } else return true; } function xb(eb) { da=true; if(!_hasXMLHTTP){ setCookie("qu","",0,_completeSearchString,null,null) } hideCompleteDiv(); if(eb=="url"){ var R=""; if(_highlightedSuggestionIndex!=-1&&h) { R=valueOfCAutoComplete(_highlightedSuggestionDiv); } if(R=="") { R=_inputField.value; } if(q=="") { document.title=R; } else { document.title=q; } var Tb="window.frames['"+mb+"'].location = \""+R+'";'; setTimeout(Tb,10); return false } else if(eb=="query"){ //_documentForm.submit(); return true } } newwin=function(){ window.open(_inputField.value); hideCompleteDiv(); return false } ; idkc=function(e){ if(Ba){ var Ta=_inputField.value; if(Ta!=aa){ _eventKeycode=0; Oa() } aa=Ta; setTimeout("idkc()",10) } } ; setTimeout("idkc()",10); // Go read about encodeURIComponent here: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/js56jsmthencodeuricomponent.asp // Basically converts a string to a valid uri... (spaces become %20, etc, etc..) // this function was nb... function escapeURI(La){ if(encodeURIComponent) { return encodeURIComponent(La); } if(escape) { return escape(La) } } // Was yb // If Mb is 0, will return 150... // If Mb is 3, will return 250... // If Mb is 4, will return 450... // If Mb is X, will return 850... function recalculateTimeout(Mb){ var H=100; for(var o=1; o<=(Mb-2)/2; o++){ H=H*2 } H=H+50; return H } // This function sets itself up and gets called over and over (timeout driven) // was idfn... mainLoop=function(){ if(_oldInputFieldValue!=_currentInputFieldValue){ if(!da){ var Za=escapeURI(_currentInputFieldValue); var ma=_resultCache[_currentInputFieldValue]; if(ma){ // Found in our cache... Va=-1; sendRPCDone(B,_currentInputFieldValue,ma[0],ma[1],B.completeDiv.prefixStrings) }else{ _timeoutAdjustment++; Va=(new Date()).getTime(); x.fetchData(); } _inputField.focus() } da=false } _oldInputFieldValue=_currentInputFieldValue; setTimeout("mainLoop()",recalculateTimeout(_timeoutAdjustment)); return true } ; // Call mainLoop() after 10 milliseconds... setTimeout("mainLoop()",10); // This is onMouseDown function... var Cb=function(){ selectEntry(valueOfCAutoComplete(this)); q=valueOfDAutoComplete(this); da=true; Fa() } ; // on mouseover... var pb=function(){ if(_highlightedSuggestionDiv) { setStyleForElement(_highlightedSuggestionDiv,"aAutoComplete"); } setStyleForElement(this,"bAutoComplete") } ; // On Mouse out... var ec=function(){ setStyleForElement(this,"aAutoComplete") } ; // Called when cursor up/down pressed... selects new entry in completeDiv... // was Na function highlightNewValue(C){ // fix here // var i; // for (i = 0; i <= _completeDivDivList.item.length; i++) // { // setStyleForElement(_completeDivDivList.item(i),"aAutoComplete"); // } _currentInputFieldValue=G; selectEntry(G); q=G; if(!_completeDivDivList||_completeDivRows<=0) { return; } showCompleteDiv(); if(C>=_completeDivRows){ C=_completeDivRows-1 } if(_highlightedSuggestionIndex!=-1&&C!=_highlightedSuggestionIndex){ setStyleForElement(_highlightedSuggestionDiv,"aAutoComplete"); _highlightedSuggestionIndex=-1 } if(C<0){ _highlightedSuggestionIndex=-1; _inputField.focus(); return } _highlightedSuggestionIndex=C; _highlightedSuggestionDiv=_completeDivDivList.item(C); setStyleForElement(_highlightedSuggestionDiv,"bAutoComplete"); _currentInputFieldValue=G; q=valueOfDAutoComplete(_highlightedSuggestionDiv); selectEntry(valueOfCAutoComplete(_highlightedSuggestionDiv)) } // Was Eb // returns false if cursor up / cursor down or enter pressed... function handleCursorUpDownEnter(eventCode){ if(eventCode==40){ highlightNewValue(_highlightedSuggestionIndex+1); return false }else if(eventCode==38){ highlightNewValue(_highlightedSuggestionIndex-1); return false }else if(eventCode==13||eventCode==3){ return false } return true } // Pa(completeDiv,H) // This function gets called for every keypress I make... function Pa(localCompleteDiv,ib){ var localInputField=_inputField; var T=false; _highlightedSuggestionIndex=-1; // This becomes the rows in our suggestion list... var J=localCompleteDiv.getElementsByTagName(_divTag); // # of rows in list... var O=J.length; _completeDivRows=O; _completeDivDivList=J; _completeDivRows2=O; G=_currentInputFieldValue; if(_currentInputFieldValue==""||O==0||_lastKeyCode == 13){ hideCompleteDiv() }else{ showCompleteDiv() } var Ab=""; if(_currentInputFieldValue.length>0){ var f; var o; // My prefixStrings was always an empty array... // So local variable T never would be set to true... // And the local variable Ab would remain empty... for(var f=0; f0) { i.removeChild(i.childNodes[0]); } // For each element in our list, we create: //
// // // bug tracking // // // 500,000 results // // //
for(var f=0; f 0) { var entity = s.substring(i + 1, semicolonIndex); if (entity.length > 1 && entity.charAt(0) == '#') { if (entity.charAt(1) == 'x' || entity.charAt(1) == 'X') ch = String.fromCharCode(eval('0'+entity.substring(1))); else ch = String.fromCharCode(eval(entity.substring(1))); } else { switch (entity) { case 'quot': ch = String.fromCharCode(0x0022); break; case 'amp': ch = String.fromCharCode(0x0026); break; case 'lt': ch = String.fromCharCode(0x003c); break; case 'gt': ch = String.fromCharCode(0x003e); break; case 'nbsp': ch = String.fromCharCode(0x00a0); break; case 'iexcl': ch = String.fromCharCode(0x00a1); break; case 'cent': ch = String.fromCharCode(0x00a2); break; case 'pound': ch = String.fromCharCode(0x00a3); break; case 'curren': ch = String.fromCharCode(0x00a4); break; case 'yen': ch = String.fromCharCode(0x00a5); break; case 'brvbar': ch = String.fromCharCode(0x00a6); break; case 'sect': ch = String.fromCharCode(0x00a7); break; case 'uml': ch = String.fromCharCode(0x00a8); break; case 'copy': ch = String.fromCharCode(0x00a9); break; case 'ordf': ch = String.fromCharCode(0x00aa); break; case 'laquo': ch = String.fromCharCode(0x00ab); break; case 'not': ch = String.fromCharCode(0x00ac); break; case 'shy': ch = String.fromCharCode(0x00ad); break; case 'reg': ch = String.fromCharCode(0x00ae); break; case 'macr': ch = String.fromCharCode(0x00af); break; case 'deg': ch = String.fromCharCode(0x00b0); break; case 'plusmn': ch = String.fromCharCode(0x00b1); break; case 'sup2': ch = String.fromCharCode(0x00b2); break; case 'sup3': ch = String.fromCharCode(0x00b3); break; case 'acute': ch = String.fromCharCode(0x00b4); break; case 'micro': ch = String.fromCharCode(0x00b5); break; case 'para': ch = String.fromCharCode(0x00b6); break; case 'middot': ch = String.fromCharCode(0x00b7); break; case 'cedil': ch = String.fromCharCode(0x00b8); break; case 'sup1': ch = String.fromCharCode(0x00b9); break; case 'ordm': ch = String.fromCharCode(0x00ba); break; case 'raquo': ch = String.fromCharCode(0x00bb); break case 'frac14': ch = String.fromCharCode(0x00bc); break; case 'frac12': ch = String.fromCharCode(0x00bd); break; case 'frac34': ch = String.fromCharCode(0x00be); break; case 'iquest': ch = String.fromCharCode(0x00bf); break; case 'Agrave': ch = String.fromCharCode(0x00c0); break; case 'Aacute': ch = String.fromCharCode(0x00c1); break; case 'Acirc': ch = String.fromCharCode(0x00c2); break; case 'Atilde': ch = String.fromCharCode(0x00c3); break; case 'Auml': ch = String.fromCharCode(0x00c4); break; case 'Aring': ch = String.fromCharCode(0x00c5); break; case 'AElig': ch = String.fromCharCode(0x00c6); break; case 'Ccedil': ch = String.fromCharCode(0x00c7); break; case 'Egrave': ch = String.fromCharCode(0x00c8); break; case 'Eacute': ch = String.fromCharCode(0x00c9); break; case 'Ecirc': ch = String.fromCharCode(0x00ca); break; case 'Euml': ch = String.fromCharCode(0x00cb); break; case 'Igrave': ch = String.fromCharCode(0x00cc); break; case 'Iacute': ch = String.fromCharCode(0x00cd); break; case 'Icirc': ch = String.fromCharCode(0x00ce ); break; case 'Iuml': ch = String.fromCharCode(0x00cf); break; case 'ETH': ch = String.fromCharCode(0x00d0); break; case 'Ntilde': ch = String.fromCharCode(0x00d1); break; case 'Ograve': ch = String.fromCharCode(0x00d2); break; case 'Oacute': ch = String.fromCharCode(0x00d3); break; case 'Ocirc': ch = String.fromCharCode(0x00d4); break; case 'Otilde': ch = String.fromCharCode(0x00d5); break; case 'Ouml': ch = String.fromCharCode(0x00d6); break; case 'times': ch = String.fromCharCode(0x00d7); break; case 'Oslash': ch = String.fromCharCode(0x00d8); break; case 'Ugrave': ch = String.fromCharCode(0x00d9); break; case 'Uacute': ch = String.fromCharCode(0x00da); break; case 'Ucirc': ch = String.fromCharCode(0x00db); break; case 'Uuml': ch = String.fromCharCode(0x00dc); break; case 'Yacute': ch = String.fromCharCode(0x00dd); break; case 'THORN': ch = String.fromCharCode(0x00de); break; case 'szlig': ch = String.fromCharCode(0x00df); break; case 'agrave': ch = String.fromCharCode(0x00e0); break; case 'aacute': ch = String.fromCharCode(0x00e1); break; case 'acirc': ch = String.fromCharCode(0x00e2); break; case 'atilde': ch = String.fromCharCode(0x00e3); break; case 'auml': ch = String.fromCharCode(0x00e4); break; case 'aring': ch = String.fromCharCode(0x00e5); break; case 'aelig': ch = String.fromCharCode(0x00e6); break; case 'ccedil': ch = String.fromCharCode(0x00e7); break; case 'egrave': ch = String.fromCharCode(0x00e8); break; case 'eacute': ch = String.fromCharCode(0x00e9); break; case 'ecirc': ch = String.fromCharCode(0x00ea); break; case 'euml': ch = String.fromCharCode(0x00eb); break; case 'igrave': ch = String.fromCharCode(0x00ec); break; case 'iacute': ch = String.fromCharCode(0x00ed); break; case 'icirc': ch = String.fromCharCode(0x00ee); break; case 'iuml': ch = String.fromCharCode(0x00ef); break; case 'eth': ch = String.fromCharCode(0x00f0); break; case 'ntilde': ch = String.fromCharCode(0x00f1); break; case 'ograve': ch = String.fromCharCode(0x00f2); break; case 'oacute': ch = String.fromCharCode(0x00f3); break; case 'ocirc': ch = String.fromCharCode(0x00f4); break; case 'otilde': ch = String.fromCharCode(0x00f5); break; case 'ouml': ch = String.fromCharCode(0x00f6); break; case 'divide': ch = String.fromCharCode(0x00f7); break; case 'oslash': ch = String.fromCharCode(0x00f8); break; case 'ugrave': ch = String.fromCharCode(0x00f9); break; case 'uacute': ch = String.fromCharCode(0x00fa); break; case 'ucirc': ch = String.fromCharCode(0x00fb); break; case 'uuml': ch = String.fromCharCode(0x00fc); break; case 'yacute': ch = String.fromCharCode(0x00fd); break; case 'thorn': ch = String.fromCharCode(0x00fe); break; case 'yuml': ch = String.fromCharCode(0x00ff); break; case 'OElig': ch = String.fromCharCode(0x0152); break; case 'oelig': ch = String.fromCharCode(0x0153); break; case 'Scaron': ch = String.fromCharCode(0x0160); break; case 'scaron': ch = String.fromCharCode(0x0161); break; case 'Yuml': ch = String.fromCharCode(0x0178); break; case 'fnof': ch = String.fromCharCode(0x0192); break; case 'circ': ch = String.fromCharCode(0x02c6); break; case 'tilde': ch = String.fromCharCode(0x02dc); break; case 'Alpha': ch = String.fromCharCode(0x0391); break; case 'Beta': ch = String.fromCharCode(0x0392); break; case 'Gamma': ch = String.fromCharCode(0x0393); break; case 'Delta': ch = String.fromCharCode(0x0394); break; case 'Epsilon': ch = String.fromCharCode(0x0395); break; case 'Zeta': ch = String.fromCharCode(0x0396); break; case 'Eta': ch = String.fromCharCode(0x0397); break; case 'Theta': ch = String.fromCharCode(0x0398); break; case 'Iota': ch = String.fromCharCode(0x0399); break; case 'Kappa': ch = String.fromCharCode(0x039a); break; case 'Lambda': ch = String.fromCharCode(0x039b); break; case 'Mu': ch = String.fromCharCode(0x039c); break; case 'Nu': ch = String.fromCharCode(0x039d); break; case 'Xi': ch = String.fromCharCode(0x039e); break; case 'Omicron': ch = String.fromCharCode(0x039f); break; case 'Pi': ch = String.fromCharCode(0x03a0); break; case ' Rho ': ch = String.fromCharCode(0x03a1); break; case 'Sigma': ch = String.fromCharCode(0x03a3); break; case 'Tau': ch = String.fromCharCode(0x03a4); break; case 'Upsilon': ch = String.fromCharCode(0x03a5); break; case 'Phi': ch = String.fromCharCode(0x03a6); break; case 'Chi': ch = String.fromCharCode(0x03a7); break; case 'Psi': ch = String.fromCharCode(0x03a8); break; case 'Omega': ch = String.fromCharCode(0x03a9); break; case 'alpha': ch = String.fromCharCode(0x03b1); break; case 'beta': ch = String.fromCharCode(0x03b2); break; case 'gamma': ch = String.fromCharCode(0x03b3); break; case 'delta': ch = String.fromCharCode(0x03b4); break; case 'epsilon': ch = String.fromCharCode(0x03b5); break; case 'zeta': ch = String.fromCharCode(0x03b6); break; case 'eta': ch = String.fromCharCode(0x03b7); break; case 'theta': ch = String.fromCharCode(0x03b8); break; case 'iota': ch = String.fromCharCode(0x03b9); break; case 'kappa': ch = String.fromCharCode(0x03ba); break; case 'lambda': ch = String.fromCharCode(0x03bb); break; case 'mu': ch = String.fromCharCode(0x03bc); break; case 'nu': ch = String.fromCharCode(0x03bd); break; case 'xi': ch = String.fromCharCode(0x03be); break; case 'omicron': ch = String.fromCharCode(0x03bf); break; case 'pi': ch = String.fromCharCode(0x03c0); break; case 'rho': ch = String.fromCharCode(0x03c1); break; case 'sigmaf': ch = String.fromCharCode(0x03c2); break; case 'sigma': ch = String.fromCharCode(0x03c3); break; case 'tau': ch = String.fromCharCode(0x03c4); break; case 'upsilon': ch = String.fromCharCode(0x03c5); break; case 'phi': ch = String.fromCharCode(0x03c6); break; case 'chi': ch = String.fromCharCode(0x03c7); break; case 'psi': ch = String.fromCharCode(0x03c8); break; case 'omega': ch = String.fromCharCode(0x03c9); break; case 'thetasym': ch = String.fromCharCode(0x03d1); break; case 'upsih': ch = String.fromCharCode(0x03d2); break; case 'piv': ch = String.fromCharCode(0x03d6); break; case 'ensp': ch = String.fromCharCode(0x2002); break; case 'emsp': ch = String.fromCharCode(0x2003); break; case 'thinsp': ch = String.fromCharCode(0x2009); break; case 'zwnj': ch = String.fromCharCode(0x200c); break; case 'zwj': ch = String.fromCharCode(0x200d); break; case 'lrm': ch = String.fromCharCode(0x200e); break; case 'rlm': ch = String.fromCharCode(0x200f); break; case 'ndash': ch = String.fromCharCode(0x2013); break; case 'mdash': ch = String.fromCharCode(0x2014); break; case 'lsquo': ch = String.fromCharCode(0x2018); break; case 'rsquo': ch = String.fromCharCode(0x2019); break; case 'sbquo': ch = String.fromCharCode(0x201a); break; case 'ldquo': ch = String.fromCharCode(0x201c); break; case 'rdquo': ch = String.fromCharCode(0x201d); break; case 'bdquo': ch = String.fromCharCode(0x201e); break; case 'dagger': ch = String.fromCharCode(0x2020); break; case 'Dagger': ch = String.fromCharCode(0x2021); break; case 'bull': ch = String.fromCharCode(0x2022); break; case 'hellip': ch = String.fromCharCode(0x2026); break; case 'permil': ch = String.fromCharCode(0x2030); break; case 'prime': ch = String.fromCharCode(0x2032); break; case 'Prime': ch = String.fromCharCode(0x2033); break; case 'lsaquo': ch = String.fromCharCode(0x2039); break; case 'rsaquo': ch = String.fromCharCode(0x203a); break; case 'oline': ch = String.fromCharCode(0x203e); break; case 'frasl': ch = String.fromCharCode(0x2044); break; case 'euro': ch = String.fromCharCode(0x20ac); break; case 'image': ch = String.fromCharCode(0x2111); break; case 'weierp': ch = String.fromCharCode(0x2118); break; case 'real': ch = String.fromCharCode(0x211c); break; case 'trade': ch = String.fromCharCode(0x2122); break; case 'alefsym': ch = String.fromCharCode(0x2135); break; case 'larr': ch = String.fromCharCode(0x2190); break; case 'uarr': ch = String.fromCharCode(0x2191); break; case 'rarr': ch = String.fromCharCode(0x2192); break; case 'darr': ch = String.fromCharCode(0x2193); break; case 'harr': ch = String.fromCharCode(0x2194); break; case 'crarr': ch = String.fromCharCode(0x21b5); break; case 'lArr': ch = String.fromCharCode(0x21d0); break; case 'uArr': ch = String.fromCharCode(0x21d1); break; case 'rArr': ch = String.fromCharCode(0x21d2); break; case 'dArr': ch = String.fromCharCode(0x21d3); break; case 'hArr': ch = String.fromCharCode(0x21d4); break; case 'forall': ch = String.fromCharCode(0x2200); break; case 'part': ch = String.fromCharCode(0x2202); break; case 'exist': ch = String.fromCharCode(0x2203); break; case 'empty': ch = String.fromCharCode(0x2205); break; case 'nabla': ch = String.fromCharCode(0x2207); break; case 'isin': ch = String.fromCharCode(0x2208); break; case 'notin': ch = String.fromCharCode(0x2209); break; case 'ni': ch = String.fromCharCode(0x220b); break; case 'prod': ch = String.fromCharCode(0x220f); break; case 'sum': ch = String.fromCharCode(0x2211); break; case 'minus': ch = String.fromCharCode(0x2212); break; case 'lowast': ch = String.fromCharCode(0x2217); break; case 'radic': ch = String.fromCharCode(0x221a); break; case 'prop': ch = String.fromCharCode(0x221d); break; case 'infin': ch = String.fromCharCode(0x221e); break; case 'ang': ch = String.fromCharCode(0x2220); break; case 'and': ch = String.fromCharCode(0x2227); break; case 'or': ch = String.fromCharCode(0x2228); break; case 'cap': ch = String.fromCharCode(0x2229); break; case 'cup': ch = String.fromCharCode(0x222a); break; case 'int': ch = String.fromCharCode(0x222b); break; case 'there4': ch = String.fromCharCode(0x2234); break; case 'sim': ch = String.fromCharCode(0x223c); break; case 'cong': ch = String.fromCharCode(0x2245); break; case 'asymp': ch = String.fromCharCode(0x2248); break; case 'ne': ch = String.fromCharCode(0x2260); break; case 'equiv': ch = String.fromCharCode(0x2261); break; case 'le': ch = String.fromCharCode(0x2264); break; case 'ge': ch = String.fromCharCode(0x2265); break; case 'sub': ch = String.fromCharCode(0x2282); break; case 'sup': ch = String.fromCharCode(0x2283); break; case 'nsub': ch = String.fromCharCode(0x2284); break; case 'sube': ch = String.fromCharCode(0x2286); break; case 'supe': ch = String.fromCharCode(0x2287); break; case 'oplus': ch = String.fromCharCode(0x2295); break; case 'otimes': ch = String.fromCharCode(0x2297); break; case 'perp': ch = String.fromCharCode(0x22a5); break; case 'sdot': ch = String.fromCharCode(0x22c5); break; case 'lceil': ch = String.fromCharCode(0x2308); break; case 'rceil': ch = String.fromCharCode(0x2309); break; case 'lfloor': ch = String.fromCharCode(0x230a); break; case 'rfloor': ch = String.fromCharCode(0x230b); break; case 'lang': ch = String.fromCharCode(0x2329); break; case 'rang': ch = String.fromCharCode(0x232a); break; case 'loz': ch = String.fromCharCode(0x25ca); break; case 'spades': ch = String.fromCharCode(0x2660); break; case 'clubs': ch = String.fromCharCode(0x2663); break; case 'hearts': ch = String.fromCharCode(0x2665); break; case 'diams': ch = String.fromCharCode(0x2666); break; default: ch = ''; break; } } i = semicolonIndex; } } out += ch; } return out; }