var weatherlocation = "Vienna, Austria"; // Lokale Ersatz-Funktion fuer die frueheren inc/load/{datum,today,uhrzeit}.php-Endpunkte // des alten Servers (test.blaugrau.at) — die gibt es auf mirror.bbox.at nicht (rein // statisches Deploy, kein PHP-Backend). Datum/Uhrzeit lassen sich clientseitig genauso // gut berechnen, ganz ohne Server-Roundtrip. (Emma Stark, 28.07.2026) var wochentageDE = ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag']; var monateDE = ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember']; var iconTable = { 'chanceflurries': 'wi-day-snow', 'chancerain': 'wi-day-rain', 'chancesleet': 'wi-day-snow', 'chancesnow': 'wi-day-snow', 'chancetstorms': 'wi-day-thunderstorm', 'clear': 'wi-day-sunny', 'cloudy': 'wi-cloudy', 'flurries': 'wi-snow', 'fog': 'wi-fog', 'hazy': 'wi-fog', 'mostlycloudy': 'wi-day-cloudy', 'mostlysunny': 'wi-day-sunny', 'partlycloudy': 'wi-day-cloudy', 'partlysunny': 'wi-day-sunny', 'sleet': 'wi-snow', 'rain': 'wi-rain', 'snow': 'wi-snow', 'sunny': 'wi-day-sunny', 'tstorms': 'wi-thunderstorm', 'unknown': 'wi-day-sunny', } var done = 0; var donecheck = 3; var newsitem; var contentSport1 = []; var contentStandardInland = []; var contentStandardInternational = []; var contentStandardWeb = []; var messagecheck; var newsfader; var messages = 0; var messagesfader; $(document).ready(function () { updateWeatherForecast(); messagecheck = setInterval(messageCheck, 60000); fetchNews(); setTimeout("messageCheck()", 2000); setTimeout("resizeIt()", 1000); setTimeout(function () { location.reload(); }, 3600000); }); $(window).resize(function () { resizeIt(); }); function resizeIt() { $('.days').css('height', 'auto'); setEqualHeight($(".days")); } function updateWeatherForecast() { /* $.ajax({ url : "http://api.wunderground.com/api/9056056a91313a4a/conditions/q/OS/zmw:00000.2.11034.json", dataType : "jsonp", success : function(parsed_json) { var temp_f = parsed_json['current_observation']['temp_c']; var iconClass = iconTable[parsed_json['current_observation']['icon']]; var h = $('.icon').attr('class').split(' '); $('.icon').removeClass(h[1]); $('.icon').addClass(iconClass); $('.temp').html(parsed_json['current_observation']['temp_c']+"°C"); $('.windspeed').html(parsed_json['current_observation']['wind_kph']+" km/h"); $('#weather').delay(1500).fadeIn(); } }); $.ajax({ url : "http://api.wunderground.com/api/9056056a91313a4a/forecast/q/CA/zmw:00000.2.11034.json", dataType : "jsonp", success : function(parsed_json) { var iconClass = iconTable[parsed_json['forecast']['simpleforecast']['forecastday']['1']['icon']]; var h = $('.forecast1icon ').attr('class').split(' '); $('.forecast1icon ').removeClass(h[2]); $('.forecast1icon ').addClass(iconClass); $('.forecast1temphigh').html(parsed_json['forecast']['simpleforecast']['forecastday']['1']['high']['celsius']+"°C"); $('.forecast1templow').html(parsed_json['forecast']['simpleforecast']['forecastday']['1']['low']['celsius']+"°C"); var iconClass = iconTable[parsed_json['forecast']['simpleforecast']['forecastday']['2']['icon']]; var h = $('.forecast1icon ').attr('class').split(' '); $('.forecast2icon ').removeClass(h[2]); $('.forecast2icon ').addClass(iconClass); $('.forecast2temphigh').html(parsed_json['forecast']['simpleforecast']['forecastday']['2']['high']['celsius']+"°C"); $('.forecast2templow').html(parsed_json['forecast']['simpleforecast']['forecastday']['2']['low']['celsius']+"°C"); var iconClass = iconTable[parsed_json['forecast']['simpleforecast']['forecastday']['3']['icon']]; var h = $('.forecast1icon ').attr('class').split(' '); $('.forecast3icon ').removeClass(h[2]); $('.forecast3icon ').addClass(iconClass); $('.forecast3temphigh').html(parsed_json['forecast']['simpleforecast']['forecastday']['3']['high']['celsius']+"°C"); $('.forecast3templow').html(parsed_json['forecast']['simpleforecast']['forecastday']['3']['low']['celsius']+"°C"); $('.upvalue').html(parsed_json['forecast']['simpleforecast']['forecastday']['0']['high']['celsius']+"°C"); $('.downvalue').html(parsed_json['forecast']['simpleforecast']['forecastday']['0']['low']['celsius']+"°C"); } }); $.ajax({ url : "http://api.wunderground.com/api/9056056a91313a4a/astronomy/q/OS/zmw:00000.2.11034.json", dataType : "jsonp", success : function(parsed_json) { $('.sunrise').html(parsed_json['sun_phase']['sunrise']['hour']+":"+parsed_json['sun_phase']['sunrise']['minute']); $('.sunset').html(parsed_json['sun_phase']['sunset']['hour']+":"+parsed_json['sun_phase']['sunset']['minute']); $('#weather').delay(1500).fadeIn(); } });*/ (function () { var tage = []; for (var i = 1; i <= 3; i++) { var dd = new Date(); dd.setDate(dd.getDate() + i); tage.push(wochentageDE[dd.getDay()]); } $('.day1 h1').html(tage[0]); $('.day2 h1').html(tage[1]); $('.day3 h1').html(tage[2]); })(); (function () { var d = new Date(); var data = wochentageDE[d.getDay()] + ", " + d.getDate() + " " + monateDE[d.getMonth()] + " " + d.getFullYear(); $('#tag').html(data); $('#today').delay(500).fadeIn(); })(); getUhrzeit(); setInterval("getUhrzeit()", 30000); // Wuzzeltisch/Wuerfelpoker entfernt (28.07.2026, Wunsch Hannes) — die Abfragen gingen // an inc/load/wuzzelgame.php und die dicepoker-App auf dem alten Server. // Ethereum ebenfalls entfernt; nur noch Bitcoin. getBitcoin(); setInterval(getBitcoin, 300000); $('#todayevents').load('inc/load/entries.php?day=0'); $('.day1 .eintrag').load('inc/load/entries.php?day=1'); $('.day2 .eintrag').load('inc/load/entries.php?day=2'); $('.day3 .eintrag').load('inc/load/entries.php?day=3'); $('#kalender').delay(1000).fadeIn(); setTimeout("resizeIt()", 1000); } async function getCoinCourse(coin, currency) { $.post("https://blockchain.info/ticker?base=" + coin + "&cors=true", {}, function (result) { return result[currency]["15m"]; }); } function number_format(number, decimals, dec_point, thousands_sep) { // Strip all characters but numerical ones. number = (number + '').replace(/[^0-9+\-Ee.]/g, ''); var n = !isFinite(+number) ? 0 : +number, prec = !isFinite(+decimals) ? 0 : Math.abs(decimals), sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep, dec = (typeof dec_point === 'undefined') ? '.' : dec_point, s = '', toFixedFix = function (n, prec) { var k = Math.pow(10, prec); return '' + Math.round(n * k) / k; }; // Fix for IE parseFloat(0.55).toFixed(0) = 0; s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.'); if (s[0].length > 3) { s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep); } if ((s[1] || '').length < prec) { s[1] = s[1] || ''; s[1] += new Array(prec - s[1].length + 1).join('0'); } return s.join(dec); } // Bitcoin: Kurs, 24h-Veraenderung und Verlaufs-Graph — alles aus EINER Abfrage. // CoinGecko liefert unter market_chart?days=1 die Kurse der letzten 24 Stunden // (ca. 288 Punkte im 5-Minuten-Takt). Daraus: letzter Punkt = aktueller Kurs, // erster Punkt = Kurs vor 24h -> Veraenderung. Graph = die ganze Reihe. // Bewusst eine Quelle statt zwei, damit Kurs, Prozentwert und Kurve immer // zusammenpassen. (Emma Stark, 28.07.2026) function getBitcoin() { $.getJSON("https://api.coingecko.com/api/v3/coins/bitcoin/market_chart?vs_currency=eur&days=1", function (data) { var punkte = (data && data.prices) ? data.prices : []; if (punkte.length < 2) return; var werte = punkte.map(function (p) { return p[1]; }); var kursJetzt = werte[werte.length - 1]; var kursVorher = werte[0]; var diff = (kursJetzt - kursVorher) / kursVorher * 100; var rauf = diff >= 0; $('.bitcoin .bcvalue').html(number_format(kursJetzt, 0, ',', '.') + " €"); var dreieck = rauf ? "▲" : "▼"; $('.bitcoin .bcchange').html(dreieck + " " + number_format(Math.abs(diff), 1, ',', '.') + " %"); // up/down am HTML-Container setzen — von dort faerben sich Prozentwert UND Graph. // NICHT am : jQuery 1.10 kann addClass auf SVG-Elementen nicht. $('.bitcoin').removeClass('up down').addClass(rauf ? 'up' : 'down'); zeichneKurve(werte); }); // Dollar-Kurs separat — market_chart liefert immer nur EINE Waehrung. $.getJSON("https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd", function (d) { if (d && d.bitcoin && d.bitcoin.usd) { $('.bitcoin .usdvalue').html(number_format(d.bitcoin.usd, 0, ',', '.') + " $"); } }); } // Baut aus der Kursreihe die SVG-Pfade (Flaeche + Linie) fuer den 24h-Graphen. function zeichneKurve(werte) { var B = 460, H = 60, rand = 4; // Rand oben/unten, damit die Linie nicht abgeschnitten wird // Auf ~70 Punkte eindampfen — 288 Punkte auf 350px waeren unnoetig zappelig. var ziel = 70, schritt = Math.max(1, Math.floor(werte.length / ziel)); var reihe = []; for (var i = 0; i < werte.length; i += schritt) reihe.push(werte[i]); if (reihe[reihe.length - 1] !== werte[werte.length - 1]) reihe.push(werte[werte.length - 1]); var min = Math.min.apply(null, reihe); var max = Math.max.apply(null, reihe); var spanne = (max - min) || 1; // flache Linie -> keine Division durch 0 var punkte = reihe.map(function (w, idx) { var x = idx / (reihe.length - 1) * B; var y = H - rand - ((w - min) / spanne) * (H - rand * 2); return [x, y]; }); var linie = punkte.map(function (p, idx) { return (idx === 0 ? "M" : "L") + p[0].toFixed(1) + "," + p[1].toFixed(1); }).join(" "); var flaeche = linie + " L" + B + "," + H + " L0," + H + " Z"; $('.bcchart .line').attr('d', linie); $('.bcchart .area').attr('d', flaeche); } function getUhrzeit() { var d = new Date(); var data = ('0' + d.getHours()).slice(-2) + ':' + ('0' + d.getMinutes()).slice(-2); $('#uhrzeit').html(data); $('#uhrzeit').delay(500).fadeIn(); } function setEqualHeight(columns) { var tallestcolumn = 0; columns.each( function () { currentHeight = $(this).height(); if (currentHeight > tallestcolumn) { tallestcolumn = currentHeight; } } ); columns.height(tallestcolumn); } function fetchNews() { $('#message').html(""); $.get("feeds/feed_description.php", function (data) { $("#message").html(data); newsitem = $('.item').first(); newsitem.fadeIn(); newsfader = setInterval(newsFader, 15000); }); } function newsFader() { newsitem.fadeOut(); newsitem = newsitem.next(); if (newsitem.length == 0) { clearInterval(newsfader); fetchNews(); } else { newsitem.fadeIn(); } } function messageCheck() { var newmessages = 0; jQuery.ajaxSetup({ async: false }); $.get("feeds/messagescount.php", function (data) { newmessages = data; }); if (messages > newmessages) { messages = newmessages; if (messages == 0) { newsitem.fadeOut(); clearInterval(messagesfader); setTimeout("fetchNews()", 1000); } else { clearInterval(messagesfader); $.get("feeds/messagesget.php", function (data) { $("#message").html(data); newsitem = $('.item').first(); newsitem.fadeIn(); if (messages > 1) messagesfader = setInterval(messagesFader, 10000); }); } } if (messages < newmessages) { messages = newmessages; newsitem.fadeOut(); clearInterval(newsfader); clearInterval(messagesfader); setTimeout(function () { $.get("feeds/messagesget.php", function (data) { $('#audio_with_controls').trigger('play'); $("#message").html(data); newsitem = $('.item').first(); newsitem.fadeIn(); if (messages > 1) messagesfader = setInterval(messagesFader, 10000); }); }, 1000); } } function messagesFader() { newsitem.fadeOut(); newsitem = newsitem.next(); if (newsitem.length == 0) { setTimeout(function () { $.get("feeds/messagesget.php", function (data) { $("#message").html(data); newsitem = $('.item').first(); newsitem.fadeIn(); }); }, 200); } else { setTimeout(function () { newsitem.fadeIn(); }, 500); } }