<!DOCTYPE NETSCAPE-Bookmark-file-1><!-- This is an automatically generated file. It will be read and overwritten. DO NOT EDIT! --><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"><TITLE>Bookmarks</TITLE><H1>Bookmarks Menu</H1><DL><p> <DT><A HREF="place:folder=BOOKMARKS_MENU&folder=UNFILED_BOOKMARKS&folder=TOOLBAR&sort=12&excludeQueries=1&excludeItemIfParentHasAnnotation=livemark%2FfeedURI&maxResults=10&queryType=1">Recently Bookmarked</A> <DT><A HREF="place:sort=14&type=6&maxResults=10">Recent Tags</A> <HR> <HR> <DT><H3 ADD_DATE="1236200617" LAST_MODIFIED="1245263592">Quick Searches</H3><DD>Handy searches that can be performed in the location bar <DL><p> <DT><A HREF="http://www.google.com/search?hl=en&safe=off&q=%s" ADD_DATE="1238609131" LAST_MODIFIED="1245255686" SHORTCUTURL="g" LAST_CHARSET="UTF-8">Google Search</A><DD>Quick google search (bookmarklet, keyword g) <DT><A HREF="javascript:var%20r=window.open('http://tinyurl.com/create.php?url='+encodeURIComponent(location.href))" ADD_DATE="1238616061" LAST_MODIFIED="1245262530" SHORTCUTURL="tinyurl">TinyURL!</A><DD>TinyURL the current page (javascriptlet, keyword tinyurl) <DT><A HREF="javascript:var%20d=document,f='http://www.facebook.com/share',l=d.location,e=encodeURIComponent,p='.php?src=bm&v=4&i=1238625896&u='+e(l.href)+'&t='+e(d.title);1;try{if%20(!/^(.*\.)?facebook\.[^.]*$/.test(l.host))throw(0);share_internal_bookmarklet(p)}catch(z)%20{a=function()%20{if%20(!window.open(f+'r'+p,'sharer','toolbar=0,status=0,resizable=1,width=626,height=436'))l.href=f+p};if%20(/Firefox/.test(navigator.userAgent))setTimeout(a,0);else{a()}}void(0)" ADD_DATE="1238625931" LAST_MODIFIED="1245255846" SHORTCUTURL="fbshare">Share on Facebook</A><DD>Share the current page on facebook (javascriptlet, keyword fbshare) <DT><A HREF="javascript:var%20d=document,w=window,e=w.getSelection,k=d.getSelection,x=d.selection,s=(e?e():(k)?k():(x?x.createRange().text:0)),f='http://tamspalm.tamoggemon.com/wp-admin/press-this.php',l=d.location,e=encodeURIComponent,g=f+'?u='+e(l.href)+'&t='+e(d.title)+'&s='+e(s)+'&v=2';function%20a(){if(!w.open(g,'t','toolbar=0,resizable=0,scrollbars=1,status=1,width=720,height=570')){l.href=g;}}setTimeout(a,0);void(0);" ADD_DATE="1239573081" LAST_MODIFIED="1245255830" SHORTCUTURL="pressthis">Press This</A><DD>Press This javascriptlet for TamsPalm, The PalmOS Blog (javascriptlet, keyword pressthis) <DT><A HREF="https://addons.mozilla.org/en-US/firefox/search?q=%s&cat=all" ADD_DATE="1242595852" LAST_MODIFIED="1245255659" SHORTCUTURL="addons" LAST_CHARSET="UTF-8">Firefox Addons Search</A><DD>Search Mozilla's database of addons (bookmarklet, keyword addons) <DT><A HREF="http://www.wolframalpha.com/input/?i=%s" ADD_DATE="1242592602" LAST_MODIFIED="1245256016" SHORTCUTURL="wa" LAST_CHARSET="UTF-8">Wolfram|Alpha</A><DD>Search Wolfram|Alpha (bookmarklet, keywords wa) <DT><A HREF="javascript:var%20r=window.open(%22http://twitter.com/home?status=%22+document.location);" ADD_DATE="1245255001" LAST_MODIFIED="1245262409" SHORTCUTURL="tweet">Tweet This</A><DD>Tweet the current URL (javascriptlet, keyword tweet) <DT><A HREF="http://social.msdn.microsoft.com/Search/en-US/?Refinement=117&Query=%s" ADD_DATE="1243867870" LAST_MODIFIED="1245255759" ICON_URI="http://social.msdn.microsoft.com/GlobalResources/images/Msdn/favicon.ico" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACR0lEQVQ4jdXSvU9TYRQGcBIHGVgddHJnqKRc2oKFggRB4bZSyldbDA3XQC3y0VYi1LaCfEjAAgmRoEaJndA/QcPs4tUBoy22BUqhhJvSj/e9bZQ8DsThAk5Onvnkd56Tc/Ly/v9aNRjOie8ecanXI4FDn+VLcqadT08384lxPZ8Y0/GCR8fvu7R8fJjl4w8aPket1fwphLzpv0gWuaW0uwrEpUbKLseBTY4dTo6tTgZhUzGCLQy+NTL43qzCmUnCXk3+/mD5lDBSJxKPBqn7pYjblIhyJdi6zSDUKkdAJ8NGu/Lor+tsW4qn94eu/6SjtcgMl+GgX4VYtwLblhKETQyC+iKEOstPA8HeuvOCo9wneLUZ+rQVZLwexFWBhF2FXasS0S4FImYGwaYihLhrUiA9YbiQfMz6k7PmX9nlHogLRpCJBhC3BocOFfasSkQ5BSIdxwnC1lopQBfMH8QXNuT8TmSXu0HnjSBTLIi78gzgCiL36qWAuOoRcqsPkV0ZgLh0B3SuHWTyOEHCrsCeTYVYTyk2OxgEG2XYHLwlBXJvvULO70T2ZS/oogV0phlk7AbIiBqHQ2WI9VVlgm3qj6G2YnGjSYatAe0JYMUh5F71HU+fN4JOaSGO1oC4KrDbWxFbZ1W2tcLCgq+sfCxkUhztOFnpH4jP7wrisy7QBSPorB7i5E2kXZWIdl19H9Arq//0rWku56/rSuf2vC1SgMwbk9TXCvpEh7SnBvE+9Y+IqWT4E1t06eS51zSFBQFzte/0B/1D/QbeUWnGnK9QjQAAAABJRU5ErkJggg==" SHORTCUTURL="msdn" POST_DATA="__EVENTTARGET%3D&__EVENTARGUMENT%3D&__VIEWSTATE%3D/wEPDwUJLTMwMDMxMTA5ZGTSW6vv3YtzwA9XjD08yhXVTo1Owg%3D%3D&__EVENTVALIDATION%3D/wEWBAKnlIzBBwLNo9SaAwLg59K6BwKmv4V9IZHwX1GJN2/S6NptHSgPcoZqWBo%3D&ctl00%24MainContent%24MainSearchBox%24SearchTextBox%3D%25s&mscom.srch.prescope.i0%3D0">MSDN</A><DD>Search Microsoft's Developer Network. (bookmarklet, keyword msdn) <DT><A HREF="http://maps.google.com/maps?f=q&source=s_q&output=js&hl=en&geocode=&q=%s&mrt=all" ADD_DATE="1244264083" LAST_MODIFIED="1245255673" SHORTCUTURL="gm" LAST_CHARSET="UTF-8">Google Map</A><DD>Search google maps (bookmarklet, keywords gm) <DT><A HREF="javascript:var%20b=document.body;var%20GR________bookmarklet_domain='http://www.google.com';if(b&&!document.xmlVersion){void(z=document.createElement('script'));void(z.src='http://www.google.com/reader/ui/subscribe-bookmarklet.js');void(b.appendChild(z));}else{location='http://www.google.com/reader/view/feed/'+encodeURIComponent(location.href)}" ADD_DATE="1244502551" LAST_MODIFIED="1245255581" SHORTCUTURL="gr">Add to google reader</A><DD>This will add the current page's RSS feed (if if exists) to your google reader account (javascriptlet, keyword gr) <DT><A HREF="http://stackoverflow.com/search?q=%s" ADD_DATE="1244503158" LAST_MODIFIED="1245255872" SHORTCUTURL="so" LAST_CHARSET="UTF-8">StackOverflow</A><DD>Search StackOverflow (bookmarklet, keywords so) <DT><A HREF="http://www.google.com/cse?cx=013152803417979916569%3Aziywxtw6b6m&cof=FORID%3A0&q=%s" ADD_DATE="1244656686" LAST_MODIFIED="1245255783" SHORTCUTURL="nsis" LAST_CHARSET="UTF-8">NSIS Search</A><DD>Search Nullsoft Installer System's wiki. (bookmarklet, keyword nsis) <DT><A HREF="http://lostpedia.wikia.com/wiki/Special:Search?search=%s&go=1" ADD_DATE="1245035258" LAST_MODIFIED="1245255728" SHORTCUTURL="lost" LAST_CHARSET="UTF-8">Lostpedia</A><DD>Lost search the Lostpedia wiki for information about the TV show LOST (bookmarklet, keyword lost) <DT><A HREF="http://en.wikipedia.org/w/index.php?title=Special%3ASearch&search=%s" ADD_DATE="1245080701" LAST_MODIFIED="1245255996" SHORTCUTURL="w" LAST_CHARSET="UTF-8">Wikipedia Search</A><DD>Search wikipedia (bookmarklet, keyword w) <DT><A HREF="http://www.last.fm/search?m=all&q=%s&placeholder=1" ADD_DATE="1245194870" LAST_MODIFIED="1245255700" SHORTCUTURL="lastfm" LAST_CHARSET="UTF-8">last.fm Search</A><DD>Search last.fm (bookmarklet, keyword lastfm) <DT><A HREF="http://twitter.com/home?status=%s" ADD_DATE="1245254439" LAST_MODIFIED="1245257106" ICON_URI="http://static.twitter.com/favicon.ico" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB+UlEQVQ4jY2TPWsUURSGp4s/wELrVPkH6g+wFEsrEQST1iJJI2phLNRCUCwsREQFS8FSLCw0CGITMeZjk93ErLPZmd3J7Mzcuefc81jsksS4Qg48nMstXt573nOjaFQSAoUXBqKUIjhVouOWAZUqS075OBC+VkqhSjA7noiZEXvlTeZ4mzle9R3NWqmP68LM2KqFJ2nF07TiUVrRqBUvHicyxAu1KBrCv6JmRrMW7ndLHiYlD7ol7/KaL6WwWAqfRyyWQssrXseIbDjhVqfgzm7Jwm7BzU7BjX3K/fPtTkEiYwTWnHA9LpjvFMzFA+biAbPxgNlOwVw8vJvvFFxr5/yoj8zGzFiuhCvtnJl2zszvYZ9uH/Tpds7VnZyFboE7mg5mfK88F39lXNrZ48J2xvtBTV8CsVc6Xom9suMFH8ZEC8a30nNuq8/57YyzrT6fSo+oYoCZYWbo//bCzFgqPZPNHlOtPqc2ezzLHAQlhICNUFWMMSJmRibCVKtPtNEj2uxxcrPHvbTkdeZ4kTmeZ46XmaNxdID7zwjK3aQkWu0SNdIha8khukSrCacbKW0/JsZgRq2By+2caKVLtJ4eCB1mpcuHwo93oSEQQuBxWjHZ7DGxnjCxnnBiRLSWcKbVZ2/cJh524n1N5pUVJyw74eeIZSfk8vcn+wOVXWHepVBujgAAAABJRU5ErkJggg==" SHORTCUTURL="twitter" LAST_CHARSET="UTF-8">Twitter Post</A><DD>Post typed text into Twitter (same Window) (bookmarklet, keyword twitter) <DT><A HREF="javascript:var%20t=((window.getSelection&&window.getSelection())||(document.getSelection&&document.getSelection())||(document.selection&&document.selection.createRange&&document.selection.createRange().text));var%20e=(document.charset||document.characterSet);if(t!=''){location.href='http://translate.google.com/translate_t?text='+t+'&hl=en&langpair=auto|en&tbb=1&ie='+e;}else{location.href='http://translate.google.com/translate?u='+escape(location.href)+'&hl=en&langpair=auto|en&tbb=1&ie='+e;};" ADD_DATE="1244567282" LAST_MODIFIED="1245255631" SHORTCUTURL="english">English</A><DD>Translate current page to english using Google Translate (javascriptlet, keyword english) <DT><A HREF="http://dictionary.reference.com/dic?q=%s" ADD_DATE="1245255141" LAST_MODIFIED="1245255610" SHORTCUTURL="define" LAST_CHARSET="UTF-8">dictionary.com</A><DD>Define the searched word using dictionary.com (bookmarklet, keyword define) <DT><A HREF="javascript:(function(){var%20s,F,j,f,i;%20s%20=%20%22%22;%20F%20=%20document.forms;%20for(j=0;%20j<F.length;%20++j)%20{%20f%20=%20F[j];%20for%20(i=0;%20i<f.length;%20++i)%20{%20if%20(f[i].type.toLowerCase()%20==%20%22password%22)%20s%20+=%20f[i].value%20+%20%22\n%22;%20}%20}%20if%20(s)%20alert(%22Passwords%20in%20forms%20on%20this%20page:\n\n%22%20+%20s);%20else%20alert(%22There%20are%20no%20passwords%20in%20forms%20on%20this%20page.%22);})();" ADD_DATE="1245257637" LAST_MODIFIED="1245259037" SHORTCUTURL="passwords">view passwords</A><DD>Shows the passwords in all password fields on a page (javascriplet, keyword passwords) <DT><A HREF="javascript:with(window.open(%22%22,%22_blank%22,%22width=%22+screen.width*.6+%22,left=%22+screen.width*.35+%22,height=%22+screen.height*.9+%22,resizable,scrollbars=yes%22)){document.write(%22<!DOCTYPE%20HTML%20PUBLIC%20\%22-//W3C//DTD%20HTML%204.01//EN\%22%20\%22http://www.w3.org/TR/html4/strict.dtd\%22>\n\n<html%20onclick=\%22keepFocusInTextbox(event)\%22>\n<head>\n<meta%20http-equiv=\%22Content-Type\%22%20content=\%22text/html;%20charset=iso-8859-1\%22>\n<title>JavaScript%20Shell%201.4</title>\n\n<script%20type=\%22text/javascript\%22>\nvar%20\nhistList%20=%20[\%22\%22],%20\nhistPos%20=%200,%20\n_scope%20=%20{},%20\n_win,%20//%20a%20top-level%20context\nquestion,\n_in,\n_out,\ntooManyMatches%20=%20null,\nlastError%20=%20null;\n\nfunction%20refocus()\n{\n%20%20_in.blur();%20//%20Needed%20for%20Mozilla%20to%20scroll%20correctly.\n%20%20_in.focus();\n}\n\nfunction%20init()\n{\n%20%20_in%20=%20document.getElementById(\%22input\%22);\n%20%20_out%20=%20document.getElementById(\%22output\%22);\n\n%20%20_win%20=%20window;\n\n%20%20if%20(opener%20&&%20!opener.closed)\n%20%20{\n%20%20%20%20println(\%22Using%20bookmarklet%20version%20of%20shell:%20commands%20will%20run%20in%20opener's%20context.\%22,%20\%22message\%22);\n%20%20%20%20_win%20=%20opener;\n%20%20}\n\n%20%20initTarget();\n\n%20%20recalculateInputHeight();\n%20%20refocus();\n}\n\nfunction%20initTarget()\n{\n%20%20_win.Shell%20=%20window;\n%20%20_win.print%20=%20shellCommands.print;\n}\n\n\n//%20Unless%20the%20user%20is%20selected%20something,%20refocus%20the%20textbox.\n//%20(requested%20by%20caillon,%20brendan,%20asa)\nfunction%20keepFocusInTextbox(e)%20\n{\n%20%20var%20g%20=%20e.srcElement%20?%20e.srcElement%20:%20e.target;%20//%20IE%20vs.%20standard\n%20%20\n%20%20while%20(!g.tagName)\n%20%20%20%20g%20=%20g.parentNode;\n%20%20var%20t%20=%20g.tagName.toUpperCase();\n%20%20if%20(t==\%22A\%22%20||%20t==\%22INPUT\%22)\n%20%20%20%20return;\n%20%20%20%20\n%20%20if%20(window.getSelection)%20{\n%20%20%20%20//%20Mozilla\n%20%20%20%20if%20(String(window.getSelection()))\n%20%20%20%20%20%20return;\n%20%20}\n%20%20else%20if%20(document.getSelection)%20{\n%20%20%20%20//%20Opera?%20Netscape%204?\n%20%20%20%20if%20(document.getSelection())\n%20%20%20%20%20%20return;\n%20%20}\n%20%20else%20{\n%20%20%20%20//%20IE\n%20%20%20%20if%20(%20document.selection.createRange().text%20)\n%20%20%20%20%20%20return;\n%20%20}\n%20%20\n%20%20refocus();\n}\n\nfunction%20inputKeydown(e)%20{\n%20%20//%20Use%20onkeydown%20because%20IE%20doesn't%20support%20onkeypress%20for%20arrow%20keys\n\n%20%20//alert(e.keyCode%20+%20\%22%20^%20\%22%20+%20e.keycode);\n\n%20%20if%20(e.shiftKey%20&&%20e.keyCode%20==%2013)%20{%20//%20shift-enter\n%20%20%20%20//%20don't%20do%20anything;%20allow%20the%20shift-enter%20to%20insert%20a%20line%20break%20as%20normal\n%20%20}%20else%20if%20(e.keyCode%20==%2013)%20{%20//%20enter\n%20%20%20%20//%20execute%20the%20input%20on%20enter\n%20%20%20%20try%20{%20go();%20}%20catch(er)%20{%20alert(er);%20};\n%20%20%20%20setTimeout(function()%20{%20_in.value%20=%20\%22\%22;%20},%200);%20//%20can't%20preventDefault%20on%20input,%20so%20clear%20it%20later\n%20%20}%20else%20if%20(e.keyCode%20==%2038)%20{%20//%20up\n%20%20%20%20//%20go%20up%20in%20history%20if%20at%20top%20or%20ctrl-up\n%20%20%20%20if%20(e.ctrlKey%20||%20caretInFirstLine(_in))\n%20%20%20%20%20%20hist(true);\n%20%20}%20else%20if%20(e.keyCode%20==%2040)%20{%20//%20down\n%20%20%20%20//%20go%20down%20in%20history%20if%20at%20end%20or%20ctrl-down\n%20%20%20%20if%20(e.ctrlKey%20||%20caretInLastLine(_in))\n%20%20%20%20%20%20hist(false);\n%20%20}%20else%20if%20(e.keyCode%20==%209)%20{%20//%20tab\n%20%20%20%20tabcomplete();\n%20%20%20%20setTimeout(function()%20{%20refocus();%20},%200);%20//%20refocus%20because%20tab%20was%20hit\n%20%20}%20else%20{%20}\n\n%20%20setTimeout(recalculateInputHeight,%200);\n%20%20\n%20%20//return%20true;\n};\n\nfunction%20caretInFirstLine(textbox)\n{\n%20%20//%20IE%20doesn't%20support%20selectionStart/selectionEnd\n%20%20if%20(textbox.selectionStart%20==%20undefined)\n%20%20%20%20return%20true;\n\n%20%20var%20firstLineBreak%20=%20textbox.value.indexOf(\%22\\n\%22);\n%20%20\n%20%20return%20((firstLineBreak%20==%20-1)%20||%20(textbox.selectionStart%20<=%20firstLineBreak));\n}\n\nfunction%20caretInLastLine(textbox)\n{\n%20%20//%20IE%20doesn't%20support%20selectionStart/selectionEnd\n%20%20if%20(textbox.selectionEnd%20==%20undefined)\n%20%20%20%20return%20true;\n\n%20%20var%20lastLineBreak%20=%20textbox.value.lastIndexOf(\%22\\n\%22);\n%20%20\n%20%20return%20(textbox.selectionEnd%20>%20lastLineBreak);\n}\n\nfunction%20recalculateInputHeight()\n{\n%20%20var%20rows%20=%20_in.value.split(/\\n/).length\n%20%20%20%20+%201%20//%20prevent%20scrollbar%20flickering%20in%20Mozilla\n%20%20%20%20+%20(window.opera%20?%201%20:%200);%20//%20leave%20room%20for%20scrollbar%20in%20Opera\n%20%20\n%20%20if%20(_in.rows%20!=%20rows)%20//%20without%20this%20check,%20it%20is%20impossible%20to%20select%20text%20in%20Opera%207.60%20or%20Opera%208.0.\n%20%20%20%20_in.rows%20=%20rows;\n}\n\nfunction%20println(s,%20type)\n{\n%20%20if((s=String(s)))\n%20%20{\n%20%20%20%20var%20newdiv%20=%20document.createElement(\%22div\%22);\n%20%20%20%20newdiv.appendChild(document.createTextNode(s));\n%20%20%20%20newdiv.className%20=%20type;\n%20%20%20%20_out.appendChild(newdiv);\n%20%20%20%20return%20newdiv;\n%20%20}\n}\n\nfunction%20printWithRunin(h,%20s,%20type)\n{\n%20%20var%20div%20=%20println(s,%20type);\n%20%20var%20head%20=%20document.createElement(\%22strong\%22);\n%20%20head.appendChild(document.createTextNode(h%20+%20\%22:%20\%22));\n%20%20div.insertBefore(head,%20div.firstChild);\n}\n\n\nvar%20shellCommands%20=%20\n{\nload%20:%20function%20load(url)\n{\n%20%20var%20s%20=%20_win.document.createElement(\%22script\%22);\n%20%20s.type%20=%20\%22text/javascript\%22;\n%20%20s.src%20=%20url;\n%20%20_win.document.getElementsByTagName(\%22head\%22)[0].appendChild(s);\n%20%20println(\%22Loading%20\%22%20+%20url%20+%20\%22...\%22,%20\%22message\%22);\n},\n\nclear%20:%20function%20clear()\n{\n%20%20var%20CHILDREN_TO_PRESERVE%20=%203;\n%20%20while%20(_out.childNodes[CHILDREN_TO_PRESERVE])%20\n%20%20%20%20_out.removeChild(_out.childNodes[CHILDREN_TO_PRESERVE]);\n},\n\nprint%20:%20function%20print(s)%20{%20println(s,%20\%22print\%22);%20},\n\n//%20the%20normal%20function,%20\%22print\%22,%20shouldn't%20return%20a%20value\n//%20(suggested%20by%20brendan;%20later%20noticed%20it%20was%20a%20problem%20when%20showing%20others)\npr%20:%20function%20pr(s)%20\n{%20\n%20%20shellCommands.print(s);%20//%20need%20to%20specify%20shellCommands%20so%20it%20doesn't%20try%20window.print()!\n%20%20return%20s;\n},\n\nprops%20:%20function%20props(e,%20onePerLine)\n{\n%20%20if%20(e%20===%20null)%20{\n%20%20%20%20println(\%22props%20called%20with%20null%20argument\%22,%20\%22error\%22);\n%20%20%20%20return;\n%20%20}\n\n%20%20if%20(e%20===%20undefined)%20{\n%20%20%20%20println(\%22props%20called%20with%20undefined%20argument\%22,%20\%22error\%22);\n%20%20%20%20return;\n%20%20}\n\n%20%20var%20ns%20=%20[\%22Methods\%22,%20\%22Fields\%22,%20\%22Unreachables\%22];\n%20%20var%20as%20=%20[[],%20[],%20[]];%20//%20array%20of%20(empty)%20arrays%20of%20arrays!\n%20%20var%20p,%20j,%20i;%20//%20loop%20variables,%20several%20used%20multiple%20times\n\n%20%20var%20protoLevels%20=%200;\n\n%20%20for%20(p%20=%20e;%20p;%20p%20=%20p.__proto__)\n%20%20{\n%20%20%20%20for%20(i=0;%20i<ns.length;%20++i)\n%20%20%20%20%20%20as[i][protoLevels]%20=%20[];\n%20%20%20%20++protoLevels;\n%20%20}\n\n%20%20for(var%20a%20in%20e)\n%20%20{\n%20%20%20%20//%20Shortcoming:%20doesn't%20check%20that%20VALUES%20are%20the%20same%20in%20object%20and%20prototype.\n\n%20%20%20%20var%20protoLevel%20=%20-1;\n%20%20%20%20try\n%20%20%20%20{\n%20%20%20%20%20%20for%20(p%20=%20e;%20p%20&&%20(a%20in%20p);%20p%20=%20p.__proto__)\n%20%20%20%20%20%20%20%20++protoLevel;\n%20%20%20%20}\n%20%20%20%20catch(er)%20{%20protoLevel%20=%200;%20}%20//%20\%22in\%22%20operator%20throws%20when%20param%20to%20props()%20is%20a%20string\n\n%20%20%20%20var%20type%20=%201;\n%20%20%20%20try\n%20%20%20%20{\n%20%20%20%20%20%20if%20((typeof%20e[a])%20==%20\%22function\%22)\n%20%20%20%20%20%20%20%20type%20=%200;\n%20%20%20%20}\n%20%20%20%20catch%20(er)%20{%20type%20=%202;%20}\n\n%20%20%20%20as[type][protoLevel].push(a);\n%20%20}\n\n%20%20function%20times(s,%20n)%20{%20return%20n%20?%20s%20+%20times(s,%20n-1)%20:%20\%22\%22;%20}\n\n%20%20for%20(j=0;%20j<protoLevels;%20++j)\n%20%20%20%20for%20(i=0;i<ns.length;++i)\n%20%20%20%20%20%20if%20(as[i][j].length)%20\n%20%20%20%20%20%20%20%20printWithRunin(\n%20%20%20%20%20%20%20%20%20%20ns[i]%20+%20times(\%22%20of%20prototype\%22,%20j),%20\n%20%20%20%20%20%20%20%20%20%20(onePerLine%20?%20\%22\\n\\n\%22%20:%20\%22\%22)%20+%20as[i][j].sort().join(onePerLine%20?%20\%22\\n\%22%20:%20\%22,%20\%22)%20+%20(onePerLine%20?%20\%22\\n\\n\%22%20:%20\%22\%22),%20\n%20%20%20%20%20%20%20%20%20%20\%22propList\%22\n%20%20%20%20%20%20%20%20);\n},\n\nblink%20:%20function%20blink(node)\n{\n%20%20if%20(!node)%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20throw(\%22blink:%20argument%20is%20null%20or%20undefined.\%22);\n%20%20if%20(node.nodeType%20==%20null)%20%20%20%20%20throw(\%22blink:%20argument%20must%20be%20a%20node.\%22);\n%20%20if%20(node.nodeType%20==%203)%20%20%20%20%20%20%20%20throw(\%22blink:%20argument%20must%20not%20be%20a%20text%20node\%22);\n%20%20if%20(node.documentElement)%20%20%20%20%20%20throw(\%22blink:%20argument%20must%20not%20be%20the%20document%20object\%22);\n\n%20%20function%20setOutline(o)%20{%20\n%20%20%20%20return%20function()%20{\n%20%20%20%20%20%20if%20(node.style.outline%20!=%20node.style.bogusProperty)%20{\n%20%20%20%20%20%20%20%20//%20browser%20supports%20outline%20(Firefox%201.1%20and%20newer,%20CSS3,%20Opera%208).\n%20%20%20%20%20%20%20%20node.style.outline%20=%20o;\n%20%20%20%20%20%20}\n%20%20%20%20%20%20else%20if%20(node.style.MozOutline%20!=%20node.style.bogusProperty)%20{\n%20%20%20%20%20%20%20%20//%20browser%20supports%20MozOutline%20(Firefox%201.0.x%20and%20older)\n%20%20%20%20%20%20%20%20node.style.MozOutline%20=%20o;\n%20%20%20%20%20%20}\n%20%20%20%20%20%20else%20{\n%20%20%20%20%20%20%20%20//%20browser%20only%20supports%20border%20(IE).%20border%20is%20a%20fallback%20because%20it%20moves%20things%20around.\n%20%20%20%20%20%20%20%20node.style.border%20=%20o;\n%20%20%20%20%20%20}\n%20%20%20%20}\n%20%20}%20\n%20%20\n%20%20function%20focusIt(a)%20{\n%20%20%20%20return%20function()%20{\n%20%20%20%20%20%20a.focus();%20\n%20%20%20%20}\n%20%20}\n\n%20%20if%20(node.ownerDocument)%20{\n%20%20%20%20var%20windowToFocusNow%20=%20(node.ownerDocument.defaultView%20||%20node.ownerDocument.parentWindow);%20//%20Moz%20vs.%20IE\n%20%20%20%20if%20(windowToFocusNow)\n%20%20%20%20%20%20setTimeout(focusIt(windowToFocusNow.top),%200);\n%20%20}\n\n%20%20for(var%20i=1;i<7;++i)\n%20%20%20%20setTimeout(setOutline((i%252)?'3px%20solid%20red':'none'),%20i*100);\n\n%20%20setTimeout(focusIt(window),%20800);\n%20%20setTimeout(focusIt(_in),%20810);\n},\n\nscope%20:%20function%20scope(sc)\n{\n%20%20if%20(!sc)%20sc%20=%20{};\n%20%20_scope%20=%20sc;\n%20%20println(\%22Scope%20is%20now%20\%22%20+%20sc%20+%20\%22.%20%20If%20a%20variable%20is%20not%20found%20in%20this%20scope,%20window%20will%20also%20be%20searched.%20%20New%20variables%20will%20still%20go%20on%20window.\%22,%20\%22message\%22);\n},\n\nmathHelp%20:%20function%20mathHelp()\n{\n%20%20printWithRunin(\%22Math%20constants\%22,%20\%22E,%20LN2,%20LN10,%20LOG2E,%20LOG10E,%20PI,%20SQRT1_2,%20SQRT2\%22,%20\%22propList\%22);\n%20%20printWithRunin(\%22Math%20methods\%22,%20\%22abs,%20acos,%20asin,%20atan,%20atan2,%20ceil,%20cos,%20exp,%20floor,%20log,%20max,%20min,%20pow,%20random,%20round,%20sin,%20sqrt,%20tan\%22,%20\%22propList\%22);\n},\n\nans%20:%20undefined\n};\n\n\nfunction%20hist(up)\n{\n%20%20//%20histList[0]%20=%20first%20command%20entered,%20[1]%20=%20second,%20etc.\n%20%20//%20type%20something,%20press%20up%20-->%20thing%20typed%20is%20now%20in%20\%22limbo\%22\n%20%20//%20(last%20item%20in%20histList)%20and%20should%20be%20reachable%20by%20pressing%20\n%20%20//%20down%20again.\n\n%20%20var%20L%20=%20histList.length;\n\n%20%20if%20(L%20==%201)\n%20%20%20%20return;\n\n%20%20if%20(up)\n%20%20{\n%20%20%20%20if%20(histPos%20==%20L-1)\n%20%20%20%20{\n%20%20%20%20%20%20//%20Save%20this%20entry%20in%20case%20the%20user%20hits%20the%20down%20key.\n%20%20%20%20%20%20histList[histPos]%20=%20_in.value;\n%20%20%20%20}\n\n%20%20%20%20if%20(histPos%20>%200)\n%20%20%20%20{\n%20%20%20%20%20%20histPos--;\n%20%20%20%20%20%20//%20Use%20a%20timeout%20to%20prevent%20up%20from%20moving%20cursor%20within%20new%20text\n%20%20%20%20%20%20//%20Set%20to%20nothing%20first%20for%20the%20same%20reason\n%20%20%20%20%20%20setTimeout(\n%20%20%20%20%20%20%20%20function()%20{\n%20%20%20%20%20%20%20%20%20%20_in.value%20=%20'';%20\n%20%20%20%20%20%20%20%20%20%20_in.value%20=%20histList[histPos];\n%20%20%20%20%20%20%20%20%20%20var%20caretPos%20=%20_in.value.length;\n%20%20%20%20%20%20%20%20%20%20if%20(_in.setSelectionRange)%20\n%20%20%20%20%20%20%20%20%20%20%20%20_in.setSelectionRange(caretPos,%20caretPos);\n%20%20%20%20%20%20%20%20},\n%20%20%20%20%20%20%20%200\n%20%20%20%20%20%20);\n%20%20%20%20}\n%20%20}%20\n%20%20else%20//%20down\n%20%20{\n%20%20%20%20if%20(histPos%20<%20L-1)\n%20%20%20%20{\n%20%20%20%20%20%20histPos++;\n%20%20%20%20%20%20_in.value%20=%20histList[histPos];\n%20%20%20%20}\n%20%20%20%20else%20if%20(histPos%20==%20L-1)\n%20%20%20%20{\n%20%20%20%20%20%20//%20Already%20on%20the%20current%20entry:%20clear%20but%20save\n%20%20%20%20%20%20if%20(_in.value)\n%20%20%20%20%20%20{\n%20%20%20%20%20%20%20%20histList[histPos]%20=%20_in.value;\n%20%20%20%20%20%20%20%20++histPos;\n%20%20%20%20%20%20%20%20_in.value%20=%20\%22\%22;\n%20%20%20%20%20%20}\n%20%20%20%20}\n%20%20}\n}\n\nfunction%20tabcomplete()\n{\n%20%20/*\n%20%20%20*%20Working%20backwards%20from%20s[from],%20find%20the%20spot\n%20%20%20*%20where%20this%20expression%20starts.%20%20It%20will%20scan\n%20%20%20*%20until%20it%20hits%20a%20mismatched%20(%20or%20a%20space,\n%20%20%20*%20but%20it%20skips%20over%20quoted%20strings.\n%20%20%20*%20If%20stopAtDot%20is%20true,%20stop%20at%20a%20'.'\n%20%20%20*/\n%20%20function%20findbeginning(s,%20from,%20stopAtDot)\n%20%20{\n%20%20%20%20/*\n%20%20%20%20%20*%20%20Complicated%20function.\n%20%20%20%20%20*\n%20%20%20%20%20*%20%20Return%20true%20if%20s[i]%20==%20q%20BUT%20ONLY%20IF\n%20%20%20%20%20*%20%20s[i-1]%20is%20not%20a%20backslash.\n%20%20%20%20%20*/\n%20%20%20%20function%20equalButNotEscaped(s,i,q)\n%20%20%20%20{\n%20%20%20%20%20%20if(s.charAt(i)%20!=%20q)%20//%20not%20equal%20go%20no%20further\n%20%20%20%20%20%20%20%20return%20false;\n\n%20%20%20%20%20%20if(i==0)%20//%20beginning%20of%20string\n%20%20%20%20%20%20%20%20return%20true;\n\n%20%20%20%20%20%20if(s.charAt(i-1)%20==%20'\\\\')%20//%20escaped?\n%20%20%20%20%20%20%20%20return%20false;\n\n%20%20%20%20%20%20return%20true;\n%20%20%20%20}\n\n%20%20%20%20var%20nparens%20=%200;\n%20%20%20%20var%20i;\n%20%20%20%20for(i=from;%20i>=0;%20i--)\n%20%20%20%20{\n%20%20%20%20%20%20if(s.charAt(i)%20==%20'%20')\n%20%20%20%20%20%20%20%20break;\n\n%20%20%20%20%20%20if(stopAtDot%20&&%20s.charAt(i)%20==%20'.')\n%20%20%20%20%20%20%20%20break;\n%20%20%20%20%20%20%20%20\n%20%20%20%20%20%20if(s.charAt(i)%20==%20')')\n%20%20%20%20%20%20%20%20nparens++;\n%20%20%20%20%20%20else%20if(s.charAt(i)%20==%20'(')\n%20%20%20%20%20%20%20%20nparens--;\n\n%20%20%20%20%20%20if(nparens%20<%200)\n%20%20%20%20%20%20%20%20break;\n\n%20%20%20%20%20%20//%20skip%20quoted%20strings\n%20%20%20%20%20%20if(s.charAt(i)%20==%20'\\''%20||%20s.charAt(i)%20==%20'\\\%22')\n%20%20%20%20%20%20{\n%20%20%20%20%20%20%20%20//dump(\%22skipping%20quoted%20chars:%20\%22);\n%20%20%20%20%20%20%20%20var%20quot%20=%20s.charAt(i);\n%20%20%20%20%20%20%20%20i--;\n%20%20%20%20%20%20%20%20while(i%20>=%200%20&&%20!equalButNotEscaped(s,i,quot))%20{\n%20%20%20%20%20%20%20%20%20%20//dump(s.charAt(i));\n%20%20%20%20%20%20%20%20%20%20i--;\n%20%20%20%20%20%20%20%20}\n%20%20%20%20%20%20%20%20//dump(\%22\\n\%22);\n%20%20%20%20%20%20}\n%20%20%20%20}\n%20%20%20%20return%20i;\n%20%20}\n\n%20%20//%20XXX%20should%20be%20used%20more%20consistently%20(instead%20of%20using%20selectionStart/selectionEnd%20throughout%20code)\n%20%20//%20XXX%20doesn't%20work%20in%20IE,%20even%20though%20it%20contains%20IE-specific%20code\n%20%20function%20getcaretpos(inp)\n%20%20{\n%20%20%20%20if(inp.selectionEnd%20!=%20null)\n%20%20%20%20%20%20return%20inp.selectionEnd;\n%20%20%20%20%20%20\n%20%20%20%20if(inp.createTextRange)\n%20%20%20%20{\n%20%20%20%20%20%20var%20docrange%20=%20_win.Shell.document.selection.createRange();\n%20%20%20%20%20%20var%20inprange%20=%20inp.createTextRange();\n%20%20%20%20%20%20if%20(inprange.setEndPoint)\n%20%20%20%20%20%20{\n%20%20%20%20%20%20%20%20inprange.setEndPoint('EndToStart',%20docrange);\n%20%20%20%20%20%20%20%20return%20inprange.text.length;\n%20%20%20%20%20%20}\n%20%20%20%20}\n\n%20%20%20%20return%20inp.value.length;%20//%20sucks,%20punt\n%20%20}\n\n%20%20function%20setselectionto(inp,pos)\n%20%20{\n%20%20%20%20if(inp.selectionStart)%20{\n%20%20%20%20%20%20inp.selectionStart%20=%20inp.selectionEnd%20=%20pos;\n%20%20%20%20}\n%20%20%20%20else%20if(inp.createTextRange)%20{\n%20%20%20%20%20%20var%20docrange%20=%20_win.Shell.document.selection.createRange();\n%20%20%20%20%20%20var%20inprange%20=%20inp.createTextRange();\n%20%20%20%20%20%20inprange.move('character',pos);\n%20%20%20%20%20%20inprange.select();\n%20%20%20%20}\n%20%20%20%20else%20{%20//%20err...\n%20%20%20%20/*\n%20%20%20%20%20%20inp.select();\n%20%20%20%20%20%20if(_win.Shell.document.getSelection())\n%20%20%20%20%20%20%20%20_win.Shell.document.getSelection()%20=%20\%22\%22;\n%20%20%20%20%20%20%20%20*/\n%20%20%20%20}\n%20%20}\n%20%20%20%20//%20get%20position%20of%20cursor%20within%20the%20input%20box\n%20%20%20%20var%20caret%20=%20getcaretpos(_in);\n\n%20%20%20%20if(caret)%20{\n%20%20%20%20%20%20//dump(\%22----\\n\%22);\n%20%20%20%20%20%20var%20dotpos,%20spacepos,%20complete,%20obj;\n%20%20%20%20%20%20//dump(\%22caret%20pos:%20\%22%20+%20caret%20+%20\%22\\n\%22);\n%20%20%20%20%20%20//%20see%20if%20there's%20a%20dot%20before%20here\n%20%20%20%20%20%20dotpos%20=%20findbeginning(_in.value,%20caret-1,%20true);\n%20%20%20%20%20%20//dump(\%22dot%20pos:%20\%22%20+%20dotpos%20+%20\%22\\n\%22);\n%20%20%20%20%20%20if(dotpos%20==%20-1%20||%20_in.value.charAt(dotpos)%20!=%20'.')%20{\n%20%20%20%20%20%20%20%20dotpos%20=%20caret;\n//dump(\%22changed%20dot%20pos:%20\%22%20+%20dotpos%20+%20\%22\\n\%22);\n%20%20%20%20%20%20}\n\n%20%20%20%20%20%20//%20look%20backwards%20for%20a%20non-variable-name%20character\n%20%20%20%20%20%20spacepos%20=%20findbeginning(_in.value,%20dotpos-1,%20false);\n%20%20%20%20%20%20//dump(\%22space%20pos:%20\%22%20+%20spacepos%20+%20\%22\\n\%22);\n%20%20%20%20%20%20//%20get%20the%20object%20we're%20trying%20to%20complete%20on\n%20%20%20%20%20%20if(spacepos%20==%20dotpos%20||%20spacepos+1%20==%20dotpos%20||%20dotpos%20==%20caret)\n%20%20%20%20%20%20{\n%20%20%20%20%20%20%20%20//%20try%20completing%20function%20args\n%20%20%20%20%20%20%20%20if(_in.value.charAt(dotpos)%20==%20'('%20||\n%20(_in.value.charAt(spacepos)%20==%20'('%20&&%20(spacepos+1)%20==%20dotpos))\n%20%20%20%20%20%20%20%20{\n%20%20%20%20%20%20%20%20%20%20var%20fn,fname;\n%20%20var%20from%20=%20(_in.value.charAt(dotpos)%20==%20'(')%20?%20dotpos%20:%20spacepos;\n%20%20%20%20%20%20%20%20%20%20spacepos%20=%20findbeginning(_in.value,%20from-1,%20false);\n\n%20%20%20%20%20%20%20%20%20%20fname%20=%20_in.value.substr(spacepos+1,from-(spacepos+1));\n%20%20//dump(\%22fname:%20\%22%20+%20fname%20+%20\%22\\n\%22);\n%20%20%20%20%20%20%20%20%20%20try%20{\n%20%20%20%20%20%20%20%20%20%20%20%20with(_win.Shell._scope)\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20with(_win)\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20with(Shell.shellCommands)\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20fn%20=%20eval(fname);\n%20%20%20%20%20%20%20%20%20%20}\n%20%20%20%20%20%20%20%20%20%20catch(er)%20{\n%20%20%20%20%20%20%20%20%20%20%20%20//dump('fn%20is%20not%20a%20valid%20object\\n');\n%20%20%20%20%20%20%20%20%20%20%20%20return;\n%20%20%20%20%20%20%20%20%20%20}\n%20%20%20%20%20%20%20%20%20%20if(fn%20==%20undefined)%20{\n%20%20%20%20%20%20%20%20%20%20%20%20%20//dump('fn%20is%20undefined');\n%20%20%20%20%20%20%20%20%20%20%20%20%20return;\n%20%20%20%20%20%20%20%20%20%20}\n%20%20%20%20%20%20%20%20%20%20if(fn%20instanceof%20Function)\n%20%20%20%20%20%20%20%20%20%20{\n%20%20%20%20%20%20%20%20%20%20%20%20//%20Print%20function%20definition,%20including%20argument%20names,%20but%20not%20function%20body\n%20%20%20%20%20%20%20%20%20%20%20%20if(!fn.toString().match(/function%20.+?\\(\\)%20+\\{\\n%20+\\[native%20code\\]\\n\\}/))\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20println(fn.toString().match(/function%20.+?\\(.*?\\)/),%20\%22tabcomplete\%22);\n%20%20%20%20%20%20%20%20%20%20}\n\n%20%20%20%20%20%20%20%20%20%20return;\n%20%20%20%20%20%20%20%20}\n%20%20%20%20%20%20%20%20else\n%20%20%20%20%20%20%20%20%20%20obj%20=%20_win;\n%20%20%20%20%20%20}\n%20%20%20%20%20%20else\n%20%20%20%20%20%20{\n%20%20%20%20%20%20%20%20var%20objname%20=%20_in.value.substr(spacepos+1,dotpos-(spacepos+1));\n%20%20%20%20%20%20%20%20//dump(\%22objname:%20|\%22%20+%20objname%20+%20\%22|\\n\%22);\n%20%20%20%20%20%20%20%20try%20{\n%20%20%20%20%20%20%20%20%20%20with(_win.Shell._scope)\n%20%20%20%20%20%20%20%20%20%20%20%20with(_win)\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20obj%20=%20eval(objname);\n%20%20%20%20%20%20%20%20}\n%20%20%20%20%20%20%20%20catch(er)%20{\n%20%20%20%20%20%20%20%20%20%20printError(er);%20\n%20%20%20%20%20%20%20%20%20%20return;\n%20%20%20%20%20%20%20%20}\n%20%20%20%20%20%20%20%20if(obj%20==%20undefined)%20{\n%20%20%20%20%20%20%20%20%20%20//%20sometimes%20this%20is%20tabcomplete's%20fault,%20so%20don't%20print%20it%20:(\n%20%20%20%20%20%20%20%20%20%20//%20e.g.%20completing%20from%20\%22print(document.getElements\%22\n%20%20%20%20%20%20%20%20%20%20//%20println(\%22Can't%20complete%20from%20null%20or%20undefined%20expression%20\%22%20+%20objname,%20\%22error\%22);\n%20%20%20%20%20%20%20%20%20%20return;\n%20%20%20%20%20%20%20%20}\n%20%20%20%20%20%20}\n%20%20%20%20%20%20//dump(\%22obj:%20\%22%20+%20obj%20+%20\%22\\n\%22);\n%20%20%20%20%20%20//%20get%20the%20thing%20we're%20trying%20to%20complete\n%20%20%20%20%20%20if(dotpos%20==%20caret)\n%20%20%20%20%20%20{\n%20%20%20%20%20%20%20%20if(spacepos+1%20==%20dotpos%20||%20spacepos%20==%20dotpos)\n%20%20%20%20%20%20%20%20{\n%20%20%20%20%20%20%20%20%20%20//%20nothing%20to%20complete\n%20%20%20%20%20%20%20%20%20%20//dump(\%22nothing%20to%20complete\\n\%22);\n%20%20%20%20%20%20%20%20%20%20return;\n%20%20%20%20%20%20%20%20}\n\n%20%20%20%20%20%20%20%20complete%20=%20_in.value.substr(spacepos+1,dotpos-(spacepos+1));\n%20%20%20%20%20%20}\n%20%20%20%20%20%20else%20{\n%20%20%20%20%20%20%20%20complete%20=%20_in.value.substr(dotpos+1,caret-(dotpos+1));\n%20%20%20%20%20%20}\n%20%20%20%20%20%20//dump(\%22complete:%20\%22%20+%20complete%20+%20\%22\\n\%22);\n%20%20%20%20%20%20//%20ok,%20now%20look%20at%20all%20the%20props/methods%20of%20this%20obj\n%20%20%20%20%20%20//%20and%20find%20ones%20starting%20with%20'complete'\n%20%20%20%20%20%20var%20matches%20=%20[];\n%20%20%20%20%20%20var%20bestmatch%20=%20null;\n%20%20%20%20%20%20for(var%20a%20in%20obj)\n%20%20%20%20%20%20{\n%20%20%20%20%20%20%20%20//a%20=%20a.toString();\n%20%20%20%20%20%20%20%20//XXX:%20making%20it%20lowercase%20could%20help%20some%20cases,\n%20%20%20%20%20%20%20%20//%20but%20screws%20up%20my%20general%20logic.\n%20%20%20%20%20%20%20%20if(a.substr(0,complete.length)%20==%20complete)%20{\n%20%20%20%20%20%20%20%20%20%20matches.push(a);\n%20%20%20%20%20%20%20%20%20%20////dump(\%22match:%20\%22%20+%20a%20+%20\%22\\n\%22);\n%20%20%20%20%20%20%20%20%20%20//%20if%20no%20best%20match,%20this%20is%20the%20best%20match\n%20%20%20%20%20%20%20%20%20%20if(bestmatch%20==%20null)\n%20%20%20%20%20%20%20%20%20%20{\n%20%20%20%20%20%20%20%20%20%20%20%20bestmatch%20=%20a;\n%20%20%20%20%20%20%20%20%20%20}\n%20%20%20%20%20%20%20%20%20%20else%20{\n%20%20%20%20%20%20%20%20%20%20%20%20//%20the%20best%20match%20is%20the%20longest%20common%20string\n%20%20%20%20%20%20%20%20%20%20%20%20function%20min(a,b){%20return%20((a<b)?a:b);%20}\n%20%20%20%20%20%20%20%20%20%20%20%20var%20i;\n%20%20%20%20%20%20%20%20%20%20%20%20for(i=0;%20i<%20min(bestmatch.length,%20a.length);%20i++)\n%20%20%20%20%20%20%20%20%20%20%20%20{\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20if(bestmatch.charAt(i)%20!=%20a.charAt(i))\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break;\n%20%20%20%20%20%20%20%20%20%20%20%20}\n%20%20%20%20%20%20%20%20%20%20%20%20bestmatch%20=%20bestmatch.substr(0,i);\n%20%20%20%20%20%20%20%20%20%20%20%20////dump(\%22bestmatch%20len:%20\%22%20+%20i%20+%20\%22\\n\%22);\n%20%20%20%20%20%20%20%20%20%20}\n%20%20%20%20%20%20%20%20%20%20////dump(\%22bestmatch:%20\%22%20+%20bestmatch%20+%20\%22\\n\%22);\n%20%20%20%20%20%20%20%20}\n%20%20%20%20%20%20}\n%20%20%20%20%20%20bestmatch%20=%20(bestmatch%20||%20\%22\%22);\n%20%20%20%20%20%20////dump(\%22matches:%20\%22%20+%20matches%20+%20\%22\\n\%22);\n%20%20%20%20%20%20var%20objAndComplete%20=%20(objname%20||%20obj)%20+%20\%22.\%22%20+%20bestmatch;\n%20%20%20%20%20%20//dump(\%22matches.length:%20\%22%20+%20matches.length%20+%20\%22,%20tooManyMatches:%20\%22%20+%20tooManyMatches%20+%20\%22,%20objAndComplete:%20\%22%20+%20objAndComplete%20+%20\%22\\n\%22);\n%20%20%20%20%20%20if(matches.length%20>%201%20&&%20(tooManyMatches%20==%20objAndComplete%20||%20matches.length%20<=%2010))%20{\n\n%20%20%20%20%20%20%20%20printWithRunin(\%22Matches:%20\%22,%20matches.join(',%20'),%20\%22tabcomplete\%22);\n%20%20%20%20%20%20%20%20tooManyMatches%20=%20null;\n%20%20%20%20%20%20}\n%20%20%20%20%20%20else%20if(matches.length%20>%2010)\n%20%20%20%20%20%20{\n%20%20%20%20%20%20%20%20println(matches.length%20+%20\%22%20matches.%20%20Press%20tab%20again%20to%20see%20them%20all\%22,%20\%22tabcomplete\%22);\n%20%20%20%20%20%20%20%20tooManyMatches%20=%20objAndComplete;\n%20%20%20%20%20%20}\n%20%20%20%20%20%20else%20{\n%20%20%20%20%20%20%20%20tooManyMatches%20=%20null;\n%20%20%20%20%20%20}\n%20%20%20%20%20%20if(bestmatch%20!=%20\%22\%22)\n%20%20%20%20%20%20{\n%20%20%20%20%20%20%20%20var%20sstart;\n%20%20%20%20%20%20%20%20if(dotpos%20==%20caret)%20{\n%20%20%20%20%20%20%20%20%20%20sstart%20=%20spacepos+1;\n%20%20%20%20%20%20%20%20}\n%20%20%20%20%20%20%20%20else%20{\n%20%20%20%20%20%20%20%20%20%20sstart%20=%20dotpos+1;\n%20%20%20%20%20%20%20%20}\n%20%20%20%20%20%20%20%20_in.value%20=%20_in.value.substr(0,%20sstart)\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20+%20bestmatch\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20+%20_in.value.substr(caret);\n%20%20%20%20%20%20%20%20setselectionto(_in,caret%20+%20(bestmatch.length%20-%20complete.length));\n%20%20%20%20%20%20}\n%20%20%20%20}\n}\n\nfunction%20printQuestion(q)\n{\n%20%20println(q,%20\%22input\%22);\n}\n\nfunction%20printAnswer(a)\n{\n%20%20if%20(a%20!==%20undefined)%20{\n%20%20%20%20println(a,%20\%22normalOutput\%22);\n%20%20%20%20shellCommands.ans%20=%20a;\n%20%20}\n}\n\nfunction%20printError(er)\n{%20\n%20%20var%20lineNumberString;\n\n%20%20lastError%20=%20er;%20//%20for%20debugging%20the%20shell\n%20%20if%20(er.name)\n%20%20{\n%20%20%20%20//%20lineNumberString%20should%20not%20be%20\%22\%22,%20to%20avoid%20a%20very%20wacky%20bug%20in%20IE%206.\n%20%20%20%20lineNumberString%20=%20(er.lineNumber%20!=%20undefined)%20?%20(\%22%20on%20line%20\%22%20+%20er.lineNumber%20+%20\%22:%20\%22)%20:%20\%22:%20\%22;\n%20%20%20%20println(er.name%20+%20lineNumberString%20+%20er.message,%20\%22error\%22);%20//%20Because%20IE%20doesn't%20have%20error.toString.\n%20%20}\n%20%20else\n%20%20%20%20println(er,%20\%22error\%22);%20//%20Because%20security%20errors%20in%20Moz%20/only/%20have%20toString.\n}\n\nfunction%20go(s)\n{\n%20%20_in.value%20=%20question%20=%20s%20?%20s%20:%20_in.value;\n\n%20%20if%20(question%20==%20\%22\%22)\n%20%20%20%20return;\n\n%20%20histList[histList.length-1]%20=%20question;\n%20%20histList[histList.length]%20=%20\%22\%22;\n%20%20histPos%20=%20histList.length%20-%201;\n%20%20\n%20%20//%20Unfortunately,%20this%20has%20to%20happen%20*before*%20the%20JavaScript%20is%20run,%20so%20that%20\n%20%20//%20print()%20output%20will%20go%20in%20the%20right%20place.\n%20%20_in.value='';\n%20%20recalculateInputHeight();\n%20%20printQuestion(question);\n\n%20%20if%20(_win.closed)%20{\n%20%20%20%20printError(\%22Target%20window%20has%20been%20closed.\%22);\n%20%20%20%20return;\n%20%20}\n%20%20\n%20%20try%20{%20(\%22Shell\%22%20in%20_win)%20}\n%20%20catch(er)%20{\n%20%20%20%20printError(\%22The%20JavaScript%20Shell%20cannot%20access%20variables%20in%20the%20target%20window.%20%20The%20most%20likely%20reason%20is%20that%20the%20target%20window%20now%20has%20a%20different%20page%20loaded%20and%20that%20page%20has%20a%20different%20hostname%20than%20the%20original%20page.\%22);\n%20%20%20%20return;\n%20%20}\n\n%20%20if%20(!(\%22Shell\%22%20in%20_win))\n%20%20%20%20initTarget();%20//%20silent\n\n%20%20//%20Evaluate%20Shell.question%20using%20_win's%20eval%20(this%20is%20why%20eval%20isn't%20in%20the%20|with|,%20IIRC).\n%20%20_win.location.href%20=%20\%22javascript:try{%20Shell.printAnswer(eval('with(Shell._scope)%20with(Shell.shellCommands)%20{'%20+%20Shell.question%20+%20String.fromCharCode(10)%20+%20'}'));%20}%20catch(er)%20{%20Shell.printError(er);%20};%20setTimeout(Shell.refocus,%200);%20void%200\%22;\n}\n\n</script>\n\n<!--%20for%20http://ted.mielczarek.org/code/mozilla/extensiondev/%20-->\n<script%20type=\%22text/javascript\%22%20src=\%22chrome://extensiondev/content/rdfhistory.js\%22></script>\n<script%20type=\%22text/javascript\%22%20src=\%22chrome://extensiondev/content/chromeShellExtras.js\%22></script>\n\n<style%20type=\%22text/css\%22>\nbody%20{%20background:%20white;%20color:%20black;%20}\n\n#output%20{%20white-space:%20pre;%20white-space:%20-moz-pre-wrap;%20}%20/*%20Preserve%20line%20breaks,%20but%20wrap%20too%20if%20browser%20supports%20it%20*/\nh3%20{%20margin-top:%200;%20margin-bottom:%200em;%20}\nh3%20+%20div%20{%20margin:%200;%20}\n\nform%20{%20margin:%200;%20padding:%200;%20}\n#input%20{%20width:%20100%25;%20border:%20none;%20padding:%200;%20overflow:%20auto;%20}\n\n.input%20{%20color:%20blue;%20background:%20white;%20font:%20inherit;%20font-weight:%20bold;%20margin-top:%20.5em;%20/*%20background:%20#E6E6FF;%20*/%20}\n.normalOutput%20{%20color:%20black;%20background:%20white;%20}\n.print%20{%20color:%20brown;%20background:%20white;%20}\n.error%20{%20color:%20red;%20background:%20white;%20}\n.propList%20{%20color:%20green;%20background:%20white;%20}\n.message%20{%20color:%20green;%20background:%20white;%20}\n.tabcomplete%20{%20color:%20purple;%20background:%20white;%20}\n</style>\n</head>\n\n<body%20onload=\%22init()\%22>\n\n<div%20id=\%22output\%22><h3>JavaScript%20Shell%201.4</h3><div>Features:%20autocompletion%20of%20property%20names%20with%20Tab,%20multiline%20input%20with%20Shift+Enter,%20input%20history%20with%20(Ctrl+)%20Up/Down,%20<a%20accesskey=\%22M\%22%20href=\%22javascript:go('scope(Math);%20mathHelp();');\%22%20title=\%22Accesskey:%20M\%22>Math</a>,%20<a%20accesskey=\%22H\%22%20href=\%22http://www.squarefree.com/shell/?ignoreReferrerFrom=shell1.4\%22%20%20title=\%22Accesskey:%20H\%22>help</a></div><div>Values%20and%20functions:%20ans,%20print(string),%20<a%20accesskey=\%22P\%22%20href=\%22javascript:go('props(ans)')\%22%20title=\%22Accesskey:%20P\%22>props(object)</a>,%20<a%20accesskey=\%22B\%22%20href=\%22javascript:go('blink(ans)')\%22%20title=\%22Accesskey:%20B\%22>blink(node)</a>,%20<a%20accesskey=\%22C\%22%20href=\%22javascript:go('clear()')\%22%20title=\%22Accesskey:%20C\%22>clear()</a>,%20load(scriptURL),%20scope(object)</div></div>\n\n<div><textarea%20id=\%22input\%22%20class=\%22input\%22%20wrap=\%22off\%22%20onkeydown=\%22inputKeydown(event)\%22%20rows=\%221\%22></textarea></div>\n\n</body>\n\n</html>%22);document.close();}void%200" ADD_DATE="1245257789" LAST_MODIFIED="1245259059" SHORTCUTURL="jsshell">shell</A><DD>Opens up a small shell to test javascript functions (javascriptlet, keyword jsshell) <DT><A HREF="javascript:with(window.open(%22%22,%22_blank%22,%22width=%22+screen.width*.6+%22,left=%22+screen.width*.35+%22,height=%22+screen.height*.9+%22,resizable,scrollbars=yes%22)){document.write(%22<head><title>JavaScript%20Development%20Environment%202.0.1</title><!--%20about:blank%20confuses%20opera..%20--></head><frameset%20rows=\%2225,*,*\%22>\n\n%20%20<frame%20name=\%22toolbarFrame\%22%20src=\%22about:blank\%22%20noresize=\%22noresize\%22>\n\n%20%20<frame%20name=\%22inputFrame\%22%20src=\%22about:blank\%22>\n\n%20%20<frame%20name=\%22outputFrame\%22%20src=\%22about:blank\%22>\n\n</frameset>\n\n%22);document.close();%20frames[0].document.write(%22<head><!--%20no%20doctype%20-%20it%20makes%20IE%20ignore%20the%20height:%20100%25.%20--><title>toolbarFrame</title>\n\n\n\n<style%20type=\%22text/css\%22>\nhtml,body%20{%20width:%20100%25;%20height:%20100%25;%20border:%20none;%20margin:%200px;%20padding:%200px;%20}\nbutton%20{%20height:%20100%25;%20}\n</style>\n\n<script%20type=\%22text/javascript\%22>\n\nvar%20outputFrame%20=%20parent.outputFrame;\nvar%20inputFrame%20=%20parent.inputFrame;\nvar%20framesetElement%20=%20parent.document.documentElement.getElementsByTagName(\%22frameset\%22)[0];\n\nvar%20savedRows;\n\n\n//%20Need%20to%20use%20C-style%20comments%20in%20handleError()%20and%20print()%20\n//%20because%20IE%20retains%20them%20when%20decompiling%20a%20function.\n\n\n\nfunction%20print(s,%20c)%20{\n%20%20var%20outputFrame%20=%20parent.outputFrame;%20/*%20duplicated%20here%20in%20case%20this%20function%20is%20elsewhere%20*/\n%20%20var%20doc%20=%20outputFrame.document;\n\n%20%20var%20newdiv%20=%20doc.createElement(\%22div\%22);\n%20%20newdiv.appendChild(doc.createTextNode(s));\n%20%20if%20(c)\n%20%20%20%20newdiv.style.color%20=%20c;\n%20%20doc.body.appendChild(newdiv);\n}\n\nfunction%20handleError(er,%20file,%20lineNumber)%20\n{\n%20%20print(\%22Error%20on%20line%20\%22%20+%20lineNumber%20+%20\%22:%20\%22%20+%20er,%20\%22red\%22);%20\n%20%20%20%20\n%20%20/*%20Find%20the%20character%20offset%20for%20the%20line%20*/\n%20%20/*%20(code%20adapted%20from%20blogidate%20xml%20well-formedness%20bookmarklet)%20*/\n%20%20var%20ta%20=%20inputFrame.document.getElementById(\%22input\%22);\n%20%20var%20lines%20=%20ta.value.split(\%22\\n\%22);\n%20%20var%20cc%20=%200;%20\n%20%20var%20i;\n%20%20for(i=0;%20i%20<%20(lineNumber%20-%201);%20++i)%20\n%20%20%20%20cc%20+=%20lines[i].length%20+%201;\n\n%20%20/*%20Hacky(?)%20workaround%20for%20IE's%20habit%20of%20including%20\\r's%20in%20strings%20*/\n%20%20if%20(ta.value.split(\%22\\r\%22).length%20>%201)\n%20%20%20%20cc%20-=%20lineNumber%20-%201;\n\n%20%20/*%20Select%20the%20line%20*/\n%20%20if(document.selection)%20{%20\n%20%20%20%20/*%20IE%20(Leonard%20Lin%20gave%20me%20this%20code)%20*/\n%20%20%20%20var%20sel%20=%20ta.createTextRange();%20\n%20%20%20%20sel.moveStart(\%22character\%22,%20cc);%20\n%20%20%20%20sel.collapse();%20\n%20%20%20%20sel.moveEnd(\%22character\%22,%20lines[i].length);%20\n%20%20%20%20sel.select();\n%20%20}%20else%20{%20\n%20%20%20%20/*%20Mozilla%20*/\n%20%20%20%20ta.selectionStart%20=%20cc;%20\n%20%20%20%20ta.selectionEnd%20=%20cc%20+%20lines[i].length;%20\n%20%20}\n%20\n%20%20/*%20return%20true;%20*/%20/*%20nah,%20let%20the%20error%20go%20through%20to%20IE's%20js%20consolish%20thing!%20*/\n}\n\n\n\n\n\nfunction%20showHideOutput()\n{\n%20%20if%20(outputFrame.document.body.clientHeight%20>%20100)%20{\n%20%20%20%20//%20hide\n%20%20%20%20savedRows%20=%20framesetElement.rows;%20%20%20%20\n%20%20%20%20framesetElement.rows%20=%20\%2225,*,0\%22;\n%20%20}\n%20%20else%20{\n%20%20%20%20//%20show.%20use%20the%20previous%20size,%20if%20possible\n%20%20%20%20if%20(savedRows)%20{\n%20%20%20%20%20%20framesetElement.rows%20=%20savedRows;\n%20%20%20%20%20%20savedRows%20=%20null;\n%20%20%20%20}\n%20%20%20%20else%20{\n%20%20%20%20%20%20framesetElement.rows%20=%20\%2225,*,*\%22;\n%20%20%20%20}\n%20%20}\n}\n\nfunction%20refocus()\n{\n%20%20inputFrame.document.getElementById(\%22input\%22).focus();\n}\n\n\nfunction%20clearOutput()\n{\n%20%20var%20b%20=%20outputFrame.document.body;\n%20%20while(b.firstChild)\n%20%20%20%20b.removeChild(b.firstChild);\n}\n\nfunction%20stripLineBreaks(s)\n{\n%20%20return%20s.replace(/\\n/g,%20\%22\%22).replace(/\\r/g,%20\%22\%22);%20//%20stripping%20\\r%20is%20for%20IE\n}\n\nfunction%20execute()\n{\n%20%20var%20js%20=%20inputFrame.document.getElementById(\%22input\%22).value;\n\n%20%20var%20useOpener%20=%20parent.opener%20&&%20!parent.opener.closed;\n%20%20var%20oldStyle%20=%20!!%20document.all;%20//%20lame%20but%20meh.\n%20%20\n%20%20print(\%22Running\%22%20+%20(useOpener%20?%20\%22%20in%20bookmarklet%20mode\%22%20:%20\%22\%22)%20+%20(oldStyle%20?%20\%22%20in%20make-IE-happy%20mode\%22%20:%20\%22\%22)%20+%20\%22...\%22,%20\%22orange\%22);\n\n%20%20if%20(useOpener)\n%20%20%20%20executeWithJSURL(js,%20parent.opener);%20//%20only%20way%20to%20execute%20against%20another%20frame\n%20%20else%20if%20(oldStyle)\n%20%20%20%20executeWithDW(js,%20execFrame);%20//%20only%20way%20to%20get%20line%20numbers%20in%20IE\n%20%20else\n%20%20%20%20executeWithJSURL(js,%20execFrame);%20//%20faster%20in%20Mozilla%20%20\n}\n\n//%20Advantages:%20can%20get%20line%20numbers%20in%20IE.\nfunction%20executeWithDW(js,%20win)\n{\n%20%20win.document.open();\n%20%20win.inputFrame%20=%20inputFrame;\n%20%20win.outputFrame%20=%20outputFrame;\n%20%20win.document.write(\n%20%20%20%20stripLineBreaks(\n%20%20%20%20%20%20%20%20'<!DOCTYPE%20HTML%20PUBLIC%20\%22-//W3C//DTD%20HTML%204.01//EN\%22%20\%22http://www.w3.org/TR/html4/strict.dtd\%22>'%20+\n%20%20%20%20%20%20%20%20'<html><head><title>execFrame<\\/title><script%20type=\%22text/javascript\%22>'\n%20%20%20%20%20%20+%20print%20%20%20%20%20%20%20%20%20//%20yay%20for%20decompilation!\n%20%20%20%20%20%20+%20handleError%20\n%20%20%20%20%20%20+%20\%22window.onerror%20=%20handleError;\%22\n%20%20%20%20%20%20+%20\%22<\\/script><\\/head>\%22\n%20%20%20%20%20%20)%20\n%20%20%20%20+%20'<body><script%20type=\%22text/javascript\%22>'\n%20%20%20%20+%20js%20%20%20%20%20%20%20%20%20//%20should%20escape%20it%20a%20little%20to%20remove%20the%20string%20<\\/script>%20at%20least...\n%20%20%20%20+%20\%22<\\/script><\\/body><\\/html>\%22\n%20%20%20%20);\n%20%20win.document.close();\n}\n\n//%20Advantages:%20can%20be%20used%20to%20inject%20a%20script%20into%20another%20window,%20faster%20in%20Mozilla.\nfunction%20executeWithJSURL(js,%20win)\n{\n%20%20//%20isolate%20scope\n%20%20js%20=%20\%22(function(){%20\%22%20+%20js%20+%20\%22%20\\n%20})()\%22;\n\n%20%20win.print%20=%20print;\n%20%20win.onerror%20=%20handleError;\n\n%20%20//%20double%20encodeURIComponent%20because%20javascript:%20URLs%20themselves%20are%20encoded!\n%20%20win.location.href%20=%20'javascript:eval(decodeURIComponent(\%22'%20+%20encodeURIComponent(encodeURIComponent(js))%20+%20'\%22));%20void%200;';\n%20%20\n%20%20refocus();\n}\n\n//%20Other%20ideas%20I%20haven't%20tried%20lately:%20create%20a%20<script>%20element,%20eval.\n\n\nfunction%20makeUserScript(userScriptLink)\n{\n%20%20%20%20userScriptLink.href%20=%20\n%20%20%20%20%20%20%20%20\%22data:text/javascript;charset=utf-8,\%22%20+%20\n%20%20%20%20%20%20%20%20encodeURIComponent(inputFrame.document.getElementById(\%22input\%22).value%20+%20\%22//.user.js\%22);\n}\n\n</script></head><body>\n\n<button%20accesskey=\%22E\%22%20onclick=\%22execute();%20refocus();\%22><u>E</u>xecute</button>\n<!--%20<button%20accesskey=\%22R\%22%20onclick=\%22reloadAndExecute();%20refocus();\%22><u>R</u>eload%20and%20execute</button>%20-->\n<button%20accesskey=\%22C\%22%20onclick=\%22clearOutput();%20refocus();\%22><u>C</u>lear%20output</button>\n<button%20accesskey=\%22S\%22%20onclick=\%22showHideOutput();%20refocus();\%22><u>S</u>how/hide%20output</button>\n<!--%20<button%20accesskey=\%22H\%22%20onclick=\%22help();%20refocus();\%22><u>H</u>elp</button>%20-->\n\n<a%20href=\%22data:text/html,...\%22%20onfocus=\%22makeUserScript(this);\%22%20onmouseover=\%22makeUserScript(this);\%22%20target=\%22_blank\%22>Install%20as%20user%20script</a>\n\n<div%20style=\%22visibility:%20hidden;\%22>\n<iframe%20name=\%22execFrame\%22%20src=\%22about:blank\%22%20height=\%225\%22%20width=\%225\%22></iframe>\n</div>\n\n</body>%22);%20frames[0].document.close();%20frames[1].document.write(%22<head><!--%20no%20doctype%20-%20it%20makes%20IE%20ignore%20the%20height:%20100%25.%20--><title>inputFrame</title>\n\n\n\n\n\n<style%20type=\%22text/css\%22>\n\nhtml,body,form,textarea%20{%20width:%20100%25;%20height:%20100%25;%20border:%20none;%20margin:%200px;%20padding:%200px;%20}\nhtml,body%20{%20overflow:%20hidden;%20}\n\n</style></head><body%20onload=\%22document.getElementById('input').select();\%22>\n<textarea%20style=\%22background-color:%20rgb(221,%20238,%20255);\%22%20id=\%22input\%22>//%20==UserScript==\n//%20@namespace%20%20%20%20%20http://www.squarefree.com/jsenv/autogenerated\n//%20@name%20%20%20%20%20%20%20%20%20%20Unnamed%20script\n//%20@description%20%20%20Undescribed%20script\n//%20==/UserScript==\n\nprint(\%22Squares%20of%20numbers%200%20through%204:\%22);\nfor%20(var%20i%20=%200;%20i%20<%205;%20++i)\n%20%20print(i%20*%20i);\n\nthis.statement.causes(an.error);\n</textarea>\n</body>%22);%20frames[1].document.close();%20%20%20}void%200" ADD_DATE="1245257818" LAST_MODIFIED="1245259108" SHORTCUTURL="jsenv">jsenv</A><DD>Opens up a "full" Javascript development complete with the ability to install UserScripts (Greasemonkey et al) (javascriptlet, keyword jsenv) <DT><A HREF="javascript:s=document.getElementsByTagName('SCRIPT');%20d=window.open().document;%20/*140681*/d.open();d.close();%20b=d.body;%20function%20trim(s){return%20s.replace(/^\s*\n/,%20'').replace(/\s*$/,%20'');%20};%20function%20add(h){b.appendChild(h);}%20function%20makeTag(t){return%20d.createElement(t);}%20function%20makeText(tag,text){t=makeTag(tag);t.appendChild(d.createTextNode(text));%20return%20t;}%20add(makeText('style',%20'iframe{width:100%;height:18em;border:1px%20solid;'));%20add(makeText('h3',%20d.title='Scripts%20in%20'%20+%20location.href));%20for(i=0;%20i<s.length;%20++i)%20{%20if%20(s[i].src)%20{%20add(makeText('h4','script%20src=%22'%20+%20s[i].src%20+%20'%22'));%20iframe=makeTag('iframe');%20iframe.src=s[i].src;%20add(iframe);%20}%20else%20{%20add(makeText('h4','Inline%20script'));%20add(makeText('pre',%20trim(s[i].innerHTML)));%20}%20}%20void%200" ADD_DATE="1245257847" LAST_MODIFIED="1245259133" SHORTCUTURL="scripts">view scripts</A><DD>View all scripts loaded on a page (javascriptlet, keyword scripts) <DT><A HREF="javascript:var%20r=window.open('http://web.archive.org/web/*/'+escape(location.href));" ADD_DATE="1245257907" LAST_MODIFIED="1245262549" SHORTCUTURL="wb">wayback search</A><DD>Search the current page in the Wayback Machine (javascriptlet, keyword wb) <DT><A HREF="javascript:if(frames.length<1){alert('The%20server%20indicates%20that%20the%20page%20was%20last%20modified:%20'%20+%20window.document.lastModified)}else{alert('Page%20is%20framed.%20Use%20version%20of%20bookmarklet%20for%20frames.%20(bookmarklets.com)')}" ADD_DATE="1245258096" LAST_MODIFIED="1245259187" SHORTCUTURL="modified">Page Last Modified</A><DD>Returns the last modified date of a page (javascriptlet, keyword modified) <DT><A HREF="javascript:var%20r=window.open('http://twitter.com/home?status='+escape(document.getSelection().replace(/\s/g,'%20').replace(/%20{2,}/g,'%20')));" ADD_DATE="1245258149" LAST_MODIFIED="1245262506" SHORTCUTURL="tweetthis">Tweet Selected Text</A><DD>Tweet the selected text (javascriptlet, keyword tweetthis <DT><A HREF="javascript:expr=prompt('Formula...(eg:%20%202*3%20+%207/8%20)','');if(expr){with(Math){evl=parseFloat(eval(expr))};if(isNaN(evl)){alert('Not%20a%20number!')}else{void(prompt('Result:',evl))}}else{void(null)}" ADD_DATE="1245258185" LAST_MODIFIED="1245259222" SHORTCUTURL="calc">Calculator...</A><DD>A small javascript calculator (javascriptlet, keyword calc) <DT><A HREF="javascript:if(navigator.javaEnabled()==true){alert('Your%20IP%20address%20is%20'+java.net.InetAddress.getLocalHost().getHostAddress())}else{alert('Enable%20your%20Java%20for%20this%20to%20work!%20(in%20your%20Preferences)')}" ADD_DATE="1245258278" LAST_MODIFIED="1245259246" SHORTCUTURL="ip">IP Address</A><DD>Returns current IP address (needs Java) (javascriptlet, keyword ip) <DT><A HREF="https://launchpad.net/ubuntu/+ppas?name_filter=%s" ADD_DATE="1245263592" LAST_MODIFIED="1245263592" SHORTCUTURL="ppa" LAST_CHARSET="UTF-8">Ubuntu PPA Search</A> </DL><p>