Index: Dev/branches/rest-dojo-ui/client/index.html
===================================================================
--- Dev/branches/rest-dojo-ui/client/index.html	(revision 305)
+++ Dev/branches/rest-dojo-ui/client/index.html	(revision 311)
@@ -4,8 +4,9 @@
         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
         <title>Research Facilitator Tool</title>
-        <link type="text/css" href="dojotoolkit/dijit/themes/claro/claro.css" rel="stylesheet" />
-        <link type="text/css" href="dojotoolkit/dojox/grid/resources/Grid.css" rel="stylesheet" />
-        <link type="text/css" href="dojotoolkit/dojox/grid/resources/claroGrid.css" rel="stylesheet" />
-        <link type="text/css" href="rft/css/main.css" rel="stylesheet" />
+        <link rel="stylesheet" type="text/css" href="dojotoolkit/dijit/themes/claro/claro.css" />
+        <link rel="stylesheet" type="text/css" href="dojotoolkit/dojox/grid/resources/Grid.css" />
+        <link rel="stylesheet" type="text/css" href="dojotoolkit/dojox/grid/resources/claroGrid.css" />
+        <link rel="stylesheet" type="text/css" href="dojotoolkit/dojox/widget/Toaster/Toaster.css" />
+        <link rel="stylesheet" type="text/css" href="rft/css/main.css" />
         <script type="text/javascript" src="dojotoolkit/dojo/dojo.js" data-dojo-config="async: true, parseOnLoad: false, tlmSiblingOfDojo: false, isDebug: true, baseUrl: '', packagePaths: {'dojotoolkit':['dojo','dijit', 'dojox'], '.':['rft']}"></script>
         <script type="text/javascript" src="rft/run.js"></script>
@@ -13,24 +14,11 @@
     <body class="claro">
         <div id="header" class="mainHeader">
-            <div id="menu" class="mainMenu"  data-dojo-type="dijit.MenuBar">
-                <div data-dojo-type="dijit.MenuBarItem" data-dojo-props="disabled: true">Research Facilitator Tool</div>
-                <div data-dojo-type="rft.ui.MenuBarLink" data-dojo-props="pageId:'sessions'">Sessions</div>
-                <div data-dojo-type="dijit.PopupMenuBarItem">
-                    <span>Content</span>
-                    <div data-dojo-type="dijit.DropDownMenu">
-                        <div data-dojo-type="rft.ui.MenuLink" data-dojo-props="pageId:'surveys'">Surveys</div>
-                        <div data-dojo-type="rft.ui.MenuLink" data-dojo-props="pageId:'questions'">Questions</div>
-                        <div data-dojo-type="rft.ui.MenuLink" data-dojo-props="pageId:'applications'">Applications</div>
-                        <div data-dojo-type="rft.ui.MenuLink" data-dojo-props="pageId:'dashboards'">Dashboards</div>
-                    </div>
-                </div>
-                <div data-dojo-type="rft.ui.MenuBarLink" data-dojo-props="pageId:'results'">Results</div>
-                <div data-dojo-type="dijit.MenuBarItem" id="loginMenu" style="float:right;">Login/Register</div>
+            <div id="menu" class="mainMenu"  data-dojo-type="rft.ui.MainMenu">
             </div>
         </div>
-
         <div id="content" data-dojo-type="dijit.layout.ContentPane" style="width: 100%; height: 100%;">
         </div>
-
+        <div id="toaster" data-dojo-type="rft.ui.Notifications">
+        </div>
     </body>
 </html>
Index: Dev/branches/rest-dojo-ui/client/rft/api.js
===================================================================
--- Dev/branches/rest-dojo-ui/client/rft/api.js	(revision 305)
+++ Dev/branches/rest-dojo-ui/client/rft/api.js	(revision 311)
@@ -1,14 +1,35 @@
-define(['dojo/_base/xhr','dojo/_base/json','dojo/_base/Deferred','./auth'],function(xhr,json,Deferred){
-    return {
-        post: function(path,args) {
-            return xhr.post({
-                url: "../server/api.php/"+path,
-                handleAs: "json",
-                headers: {
-                    "Content-Type": "application/json"
-                },
-                rawBody: json.toJson(args)
-            });
-        }
-    };
-});
+define(['dojo/_base/xhr','dojo/_base/json','dojo/_base/connect'],
+    function(xhr,json,connect){
+        return new (function(){
+            var self = this;
+            this.post = function(path,args) {
+                var dfd = xhr.post({
+                    url: "../server/api.php/"+path,
+                    handleAs: "json",
+                    headers: {
+                        "Content-Type": "application/json"
+                    },
+                    rawBody: json.toJson(args)
+                });
+                dfd.then(
+                    function(){},
+                    self.defaultErrorHandler);
+                return dfd;
+            };
+            this.defaultErrorHandler = function(error) {
+                var msg = "An error occured!";
+                try {
+                    msg = json.fromJson(error.responseText).errorMsg;
+                } catch (ex) {
+                    msg = error.message;
+                }
+                self.notify(msg,'error');
+            };
+            this.notify =  function(text,type) {
+                connect.publish('/rft/notify',{
+                    text: text,
+                    type: type
+                });
+            };
+        })();
+    });
Index: Dev/branches/rest-dojo-ui/client/rft/content.js
===================================================================
--- Dev/branches/rest-dojo-ui/client/rft/content.js	(revision 305)
+++ Dev/branches/rest-dojo-ui/client/rft/content.js	(revision 311)
@@ -21,5 +21,5 @@
 define(['dojo/_base/declare','dojo/_base/connect','dojo/_base/xhr','dojo/_base/json',
     'dojo/_base/lang','dojo/_base/Deferred','dojo/hash','dojo/dom-attr','dojo/dom-construct',
-    'dojo/io-query','dijit','rft/util','rft/ui/_Page'],
+    'dojo/io-query','dijit','./util','./ui/_Page'],
     function(declare,connect,xhr,json,lang,Deferred,hash,attr,domConstruct,uriQuery,dijit,util,_Page){
         return new (function() {
@@ -145,5 +145,5 @@
                     return _goTo(new HRI(path,args));
                 }
-            }
+            };
 
             self.goTo = function(path,args) {
@@ -157,5 +157,5 @@
                     return {};
                 }
