/* FILE ARCHIVED ON 22:01:44 Jan 18, 2012 AND RETRIEVED FROM THE AN OPENWAYBACK INSTANCE ON 17:19:51 Jul 16, 2024. JAVASCRIPT APPENDED BY OPENWAYBACK, COPYRIGHT INTERNET ARCHIVE. ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C. SECTION 108(a)(3)). */ //mobify include var _mm = "https://webarchive.library.unt.edu/web/20120118220144/http://m.wired.com/"; (function() { if(document.domain.indexOf("howto.wired.com")>=0) { return; } if(document.domain.indexOf("wired.com")>=0) { var m = document.createElement('script'); m.type = 'text/javascript'; m.async = true; m.src = 'http' + (document.location.protocol[4] == 's' ? 's' : '') + '://m.wired.com/mobify/redirect.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(m, s); } })(); //end mobify function addLoadEvent(func) { var oldonload = window.onload; if (typeof window.onload != 'function') { window.onload = func; } else { window.onload = function() { oldonload(); func(); }; } } /* * (c)2006 Jesse Skinner/Dean Edwards/Matthias Miller/John Resig * Special thanks to Dan Webb's domready.js Prototype extension * and Simon Willison's addLoadEvent * * For more info, see: * https://webarchive.library.unt.edu/web/20120118220144/http://www.thefutureoftheweb.com/blog/adddomloadevent */ addDOMLoadEvent = (function(){ // create event function stack var load_events = [], load_timer, script, done, exec, old_onload, init = function () { done = true; // kill the timer clearInterval(load_timer); // execute each function in the stack in the order they were added while (exec = load_events.shift()) exec(); if (script) script.onreadystatechange = ''; }; return function (func) { // if the init function was already ran, just run this function now and stop if (done) return func(); if (!load_events[0]) { // for Mozilla/Opera9 if (document.addEventListener) document.addEventListener("DOMContentLoaded", init, false); // for Internet Explorer /*@cc_on @*/ /*@if (@_win32) document.write("