--- /dev/null
+var device = {\r
+ getServiceObject: function(cal, datasource)\r
+ {\r
+ return {\r
+ IDataSource:\r
+ {\r
+ GetList: function(criteria)\r
+ {\r
+ if (criteria.Type == "CalendarEntry") {\r
+ var entries = [];\r
+ for(var i = 0; i < device.data.default.length; i++) {\r
+ var entry = device.data.default[i];\r
+ var searchText = criteria.Filter.SearchText;\r
+ var localId = criteria.Filter.LocalId;\r
+ var type = criteria.Filter.Type;\r
+ var include = true;\r
+ var startRange = criteria.Filter.StartRange;\r
+ var endRange = criteria.Filter.EndRange;\r
+ if (searchText != undefined && entry.Summary != undefined && entry.Summary.indexOf(searchText) == -1) {\r
+ include = false;\r
+ }\r
+ if (localId != undefined && entry.LocalId != undefined && entry.LocalId != localId) {\r
+ include = false;\r
+ }\r
+ if (type != undefined && entry.Type != undefined && type != entry.Type) {\r
+ include = false;\r
+ }\r
+ if (startRange != undefined && entry.StartTime != undefined && this.StringToDate(entry.StartTime) < startRange) {\r
+ include = false;\r
+ }\r
+ if (endRange != undefined && entry.EndTime != undefined && this.StringToDate(entry.EndTime) > endRange) {\r
+ include = false;\r
+ }\r
+ if (include)\r
+ entries.push(entry);\r
+ }\r
+ return {\r
+ ErrorCode: 0,\r
+ ErrorMessage: "",\r
+ ReturnValue:\r
+ {\r
+ data: entries,\r
+ dataPtr: 0,\r
+ getNext: function _getNext()\r
+ {\r
+ if (this.dataPtr < this.data.length)\r
+ return this.data[this.dataPtr++];\r
+ else\r
+ return undefined;\r
+ }\r
+ }\r
+ };\r
+ }\r
+ else if (criteria.Type == "Calendar") {\r
+ return {\r
+ ErrorCode: 0,\r
+ ErrorMessage: "",\r
+ ReturnValue:\r
+ {\r
+ data: [ "default" ],\r
+ dataPtr: 0,\r
+ getNext: function _getNext()\r
+ {\r
+ if (this.dataPtr < this.data.length)\r
+ return this.data[this.dataPtr++];\r
+ else\r
+ return undefined;\r
+ }\r
+ }\r
+ };\r
+ }\r
+ return null;\r
+ },\r
+ Add: function (criteria)\r
+ {\r
+ if (criteria.Type == "CalendarEntry") {\r
+ var cal = device.data.default;\r
+ var itemId = 0;\r
+ if (criteria.Item.id == undefined && criteria.Item.LocalId != undefined)\r
+ criteria.Item.id = criteria.Item.LocalId;\r
+ var overwriteExisting = false;\r
+ var existingIndex = -1;\r
+ if (criteria.Item.id != undefined || criteria.Item.LocalId != undefined) {\r
+ itemId = criteria.Item.id;\r
+ for(var i = 0; i < cal.length; i++) {\r
+ if (cal[i].id != undefined && cal[i].id == itemId) {\r
+ overwriteExisting = true;\r
+ existingIndex = i;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ else {\r
+ for(var i = 0; i < cal.length; i++) {\r
+ if (cal[i].id != undefined && cal[i].id == itemId) {\r
+ itemId++;\r
+ i = 0;\r
+ }\r
+ }\r
+ }\r
+ criteria.Item.id = itemId;\r
+ criteria.Item.LocalId = itemId;\r
+ if (criteria.Item.StartTime != undefined && criteria.Item.StartTime instanceof Date)\r
+ criteria.Item.StartTime = this.DateToString(criteria.Item.StartTime);\r
+ if (criteria.Item.EndTime != undefined && criteria.Item.EndTime instanceof Date)\r
+ criteria.Item.EndTime = this.DateToString(criteria.Item.EndTime);\r
+ if (overwriteExisting)\r
+ cal[existingIndex] = criteria.Item;\r
+ else \r
+ cal.push(criteria.Item);\r
+ return {\r
+ ErrorCode: 0,\r
+ ErrorMessage: ""\r
+ }\r
+ }\r
+ else {\r
+ return {\r
+ ErrorCode: 1,\r
+ ErrorMessage: "invalid citeria.Type"\r
+ }\r
+ }\r
+ },\r
+ Delete: function (criteria)\r
+ {\r
+ var cal = device.data.default;\r
+ for(var i = cal.length - 1; i >= 0; i--) {\r
+ if (criteria.Data != undefined && criteria.Data.IdList != undefined) {\r
+ for(var j = 0; j < criteria.Data.IdList.length; j++) {\r
+ if (criteria.Data.IdList[j] == cal[i].id) {\r
+ cal.splice(i, 1);\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ return {\r
+ ErrorCode: 0,\r
+ ErrorMessage: ""\r
+ }\r
+ },\r
+ RequestNotification: function(criteria, callback)\r
+ {\r
+ return {\r
+ ErrorCode: 0,\r
+ ErrorMessage: ""\r
+ }\r
+ },\r
+ Cancel: function(request)\r
+ {\r
+ return {\r
+ ErrorCode: 0,\r
+ ErrorMessage: ""\r
+ }\r
+ },\r
+ DateToString: function(date) {\r
+ // Wednesday, 26 April, 2012 23:…\r
+ var weekdays = [ "Sunday", "Monday", "Thuesday", "Wednesday", "Thursday", "Friday", "Saturday" ];\r
+ var months = [ "January", "Februrary", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ];\r
+ var hours = date.getHours(); if (hours < 10) hours = "0" + hours;\r
+ var minutes = date.getMinutes(); if (minutes < 10) minutes = "0" + minutes;\r
+ var seconds = date.getSeconds(); if (seconds < 10) seconds = "0" + seconds;\r
+ return weekdays[date.getDay()] + ", " + date.getDate() + " " + months[date.getMonth()] + " " + date.getFullYear() + ", " + hours + ":" + minutes + ":" + seconds;\r
+ },\r
+ StringToDate: function(string) {\r
+ var parts = string.replace(/,/g,'').replace(/ /g,' ').split(' ');\r
+ var months = [];\r
+ months["January"] = 0;\r
+ months["February"] = 1;\r
+ months["March"] = 2;\r
+ months["April"] = 3;\r
+ months["May"] = 4;\r
+ months["June"] = 5;\r
+ months["July"] = 6;\r
+ months["August"] = 7;\r
+ months["September"] = 8;\r
+ months["October"] = 9;\r
+ months["November"] = 10;\r
+ months["December"] = 11;\r
+ var weekdays = [];\r
+ weekdays["Sunday"] = 0;\r
+ weekdays["Monday"] = 1;\r
+ weekdays["Thuesday"] = 2;\r
+ weekdays["Wednesday"] = 3;\r
+ weekdays["Thursday"] = 4;\r
+ weekdays["Friday"] = 5;\r
+ weekdays["Saturday"] = 6;\r
+ var weekday = weekdays[parts[0]];\r
+ var day = Number(parts[1]);\r
+ var month = months[parts[2]];\r
+ var year = Number(parts[3]);\r
+ var timeParts = parts[4].split(':');\r
+ var hours = Number(timeParts[0]);\r
+ var minutes = Number(timeParts[1]);\r
+ var seconds = Number(timeParts[2]);\r
+ return new Date(year, month, day, hours, minutes, seconds);\r
+ },\r
+ }\r
+ }\r
+ },\r
+ data:\r
+ {\r
+ default: [ ]\r
+ },\r
+}\r
+\r
+device.data.default = [\r
+ {\r
+ id: 0,\r
+ LocalId: 0,\r
+ Type: "Meeting",\r
+ CalendarName: "default",\r
+ Summary: "summary",\r
+ Location: "location",\r
+ Status: undefined,\r
+ StartTime: device.getServiceObject().IDataSource.DateToString(new Date((new Date()).getTime() + 1000 * 60 * 1 * 1)),\r
+ EndTime: device.getServiceObject().IDataSource.DateToString(new Date((new Date()).getTime() + 1000 * 60 * 60 * 2)),\r
+ InstanceStartTime: undefined,\r
+ InstanceEndTime: undefined\r
+ },\r
+ {\r
+ id: 1,\r
+ LocalId: 1,\r
+ Type: "DayEvent",\r
+ CalendarName: "default",\r
+ Summary: "summary2",\r
+ Location: "location2",\r
+ Status: undefined,\r
+ StartTime: device.getServiceObject().IDataSource.DateToString(new Date((new Date()).getTime() + 1000 * 60 * 60 * 24)),\r
+ EndTime: device.getServiceObject().IDataSource.DateToString(new Date((new Date()).getTime() + 1000 * 60 * 60 * 24)),\r
+ InstanceStartTime: undefined,\r
+ InstanceEndTime: undefined\r
+ },\r
+ {\r
+ id: 2,\r
+ LocalId: 2,\r
+ Type: "DayEvent",\r
+ CalendarName: "default",\r
+ Summary: "summary3",\r
+ Location: "location3",\r
+ Status: undefined,\r
+ StartTime: device.getServiceObject().IDataSource.DateToString(new Date((new Date()).getTime() + 1000 * 60 * 60 * 24 * 2)),\r
+ EndTime: device.getServiceObject().IDataSource.DateToString(new Date((new Date()).getTime() + 1000 * 60 * 60 * 24 * 2)),\r
+ InstanceStartTime: undefined,\r
+ InstanceEndTime: undefined\r
+ },\r
+];\r
+\r
+window.menu = {\r
+ leftText: "undef",\r
+ leftCallback: undefined,\r
+ rightText: "undef",\r
+ rightCallback: undefined,\r
+ menuContent: [],\r
+ setLeftSoftkeyLabel: function(text, callback) {\r
+ if (text == "" && callback == null) {\r
+ text = "Menu";\r
+ callback = this.defaultLeftCallback;\r
+ }\r
+ this.leftText = text;\r
+ this.leftCallback = callback;\r
+ this.update();\r
+ },\r
+ setRightSoftkeyLabel: function(text, callback) {\r
+ if (text == "" && callback == null) {\r
+ text = "Back";\r
+ callback = this.defaultRightCallback;\r
+ }\r
+ this.rightText = text;\r
+ this.rightCallback = callback;\r
+ this.update();\r
+ },\r
+ defaultLeftCallback: function() {\r
+ },\r
+ defaultRightCallback: function() {\r
+ back();\r
+ },\r
+ clear: function() {\r
+ this.menuContent = [];\r
+ this.update();\r
+ },\r
+ append: function(arg1) {\r
+ this.menuContent[this.menuContent.length] = arg1;\r
+ this.update();\r
+ },\r
+ update: function() {\r
+ var div = document.getElementById("debug");\r
+ if (div == undefined) {\r
+ var body = document.getElementsByTagName('body')[0];\r
+ body.innerHTML += '<div id="debug">Debug DIV</div>';\r
+ div = document.getElementById('debug');\r
+ }\r
+ var left = this.leftCallback == this.defaultLeftCallback ? this.menuContent.join('<br />') : "";\r
+ div.innerHTML = '<div style="background-color:#a00000"><span onclick="window.menu.leftCallback()">' + this.leftText + "</span><br />" + left + '</div> <div style="background-color:#00a000" onclick="window.menu.rightCallback()">' + this.rightText + '</div>';\r
+ },\r
+}\r
+function MenuItem(text, id) {\r
+ this.text = text;\r
+ this.id = id;\r
+}\r
+MenuItem.prototype.onSelect = undefined;\r
+MenuItem.prototype.text = undefined;\r
+MenuItem.prototype.id = undefined;\r
+MenuItem.prototype.toString = function() {\r
+ return '<span style="padding-left:10px;" onclick="' + this.onSelect.name + '()">' + this.text + '</span>';\r
+}\r
+\r
+window.widget = {\r
+ onshow: null,\r
+ openApplication: function(appString, args) {\r
+ //alert("app '" + appString + "' with args '" + args + "' called");\r
+ },\r
+ prepareForTransition: function() {\r
+ },\r
+ performTransition: function() {\r
+ },\r
+ openURL: function(url) {\r
+ window.open(url);\r
+ },\r
+}\r
+\r