var S3FlashUpload=new Class({Implements:[Options,Events],options:{form:null,progress:null,file:null,fakeFile:null,text:null,browse:null,s3BucketUri:null,s3Form:null,s3ContentType:null,s3FilePrefix:null,name:"flashUpload",fieldName:"fileName",maxUploadSize:67108864,path:"swiff.uploader.swf",messageEmptyUploadSize:"Please upload only non-empty files.",messageMaxUploadSize:"Please upload only files smaller than {maxUploadSize}.",messageUploadFailed:'Upload "{file}" failed. The upload will switch to the Basic uploader.',onLoad:Class.empty,onSubmit:Class.empty,onUpload:Class.empty,onSelect:Class.empty,onSelectError:Class.empty,onError:Class.empty,onComplete:Class.empty,debug:false},initialize:function(a){this.setOptions(a);if(!a.onSelectError){this.addEvent("onSelectError",this.onSelectError)}if(!a.onError){this.addEvent("onError",this.onError)}this.form=$(this.options.form);this.progress=$(this.options.progress);this.file=$(this.options.file);this.fakeFile=$(this.options.fakeFile);this.text=$(this.options.text);this.browse=$(this.options.browse);this.s3Form=$(this.options.s3Form);this.s3ContentType=$(this.options.s3ContentType);this.maxUploadSizeKB=this.sizeToKB(this.options.maxUploadSize);this.loaded=false;this.isStandardUploader=true;this.isFlashUploader=false;if(this.form&&this.progress&&this.file&&this.fakeFile&&this.text&&this.browse&&this.s3Form&&this.s3ContentType){this.activated=true;this.fileId=this.file.getProperty("id");this.fakeFile.setProperty("value","");this.text.setProperty("value","");this.text.setProperty("autocomplete","off");if(Browser.Plugins.Flash.version>=9&&!(Browser.Engine.webkit419||Browser.Engine.presto925)){this.swiffy=new Uploader(this.progress,{url:this.s3Form.getProperty("action"),id:this.options.name+"Swiffy",fieldName:"file",limitSize:this.options.maxUploadSize,path:this.options.path,target:this.browse,debug:this.options.debug,onLoad:function(){this.loaded=true;this.switchToFlashUploader();this.fireEvent("onLoad")}.bind(this),onSelect:function(b){if(b.size>this.options.maxUploadSize||b.size==0){this.fireEvent("onSelectError",b);return false}else{var c=b.name.trim();this.text.setProperty("value",c);this.s3ContentType.value=MIMEtype.getType(c);this.fireEvent("onSelect",b);return true}}.bind(this),fileError:this.uploadError.bind(this),fileUpload:function(c,b){this.progress.removeClass("hidden");this.fireEvent("onUpload",c)}.bind(this),fileComplete:function(e,d){var c=null;if(d=="201"){c=this.options.s3BucketUri+encodeURIComponent(this.options.s3FilePrefix+e.name.trim())}else{if(Browser.Engine.trident){var g=new ActiveXObject("Microsoft.XMLDOM");g.async=false;g.loadXML(d)}else{var g=new DOMParser().parseFromString(d,"text/xml")}var h=g.getElementsByTagName("Location");if(h.length){c=h[0].childNodes[0].nodeValue}else{var b=g.getElementsByTagName("Message");if(b.length){var f=b[0].childNodes[0].nodeValue}else{var f=""}this.uploadError(e,f,"")}}if(c){this.fakeFile.setProperty("value",c);this.fireEvent("onComplete",{file:e,response:d});this.form.submit()}}.bind(this)});this.browse.addEvent("click",function(b){b.stop();this.swiffy.browse()}.bind(this))}else{this.swiffy=null}}else{this.activated=false}},delaySubmit:function(){if(this.activated){this.form.submit()}},submit:function(){if(this.activated){if(this.isFlashUploader&&this.swiffy.files.length){this.swiffy.upload({data:this.s3Form})}else{this.fireEvent("onSubmit");this.delaySubmit.delay(100,this)}}},switchToStandardUploader:function(){if(this.activated&&this.isFlashUploader){this.text.removeProperty("id");this.fakeFile.removeProperty("name");this.file.setProperty("id",this.fileId);this.file.setProperty("name",this.options.fieldName);this.text.addClass("hidden");this.browse.addClass("hidden");this.file.removeClass("hidden");this.isStandardUploader=true;this.isFlashUploader=false;this.reposition()}},switchToFlashUploader:function(){if(this.loaded&&this.isStandardUploader){this.file.removeProperty("id");this.file.removeProperty("name");this.text.setProperty("id",this.fileId);this.fakeFile.setProperty("name",this.options.fieldName);this.file.addClass("hidden");this.text.removeClass("hidden");this.browse.removeClass("hidden");this.isStandardUploader=false;this.isFlashUploader=true;this.reposition()}},reposition:function(){if(this.loaded){this.swiffy.reposition()}},sizeToKB:function(a){var b="B";if((a/1048576)>1){b="MB";a/=1048576}else{if((a/1024)>1){b="kB";a/=1024}}return a.round(1)+" "+b},uploadError:function(b,a,c){this.progress.addClass("hidden");this.text.setProperty("value","");this.fireEvent("onError",[b,a,c])},onSelectError:function(a){if(a.size==0){var b=this.options.messageEmptyUploadSize}else{var b=this.options.messageMaxUploadSize.substitute({maxUploadSize:this.maxUploadSizeKB})}alert(b)},onError:function(b,a,d){this.switchToStandardUploader();var c={file:b.name.trim()};alert(this.options.messageUploadFailed.substitute(c))}});