+function updateScreen()\r
+{\r
+ // check if opening fullscreen\r
+ if( window.innerHeight > 91 && mode == 0) {\r
+ mode = 1;\r
+ cacheEntriesHtml = '';\r
+ document.getElementById('body').style.backgroundImage = "";\r
+ showFullscreen();\r
+ }\r
+ else if (window.innerHeight <= 91 && mode != 0) {\r
+ mode = 0;\r
+ cacheEntriesHtml = '';\r
+ showHomescreen();\r
+ }\r
+ \r
+ if (mode == 0)\r
+ updateHomescreen();\r
+ else if (mode == 1)\r
+ updateFullscreen();\r
+}\r
+\r
+function launchCalendar()\r
+{\r
+ try {\r
+ widget.openApplication(config['calendarApp'].Value, "");\r
+ if (config['hideWidgetOnCalendarOpen'].Value)\r
+ window.close();\r
+ } catch(e) {\r
+ error('starting Calendar App');\r
+ return;\r
+ }\r
+}\r
+\r
+function init()\r
+{\r
+ console.info('New widget instance starting up...');\r
+ \r
+ try {\r
+ // call calendar service\r
+ if (device != "undefined")\r
+ calendarService = device.getServiceObject("Service.Calendar", "IDataSource");\r
+ else\r
+ throw('device object does not exist');\r
+ } catch(e) {\r
+ error('loading Calendar service: ' + e + ', line ' + e.line);\r
+ return;\r
+ }\r
+\r
+ loadSettings();\r
+ updateCssClasses();\r
+ collectLocales();\r
+ //updateData();\r
+ requestNotification();\r
+ window.setInterval('updateData()', 1000 * 60 * config['updateDataInterval'].Value);\r
+\r
+ mode = 0;\r
+ showHomescreen();\r
+ updateScreen();\r
+ if (config['useBackgroundImage'].Value)\r
+ // check for screen rotation every 1 secs\r
+ window.setInterval('updateScreen()', 1000 * 1);\r
+}\r
+\r
+function createMenu()\r
+{\r
+ window.menu.setLeftSoftkeyLabel("",null);\r
+ window.menu.setRightSoftkeyLabel("",null);\r
+ var id = 0;\r
+ var menuSettings = new MenuItem(getLocalizedText('menu.settings'), id++);\r
+ var menuCallApp = new MenuItem(getLocalizedText('menu.openCalendarApp'), id++);\r
+ var menuAbout = new MenuItem(getLocalizedText('menu.about'), id++);\r
+ menuSettings.onSelect = showSettings;\r
+ menuAbout.onSelect = showAbout;\r
+ menuCallApp.onSelect = launchCalendar;\r
+ window.menu.clear();\r
+ window.menu.append(menuCallApp);\r
+ window.menu.append(menuSettings);\r
+ window.menu.append(menuAbout); \r
+}\r
+\r
+function showSettings()\r
+{\r
+ mode = 2;\r
+ document.getElementById("homescreenView").style.display = "none";\r
+ document.getElementById("fullscreenView").style.display = "none";\r
+ document.getElementById("aboutView").style.display = "none";\r
+ document.getElementById("settingsView").style.display = "block";\r
+ document.onclick = null;\r
+ \r
+ window.menu.setLeftSoftkeyLabel(getLocalizedText('settings.save'), function()\r
+ {\r
+ for (var key in config) {\r
+ if (config[key].Type == 'String')\r
+ config[key].Value = document.forms[0].elements["settings." + key].value;\r
+ else if (config[key].Type == 'Int') {\r
+ config[key].Value = parseInt(document.forms[0].elements["settings." + key].value);\r
+ if (config[key].Value < 0)\r
+ config[key].Value = config[key].Default;\r
+ }\r
+ else if (config[key].Type == 'Bool')\r
+ config[key].Value = document.forms[0].elements["settings." + key].checked;\r
+ else if (config[key].Type == 'UID')\r
+ config[key].Value = parseInt(document.forms[0].elements["settings." + key].value);\r
+ else if (config[key].Type == 'Enum') {\r
+ config[key].Value = document.forms[0].elements["settings." + key].value;\r
+ if (config[key].ValidValues.indexOf(config[key].Value) == -1)\r
+ config[key].Value = config[key].Default;\r
+ }\r
+ }\r
+ \r
+ updateCssClasses();\r
+ \r
+ saveSettings();\r
+ \r
+ mode = 1;\r
+ showFullscreen();\r
+ });\r
+ window.menu.setRightSoftkeyLabel(getLocalizedText('settings.cancel'), function()\r
+ {\r
+ mode = 1;\r
+ showFullscreen();\r
+ });\r
+ \r
+ var settingsHtml = '<form>';\r
+ for (var key in config) {\r
+ if (config[key].Type == 'String')\r
+ settingsHtml += '<table><tr><td>' + getLocalizedText('settings.name.' + key) + '<br /><input class="textInput" name="settings.' + key + '" type="text" value="' + config[key].Value + '" /></td>' + printHintBox(getLocalizedText('settings.info.' + key)) + '<hr />';\r
+ else if (config[key].Type == 'Int')\r
+ settingsHtml += '<table><tr><td>' + getLocalizedText('settings.name.' + key) + '<br /><input class="textInput" name="settings.' + key + '" type="text" value="' + config[key].Value + '" /></td>' + printHintBox(getLocalizedText('settings.info.' + key)) + '<hr />';\r
+ else if (config[key].Type == 'Bool')\r
+ settingsHtml += '<table><tr><td>' + getLocalizedText('settings.name.' + key) + '<br /><input name="settings.' + key + '" type="checkbox" value="true" ' + (config[key].Value ? 'checked="checked"' : '') + '/></td>' + printHintBox(getLocalizedText('settings.info.' + key)) + '<hr />';\r
+ else if (config[key].Type == 'UID')\r
+ settingsHtml += '<table><tr><td>' + getLocalizedText('settings.name.' + key) + '<br /><input class="textInput" name="settings.' + key + '" type="text" value="0x' + config[key].Value.toString(16) + '" /></td>' + printHintBox(getLocalizedText('settings.info.' + key)) + '<hr />';\r
+ else if (config[key].Type == 'Enum') {\r
+ settingsHtml += '<table><tr><td>' + getLocalizedText('settings.name.' + key) + '<br /><select name="settings.' + key + '" size="1">';\r
+ for(var i = 0; i < config[key].ValidValues.length; i++)\r
+ settingsHtml += '<option label="' + config[key].ValidValues[i] + '"' + (config[key].Value == config[key].ValidValues[i] ? ' selected="selected"' : '') + '>' + config[key].ValidValues[i] + '</option>';\r
+ settingsHtml += '</select></div></td>' + printHintBox(getLocalizedText('settings.info.' + key)) + '<hr />';\r
+ }\r
+ }\r
+ settingsHtml += '<input name="reset" type="button" value="' + getLocalizedText('settings.restoreDefaults') + '" onclick="javascript:restoreDefaultSettings();showSettings();" />';\r
+ settingsHtml += '</form>';\r
+ document.getElementById("settingsList").innerHTML = settingsHtml;\r
+}\r
+\r
+function changeCssClass(classname, properties)\r
+{\r
+ for(var i = 0; i < document.styleSheets[0]['cssRules'].length; i++)\r
+ {\r
+ if (document.styleSheets[0]['cssRules'][i].selectorText == classname) {\r
+ document.styleSheets[0].deleteRule(i);\r
+ document.styleSheets[0].insertRule(classname + ' { ' + properties + ' }', document.styleSheets[0]['cssRules'].length);\r
+ break;\r
+ }\r
+ }\r
+}\r
+\r
+function updateCssClasses()\r
+{\r
+ for(var key in config) {\r
+ changeCssClass(getLocalizedText('settings.name.' + key), config[key].Value);\r
+ }\r
+}\r
+\r
+function restoreDefaultSettings()\r
+{\r
+ for (var key in config)\r
+ config[key].Value = config[key].Default;\r
+}\r
+\r
+function loadSettings()\r
+{\r
+ for (var key in config) {\r
+ if (widget.preferenceForKey(key)) {\r
+ if (config[key].Type == 'Int')\r
+ config[key].Value = Number(widget.preferenceForKey(key));\r
+ else if (config[key].Type == 'String')\r
+ config[key].Value = widget.preferenceForKey(key);\r
+ else if (config[key].Type == 'Bool')\r
+ config[key].Value = (widget.preferenceForKey(key) == 'true')\r
+ else if (config[key].Type == 'Enum')\r
+ config[key].Value = widget.preferenceForKey(key);\r
+ else if (config[key].Type == 'UID')\r
+ config[key].Value = Number(widget.preferenceForKey(key));\r
+ }\r
+ else\r
+ config[key].Value = config[key].Default;\r
+ console.info('Settings: ' + key + '=\'' + config[key].Value + '\'');\r
+ }\r
+}\r
+\r
+function saveSettings()\r
+{\r
+ for (var key in config) {\r
+ if (config[key].Type == 'Int')\r
+ widget.setPreferenceForKey(config[key].Value.toString(), key);\r
+ else if (config[key].Type == 'String')\r
+ widget.setPreferenceForKey(config[key].Value, key);\r
+ else if (config[key].Type == 'Bool')\r
+ widget.setPreferenceForKey(config[key].Value ? 'true' : 'false', key);\r
+ else if (config[key].Type == 'Enum')\r
+ widget.setPreferenceForKey(config[key].Value, key);\r
+ else if (config[key].Type == 'UID')\r
+ widget.setPreferenceForKey(config[key].Value.toString(), key);\r