Imgorg.UploadQueue = Ext.extend(Ext.Panel,{
    swfu
: '',
    autoRemove
: false,
    uploaded
: false,
   
    initComponent
: function() {
       
Ext.apply(this,{
            layout
: 'fit',
            autoScroll
: true,
            items
: [{
                xtype
: 'dataview',
                id
: 'img-uploaddv',
                autoWidth
: true,
                tpl
: new Ext.XTemplate(
                   
'',
                       
'
',
                           
'
{name}
',
                           
'
',
                           
'
',
                           
'
{size:fileSize}
',
                       
'
',
                   
'
'
               
),
                store
: new Ext.data.JsonStore({
                    root
: '',
                    id
: 'id',
                    fields
: [
                       
{name: 'creationdate', type: 'date'},
                       
{name: 'modificationdate', type: 'date'},
                       
'filestatus','id','index','name','size','type','dbid'
                   
]
               
}),
                itemSelector
: 'div.upload-file',
                selectedClass
: 'upload-file-selected',
                singleSelect
: true
           
}],
            tbar
:[{
                text
: 'Start Upload',
                handler
: this.startUpload,
                scope
: this,
                iconCls
: 'start-upload'
           
},{
                text
: 'Clear',
                handler
: this.cancelUpload,
                scope
: this,
                iconCls
: 'cancel'
           
},'-',{
                text
: 'Add to Album',
                handler
: this.addAllAlbum,
                scope
: this,
                iconCls
: 'album-add'
           
},{
                text
: 'Tag',
                handler
: this.tagAll,
                scope
: this,
                iconCls
: 'tag'
           
},
           
'->',{
                xtype
: 'checkbox',
                checked
: this.autoRemove,
                listeners
: {
                    check
: function(cb, checked) {
                       
this.autoRemove = checked;
                   
},
                    scope
: this
               
}
           
},'Auto-Remove Uploaded']
       
});
       
Imgorg.UploadQueue.superclass.initComponent.call(this);
       
       
this.progressBars = {};
       
       
Ext.ux.SwfuMgr.on('filequeued', this.addFile, this);
       
Ext.ux.SwfuMgr.on('uploadprogress', this.updateProgress, this);
       
Ext.ux.SwfuMgr.on('uploadsuccess', this.uploadSuccess, this);
   
},
   
    getDv
: function() {
       
if (!this.imgUplDv) {
           
this.imgUplDv = this.getComponent('img-uploaddv');
       
}
       
return this.imgUplDv;
   
},
   
    startUpload
: function() {
       
this.swfu.startUpload();
   
},
   
    cancelUpload
: function() {
       
this.swfu.cancelUpload();
       
for (var pb in this.progressBars) {
           
this.progressBars[pb].destroy();
       
}
       
this.getDv().store.removeAll();
       
this.uploaded = false;
   
},
   
    addFile
: function(swfu, file) {
       
this.getDv().store.loadData([file], true);
   
},
   
    addAllAlbum
: function(btn) {
       
if (!this.uploaded) {
           
Ext.Msg.alert('Warning', 'You must upload files before you can add them to an Album');
           
return;
       
}
       
var dv = this.getDv();
       
var recs = dv.getRecords(dv.getNodes());
       
if (!this.albumWin) {
           
this.albumWin = new Imgorg.AlbumWin();
       
}
       
this.albumWin.selectedRecords = recs;
       
this.albumWin.show(btn.btnEl.dom);
   
},
   
    tagAll
: function(btn) {
       
if (!this.uploaded) {
           
Ext.Msg.alert('Warning', 'You must upload files before you can Tag them');
           
return;
       
}
       
var dv = this.getDv();
       
var recs = dv.getRecords(dv.getNodes());
       
Imgorg.TagWin.selectedRecords = recs;
       
Imgorg.TagWin.show(btn.btnEl.dom);
   
},
   
    updateProgress
: function(swfu, file, complete, total) {
       
if (this.progressBars[file.id]) {
           
this.progressBars[file.id].updateProgress(file.percentUploaded/100,Math.round(file.percentUploaded)+'% Completed... '+Ext.util.Format.fileSize(file.currentSpeed)+'s');
       
} else {
           
this.progressBars[file.id] = new Ext.ProgressBar({
                text
:'0% Completed...',
                renderTo
: file.id+'-pb'
           
});
       
}
   
},
   
    uploadSuccess
: function(swfu, file, data) {
       
var store = this.getDv().store;
       
var rec = store.getById(file.id);
       
if (this.progressBars[file.id]) {
           
this.progressBars[file.id].updateProgress(1, '100% Completed...');
       
}
       
if (this.autoRemove) {
            store
.remove(rec);
       
}
       
var data = Ext.decode(Ext.util.Format.stripTags(data));
        rec
.data.dbid = data.result.res.id;
       
this.uploaded = true;
   
}
});
Ext.reg('img-uploadqueue', Imgorg.UploadQueue);

Ext.ux.SwfuManager = Ext.extend(Ext.util.Observable, {
   
constructor: function(config) {
       
Ext.ux.SwfuManager.superclass.constructor.call(this, config);
       
this.addEvents(
           
'filequeued',
           
'uploadstart',
           
'uploadprogress',
           
'uploaderror',
           
'uploadsuccess'
       
);
   
}
});

Ext.ux.SwfuMgr = new Ext.ux.SwfuManager();