Hi garry I hope you can help me. the forecast from yrno no longer works. attached the yrno.php Thanks. Kalli
-- You received this message because you are subscribed to the Google Groups "weewx-user" group. To unsubscribe from this group and stop receiving emails from it, send an email to weewx-user+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/weewx-user/803a6c26-ed59-476c-8d6d-6ffc13f4a3c9n%40googlegroups.com.
<?php if (isset($argv[1])) { $city = $argv[1]; $url = "https://www.yr.no/Germany/North Rhine-Westphalia/Düsseldorf District/Krefeld "/forecast.xml"; $xml = simplexml_load_string(file_get_contents($url)); $json = json_encode($xml, TRUE); echo $json; } if (isset($_GET['url'])) { $url = $_GET['url']; $xml = simplexml_load_string(file_get_contents($url)); $json = json_encode($xml, TRUE); echo $json; }
// This file is part of iWDL // // iWDL is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // iWDL is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with iWDL. If not, see <http://www.gnu.org/licenses/>. // // Main javascript file // By Sietse Visser (sie...@sietse.nl) // Version 1.3 // // // The clientraw fieldlist and the unit type // var cr_fields = new Array; cr_fields[ 0] = new Array("Header" , ""); cr_fields[ 1] = new Array("Avg Speed" , "kn"); cr_fields[ 2] = new Array("Gusts" , "kn"); cr_fields[ 3] = new Array("WindDir" , "deg"); cr_fields[ 4] = new Array("Out Temp" , "c"); cr_fields[ 5] = new Array("Out Hum" , "%"); cr_fields[ 6] = new Array("Baro" , "hpa"); cr_fields[ 7] = new Array("RainDay" , "mm"); cr_fields[ 8] = new Array("RainMon" , "mm"); cr_fields[ 9] = new Array("RainYear" , "mm"); cr_fields[ 10] = new Array("RainRate" , "mm"); cr_fields[ 11] = new Array("MaxRainRate" , "mm"); cr_fields[ 12] = new Array("In Temp" , "c"); cr_fields[ 13] = new Array("In Hum" , "%"); cr_fields[ 14] = new Array("Soil Temp" , "c"); cr_fields[ 15] = new Array("Forecast Icon" , "Icon 1"); cr_fields[ 16] = new Array("WMR968 Extra Temp" , "c"); cr_fields[ 17] = new Array("WMR968 Extra Hum" , "%"); cr_fields[ 18] = new Array("WMR968 Extra Sensor" , "Number"); cr_fields[ 19] = new Array("Yesterday Rain" , "mm"); cr_fields[ 20] = new Array("Extra Temp Sensor 1" , "c"); cr_fields[ 21] = new Array("Extra Temp Sensor 2" , "c"); cr_fields[ 22] = new Array("Extra Temp Sensor 3" , "c"); cr_fields[ 23] = new Array("Extra Temp Sensor 4" , "c"); cr_fields[ 24] = new Array("Extra Temp Sensor 5" , "c"); cr_fields[ 25] = new Array("Extra Temp Sensor 6" , "c"); cr_fields[ 26] = new Array("Extra Hum Sensor 1" , "%"); cr_fields[ 27] = new Array("Extra Hum Sensor 2" , "%"); cr_fields[ 28] = new Array("Extra Hum Sensor 3" , "%"); cr_fields[ 29] = new Array("Hour" , "Time"); cr_fields[ 30] = new Array("Minute" , "Time"); cr_fields[ 31] = new Array("Seconds" , "Time"); cr_fields[ 32] = new Array("Station Name" , ""); cr_fields[ 33] = new Array("Dallas Lightning Count" , "Number"); cr_fields[ 34] = new Array("Solar Reading" , "Number"); cr_fields[ 35] = new Array("Day" , "Time"); cr_fields[ 36] = new Array("Month" , "Time"); cr_fields[ 37] = new Array("WMR968 Battery 1" , "%"); cr_fields[ 38] = new Array("WMR968 Battery 2" , "%"); cr_fields[ 39] = new Array("WMR968 Battery 3" , "%"); cr_fields[ 40] = new Array("WMR968 Battery 4" , "%"); cr_fields[ 41] = new Array("WMR968 Battery 5" , "%"); cr_fields[ 42] = new Array("WMR968 Battery 6" , "%"); cr_fields[ 43] = new Array("WMR968 Battery 7" , "%"); cr_fields[ 44] = new Array("WindChill" , "c"); cr_fields[ 45] = new Array("Humidex" , "c"); cr_fields[ 46] = new Array("Max Day Temp" , "c"); cr_fields[ 47] = new Array("Min Day Temp" , "c"); cr_fields[ 48] = new Array("Icon Type" , "Icon 2"); cr_fields[ 49] = new Array("Weather Desc" , ""); cr_fields[ 50] = new Array("Baro Trend" , "hpa"); cr_fields[ 51] = new Array("Windspeed Hour 1" , "kn"); cr_fields[ 52] = new Array("Windspeed Hour 2" , "kn"); cr_fields[ 53] = new Array("Windspeed Hour 3" , "kn"); cr_fields[ 54] = new Array("Windspeed Hour 4" , "kn"); cr_fields[ 55] = new Array("Windspeed Hour 5" , "kn"); cr_fields[ 56] = new Array("Windspeed Hour 6" , "kn"); cr_fields[ 57] = new Array("Windspeed Hour 7" , "kn"); cr_fields[ 58] = new Array("Windspeed Hour 8" , "kn"); cr_fields[ 59] = new Array("Windspeed Hour 9" , "kn"); cr_fields[ 60] = new Array("Windspeed Hour 10" , "kn"); cr_fields[ 61] = new Array("Windspeed Hour 11" , "kn"); cr_fields[ 62] = new Array("Windspeed Hour 12" , "kn"); cr_fields[ 63] = new Array("Windspeed Hour 13" , "kn"); cr_fields[ 64] = new Array("Windspeed Hour 14" , "kn"); cr_fields[ 65] = new Array("Windspeed Hour 15" , "kn"); cr_fields[ 66] = new Array("Windspeed Hour 16" , "kn"); cr_fields[ 67] = new Array("Windspeed Hour 17" , "kn"); cr_fields[ 68] = new Array("Windspeed Hour 18" , "kn"); cr_fields[ 69] = new Array("Windspeed Hour 19" , "kn"); cr_fields[ 70] = new Array("Windspeed Hour 20" , "kn"); cr_fields[ 71] = new Array("Max Wind Gust" , "kn"); cr_fields[ 72] = new Array("DewPoint Temp" , "c"); cr_fields[ 73] = new Array("Cloud Height" , "ft"); cr_fields[ 74] = new Array("Date" , ""); cr_fields[ 75] = new Array("Max Humidex" , "c"); cr_fields[ 76] = new Array("Min Humidex" , "c"); cr_fields[ 77] = new Array("Max Windchill" , "c"); cr_fields[ 78] = new Array("Min Windchill" , "c"); cr_fields[ 79] = new Array("UV" , " "); cr_fields[ 80] = new Array("Hr Windspeed 1" , "kn"); cr_fields[ 81] = new Array("Hr Windspeed 2" , "kn"); cr_fields[ 82] = new Array("Hr Windspeed 3" , "kn"); cr_fields[ 83] = new Array("Hr Windspeed 4" , "kn"); cr_fields[ 84] = new Array("Hr Windspeed 5" , "kn"); cr_fields[ 85] = new Array("Hr Windspeed 6" , "kn"); cr_fields[ 86] = new Array("Hr Windspeed 7" , "kn"); cr_fields[ 87] = new Array("Hr Windspeed 8" , "kn"); cr_fields[ 88] = new Array("Hr Windspeed 9" , "kn"); cr_fields[ 89] = new Array("Hr Windspeed 10" , "kn"); cr_fields[ 90] = new Array("Hr Temp 1" , "c"); cr_fields[ 91] = new Array("Hr Temp 2" , "c"); cr_fields[ 92] = new Array("Hr Temp 3" , "c"); cr_fields[ 93] = new Array("Hr Temp 4" , "c"); cr_fields[ 94] = new Array("Hr Temp 5" , "c"); cr_fields[ 95] = new Array("Hr Temp 6" , "c"); cr_fields[ 96] = new Array("Hr Temp 7" , "c"); cr_fields[ 97] = new Array("Hr Temp 8" , "c"); cr_fields[ 98] = new Array("Hr Temp 9" , "c"); cr_fields[ 99] = new Array("Hr Temp 10" , "c"); cr_fields[100] = new Array("Hr Rain 1" , "mm"); cr_fields[101] = new Array("Hr Rain 2" , "mm"); cr_fields[102] = new Array("Hr Rain 3" , "mm"); cr_fields[103] = new Array("Hr Rain 4" , "mm"); cr_fields[104] = new Array("Hr Rain 5" , "mm"); cr_fields[105] = new Array("Hr Rain 6" , "mm"); cr_fields[106] = new Array("Hr Rain 7" , "mm"); cr_fields[107] = new Array("Hr Rain 8" , "mm"); cr_fields[108] = new Array("Hr Rain 9" , "mm"); cr_fields[109] = new Array("Hr Rain 10" , "mm"); cr_fields[110] = new Array("Max Heat Index" , "c"); cr_fields[111] = new Array("Min Heat Index" , "c"); cr_fields[112] = new Array("Heat Index" , "c"); cr_fields[113] = new Array("Max Avg Speed" , "kn"); cr_fields[114] = new Array("Lightning Last Min" , "Number"); cr_fields[115] = new Array("Lightning Last Time Hour" , "Time"); cr_fields[116] = new Array("Lightning Last Time Min" , "Time"); cr_fields[117] = new Array("Wind Avg Dir" , "deg"); cr_fields[118] = new Array("Nexstorm Dist" , ""); cr_fields[119] = new Array("NextStorm Bearing" , "deg"); cr_fields[120] = new Array("Extra Temp Sensor 7" , "c"); cr_fields[121] = new Array("Extra Temp Sensor 8" , "c"); cr_fields[122] = new Array("Extra Hum Sensor 4" , "%"); cr_fields[123] = new Array("Extra Hum Sensor 5" , "%"); cr_fields[124] = new Array("Extra Hum Sensor 6" , "%"); cr_fields[125] = new Array("Extra Hum Sensor 7" , "%"); cr_fields[126] = new Array("Extra Hum Sensor 8" , "%"); cr_fields[127] = new Array("SolarWM" , "W/m²"); cr_fields[128] = new Array("Max Indoor Temp" , "c"); cr_fields[129] = new Array("Min Indoor Temp" , "c"); cr_fields[130] = new Array("Apparent Temp" , "c"); cr_fields[131] = new Array("Max Baro" , "hpa"); cr_fields[132] = new Array("Min Baro" , "hpa"); cr_fields[133] = new Array("Max Gust" , "kn"); cr_fields[134] = new Array("Max Gust Last Hour Time" , "Time"); cr_fields[135] = new Array("Max Gust Today Time" , "Time"); cr_fields[136] = new Array("Max Apparent Temp" , "c"); cr_fields[137] = new Array("Min Apparent Temp" , "c"); cr_fields[138] = new Array("Max Dewpt" , "c"); cr_fields[139] = new Array("Min Dewpt" , "c"); cr_fields[140] = new Array("Max Gust In Lst Min" , "kn"); cr_fields[141] = new Array("Current Year" , "Time"); cr_fields[142] = new Array("THSWS" , ""); cr_fields[143] = new Array("Temp Trend (Logic)" , "bool"); cr_fields[144] = new Array("Humidity Trend (Logic)" , "bool"); cr_fields[145] = new Array("Humidex Trend (Logic)" , "bool"); cr_fields[146] = new Array("Hr Wind Dir 1" , "deg"); cr_fields[147] = new Array("Hr Wind Dir 2" , "deg"); cr_fields[148] = new Array("Hr Wind Dir 3" , "deg"); cr_fields[149] = new Array("Hr Wind Dir 4" , "deg"); cr_fields[150] = new Array("Hr Wind Dir 5" , "deg"); cr_fields[151] = new Array("Hr Wind Dir 6" , "deg"); cr_fields[152] = new Array("Hr Wind Dir 7" , "deg"); cr_fields[153] = new Array("Hr Wind Dir 8" , "deg"); cr_fields[154] = new Array("Hr Wind Dir 9" , "deg"); cr_fields[155] = new Array("Hr Wind Dir 10" , "deg"); cr_fields[156] = new Array("Leaf Wetness" , "c"); cr_fields[157] = new Array("Soil moisture" , "c"); cr_fields[158] = new Array("10 Min Avg Wind Speed" , "kn"); cr_fields[159] = new Array("Wet bulb temperature" , "c"); cr_fields[160] = new Array("Latitude (- = S Hemispher)" , ""); cr_fields[161] = new Array("Longitude (- EAST of GMT)" , ""); cr_fields[162] = new Array("9am reset rain total" , "mm"); cr_fields[163] = new Array("Daily Hi Humidity" , "%"); cr_fields[164] = new Array("Daily Low Humidity" , "%"); cr_fields[165] = new Array("Midnight reset rain total" , "mm"); cr_fields[167] = new Array("Record End (WD Ver)" , ""); // Weather icon numbers var wth_icons = new Array; wth_icons[ 0] = "Sunny"; wth_icons[ 1] = "Clear Night"; wth_icons[ 2] = "Cloudy"; wth_icons[ 3] = "Cloudy"; wth_icons[ 4] = "Cloudy Night"; wth_icons[ 5] = "Dry Clear"; wth_icons[ 6] = "Fog"; wth_icons[ 7] = "Hazy"; wth_icons[ 8] = "Heavy Rain"; wth_icons[ 9] = "Mainly Fine"; wth_icons[10] = "Misty"; wth_icons[11] = "Night Fog"; wth_icons[12] = "Night Heavy Rain"; wth_icons[13] = "Night Overcast"; wth_icons[14] = "Night Rain"; wth_icons[15] = "Night Showers"; wth_icons[16] = "Night Snow"; wth_icons[17] = "Night Thunder"; wth_icons[18] = "Overcast"; wth_icons[19] = "Partly Cloudy"; wth_icons[20] = "Rain"; wth_icons[21] = "Hard Rain"; wth_icons[22] = "Showers"; wth_icons[23] = "Sleet"; wth_icons[24] = "Sleet Showers"; wth_icons[25] = "Snowing"; wth_icons[26] = "Snow Melt"; wth_icons[27] = "Snow Showers"; wth_icons[28] = "Sunny"; wth_icons[29] = "Thunder Showers"; wth_icons[30] = "Thunder Showers"; wth_icons[31] = "Thunderstorms"; wth_icons[32] = "Tornado Warning"; wth_icons[33] = "Windy"; wth_icons[34] = "Stopped Raining"; wth_icons[35] = "Windy Rain"; // where does hourly graph data start, en how many are there var ghsettings = new Array; ghsettings["wind_speed"] = [[ 1, 60 ]]; ghsettings["wind_gust"] = [[ 61, 60 ]]; ghsettings["wind_dir"] = [[ 121, 60 ]]; ghsettings["temp_out"] = [[ 181, 60 ]]; ghsettings["humid_out"] = [[ 241, 60 ]]; ghsettings["baro"] = [[ 301, 60 ]]; ghsettings["rain"] = [[ 361, 60 ]]; ghsettings["solar_wm"] = [[ 421, 60 ]]; // where does daily graph data start, en how many are there var gdsettings = new Array; gdsettings["wind_speed"] = [[ 1, 20 ], [ 562, 4]]; gdsettings["temp_out"] = [[ 21, 20 ], [ 566, 4]]; gdsettings["rain"] = [[ 41, 20 ], [ 570, 4]]; gdsettings["baro"] = [[ 439, 20 ], [ 574, 4]]; gdsettings["timestamps"] = [[ 459, 20 ], [ 578, 4]]; gdsettings["solar_wm"] = [[ 491, 20 ], [ 582, 4]]; gdsettings["solar_uv"] = [[ 511, 20 ], [ 586, 4]]; gdsettings["wind_dir"] = [[ 536, 20 ], [ 590, 4]]; gdsettings["humid_out"] = [[ 611, 20 ], [ 631, 4]]; gdsettings["temp_in"] = [[ 636, 20 ], [ 656, 4]]; //where does weekly graph data start, en how many are there var gwsettings = new Array; gwsettings["temp_out"] = [[ 233, 28 ]]; gwsettings["baro"] = [[ 261, 28 ]]; gwsettings["humid_out"] = [[ 289, 28 ]]; gwsettings["wind_dir"] = [[ 317, 28 ]]; gwsettings["wind_speed"] = [[ 345, 28 ]]; gwsettings["solar_wm"] = [[ 373, 28 ]]; gwsettings["solar_uv"] = [[ 401, 28 ]]; //where does monthly graph data start, en how many are there var gmsettings = new Array; gmsettings["temp_high"] = [[ 1, 31 ]]; gmsettings["temp_low"] = [[ 32, 31 ]]; gmsettings["rain"] = [[ 63, 31 ]]; gmsettings["baro"] = [[ 94, 31 ]]; gmsettings["wind_speed"] = [[ 125, 31 ]]; gmsettings["wind_dir"] = [[ 156, 31 ]]; gmsettings["humid_out"] = [[ 199, 31 ]]; gmsettings["rain_year"] = [[ 187, 12 ]]; // Graph names mapped to a clientraw field var grtocr = new Array; grtocr["wind_speed"] = 1; grtocr["wind_gust"] = 2; grtocr["wind_dir"] = 3; grtocr["temp_out"] = 4; grtocr["humid_out"] = 5; grtocr["baro"] = 6; grtocr["rain"] = 7; grtocr["solar_wm"] = 127; grtocr["solar_uv"] = 79; grtocr["temp_in"] = 12; grtocr["temp_high"] = 46; grtocr["temp_low"] = 47; grtocr["rain_year"] = 7; // What are the unit names var unitnames = new Array; unitnames["c"] = "°C"; unitnames["f"] = "°F"; unitnames["kn"] = "Kn"; unitnames["mph"] = "mph"; unitnames["kmh"] = "km/h"; unitnames["ms"] = "m/s"; unitnames["deg"] = "°"; unitnames["abbr"] = " "; unitnames["mm"] = "mm"; unitnames["in"] = "in"; unitnames["hpa"] = "hPa"; unitnames["mb"] = "mb"; unitnames["hg"] = "Hg"; unitnames["ft"] = "Ft"; unitnames["m"] = "m"; // For which field in clientraw do we have which graphs? var crtogr = new Array; crtogr[ 1] = [ [ "wind_speed" ], [ "wind_speed" ], [ "wind_speed" ], [ "wind_speed" ] ]; crtogr[ 2] = [ [ "wind_gust" ], [ ], [ ], [ ] ]; crtogr[ 3] = [ [ "wind_dir" ], [ "wind_dir" ], [ "wind_dir" ], [ "wind_dir" ] ]; crtogr[ 4] = [ [ "temp_out" ], [ "temp_out" ], [ "temp_out" ], [ "temp_high", "temp_low" ] ]; crtogr[ 5] = [ [ "humid_out" ], [ "humid_out" ], [ "humid_out" ], [ "humid_out" ] ]; crtogr[ 6] = [ [ "baro" ], [ "baro" ], [ "baro" ], [ "baro" ] ]; crtogr[ 7] = [ [ "rain" ], [ "rain" ], [ ], [ "rain" ] ]; crtogr[ 12] = [ [ ], [ "temp_in" ], [ ], [ ] ]; crtogr[ 79] = [ [ ], [ "solar_uv" ], [ "solar_uv" ], [ ] ]; crtogr[127] = [ [ "solar_wm" ], [ "solar_wm" ], [ "solar_wm" ], [ ] ]; var records = new Array; // order is clientraw field, month, ytd, alltime records["temp_high"] = [ 4, 61, 187, 313 ]; records["temp_low"] = [ 4, 67, 193, 319 ]; records["wind_avg"] = [ 1, 109, 235, 361 ]; records["wind_gust"] = [ 2, 73, 199, 325 ]; records["rain_rate"] = [ 10, 79, 205, 331 ]; records["daily_rain"] = [ 7, 97, 223, 349 ]; records["hour_rain"] = [ 7, 103, 229, 355 ]; records["baro_low"] = [ 6, 85, 211, 337 ]; records["baro_high"] = [ 6, 91, 217, 343 ]; records["soil_high"] = [ 14, 121, 247, 373 ]; records["soil_low"] = [ 14, 127, 253, 379 ]; records["grass_high"] = [ 4, 181, 307, 433 ]; records["windchill"] = [ 44, 133, 259, 385 ]; records["heatindex"] = [ 112, 175, 301, 427 ]; records["warmest_day"] = [ 4, 151, 277, 403 ]; records["coldest_night"] = [ 4, 157, 283, 409 ]; records["coldest_day"] = [ 4, 163, 289, 415 ]; records["warmest_night"] = [ 4, 169, 295, 421 ]; records["solar"] = [ 127, 660, 672, 684 ]; records["uv"] = [ 79, 666, 678, 690 ]; var record_disp = new Array; record_disp["temp"] = [ "temp_high", "temp_low", "warmest_day", "coldest_day", "warmest_night", "coldest_night" ]; record_disp["wind"] = [ "wind_avg", "wind_gust" ]; record_disp["rain"] = [ "rain_rate", "hour_rain", "daily_rain" ]; record_disp["baro"] = [ "baro_high", "baro_low" ]; record_disp["soil"] = [ "soil_high", "soil_low" ]; record_disp["grass"] = [ "grass_high" ]; record_disp["solar"] = [ "solar" ]; record_disp["uv"] = [ "uv" ]; var config = 'iwdl_settings.js' var settings = new Array; var texts = new Array; var cr_fieldnames = new Array(); var cr, crh, cre, crd; var jQT; var orientation = '0'; var station = 'Weather station'; var lang_loaded = ''; function sprintf () { // Return a formatted string // // version: 1008.1718 // discuss at: http://phpjs.org/functions/sprintf // + original by: Ash Searle (http://hexmen.com/blog/) // + namespaced by: Michael White (http://getsprink.com) // + tweaked by: Jack // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // + input by: Paulo Freitas // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // + input by: Brett Zamir (http://brett-zamir.me) // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // * example 1: sprintf("%01.2f", 123.1); // * returns 1: 123.10 // * example 2: sprintf("[%10s]", 'monkey'); // * returns 2: '[ monkey]' // * example 3: sprintf("[%'#10s]", 'monkey'); // * returns 3: '[####monkey]' var regex = /%%|%(\d+\$)?([-+\'#0 ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([scboxXuidfegEG])/g; var a = arguments, i = 0, format = a[i++]; // pad() var pad = function (str, len, chr, leftJustify) { if (!chr) {chr = ' ';} var padding = (str.length >= len) ? '' : Array(1 + len - str.length >>> 0).join(chr); return leftJustify ? str + padding : padding + str; }; // justify() var justify = function (value, prefix, leftJustify, minWidth, zeroPad, customPadChar) { var diff = minWidth - value.length; if (diff > 0) { if (leftJustify || !zeroPad) { value = pad(value, minWidth, customPadChar, leftJustify); } else { value = value.slice(0, prefix.length) + pad('', diff, '0', true) + value.slice(prefix.length); } } return value; }; // formatBaseX() var formatBaseX = function (value, base, prefix, leftJustify, minWidth, precision, zeroPad) { // Note: casts negative numbers to positive ones var number = value >>> 0; prefix = prefix && number && {'2': '0b', '8': '0', '16': '0x'}[base] || ''; value = prefix + pad(number.toString(base), precision || 0, '0', false); return justify(value, prefix, leftJustify, minWidth, zeroPad); }; // formatString() var formatString = function (value, leftJustify, minWidth, precision, zeroPad, customPadChar) { if (precision != null) { value = value.slice(0, precision); } return justify(value, '', leftJustify, minWidth, zeroPad, customPadChar); }; // doFormat() var doFormat = function (substring, valueIndex, flags, minWidth, _, precision, type) { var number; var prefix; var method; var textTransform; var value; if (substring == '%%') {return '%';} // parse flags var leftJustify = false, positivePrefix = '', zeroPad = false, prefixBaseX = false, customPadChar = ' '; var flagsl = flags.length; for (var j = 0; flags && j < flagsl; j++) { switch (flags.charAt(j)) { case ' ': positivePrefix = ' '; break; case '+': positivePrefix = '+'; break; case '-': leftJustify = true; break; case "'": customPadChar = flags.charAt(j+1); break; case '0': zeroPad = true; break; case '#': prefixBaseX = true; break; } } // parameters may be null, undefined, empty-string or real valued // we want to ignore null, undefined and empty-string values if (!minWidth) { minWidth = 0; } else if (minWidth == '*') { minWidth = +a[i++]; } else if (minWidth.charAt(0) == '*') { minWidth = +a[minWidth.slice(1, -1)]; } else { minWidth = +minWidth; } // Note: undocumented perl feature: if (minWidth < 0) { minWidth = -minWidth; leftJustify = true; } if (!isFinite(minWidth)) { throw new Error('sprintf: (minimum-)width must be finite'); } if (!precision) { precision = 'fFeE'.indexOf(type) > -1 ? 6 : (type == 'd') ? 0 : undefined; } else if (precision == '*') { precision = +a[i++]; } else if (precision.charAt(0) == '*') { precision = +a[precision.slice(1, -1)]; } else { precision = +precision; } // grab value using valueIndex if required? value = valueIndex ? a[valueIndex.slice(0, -1)] : a[i++]; switch (type) { case 's': return formatString(String(value), leftJustify, minWidth, precision, zeroPad, customPadChar); case 'c': return formatString(String.fromCharCode(+value), leftJustify, minWidth, precision, zeroPad); case 'b': return formatBaseX(value, 2, prefixBaseX, leftJustify, minWidth, precision, zeroPad); case 'o': return formatBaseX(value, 8, prefixBaseX, leftJustify, minWidth, precision, zeroPad); case 'x': return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad); case 'X': return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad).toUpperCase(); case 'u': return formatBaseX(value, 10, prefixBaseX, leftJustify, minWidth, precision, zeroPad); case 'i': case 'd': number = parseInt(+value, 10); prefix = number < 0 ? '-' : positivePrefix; value = prefix + pad(String(Math.abs(number)), precision, '0', false); return justify(value, prefix, leftJustify, minWidth, zeroPad); case 'e': case 'E': case 'f': case 'F': case 'g': case 'G': number = +value; prefix = number < 0 ? '-' : positivePrefix; method = ['toExponential', 'toFixed', 'toPrecision']['efg'.indexOf(type.toLowerCase())]; textTransform = ['toString', 'toUpperCase']['eEfFgG'.indexOf(type) % 2]; value = prefix + Math.abs(number)[method](precision); return justify(value, prefix, leftJustify, minWidth, zeroPad)[textTransform](); default: return substring; } }; return format.replace(regex, doFormat); } function crAsyncDone(data, status) { var now = new Date(); now = now.getTime(); cr = data.split(" "); getClientRaw.crlast = now; updateiWdl(); } function AsyncClientRaw() { var now = new Date(); now = now.getTime(); if (typeof getClientRaw.crlast == 'undefined') getClientRaw.crlast = 0; // Don't fetch it more often than once every 5 secs if (getClientRaw.crlast + 5000 < now) { $.ajax({ url: settings["clientraw_dir"] + "clientraw.txt", async: true, success: crAsyncDone }); } } function makeSyncRequest(url) { var data = $.ajax({ url: url, async: false }).responseText; return data; } function getForecast() { // if ($("#fc").html() != "") return; var now = new Date(); now = now.getTime(); if (typeof getForecast.last_update == 'undefined') getForecast.last_update = 0; if (getForecast.last_update + 3600000 > now) return; getForecast.last_update = now; if (settings["forecast"] == "yr.no") { // url='https://www.yr.no/sted/' + encodeURI(settings["yr.no"]) + '/forecast.xml'; // url += "?callback=?&t=" + now; // $.getJSON(url, function(fc) { var fc = JSON.parse(makeSyncRequest("yrno.php?url=" + 'https://www.yr.no/sted/' + encodeURI(settings["yr.no"]) + '/forecast.xml')); var i = 0; var date = ''; var str; while (i < 30 && fc.forecast.tabular.time[i]) { var t = fc.forecast.tabular.time[i]; var dt = t['@attributes'].from.replace(/T.*/, ""); var stime = t['@attributes'].from.replace(/.*T/, ""); var etime = t['@attributes'].to.replace(/.*T/, ""); var p = t['@attributes'].period; var sym = t.symbol['@attributes'].number; if (sym.length == 1) sym = '0' + sym; var c_temp = check_convert(t.temperature['@attributes'].value, 'c'); var c_wind = check_convert(roundNumber(t.windSpeed['@attributes'].mps / 0.514444, 1), 'kn'); var c_wdir = check_convert(t.windDirection['@attributes'].deg, 'deg'); var c_baro = check_convert(t.pressure['@attributes'].value, 'hpa'); if (i == 0) str = "<table class='w100'><tr><td></td><td></td><td class='iwdl center bold'>" + c_temp.units + "</td><td class='iwdl center bold'>" + c_wdir.units + "</td><td class='iwdl center bopld'>" + c_wind.units + "</td><td class='iwdl center bold'>" + c_baro.units + "</td><td>"; stime = stime.replace(/:.*$/, ""); etime = etime.replace(/:.*$/, ""); // Use am/pm if requested if (settings["time"] == "12") { hour = stime.replace(/^0/, ''); if (hour > 12) { hour -= 12; stime = sprintf("%02dp", hour); } else { if (hour == 12) stime += "p"; else stime += "a"; } hour = etime.replace(/^0/, ''); if (hour > 12) { hour -= 12; etime = sprintf("%02dp", hour); } else { if (hour == 12) etime += "p"; else etime += "a"; } } if (date != dt) { var ndate = dt.replace(/-0/, "-"); var sp_date = ndate.split(/-/); var elms = ndate.split(/[- :]/); var jsdt = new Date(); jsdt.setFullYear(parseInt(elms[0])); jsdt.setMonth(parseInt(elms[1].replace(/^0/, "")-1)); jsdt.setDate(parseInt(elms[2].replace(/^0/, ""))); var day = '?'; switch (jsdt.getDay()) { case 0: day = texts['Sunday']; break; case 1: day = texts['Monday']; break; case 2: day = texts['Tuesday']; break; case 3: day = texts['Wednesday']; break; case 4: day = texts['Thursday']; break; case 5: day = texts['Friday']; break; case 6: day = texts['Saturday']; break; } // Other date format requested? var disp_date = ''; var date_elms = dt.split("-"); switch (settings["date"]) { case "y/m/d": disp_date = date_elms[0] + "/" + date_elms[1] + "/" + date_elms[2]; break; case "d-m-y": disp_date = date_elms[2] + "-" + date_elms[1] + "-" + date_elms[0]; break; case "d/m/y": disp_date = date_elms[2] + "/" + date_elms[1] + "/" + date_elms[0]; break; case "m-d-y": disp_date = date_elms[1] + "-" + date_elms[2] + "-" + date_elms[0]; break; case "m/d/y": disp_date = date_elms[1] + "/" + date_elms[2] + "/" + date_elms[0]; break; default: disp_date = dt; break; } var daydate = disp_date + ' ' + day; switch (settings["date_day"]) { case "day": daydate = day; break; case "date": daydate = disp_date; break; case "day-date": daydate = day + ' ' + disp_date; break; case "date-day": daydate = disp_date + ' ' + day; break; } str += "<tr><td colspan='6' class='iwdl_bg left bold'>" + daydate + "</tr>"; date = dt; } str += "<tr><td class='iwdl'>" + stime + "-" + etime; if (p == "0") { if (sym == "01" || sym == "02" || sym == "03" || sym == "05" || sym == "06" || sym == "07" || sym == "08") sym += "n"; } if (p == "1") { if (sym == "01" || sym == "02" || sym == "03" || sym == "05" || sym == "06" || sym == "07" || sym == "08") sym += "d"; } if (p == "2") { if (sym == "01" || sym == "02" || sym == "03" || sym == "05" || sym == "06" || sym == "07" || sym == "08") sym += "d"; } if (p == "3") { if (sym == "01" || sym == "02" || sym == "03" || sym == "05" || sym == "06" || sym == "07" || sym == "08") sym += "n"; } str += "</td>"; str += "<td><img src='https://fil.nrk.no/yr/grafikk/sym/b38/" + sym + ".png' width='28'></td>"; str += "<td align='center' class='iwdl black bold'>" + c_temp.val + "</td>"; str += "<td align='center' class='iwdl black bold'>" + c_wdir.val + "</td>"; str += "<td align='center' class='iwdl black bold'>" + c_wind.val + "</td>"; str += "<td align='center' class='iwdl black bold'>" + c_baro.val + "</td>"; str += "</tr>"; i++; } str += "</table>"; $("#fc").html(str); var link = "<center><a target='_blank' href='" + fc.credit.link.url + "'>Forecast by yr.no</a>"; link += " <span class='iwdl'>" + settings["yr.no"] + "</span><br>"; link += " <span class='iwdl'>" + fc.meta.lastupdate.replace(/T/, " ") + "</span>"; link += "</center>"; $("#fcref").html(link); // set background color $(".iwdl_bg").css("background", settings["bgcolor"]); if (theme == 'jqt') { $(".iwdl").css('color', '#c0c0c0'); $(".black").css('color', 'white'); $(".iwdl_bg .black").css("color", "black"); } // }); } else { $("#fc").html("<iframe frameborder='no' scrolling='auto' width='275px' height='200px' src='" + settings["forecast_url"] + "'></iframe>"); $("#fcref").html("<center>" + settings["forecast_from"] + "</center>"); } }; function loadjsfile(filename){ var code = makeSyncRequest(filename); eval(code); } function getfile(filename){ var code = makeSyncRequest(filename); return code; } function getClientRaw(files) { var now = new Date(); now = now.getTime(); for (var i = 0; i < files.length; i++) { switch (files[i]) { case "cr": if (typeof getClientRaw.crlast == 'undefined') getClientRaw.crlast = 0; // Don't fetch it more often than once every 5 secs if (getClientRaw.crlast + 5000 < now) { cr = makeSyncRequest(settings["clientraw_dir"] + "clientraw.txt").split(" "); if (cr[0] != '12345') alert("Cannot read clientraw.txt; make sure the path in iwdl_settings.js is correct"); getClientRaw.crlast = now; } break; case "ecr": if (typeof getClientRaw.ecrlast == 'undefined') getClientRaw.ecrlast = 0; // Don't fetch it more often than once every minute if (getClientRaw.ecrlast + 60000 < now) { cre = makeSyncRequest(settings["clientraw_dir"] + "clientrawextra.txt").split(" "); getClientRaw.ecrlast = now; } break; case "hcr": if (typeof getClientRaw.hcrlast == 'undefined') getClientRaw.hcrlast = 0; // Don't fetch it more often than once every minute if (getClientRaw.hcrlast + 60000 < now) { crh = makeSyncRequest(settings["clientraw_dir"] + "clientrawhour.txt").split(" "); getClientRaw.hcrlast = now; } break; case "dcr": if (typeof getClientRaw.dcrlast == 'undefined') getClientRaw.dcrlast = 0; // Don't fetch it more often than once every 5 minutes if (getClientRaw.dcrlast + 300000 < now) { crd = makeSyncRequest(settings["clientraw_dir"] + "clientrawdaily.txt").split(" "); getClientRaw.dcrlast = now; } break; } } } function roundNumber(num, dec) { var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec); return result; } function check_convert(val, units) { var ret = new Array(); ret["val"] = val + ''; ret["units"] = units; if (unitnames[units]) ret["units"] = unitnames[units]; switch (units) { case "c": if (settings["temp"] == "f") { ret["val"] = roundNumber((1.8 * val) + 32.0, 1); if (unitnames["f"]) ret["units"] = unitnames["f"]; } break; case "kn": if (settings["wind"] == "mph") { ret["val"] = roundNumber(1.1507794 * val, 1) + ''; if (unitnames["mph"]) ret["units"] = unitnames["mph"]; } if (settings["wind"] == "kmh") { ret["val"] = roundNumber(1.852 * val, 1) + ''; if (unitnames["kmh"]) ret["units"] = unitnames["kmh"]; } if (settings["wind"] == "ms") { ret["val"] = roundNumber(0.514444 * val, 1) + ''; if (unitnames["ms"]) ret["units"] = unitnames["ms"]; } break; case 'deg': if (settings["wdir"] == "abbr") { var windlabel = new Array("N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW"); ret["val"] = windlabel[Math.floor(((parseInt(val) + 11) / 22.5) % 16 )]; if (texts["wdir_" + ret["val"]]) ret["val"] = texts["wdir_" + ret["val"]]; if (unitnames["abbr"]) ret["units"] = unitnames["abbr"]; } break; case "mm": if (settings["rain"] == "in") { ret["val"] = roundNumber(0.0393700787 * val, 3) + ''; if (unitnames["in"]) ret["units"] = unitnames["in"]; } break; case "hpa": if (settings["baro"] == "hg") { ret["val"] = roundNumber(val / 33.86388158, 2) + ''; if (unitnames["hg"]) ret["units"] = unitnames["hg"]; } if (settings["baro"] == "mb") { ret["val"] = val + ''; if (unitnames["mb"]) ret["units"] = unitnames["mb"]; } break; case "ft": ret["val"] = (Math.round(val * 1.0).toFixed(0)) + ''; if (settings["height"] == "m") { ret["val"] = (Math.round(val / 3.2808399).toFixed(0)) + ''; if (unitnames["m"]) ret["units"] = unitnames["m"]; } break; } return ret; } function updateiWdl() { getClientRaw(["cr"]); var mystation, time; if (settings["station_type"] && settings["station_type"] == 'meteohub') { // station - time is spit by _, not - var station_time = cr[32].replace(/_/g, " ").split(" "); delete station_time[station_time.length - 1]; mystation = station_time.join("-").replace(/-$/, ""); } else { var station_time = cr[32].replace(/_/g, " ").split("-"); if (station_time.length > 2) { delete station_time[station_time.length - 1]; mystation = station_time.join("-").replace(/-$/, ""); } else { mystation = station_time[0]; } } time = cr[29] + ":" + cr[30] + ":" + cr[31]; // If requested, translate to am/pm if (settings["time"] == "12") { var tm = time.split(":"); tm[0] = tm[0].replace(/^0/, ''); if (tm[0] > 12) { tm[0] -= 12; time = tm.join(":"); time += " pm"; } else { time = tm.join(":"); if (tm[0] == 12) time += " pm"; else time += " am"; } } var disp_date = ''; switch (settings["date"]) { case "y/m/d": disp_date = cr[36] + "/" + cr[35]; break; case "d-m-y": disp_date = cr[35] + "-" + cr[36]; break; case "d/m/y": disp_date = cr[35] + "/" + cr[36]; break; case "m-d-y": disp_date = cr[36] + "-" + cr[35]; break; case "m/d/y": disp_date = cr[36] + "/" + cr[35]; break; default: disp_date = cr[36] + "-" + cr[35]; break; } time = disp_date + ' ' + time; if (settings["station_name"]) station = settings["station_name"]; else if (mystation) station = mystation; if ($("#hm_station").html() != station) $("[iwdltxt=hm_station]").html(station); var icon = cr[48]; var descr = ''; if (0 && wth_icons[icon] && texts[wth_icons[icon]]) { descr = texts[wth_icons[icon]]; } else { descr = cr[49].replace(/_/g, " "); // Extra Tag Cleanup descr = descr.replace(/ø/g,'ø'); descr = descr.replace(/Ã¥/g,'å'); descr = descr.replace(/æ/g,'æ'); // Translate var descrs = descr.split("/"); if (descrs[0]) { if (texts[descrs[0]]) descr = texts[descrs[0]]; else descr = descrs[0]; } if (descrs[1]) { if (texts[descrs[1]]) time += " / " + texts[descrs[1]]; else time += " / " + descrs[1]; } } if ($("#il_time").html() != time) $("#il_time").html(time); if ($("#il_descr").html() != descr) $("#il_descr").html(descr); if ($("#hm_time").html() != time) $("#hm_time").html(time); if ($("#hm_descr").html() != descr) $("#hm_descr").html(descr); var fields = settings["live_screen"]; for ( var i=0, len=fields.length; i<len; ++i ){ if ((fields[i] == 44 || fields[i] == 45) && settings["humchill"] == 'toggle') { var t = parseInt(cr[4]); if (fields[i] == 44 && t >= 17) { // toggle to humidex settings["live_screen"][i] = 45; $("[crtxt=44]").attr("crtxt", "45"); $("#cr_44").attr("id", "cr_45"); $("[crtxt=45]").html(cr_fieldnames[45]); } if (fields[i] == 45 && t < 17) { // toggle to windchill settings["live_screen"][i] = 44; $("[crtxt=45]").attr("crtxt", "44"); $("#cr_45").attr("id", "cr_44"); $("[crtxt=44]").html(cr_fieldnames[44]); } } if ((fields[i] == 44 || fields[i] == 112) && settings["heatchill"] == 'toggle') { var t = parseInt(cr[4]); if (fields[i] == 44 && t >= 17) { // toggle to heatindex settings["live_screen"][i] = 112; $("[crtxt=44]").attr("crtxt", "112"); $("#cr_44").attr("id", "cr_112"); $("[crtxt=112]").html(cr_fieldnames[112]); } if (fields[i] == 112 && t < 17) { // toggle to windchill settings["live_screen"][i] = 44; $("[crtxt=112]").attr("crtxt", "44"); $("#cr_112").attr("id", "cr_44"); $("[crtxt=44]").html(cr_fieldnames[44]); } } var conv = check_convert(cr[fields[i]], cr_fields[fields[i]][1]); var newval = conv["val"]; var val = $("#cr_" + fields[i]).html(); if (newval != val) { $("#cr_" + fields[i]).html(newval); } } var fields = settings["min_max"]; for ( var i=0, len=fields.length; i<len; ++i ){ var conv = check_convert(cr[fields[i]], cr_fields[fields[i]][1]); var newval = conv["val"]; var val = $("#mmcr_" + fields[i]).html(); if (newval != val) { $("#mmcr_" + fields[i]).html(newval); } } var fields = settings["home"]; for ( var i=0, len=fields.length; i<len; ++i ){ var conv = check_convert(cr[fields[i]], cr_fields[fields[i]][1]); var newval = conv["val"]; var val = $("#hmcr_" + fields[i]).html(); if (newval != val) { $("#hmcr_" + fields[i]).html(newval); } } } function dispHome() { // The live field var str = ''; str += "<table width='100%'>"; str += "<tr>"; str += "<td align='center' width='100%' class='head black'>"; str += "<span class='iwdl black' id='hm_time'></span>"; str += "</td></tr>"; str += "<tr>"; str += "<td align='center' width='100%' id='hm_descr' class='head black'></td>"; str += "</tr>"; str += "</table>"; str += "<br><table width='100%'><tr><td align='center' width='100%' class='head'>"; var str2 = ""; var fields = settings["home"]; for ( var i=0, len=fields.length; i<len; ++i ){ var conv = check_convert(0, cr_fields[fields[i]][1]); var units = conv["units"]; if (str2) { if (i % 3 == 0) str2 += "<br>"; else str2 += "<span class='iwdl black'> / </span>"; } str2 += "<span class='iwdl black' id='hmcr_" + fields[i] + "'></span><span txtunits='" + cr_fields[fields[i]][1] + "' class='iwdl black'>" + units + "</span>"; } str2 += "</td></tr></table>"; str += str2; $("#home_display").html(str); // Now the toolbar var w = 'w33'; if (settings["radar"]) { addDiv("radar", "<iframe id='radarframe' frameborder='no' scrolling='auto' width='275px' height='200px' src=''></iframe>"); w = 'w25'; } if (settings["webcam"]) { addDiv("webcam", "<iframe id='webcamframe' frameborder='no' scrolling='auto' width='275px' height='200px' src=''></iframe>"); $('#webcam').css("overflow-x", "visible"); w = 'w25'; } if (settings["radar"] && settings["webcam"]) w = 'w20'; str = "<table class='w100'>"; str += "<tr>"; str += "<td class='center " + w + "' id='tap_mapbutton'>"; str += "<img border='0' src='data:image/png;base64,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%3D'>"; str += "</td>"; if (settings["radar"]) { str += "<td class='center " + w + "' id='tap_radarbutton'>"; str += "<img border='0' src='data:image/png;base64,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%3D%3D'>"; str += "</td>"; } if (settings["webcam"]) { str += "<td class='center " + w + "' id='tap_webcambutton'>"; str += "<img border='0' src='data:image/png;base64,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%3D%3D'>"; str += "</td>"; } str += "<td class='center " + w + "' id='tap_settings'>"; str += "<img src='data:image/png;base64,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%3D'>"; str += "</td>"; str += "<td class='center " + w + "' id='tap_about'>"; str += "<img src='data:image/png;base64,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%3D%3D'>"; str += "</td>"; str += "</tr>"; str += "</table>"; $("#toolbar").append(str); } function dispIwdl() { var str = ''; str += "<ul class='rounded'>"; str += "<li class='iwdl iwdl_bg'>"; str += "<table width='100%'>"; str += "<tr>"; str += "<td align='center' width='100%' class='head black'>"; str += "<span class='iwdl black' id='il_time'></span>"; str += "</tr>"; str += "<tr>"; str += "<td align='center' width='100%' id='il_descr' class='head black'></td>"; str += "</tr>"; str += "</table>"; str += "</li>"; var fields = settings["live_screen"]; for ( var i=0, len=fields.length; i<len; ++i ){ var conv = check_convert(0, cr_fields[fields[i]][1]); var units = conv["units"]; if (crtogr[fields[i]]) { str += "<li class='arrow iwdl'>"; str += "<a href='#graphs_" + fields[i] + "'>"; } else { str += "<li class='iwdl'>"; } str += "<table width='100%'><tr>" + "<td class='iwdl bold left w50'><span crtxt='" + fields[i] + "'>" + cr_fieldnames[fields[i]] + "</span></td>" + "<td class='iwdl bold right w25 black'><span id='cr_" + fields[i] + "'></span></td>" + "<td class='iwdl bold left w25' txtunits='" + cr_fields[fields[i]][1] + "'>" + units + "</td>" + "</tr></table>"; if (crtogr[fields[i]]) str += "</a>"; str += "</li>"; } str += "</ul>"; return str; } function dispToday() { var str; str = "<ul class='rounded'>"; var station_time = cr[32].split("-"); str += "<li class='iwdl iwdl_bg'>"; str += "<table width='100%'>"; str += " <tr>"; str += " <td class='iwdl center head w100 black' iwdltxt='rec_today'>" + texts['rec_today'] + "</td>"; str += " </tr>"; str += "</table>"; str += "</li>"; var fields = settings["min_max"]; for ( var i=0, len=fields.length; i<len; ++i ){ if (cr[fields[i]] != "-") { var conv = check_convert(cr[fields[i]], cr_fields[fields[i]][1]); var units = conv["units"]; var val = conv["val"]; str += "<li class='iwdl'>"; str += "<table width='100%'>"; str += " <tr>"; str += " <td align='left' class='iwdl bold left w50'><span crtxt='" + fields[i] + "'>" + cr_fieldnames[fields[i]] + "</span></td>"; str += " <td align='right' class='iwdl bold right w25 black'><span id='mmcr_" + fields[i] + "'>" + val + "</span>"; str += " <td align='left' class='iwdl bold left w25' txtunits='" + cr_fields[fields[i]][1] + "'> " + units + "</td>"; str += " </tr>"; str += "</table>"; str += "</li>"; } } str += "</ul>"; return str; } function dispRec(which) { var str; str = "<ul class='rounded'>"; str += "<li class='iwdl iwdl_bg'>"; str += "<table width='100%'>"; str += " <tr>"; str += " <td class='iwdl center head w100 black' iwdltxt='rec_" + which + "'>" + texts["rec_" + which] + "</td>"; str += " </tr>"; str += "</table>"; str += "</li>"; str += "</ul>"; var items = settings["records"]; for ( var i=0, len=items.length; i<len; ++i ) { var fields = record_disp[items[i]]; var str2 = ''; str2 += "<ul class='rounded'>"; str2 += "<li class='iwdl'>"; str2 += "<table width='100%'><tr><td class='iwdl iwdl_bg black center' colspan='3'><b>" + texts[items[i]] + "</b></td></tr></table>"; str2 += "</li>"; var found_field = 0; for ( var j=0, len2=fields.length; j<len2; ++j ) { var str3 = ''; str3 += "<li class='iwdl'><table width='100%'>"; if (fields[j] == '') { str3 += "<tr><td class='iwdl w50'> </td><td class='iwdl w25'> </td><td class='iwdl w25'> </td></tr>"; } else { var cr_field = records[fields[j]][0]; var r_start; switch (which) { case 'month': r_start = records[fields[j]][1]; break; case 'year': r_start = records[fields[j]][2]; break; case 'alltime': r_start = records[fields[j]][3]; break; } if (cre[r_start] != '-') { found_field = 1; str3 += "<tr><td class='iwdl black' colspan='3'>"; switch(fields[j]) { case "temp_high": str3 += texts["max"] + " " + cr_fieldnames[cr_field]; break; case "temp_low": str3 += texts["min"] + " " + cr_fieldnames[cr_field]; break; case "warmest_day": str3 += texts["warmest_day"]; break; case "coldest_day": str3 += texts["coldest_day"]; break; case "warmest_night": str3 += texts["warmest_night"]; break; case "coldest_night": str3 += texts["coldest_night"]; break; case "wind_avg": str3 += texts["max"] + " " + cr_fieldnames[cr_field]; break; case "wind_avg_dir": break; case "wind_gust": str3 += texts["max"] + " " + cr_fieldnames[cr_field]; break; case "wind_gust_dir": break; case "rain_rate": str3 += texts["rain_rate"]; break; case "hour_rain": str3 += texts["rain_hour"]; break; case "daily_rain": str3 += texts["rain_day"]; break; case "baro_high": str3 += texts["max"] + " " + cr_fieldnames[cr_field]; break; case "baro_low": str3 += texts["min"] + " " + cr_fieldnames[cr_field]; break; case "soil_high": str3 += texts["max"]; break; case "soil_low": str3 += texts["min"]; break; case "grass_high": str3 += texts["max"]; break; case "solar": str3 += texts["max"] + " " + cr_fieldnames[cr_field]; break; case "uv": str3 += texts["max"] + " " + cr_fieldnames[cr_field]; break; } str3 += "</td></tr>"; // Other date format requested? var disp_date = ''; switch (settings["date"]) { case "y/m/d": disp_date = cre[r_start+5] + "/" + cre[r_start+4] + "/" + cre[r_start+3]; break; case "d-m-y": disp_date = cre[r_start+3] + "-" + cre[r_start+4] + "-" + cre[r_start+5]; break; case "d/m/y": disp_date = cre[r_start+3] + "/" + cre[r_start+4] + "/" + cre[r_start+5]; break; case "m-d-y": disp_date = cre[r_start+4] + "-" + cre[r_start+3] + "-" + cre[r_start+5]; break; case "m/d/y": disp_date = cre[r_start+4] + "/" + cre[r_start+3] + "/" + cre[r_start+5]; break; default: disp_date = cre[r_start+5] + "/" + cre[r_start+4] + "/" + cre[r_start+3]; break; } str3 += "<tr><td class='iwdl w60 bold'>" + disp_date + " "; // If requested, translate to am/pm time = cre[r_start+1] + ":" + cre[r_start+2]; if (settings["time"] == "12") { var tm = time.split(":"); tm[0] = tm[0].replace(/^0/, ''); if (tm[0] > 12) { tm[0] -= 12; time = tm.join(":"); time += " pm"; } else { time = tm.join(":"); if (tm[0] == 12) time += " pm"; else time += " am"; } } str3 += time + "</td>"; var conv = check_convert(cre[r_start], cr_fields[cr_field][1]); str3 += "<td class='iwdl w20 right black bold'>" + conv['val'] + "</td>"; str3 += "<td class='iwdl w20 bold'>" + conv['units'] + "</td></tr>"; str2 += str3; } } str2 += "</table></li>"; } if (found_field) str += str2; str += "</ul>"; } return str; } function dispSettings() { var str = ''; var selected; str += "<form><ul class='edit rounded'>" str += "<li class='iwdl iwdl_bg'><span iwdltxt='settings'>" + texts["settings"] + "</span></li>"; str += "<li class='arrow iwdl_arrow'><select class='iwdl' id='settings_temp' onChange='javascript: settingsChange(\"temp\", \"settings_temp\")'>"; if (settings["temp"] == "c") selected = 'selected'; else selected = ''; str += "<option value='c'" + selected + ">" + texts["set_temp"] + ": °C</option>"; if (settings["temp"] == "f") selected = 'selected'; else selected = ''; str += "<option value='f'" + selected + ">" + texts["set_temp"] + ": °F</option>"; str += "</select></li>"; str += "<li class='arrow iwdl_arrow'><select class='iwdl' id='settings_wind' onChange='javascript: settingsChange(\"wind\", \"settings_wind\")'>"; if (settings["wind"] == "kn") selected = 'selected'; else selected = ''; str += "<option value='kn'" + selected + ">" + texts["set_wind"] + ": kn</option>"; if (settings["wind"] == "kmh") selected = 'selected'; else selected = ''; str += "<option value='kmh'" + selected + ">" + texts["set_wind"] + ": km/h</option>"; if (settings["wind"] == "mph") selected = 'selected'; else selected = ''; str += "<option value='mph'" + selected + ">" + texts["set_wind"] + ": mp/h</option>"; if (settings["wind"] == "ms") selected = 'selected'; else selected = ''; str += "<option value='ms'" + selected + ">" + texts["set_wind"] + ": m/s</option>"; str += "</select></li>"; str += "<li class='arrow iwdl_arrow'><select class='iwdl' id='settings_wdir' onChange='javascript: settingsChange(\"wdir\", \"settings_wdir\")'>"; if (settings["wdir"] == "deg") selected = 'selected'; else selected = ''; str += "<option value='deg'" + selected + ">" + texts["set_wdir"] + ": °</option>"; if (settings["wdir"] == "abbr") selected = 'selected'; else selected = ''; str += "<option value='abbr'" + selected + ">" + texts["set_wdir"] + ": abbr</option>"; str += "</select></li>"; str += "<li class='arrow iwdl_arrow'><select class='iwdl' id='settings_rain' onChange='javascript: settingsChange(\"rain\", \"settings_rain\")'>"; if (settings["rain"] == "mm") selected = 'selected'; else selected = ''; str += "<option value='mm'" + selected + ">" + texts["set_rain"] + ": mm</option>"; if (settings["rain"] == "in") selected = 'selected'; else selected = ''; str += "<option value='in'" + selected + ">" + texts["set_rain"] + ": inch</option>"; str += "</select></li>"; str += "<li class='arrow iwdl_arrow'><select class='iwdl' id='settings_baro' onChange='javascript: settingsChange(\"baro\", \"settings_baro\")'>"; if (settings["baro"] == "hpa") selected = 'selected'; else selected = ''; str += "<option value='hpa'" + selected + ">" + texts["set_baro"] + ": hpa</option>"; if (settings["baro"] == "mb") selected = 'selected'; else selected = ''; str += "<option value='mb'" + selected + ">" + texts["set_baro"] + ": mb</option>"; if (settings["baro"] == "hg") selected = 'selected'; else selected = ''; str += "<option value='hg'" + selected + ">" + texts["set_baro"] + ": hg</option>"; str += "</select></li>"; str += "<li class='arrow iwdl_arrow'><select class='iwdl' id='settings_height' onChange='javascript: settingsChange(\"height\", \"settings_height\")'>"; if (settings["height"] == "ft") selected = 'selected'; else selected = ''; str += "<option value='ft'" + selected + ">" + texts["set_height"] + ": ft</option>"; if (settings["height"] == "m") selected = 'selected'; else selected = ''; str += "<option value='m'" + selected + ">" + texts["set_height"] + ": m</option>"; str += "</select></li>"; str += "<li class='arrow iwdl_arrow'><select class='iwdl' id='settings_date' onChange='javascript: settingsChange(\"date\", \"settings_date\")'>"; if (settings["date"] == "y-m-d") selected = 'selected'; else selected = ''; str += "<option value='y-m-d'" + selected + ">" + texts["set_date"] + ": yyyy-mm-dd</option>"; if (settings["date"] == "y/m/d") selected = 'selected'; else selected = ''; str += "<option value='y/m/d'" + selected + ">" + texts["set_date"] + ": yyyy/mm/dd</option>"; if (settings["date"] == "d-m-y") selected = 'selected'; else selected = ''; str += "<option value='d-m-y'" + selected + ">" + texts["set_date"] + ": dd-mm-yyyy</option>"; if (settings["date"] == "d/m/y") selected = 'selected'; else selected = ''; str += "<option value='d/m/y'" + selected + ">" + texts["set_date"] + ": dd/mm/yyyy</option>"; if (settings["date"] == "m-d-y") selected = 'selected'; else selected = ''; str += "<option value='m-d-y'" + selected + ">" + texts["set_date"] + ": mm-dd-yyyy</option>"; if (settings["date"] == "m/d/y") selected = 'selected'; else selected = ''; str += "<option value='m/d/y'" + selected + ">" + texts["set_date"] + ": mm/dd/yyyy</option>"; str += "</select></li>"; str += "<li class='arrow iwdl_arrow'><select class='iwdl' id='settings_time' onChange='javascript: settingsChange(\"time\", \"settings_time\")'>"; if (settings["time"] == "24") selected = 'selected'; else selected = ''; str += "<option value='24'" + selected + ">" + texts["set_time"] + ": 24</option>"; if (settings["time"] == "12") selected = 'selected'; else selected = ''; str += "<option value='12'" + selected + ">" + texts["set_time"] + ": 12 + am/pm</option>"; str += "</select></li>"; str += "<li class='arrow iwdl_arrow'><select class='iwdl' id='settings_lang' onChange='javascript: settingsChange(\"lang\", \"settings_lang\")'>"; for (var i = 0, l = settings["all_langs"].length; i < l; i++) { lang = settings["all_langs"][i]; if (settings["lang"] == lang) selected = 'selected'; else selected = ''; str += "<option value='" + lang + "'" + selected + ">" + texts["set_lang"] + ": " + lang + "</option>"; } str += "</select></li>"; str += "</ul></form>"; return str; } function dispGraph(grtype, graph) { var gr, cr, type; var ticks = null; switch (grtype.substr(0,1)) { case "h": type = 'h'; grlist = ghsettings[graph]; getClientRaw(["hcr"]); cr = crh; break; case "d": type = 'd'; grlist = gdsettings[graph]; getClientRaw(["ecr"]); cr = cre; break; case "w": type = 'w'; grlist = gwsettings[graph]; getClientRaw(["dcr"]); cr = crd; break; case "m": type = 'm'; grlist = gmsettings[graph]; getClientRaw(["dcr"]); cr = crd; break; } var width = "285px"; if (document.width >= 480) width = "445px"; $("#graphsinfo" + "_" + grtype + "_graph_" + graph).css({'width': width}); // Make the graph var units = cr_fields[grtocr[graph]][1]; // make single array var s = 0; var vals = new Array; for (k = 0; k < grlist.length; k++) { var gr = grlist[k]; var start = gr[0]; var length = gr[1]; for (var l = start; l < start+length; l++) { // don't convert if units is abbr for degrees if (units == 'deg') vals[s] = cr[l]; else { var conv = check_convert(cr[l], units); vals[s] = conv["val"]; } s++; } } var d1 = []; for (var j = 0, len = vals.length; j < len; j++) { if (type == 'w') d1.push([(j - len + 1)/4, vals[j]]); else d1.push([j - len + 1, vals[j]]); } var options = { xaxis: { ticks: ticks, color: "white" }, grid: { color: "#a0a0a0" } } if (graph == 'wind_dir') { options.yaxis = { min: 0, max: 360, ticks: [ [ 0, check_convert( 0, "deg").val], [ 90, check_convert( 90, "deg").val], [180, check_convert(180, "deg").val], [270, check_convert(270, "deg").val], [360, check_convert( 0, "deg").val] ] } } else { if (graph == 'solar_uv' || graph == 'solar_wm' || graph == 'rain' || graph == 'wind_speed' || graph == 'wind_gust') options.yaxis = { min: 0 }; } $.plot($("#graphsinfo" + "_" + grtype + "_graph_" + graph), [ d1 ], options); } function getGraphDescr(graph, type) { var descr = "<span crtxt='" + grtocr[graph] + "'>" + cr_fieldnames[grtocr[graph]] + "</span>" + " <span txtunits='" + cr_fields[grtocr[graph]][1] + "'>" + check_convert(0, cr_fields[grtocr[graph]][1])["units"] + "</span>"; switch (type) { case "h": descr += " (<span iwdltxt='last_60m'>" + texts["last_60m"] + "</span>)"; break; case "d": descr += " (<span iwdltxt='last_24h'>" + texts["last_24h"] + "</span>)"; break; case "w": descr += " (<span iwdltxt='last_7d'>" + texts["last_7d"] + "</span>)"; break; case "m": if (graph == "rain_year") descr += " (<span iwdltxt='last_12m'>" + texts["last_12m"] + "</span>)"; else descr += " (<span iwdltxt='last_31d'>" + texts["last_31d"] + "</span>)"; break; } return descr; } function graphTimeTpl(graphs, type) { var str = "<ul class='rounded'>"; for (var i = 0, len=graphs.length; i < len; ++i) { str += "<li class='iwdl'><table class='w100 iwdl_marpad0'><tr><td class='iwdl_bg iwdl_marpad0 head black'>" + getGraphDescr(graphs[i], type) + "</td></tr></table>"; str += "<div id='graphsinfo" + "_" + type + "_graph_" + graphs[i] + "' style='width:280px;height:100px;'></div>"; str += "</li>"; } str += "</ul>"; return str; } function graphTypeTpl(type) { var graphs = crtogr[type]; var str = "<ul class='rounded'>"; for (var i = 0, ilen=graphs.length; i < ilen; ++i) { for (var j = 0, jlen=graphs[i].length; j < jlen; ++j) { if (graphs[i][j]) { var t; if (i == 0) t = "h"; if (i == 1) t = "d"; if (i == 2) t = "w"; if (i == 3) t = "m"; str += "<li class='iwdl'><table class='w100 iwdl_marpad0'><tr><td class='iwdl_bg iwdl_marpad0 head black'>" + getGraphDescr(graphs[i][j], t) + "</td></tr></table>"; str += "<div id='graphsinfo" + "_" + t + i + j + "_graph_" + graphs[i][j] + "' style='width:280px;height:100px;'></div>"; str += "</li>"; } } } str += "</ul>"; return str; } function dispTimeGraphs(type) { var graphs = new Array(); switch (type) { case "h": graphs = settings["hour_graphs"]; break; case "d": graphs = settings["day_graphs"]; break; case "w": graphs = settings["week_graphs"]; break; case "m": graphs = settings["month_graphs"]; break; } for (var i = 0, len=graphs.length; i < len; ++i) { dispGraph(type, graphs[i]); } } function dispTypeGraphs(type) { var graphs = crtogr[type]; if (graphs[0][0]) dispGraph("h00", graphs[0][0]); if (graphs[1][0]) dispGraph("d10", graphs[1][0]); if (graphs[2][0]) dispGraph("w20", graphs[2][0]); if (graphs[3][0]) dispGraph("m30", graphs[3][0]); if (graphs[3][1]) dispGraph("m31", graphs[3][1]); } function setTexts(what) { if (what == 'iwdl' || what == 'all') { $("[iwdltxt]").each(function() { $(this).html(texts[$(this).attr("iwdltxt")]); }); $("#r_today").remove(); $("#r_month").remove(); $("#r_year").remove(); $("#r_alltime").remove(); addDiv("r_today", dispToday()); addDiv("r_month", dispRec('month')); addDiv("r_year", dispRec('year')); addDiv("r_alltime", dispRec('alltime')); } if (what == 'cr' || what == 'all') { var done = new Array; for (var i = 0, len = settings["home"].length; i < len; ++i) { done[settings["home"][i]] = 1; $("[crtxt=" + settings["home"][i] + "]").html(cr_fieldnames[settings["home"][i]]); } for (var i = 0, len = settings["live_screen"].length; i < len; ++i) { if (!done[settings["live_screen"][i]]) { $("[crtxt=" + settings["live_screen"][i] + "]").html(cr_fieldnames[settings["live_screen"][i]]); done[settings["live_screen"][i]] = 1; } } for (var i = 0, len = settings["min_max"].length; i < len; ++i) { if (!done[settings["min_max"][i]]) { $("[crtxt=" + settings["min_max"][i] + "]").html(cr_fieldnames[settings["min_max"][i]]); done[settings["min_max"][i]] = 1; } } } } function setUnits() { var conv; var lst = new Array('c', 'kn', 'deg', 'hpa', 'mm', 'ft'); for (i = 0; i < lst.length; i++) { conv = check_convert(0, lst[i]); $("[txtunits=" + lst[i] + "]").html(conv["units"]); } } function addDiv(name, content) { var dv = ''; dv += "<div id='" + name + "'>"; dv += "<div class='toolbar'>"; dv += "<h1 class='h1_station_name'>" + station + "</span></h1>"; dv += "<a href='#' class='back' iwdltxt='back'>" + texts['back'] + "</a>"; dv += "</div>"; dv += content; dv += "</div>"; $("#jqt").append(dv); } function localiser() { if ($("#map_text").html()) return; var lng = 0; var lat = 0; if (document.width >= 480) { var width = 520; var height = 285; if (document.height > 285) height = 435; $('#map_canvas').css("width",width+"px"); $('#map_canvas').css("height",height+"px"); $('#map-overflow').css("width",(width-40)+"px"); $('#map-overflow').css("height",(height-10)+"px"); } else { var width = 360; var height = 435; $('#map_canvas').css("width",width+"px"); $('#map_canvas').css("height",height+"px"); $('#map-overflow').css("width",(width-40)+"px"); $('#map-overflow').css("height",(height-10)+"px"); } $('#width_of_doc').html(document.width); // Meteohub uses - for east of GMT, Weather Display uses - for west of GMT if (settings['longitude']) { if (settings["station_type"] && settings["station_type"] == 'meteohub') lng = settings['longitude']; else lng = -settings['longitude']; lat = settings['latitude']; } else { if (settings["station_type"] && settings["station_type"] == 'meteohub') lng = parseFloat(cr[161]); else lng = -(parseFloat(cr[161])); lat = parseFloat(cr[160]); } if (lng || lat || settings["location"]) { var myLatlng = new google.maps.LatLng(lat, lng); var myOptions = { zoom: 5, center: myLatlng, disableDefaultUI: true, mapTypeId: google.maps.MapTypeId.ROADMAP } var map = new google.maps.Map(document.getElementById('map_canvas'), myOptions); var marker = new google.maps.Marker({ position: myLatlng, map: map, title: station }); if (!settings["location"]) { var geocoder = new google.maps.Geocoder(); var latlng = new google.maps.LatLng(lat, lng); if (geocoder) { geocoder.geocode({'latLng': latlng}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { if (results[1]) { $("#map_text").html("<center>" + texts["station_location"] + ":<br>" +results[1].formatted_address + "</center>"); } } else { $("#map_text").html("<center>" + texts["station_location"] + ":<br>" + " ( not found ) " + "</center>"); } }); } } else { $("#map_text").html("<center>" + settings["location"] + "</center>"); } } else { $("#map_canvas").html(texts["unknown_location"]); } } function settingsChange(which, newval) { var nw = $("#" + newval).val(); settings[which] = nw; if (window.openDatabase) { jQT.dbDeleteRow("settings", "setting", "'" + which + "'"); jQT.dbInsertRows({"addRow": [ { "table": "settings", "property": [ { "name": "setting", value: which }, { "name": "value", "value": nw } ] } ] }); } if (which == "lang") { // Load language file loadjsfile("iwdl_lang_" + settings["lang"] + ".js"); lang_loaded = settings["lang"]; setTexts('all'); $("#settings_content").html(dispSettings()); // Set bg color $(".iwdl_bg").css("background", settings["bgcolor"]); } $("#fc").html(""); setUnits(); updateiWdl(); } function finishStartup() { // Load language file if (settings["lang"] != lang_loaded) loadjsfile("iwdl_lang_" + settings["lang"] + ".js"); lang_loaded = settings["lang"]; addDiv("settings", "<div id='settings_content'>" + dispSettings() + "</div>"); getClientRaw(["cr", "ecr"]); dispHome(); addDiv("live_weather", dispIwdl()); addDiv("r_today", dispToday()); addDiv("r_month", dispRec('month')); addDiv("r_year", dispRec('year')); addDiv("r_alltime", dispRec('alltime')); setUnits(); updateiWdl(); if (document.height >= 460) { if (theme == 'apple') $("#filler").css({'height': 58 }); else $("#filler").css({'height': 47 }); } else { if (theme == 'apple') $("#filler").css({'height': 15 }); else $("#filler").css({'height': 4 }); } $(document).everyTime(settings["refresh"] + "s", "iwdlTimer", function(i) { updateiWdl(); }, settings["num_refresh"]); var lst = ["hour", "day", "week", "month"]; for (var i = 0; i < lst.length; i++) { var tm = lst[i]; addDiv(tm, graphTimeTpl(settings[tm + "_graphs"], tm.substr(0, 1))); $("#" + tm).bind('pageAnimationEnd', function(event, info){ if (info.direction == 'in') dispTimeGraphs($(this).attr("id").substr(0, 1)); if (info.direction == 'in') $(document).stopTime("iwdlTimer"); }); }; for (var i = 0; i < settings["live_screen"].length; i++) { var gr = settings["live_screen"][i]; if (crtogr[gr]) { addDiv("graphs_" + gr, graphTypeTpl(gr)); $("#graphs_" + gr).bind('pageAnimationEnd', function(event, info){ if (info.direction == 'in') dispTypeGraphs($(this).attr("id").replace(/graphs_/, "")); if (info.direction == 'in') $(document).stopTime("iwdlTimer"); }); } } $('#live_dials').bind('pageAnimationEnd', function(event, info){ if (info.direction == 'in') { dispDials(); } }); $('#live_weather').bind('pageAnimationEnd', function(event, info){ if (info.direction == 'in') { AsyncClientRaw(); $(document).stopTime("iwdlTimer"); $(document).everyTime(settings["refresh"] + "s", "iwdlTimer", function(i) { AsyncClientRaw(); }, settings["num_refresh"]); } }); $('#home').bind('pageAnimationEnd', function(event, info){ if (info.direction == 'in') { AsyncClientRaw(); $(document).stopTime("iwdlTimer"); $(document).everyTime(settings["refresh"] + "s", "iwdlTimer", function(i) { AsyncClientRaw(); }, settings["num_refresh"]); } }); $('#forecast').bind('pageAnimationEnd', function(event, info){ if (info.direction == 'in') { $(document).stopTime("iwdlTimer"); getForecast(); } }); $('#radar').bind('pageAnimationEnd', function(event, info){ if (info.direction == 'in') { $(document).stopTime("iwdlTimer"); $("#radarframe").attr("src", settings["radar"]); } }); $('#webcam').bind('pageAnimationEnd', function(event, info){ if (info.direction == 'in') { $(document).stopTime("iwdlTimer"); $("#webcamframe").attr("src", settings["webcam"]); } }); $("#tap_mapbutton").bind('click', function(event) { $(document).stopTime("iwdlTimer"); jQT.goTo("#map", "slideup"); }); $("#tap_radarbutton").bind('click', function(event) { $(document).stopTime("iwdlTimer"); jQT.goTo("#radar", "slideup"); }); $("#tap_webcambutton").bind('click', function(event) { $(document).stopTime("iwdlTimer"); jQT.goTo("#webcam", "slideup"); }); $("#tap_settings").bind('click', function(event) { $(document).stopTime("iwdlTimer"); jQT.goTo("#settings", "slideup"); }); $("#tap_about").bind('click', function(event) { $(document).stopTime("iwdlTimer"); jQT.goTo("#about", "pop"); }); setTexts('iwdl'); if (station.length >= 15) { $(".h1_station_name").css("font-size", 15); $(".h1_station_name").css("white-space", "normal"); } $(function(){ $('body').bind('turn', function(event, info){ // Change graph dimensions var curr = $(".current").attr("id"); switch (curr) { case "hour" : ; case "day" : ; case "week" : ; case "month" : dispTimeGraphs(curr.substr(0, 1)); break; case "graphs_1" : ; case "graphs_2" : ; case "graphs_3" : ; case "graphs_4" : ; case "graphs_5" : ; case "graphs_6" : ; case "graphs_7" : ; case "graphs_12" : ; case "graphs_79" : ; case "graphs_127": dispTypeGraphs(curr.replace(/graphs_/, "")); break; case "map" : if (info.orientation == "landscape") { var width = 520; var height = 285; $('#map_canvas').css("width",width+"px"); $('#map_canvas').css("height",height+"px"); $('#map-overflow').css("width",(width-40)+"px"); $('#map-overflow').css("height",(height-10)+"px"); } else { var width = 360; var height = 435; $('#map_canvas').css("width",width+"px"); $('#map_canvas').css("height",height+"px"); $('#map-overflow').css("width",(width-40)+"px"); $('#map-overflow').css("height",(height-10)+"px"); } break; } }); }); if (document.width > 480) { $('#screen_width').css('width', '480px'); $('#screen_width').css('margin-left', 'auto'); $('#screen_width').css('margin-right', 'auto'); var width = 520; var height = 285; $('#map_canvas').css("width",width+"px"); $('#map_canvas').css("height",height+"px"); $('#map-overflow').css("width",(width-40)+"px"); $('#map-overflow').css("height",(height-10)+"px"); } $('#map').bind('pageAnimationEnd', function(event, info){ if (info.direction == 'in') { localiser(); } }); if (theme == 'jqt') { $(".iwdl").css('color', '#c0c0c0'); $(".black").css('color', 'white'); $(".iwdl_bg .black").css("color", "black"); } // Set bg color $(".iwdl_bg").css("background", settings["bgcolor"]); $('#startup').css('display', 'none'); $('#jqt').css('display', 'block'); } function startIwdl() { loadjsfile("iwdl_settings.js"); jQT = new $.jQTouch({ addGlossToIcon: false, startupScreen: 'iwdl_startup.png', statusBar: 'black', }); $(document).ready(function(e){ if (!settings["lang"]) { alert("No iwdl_settings.js, please rename iwdl_settings.js.sample to iwdl_settings.js and make necessary changes"); } if (settings["clientraw_dir"].charAt(settings["clientraw_dir"].length - 1) != '/') settings["clientraw_dir"] += "/"; updateiWdl(); if (window.openDatabase) { // Open database jQT.dbOpen("iwdl", "1.0", "Settings", 5000); jQT.dbCreateTables({ "createTables" : [ { "table": "settings", "property": [ {"name": "setting", "type": "text"}, {"name": "value", "type": "text" } ] } ] } ); jQT.dbSelectAll("settings", function(result) { for (var i = 0; i < result.rows.length; i++) { var row = result.rows.item(i); settings[row['setting']] = row['value']; } finishStartup(); }); } else { finishStartup(); } }); } startIwdl();