YUI().use('event', 'event-focus','event-custom', 'querystring-parse','oop', function(Y) {Y.on("domready", function() { 
    //make running app object accessible all over
    var theApp = Themer.theApp = new Themer.appView();
    
    //Spin up watchers...
    Themer.Watcher.init(theApp);

    //Returning from the callback...
    if(window.location.search != '') {
        var qs = Y.QueryString.parse(window.location.search.replace('?', '')),
            shopid = qs.shop.replace('.myshopify.com', '', 'i');

        theApp.shops.create({
            id: shopid,
            api_key: APP_API_KEY,
            password: qs.p
        }, function(err) {
            //Hack hack hack!
            if(!err) {
                Y.log('Shop Created!');
                Themer.shopFocus = shopid; //force focus onto new shop
            } else {
                //@todo Throw up error panel.
                alert(err);
            }
        });
    }

    Y.Global.on('asset:send', function(e) {
        console.log('asset:send listener');

        var key = e.relative,
            path = e.base.concat(Ti.Filesystem.getSeparator(), e.relative),
            failureHandler = function(e) {
                if(e.timedOut) {
                    growlTimedOut();
                } 
                else {
                    //output error to console
                    Ti.API.error(e.status);
                    Ti.API.error(e.statusText);
                    var response = JSON.parse(e.responseText);
                    var errors = response.errors || {};
                    Y.each(errors, function(message) {
                        growl({
                            title: 'Error uploading',
                            message: key.concat(' - ', message)
                        });
                    });
                }
            };

        Themer.IO.sendAsset(e.shop, e.theme, key, path, {failure: failureHandler});
    });

    //Stop right click outside of the LIs
    //LI contextmenu listener setup in view.js
    Y.one('body').on('contextmenu', function(e) {
        // e.preventDefault();
        //Remove contextual right click options
        // var emptyMenu = Ti.UI.createMenu();
        // Ti.UI.setContextMenu(emptyMenu);
    });

});});


@@ -1133,16 +1133,138 @@
 ative),%0A
+            successHandler = function(_e) %7B%0A                growl(%7Btitle: 'File Uploaded', message: key%7D);%0A            %7D,%0A
         
@@ -1285,32 +1285,33 @@
 dler = function(
+_
 e) %7B%0A           
@@ -1318,16 +1318,17 @@
      if(
+_
 e.timedO
@@ -1483,32 +1483,33 @@
    Ti.API.error(
+_
 e.status);%0A     
@@ -1536,16 +1536,17 @@
 I.error(
+_
 e.status
@@ -1598,16 +1598,17 @@
 N.parse(
+_
 e.respon
@@ -2020,16 +2020,41 @@
  path, %7B
+success: successHandler, 
 failure:

Add success handler to send growl message on successful upload switch name of obj passed to callback