+\r
+function showUpdate()\r
+{\r
+ mode = 4;\r
+ hideViews();\r
+ document.getElementById("updateView").style.display = "block";\r
+ document.onclick = null;\r
+ \r
+ window.menu.setLeftSoftkeyLabel(getLocalizedText('update.checknow'), function(){\r
+ checkForUpdate();\r
+ });\r
+ window.menu.setRightSoftkeyLabel(getLocalizedText('softkey.back'), function()\r
+ {\r
+ mode = 1;\r
+ showFullscreen();\r
+ });\r
+ \r
+ document.getElementById("currentVersion").innerHTML = getLocalizedText("update.current") + version;\r
+ checkForUpdate();\r
+}\r
+\r
+function checkForUpdate()\r
+{\r
+ // asynch XHR to server url\r
+ reqV = new XMLHttpRequest();\r
+ reqV.onreadystatechange = checkForUpdateCallback;\r
+ document.getElementById("updateDiv").innerHTML = getLocalizedText("update.checking");\r
+ reqV.open("GET", versionURL, true);\r
+ reqV.setRequestHeader( "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" ); // disable caching\r
+ reqV.send(null);\r
+}\r
+\r
+function checkForUpdateCallback()\r
+{ \r
+ if (reqV.readyState == 4) {\r
+ if (reqV.status == 200) {\r
+ var resultXml = reqV.responseText;\r
+ if (resultXml) {\r
+ var div = document.getElementById("tmp");\r
+ div.innerHTML = resultXml;\r
+ var newVersion = div.getElementsByTagName('version')[0].innerHTML;\r
+ var newVersionURL = div.getElementsByTagName('url')[0].innerHTML;\r
+ div.innerHTML = "";\r
+ if (version != newVersion) {\r
+ document.getElementById("updateDiv").innerHTML = getLocalizedText("update.download").replace(/%1/, newVersion).replace(/%2/, newVersionURL);\r
+ }\r
+ else {\r
+ document.getElementById("updateDiv").innerHTML = getLocalizedText("update.nonewversion");\r
+ }\r
+ }\r
+ }\r
+ else {\r
+ document.getElementById("updateDiv").innerHTML = getLocalizedText("update.error") + reqV.status + " " + reqV.responseText;\r
+ }\r
+ }\r
+}\r
+\r
+function hideViews()\r
+{\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 = "none";\r
+ document.getElementById("updateView").style.display = "none";\r
+}\r
+\r
+function listCalendars()\r
+{\r
+ try {\r
+ var criteria = {\r
+ Type:'Calendar', \r
+ Filter:{\r
+ DefaultCalendar: false\r
+ }\r
+ }\r
+ \r
+ var calendarsResult = calendarService.IDataSource.GetList(criteria);\r
+ if (calendarsResult.ErrorCode != 0)\r
+ throw("Error fetching list of calendars: " + calendarsResult.ErrorCode + ': ' + calendarsResult.ErrorMessage);\r
+ var calendarListIterator = calendarsResult.ReturnValue;\r
+ \r
+ var calendars = [];\r
+ var count = 0;\r
+ var item;\r
+ while (( item = calendarListIterator.getNext()) != undefined ) {\r
+ calendars[count++] = item;\r
+ }\r
+ console.info("Available Calendars: " + calendars.join(", "));\r
+ return calendars;\r
+ } catch(e) {\r
+ error('listing calendars:' + e + ', line ' + e.line);\r
+ return null;\r
+ }\r
+}\r
+\r
+function listToArray(list)\r
+{\r
+ var array = [];\r
+ var item;\r
+ while (( item = list.getNext()) != undefined ) {\r
+ array.push(item);\r
+ }\r
+ return array;\r
+}\r
+\r
+function sortCalendarEntries(a, b)\r
+{\r
+ var atime, btime;\r
+ \r
+ if (a['InstanceStartTime'] != null) {\r
+ atime = a['InstanceStartTime'];\r
+ }\r
+ else if (a['StartTime'] != null) {\r
+ atime = a['StartTime'];\r
+ }\r
+ else if (a['InstanceEndTime'] != null) {\r
+ atime = a['InstanceEndTime'];\r
+ }\r
+ else if (a['EndTime'] != null) {\r
+ atime = a['EndTime'];\r
+ }\r
+ \r
+ if (b['InstanceStartTime'] != null) {\r
+ btime = b['InstanceStartTime'];\r
+ }\r
+ else if (b['StartTime'] != null) {\r
+ btime = b['StartTime'];\r
+ }\r
+ else if (b['InstanceEndTime'] != null) {\r
+ btime = b['InstanceEndTime'];\r
+ }\r
+ else if (b['EndTime'] != null) {\r
+ btime = b['EndTime'];\r
+ }\r
+ \r
+ if (atime && btime) {\r
+ \r
+ atime = parseDate(atime);\r
+ btime = parseDate(btime);\r
+ \r
+ // sort by date & time\r
+ if (atime < btime) {\r
+ return -1;\r
+ }\r
+ else if (atime > btime) {\r
+ return 1;\r
+ }\r
+ // sort by type\r
+ else if (a['Type'] != b['Type']) {\r
+ if (a['Type'] < b['Type']) {\r
+ return -1;\r
+ }\r
+ else if (a['Type'] > b['Type']) {\r
+ return 1;\r
+ }\r
+ }\r
+ // sort by description\r
+ else if (a['Summary'] && b['Summary'] && a['Summary'] != b['Summary']) {\r
+ if (a['Summary'] < b['Summary']) {\r
+ return -1;\r
+ }\r
+ else if (a['Summary'] > b['Summary']) {\r
+ return 1;\r
+ }\r
+ } \r
+ }\r
+\r
+ return 0;\r
+}\r