summaryrefslogtreecommitdiff
path: root/frontend/gamma/js/Clipperz/PM/UI/Mobile/Controllers/MainController.js
Unidiff
Diffstat (limited to 'frontend/gamma/js/Clipperz/PM/UI/Mobile/Controllers/MainController.js') (more/less context) (ignore whitespace changes)
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Mobile/Controllers/MainController.js165
1 files changed, 87 insertions, 78 deletions
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Mobile/Controllers/MainController.js b/frontend/gamma/js/Clipperz/PM/UI/Mobile/Controllers/MainController.js
index 9951f44..245874a 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Mobile/Controllers/MainController.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Mobile/Controllers/MainController.js
@@ -1,381 +1,390 @@
1/* 1/*
2 2
3Copyright 2008-2013 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz, the online password manager. 5This file is part of Clipperz, the online password manager.
6For further information about its features and functionalities please 6For further information about its features and functionalities please
7refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
8 8
9* Clipperz is free software: you can redistribute it and/or modify it 9* Clipperz is free software: you can redistribute it and/or modify it
10 under the terms of the GNU Affero General Public License as published 10 under the terms of the GNU Affero General Public License as published
11 by the Free Software Foundation, either version 3 of the License, or 11 by the Free Software Foundation, either version 3 of the License, or
12 (at your option) any later version. 12 (at your option) any later version.
13 13
14* Clipperz is distributed in the hope that it will be useful, but 14* Clipperz is distributed in the hope that it will be useful, but
15 WITHOUT ANY WARRANTY; without even the implied warranty of 15 WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
17 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
18 18
19* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
20 License along with Clipperz. If not, see http://www.gnu.org/licenses/. 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
21 21
22*/ 22*/
23 23
24Clipperz.Base.module('Clipperz.PM.UI.Mobile.Controllers'); 24Clipperz.Base.module('Clipperz.PM.UI.Mobile.Controllers');
25 25
26Clipperz.PM.UI.Mobile.Controllers.MainController = function() { 26Clipperz.PM.UI.Mobile.Controllers.MainController = function() {
27 // this._jQTouch = null; 27 // this._jQTouch = null;
28 this._user = null; 28 this._user = null;
29 this._proxy = null; 29 this._proxy = null;
30 // this._overlay = null;
30 this._loginForm = null; 31 this._loginForm = null;
31 this._cardList = null; 32 this._cardList = null;
32 this._cardDetail= null; 33 this._cardDetail= null;
34 this._preferences= null;
33 35
34 return this; 36 return this;
35} 37}
36 38
37MochiKit.Base.update(Clipperz.PM.UI.Mobile.Controllers.MainController.prototype, { 39MochiKit.Base.update(Clipperz.PM.UI.Mobile.Controllers.MainController.prototype, {
38 40
39 'toString': function () { 41 'toString': function () {
40 return "Clipperz.PM.UI.Mobile.Controllers.MainController"; 42 return "Clipperz.PM.UI.Mobile.Controllers.MainController";
41 }, 43 },
42 44
43 //------------------------------------------------------------------------- 45 //-------------------------------------------------------------------------
44 46
45 'user': function () { 47 'user': function () {
46 return this._user; 48 return this._user;
47 }, 49 },
48 50
49 'setUser': function (aValue) { 51 'setUser': function (aValue) {
50 this._user = aValue; 52 this._user = aValue;
51 }, 53 },
52 54
53 //-------------------------------------------------------------------------
54/*
55 'jQTouch': function () {
56 return this._jQTouch;
57 },
58
59 'setJQTouch': function (aValue) {
60 this._jQTouch = aValue;
61 },
62*/
63 //========================================================================= 55 //=========================================================================
64 56
65 'run': function () { 57 'run': function () {
66 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'doLogin', MochiKit.Base.method(this, 'doLogin')); 58 vardefaultPageStructure;
67 Clipperz.DOM.Helper.overwrite(MochiKit.DOM.currentDocument().body, {tag:'div', id:'jqt', children:[ 59
68 {tag:'div', id:'loginForm'}, 60 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'doLogin', MochiKit.Base.method(this, 'doLogin'));
69 {tag:'div', id:'cardList'}, 61 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'showPreferences',MochiKit.Base.method(this, 'showPreferences'));
70 {tag:'div', id:'cardDetail'}, 62
71 {tag:'div', id:'preferences'} 63 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'savePreferences',MochiKit.Base.method(this, 'savePreferences'));
72 ]}); 64 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'back', MochiKit.Base.method(this, 'back'));
73 65
66 defaultPageStructure = [
67 {tag:'div', 'data-role':'header', 'data-position':'fixed', children:[
68 {tag:'h1', html:'clipperz'}
69 ]},
70 {tag:'div', 'data-role':'content'}
71 ];
72 Clipperz.DOM.Helper.insertAfter(MochiKit.DOM.getElement('loadingPage'), [
73 {tag:'div', 'data-role':'page', id:'loginPage', children:defaultPageStructure},
74 {tag:'div', 'data-role':'page', id:'cardListPage', children:defaultPageStructure},
75 {tag:'div', 'data-role':'page', id:'cardDetailPage',children:defaultPageStructure},
76 {tag:'div', 'data-role':'page', id:'preferencesPage',children:defaultPageStructure}
77 ])
78 // $.mobile.initializePage();
74 this.showLoginForm(); 79 this.showLoginForm();
75
76 // this.initjQTouch();
77
78
79 // this.showAddToHomeScreenBaloon();
80 // this.selectInitialProxy();
81 },
82/*
83 'initjQTouch': function () {
84 var jqt;
85
86 jqt = new $.jQTouch({
87 icon: 'data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAHIAAAByCAIAAAAAvxIqAAAD8GlDQ1BJQ0MgUHJvZmlsZQAAKJGNVd1v21QUP4lvXKQWP6Cxjg4Vi69VU1u5GxqtxgZJk6XpQhq5zdgqpMl1bhpT1za2021Vn/YCbwz4A4CyBx6QeEIaDMT2su0BtElTQRXVJKQ9dNpAaJP2gqpwrq9Tu13GuJGvfznndz7v0TVAx1ea45hJGWDe8l01n5GPn5iWO1YhCc9BJ/RAp6Z7TrpcLgIuxoVH1sNfIcHeNwfa6/9zdVappwMknkJsVz19HvFpgJSpO64PIN5G+fAp30Hc8TziHS4miFhheJbjLMMzHB8POFPqKGKWi6TXtSriJcT9MzH5bAzzHIK1I08t6hq6zHpRdu2aYdJYuk9Q/881bzZa8Xrx6fLmJo/iu4/VXnfH1BB/rmu5ScQvI77m+BkmfxXxvcZcJY14L0DymZp7pML5yTcW61PvIN6JuGr4halQvmjNlCa4bXJ5zj6qhpxrujeKPYMXEd+q00KR5yNAlWZzrF+Ie+uNsdC/MO4tTOZafhbroyXuR3Df08bLiHsQf+ja6gTPWVimZl7l/oUrjl8OcxDWLbNU5D6JRL2gxkDu16fGuC054OMhclsyXTOOFEL+kmMGs4i5kfNuQ62EnBuam8tzP+Q+tSqhz9SuqpZlvR1EfBiOJTSgYMMM7jpYsAEyqJCHDL4dcFFTAwNMlFDUUpQYiadhDmXteeWAw3HEmA2s15k1RmnP4RHuhBybdBOF7MfnICmSQ2SYjIBM3iRvkcMki9IRcnDTthyLz2Ld2fTzPjTQK+Mdg8y5nkZfFO+se9LQr3/09xZr+5GcaSufeAfAww60mAPx+q8u/bAr8rFCLrx7s+vqEkw8qb+p26n11Aruq6m1iJH6PbWGv1VIY25mkNE8PkaQhxfLIF7DZXx80HD/A3l2jLclYs061xNpWCfoB6WHJTjbH0mV35Q/lRXlC+W8cndbl9t2SfhU+Fb4UfhO+F74GWThknBZ+Em4InwjXIyd1ePnY/Psg3pb1TJNu15TMKWMtFt6ScpKL0ivSMXIn9QtDUlj0h7U7N48t3i8eC0GnMC91dX2sTivgloDTgUVeEGHLTizbf5Da9JLhkhh29QOs1luMcScmBXTIIt7xRFxSBxnuJWfuAd1I7jntkyd/pgKaIwVr3MgmDo2q8x6IdB5QH162mcX7ajtnHGN2bov71OU1+U0fqqoXLD0wX5ZM005UHmySz3qLtDqILDvIL+iH6jB9y2x83ok898GOPQX3lk3Itl0A+BrD6D7tUjWh3fis58BXDigN9yF8M5PJH4B8Gr79/F/XRm8m241mw/wvur4BGDj42bzn+Vmc+NL9L8GcMn8F1kAcXjEKMJAAAAACXBIWXMAAAsTAAALEwEAmpwYAAABbmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPgogICAgICAgICA8ZGM6c3ViamVjdD4KICAgICAgICAgICAgPHJkZjpCYWcvPgogICAgICAgICA8L2RjOnN1YmplY3Q+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgrlPw1BAAAd7klEQVR4nO19eZQV13nn797a3tr7yg5ikxCIHRohkACBEFqsJY4z8T52nPHYPp74JJ54bMfOsRMf2Z44OZ7EJ16iDLIsS5ZlydJY+2Ii1haiAQFCNGvTNHS/9/pt9Wq93/xRb+9u6OU1wif9O3Wq6223bv3qu7/vu9+9txqYwAQmMIEJTGACE5jABCbwnxTs/a4AHnjggY0bNwohxl4U5/xnP/tZe3v72Iv6g8fDDz9MlcOHP/zh9/uCAEB+vysA27YBkHAh7KK3aSRlMIDAFcZl13UrW73R4f2nNQvXYGYMjANUROkVyWXZvbBIDcLXOH4VHBGuGVoBgAMMYGAAERhAeekfyC8r+svA3n8nUYxrilYXxAFkScz6sKENlgHkfc5AYmSyMc64dmglEOW4pOyOUSlZxS9Y4RVjIHeEcjy+uGZoJYBErmlTdk/5V0NQxnLkUgXiswrimqEVAIkcTQU685+BioJsyikAkDXbCVqHABWslcpopcJfopIuTIFZMSECQ0GAWBGJA2j13mQspw8MeRumayJczeNaorVMW7MxVqkUgIEox6Yo7CdEYAhQji+UuKxyWgcFA0SWWbompODaoRUD7K40Hri8dJIgIVjRt99fXEu0FhNKpWabbfulYJTthjGAXLqW5PVapRUYwGyuj1AcGGTBQAJiQgQGotDFQkFkBwkGcpZbiAK8nqsgEsC10te6FmglAESCeZFAltPiMGvQSAtALhYAsrSSmLDWLIg8Wt0iQgdoa7nXKupm5TuvwgW5NEFrFp6kilyEVGAWGERSvT0rsWgwkEtZeZ2g1YNnX1llRIHNYlq9Dy6Tc4EgciHcPzwRuP/++9Pp9KuvvuoNk1QKRAQIKjBSrABFx9l2P2jvgIFcCAFyxyNunTVj2h/dt82nad/8zg+G+ZPh0ur3+7/70HdnXTdrz54927dvf+qpp7q7u0dbzxJkaaVSESjYbFHbz3NKJSksIOuySFTSZQX8/lvWrPjQg3dvWr92UktTV/eFH/30kYu9fcP57XBpXbOmbebMGURi1apVq1at+upX/9czTz+9/ZGf79q1a8yjciKrjCgKPEvcF8o7tRggBiRIuCQqE2DNnjXjvrs2P3jvHTfMn6sosmmayWSiqaF2w/q2X/zqt8MpYbi0Pvjgg4xzYaXgpIhrLY31f/aZP//EJz6+e/fu7du3P/3Ms5cuXRrlRQjynHhRp55KDgbpdJUIQDbf6hnsGKw1FAysu3nlnzxw94Z1bfX1dY5tO44BV6gwDVcmId+7dWMlaa2urr5j8+0kXLgW4yoTJukpwSQu+2+5Ze0t69Z9/aunnvnts9t//os9e/aO/MIIwi2JBMqZ9YS1zGXlDgRlIwHhQjijE4F5c2Y9eM8dH7hr8/Vzr+MSt03TTPerkutTuCSrINW2kpaptK1YNG3KpLNdV1a/YdG6fv26GTNnuJbByQWTwRQmSZKwyYoLMya4Nqml4bOf+++f/PhHd+7c9cijjz373O96+4alQQCIBIQrhFuqrQNsVgwwWO/TbEfLJRJCjEyOqsKhDevaPnT/tnVrVtbVVlu27ZhpmVl+iWRNYpIMcIDAFZU5KcdsrK3efNuan2z/1RVLHhatD95/Hxgn12CMgbw0vgBjjKuMXC4M0pOOLklycMNt6zZsuPXUyZO/efq3jz72RPv+t69culegtxXKH0DrQB3wDgi5/quLgt+7AhbMn/PgvVvu2bpp7uyZnDPbNKx0ROW2ooBzCVwCGIQAIxCBQ1EVltZdV7l787qfPvLkFVvklWltbGzccNt6YWUYOeBK9pqLXQqXGeOycMiOuWZEcN/USY3/44uf+/QnP/YfO3c98ugvf/fiy9FobKjyCUTCpWy/s6jkkoNSqS3skR0vIEFCkHAvf7011VWb1q/54/vvXLt6WU11tW2ZrpngyAS5KyscXAI4iCBcMMpOWgBBEJd9CqKm6Vu2aP6cWdOOd54ZK60bb1s/eXKrldEVr7kVsZGj2LMRxrgqMUcSGaEnbV1SpNDmjetu33jric7Op37z7GNP/Lrj0DuD8SqyXU+IrHqW8VvSNSjrdCH7KYmsvA4RCSxaMO/Be7bcs3XDdTOnc8ZsM+2kuzVmKpwYl8A4gKx5gmXbfvYAAIFLqkyGaVZXBbfc2lYBWh+47wMggrCYoiBvU0DBlLIXKbLHTOIS4+SQExHxXof5Zk5p/PKXPv+ZT33s9zvefPTxJ198+fX+eKLAKuWttcxlDTDYEmXIcQoAjMj1rLXMZdXX1tx+25oPfmDrmpVLqsJh28oIIyKTHuK2JDEwzzxF1iVmzbOYU++MHIIpisYyumPL226/+V8efsK5bFh5BVqnTpmybm2bbegcAkzKznIgKr0wkXtHZAc/iAAwLktMSCIjMklHl/xSeNuWW7du3nj8vfd+/fRzv3zymSPHjgPw4k0ityhuHZTZPK2D9LgYuQRBJNyc11qy6Po/uueOu7asnzl9GgM5ZkKkzviZoXABzzwJIBdMADyXEfemKnnH3mwwBpY9KVc0hSVM01w0f9YN82YdPPLe6GndvOm2pqYGQ0+qipQjseiCy7qSVEqHRzTjXFI4OYrb5yZ6BfPNmd70lb/8/H/79Eff2LHz4UceD/h9wnUgRDmVA5kt7hqIXMo1a7ACwhWO01BX88cf2PpfHty2avnicDDgWDrpFxSk/MzmHGBSzr95I7gsSxwxMAbGQBxEYLl9Yd4CgUk+hWUyZtAf2Lph9eVpvdyMMMbYs089dsfmjbaR0nwhICthOZPMbdmXOUdMBLjZg8KnORUWthC2Q7LLw5K/1rJhGBlVVbmTCIme3J27jPvK39ocoV7YKpwENTtyfSaTqQqHOBPCjMsirrGMxAisaNJc9oCVHGT3vGjPAF7yDpfITvdG01wJH363c+uffskwraGou5y1zr5u1uoVSy0jI3MGzpF3CESFrcRsaWhNyHk2xjlXVHIh+pxkrwyfxqtclzMigmBe4UPSivLj3I6RICJBIqQJnjmnIqkwh/Gcz/ES5IUpiGzAxnPdNZ4z5LywMoDAOASYrGk8plvW/FlTFi+YvXv/kdHQeueWjbU11YaelNRAzsGW+qtyTUCRBytuy6LoHuQsl0myRDLpqptwhOxCAs9rqyj9eZk4oLQO3idCdmM+iqtM53nz9NpNfg4s5ayVsQK/xLPBMssJQj6uyjLLCxVgkk9T0knDFwjcuWHVaGiVJeneu7Y4tsVATFJzjRrZRsGkrBV4zV84gAPk55rJhebPvD6lneUUZVwzzmWVuSCzkJwelNlifoGi9gGAGEOIp4rUMN8pYIWDPJtULAI5YSWWlVTPeIlyFFPhJUHVfFKy3zLljWsWPxTwp/TMyGi94fp5S2+60TIzmqqAK1lCyYGdgHEJ+jlkeqB3I9MFMwonBWHBixaYDK5BqYIShlYPtR5qPbQGyAFwDRAQTqny5oKY7LG4HLNsqN6Bd0fzg4zFhKJgsN5Bll9WOChQyQr+iigXJOReCmKy6pPchG3Omtq84qZ5r+06MDJa7966KRTwZwxD0kIw+hB/B5G30H8QyfeQPgs7CVE6U7d4CmUxOMBlKGH4WhCYjPBchGbBPwVKFZgMYQFOSc+isC8S2WJmB0lxFZ14YAWGVFWAeM6JFcWqlJvmhXw8kL/xAJP9fiWRMWUlsO225SOjVVXVbXdstB3B4wfZwR8jfgiZbm9MpETlhwlyYMZgxNB/FHgZnEFrRGg2ahai5kb4WsEVCCvX0Sp2WZcV2QKzrNxy84QWuGalNpu3guIDzzsxEM/63oIs5E4toGh+hfWZlrxu5Q211aFYPDVcWpfedOON82dbtu07sx3nXoAMMEAaNo8DwQrXCBCMS8hcQu9OyBpCs1G/HLVL4WsGOMgqUl5RwmNJQrbIa5U4MZQ2HFa6L9PWHJvFzT8byeZdmWe2yPcLmKT6VYrp1pTm2jVL5z/32iDLwAan6rOf+si6taudZLev8/uM9MtGt6NC3mLIRaYXsQ707kD6JJgMrR5czWW1Sw22oLmicFDwhKUDt1lac28ylN+M4o0V3R42YI+8TXg/55ysVNqQZcVx3f/3+lsDr28Qaw0GA1s23mLarhTbzY3eETT20cEr30mjdw/69iA0E03rUbccchCuVS61JRRjQGCAIXWgzGAHD12pYLnFCpv3ltnvQPUFVClhWmbb4tnNDTUX+/rLrmkQa13btvxzn/pTx3H8p34o6acrb6qDIn91Vj+iB9D/NiDga4akFSVSS0W2kJbNezYxiCWiKH4o2CYKRoqylyh6M49SlyjJZCXTGVETDhzpPH/kRFfZ1Qxiivdu3SjLEqwos/rAclW9avDsJnMBpx7Fse8hsjuX3i7rK3sKkGfcBTyP5w6yCe99J7sXInec/0L+uLgXXlaOyKVmBFxTljiERcLdesvCgYvCyq21vq7277/2xYBPcUmyGjba1ctJDjA3ye1EiQ8Yb3iWaycQexv6afiaoNYOYrPFCuvZLyu24sGkEwXnM0iSM29BeYvOvvT8mG0Z6VS8Pxrpj6dcIsZITGqpf+a1t+NJvbj65dpaU1PTr4sWpgb8ZJrMrl5pVa9mdkxJHVajv1fi+ySjuxCNjDe8U/QfReokmtajcT0kDcIq19ZiOkRx+82FBPluqxdpZV96LTUfsRYrbD4lyMEIwrIsR8/YaUOYFhPEOGc+nyakQHfMfvPAKcMub86DcOMPBJctWXzX1k0bb1k5e3qzyoVlmrZgIMacmJI8rMb+Q020S2bP1eMXgABC0zH5bgSmQtil6RgM5rtQFJaiaPVmPmWFLI8exWVJLAYIsmxHN9y0CdOWXMEkiWmaRrK/O+buPnT2+df37W7viEUHGQy9HCWBYGjZ0sXbNm/YtG7ldVMbFeaYpukIBjBmx+TUEV//m2qyXTIvXSV+CZA0tNyO+lUA5TJqZfkt76v5lFXRz7MdqhyhJblBno1bGSCEabm6ibTJTVcWgnHONE2D7L8QFzs7zjz/RvvetzqikcsNLQ+LiVAovHz50js337rx5uUzJ9fJcEzTyPOrpo9o8Z1a8m3J6h13fj2aapegdQskX26tvCgIAkoNtpjZgoWiQKuXnQFBkGmLtMl1SzZdxSUmsSybPQnadfDM82+8tbu9IxrpHU41R0ZAuKp6xfKl225ff9vNS6a31Mhk5+2X21FFP+KL79bSHZLVN778CiA4FVPugVoHYZcSStkeUZmdUqm1slyClYRpU9qS05ZquqogLnFoqgol0JOgXYfOvfBG++72jkjfsNgsPuFoUFVds3LF0m2333rr6oXTmqs4WZZh2h6/TlRNH/Un92rpg5IdGdt5hgYBai0m3w3/lFzWsTgILRNZrw4sqwwgEmTZSFtK2tZMVxPEOSefpkEO9CRo9+FzL/x+/659HZG+Uc6AGuvlVtfUrlq5bNumdetWLpjaFOaukbNfcCem6cd8qX0+/bBkRytxtlIQIPsx6S6EZmXDg9IkbHZNYtZIyWPTdFjaUnXbbwgtZ5sKU4IXE9j9zrnn39i/u72jr3e088lyqNiF1tTWrV65bNumW25ZccOUBj9cwzQMhyQQSU5Myxzzp9p9maOSE6vkaT0n1roFoTmlNlv8DUFCmLaUtrW07TeFTxCXGGmaytTgxQT2HDn//Bv7d+07MHY286i8+NXW1betXHbnprVrl82bXOeHq5uG6RAHSLKjmvFuIH3AZxyR3HhlzkcAV9C6BaHZEFbuLQJAwjVsnra1tBOwXJ8LLjFomsKU4KUk9h7pfmHH2zv3Hui9dLEyNSnCOMZEdfUNa1Yvv3PjzTcvnt1aq1qZpG074DKE3dLzkM94r6I2q6J1CwLTiz2YcO2uRH1a1HLmSpxrgareFPYevfDCjgM79x64dLGnQqcfBFcjlG9oaFq9atmXPrF1drNmu7y2/8ma+PPjo7NboTVCONm3GExTnE22giu9Kf7dR/fs2nfgYs+Fip54cIx31g8A+vouvXfkQLWccYgH0vuqEy+NSwLXyaDnFVj9YJRPoGiq0+S7IFwnLOvxC+9eHU4xtoz/cFFbFfzJ331mxtRWlulqivxUEplxaSQMcE1YUQSn5YYLCUQ+2XZs02Hhm2+asWP/yUhcv3JRY8a408oY+9YXP7ipbaFppJqjD2t29zgKDwPsFIQF/6RszhAEICDrKZ35/eEFsxqf33ncssd90fG40/qRe9d+/sO3G5Zbl3gmnNk/7mLOACsCOQC1Nve4IcE480vpaEqZ3FRXHVJff+vUOFdinGldcv2M7//Vh7ikBvX2huSzjF2tfLjRC18zJBVwvTFwWRYK9IjuWzS7uTemHz5ZsRB1UIwjrXXVwX/+2kcmN9dzs6s18XNO5vidqxzChZNCYFJhDJHIp9iObacs36oFre3HLlzoG2QgulIYL1o5Y9/6wn23rZxvGqnW5KOqc+kqpWU9MMBOg6vQaiGc7AgCQ1DNJHXGJf+S2Y0vt59OG5VcDlmM8aL1o/e0ffZD6zOW25j+Xdg8dFU59cAAKw5/E7iUHxtnHAFFj6TkxprQpMbgK+1nhRgXXRoXWpfdMP2hv7iPMTlk7G/KvPg+cOpBuCAbvgbAzU/LlWWhwuhLaXOn1tiOaD82LiJbeVrra0I//OsPtjTUSGbXJP1JjiHn1g4fBObCx71JicOHJwVqFSStMEWDyKfZruP069ryufXHz/Wf7kmOvYZlqDCtnLNvf+6utUuvs8zU5MyTmohc+TfDQIJd183XVtNJjhGGnEQQJnz12bHu7KA3hTQjlWGuUJfNrdtxsKc/VYF7X4wK0/qxu1f+2QOrM6bbYr4Udt6tSJk2AmfZBh2NAAujfKLDFcAA14AczAVb3ui3YJyCqh5JKOGgOnty+OX9F2ynkg8oqyStyxdM/fvP30lMqrY7mqw3KlXsebQl0crI1NHoR9THRphRJIAs+Gqy8oqcyCpC40ZvXJveHPCr0puHRzascnlUjNaGmuA//dU9TXXVitU9xXp2xDo4BGI0s4dukmVFVv2upaepqYadldhIAiMGuBYUPyRvAVQu3iLh1yzhuNGUsmhWuCdqvNtVMZGtDK0SZ9/+7Ja2hdMcMznV+q1K5VO9RgcLwTNiraJoz3ck955yls/UdJMsBGt5F8NIAiMCIKAGQE7OYL2NQj4jpTPDkpbPDe873t8br4zIVobWT9y97JP3LDFMp9V5vYoq1eNmZ90VGTREDPVLP3jx1Z2Hbm5b0RpIJu2QDCvEoyMpCRA2VB84gRzABhwv6mJMhLRMJKFqsnTjjMArB6KGVQGRrQCtqxZM+daf3yZIqnEONou9Yy/QQ8Sd2ePMUzXtO788tq/juOvYh08n7ly3ULEjSVEX5n0qN0ZQHBE4QeagHKdwAAfkyIrjk81Lca2lRmmslt84FB84aDtSjJXWxtrgD/5iS311UHW6p4lXRhwADQGTQqesFYqqvPKO+Y+PvE4kAPT1RVJUs2Fxo5nRdVFdJ1/gbNiWxQC4UBhgAhZgASZgAzbI8fsM4VJfUp0/WdNN9+DpseZkx0SrJPFvf+bWlTe0OlZqOr2soTKST2Cn7SWGqIrZvr/84Y54vOD63zl+dsacBTe0WClDEiTVKMN9GAQACIJsg9s5g/U2G8wCOeFAOq3L6Yy89DrtaFemKzKmdMGYBl0+vm3hllXTM4bZSrsDGMkVXha99rSY1aCoyv95uvPc+ZJhEhLOd37y4ul0k8rNi2ZzxGoaQc+YADu3uqx4E4AQnNmzWroVnpK58+X7aifVjekJYaO31tU3TvrGJ9oEsTpxpIV1jKUSxciI0CljoSrLb7wn/uHnO2jAv9DJ6OnOXtq6ZiYykYRTXadEZD68YM67AXLpxKwiyIrwK+bFqFwToBmN/LXDpjta7zVKWptrg//7C+trw37N7ZkuvclRmS4KgZ/M3GC4wYQT/PKP9sX6B4/8z3f3SOFpa+aqum4YQmvwRYdrsjQ0rQQQ/D4HwrnUL2Y2urIk9p4Y5XWNhlZZ4t/6dNuyeQ2ulZol7VBZhQbdGHrMKT3GJJ9P/YdnL7751rHLfLfj3a6FixbPDEcSpswhqrT0cM/C8wsrSk6dR1XQSet2Im0vnCbOR9E5qrkZo9HWj985f9Oy1kzGnCy95WeVifwBpJ3QeX2KT3Z3nMCTLw6+Oi8P28x8+2c7+9gMmTLnUnVxMzBckXUGW7UhChtjmDtFaDKRiy9sYXNaRnMtI7bWpddP/btPLXcsUxAx2CEek1gF+qkC/ERytumqKVH11z85FIld+W4lEvGLRvj2pXVWui9l+xr8aWk4Y2UMkIdeZMIAwsUI+uLMcRFWae7U0IsdrjvCbPeIrTWq4534ZH+4hgkjYk9512hLuA0jLaQcDN16c9wMaKr845d6T545P8zfvfjavicO+INBLWWIU7HwsAw299C9QWyWwbJw5CSOnWa2RTKRG75+b3SRSyNmacTW2h9PPPf7w0r93KXzW5lx0XDkqNMCICTHR9ZPz4MhaQVPJqZqktjdFfrez9tH8pQw6jjeu2rFTc3y6f4MfLIb0obhZNhgXoujP4nDJ1kkwRmRX9N6fau/+ZT79ItvjfSpZRidy3Jsa+e+g8f7fCuWLq6VopZlxp26tBsKyYnhxjpFcIkf759qOUxntV95+L2+yJBPzBoUlmUcvcC2tE3imZP9GdQHSLlixMkHLIslnL2Io6eZYUEiClQ37+xf/pV/e+/YuydGejkeRh+3njp99qW3umdcv2JOM3P0vrQTiNl1Gjf88uBPLhgcDOcS9Zf0kN+n/vOr9ut7j4+iJn19EV2etm6+m0kldIs1hYfxT8nywQCHaeHoaZy5yEmQwsFqb/zZ/inff2RvMj6SbE4pxtR5TSbiz+84bIfmLF8wVTZ7TIeiVp0jpLCS5nxY3iNu+Dr76zXJab9Q/71fHBLuKL3fkc7emfOWzavp6U/ZnKE2dKWVj7k1WdF+HOpk0QTjRH6fv0dr+8avjedebSd3TJ3XsaZaSDhvdRw90MWXLl3WpMYsI5mwwgk7EFJ0VboCR47g70ZqLUeYvP6rj1y41Dey5l9aD/dAp75+9Y1V7tlomlX74fddllkJRDjTjSNnmGlBAgVqWndEl3714WMnOk+OvhqF4iuB890XXth7rmX2iuunqK7ek3HkSCascCekmkN6Z4bTsWBvSgoElH/dob2yp3OMdcjo6dPx6s3L6p1UbyLDmqsgDXVxHIaNd07iTA8jQSpnVLfox+0t//iLPelkZcLwig26ZPT0SzuP9MszVy6aqVldluVEjYDh8CrNlAYKAkNMlzojiipnDvRO/u5jJ12nAhNMzl/oleuuXzU1nUzoloOmmsG+xHEphoOdLJZgnCjgD5z3tf3Nr1Mv7dhPojIDRajwyCuJw0dP7OmkhUtWTQpGLD2SsNRYRgkqtk8pinsYbAdHLjLbMS25+euPGT2XRu8cynD4RN/Cm5ZNVbqiCfKpqCoWWQZBONHFjp1llg0Z5K+d/Fp0ydf+/cjp06crVQEPlZ9+0dvb+7td56qmrVw0Q6X0qYzt9qXBmQj7Csv4Tvay3hQF/P5/293y0q5KTot0Xftwl7tx1Vw10xVNsoYqaJq3bAO6gYOd7HwfANIkJuoX/6i98YeP7zbSiSsWO1KMy2Qh28rs2HOsy565csnsoHPaMs1omqUtVPkgK+hLoLOXaRIO9c9+6JdnnUo0/2Ik4vE+0brhBl8mEUtnWEs9uISLEXScYHEdEigYCp1V277+ZPy1nW+P07+FG7+JmPRe55nfH8W8m9ZPr07YeiJlskiKSRyne5ltk6O2fuMJ58LFykx7KcPJsxfrpy++qSHSnzCFYLEEjp5ljoDCyF8/7YWLi/7m3w+eO3duPE7tYXynDff3x17YdU5qWr1kTg1Lnzcs9CWY7SDg9/3f/a0v7By/WdHU0RlbvWJJI85GkoimGAP5ZG7XLf2nndU//tVu0xjHya24CpPcXcfae+D48cSU5cuWVotuy7RUiR1NXvfQ4+ccp8Izn4phW8a7vcqWldOYfoERgqGqTrnta4/3vrn3ICqUdL8MrsZKFwBnz51/9VBm+oL1cxuMjKt+8zfifE/Fxr6GQl8kmvHNXD9HSP7a57pv/NvtHd3dw82N/SGBy75P/cmW//rA6qv1xAwwSf2fn77z3ttXXBP/FGiccTXW2L1/p5vABCYwgQlMYAL/2fH/AdkCEQl+/Ar/AAAAAElFTkSuQmCCCg==',
88 // icon4: 'jqtouch4.png',
89 // startupScreen: null, //Pass a string path to a 320px x 460px startup screen for full screen apps.
90 statusBar: 'black-translucent', //Styles the status bar when running as a fullscreen app. Other options are `default`, `black`, and `black-translucent`.
91 // addGlossToIcon: true, //Set to 'false' to prevent automatic glossy button effect on icon.
92 preloadImages: false, //Pass an array of image paths to load them before page loads. Ex: `['images/link_over.png', 'images/link_select.png']`
93 fixedViewport: true, //Removes the user's ability to scale the page. Ensures the site behaves more like an application.
94 // fullScreen: true, //The website will become a fullscreen application when saved to a user's home screen. Set to `false` to disable.
95 // fullScreenClass: 'fullscreen' //Adds a class to the `<body>` when running in full-screen mode, to allow for easy detection and styling. Set to `false` to disable.
96 // themeSelectionSelector: '#jqt #themes ul', //???
97
98 // useAnimations: true, //Set to `false` to disable all animations.
99 // useFastTouch: true, //Removes ~350ms onClick delay when tapping a link (use in conjunction with the .tap() event) **Experimental**
100 // useTouchScroll: true, //Adds support for iOS5 scrolling. Set to false to disable. **Experimental**
101
102 cacheGetRequests: false, //Automatically caches GET requests, so subsequent taps reference the pre-loaded views. (default: true)
103
104 // backSelector: '.back, .cancel, .goback', //A CSS selector for back links/buttons. When clicked, the page history goes back one, automatically reversing whichever entrance animation was used.
105
106 // cubeSelector: '.cube', //Link selector for a cube animation.
107 // dissolveSelector: '.dissolve', //Link selector for a dissolve animation.
108 // fadeSelector: '.fade', //Link selector for a fade animation.
109 // flipSelector: '.flip', //Link selector for a 3d flip animation.
110 formSelector: null, //Sets which forms are automatically submitted via Ajax. (default: 'form')
111 // popSelector: '.pop', //Link selector for a pop animation. (default: '.pop')
112 // slideSelector: 'body > * > ul li a', //Link selector for the default slide-left transition. By default applies to all links within an unordered list. Accepts any jQuery-capable selector `'li &gt; a, a:not(.dontslide)'`, etc. (default: 'body > * > ul li a')
113 // slideupSelector: '.slideup', //Link selector for a slide up animation. (default: '.slideup')
114 // submitSelector: '.submit', //Selector which, when clicked, will submit its parent form (and close keyboard if open). (default: '.submit')
115 // swapSelector: '.swap', //Link selector for 3d swap animation. (default: '.swap')
116 // touchSelector: 'a, .touch', //Selector for items which are automatically given expanded touch events. This makes ordinary links more responsive and provides trigger events like `swipe` (default: 'a, .touch')
117
118 debug: false
119 });
120
121 this.setJQTouch(jqt);
122 }, 80 },
123*/ 81
124 //========================================================================= 82 //=========================================================================
125 83
126 'showAddToHomeScreenBaloon': function () { 84 'showAddToHomeScreenBaloon': function () {
127 }, 85 },
128 86
129 //------------------------------------------------------------------------- 87 //-------------------------------------------------------------------------
130 88
131 'selectInitialProxy': function () { 89 'selectInitialProxy': function () {
132 if (this.isOnline()) { 90 if (this.isOnline()) {
133 this._proxy = Clipperz.PM.Proxy.defaultProxy; 91 this._proxy = Clipperz.PM.Proxy.defaultProxy;
134 } else { 92 } else {
135 if (this.hasLocalData()) { 93 if (this.hasLocalData()) {
136 this._proxy = new Clipperz.PM.Proxy.OfflineCache({'shouldPayTolls':false}); 94 this._proxy = new Clipperz.PM.Proxy.OfflineCache({'shouldPayTolls':false});
137 } else { 95 } else {
138 this.showOfflineError(); 96 this.showOfflineError();
139 } 97 }
140 } 98 }
141 }, 99 },
142 100
143 //------------------------------------------------------------------------- 101 //-------------------------------------------------------------------------
144 102
145 'showLoginForm': function (args) { 103 'showLoginForm': function (args) {
146 args = args || {}; 104 args = args || {};
147 105
148 args['callback'] = MochiKit.Base.method(this, 'doLogin'); 106 args['callback'] = MochiKit.Base.method(this, 'doLogin');
149 107
150 if (Clipperz.PM.PIN.isSet()) { 108 if (Clipperz.PM.PIN.isSet()) {
151 args['errorCallback'] = MochiKit.Base.method(this, 'handleFailedPinLogin'); 109 args['errorCallback'] = MochiKit.Base.method(this, 'handleFailedPinLogin');
152 this.loginForm().showPinLogin(args); 110 this.loginForm().setMode('PIN');
111 // this.loginForm().showPinLogin(args);
153 } else { 112 } else {
154 args['errorCallback'] = MochiKit.Base.method(this, 'handleFailedCredentialsLogin'); 113 args['errorCallback'] = MochiKit.Base.method(this, 'handleFailedCredentialsLogin');
155 this.loginForm().showCredentialsLogin(args); 114 this.loginForm().setMode('CREDENTIALS');
115 //this.loginForm().showCredentialsLogin(args);
156 } 116 }
117 this.loginForm().show(args);
118
119 // MochiKit.Async.callLater(0.1, $.mobile.changePage, $('#loginPage'), {changeHash:false, showLoadMsg:false, role:'page', fromPage:$('#loadingPage'), 'data-transition':'slide'});
120 MochiKit.Async.callLater(0.1, $.mobile.changePage, $('#loginPage'));
157 }, 121 },
158 122
159 //......................................................................... 123 //.........................................................................
160 124
161 'handleFailedCredentialsLogin': function () { 125 'handleFailedCredentialsLogin': function () {
126 this.overlay().failed("Failed login", 1);
162 this.showLoginForm({'previousFailedAttempt':'LOGIN'}); 127 this.showLoginForm({'previousFailedAttempt':'LOGIN'});
163 }, 128 },
164 129
165 //......................................................................... 130 //.........................................................................
166 131
167 'handleFailedPinLogin': function () { 132 'handleFailedPinLogin': function () {
168 varfailedAttempts; 133 varfailedAttempts;
169 varstatus; 134 varstatus;
170 135
136 this.overlay().failed("Failed login", 1);
171 failedAttempts = Clipperz.PM.PIN.recordFailedAttempt(); 137 failedAttempts = Clipperz.PM.PIN.recordFailedAttempt();
172 this.showLoginForm({'previousFailedAttempt':'PIN', 'failedAttempts': failedAttempts}); 138 this.showLoginForm({'previousFailedAttempt':'PIN', 'failedAttempts': failedAttempts});
173 }, 139 },
174 140
175 //------------------------------------------------------------------------- 141 //-------------------------------------------------------------------------
176 142
177 'doLogin': function (someArgs) { 143 'doLogin': function (someArgs) {
178 var deferredResult; 144 var deferredResult;
179 var credentials; 145 var credentials;
180 var errorCallback; 146 var errorCallback;
181 var user; 147 var user;
182 var getPassphraseDelegate; 148 var getPassphraseDelegate;
183 149
184 credentials = someArgs['credentials']; 150 credentials = someArgs['credentials'];
185 errorCallback = someArgs['errorCallback'] || MochiKit.Base.noop; 151 errorCallback = someArgs['errorCallback'] || MochiKit.Base.noop;
186 152
153 this.overlay().show("logging in");
187 getPassphraseDelegate = MochiKit.Base.partial(MochiKit.Async.succeed, credentials.passphrase); 154 getPassphraseDelegate = MochiKit.Base.partial(MochiKit.Async.succeed, credentials.passphrase);
188 user = new Clipperz.PM.DataModel.User({'username':credentials.username, 'getPassphraseFunction':getPassphraseDelegate}); 155 user = new Clipperz.PM.DataModel.User({'username':credentials.username, 'getPassphraseFunction':getPassphraseDelegate});
189 156
190 deferredResult = new Clipperz.Async.Deferred('MainController.doLogin', {trace:false}); 157 deferredResult = new Clipperz.Async.Deferred('MainController.doLogin', {trace:false});
191 deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'initProgress', {'steps':4}); 158 deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'initProgress', {'steps':4});
192 deferredResult.addCallback(MochiKit.Async.wait, 0.1); 159 deferredResult.addCallback(MochiKit.Async.wait, 0.1);
193 deferredResult.addMethod(Clipperz.Crypto.PRNG.defaultRandomGenerator(), 'deferredEntropyCollection'); 160 deferredResult.addMethod(Clipperz.Crypto.PRNG.defaultRandomGenerator(), 'deferredEntropyCollection');
194 deferredResult.addMethod(user, 'login'); 161 deferredResult.addMethod(user, 'login');
195 deferredResult.addCallbacks( 162 deferredResult.addCallbacks(
196 MochiKit.Base.method(this, 'processSuccessfulLogin', user), 163 MochiKit.Base.method(this, 'processSuccessfulLogin', user),
197 errorCallback 164 errorCallback
198 ); 165 );
199 deferredResult.callback(); 166 deferredResult.callback();
200 167
201 return deferredResult; 168 return deferredResult;
202 }, 169 },
203 170
204 //.......................................................................... 171 //..........................................................................
205 172
206 'processSuccessfulLogin': function (aUser) { 173 'processSuccessfulLogin': function (aUser) {
207 var deferredResult; 174 var deferredResult;
208 175
209 deferredResult = new Clipperz.Async.Deferred('MainController.processSuccessfulLogin', {trace:false}); 176 deferredResult = new Clipperz.Async.Deferred('MainController.processSuccessfulLogin', {trace:false});
210 deferredResult.addMethod(Clipperz.PM.PIN, 'resetFailedAttemptCount'); 177 deferredResult.addMethod(Clipperz.PM.PIN, 'resetFailedAttemptCount');
178 deferredResult.addMethod(this.overlay(), 'done', "", 1);
211 // deferredResult.addMethod(this, 'removeLoginForm'); 179 // deferredResult.addMethod(this, 'removeLoginForm');
212 deferredResult.addMethod(this, 'setUser', aUser); 180 deferredResult.addMethod(this, 'setUser', aUser);
213 deferredResult.addMethod(this, 'setupApplication'); 181 deferredResult.addMethod(this, 'setupApplication');
214 deferredResult.addMethod(this, 'runApplication'); 182 deferredResult.addMethod(this, 'runApplication');
215 deferredResult.callback(); 183 deferredResult.callback();
216 184
217 return deferredResult; 185 return deferredResult;
218 }, 186 },
219 187
220 //------------------------------------------------------------------------- 188 //-------------------------------------------------------------------------
221 189
222 'setupApplication': function () { 190 'setupApplication': function () {
223 vardeferredResult; 191 vardeferredResult;
224 192
225 deferredResult = new Clipperz.Async.Deferred("MainController.setupApplication", {trace:false}); 193 deferredResult = new Clipperz.Async.Deferred("MainController.setupApplication", {trace:false});
226 deferredResult.addMethod(this, 'welcomeFirstTimeUser'); 194 deferredResult.addMethod(this, 'welcomeFirstTimeUser');
227 deferredResult.addMethod(this, 'showPaymentReminder'); 195 deferredResult.addMethod(this, 'showPaymentReminder');
228 deferredResult.addMethod(this, 'copyDataLocally'); 196 deferredResult.addMethod(this, 'copyDataLocally');
229 deferredResult.callback(arguments); 197 deferredResult.callback(arguments);
230 198
231 return deferredResult; 199 return deferredResult;
232 }, 200 },
233 201
234
235 //.......................................................................... 202 //..........................................................................
236 203
237 'isFirstTimeUser': function () { 204 'isFirstTimeUser': function () {
238 return false; 205 return false;
239 }, 206 },
240 207
241 'welcomeFirstTimeUser': function () { 208 'welcomeFirstTimeUser': function () {
242 vardeferredResult; 209 vardeferredResult;
243 210
244 deferredResult = new Clipperz.Async.Deferred('MainController.welcomeFirstTimeUser', {trace:false}); 211 deferredResult = new Clipperz.Async.Deferred('MainController.welcomeFirstTimeUser', {trace:false});
245 212
246 if (this.isFirstTimeUser()) { 213 if (this.isFirstTimeUser()) {
247 deferredResult.addCallback(function () { Clipperz.log("--> welcome"); }); 214 deferredResult.addCallback(function () { Clipperz.log("--> welcome"); });
248 } 215 }
249 deferredResult.callback(); 216 deferredResult.callback();
250 217
251 return deferredResult; 218 return deferredResult;
252 }, 219 },
253 220
254 //.......................................................................... 221 //..........................................................................
255 222
256 'shouldShowPaymentReminder': function () { 223 'shouldShowPaymentReminder': function () {
257 return true; 224 return true;
258 }, 225 },
259 226
260 'showPaymentReminder': function () { 227 'showPaymentReminder': function () {
261 vardeferredResult; 228 vardeferredResult;
262 229
263 deferredResult = new Clipperz.Async.Deferred('MainController.showPaymentReminder', {trace:false}); 230 deferredResult = new Clipperz.Async.Deferred('MainController.showPaymentReminder', {trace:false});
264 231
265 if (this.shouldShowPaymentReminder()) { 232 if (this.shouldShowPaymentReminder()) {
266 deferredResult.addCallback(function () { Clipperz.log("--> payment reminder"); }); 233 deferredResult.addCallback(function () { Clipperz.log("--> payment reminder"); });
267 } 234 }
268 deferredResult.callback(); 235 deferredResult.callback();
269 236
270 return deferredResult; 237 return deferredResult;
271 }, 238 },
272 239
273 //.......................................................................... 240 //..........................................................................
274 241
275 'canCopyDataLocally': function () { 242 'canCopyDataLocally': function () {
276 return false; 243 return false;
277 }, 244 },
278 245
279 'copyDataLocally': function () { 246 'copyDataLocally': function () {
280 vardeferredResult; 247 vardeferredResult;
281 248
282 deferredResult = new Clipperz.Async.Deferred('MainController.copyDataLocally', {trace:false}); 249 deferredResult = new Clipperz.Async.Deferred('MainController.copyDataLocally', {trace:false});
283 250
284 if (this.canCopyDataLocally()) { 251 if (this.canCopyDataLocally()) {
285 deferredResult.addCallback(function () { Clipperz.log("--> copy data locally"); }); 252 deferredResult.addCallback(function () { Clipperz.log("--> copy data locally"); });
286 } 253 }
287 deferredResult.callback(); 254 deferredResult.callback();
288 255
289 return deferredResult; 256 return deferredResult;
290 257
291 }, 258 },
292 259
293 //------------------------------------------------------------------------- 260 //-------------------------------------------------------------------------
294 261
295 'runApplication': function () { 262 'runApplication': function () {
296 var deferredResult; 263 var deferredResult;
297 264
298 deferredResult = new Clipperz.Async.Deferred('MainController.runApplication', {trace:true}); 265 deferredResult = new Clipperz.Async.Deferred('MainController.runApplication', {trace:false});
266 deferredResult.addMethod(this, 'showCardListPage');
267 deferredResult.addCallback(MochiKit.Async.wait, 0.5);
299 deferredResult.addMethod(this.user(), 'getRecords'); 268 deferredResult.addMethod(this.user(), 'getRecords');
300 deferredResult.addMethod(this, 'showCards'); 269 // deferredResult.addMethod(this, 'showCards');
270 deferredResult.addMethod(this.cardList(), 'showCards');
301 deferredResult.callback(); 271 deferredResult.callback();
302 272
303 return deferredResult; 273 return deferredResult;
304 }, 274 },
305 275
306 //========================================================================= 276 //=========================================================================
307 277
308 'showOfflineError': function (anException) { 278 'showOfflineError': function (anException) {
309 alert("Error: " + anException); 279 alert("Error: " + anException);
310 throw anException; 280 throw anException;
311 }, 281 },
312 282
313 //========================================================================= 283 //=========================================================================
314 284
315 'isOnline': function() { 285 'isOnline': function() {
316 return navigator.onLine; 286 return navigator.onLine;
317 }, 287 },
318 288
319 'hasLocalData': function() { 289 'hasLocalData': function() {
320 return false; 290 return false;
321 }, 291 },
322 292
323 //========================================================================= 293 //=========================================================================
324 294
325 'loginForm': function() { 295 'overlay': function () {
296 if (this._overlay == null) {
297 this._overlay = new Clipperz.PM.UI.Mobile.Components.Overlay();
298 }
299
300 return this._overlay;
301 },
302
303 //-------------------------------------------------------------------------
304
305 'contentElementForPage': function (aPageName) {
306 return MochiKit.Selector.findDocElements('#' + aPageName + ' div[data-role="content"]')[0];
307 },
308
309 'loginForm': function () {
326 if (this._loginForm == null) { 310 if (this._loginForm == null) {
327 this._loginForm = new Clipperz.PM.UI.Mobile.Components.LoginForm({element:MochiKit.DOM.getElement('loginForm')}); 311 this._loginForm = new Clipperz.PM.UI.Mobile.Components.LoginForm({element:this.contentElementForPage('loginPage')});
328 } 312 }
329 313
330 return this._loginForm; 314 return this._loginForm;
331 }, 315 },
332 316
333 'removeLoginForm': function () { 317 'removeLoginForm': function () {
334 if (this._loginForm != null) { 318 if (this._loginForm != null) {
335 this._loginForm.remove(); 319 this._loginForm.remove();
336 this._loginForm = null; 320 this._loginForm = null;
337 } 321 }
338 }, 322 },
339 323
340 //------------------------------------------------------------------------- 324 //-------------------------------------------------------------------------
341 325
342 'cardList': function () { 326 'cardList': function () {
343 if (this._cardList == null) { 327 if (this._cardList == null) {
344 this._cardList = new Clipperz.PM.UI.Mobile.Components.CardList({element:MochiKit.DOM.getElement('cardList')}); 328 this._cardList = new Clipperz.PM.UI.Mobile.Components.CardList({element:this.contentElementForPage('cardListPage')});
345 MochiKit.Signal.connect(this._cardList, 'selectedCard', this, 'selectCardHandler'); 329 MochiKit.Signal.connect(this._cardList, 'selectedCard', this, 'selectCardHandler');
346 } 330 }
347 331
348 return this._cardList; 332 return this._cardList;
349 }, 333 },
350 334
351 'showCards': function (someCards) { 335 'showCardListPage': function (someCards) {
352 this.cardList().showCards(someCards); 336 // this.cardList().render();
353 // this.jQTouch().goTo('#cardList', 'slideleft'); 337 $.mobile.changePage($('#cardListPage'), {'transition':'flow'}); //slide, flow, pop
354 }, 338 },
355 339
356 //------------------------------------------------------------------------- 340 //-------------------------------------------------------------------------
357 341
358 'cardDetail': function () { 342 'cardDetail': function () {
359 if (this._cardDetail == null) { 343 if (this._cardDetail == null) {
360 this._cardDetail = new Clipperz.PM.UI.Mobile.Components.CardDetail({element:MochiKit.DOM.getElement('cardDetail')}); 344 this._cardDetail = new Clipperz.PM.UI.Mobile.Components.CardDetail({element:MochiKit.DOM.getElement('cardDetail')});
361 } 345 }
362 346
363 return this._cardDetail; 347 return this._cardDetail;
364 }, 348 },
365 349
366 'selectCardHandler': function (aCardReference) { 350 'selectCardHandler': function (aCardReference) {
367 var deferredResult; 351 var deferredResult;
368 352
369 deferredResult = new Clipperz.Async.Deferred("MainController.selectCardHandler", {trace:true}); 353 deferredResult = new Clipperz.Async.Deferred("MainController.selectCardHandler", {trace:true});
370 deferredResult.addMethod(this.cardDetail(), 'render'); 354 deferredResult.addMethod(this.cardDetail(), 'render');
371 // deferredResult.addMethod(this.jQTouch(), 'goTo', '#cardDetail', 'slideleft');
372 deferredResult.addMethod(this.user(), 'getRecord', aCardReference); 355 deferredResult.addMethod(this.user(), 'getRecord', aCardReference);
373 deferredResult.addMethod(this.cardDetail(), 'showCard'); 356 deferredResult.addMethod(this.cardDetail(), 'showCard');
374 deferredResult.callback(); 357 deferredResult.callback();
375 358
376 return deferredResult; 359 return deferredResult;
377 }, 360 },
378 361
379 //========================================================================= 362 //=========================================================================
363
364 'preferences': function () {
365 if (this._preferences == null) {
366 this._preferences = new Clipperz.PM.UI.Mobile.Components.Preferences({element:this.contentElementForPage('preferencesPage')});
367 }
368
369 return this._preferences;
370 },
371
372 'showPreferences': function (anEvent) {
373//console.log("MainController.showPreferences", anEvent);
374 this.preferences();
375 // MochiKit.Async.callLater(0.1, $.mobile.changePage, $('#preferencesPage'), {transition:'flip'});
376 $.mobile.changePage($('#preferencesPage'), {transition:'flip'});
377 },
378
379 'savePreferences': function (anEvent) {
380console.log("MainController.savePreferences", anEvent);
381 },
382
383 'back': function (anEvent) {
384 // MochiKit.Async.callLater(0.1, $.mobile.changePage, $('#cardListPage'), {transition:'flip', reverse:true});
385 $.mobile.changePage($('#cardListPage'), {transition:'flip', reverse:true});
386 },
387
388 //=========================================================================
380 __syntaxFix__: "syntax fix" 389 __syntaxFix__: "syntax fix"
381}); 390});