<head>
<title>InfoWall</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=1" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<meta property="og:title" content="InfoWall">
<meta property="og:description" content="InfoWall : At-a-glance time, date, weather, webcams, more.">
<meta property="og:image" content="https://bedno.com/g/infowall.jpg">
<meta property="og:url" content="https://bedno.com/infowall">
<meta property="og:site_name" content="Bedno.com">
<script>
var About = 'InfoWall : At-a-glance time, date, weather, webcams, more.<br><br>' +
'Click Time for next background. Click Date for next slideshow. Click Forecast to speak it.<br>' +
'<span style="font-size:10pt;">Works best in Safari and Chrome (F11 for Full Screen).</span><br><br>' +
'<a href="https://Bedno.com/infowall/about" target="About">More info...</a> ' +
'<a href="http://AndrewBedno.com" target="AndrewBedno">AndrewBedno.com</a> ' +
'<span onClick="TechReadout();" title="Click for technical details." style="font-size:8pt; color:#C0C0C0;">🔧</span>'; // Wrench icon.
// Demonstrates a number of advanced Javascript techniques:
// Responsive auto-formatting. Text to speech. Canvas element and drawing. Analog clock.
// Weather API use (Wunderground.com). JSON fetch and parse.
// Querystring checking. Read/write localstorage.
// Catch/try feature detection. Structured constant array.
// Keypress handling. Master updater using timer.
// Sun/Moon calculations. No dependencies.
// Incorporates SunCalc.js by Vladimir Agafonkin https://github.com/mourner/suncalc
// CONFIGURABLES:
// Configure Wunderground.com (Weather Underground) aspects below. See https://www.wunderground.com/weather/api/
var InfoZip = '60657'; // Zipcode of this installation. 60657=Chicago
var InfoLat = 41.94637; var InfoLon = -87.64519; // Geocoordinates of this installation. 41.94637,-87.64519=Chicago
var InfoZone = 0; // Timezone adjustment hours. Should = <dateobj>.getTimezoneOffset()/60 but reads wrong on most browsers?!?
var WeatherURL = 'https://www.wunderground.com/cgi-bin/findweather/getForecast?query=zmw:'+InfoZip+'.1.99999&apiref=bf1a242569a63476'; // Detailed local forecast. Change apiref if you have one.
// Examples below use periodically cached Chicago mirrors. For live use substitute api specific as shown:
var WeatherForecastURL = 'https://bedno.com/bike/d/w/wz-chicago-more.json'; // http://api.wunderground.com/api/<api_key>/forecast/pws/q/pws:KILCHICA173.json
var WeatherCurrentURL = 'https://bedno.com/bike/d/w/wz-chicago-now.json'; // http://api.wunderground.com/api/<api_key>/conditions/pws/q/pws:KILCHICA173.json
var ClockColorDay = '#000000'; // Daytime color of some time/date parts.
var ClockColorNight = '#FFFFFF'; // Nighttime color of some mtime/date parts.
// Quick B&W: var ClockShadows = new Array('000000', '333333', '555555', '777777', '999999', 'BBBBBB', 'DDDDDD', 'FFFFFF', 'FFFFFF', 'FFFFFF'); // Sequence of hex characters, each later expanded to a #hhhhhh shade. Formerly 03579BDFFF (shorter 048CF)
// Simple rainbow: var ClockShadows = new Array('9400D3', '4B0082', '0000FF', '00FF00', 'FFFF00', 'FF7F00', 'FF0000');
var ClockShadows = new Array('C0F5F9','D2FCEE','E3FEE0','F1FBCF','FAF2BC','FEE5A9','FDD599','F6C28C','EAAF84','DA9E81','C89083','B6868B','A48198','9482A8','8988BA','8293CD','81A2DF','85B4ED'); // Pastel tones.
var ClockOpacity = new Array( 0.4, 0.5, 0.6, 0.8, 0.9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
var ClockUpdDur = Math.floor(1000/ClockShadows.length);
var ForecastColor = '#EEEEEE'; // Forecast text color.
var WeatherForecastDur = 19*60*1000; // Update forecast every 42 minutes to minimize API calls.
var WeatherCurrentDur = 10*60*1000; // Update current every 10 minutes to minimize API calls.
var RadarURLsrc = "https://radar.weather.gov/ridge/lite/N0R/LOT_loop.gif"; // XXX_loop: LOT=Chicago(down since 2017.03), ILX=Springfield
var WeatherShadow = " text-shadow:-2px 2px 0px #000000;"
var MoonDiam = 1/6; // Relative size of the displayed moon.
var WeatherCurrentHgt = 0.13;
var WeatherForecastHgt = 0.08;
var FloodDur = 250; // Cycle time between flood color changes.
var TwisterDur = 10000; // Time between Twister spins.
// BACKGROUNDS and STYLING
var BGdata = [ // BGcode=Matched in URL. BGshow= [A]nalog [C]lock [D]ate [F]orecast [I]ntro [M]oon [R]adar [S]huffle [T]itle [W]eather [V]ocal
{ BGcode:"webcams", BGshow:"CDFIMTW", BGslides: [ // BGlink=url for more info. BGsrc=img src URL, 600-1200px wide, no extended chars. BGdesc=Displayed name. BGdur=milliseconds. BGzoom=magnification (auto-centers). BGsubdur=timer for autoinc slide. BGsub=last subframe for autoinc slide.
// 2015.04.14 { BGdesc:"Loyola, Water Tower", BGsrc:"http://www.luc.edu/webcam/schbus/schbusfull.jpg?{unqsec}", BGlink:"http://www.luc.edu/webcams/", BGdur:4000, BGzoom:1, BGsub:0, BGauth:"" },
// 2015.11.27 { BGdesc:"Wrigley Field, Clark and Addison", BGsrc:"http://wwc.instacam.com/instacamimg/CUBBY/CUBBY_l.jpg?{unqsec}", BGlink:"http://web.live.weatherbug.com/LiveCameras/1/LiveCameras.aspx?no_cookie_zip=60618&no_cookie_stat=WGNTV&no_cookie_world_stat=&zcode=z5764&camera_group=1&enlarge=1&camera_id=CUBBY&lid=CNXCC", BGdur:5000, BGzoom:1, BGsub:0, BGauth:"" },
// 2016.06.30 { BGdesc:"Wrigley, Clark and Addison", BGsrc:"http://images.earthcam.com/ec_metros/ourcams/rosensports.jpg?z={unqsec}", BGlink:"http://www.sportsworldchicago.com/fieldcam/", BGdur:2000, BGzoom:1, BGsub:0, BGauth:"" },
// 2016.09.02 { BGdesc:"Belmont Harbor", BGsrc:"http://cdn.abclocal.go.com/three/wls/webcam/Belmont_cap.jpg?{unqsec}", BGlink:"http://abc7chicago.com/weather/cams/belmont_cap/", BGdur:5000, BGzoom:1, BGsub:0, BGauth:"" },
CLIPPED...