-            }
+            };
 
             connect.subscribe('/dojo/hashchange', function(){
Index: Dev/branches/rest-dojo-ui/client/rft/pages/survey.js
===================================================================
--- Dev/branches/rest-dojo-ui/client/rft/pages/survey.js	(revision 305)
+++ Dev/branches/rest-dojo-ui/client/rft/pages/survey.js	(revision 311)
@@ -1,4 +1,4 @@
-define(['dojo/_base/declare','dojo/_base/lang','dojo/_base/event','dojo/_base/Deferred','rft/store','rft/ui/_Page'],
-    function(declare,lang,event,Deferred,store,_Page){
+define(['dojo/_base/declare','dojo/_base/lang','dojo/_base/event','dojo/_base/Deferred','rft/store','rft/ui/_Page','rft/api'],
+    function(declare,lang,event,Deferred,store,_Page,api){
         return declare('rft.pages.survey',[_Page],{
             object: null,
@@ -31,4 +31,7 @@
                     this.object = obj;
                     this.setFields(obj);
+                    api.notify("Object saved");
+                }),lang.hitch(this,function(){
+                    api.notify("Object save failed",'error');
                 }));
                 event.stop(evt);
Index: Dev/branches/rest-dojo-ui/client/rft/run.js
===================================================================
--- Dev/branches/rest-dojo-ui/client/rft/run.js	(revision 305)
+++ Dev/branches/rest-dojo-ui/client/rft/run.js	(revision 311)
@@ -25,6 +25,8 @@
     'dojox/grid/DataGrid',
     'dojox/widget/TitleGroup',
+    'rft/ui/MainMenu',
     'rft/ui/MenuBarLink',
     'rft/ui/MenuLink',
+    'rft/ui/Notifications',
     'rft/ui/LineWithActionsWidget',
     'rft/ui/QuestionWidget',
Index: Dev/branches/rest-dojo-ui/client/rft/store.js
===================================================================
--- Dev/branches/rest-dojo-ui/client/rft/store.js	(revision 305)
+++ Dev/branches/rest-dojo-ui/client/rft/store.js	(revision 311)
@@ -1,4 +1,4 @@
-define(['dojo/_base/lang','dojo/_base/array','dojo/_base/Deferred','dojo/store/JsonRest'],
-    function(lang,array,Deferred,JsonRest){
+define(['dojo/_base/lang','dojo/_base/array','dojo/_base/Deferred','dojo/store/JsonRest','./api'],
+    function(lang,array,Deferred,JsonRest,api){
     
         var OBJ_TYPE = '__objectType';
@@ -20,4 +20,5 @@
                 idProperty: OBJ_UID
             });
+            var errHandler = api.defaultErrorHandler;
             return lang.delegate(jsonStore,{
                 query: function(query, directives){
@@ -26,20 +27,20 @@
                             return new RftObject(typeof result == "object" ? result : object);
                         });
-                    });
+                    },errHandler);
                 },
                 get: function(id, directives){
                     return Deferred.when( jsonStore.get(id,directives), function(result){
                         return new RftObject(typeof result == "object" ? result : object);
-                    });
+                    },errHandler);
                 },
                 add: function(object, directives){
                     return Deferred.when( jsonStore.add(object,directives), function(result){
                         return new RftObject(typeof result == "object" ? result : object);
-                    });
+                    },errHandler);
                 },
                 put: function(object, directives){
                     return Deferred.when( jsonStore.put(object,directives), function(result) {
                         return new RftObject(typeof result == "object" ? result : object);
-                    });
+                    },errHandler);
                 },
                 remove: function(id, directives){
Index: Dev/branches/rest-dojo-ui/client/rft/ui/AccordionList.js
===================================================================
--- Dev/branches/rest-dojo-ui/client/rft/ui/AccordionList.js	(revision 305)
+++ Dev/branches/rest-dojo-ui/client/rft/ui/AccordionList.js	(revision 311)
@@ -2,5 +2,5 @@
     'dojo/_base/Deferred','dojo/dom-construct','dijit/_WidgetBase',
     'dijit/_TemplatedMixin','dijit/_WidgetsInTemplateMixin','dijit/TitlePane',
-    'rft/ui/LineWithActionsWidget','dojo/text!rft/ui/templates/AccordionList.html'],
+    'rft/ui/LineWithActionsWidget','dojo/text!./templates/AccordionList.html'],
     function(declare,lang,array,
         Deferred,domConstruct,_WidgetBase,
Index: Dev/branches/rest-dojo-ui/client/rft/ui/MainMenu.js
===================================================================
--- Dev/branches/rest-dojo-ui/client/rft/ui/MainMenu.js	(revision 311)
+++ Dev/branches/rest-dojo-ui/client/rft/ui/MainMenu.js	(revision 311)
@@ -0,0 +1,7 @@
+define(['dojo/_base/declare','dijit/_WidgetBase',
+    'dijit/_TemplatedMixin','dijit/_WidgetsInTemplateMixin','dojo/text!./templates/MainMenu.html'],
+    function(declare,_WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin,template){
+        return declare('rft.ui.MainMenu',[_WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin],{
+            templateString: template
+        });
+    });
Index: Dev/branches/rest-dojo-ui/client/rft/ui/Notifications.js
===================================================================
--- Dev/branches/rest-dojo-ui/client/rft/ui/Notifications.js	(revision 311)
+++ Dev/branches/rest-dojo-ui/client/rft/ui/Notifications.js	(revision 311)
@@ -0,0 +1,17 @@
+define(['dojo/_base/declare','dojo/_base/lang','dojo/_base/connect','dojox/widget/Toaster'],
+    function(declare,lang,connect,Toaster){
+        return declare('rft.ui.Notifications',[Toaster],{
+            positionDirection: "br-up",
+            duration: 1000,
+            postCreate: function() {
+                this.inherited(arguments);
+                this.handle = connect.subscribe('/rft/notify',lang.hitch(this,function(notification){
+                    this.setContent(notification.text,notification.type || 'message');
+                }));
+            },
+            destroy: function() {
+                connect.unsubscribe(this.handle);
+                this.inherited(arguments);
+            }
+        });
+    });
Index: Dev/branches/rest-dojo-ui/client/rft/ui/templates/MainMenu.html
===================================================================
--- Dev/branches/rest-dojo-ui/client/rft/ui/templates/MainMenu.html	(revision 311)
+++ Dev/branches/rest-dojo-ui/client/rft/ui/templates/MainMenu.html	(revision 311)
@@ -0,0 +1,17 @@
+<div class="mainMenu">
+    <div  data-dojo-type="dijit.MenuBar">
+        <div data-dojo-type="dijit.MenuBarItem" data-dojo-props="disabled: true">Research Facilitator Tool</div>
+        <div data-dojo-type="rft.ui.MenuBarLink" data-dojo-props="pageId:'sessions'">Sessions</div>
+        <div data-dojo-type="dijit.PopupMenuBarItem">
+            <span>Content</span>
+            <div data-dojo-type="dijit.DropDownMenu">
+                <div data-dojo-type="rft.ui.MenuLink" data-dojo-props="pageId:'surveys'">Surveys</div>
+                <div data-dojo-type="rft.ui.MenuLink" data-dojo-props="pageId:'questions'">Questions</div>
+                <div data-dojo-type="rft.ui.MenuLink" data-dojo-props="pageId:'applications'">Applications</div>
+                <div data-dojo-type="rft.ui.MenuLink" data-dojo-props="pageId:'dashboards'">Dashboards</div>
+            </div>
+        </div>
+        <div data-dojo-type="rft.ui.MenuBarLink" data-dojo-props="pageId:'results'">Results</div>
+        <div data-dojo-type="dijit.MenuBarItem" id="loginMenu" style="float:right;">Login/Register</div>
+    </div>
+</div>
Index: Dev/branches/rest-dojo-ui/client/rft/ui/templates/MultipleChoiceWidget.html
===================================================================
--- Dev/branches/rest-dojo-ui/client/rft/ui/templates/MultipleChoiceWidget.html	(revision 305)
+++ Dev/branches/rest-dojo-ui/client/rft/ui/templates/MultipleChoiceWidget.html	(revision 311)
@@ -1,5 +1,4 @@
 <div class="${baseClass}">
     <div data-dojo-attach-point="rows">
-        <tr><td>a</td>
     </div>
     <div data-dojo-attach-point="buttons" class="row">
