Swiff.Uploader = new Class({
options: {
types: false,
multiple: true,
queued: true,
swf: null,
url: null,
container: null
},
callBacks: {
onOpen: Class.empty,
onProgress: Class.empty,
onSelect: Class.empty,
onComplete: Class.empty,
onError: Class.empty,
onCancel: Class.empty
},
initialize: function(callBacks, onLoaded, options){
if (Swiff.getVersion() < 8) return false;
this.setOptions(options);
this.onLoaded = onLoaded;
var calls = $extend($merge(this.callBacks), callBacks || {});
for (p in calls) calls[p] = calls[p].bind(this);
this.instance = Swiff.nextInstance();
Swiff.callBacks[this.instance] = calls;
this.object = Swiff.Uploader.register(this.loaded.bind(this), this.options.swf, this.options.container);
return this;
},
loaded: function(){
Swiff.remote(this.object, 'create', this.instance, this.options.types, this.options.multiple, this.options.queued, this.options.url);
this.onLoaded.delay(10);
},
browse: function(){
Swiff.remote(this.object, 'browse', this.instance);
},
send: function(url){
Swiff.remote(this.object, 'upload', this.instance, url);
},
remove: function(name, size){
Swiff.remote(this.object, 'remove', this.instance, name, size);
},
fileIndex: function(name, size){
return Swiff.remote(this.object, 'fileIndex', this.instance, name, size);
},
fileList: function(){
return Swiff.remote(this.object, 'filelist', this.instance);
}
});
Swiff.Uploader.implement(new Options);
Swiff.Uploader.extend = $extend;
Swiff.Uploader.extend({
swf: 'Swiff.Uploader.swf',
callBacks: [],
register: function(callBack, url, container){
if (!Swiff.Uploader.object || !Swiff.Uploader.loaded) {
Swiff.Uploader.callBacks.push(callBack);
if (!Swiff.Uploader.object) {
this.box = new Element('div', {
id: 'box',
styles: {
position: 'absolute',
visibility: 'visible',
zIndex: 9999,
overflow: 'hidden',
height: 15, width: 15,
top: 0, left: 0
}});
Swiff.Uploader.object = new Swiff(url || Swiff.Uploader.swf, {
wmode: 'transparent',
width: 1024,
height: 1024,
callBacks: {'onLoad': Swiff.Uploader.onLoad
}});
this.box.appendChild(Swiff.Uploader.object);
(container || document.body).appendChild(this.box);
}}
else callBack.delay(10);
return Swiff.Uploader.object;
},
onLoad: function(){
Swiff.Uploader.loaded = true;
Swiff.Uploader.callBacks.each(function(fn){
fn.delay(10);
});
Swiff.Uploader.callBacks.length = 0;
}});