var FancyUpload=new Class({options:{url:false,swf:"Swiff.Uploader.swf",multiple:true,queued:true,types:{"Music (*.mp3)":"*.mp3"},limitSize:false,limitFiles:false,createReplacement:null,instantStart:false,allowDuplicates:false,optionFxDuration:250,container:null,queueList:"photoupload-queue",onComplete:Class.empty,onError:Class.empty,onCancel:Class.empty,onUpload:Class.empty,onAllComplete:Class.empty,txtBrowse:"Browse Files",txtUploading:"Uploading"},initialize:function(B,A){this.element=$(B);this.setOptions(A);this.form=$(this.element.form||null);this.options.url=this.options.url||(this.form&&this.form.action)||location.href;this.fileList=[];this.uploader=new Swiff.Uploader({onOpen:this.onOpen.bind(this),onProgress:this.onProgress.bind(this),onComplete:this.onComplete.bind(this),onError:this.onError.bind(this),onSelect:this.onSelect.bind(this)},this.initializeFlash.bind(this),{swf:this.options.swf,types:this.options.types,multiple:this.options.multiple,queued:this.options.queued,container:this.options.container})},initializeFlash:function(){this.queue=$(this.options.queueList);if(this.form){this.form.addEvent("submit",this.upload.bindWithEvent(this))}if(this.options.createReplacement){this.options.createReplacement(this.element)}else{new Element("input",{type:"button",value:this.options.txtBrowse,events:{click:this.browse.bind(this)}}).injectBefore(this.element);this.element.remove()}},browse:function(){this.uploader.browse()},upload:function(A){if(A){A.stop()}this.fireEvent("onUpload",this);this.uploader.send(this.options.url)},onSelect:function(A,B){if(this.uploadTimer){this.uploadTimer=$clear(this.uploadTimer)}if((this.options.limitSize&&(B>this.options.limitSize))||(this.options.limitFiles&&(this.fileList.length>=this.options.limitFiles))||(!this.options.allowDuplicates&&this.findFile(A,B)!=-1)){return false}this.addFile(A,B);if(this.options.instantStart){this.uploadTimer=this.upload.delay(250,this)}return true},onOpen:function(B,C){var A=this.findFile(B,C);this.fileList[A].status=1;if(this.fileList[A].fx){return }this.fileList[A].fx=new Element("div",{"class":"queue-subloader"}).injectInside(new Element("div",{"class":"queue-loader"}).setHTML(this.options.txtUploading).injectInside(this.fileList[A].element)).effect("width",{duration:200,wait:false,unit:"%",transition:Fx.Transitions.linear}).set(0)},onProgress:function(C,B,D,A){this.uploadStatus(C,D,A)},onComplete:function(B,C){var A=this.uploadStatus(B,C,100);this.fileList[A].fx.element.setHTML("Completed");this.fileList[A].status=2;this.highlight(A,"e1ff80");this.checkComplete(B,C,"onComplete")},onError:function(C,D,B){var E="Upload failed ("+B+")";switch(B.toInt()){case 500:E="Internal server error, please contact Administrator!";break;case 400:E="Upload failed, please check your filesize!";break;case 409:E="Could not process image, please choose another!";break;case 415:E="Unsupported media type, please upload GIF, PNG, TIFF or JPEG!";break;case 412:E="Invalid target, please reload page and try again!";break;case 417:E="Photo too small, please keep our photo manifest in mind!";break}var A=this.uploadStatus(C,D,100);this.fileList[A].fx.element.setStyle("background-color","#ffd780").setHTML(E);this.fileList[A].status=2;this.highlight(A,"ffd780");this.checkComplete(C,D,"onError")},checkComplete:function(A,B,C){this.fireEvent(C,[A,B]);if(this.nextFile()==-1){this.fireEvent("onAllComplete")}},addFile:function(A,B){if(!this.options.multiple&&this.fileList.length){this.remove(this.fileList[0].name,this.fileList[0].size)}this.fileList.push({name:A,size:B,status:0,percentage:0,element:new Element("li").setHTML('<span class="queue-file">'+A+'</span><span class="queue-size" title="'+B+' byte">~'+Math.ceil(B/1000)+" kb</span>").injectInside(this.queue)});new Element("a",{href:"javascript:void(0)","class":"input-delete",title:"Remove from queue",events:{click:this.cancelFile.bindWithEvent(this,[A,B])}}).injectBefore(this.fileList.getLast().element.getFirst());this.highlight(this.fileList.length-1,"e1ff80")},uploadStatus:function(C,D,A){var B=this.findFile(C,D);this.fileList[B].fx.start(A).element.setHTML(A+"%");this.fileList[B].percentage=A;return B},uploadOverview:function(){var B=this.fileList.length,C=-1,A=0;while(++C<B){A+=this.fileList[C].percentage}return Math.ceil(A/B)},highlight:function(B,A){return this.fileList[B].element.effect("background-color",{duration:this.options.optionFxDuration}).start(A,"fff")},cancelFile:function(C,A,B){C.stop();this.remove(A,B)},remove:function(B,C,A){if(B){A=this.findFile(B,C)}if(A==-1){return }if(this.fileList[A].status<2){this.uploader.remove(B,C);this.checkComplete(B,C,"onCancel")}this.fileList[A].element.effect("opacity",{duration:this.options.optionFxDuration}).start(1,0).chain(Element.remove.pass([this.fileList[A].element],Element));this.fileList.splice(A,1);return },findFile:function(B,D){var A=this.fileList.length,C=-1;while(++C<A){if(this.fileList[C].name==B&&this.fileList[C].size==D){return C}}return -1},nextFile:function(){var A=this.fileList.length,B=-1;while(++B<A){if(this.fileList[B].status!=2){return B}}return -1},clearList:function(A){var B=-1;while(++B<this.fileList.length){if(A||this.fileList[B].status==2){this.remove(0,0,0,B--)}}}});FancyUpload.implement(new Events,new Options);