function _cwframe() { var SwayTimer = 0; var SwayDev = 0; var SwayDir = 0.5; var MaxSway = 10; var SwayOn = true; var last_rotation = 0; var windspeed = 0; var winddirindex = 0; var windmeter_name = ''; this.WriteCanvasWindMeter = WriteCanvasWindMeter; this.ActivateUpdates = ActivateUpdates; var updateEvery = 30 * 1000; function UpdateWeatherInfo() { $.get("/getcurrentweatherinfo", function (xml) { $(xml.documentElement.childNodes).each(function() { try { if (this.nodeName.substring(0, 5) != 'time_') $('#' + this.nodeName).html(this.firstChild.data) else $('#' + this.nodeName).attr("data", this.firstChild.data); } catch(e) {}; }); temperature_trend = $(xml).find('temperature_trend').text(); temperature_trend_text = $(xml).find('temperature_trend_text').text(); pressure_trend = $(xml).find('pressure_trend').text(); pressure_trend_text = $(xml).find('pressure_trend_text').text(); windspeed = $(xml).find('windspeed').text(); winddirindex = $(xml).find('winddirectionindex').text(); if (windspeed > 0) { $('#_winddirection').html($(xml).find('winddirection').text()); $('#_windspeed').html(windspeed); } else { $('#_winddirection').html('wind'); $('#_windspeed').html('stil'); } ChangeTrendImage('temperature_trend_image', temperature_trend, temperature_trend_text); ChangeTrendImage('pressure_trend_image', pressure_trend, pressure_trend_text); SetWindMeter($(xml).find('iwinddirection').text()); } ); } function ActivateUpdates() { UpdateWeatherInfo(); setInterval(UpdateWeatherInfo, updateEvery); } function ChangeTrendImage(image, trend, trend_text) { e = document.getElementById(image); switch (trend) { case '-1': e.src = '/images/down_arrow.gif'; break; case '1': e.src = '/images/up_arrow.gif'; break; default : e.src = '/images/stable_arrow.gif'; } e.title = trend_text; } function Animate() { if (windspeed != 0) { last_rotation += SwayDev; SwayDev = 0; rotation = (winddirindex * 22.5 + 180) % 360; last_rotation += (rotation - last_rotation) / 10; drawDial(last_rotation); if (Math.abs(last_rotation - rotation) > 1) { clearTimeout(SwayTimer); AnimateTimer = setTimeout(Animate, 30) } else Sway(); } else Sway(); } function Sway() { if (SwayTimer) clearTimeout(SwayTimer); if (windspeed != 0) { if (Math.abs(SwayDev) >= MaxSway) { SwayDir = -SwayDir; SwayDev = MaxSway * ((SwayDev > 0)?1:-1); } } SwayDev += SwayDir; SwayDev %= 360; if (!SwayOn) SwayDev = 0; drawDial(last_rotation + SwayDev); if (SwayOn) SwayTimer = setTimeout(Sway, 50); } function drawDial(angle) { var windmeter = document.getElementById('windmeter'); var context = windmeter.getContext('2d'); windmeter.width = windmeter.width; // clear canvas size = windmeter.width; context.save(); context.fillStyle = "rgb(255,0,0)"; context.strokeStyle = "rgb(0,0,255)"; context.translate(size / 2, size / 2); context.rotate(angle / 180 * Math.PI); context.beginPath(); context.moveTo( 0, -size / 2 +2); context.lineTo( size / 10, size / 2 -2); context.lineTo( 0, size / 4); context.lineTo(-size / 10, size / 2 -2); context.lineTo( 0, -size / 2 +2); context.closePath(); context.stroke(); context.fill(); context.restore(); } function thisMovie(movieName) { return (navigator.appName.indexOf('Microsoft') != -1) ? document.getElementById(movieName) : document.getElementById(movieName).getElementsByTagName("embed")[0]; } function SetWindMeter(winddirection) { if (thisMovie("windmeter")) { thisMovie("windmeter").SetVariable("winddirection", winddirection); } else { Animate(); } } function WriteCanvasWindMeter(container) { $('#' + container).html(''); } } var cwframe = new _cwframe(); $(function() { if (!!document.createElement('canvas').getContext) cwframe.WriteCanvasWindMeter('flash_windmeter') else WriteFlashWindMeter('flash_windmeter'); setTimeout(cwframe.ActivateUpdates, 500); }); // De timeout is nodig voor Firefox