diff --git a/.project b/.project
new file mode 100644
index 0000000..9dab2d1
--- /dev/null
+++ b/.project
@@ -0,0 +1,24 @@
+
+
+ CalendarWatch
+
+
+
+
+
+ json.validation.builder
+
+
+
+
+ org.tizen.web.project.builder.WebBuilder
+
+
+
+
+
+ json.validation.nature
+ org.eclipse.wst.jsdt.core.jsNature
+ org.tizen.web.project.builder.WebNature
+
+
diff --git a/.settings/.jsdtscope b/.settings/.jsdtscope
new file mode 100644
index 0000000..c487c06
--- /dev/null
+++ b/.settings/.jsdtscope
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.settings/org.eclipse.wst.css.core.prefs b/.settings/org.eclipse.wst.css.core.prefs
new file mode 100644
index 0000000..5ddc6bd
--- /dev/null
+++ b/.settings/org.eclipse.wst.css.core.prefs
@@ -0,0 +1,2 @@
+css-profile/=org.eclipse.wst.css.core.cssprofile.css3
+eclipse.preferences.version=1
diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.container b/.settings/org.eclipse.wst.jsdt.ui.superType.container
new file mode 100644
index 0000000..3bd5d0a
--- /dev/null
+++ b/.settings/org.eclipse.wst.jsdt.ui.superType.container
@@ -0,0 +1 @@
+org.eclipse.wst.jsdt.launching.baseBrowserLibrary
\ No newline at end of file
diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.name b/.settings/org.eclipse.wst.jsdt.ui.superType.name
new file mode 100644
index 0000000..05bd71b
--- /dev/null
+++ b/.settings/org.eclipse.wst.jsdt.ui.superType.name
@@ -0,0 +1 @@
+Window
\ No newline at end of file
diff --git a/.sign/.manifest.tmp b/.sign/.manifest.tmp
new file mode 100644
index 0000000..d1cc196
--- /dev/null
+++ b/.sign/.manifest.tmp
@@ -0,0 +1,46 @@
+.git/COMMIT_EDITMSG__DEL__bjCrGJK8/4D7VzNqTZZsI9xKb2hq32V62CMUF5gvH94=
+.git/HEAD__DEL__9vK5RfbEEbAro9qces6I3PcbavZbouDYmqgpAAQrWhA=
+.git/config__DEL__598udYWPl5YyXwt0g/7kjA4Zs8Rl4I/OpdKt0mvZQ3E=
+.git/description__DEL__hatsFj1DoX6pz3eIMIvKFGbxsKjRzJLibpv2PaQGKu4=
+.git/hooks/applypatch-msg.sample__DEL__AiNJeguLAzqlijpSG4YphpOGz3qw4vEBlj0yiqYhk/c=
+.git/hooks/commit-msg.sample__DEL__H3TV6SkpebVz69WXQdRsuT/zkazdCD00C5Q3B1PZJDc=
+.git/hooks/fsmonitor-watchman.sample__DEL__9IPZjlVDNG3iWkVWsl310pYOz/Dq6SVe2F+3DV0Ex3k=
+.git/hooks/post-update.sample__DEL__gXZa8trvMjBh3LxeYfwWSBy3SzusmtihdLGGUjWG9sU=
+.git/hooks/pre-applypatch.sample__DEL__4VxbRp6j4KaVvqbyyCvPjmKCEHSTnd2Ft34AB/8WVHU=
+.git/hooks/pre-commit.sample__DEL__EscjI1Ex8cVXbGUqwqCgB/JhqTwN3ERbHc7mzZjjB4g=
+.git/hooks/pre-push.sample__DEL__SxEZ4eE6ISVxl29K7neEfNvUCXhUbWJzpVfiOJgaQNE=
+.git/hooks/pre-rebase.sample__DEL__T+vOhneQBSM4B29OZsxH77FIedGAl9HWHIJhhZ6qp7M=
+.git/hooks/pre-receive.sample__DEL__pMPSuce7P9jRRBwxvU7nGlldZrRPz0ndsxAlIyAWmYk=
+.git/hooks/prepare-commit-msg.sample__DEL__6d3KpBif3dJe2X/Ix4nsp7bKFjkLI5KuMnbwyOGqRhk=
+.git/hooks/update.sample__DEL__dRwDcyACTsLuJ1fz/64LEK0slGNnaE5wWdTcl+rH5DE=
+.git/index__DEL__TK/H23tTQqVTSJKVCPeG6g41TYCihb8PYwBbJH/F37A=
+.git/info/exclude__DEL__ZnH+g7egfIky7okWTR8nk7IxgFjri5jcXAbuClo7DsE=
+.git/logs/HEAD__DEL__bYih6KVipjctLuJN3l3njrvQKFaPwb09aPygYyuUeRY=
+.git/logs/refs/heads/master__DEL__bYih6KVipjctLuJN3l3njrvQKFaPwb09aPygYyuUeRY=
+.git/logs/refs/remotes/origin/master__DEL__OSkjYKAs3wxO90SlSwQaxSX6WIejvo3yX2W25P28jSw=
+.git/objects/02/741fe0d44ace36d88f500de55fe02f60e39681__DEL__cVGnHJSbIxxTbHZ4cc0XEetbMGr4Ig04SwFvCJL0tcg=
+.git/objects/13/fb568ca97112e3039b47ab7b9f36de9834ee89__DEL__rqiQE/qsgBRiZw6iG+cFJxVCHRIhuay+VEK+82gvaFQ=
+.git/objects/1a/30a49ab1682a8c70f37f960b7d1871c5942eb9__DEL__cTC88UJJXLJyBu7pmRkB07i2eLJk4EVv/DBrMDlG2Jk=
+.git/objects/1c/1a4d080ef81238e544eab07ae38d6e727dba85__DEL__NCXGus1XG1CzGfD8cnKh9R6Yoh5qQibiIvC1KioagDU=
+.git/objects/53/f31f54130c9a3441480f9e416f805437fb71c9__DEL__TI9vZZsmF1Ydh6O/gd51GoLyXZZyto7wjobmKY2woQo=
+.git/objects/66/de0dcf1f16eb3dfe1aedf78790b4e002c08516__DEL__FZmqOATlAZ5v6hGivuWkZ9NLyIA0B464HQ9hvqMUJBQ=
+.git/objects/8a/1d8c688268b802bd5ad18a64b883016b132076__DEL__fB08qAMNyvrNiut/zN7hw0epaAbaQDnXxDBRQx7HGlE=
+.git/objects/90/a27f9cea6e8f02e05a8bbab5d14650e3e932af__DEL__lpDm120MOA6vW/mrh0cy1pu67SJ6dPu/cY8rN8I7xW8=
+.git/objects/99/96115961d2aa418fb03ff90d529f642f4f7261__DEL__3VGlqOkDSaru/bmv6eS/4byvPdKJeBDS6Bo/lnU2bgY=
+.git/objects/9f/8c12f57065dff219dd33568a55e81ffee69f4e__DEL__lf8xF9EWtMhpmIGzqX+k8LnCZI0pmzyvQrchmCzvxGg=
+.git/objects/d4/7f9cd915695b4798f907982d77646a99bf4264__DEL__N8tjv5j1qEgx6o08Q8GEEq+c5oVBme8ZkQ1esJ7fjTM=
+.git/objects/d6/45695673349e3947e8e5ae42332d0ac3164cd7__DEL__bK1/lEV5blLPpFrn/ZNVdLDE2RnlA4SnQhDpURW+znc=
+.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391__DEL__FkxfqAZ/rPGkPwnOPQ416/U6f1cj7L8VqGZ8/FPCb2w=
+.git/objects/f0/fc0dd5e890f0a3929c22ac364c71e6623f4e8e__DEL__zgSOtLXhZmKmL98vDoytepbOXYqk43npI3T5HsIbgjc=
+.git/refs/heads/master__DEL__2BJPCPMZXVZRVOjqfGUagO8zsHoriyvc5gElbkGHjts=
+.git/refs/remotes/origin/master__DEL__2BJPCPMZXVZRVOjqfGUagO8zsHoriyvc5gElbkGHjts=
+LICENSE.APLv2__DEL__z8d0m5b2O9McPEK1xHG/dWgUBT6EfBDz6wA0F7xSPTA=
+NOTICE__DEL__ijjaB8GEO5OJP/jK6n7Hr3vZFI9gy8ocoDhviViKNnU=
+README.md__DEL__47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=
+config.xml__DEL__Qkr7TJvy4gd86evi4H+4ktLvdr8FgmzvFv1ia8HsEC4=
+css/style.css__DEL__YCx4tiqoai276nR9sDZsPUcn0/z3Xi4XYMDXIcnGRhU=
+icon.png__DEL__kd617JYkX8IEUQERd72gL14zj6pgNVcKiSRAFQz6HX8=
+index.html__DEL__CdntWzqB8DQYZKIF68hQqqZVLQPbLRf1hXjozO+agxA=
+js/app.js__DEL__2gFp+jAYVOKvRYo3ToG5XA4Lqlc7WCz+hWeEaOghi+Q=
+version.txt__DEL__jFS/q38a6b0acUjq5B57Co9K03JuDKxw+COi1F255gw=
+author-signature.xml__DEL__BdT25/2Bg7qBl0PNBWAbDnA6ePRbfN8AwcXt5d8Nt/k=
diff --git a/.sign/author-signature.xml b/.sign/author-signature.xml
new file mode 100644
index 0000000..8649fa5
--- /dev/null
+++ b/.sign/author-signature.xml
@@ -0,0 +1,243 @@
+
+
+
+
+
+
+bjCrGJK8/4D7VzNqTZZsI9xKb2hq32V62CMUF5gvH94=
+
+
+
+9vK5RfbEEbAro9qces6I3PcbavZbouDYmqgpAAQrWhA=
+
+
+
+598udYWPl5YyXwt0g/7kjA4Zs8Rl4I/OpdKt0mvZQ3E=
+
+
+
+hatsFj1DoX6pz3eIMIvKFGbxsKjRzJLibpv2PaQGKu4=
+
+
+
+AiNJeguLAzqlijpSG4YphpOGz3qw4vEBlj0yiqYhk/c=
+
+
+
+H3TV6SkpebVz69WXQdRsuT/zkazdCD00C5Q3B1PZJDc=
+
+
+
+9IPZjlVDNG3iWkVWsl310pYOz/Dq6SVe2F+3DV0Ex3k=
+
+
+
+gXZa8trvMjBh3LxeYfwWSBy3SzusmtihdLGGUjWG9sU=
+
+
+
+4VxbRp6j4KaVvqbyyCvPjmKCEHSTnd2Ft34AB/8WVHU=
+
+
+
+EscjI1Ex8cVXbGUqwqCgB/JhqTwN3ERbHc7mzZjjB4g=
+
+
+
+SxEZ4eE6ISVxl29K7neEfNvUCXhUbWJzpVfiOJgaQNE=
+
+
+
+T+vOhneQBSM4B29OZsxH77FIedGAl9HWHIJhhZ6qp7M=
+
+
+
+pMPSuce7P9jRRBwxvU7nGlldZrRPz0ndsxAlIyAWmYk=
+
+
+
+6d3KpBif3dJe2X/Ix4nsp7bKFjkLI5KuMnbwyOGqRhk=
+
+
+
+dRwDcyACTsLuJ1fz/64LEK0slGNnaE5wWdTcl+rH5DE=
+
+
+
+TK/H23tTQqVTSJKVCPeG6g41TYCihb8PYwBbJH/F37A=
+
+
+
+ZnH+g7egfIky7okWTR8nk7IxgFjri5jcXAbuClo7DsE=
+
+
+
+bYih6KVipjctLuJN3l3njrvQKFaPwb09aPygYyuUeRY=
+
+
+
+bYih6KVipjctLuJN3l3njrvQKFaPwb09aPygYyuUeRY=
+
+
+
+OSkjYKAs3wxO90SlSwQaxSX6WIejvo3yX2W25P28jSw=
+
+
+
+cVGnHJSbIxxTbHZ4cc0XEetbMGr4Ig04SwFvCJL0tcg=
+
+
+
+rqiQE/qsgBRiZw6iG+cFJxVCHRIhuay+VEK+82gvaFQ=
+
+
+
+cTC88UJJXLJyBu7pmRkB07i2eLJk4EVv/DBrMDlG2Jk=
+
+
+
+NCXGus1XG1CzGfD8cnKh9R6Yoh5qQibiIvC1KioagDU=
+
+
+
+TI9vZZsmF1Ydh6O/gd51GoLyXZZyto7wjobmKY2woQo=
+
+
+
+FZmqOATlAZ5v6hGivuWkZ9NLyIA0B464HQ9hvqMUJBQ=
+
+
+
+fB08qAMNyvrNiut/zN7hw0epaAbaQDnXxDBRQx7HGlE=
+
+
+
+lpDm120MOA6vW/mrh0cy1pu67SJ6dPu/cY8rN8I7xW8=
+
+
+
+3VGlqOkDSaru/bmv6eS/4byvPdKJeBDS6Bo/lnU2bgY=
+
+
+
+lf8xF9EWtMhpmIGzqX+k8LnCZI0pmzyvQrchmCzvxGg=
+
+
+
+N8tjv5j1qEgx6o08Q8GEEq+c5oVBme8ZkQ1esJ7fjTM=
+
+
+
+bK1/lEV5blLPpFrn/ZNVdLDE2RnlA4SnQhDpURW+znc=
+
+
+
+FkxfqAZ/rPGkPwnOPQ416/U6f1cj7L8VqGZ8/FPCb2w=
+
+
+
+zgSOtLXhZmKmL98vDoytepbOXYqk43npI3T5HsIbgjc=
+
+
+
+2BJPCPMZXVZRVOjqfGUagO8zsHoriyvc5gElbkGHjts=
+
+
+
+2BJPCPMZXVZRVOjqfGUagO8zsHoriyvc5gElbkGHjts=
+
+
+
+z8d0m5b2O9McPEK1xHG/dWgUBT6EfBDz6wA0F7xSPTA=
+
+
+
+ijjaB8GEO5OJP/jK6n7Hr3vZFI9gy8ocoDhviViKNnU=
+
+
+
+47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=
+
+
+
+Qkr7TJvy4gd86evi4H+4ktLvdr8FgmzvFv1ia8HsEC4=
+
+
+
+YCx4tiqoai276nR9sDZsPUcn0/z3Xi4XYMDXIcnGRhU=
+
+
+
+kd617JYkX8IEUQERd72gL14zj6pgNVcKiSRAFQz6HX8=
+
+
+
+CdntWzqB8DQYZKIF68hQqqZVLQPbLRf1hXjozO+agxA=
+
+
+
+2gFp+jAYVOKvRYo3ToG5XA4Lqlc7WCz+hWeEaOghi+Q=
+
+
+
+jFS/q38a6b0acUjq5B57Co9K03JuDKxw+COi1F255gw=
+
+
+
+
+
+
+lpo8tUDs054eLlBQXiDPVDVKfw30ZZdtkRs1jd7H5K8=
+
+
+
+hWCBXJvB5j6n+lJNCtQpayOeXMb/jC2JwhYwJkV4hWsLgJjLUZmueVaxfoIdqg2ik+GmiVofzm64
+PBEDRFvQ9ZjOv0y4krO9vLXrUL9SutzK6JB7NlsBG0o+uM7W1lmclqdkfVxnMNJms1sQ54mSqIEM
+4/u9QMHjMNd1MN8l8TAFpQjPpzxgqeLXzWCOxUMT2CtTS+2UGB6rqC4w+qwys9YP53tGnqkbvg5d
+OIHfi7eZUsGIIKXULP9EY0REitnALIOzTbM+YNbg+wenwbpV4wHDJclFmCIHQnHzyE4yiMTACdMU
+FE5HagF7trht+SuLBjXMLaT9YYlqPror5+2o1Q==
+
+
+
+
+MIIDljCCAn6gAwIBAgIBATANBgkqhkiG9w0BAQsFADCBsDELMAkGA1UEBhMCS1IxFDASBgNVBAgM
+C1NvdXRoIEtvcmVhMQ4wDAYDVQQHDAVTdXdvbjEmMCQGA1UECgwdU2Ftc3VuZyBFbGVjdHJvbmlj
+cyBDby4sIEx0ZC4xDzANBgNVBAsMBk1vYmlsZTEgMB4GA1UEAwwXU2Ftc3VuZyBBdXRob3IgQ0Eg
+Q2xhc3MxIDAeBgkqhkiG9w0BCQEWEXRpemVuQHNhbXN1bmcuY29tMB4XDTIwMDExOTIyMjI1NVoX
+DTIxMDExODIyMjI1NVowUDEJMAcGA1UEBhMAMQkwBwYDVQQIEwAxCTAHBgNVBAcTADEJMAcGA1UE
+ChMAMQkwBwYDVQQLEwAxFzAVBgNVBAMTDlJhcGhhZWwgTWFlbmxlMIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEAoghbSffP9a1hhOdXMkS7Ubc0tYWoahtpUcbhZ+EOQ1lDn7tBZ4SZIGF4
+D9u7yqpIcBLg0eqvWz/GZ0Y3YmaFR0chspI+UIzY7nyF/jH8RV7TvvQKwjaKk75UeSHiW9vSi2fP
+arj0h7fmkKdA/qksmBXWllYXNR9TpOXubGXvUFZBb2feFpWDWKOf0mnmxOQkNIR5txePwtBlpzFF
+YWg7AGy2f4QernmyEurz6Rlpegzb+/jRCxx4XktpUOo/mYzQvhBu4REhbv80xWd+zm7YKSetFpD4
+4rxuhdAYB0I35/36LGTQvofqbwkj4/u+aWXRIgNa+qMLS0KWdjHSFMSn1QIDAQABoxowGDAJBgNV
+HRMEAjAAMAsGA1UdDwQEAwIHgDANBgkqhkiG9w0BAQsFAAOCAQEAbFJIOpO3y+ZKdfrnGIxHrHFZ
+QPki0k9nfnwf+yc++uMsTy3C9rsgyQda6FBKDDBXWnFgpVfqd+0cOhaxShMfzo5aw1CvOjj0RnjI
+8ysdkmRPNeILrR+29LmHyKbaoqFgYeMpQRJuI0MhEpjz/pRh4IfNkISO39953eeOHD+nQ/bAYiG/
+qjUfhUf7rd+DN7mUCIwRsNp692eX5uymBrDKUohbAtnny56NDoCIqvZTyoxIvJ8fpenxaU9jit5J
+nBZfD7oIe47IrV2Y3joMGGS8jZX7F0gmOpb+LPpnf4MLAwGktAmY3SNzbIuZ3e72hLtJbxRx0QNT
+ncSks0bDF2VBPQ==
+
+
+MIIDmzCCAoOgAwIBAgICYygwDQYJKoZIhvcNAQELBQAwXjEaMBgGA1UECgwRVGl6ZW4gQXNzb2Np
+YXRpb24xGjAYBgNVBAsMEVRpemVuIEFzc29jaWF0aW9uMSQwIgYDVQQDDBtUaXplbiBEZXZlbG9w
+ZXJzIFJvb3QgQ2xhc3MwHhcNMTMxMjMwMTUwNTU4WhcNMjgxMjI2MTUwNTU4WjCBsDELMAkGA1UE
+BhMCS1IxFDASBgNVBAgMC1NvdXRoIEtvcmVhMQ4wDAYDVQQHDAVTdXdvbjEmMCQGA1UECgwdU2Ft
+c3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4xDzANBgNVBAsMBk1vYmlsZTEgMB4GA1UEAwwXU2Ft
+c3VuZyBBdXRob3IgQ0EgQ2xhc3MxIDAeBgkqhkiG9w0BCQEWEXRpemVuQHNhbXN1bmcuY29tMIIB
+IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs+tRBgnKJs8j7BFg8/UftqbqTCYBV3Jrg1vK
+YvEuoTfntYz2uT2SO67raiCsZBAYvJnP54ExkdV++UgB7BDGniWz7bA1pYKak5kNK5jtLQt2DmZX
+3qgaLjMyoAz+293CxrBQO4h8NaTQGsO/WLpeQq2Y1ZEnHsq+EUn90H6Vm0HNW+KUayGPYdey+QSW
+iiv+L++TSuHrw0b16GYn83emiTnKTCmwpSOZ712Gy9kccl46/K4C8skEDVZjTk9s7r/MN9ZNZsqR
+brT/3AYcrF4ao8ipwlHK91WJBXXaiQICvp/dNfCSDWpTWy7z4XmgP16pSLnfgZlwEwWfiaavHRNM
+mwIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQB/ZlNMTzlIHqC3mFSq
+ptuQDZG96XnYqiWsbYkqGgNhcq6c/B3TQsg7Z8cxXY/eqJQDN5gbrIpiUugMRdSOpAEcxF3lwd5k
+oOzVLn+3I7x1k6Q4pZdi1fJx+1XjCtrQgPqtvwM77urNqIA1MSG6HUPxYAKkRKjWPsg346E8S/c1
+Hq4UVBYEFcDC467uvWtYjxjEVQTmNUaUcQLU9P6VEL4QW+t7V54IN6IJDr9HoOGSgApxIBDDU46b
+MUwl+yK0GPvhrviwfVPkfmys1hn5N+gWectQVpBB1gbfy2KlLCCvW/Kl1VmtYz1kWwTyG8bwcjE0
+GLkwKNN5lPod+FmMhuW9
+
+
+
+
+
\ No newline at end of file
diff --git a/.sign/signature1.xml b/.sign/signature1.xml
new file mode 100644
index 0000000..4e35166
--- /dev/null
+++ b/.sign/signature1.xml
@@ -0,0 +1,248 @@
+
+
+
+
+
+
+bjCrGJK8/4D7VzNqTZZsI9xKb2hq32V62CMUF5gvH94=
+
+
+
+9vK5RfbEEbAro9qces6I3PcbavZbouDYmqgpAAQrWhA=
+
+
+
+598udYWPl5YyXwt0g/7kjA4Zs8Rl4I/OpdKt0mvZQ3E=
+
+
+
+hatsFj1DoX6pz3eIMIvKFGbxsKjRzJLibpv2PaQGKu4=
+
+
+
+AiNJeguLAzqlijpSG4YphpOGz3qw4vEBlj0yiqYhk/c=
+
+
+
+H3TV6SkpebVz69WXQdRsuT/zkazdCD00C5Q3B1PZJDc=
+
+
+
+9IPZjlVDNG3iWkVWsl310pYOz/Dq6SVe2F+3DV0Ex3k=
+
+
+
+gXZa8trvMjBh3LxeYfwWSBy3SzusmtihdLGGUjWG9sU=
+
+
+
+4VxbRp6j4KaVvqbyyCvPjmKCEHSTnd2Ft34AB/8WVHU=
+
+
+
+EscjI1Ex8cVXbGUqwqCgB/JhqTwN3ERbHc7mzZjjB4g=
+
+
+
+SxEZ4eE6ISVxl29K7neEfNvUCXhUbWJzpVfiOJgaQNE=
+
+
+
+T+vOhneQBSM4B29OZsxH77FIedGAl9HWHIJhhZ6qp7M=
+
+
+
+pMPSuce7P9jRRBwxvU7nGlldZrRPz0ndsxAlIyAWmYk=
+
+
+
+6d3KpBif3dJe2X/Ix4nsp7bKFjkLI5KuMnbwyOGqRhk=
+
+
+
+dRwDcyACTsLuJ1fz/64LEK0slGNnaE5wWdTcl+rH5DE=
+
+
+
+TK/H23tTQqVTSJKVCPeG6g41TYCihb8PYwBbJH/F37A=
+
+
+
+ZnH+g7egfIky7okWTR8nk7IxgFjri5jcXAbuClo7DsE=
+
+
+
+bYih6KVipjctLuJN3l3njrvQKFaPwb09aPygYyuUeRY=
+
+
+
+bYih6KVipjctLuJN3l3njrvQKFaPwb09aPygYyuUeRY=
+
+
+
+OSkjYKAs3wxO90SlSwQaxSX6WIejvo3yX2W25P28jSw=
+
+
+
+cVGnHJSbIxxTbHZ4cc0XEetbMGr4Ig04SwFvCJL0tcg=
+
+
+
+rqiQE/qsgBRiZw6iG+cFJxVCHRIhuay+VEK+82gvaFQ=
+
+
+
+cTC88UJJXLJyBu7pmRkB07i2eLJk4EVv/DBrMDlG2Jk=
+
+
+
+NCXGus1XG1CzGfD8cnKh9R6Yoh5qQibiIvC1KioagDU=
+
+
+
+TI9vZZsmF1Ydh6O/gd51GoLyXZZyto7wjobmKY2woQo=
+
+
+
+FZmqOATlAZ5v6hGivuWkZ9NLyIA0B464HQ9hvqMUJBQ=
+
+
+
+fB08qAMNyvrNiut/zN7hw0epaAbaQDnXxDBRQx7HGlE=
+
+
+
+lpDm120MOA6vW/mrh0cy1pu67SJ6dPu/cY8rN8I7xW8=
+
+
+
+3VGlqOkDSaru/bmv6eS/4byvPdKJeBDS6Bo/lnU2bgY=
+
+
+
+lf8xF9EWtMhpmIGzqX+k8LnCZI0pmzyvQrchmCzvxGg=
+
+
+
+N8tjv5j1qEgx6o08Q8GEEq+c5oVBme8ZkQ1esJ7fjTM=
+
+
+
+bK1/lEV5blLPpFrn/ZNVdLDE2RnlA4SnQhDpURW+znc=
+
+
+
+FkxfqAZ/rPGkPwnOPQ416/U6f1cj7L8VqGZ8/FPCb2w=
+
+
+
+zgSOtLXhZmKmL98vDoytepbOXYqk43npI3T5HsIbgjc=
+
+
+
+2BJPCPMZXVZRVOjqfGUagO8zsHoriyvc5gElbkGHjts=
+
+
+
+2BJPCPMZXVZRVOjqfGUagO8zsHoriyvc5gElbkGHjts=
+
+
+
+z8d0m5b2O9McPEK1xHG/dWgUBT6EfBDz6wA0F7xSPTA=
+
+
+
+ijjaB8GEO5OJP/jK6n7Hr3vZFI9gy8ocoDhviViKNnU=
+
+
+
+47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=
+
+
+
+BdT25/2Bg7qBl0PNBWAbDnA6ePRbfN8AwcXt5d8Nt/k=
+
+
+
+Qkr7TJvy4gd86evi4H+4ktLvdr8FgmzvFv1ia8HsEC4=
+
+
+
+YCx4tiqoai276nR9sDZsPUcn0/z3Xi4XYMDXIcnGRhU=
+
+
+
+kd617JYkX8IEUQERd72gL14zj6pgNVcKiSRAFQz6HX8=
+
+
+
+CdntWzqB8DQYZKIF68hQqqZVLQPbLRf1hXjozO+agxA=
+
+
+
+2gFp+jAYVOKvRYo3ToG5XA4Lqlc7WCz+hWeEaOghi+Q=
+
+
+
+jFS/q38a6b0acUjq5B57Co9K03JuDKxw+COi1F255gw=
+
+
+
+
+
+
+u/jU3U4Zm5ihTMSjKGlGYbWzDfRkGphPPHx3gJIYEJ4=
+
+
+
+baeEoS0/YPlK5vQ93tyUXPFRTwudQXfuYMrDOjecfvUwyTnVUSVa8BJVDBc26Aikb471C0oGDsse
+lHWREIs1cInhHiDQnJoPbRlpUHxUBm44Sa33H4PDBwVG62i0P6iFL+7/C3UjN2tZ3ScC1Rczd9Lf
+eqAXXN1MZZJ53Avika2Pw7W7VAX8aADyj/Rz8dwdR82iVgPpS9VSz25dtynKh4O2zdgB82WB9iKA
+gL/z6PTmgLj/OjONHa8mtYMS/4JRtVqSqkLMaZjq+uYta2x/t1V4+HBvEevVAZsw4v9+4cBCQ2GD
+hp14oWu8cWbyKlTg7J0uou51rBfuWBhOhQ6TEA==
+
+
+
+
+MIID3zCCAsegAwIBAgIBZTANBgkqhkiG9w0BAQsFADCBnjELMAkGA1UEBhMCS1IxFDASBgNVBAgM
+C1NvdXRoIEtvcmVhMQ4wDAYDVQQHDAVTdXdvbjEmMCQGA1UECgwdU2Ftc3VuZyBFbGVjdHJvbmlj
+cyBDby4sIEx0ZC4xDzANBgNVBAsMBk1vYmlsZTEwMC4GA1UEAwwnU2Ftc3VuZyBUaXplbiBERVZF
+TE9QRVIgUHVibGljIENBIENsYXNzMB4XDTIwMDExOTIyMjQxNFoXDTIxMDExODIyMjQxNFowbTER
+MA8GA1UEAwwIVGl6ZW5TREsxCTAHBgNVBAsMADEJMAcGA1UECgwAMQkwBwYDVQQHDAAxCTAHBgNV
+BAgMADEJMAcGA1UEBhMAMSEwHwYJKoZIhvcNAQkBFhJyYXBoYWVsQG1hZW5sZS5uZXQwggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCmZiUK1d+T1xaUeuT5/7Hcezv5QrRAE+tEcVkYv/DR
+1NGVgmR1wFKiJiEkFAWIAilpOGO3ZoOBakTQhxt7sQpJ9fFIepv9sHvKyQ2HB2YLHwhrKdSRnvD5
+WytJDwK+W3nQwLXB/WR37AfoP0EofOkKXmv7rdoaHfUNPezb89S66m89i3TeTNeuDurp4VbBD35T
+NunG/jHOXz3/nw5nclt2ue/MCOyru5saHYLJ/xqUMYp70/Jy4El7XIVLsJGx8nIFWf3ZYz5vWXa9
+CS4sKuAmqKhGVvtoeWqYjEfXkzVTPpPMjaymOWzLeavhBRs7BI7WqQz/VHi6vGb+qmbUl0zzAgMB
+AAGjWDBWMFQGA1UdEQRNMEuGFFVSTjp0aXplbjpwYWNrYWdlaWQ9hjNVUk46dGl6ZW46ZGV2aWNl
+aWQ9Mi4wI2hocHR4Q1o0aUxiUkZMamUzNGhkU1lyOFpVdz0wDQYJKoZIhvcNAQELBQADggEBAHC3
+mPS4MKqVEWK3jTA7UIRJy9ag14ZGhzvgQeGpPkpr9boJACYsU/nYYwUmn2FCJ3f2D6OSlgx6bSIy
+KSnO1SgT+wHBMO53XJjiE8fzZesBVSwgp15/oLOed80sa15XEGHclgTL5z0JWy/EMKTGbd/0r6sa
+qfZASlnU6AR+IToDDzj0oaeBMvVvjF54tQBFg7Mp3i9E06qlDo/MSKxI0fXuQg4KiNW6gHu3CVTt
+wMRKvUjFKevZpVhn/GeZxAOa9Shnaq0iyS7Mwj31URMOGhj2p+4BYfH1rx+4nW7euVYje5N/MnZh
+8OIcSt8/G75+1MHMLRcSHEuHoZc0Cxi3ot0=
+
+
+MIIDuzCCAqOgAwIBAgICL+cwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAktSMRQwEgYDVQQI
+DAtTb3V0aCBLb3JlYTEOMAwGA1UEBwwFU3V3b24xJjAkBgNVBAoMHVNhbXN1bmcgRWxlY3Ryb25p
+Y3MgQ28uLCBMdGQuMTIwMAYDVQQDDClTYW1zdW5nIFRpemVuIERFVkVMT1BFUiBQdWJsaWMgUm9v
+dCBDbGFzczAeFw0xMzEyMzAxNTAxNDdaFw0yODEyMjYxNTAxNDdaMIGeMQswCQYDVQQGEwJLUjEU
+MBIGA1UECAwLU291dGggS29yZWExDjAMBgNVBAcMBVN1d29uMSYwJAYDVQQKDB1TYW1zdW5nIEVs
+ZWN0cm9uaWNzIENvLiwgTHRkLjEPMA0GA1UECwwGTW9iaWxlMTAwLgYDVQQDDCdTYW1zdW5nIFRp
+emVuIERFVkVMT1BFUiBQdWJsaWMgQ0EgQ2xhc3MwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQCkqW9d0zO5NFOc7u164DKe9Yx+yEgUnsbhnJasqHaqT71qaMxyCOjyysZi7gGycDcgmLcU
+tr2wSMTGWPibK8SrJ8bV/J1cy9nTpljM3s+lbPIVVxZeufhJkU79tXImHLolERd0vui+rj0Xpd9O
+zlyNTRt0+PWVT1taWcbfHL7pUD25hMkTc8C3bC+dUoT1/RhCkXgmUvIor3EnnU0rBtAl4qNtg5y1
+7RLT8dyicieAHCcW923YC/ngMZxnBjbL2Ht1RBUvrL6K3X5+l0VeF4qC3g7TKm/a/SGjq12ZD4sc
+7rglzjSNlTVSGag6/2WkqxE6HheEBWaloYOdauzwydFNAgMBAAGjEDAOMAwGA1UdEwQFMAMBAf8w
+DQYJKoZIhvcNAQELBQADggEBAG88wKjKeTbj5I6wMEvRihd+gWrESJX3bXUSlHWjUfYKcvg3GzM9
+cdooscqJdYgN8ezQuYiJQRk7BaPHSlPGkchsPUjvSM6WvIn9IT+VsEuVBrZNbZMSv6lM6wNig3TE
+h2OxFTW6Bt8mCZB74EP2wb+39Fr5aJwWvmkxQjct3/O+GYPQhe0Lu1qpbbMhzafYYybSmO+om02V
+cTWyJ/vtLUNyGfN7aHyBm6PFE5piAfpBaO9Az+zWil1HOsnzu1tGGnyV6IzQ/UiIo5P2sD8I5lEO
+Xdf9Eicy9y5z2Ci2zrmDcAGWL8o5wOWrCqML2ijximFzyQ/swlMC9xBIX9RCFws=
+
+
+
+
+
\ No newline at end of file
diff --git a/.tproject b/.tproject
new file mode 100644
index 0000000..7ca3e1f
--- /dev/null
+++ b/.tproject
@@ -0,0 +1,11 @@
+
+
+
+
+ wearable-4.0
+
+
+
+
+
+
diff --git a/CalendarWatch.wgt b/CalendarWatch.wgt
index 13fb568..a55db3f 100644
Binary files a/CalendarWatch.wgt and b/CalendarWatch.wgt differ
diff --git a/config.xml b/config.xml
index 9996115..9f29e0d 100644
--- a/config.xml
+++ b/config.xml
@@ -10,5 +10,7 @@
+
+
diff --git a/js/app.js b/js/app.js
index 9f8c12f..4ab357c 100644
--- a/js/app.js
+++ b/js/app.js
@@ -14,6 +14,9 @@
* limitations under the License.
*/
+var events;
+var eventsTimeStamp = 0;
+
(function() {
var canvasLayout,
canvasContent,
@@ -27,12 +30,34 @@
xhr.open('GET', path, true);
xhr.responseType = 'blob';
xhr.onload = function(e) {
- console.log("status " + this.status);
if (this.status == 0) {
var file = new File([this.response], 'temp');
var fileReader = new FileReader();
fileReader.addEventListener('load', function(){
- console.log(fileReader.result);
+ events = JSON.parse(fileReader.result);
+
+ var onError = function(e) {
+ console.log('Error!' + e.message);
+ };
+
+ var onResolveSuccess = function(dir) {
+ var onListFilesSuccess = function(files) {
+ files.forEach(function(file) {
+ if (!file.isDirectory) {
+ dir.deleteFile(file.fullPath, onDeleteSuccess, onError);
+ }
+ });
+ };
+
+ dir.listFiles(onListFilesSuccess, onError);
+ };
+
+ var onDeleteSuccess = function() {};
+
+ tizen.filesystem.resolve('/opt/usr/media/Downloads', onResolveSuccess, onError);
+
+
+
});
fileReader.readAsText(file);
}
@@ -41,7 +66,7 @@
}
function getJSON() {
- var downloadRequest = new tizen.DownloadRequest('http://download.tizen.org/tools/README.txt', 'downloads');
+ var downloadRequest = new tizen.DownloadRequest('http://raphael.maenle.net/calendarevents.json', 'downloads');
tizen.systeminfo.getPropertyValue('NETWORK', function(networkInfo) {
if (networkInfo.networkType === 'NONE') {
console.log('Network connection is not available.Download is not possible.');
@@ -51,9 +76,7 @@
var listener = {
/* When the download progresses (interval is platform-dependent) */
- onprogress: function(id, receivedSize, totalSize) {
- console.log('Received with id: ' + id + ', ' + receivedSize + '/' + totalSize);
- },
+ onprogress: function(id, receivedSize, totalSize) {},
/* When the user pauses the download */
onpaused: function(id) {
@@ -68,7 +91,6 @@
/* When the download is completed */
oncompleted: function(id, fullPath) {
console.log('Completed with id: ' + id + ', full path: ' + fullPath);
-
readJSON(fullPath);
},
@@ -77,10 +99,7 @@
console.log('Failed with id: ' + id + ', error name: ' + error.name);
}
};
- console.log("starting download");
downloadId = tizen.download.start(downloadRequest, listener);
- console.log(tizen.download.getState(downloadId));
- console.log("done");
}
/**
@@ -108,17 +127,27 @@
* @param {number} radius - the radius of the circle
* @param {string} color - the color of the circle
*/
- function renderArc(context, center, radius, color, startAngle, endAngle) {
+ function renderArc(context, center, radius, color, startAngle, endAngle, hardStart, hardStop) {
+
+ if(hardStart == undefined)
+ hardStart = false;
+ if(hardStop == undefined)
+ hardStop= false;
+
context.save();
context.beginPath();
seperation = 5;
- startAngle += seperation;
+ if(!hardStart)
+ startAngle += seperation;
+
if(startAngle >= 360)
startAngle -= 360;
- endAngle -= seperation;
+ if(!hardStop)
+ endAngle -= seperation;
+
if(endAngle<0)
endAngle += 360;
context.arc(center.x, center.y, radius, startAngle * Math.PI / 180., endAngle * Math.PI / 180.);
@@ -128,8 +157,10 @@
context.stroke();
context.restore();
- renderCircle(context, polToCart(radius, startAngle), 9, color);
- renderCircle(context, polToCart(radius, endAngle), 9, color);
+ if(!hardStart)
+ renderCircle(context, polToCart(radius, startAngle), 9, color);
+ if(!hardStop)
+ renderCircle(context, polToCart(radius, endAngle), 9, color);
}
function polToCart(radius, angle) {
@@ -141,7 +172,23 @@
}
function hourToAngle(hour) {
+ if(hour >= 18)
+ hour -= 18;
+ else
+ hour += 6;
+ angle = (hour) * 15;
+ return angle;
+ }
+
+ function minuteToAngle(minute) {
+ if(minute >= 15)
+ minute -= 15;
+ else
+ minute += 45;
+ angle = (minute / 60) * 360;
+
+ return angle;
}
/**
@@ -173,6 +220,29 @@
context.closePath();
context.restore();
}
+
+ /**
+ * Renders the 24h sun around the watch
+ */
+ function renderSun(date, hour, minute, second) {
+
+ if(hour > 6 && hour < 18)
+ sunColor = "#FFD700";
+ else {
+ sunColor = "#C0C0C0"
+ }
+
+ sunDistance = document.body.clientWidth / 2 - 60;
+ renderCircle(ctxContent, polToCart(sunDistance, hourToAngle(hour + minute / 60)), 16, sunColor);
+ }
+
+ function renderEarth(date, minute, second) {
+
+ earthColor = "#0077BE";
+ earthDistance = document.body.clientWidth / 2 - 120;
+ renderCircle(ctxContent, polToCart(earthDistance, minuteToAngle(minute + second / 60)), 10, earthColor);
+ }
+
/**
* Renders text at a specific center, radius, and color
@@ -234,7 +304,8 @@
renderNeedle(ctxLayout, angle, 0.7, 0.945, 10, "#c4c4c4");
}
*/
- renderText(ctxLayout, "TIZEN WATCH", center.x, center.y - (watchRadius * 0.4), 25, "#999999");
+
+ // renderText(ctxLayout, "TIZEN WATCH", center.x, center.y - (watchRadius * 0.4), 25, "#999999");
}
/**
@@ -250,38 +321,104 @@
// Clear canvas
ctxContent.clearRect(0, 0, ctxContent.canvas.width, ctxContent.canvas.height);
-
+
// Draw the hour needle
- renderNeedle(ctxContent, Math.PI * (((hour + minute / 60) / 6) - 0.5), 0, 0.50, 3, "#454545");
-
+ renderSun(date, hour, minute, second);
// Draw the minute needle
- renderNeedle(ctxContent, Math.PI * (((minute + second / 60) / 30) - 0.5), 0, 0.70, 3, "#454545");
+
+ renderEarth(ctxContent, minute, second);
+ // renderNeedle(ctxContent, Math.PI * (((minute + second / 60) / 30) - 0.5), 0, 0.70, 3, "#454545");
// Draw the minute/hour circle
// renderCircle(ctxContent, center, 8, "#454545");
- thickness = 18;
- edge = document.body.clientWidth / 2 - thickness / 2 - 2;
- renderArc(ctxContent, center, edge, "#808080", 75, 195); // sleep
- renderArc(ctxContent, center, edge, "#FF0000", 210, 277.5); // work
- renderArc(ctxContent, center, edge, "#FFFF00", 277.5, 292.5); // lunch
- renderArc(ctxContent, center, edge, "#FF0000", 292.5, 352.5); // work
-
// Draw the second needle
- ctxContent.shadowOffsetX = 4;
- ctxContent.shadowOffsetY = 4;
- renderNeedle(ctxContent, Math.PI * ((second / 30) - 0.5), -0.10, 0.85, 1, "#c4c4c4");
+ // ctxContent.shadowOffsetX = 4;
+ // ctxContent.shadowOffsetY = 4;
+ // renderNeedle(ctxContent, Math.PI * ((second / 30) - 0.5), -0.10, 0.85, 1, "#c4c4c4");
// Draw the second circle
- ctxContent.shadowOffsetX = 0;
- ctxContent.shadowOffsetY = 0;
- renderCircle(ctxContent, center, 5, "#c4c4c4");
+ // ctxContent.shadowOffsetX = 0;
+ // ctxContent.shadowOffsetY = 0;
+ // renderCircle(ctxContent, center, 5, "#c4c4c4");
// Draw the center circle
- renderCircle(ctxContent, center, 2, "#454545");
+ // renderCircle(ctxContent, center, 2, "#454545");
// Draw the text for date
- renderText(ctxContent, date, center.x, center.y + (watchRadius * 0.5), 25, "#999999");
+ // renderText(ctxContent, date, center.x, center.y + (watchRadius * 0.5), 25, "#999999");
+
+ if(events == null)
+ return;
+
+ thickness = 18;
+ edge = document.body.clientWidth / 2 - thickness / 2 - 2;
+
+ for(var event in events.events){
+
+ var startedBeforeToday = false;
+ var endsAfterToday = false;
+ var e = events.events[event];
+
+ // check if not today
+ if(e.startDateTime.date.year != tizen.time.getCurrentDateTime().getFullYear() ||
+ e.startDateTime.date.month != tizen.time.getCurrentDateTime().getMonth() + 1 ||
+ e.startDateTime.date.day != tizen.time.getCurrentDateTime().getDate()){
+
+ // if not today, check if it is an earlier event
+ if(e.startDateTime.date.year < tizen.time.getCurrentDateTime().getFullYear())
+ startedBeforeToday = true;
+ else if(e.startDateTime.date.month < tizen.time.getCurrentDateTime().getMonth() + 1)
+ startedBeforeToday = true;
+ else if(e.startDateTime.date.day < tizen.time.getCurrentDateTime().getDate())
+ startedBeforeToday = true;
+ else
+ continue;
+ }
+
+ // check if not today
+ if(e.stopDateTime.date.year != tizen.time.getCurrentDateTime().getFullYear() ||
+ e.stopDateTime.date.month != tizen.time.getCurrentDateTime().getMonth() + 1 ||
+ e.stopDateTime.date.day != tizen.time.getCurrentDateTime().getDate()){
+
+ // if not check if later date
+ if(e.startDateTime.date.year > tizen.time.getCurrentDateTime().getFullYear())
+ endsAfterToday = true;
+ else if(e.startDateTime.date.month > tizen.time.getCurrentDateTime().getMonth() + 1)
+ endsAfterToday = true;
+ else if(e.startDateTime.date.day > tizen.time.getCurrentDateTime().getDate())
+ endsAfterToday = true;
+ else
+ continue;
+ }
+
+ if(startedBeforeToday && endsAfterToday)
+ continue;
+
+ var startTime = 0;
+ if(!startedBeforeToday)
+ startTime = e.startDateTime.time.hour + e.startDateTime.time.minute / 60;
+
+ var stopTime = 0;
+ if(!endsAfterToday)
+ stopTime = e.stopDateTime.time.hour + e.stopDateTime.time.minute / 60;
+
+ renderArc(ctxContent, center, edge, e.color, hourToAngle(startTime), hourToAngle(stopTime), startedBeforeToday, endsAfterToday);
+ }
+
+ }
+
+ function updateCalendar(offset_ms) {
+ var d = new Date();
+ var currentTime = d.getTime();
+ console.log("current Time: " + currentTime);
+ if(eventsTimeStamp + offset_ms < currentTime){
+ console.log("updating Events");
+ getJSON();
+ eventsTimeStamp = currentTime;
+ }
+
+
}
/**
@@ -337,6 +474,7 @@
// Update the content of the watch every second
setInterval(function() {
drawWatchContent();
+ updateCalendar(60000);
}, 1000);
}