jquery.uploadify-3.1.js 63 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975
  1. /*
  2. SWFObject v2.2 <http://code.google.com/p/swfobject/>
  3. is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
  4. */
  5. ;var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;
  6. if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;
  7. X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);
  8. ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0;}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");
  9. if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)];}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac};
  10. }(),k=function(){if(!M.w3){return;}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f();
  11. }if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false);}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);
  12. f();}});if(O==top){(function(){if(J){return;}try{j.documentElement.doScroll("left");}catch(X){setTimeout(arguments.callee,0);return;}f();})();}}if(M.wk){(function(){if(J){return;
  13. }if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return;}f();})();}s(f);}}();function f(){if(J){return;}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));
  14. Z.parentNode.removeChild(Z);}catch(aa){return;}J=true;var X=U.length;for(var Y=0;Y<X;Y++){U[Y]();}}function K(X){if(J){X();}else{U[U.length]=X;}}function s(Y){if(typeof O.addEventListener!=D){O.addEventListener("load",Y,false);
  15. }else{if(typeof j.addEventListener!=D){j.addEventListener("load",Y,false);}else{if(typeof O.attachEvent!=D){i(O,"onload",Y);}else{if(typeof O.onload=="function"){var X=O.onload;
  16. O.onload=function(){X();Y();};}else{O.onload=Y;}}}}}function h(){if(T){V();}else{H();}}function V(){var X=j.getElementsByTagName("body")[0];var aa=C(r);
  17. aa.setAttribute("type",q);var Z=X.appendChild(aa);if(Z){var Y=0;(function(){if(typeof Z.GetVariable!=D){var ab=Z.GetVariable("$version");if(ab){ab=ab.split(" ")[1].split(",");
  18. M.pv=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)];}}else{if(Y<10){Y++;setTimeout(arguments.callee,10);return;}}X.removeChild(aa);Z=null;H();
  19. })();}else{H();}}function H(){var ag=o.length;if(ag>0){for(var af=0;af<ag;af++){var Y=o[af].id;var ab=o[af].callbackFn;var aa={success:false,id:Y};if(M.pv[0]>0){var ae=c(Y);
  20. if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa);}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;
  21. ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class");}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align");
  22. }var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad<ac;ad++){if(X[ad].getAttribute("name").toLowerCase()!="movie"){ah[X[ad].getAttribute("name")]=X[ad].getAttribute("value");
  23. }}P(ai,ah,Y,ab);}else{p(ae);if(ab){ab(aa);}}}}}else{w(Y,true);if(ab){var Z=z(Y);if(Z&&typeof Z.SetVariable!=D){aa.success=true;aa.ref=Z;}ab(aa);}}}}}function z(aa){var X=null;
  24. var Y=c(aa);if(Y&&Y.nodeName=="OBJECT"){if(typeof Y.SetVariable!=D){X=Y;}else{var Z=Y.getElementsByTagName(r)[0];if(Z){X=Z;}}}return X;}function A(){return !a&&F("6.0.65")&&(M.win||M.mac)&&!(M.wk&&M.wk<312);
  25. }function P(aa,ab,X,Z){a=true;E=Z||null;B={success:false,id:X};var ae=c(X);if(ae){if(ae.nodeName=="OBJECT"){l=g(ae);Q=null;}else{l=ae;Q=X;}aa.id=R;if(typeof aa.width==D||(!/%$/.test(aa.width)&&parseInt(aa.width,10)<310)){aa.width="310";
  26. }if(typeof aa.height==D||(!/%$/.test(aa.height)&&parseInt(aa.height,10)<137)){aa.height="137";}j.title=j.title.slice(0,47)+" - Flash Player Installation";
  27. var ad=M.ie&&M.win?"ActiveX":"PlugIn",ac="MMredirectURL="+O.location.toString().replace(/&/g,"%26")+"&MMplayerType="+ad+"&MMdoctitle="+j.title;if(typeof ab.flashvars!=D){ab.flashvars+="&"+ac;
  28. }else{ab.flashvars=ac;}if(M.ie&&M.win&&ae.readyState!=4){var Y=C("div");X+="SWFObjectNew";Y.setAttribute("id",X);ae.parentNode.insertBefore(Y,ae);ae.style.display="none";
  29. (function(){if(ae.readyState==4){ae.parentNode.removeChild(ae);}else{setTimeout(arguments.callee,10);}})();}u(aa,ab,X);}}function p(Y){if(M.ie&&M.win&&Y.readyState!=4){var X=C("div");
  30. Y.parentNode.insertBefore(X,Y);X.parentNode.replaceChild(g(Y),X);Y.style.display="none";(function(){if(Y.readyState==4){Y.parentNode.removeChild(Y);}else{setTimeout(arguments.callee,10);
  31. }})();}else{Y.parentNode.replaceChild(g(Y),Y);}}function g(ab){var aa=C("div");if(M.win&&M.ie){aa.innerHTML=ab.innerHTML;}else{var Y=ab.getElementsByTagName(r)[0];
  32. if(Y){var ad=Y.childNodes;if(ad){var X=ad.length;for(var Z=0;Z<X;Z++){if(!(ad[Z].nodeType==1&&ad[Z].nodeName=="PARAM")&&!(ad[Z].nodeType==8)){aa.appendChild(ad[Z].cloneNode(true));
  33. }}}}}return aa;}function u(ai,ag,Y){var X,aa=c(Y);if(M.wk&&M.wk<312){return X;}if(aa){if(typeof ai.id==D){ai.id=Y;}if(M.ie&&M.win){var ah="";for(var ae in ai){if(ai[ae]!=Object.prototype[ae]){if(ae.toLowerCase()=="data"){ag.movie=ai[ae];
  34. }else{if(ae.toLowerCase()=="styleclass"){ah+=' class="'+ai[ae]+'"';}else{if(ae.toLowerCase()!="classid"){ah+=" "+ae+'="'+ai[ae]+'"';}}}}}var af="";for(var ad in ag){if(ag[ad]!=Object.prototype[ad]){af+='<param name="'+ad+'" value="'+ag[ad]+'" />';
  35. }}aa.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+ah+">"+af+"</object>";N[N.length]=ai.id;X=c(ai.id);}else{var Z=C(r);Z.setAttribute("type",q);
  36. for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac]);}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac]);
  37. }}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab]);}}aa.parentNode.replaceChild(Z,aa);X=Z;}}return X;}function e(Z,X,Y){var aa=C("param");
  38. aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa);}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";
  39. (function(){if(X.readyState==4){b(Y);}else{setTimeout(arguments.callee,10);}})();}else{X.parentNode.removeChild(X);}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null;
  40. }}Y.parentNode.removeChild(Y);}}function c(Z){var X=null;try{X=j.getElementById(Z);}catch(Y){}return X;}function C(X){return j.createElement(X);}function i(Z,X,Y){Z.attachEvent(X,Y);
  41. I[I.length]=[Z,X,Y];}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false;
  42. }function v(ac,Y,ad,ab){if(M.ie&&M.mac){return;}var aa=j.getElementsByTagName("head")[0];if(!aa){return;}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;
  43. G=null;}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1];
  44. }G=X;}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y);}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"));
  45. }}}function w(Z,X){if(!m){return;}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y;}else{v("#"+Z,"visibility:"+Y);}}function L(Y){var Z=/[\\\"<>\.;]/;
  46. var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y;}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;
  47. for(var ab=0;ab<ac;ab++){I[ab][0].detachEvent(I[ab][1],I[ab][2]);}var Z=N.length;for(var aa=0;aa<Z;aa++){y(N[aa]);}for(var Y in M){M[Y]=null;}M=null;for(var X in swfobject){swfobject[X]=null;
  48. }swfobject=null;});}}();return{registerObject:function(ab,X,aa,Z){if(M.w3&&ab&&X){var Y={};Y.id=ab;Y.swfVersion=X;Y.expressInstall=aa;Y.callbackFn=Z;o[o.length]=Y;
  49. w(ab,false);}else{if(Z){Z({success:false,id:ab});}}},getObjectById:function(X){if(M.w3){return z(X);}},embedSWF:function(ab,ah,ae,ag,Y,aa,Z,ad,af,ac){var X={success:false,id:ah};
  50. if(M.w3&&!(M.wk&&M.wk<312)&&ab&&ah&&ae&&ag&&Y){w(ah,false);K(function(){ae+="";ag+="";var aj={};if(af&&typeof af===r){for(var al in af){aj[al]=af[al];}}aj.data=ab;
  51. aj.width=ae;aj.height=ag;var am={};if(ad&&typeof ad===r){for(var ak in ad){am[ak]=ad[ak];}}if(Z&&typeof Z===r){for(var ai in Z){if(typeof am.flashvars!=D){am.flashvars+="&"+ai+"="+Z[ai];
  52. }else{am.flashvars=ai+"="+Z[ai];}}}if(F(Y)){var an=u(aj,am,ah);if(aj.id==ah){w(ah,true);}X.success=true;X.ref=an;}else{if(aa&&A()){aj.data=aa;P(aj,am,ah,ac);
  53. return;}else{w(ah,true);}}if(ac){ac(X);}});}else{if(ac){ac(X);}}},switchOffAutoHideShow:function(){m=false;},ua:M,getFlashPlayerVersion:function(){return{major:M.pv[0],minor:M.pv[1],release:M.pv[2]};
  54. },hasFlashPlayerVersion:F,createSWF:function(Z,Y,X){if(M.w3){return u(Z,Y,X);}else{return undefined;}},showExpressInstall:function(Z,aa,X,Y){if(M.w3&&A()){P(Z,aa,X,Y);
  55. }},removeSWF:function(X){if(M.w3){y(X);}},createCSS:function(aa,Z,Y,X){if(M.w3){v(aa,Z,Y,X);}},addDomLoadEvent:K,addLoadEvent:s,getQueryParamValue:function(aa){var Z=j.location.search||j.location.hash;
  56. if(Z){if(/\?/.test(Z)){Z=Z.split("?")[1];}if(aa==null){return L(Z);}var Y=Z.split("&");for(var X=0;X<Y.length;X++){if(Y[X].substring(0,Y[X].indexOf("="))==aa){return L(Y[X].substring((Y[X].indexOf("=")+1)));
  57. }}}return"";},expressInstallCallback:function(){if(a){var X=c(R);if(X&&l){X.parentNode.replaceChild(l,X);if(Q){w(Q,true);if(M.ie&&M.win){l.style.display="block";
  58. }}if(E){E(B);}}a=false;}}};}();
  59. /*
  60. SWFUpload: http://www.swfupload.org, http://swfupload.googlecode.com
  61. mmSWFUpload 1.0: Flash upload dialog - http://profandesign.se/swfupload/, http://www.vinterwebb.se/
  62. SWFUpload is (c) 2006-2007 Lars Huring, Olov Nilzén and Mammon Media and is released under the MIT License:
  63. http://www.opensource.org/licenses/mit-license.php
  64. SWFUpload 2 is (c) 2007-2008 Jake Roberts and is released under the MIT License:
  65. http://www.opensource.org/licenses/mit-license.php
  66. */
  67. var SWFUpload;if(SWFUpload==undefined){SWFUpload=function(a){this.initSWFUpload(a)}}SWFUpload.prototype.initSWFUpload=function(b){try{this.customSettings={};this.settings=b;this.eventQueue=[];this.movieName="SWFUpload_"+SWFUpload.movieCount++;this.movieElement=null;SWFUpload.instances[this.movieName]=this;this.initSettings();this.loadFlash();this.displayDebugInfo()}catch(a){delete SWFUpload.instances[this.movieName];throw a}};SWFUpload.instances={};SWFUpload.movieCount=0;SWFUpload.version="2.2.0 2009-03-25";SWFUpload.QUEUE_ERROR={QUEUE_LIMIT_EXCEEDED:-100,FILE_EXCEEDS_SIZE_LIMIT:-110,ZERO_BYTE_FILE:-120,INVALID_FILETYPE:-130};SWFUpload.UPLOAD_ERROR={HTTP_ERROR:-200,MISSING_UPLOAD_URL:-210,IO_ERROR:-220,SECURITY_ERROR:-230,UPLOAD_LIMIT_EXCEEDED:-240,UPLOAD_FAILED:-250,SPECIFIED_FILE_ID_NOT_FOUND:-260,FILE_VALIDATION_FAILED:-270,FILE_CANCELLED:-280,UPLOAD_STOPPED:-290};SWFUpload.FILE_STATUS={QUEUED:-1,IN_PROGRESS:-2,ERROR:-3,COMPLETE:-4,CANCELLED:-5};SWFUpload.BUTTON_ACTION={SELECT_FILE:-100,SELECT_FILES:-110,START_UPLOAD:-120};SWFUpload.CURSOR={ARROW:-1,HAND:-2};SWFUpload.WINDOW_MODE={WINDOW:"window",TRANSPARENT:"transparent",OPAQUE:"opaque"};SWFUpload.completeURL=function(a){if(typeof(a)!=="string"||a.match(/^https?:\/\//i)||a.match(/^\//)){return a}var c=window.location.protocol+"//"+window.location.hostname+(window.location.port?":"+window.location.port:"");var b=window.location.pathname.lastIndexOf("/");if(b<=0){path="/"}else{path=window.location.pathname.substr(0,b)+"/"}return path+a};SWFUpload.prototype.initSettings=function(){this.ensureDefault=function(b,a){this.settings[b]=(this.settings[b]==undefined)?a:this.settings[b]};this.ensureDefault("upload_url","");this.ensureDefault("preserve_relative_urls",false);this.ensureDefault("file_post_name","Filedata");this.ensureDefault("post_params",{});this.ensureDefault("use_query_string",false);this.ensureDefault("requeue_on_error",false);this.ensureDefault("http_success",[]);this.ensureDefault("assume_success_timeout",0);this.ensureDefault("file_types","*.*");this.ensureDefault("file_types_description","All Files");this.ensureDefault("file_size_limit",0);this.ensureDefault("file_upload_limit",0);this.ensureDefault("file_queue_limit",0);this.ensureDefault("flash_url","swfupload.swf");this.ensureDefault("prevent_swf_caching",true);this.ensureDefault("button_image_url","");this.ensureDefault("button_width",1);this.ensureDefault("button_height",1);this.ensureDefault("button_text","");this.ensureDefault("button_text_style","color: #000000; font-size: 16pt;");this.ensureDefault("button_text_top_padding",0);this.ensureDefault("button_text_left_padding",0);this.ensureDefault("button_action",SWFUpload.BUTTON_ACTION.SELECT_FILES);this.ensureDefault("button_disabled",false);this.ensureDefault("button_placeholder_id","");this.ensureDefault("button_placeholder",null);this.ensureDefault("button_cursor",SWFUpload.CURSOR.ARROW);this.ensureDefault("button_window_mode",SWFUpload.WINDOW_MODE.WINDOW);this.ensureDefault("debug",false);this.settings.debug_enabled=this.settings.debug;this.settings.return_upload_start_handler=this.returnUploadStart;this.ensureDefault("swfupload_loaded_handler",null);this.ensureDefault("file_dialog_start_handler",null);this.ensureDefault("file_queued_handler",null);this.ensureDefault("file_queue_error_handler",null);this.ensureDefault("file_dialog_complete_handler",null);this.ensureDefault("upload_start_handler",null);this.ensureDefault("upload_progress_handler",null);this.ensureDefault("upload_error_handler",null);this.ensureDefault("upload_success_handler",null);this.ensureDefault("upload_complete_handler",null);this.ensureDefault("debug_handler",this.debugMessage);this.ensureDefault("custom_settings",{});this.customSettings=this.settings.custom_settings;if(!!this.settings.prevent_swf_caching){this.settings.flash_url=this.settings.flash_url+(this.settings.flash_url.indexOf("?")<0?"?":"&")+"preventswfcaching="+new Date().getTime()}if(!this.settings.preserve_relative_urls){this.settings.upload_url=SWFUpload.completeURL(this.settings.upload_url);this.settings.button_image_url=SWFUpload.completeURL(this.settings.button_image_url)}delete this.ensureDefault};SWFUpload.prototype.loadFlash=function(){var a,b;if(document.getElementById(this.movieName)!==null){throw"ID "+this.movieName+" is already in use. The Flash Object could not be added"}a=document.getElementById(this.settings.button_placeholder_id)||this.settings.button_placeholder;if(a==undefined){throw"Could not find the placeholder element: "+this.settings.button_placeholder_id}b=document.createElement("div");b.innerHTML=this.getFlashHTML();a.parentNode.replaceChild(b.firstChild,a);if(window[this.movieName]==undefined){window[this.movieName]=this.getMovieElement()}};SWFUpload.prototype.getFlashHTML=function(){return['<object id="',this.movieName,'" type="application/x-shockwave-flash" data="',this.settings.flash_url,'" width="',this.settings.button_width,'" height="',this.settings.button_height,'" class="swfupload">','<param name="wmode" value="',this.settings.button_window_mode,'" />','<param name="movie" value="',this.settings.flash_url,'" />','<param name="quality" value="high" />','<param name="menu" value="false" />','<param name="allowScriptAccess" value="always" />','<param name="flashvars" value="'+this.getFlashVars()+'" />',"</object>"].join("")};SWFUpload.prototype.getFlashVars=function(){var b=this.buildParamString();var a=this.settings.http_success.join(",");return["movieName=",encodeURIComponent(this.movieName),"&amp;uploadURL=",encodeURIComponent(this.settings.upload_url),"&amp;useQueryString=",encodeURIComponent(this.settings.use_query_string),"&amp;requeueOnError=",encodeURIComponent(this.settings.requeue_on_error),"&amp;httpSuccess=",encodeURIComponent(a),"&amp;assumeSuccessTimeout=",encodeURIComponent(this.settings.assume_success_timeout),"&amp;params=",encodeURIComponent(b),"&amp;filePostName=",encodeURIComponent(this.settings.file_post_name),"&amp;fileTypes=",encodeURIComponent(this.settings.file_types),"&amp;fileTypesDescription=",encodeURIComponent(this.settings.file_types_description),"&amp;fileSizeLimit=",encodeURIComponent(this.settings.file_size_limit),"&amp;fileUploadLimit=",encodeURIComponent(this.settings.file_upload_limit),"&amp;fileQueueLimit=",encodeURIComponent(this.settings.file_queue_limit),"&amp;debugEnabled=",encodeURIComponent(this.settings.debug_enabled),"&amp;buttonImageURL=",encodeURIComponent(this.settings.button_image_url),"&amp;buttonWidth=",encodeURIComponent(this.settings.button_width),"&amp;buttonHeight=",encodeURIComponent(this.settings.button_height),"&amp;buttonText=",encodeURIComponent(this.settings.button_text),"&amp;buttonTextTopPadding=",encodeURIComponent(this.settings.button_text_top_padding),"&amp;buttonTextLeftPadding=",encodeURIComponent(this.settings.button_text_left_padding),"&amp;buttonTextStyle=",encodeURIComponent(this.settings.button_text_style),"&amp;buttonAction=",encodeURIComponent(this.settings.button_action),"&amp;buttonDisabled=",encodeURIComponent(this.settings.button_disabled),"&amp;buttonCursor=",encodeURIComponent(this.settings.button_cursor)].join("")};SWFUpload.prototype.getMovieElement=function(){if(this.movieElement==undefined){this.movieElement=document.getElementById(this.movieName)}if(this.movieElement===null){throw"Could not find Flash element"}return this.movieElement};SWFUpload.prototype.buildParamString=function(){var c=this.settings.post_params;var b=[];if(typeof(c)==="object"){for(var a in c){if(c.hasOwnProperty(a)){b.push(encodeURIComponent(a.toString())+"="+encodeURIComponent(c[a].toString()))}}}return b.join("&amp;")};SWFUpload.prototype.destroy=function(){try{this.cancelUpload(null,false);var a=null;a=this.getMovieElement();if(a&&typeof(a.CallFunction)==="unknown"){for(var c in a){try{if(typeof(a[c])==="function"){a[c]=null}}catch(e){}}try{a.parentNode.removeChild(a)}catch(b){}}window[this.movieName]=null;SWFUpload.instances[this.movieName]=null;delete SWFUpload.instances[this.movieName];this.movieElement=null;this.settings=null;this.customSettings=null;this.eventQueue=null;this.movieName=null;return true}catch(d){return false}};SWFUpload.prototype.displayDebugInfo=function(){this.debug(["---SWFUpload Instance Info---\n","Version: ",SWFUpload.version,"\n","Movie Name: ",this.movieName,"\n","Settings:\n","\t","upload_url: ",this.settings.upload_url,"\n","\t","flash_url: ",this.settings.flash_url,"\n","\t","use_query_string: ",this.settings.use_query_string.toString(),"\n","\t","requeue_on_error: ",this.settings.requeue_on_error.toString(),"\n","\t","http_success: ",this.settings.http_success.join(", "),"\n","\t","assume_success_timeout: ",this.settings.assume_success_timeout,"\n","\t","file_post_name: ",this.settings.file_post_name,"\n","\t","post_params: ",this.settings.post_params.toString(),"\n","\t","file_types: ",this.settings.file_types,"\n","\t","file_types_description: ",this.settings.file_types_description,"\n","\t","file_size_limit: ",this.settings.file_size_limit,"\n","\t","file_upload_limit: ",this.settings.file_upload_limit,"\n","\t","file_queue_limit: ",this.settings.file_queue_limit,"\n","\t","debug: ",this.settings.debug.toString(),"\n","\t","prevent_swf_caching: ",this.settings.prevent_swf_caching.toString(),"\n","\t","button_placeholder_id: ",this.settings.button_placeholder_id.toString(),"\n","\t","button_placeholder: ",(this.settings.button_placeholder?"Set":"Not Set"),"\n","\t","button_image_url: ",this.settings.button_image_url.toString(),"\n","\t","button_width: ",this.settings.button_width.toString(),"\n","\t","button_height: ",this.settings.button_height.toString(),"\n","\t","button_text: ",this.settings.button_text.toString(),"\n","\t","button_text_style: ",this.settings.button_text_style.toString(),"\n","\t","button_text_top_padding: ",this.settings.button_text_top_padding.toString(),"\n","\t","button_text_left_padding: ",this.settings.button_text_left_padding.toString(),"\n","\t","button_action: ",this.settings.button_action.toString(),"\n","\t","button_disabled: ",this.settings.button_disabled.toString(),"\n","\t","custom_settings: ",this.settings.custom_settings.toString(),"\n","Event Handlers:\n","\t","swfupload_loaded_handler assigned: ",(typeof this.settings.swfupload_loaded_handler==="function").toString(),"\n","\t","file_dialog_start_handler assigned: ",(typeof this.settings.file_dialog_start_handler==="function").toString(),"\n","\t","file_queued_handler assigned: ",(typeof this.settings.file_queued_handler==="function").toString(),"\n","\t","file_queue_error_handler assigned: ",(typeof this.settings.file_queue_error_handler==="function").toString(),"\n","\t","upload_start_handler assigned: ",(typeof this.settings.upload_start_handler==="function").toString(),"\n","\t","upload_progress_handler assigned: ",(typeof this.settings.upload_progress_handler==="function").toString(),"\n","\t","upload_error_handler assigned: ",(typeof this.settings.upload_error_handler==="function").toString(),"\n","\t","upload_success_handler assigned: ",(typeof this.settings.upload_success_handler==="function").toString(),"\n","\t","upload_complete_handler assigned: ",(typeof this.settings.upload_complete_handler==="function").toString(),"\n","\t","debug_handler assigned: ",(typeof this.settings.debug_handler==="function").toString(),"\n"].join(""))};SWFUpload.prototype.addSetting=function(b,c,a){if(c==undefined){return(this.settings[b]=a)}else{return(this.settings[b]=c)}};SWFUpload.prototype.getSetting=function(a){if(this.settings[a]!=undefined){return this.settings[a]}return""};SWFUpload.prototype.callFlash=function(functionName,argumentArray){argumentArray=argumentArray||[];var movieElement=this.getMovieElement();var returnValue,returnString;try{returnString=movieElement.CallFunction('<invoke name="'+functionName+'" returntype="javascript">'+__flash__argumentsToXML(argumentArray,0)+"</invoke>");returnValue=eval(returnString)}catch(ex){throw"Call to "+functionName+" failed"}if(returnValue!=undefined&&typeof returnValue.post==="object"){returnValue=this.unescapeFilePostParams(returnValue)}return returnValue};SWFUpload.prototype.selectFile=function(){this.callFlash("SelectFile")};SWFUpload.prototype.selectFiles=function(){this.callFlash("SelectFiles")};SWFUpload.prototype.startUpload=function(a){this.callFlash("StartUpload",[a])};SWFUpload.prototype.cancelUpload=function(a,b){if(b!==false){b=true}this.callFlash("CancelUpload",[a,b])};SWFUpload.prototype.stopUpload=function(){this.callFlash("StopUpload")};SWFUpload.prototype.getStats=function(){return this.callFlash("GetStats")};SWFUpload.prototype.setStats=function(a){this.callFlash("SetStats",[a])};SWFUpload.prototype.getFile=function(a){if(typeof(a)==="number"){return this.callFlash("GetFileByIndex",[a])}else{return this.callFlash("GetFile",[a])}};SWFUpload.prototype.addFileParam=function(a,b,c){return this.callFlash("AddFileParam",[a,b,c])};SWFUpload.prototype.removeFileParam=function(a,b){this.callFlash("RemoveFileParam",[a,b])};SWFUpload.prototype.setUploadURL=function(a){this.settings.upload_url=a.toString();this.callFlash("SetUploadURL",[a])};SWFUpload.prototype.setPostParams=function(a){this.settings.post_params=a;this.callFlash("SetPostParams",[a])};SWFUpload.prototype.addPostParam=function(a,b){this.settings.post_params[a]=b;this.callFlash("SetPostParams",[this.settings.post_params])};SWFUpload.prototype.removePostParam=function(a){delete this.settings.post_params[a];this.callFlash("SetPostParams",[this.settings.post_params])};SWFUpload.prototype.setFileTypes=function(a,b){this.settings.file_types=a;this.settings.file_types_description=b;this.callFlash("SetFileTypes",[a,b])};SWFUpload.prototype.setFileSizeLimit=function(a){this.settings.file_size_limit=a;this.callFlash("SetFileSizeLimit",[a])};SWFUpload.prototype.setFileUploadLimit=function(a){this.settings.file_upload_limit=a;this.callFlash("SetFileUploadLimit",[a])};SWFUpload.prototype.setFileQueueLimit=function(a){this.settings.file_queue_limit=a;this.callFlash("SetFileQueueLimit",[a])};SWFUpload.prototype.setFilePostName=function(a){this.settings.file_post_name=a;this.callFlash("SetFilePostName",[a])};SWFUpload.prototype.setUseQueryString=function(a){this.settings.use_query_string=a;this.callFlash("SetUseQueryString",[a])};SWFUpload.prototype.setRequeueOnError=function(a){this.settings.requeue_on_error=a;this.callFlash("SetRequeueOnError",[a])};SWFUpload.prototype.setHTTPSuccess=function(a){if(typeof a==="string"){a=a.replace(" ","").split(",")}this.settings.http_success=a;this.callFlash("SetHTTPSuccess",[a])};SWFUpload.prototype.setAssumeSuccessTimeout=function(a){this.settings.assume_success_timeout=a;this.callFlash("SetAssumeSuccessTimeout",[a])};SWFUpload.prototype.setDebugEnabled=function(a){this.settings.debug_enabled=a;this.callFlash("SetDebugEnabled",[a])};SWFUpload.prototype.setButtonImageURL=function(a){if(a==undefined){a=""}this.settings.button_image_url=a;this.callFlash("SetButtonImageURL",[a])};SWFUpload.prototype.setButtonDimensions=function(c,a){this.settings.button_width=c;this.settings.button_height=a;var b=this.getMovieElement();if(b!=undefined){b.style.width=c+"px";b.style.height=a+"px"}this.callFlash("SetButtonDimensions",[c,a])};SWFUpload.prototype.setButtonText=function(a){this.settings.button_text=a;this.callFlash("SetButtonText",[a])};SWFUpload.prototype.setButtonTextPadding=function(b,a){this.settings.button_text_top_padding=a;this.settings.button_text_left_padding=b;this.callFlash("SetButtonTextPadding",[b,a])};SWFUpload.prototype.setButtonTextStyle=function(a){this.settings.button_text_style=a;this.callFlash("SetButtonTextStyle",[a])};SWFUpload.prototype.setButtonDisabled=function(a){this.settings.button_disabled=a;this.callFlash("SetButtonDisabled",[a])};SWFUpload.prototype.setButtonAction=function(a){this.settings.button_action=a;this.callFlash("SetButtonAction",[a])};SWFUpload.prototype.setButtonCursor=function(a){this.settings.button_cursor=a;this.callFlash("SetButtonCursor",[a])};SWFUpload.prototype.queueEvent=function(b,c){if(c==undefined){c=[]}else{if(!(c instanceof Array)){c=[c]}}var a=this;if(typeof this.settings[b]==="function"){this.eventQueue.push(function(){this.settings[b].apply(this,c)});setTimeout(function(){a.executeNextEvent()},0)}else{if(this.settings[b]!==null){throw"Event handler "+b+" is unknown or is not a function"}}};SWFUpload.prototype.executeNextEvent=function(){var a=this.eventQueue?this.eventQueue.shift():null;if(typeof(a)==="function"){a.apply(this)}};SWFUpload.prototype.unescapeFilePostParams=function(c){var e=/[$]([0-9a-f]{4})/i;var f={};var d;if(c!=undefined){for(var a in c.post){if(c.post.hasOwnProperty(a)){d=a;var b;while((b=e.exec(d))!==null){d=d.replace(b[0],String.fromCharCode(parseInt("0x"+b[1],16)))}f[d]=c.post[a]}}c.post=f}return c};SWFUpload.prototype.testExternalInterface=function(){try{return this.callFlash("TestExternalInterface")}catch(a){return false}};SWFUpload.prototype.flashReady=function(){var a=this.getMovieElement();if(!a){this.debug("Flash called back ready but the flash movie can't be found.");return}this.cleanUp(a);this.queueEvent("swfupload_loaded_handler")};SWFUpload.prototype.cleanUp=function(a){try{if(this.movieElement&&typeof(a.CallFunction)==="unknown"){this.debug("Removing Flash functions hooks (this should only run in IE and should prevent memory leaks)");for(var c in a){try{if(typeof(a[c])==="function"){a[c]=null}}catch(b){}}}}catch(d){}window.__flash__removeCallback=function(e,f){try{if(e){e[f]=null}}catch(g){}}};SWFUpload.prototype.fileDialogStart=function(){this.queueEvent("file_dialog_start_handler")};SWFUpload.prototype.fileQueued=function(a){a=this.unescapeFilePostParams(a);this.queueEvent("file_queued_handler",a)};SWFUpload.prototype.fileQueueError=function(a,c,b){a=this.unescapeFilePostParams(a);this.queueEvent("file_queue_error_handler",[a,c,b])};SWFUpload.prototype.fileDialogComplete=function(b,c,a){this.queueEvent("file_dialog_complete_handler",[b,c,a])};SWFUpload.prototype.uploadStart=function(a){a=this.unescapeFilePostParams(a);this.queueEvent("return_upload_start_handler",a)};SWFUpload.prototype.returnUploadStart=function(a){var b;if(typeof this.settings.upload_start_handler==="function"){a=this.unescapeFilePostParams(a);b=this.settings.upload_start_handler.call(this,a)}else{if(this.settings.upload_start_handler!=undefined){throw"upload_start_handler must be a function"}}if(b===undefined){b=true}b=!!b;this.callFlash("ReturnUploadStart",[b])};SWFUpload.prototype.uploadProgress=function(a,c,b){a=this.unescapeFilePostParams(a);this.queueEvent("upload_progress_handler",[a,c,b])};SWFUpload.prototype.uploadError=function(a,c,b){a=this.unescapeFilePostParams(a);this.queueEvent("upload_error_handler",[a,c,b])};SWFUpload.prototype.uploadSuccess=function(b,a,c){b=this.unescapeFilePostParams(b);this.queueEvent("upload_success_handler",[b,a,c])};SWFUpload.prototype.uploadComplete=function(a){a=this.unescapeFilePostParams(a);this.queueEvent("upload_complete_handler",a)};SWFUpload.prototype.debug=function(a){this.queueEvent("debug_handler",a)};SWFUpload.prototype.debugMessage=function(c){if(this.settings.debug){var a,d=[];if(typeof c==="object"&&typeof c.name==="string"&&typeof c.message==="string"){for(var b in c){if(c.hasOwnProperty(b)){d.push(b+": "+c[b])}}a=d.join("\n")||"";d=a.split("\n");a="EXCEPTION: "+d.join("\nEXCEPTION: ");SWFUpload.Console.writeLine(a)}else{SWFUpload.Console.writeLine(c)}}};SWFUpload.Console={};SWFUpload.Console.writeLine=function(d){var b,a;try{b=document.getElementById("SWFUpload_Console");if(!b){a=document.createElement("form");document.getElementsByTagName("body")[0].appendChild(a);b=document.createElement("textarea");b.id="SWFUpload_Console";b.style.fontFamily="monospace";b.setAttribute("wrap","off");b.wrap="off";b.style.overflow="auto";b.style.width="700px";b.style.height="350px";b.style.margin="5px";a.appendChild(b)}b.value+=d+"\n";b.scrollTop=b.scrollHeight-b.clientHeight}catch(c){alert("Exception: "+c.name+" Message: "+c.message)}};
  68. /*
  69. Uploadify v3.1.0
  70. Copyright (c) 2012 Reactive Apps, Ronnie Garcia
  71. Released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
  72. */
  73. /*
  74. Things that we updated
  75. - Using the preferred jQuery plugin pattern
  76. - Added references to all elements
  77. - Removed flash based image
  78. - Added fallback method
  79. - Fixed onInit event
  80. - Added onDisable and onEnable events
  81. - SWFObject for flash detection
  82. - Added indication of cancelled files
  83. */
  84. (function($) {
  85. // These methods can be called by adding them as the first argument in the uploadify plugin call
  86. var methods = {
  87. init : function(options, swfUploadOptions) {
  88. return this.each(function() {
  89. // Create a reference to the jQuery DOM object
  90. var $this = $(this);
  91. // Clone the original DOM object
  92. var $clone = $this.clone();
  93. // Setup the default options
  94. var settings = $.extend({
  95. // Required Settings
  96. id : $this.attr('id'), // The ID of the DOM object
  97. swf : 'uploadify.swf', // The path to the uploadify SWF file
  98. uploader : 'uploadify.php', // The path to the server-side upload script
  99. // Options
  100. auto : true, // Automatically upload files when added to the queue
  101. buttonClass : '', // A class name to add to the browse button DOM object
  102. buttonCursor : 'hand', // The cursor to use with the browse button
  103. buttonImage : null, // (String or null) The path to an image to use for the Flash browse button if not using CSS to style the button
  104. buttonText : 'SELECT FILES', // The text to use for the browse button
  105. checkExisting : false, // The path to a server-side script that checks for existing files on the server
  106. debug : false, // Turn on swfUpload debugging mode
  107. fileObjName : 'Filedata', // The name of the file object to use in your server-side script
  108. fileSizeLimit : 0, // The maximum size of an uploadable file in KB (Accepts units B KB MB GB if string, 0 for no limit)
  109. fileTypeDesc : 'All Files', // The description for file types in the browse dialog
  110. fileTypeExts : '*.*', // Allowed extensions in the browse dialog (server-side validation should also be used)
  111. height : 30, // The height of the browse button
  112. method : 'post', // The method to use when sending files to the server-side upload script
  113. multi : true, // Allow multiple file selection in the browse dialog
  114. formData : {}, // An object with additional data to send to the server-side upload script with every file upload
  115. preventCaching : true, // Adds a random value to the Flash URL to prevent caching of it (conflicts with existing parameters)
  116. progressData : 'percentage', // ('percentage' or 'speed') Data to show in the queue item during a file upload
  117. queueID : false, // The ID of the DOM object to use as a file queue (without the #)
  118. queueSizeLimit : 999, // The maximum number of files that can be in the queue at one time
  119. removeCompleted : true, // Remove queue items from the queue when they are done uploading
  120. removeTimeout : 3, // The delay in seconds before removing a queue item if removeCompleted is set to true
  121. requeueErrors : false, // Keep errored files in the queue and keep trying to upload them
  122. successTimeout : 30, // The number of seconds to wait for Flash to detect the server's response after the file has finished uploading
  123. uploadLimit : 0, // The maximum number of files you can upload
  124. width : 120, // The width of the browse button
  125. // Events
  126. overrideEvents : [] // (Array) A list of default event handlers to skip
  127. /*
  128. onCancel // Triggered when a file is cancelled from the queue
  129. onClearQueue // Triggered during the 'clear queue' method
  130. onDestroy // Triggered when the uploadify object is destroyed
  131. onDialogClose // Triggered when the browse dialog is closed
  132. onDialogOpen // Triggered when the browse dialog is opened
  133. onDisable // Triggered when the browse button gets disabled
  134. onEnable // Triggered when the browse button gets enabled
  135. onFallback // Triggered is Flash is not detected
  136. onInit // Triggered when Uploadify is initialized
  137. onQueueComplete // Triggered when all files in the queue have been uploaded
  138. onSelectError // Triggered when an error occurs while selecting a file (file size, queue size limit, etc.)
  139. onSelect // Triggered for each file that is selected
  140. onSWFReady // Triggered when the SWF button is loaded
  141. onUploadComplete // Triggered when a file upload completes (success or error)
  142. onUploadError // Triggered when a file upload returns an error
  143. onUploadSuccess // Triggered when a file is uploaded successfully
  144. onUploadProgress // Triggered every time a file progress is updated
  145. onUploadStart // Triggered immediately before a file upload starts
  146. */
  147. }, options);
  148. // Prepare settings for SWFUpload
  149. var swfUploadSettings = {
  150. assume_success_timeout : settings.successTimeout,
  151. button_placeholder_id : settings.id,
  152. button_width : settings.width,
  153. button_height : settings.height,
  154. button_text : null,
  155. button_text_style : null,
  156. button_text_top_padding : 0,
  157. button_text_left_padding : 0,
  158. button_action : (settings.multi ? SWFUpload.BUTTON_ACTION.SELECT_FILES : SWFUpload.BUTTON_ACTION.SELECT_FILE),
  159. button_disabled : false,
  160. button_cursor : (settings.buttonCursor == 'arrow' ? SWFUpload.CURSOR.ARROW : SWFUpload.CURSOR.HAND),
  161. button_window_mode : SWFUpload.WINDOW_MODE.TRANSPARENT,
  162. debug : settings.debug,
  163. requeue_on_error : settings.requeueErrors,
  164. file_post_name : settings.fileObjName,
  165. file_size_limit : settings.fileSizeLimit,
  166. file_types : settings.fileTypeExts,
  167. file_types_description : settings.fileTypeDesc,
  168. file_queue_limit : settings.queueSizeLimit,
  169. file_upload_limit : settings.uploadLimit,
  170. flash_url : settings.swf,
  171. prevent_swf_caching : settings.preventCaching,
  172. post_params : settings.formData,
  173. upload_url : settings.uploader,
  174. use_query_string : (settings.method == 'get'),
  175. // Event Handlers
  176. file_dialog_complete_handler : handlers.onDialogClose,
  177. file_dialog_start_handler : handlers.onDialogOpen,
  178. file_queued_handler : handlers.onSelect,
  179. file_queue_error_handler : handlers.onSelectError,
  180. swfupload_loaded_handler : settings.onSWFReady,
  181. upload_complete_handler : handlers.onUploadComplete,
  182. upload_error_handler : handlers.onUploadError,
  183. upload_progress_handler : handlers.onUploadProgress,
  184. upload_start_handler : handlers.onUploadStart,
  185. upload_success_handler : handlers.onUploadSuccess
  186. }
  187. // Merge the user-defined options with the defaults
  188. if (swfUploadOptions) {
  189. swfUploadSettings = $.extend(swfUploadSettings, swfUploadOptions);
  190. }
  191. // Add the user-defined settings to the swfupload object
  192. swfUploadSettings = $.extend(swfUploadSettings, settings);
  193. // Detect if Flash is available
  194. var playerVersion = swfobject.getFlashPlayerVersion();
  195. var flashInstalled = (playerVersion.major >= 9);
  196. if (flashInstalled) {
  197. // Create the swfUpload instance
  198. window['uploadify_' + settings.id] = new SWFUpload(swfUploadSettings);
  199. var swfuploadify = window['uploadify_' + settings.id];
  200. // Add the SWFUpload object to the elements data object
  201. $this.data('uploadify', swfuploadify);
  202. // Wrap the instance
  203. var $wrapper = $('<div />', {
  204. 'id' : settings.id,
  205. 'class' : 'uploadify',
  206. 'css' : {
  207. 'height' : settings.height + 'px',
  208. 'width' : settings.width + 'px'
  209. }
  210. });
  211. $('#' + swfuploadify.movieName).wrap($wrapper);
  212. // Recreate the reference to wrapper
  213. $wrapper = $('#' + settings.id);
  214. // Add the data object to the wrapper
  215. $wrapper.data('uploadify', swfuploadify);
  216. // Create the button
  217. var $button = $('<div />', {
  218. 'id' : settings.id + '-button',
  219. 'class' : 'uploadify-button ' + settings.buttonClass
  220. });
  221. if (settings.buttonImage) {
  222. $button.css({
  223. 'background-image' : "url('" + settings.buttonImage + "')",
  224. 'text-indent' : '-9999px'
  225. });
  226. }
  227. $button.html('<span class="uploadify-button-text">' + settings.buttonText + '</span>')
  228. .css({
  229. 'height' : settings.height + 'px',
  230. 'line-height' : settings.height + 'px',
  231. 'width' : settings.width + 'px'
  232. });
  233. // Append the button to the wrapper
  234. $wrapper.append($button);
  235. // Adjust the styles of the movie
  236. $('#' + swfuploadify.movieName).css({
  237. 'position' : 'absolute',
  238. 'z-index' : 1
  239. });
  240. // Create the file queue
  241. if (!settings.queueID) {
  242. var $queue = $('<div />', {
  243. 'id' : settings.id + '-queue',
  244. 'class' : 'uploadify-queue'
  245. });
  246. $wrapper.after($queue);
  247. swfuploadify.settings.queueID = settings.id + '-queue';
  248. swfuploadify.settings.defaultQueue = true;
  249. }
  250. // Create some queue related objects and variables
  251. swfuploadify.queueData = {
  252. files : {}, // The files in the queue
  253. filesSelected : 0, // The number of files selected in the last select operation
  254. filesQueued : 0, // The number of files added to the queue in the last select operation
  255. filesReplaced : 0, // The number of files replaced in the last select operation
  256. filesCancelled : 0, // The number of files that were cancelled instead of replaced
  257. filesErrored : 0, // The number of files that caused error in the last select operation
  258. uploadsSuccessful : 0, // The number of files that were successfully uploaded
  259. uploadsErrored : 0, // The number of files that returned errors during upload
  260. averageSpeed : 0, // The average speed of the uploads in KB
  261. queueLength : 0, // The number of files in the queue
  262. queueSize : 0, // The size in bytes of the entire queue
  263. uploadSize : 0, // The size in bytes of the upload queue
  264. queueBytesUploaded : 0, // The size in bytes that have been uploaded for the current upload queue
  265. uploadQueue : [], // The files currently to be uploaded
  266. errorMsg : 'Some files were not added to the queue:'
  267. };
  268. // Save references to all the objects
  269. swfuploadify.original = $clone;
  270. swfuploadify.wrapper = $wrapper;
  271. swfuploadify.button = $button;
  272. swfuploadify.queue = $queue;
  273. // Call the user-defined init event handler
  274. if (settings.onInit) settings.onInit.call($this, swfuploadify);
  275. } else {
  276. // Call the fallback function
  277. if (settings.onFallback) settings.onFallback.call($this);
  278. }
  279. });
  280. },
  281. // Stop a file upload and remove it from the queue
  282. cancel : function(fileID, supressEvent) {
  283. var args = arguments;
  284. this.each(function() {
  285. // Create a reference to the jQuery DOM object
  286. var $this = $(this),
  287. swfuploadify = $this.data('uploadify'),
  288. settings = swfuploadify.settings,
  289. delay = -1;
  290. if (args[0]) {
  291. // Clear the queue
  292. if (args[0] == '*') {
  293. var queueItemCount = swfuploadify.queueData.queueLength;
  294. $('#' + settings.queueID).find('.uploadify-queue-item').each(function() {
  295. delay++;
  296. if (args[1] === true) {
  297. swfuploadify.cancelUpload($(this).attr('id'), false);
  298. } else {
  299. swfuploadify.cancelUpload($(this).attr('id'));
  300. }
  301. $(this).find('.data').removeClass('data').html(' - Cancelled');
  302. $(this).find('.uploadify-progress-bar').remove();
  303. $(this).delay(1000 + 100 * delay).fadeOut(500, function() {
  304. $(this).remove();
  305. });
  306. });
  307. swfuploadify.queueData.queueSize = 0;
  308. // Trigger the onClearQueue event
  309. if (settings.onClearQueue) settings.onClearQueue.call($this, queueItemCount);
  310. } else {
  311. for (var n = 0; n < args.length; n++) {
  312. swfuploadify.cancelUpload(args[n]);
  313. $('#' + args[n]).find('.data').removeClass('data').html(' - Cancelled');
  314. $('#' + args[n]).find('.uploadify-progress-bar').remove();
  315. $('#' + args[n]).delay(1000 + 100 * n).fadeOut(500, function() {
  316. $(this).remove();
  317. });
  318. }
  319. }
  320. } else {
  321. var item = $('#' + settings.queueID).find('.uploadify-queue-item').get(0);
  322. $item = $(item);
  323. swfuploadify.cancelUpload($item.attr('id'));
  324. $item.find('.data').removeClass('data').html(' - Cancelled');
  325. $item.find('.uploadify-progress-bar').remove();
  326. $item.delay(1000).fadeOut(500, function() {
  327. $(this).remove();
  328. });
  329. }
  330. });
  331. },
  332. // Revert the DOM object back to its original state
  333. destroy : function() {
  334. this.each(function() {
  335. // Create a reference to the jQuery DOM object
  336. var $this = $(this),
  337. swfuploadify = $this.data('uploadify'),
  338. settings = swfuploadify.settings;
  339. // Destroy the SWF object and
  340. swfuploadify.destroy();
  341. // Destroy the queue
  342. if (settings.defaultQueue) {
  343. $('#' + settings.queueID).remove();
  344. }
  345. // Reload the original DOM element
  346. $('#' + settings.id).replaceWith(swfuploadify.original);
  347. // Call the user-defined event handler
  348. if (settings.onDestroy) settings.onDestroy.call(this);
  349. delete swfuploadify;
  350. });
  351. },
  352. // Disable the select button
  353. disable : function(isDisabled) {
  354. this.each(function() {
  355. // Create a reference to the jQuery DOM object
  356. var $this = $(this),
  357. swfuploadify = $this.data('uploadify'),
  358. settings = swfuploadify.settings;
  359. // Call the user-defined event handlers
  360. if (isDisabled) {
  361. swfuploadify.button.addClass('disabled');
  362. if (settings.onDisable) settings.onDisable.call(this);
  363. } else {
  364. swfuploadify.button.removeClass('disabled');
  365. if (settings.onEnable) settings.onEnable.call(this);
  366. }
  367. // Enable/disable the browse button
  368. swfuploadify.setButtonDisabled(isDisabled);
  369. });
  370. },
  371. // Get or set the settings data
  372. settings : function(name, value, resetObjects) {
  373. var args = arguments;
  374. var returnValue = value;
  375. this.each(function() {
  376. // Create a reference to the jQuery DOM object
  377. var $this = $(this),
  378. swfuploadify = $this.data('uploadify'),
  379. settings = swfuploadify.settings;
  380. if (typeof(args[0]) == 'object') {
  381. for (var n in value) {
  382. setData(n,value[n]);
  383. }
  384. }
  385. if (args.length === 1) {
  386. returnValue = settings[name];
  387. } else {
  388. switch (name) {
  389. case 'uploader':
  390. swfuploadify.setUploadURL(value);
  391. break;
  392. case 'formData':
  393. if (!resetObjects) {
  394. value = $.extend(settings.formData, value);
  395. }
  396. swfuploadify.setPostParams(settings.formData);
  397. break;
  398. case 'method':
  399. if (value == 'get') {
  400. swfuploadify.setUseQueryString(true);
  401. } else {
  402. swfuploadify.setUseQueryString(false);
  403. }
  404. break;
  405. case 'fileObjName':
  406. swfuploadify.setFilePostName(value);
  407. break;
  408. case 'fileTypeExts':
  409. swfuploadify.setFileTypes(value, settings.fileTypeDesc);
  410. break;
  411. case 'fileTypeDesc':
  412. swfuploadify.setFileTypes(settings.fileTypeExts, value);
  413. break;
  414. case 'fileSizeLimit':
  415. swfuploadify.setFileSizeLimit(value);
  416. break;
  417. case 'uploadLimit':
  418. swfuploadify.setFileUploadLimit(value);
  419. break;
  420. case 'queueSizeLimit':
  421. swfuploadify.setFileQueueLimit(value);
  422. break;
  423. case 'buttonImage':
  424. swfuploadify.button.css('background-image', settingValue);
  425. break;
  426. case 'buttonCursor':
  427. if (value == 'arrow') {
  428. swfuploadify.setButtonCursor(SWFUpload.CURSOR.ARROW);
  429. } else {
  430. swfuploadify.setButtonCursor(SWFUpload.CURSOR.HAND);
  431. }
  432. break;
  433. case 'buttonText':
  434. $('#' + settings.id + '-button').find('.uploadify-button-text').html(value);
  435. break;
  436. case 'width':
  437. swfuploadify.setButtonDimensions(value, settings.height);
  438. break;
  439. case 'height':
  440. swfuploadify.setButtonDimensions(settings.width, value);
  441. break;
  442. case 'multi':
  443. if (value) {
  444. swfuploadify.setButtonAction(SWFUpload.BUTTON_ACTION.SELECT_FILES);
  445. } else {
  446. swfuploadify.setButtonAction(SWFUpload.BUTTON_ACTION.SELECT_FILE);
  447. }
  448. break;
  449. }
  450. settings[name] = value;
  451. }
  452. });
  453. if (args.length === 1) {
  454. return returnValue;
  455. }
  456. },
  457. // Stop the current uploads and requeue what is in progress
  458. stop : function() {
  459. this.each(function() {
  460. // Create a reference to the jQuery DOM object
  461. var $this = $(this),
  462. swfuploadify = $this.data('uploadify');
  463. // Reset the queue information
  464. swfuploadify.queueData.averageSpeed = 0;
  465. swfuploadify.queueData.uploadSize = 0;
  466. swfuploadify.queueData.bytesUploaded = 0;
  467. swfuploadify.queueData.uploadQueue = [];
  468. swfuploadify.stopUpload();
  469. });
  470. },
  471. // Start uploading files in the queue
  472. upload : function() {
  473. var args = arguments;
  474. this.each(function() {
  475. // Create a reference to the jQuery DOM object
  476. var $this = $(this),
  477. swfuploadify = $this.data('uploadify');
  478. // Reset the queue information
  479. swfuploadify.queueData.averageSpeed = 0;
  480. swfuploadify.queueData.uploadSize = 0;
  481. swfuploadify.queueData.bytesUploaded = 0;
  482. swfuploadify.queueData.uploadQueue = [];
  483. // Upload the files
  484. if (args[0]) {
  485. if (args[0] == '*') {
  486. swfuploadify.queueData.uploadSize = swfuploadify.queueData.queueSize;
  487. swfuploadify.queueData.uploadQueue.push('*');
  488. swfuploadify.startUpload();
  489. } else {
  490. for (var n = 0; n < args.length; n++) {
  491. swfuploadify.queueData.uploadSize += swfuploadify.queueData.files[args[n]].size;
  492. swfuploadify.queueData.uploadQueue.push(args[n]);
  493. }
  494. swfuploadify.startUpload(swfuploadify.queueData.uploadQueue.shift());
  495. }
  496. } else {
  497. swfuploadify.startUpload();
  498. }
  499. });
  500. }
  501. }
  502. // These functions handle all the events that occur with the file uploader
  503. var handlers = {
  504. // Triggered when the file dialog is opened
  505. onDialogOpen : function() {
  506. // Load the swfupload settings
  507. var settings = this.settings;
  508. // Reset some queue info
  509. this.queueData.errorMsg = 'Some files were not added to the queue:';
  510. this.queueData.filesReplaced = 0;
  511. this.queueData.filesCancelled = 0;
  512. // Call the user-defined event handler
  513. if (settings.onDialogOpen) settings.onDialogOpen.call(this);
  514. },
  515. // Triggered when the browse dialog is closed
  516. onDialogClose : function(filesSelected, filesQueued, queueLength) {
  517. // Load the swfupload settings
  518. var settings = this.settings;
  519. // Update the queue information
  520. this.queueData.filesErrored = filesSelected - filesQueued;
  521. this.queueData.filesSelected = filesSelected;
  522. this.queueData.filesQueued = filesQueued - this.queueData.filesCancelled;
  523. this.queueData.queueLength = queueLength;
  524. // Run the default event handler
  525. if ($.inArray('onDialogClose', settings.overrideEvents) < 0) {
  526. if (this.queueData.filesErrored > 0) {
  527. alert(this.queueData.errorMsg);
  528. }
  529. }
  530. // Call the user-defined event handler
  531. if (settings.onDialogClose) settings.onDialogClose.call(this, this.queueData);
  532. // Upload the files if auto is true
  533. if (settings.auto) $('#' + settings.id).uploadify('upload', '*');
  534. },
  535. // Triggered once for each file added to the queue
  536. onSelect : function(file) {
  537. // Load the swfupload settings
  538. var settings = this.settings;
  539. // Check if a file with the same name exists in the queue
  540. var queuedFile = {};
  541. for (var n in this.queueData.files) {
  542. queuedFile = this.queueData.files[n];
  543. if (queuedFile.uploaded != true && queuedFile.name == file.name) {
  544. var replaceQueueItem = confirm('The file named "' + file.name + '" is already in the queue.\nDo you want to replace the existing item in the queue?');
  545. if (!replaceQueueItem) {
  546. this.cancelUpload(file.id);
  547. this.queueData.filesCancelled++;
  548. return false;
  549. } else {
  550. $('#' + queuedFile.id).remove();
  551. this.cancelUpload(queuedFile.id);
  552. this.queueData.filesReplaced++;
  553. }
  554. }
  555. }
  556. // Get the size of the file
  557. var fileSize = Math.round(file.size / 1024);
  558. var suffix = 'KB';
  559. if (fileSize > 1000) {
  560. fileSize = Math.round(fileSize / 1000);
  561. suffix = 'MB';
  562. }
  563. var fileSizeParts = fileSize.toString().split('.');
  564. fileSize = fileSizeParts[0];
  565. if (fileSizeParts.length > 1) {
  566. fileSize += '.' + fileSizeParts[1].substr(0,2);
  567. }
  568. fileSize += suffix;
  569. // Truncate the filename if it's too long
  570. var fileName = file.name;
  571. if (fileName.length > 25) {
  572. fileName = fileName.substr(0,25) + '...';
  573. }
  574. // Run the default event handler
  575. if ($.inArray('onSelect', settings.overrideEvents) < 0) {
  576. // Add the file item to the queue
  577. $('#' + settings.queueID).append('<div id="' + file.id + '" class="uploadify-queue-item">\
  578. <div class="cancel">\
  579. <a href="javascript:$(\'#' + settings.id + '\').uploadify(\'cancel\', \'' + file.id + '\')">X</a>\
  580. </div>\
  581. <span class="fileName">' + fileName + ' (' + fileSize + ')</span><span class="data"></span>\
  582. <div class="uploadify-progress">\
  583. <div class="uploadify-progress-bar"><!--Progress Bar--></div>\
  584. </div>\
  585. </div>');
  586. }
  587. this.queueData.queueSize += file.size;
  588. this.queueData.files[file.id] = file;
  589. // Call the user-defined event handler
  590. if (settings.onSelect) settings.onSelect.apply(this, arguments);
  591. },
  592. // Triggered when a file is not added to the queue
  593. onSelectError : function(file, errorCode, errorMsg) {
  594. // Load the swfupload settings
  595. var settings = this.settings;
  596. // Run the default event handler
  597. if ($.inArray('onSelectError', settings.overrideEvents) < 0) {
  598. switch(errorCode) {
  599. case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED:
  600. if (settings.queueSizeLimit > errorMsg) {
  601. this.queueData.errorMsg += '\nThe number of files selected exceeds the remaining upload limit (' + errorMsg + ').';
  602. } else {
  603. this.queueData.errorMsg += '\nThe number of files selected exceeds the queue size limit (' + settings.queueSizeLimit + ').';
  604. }
  605. break;
  606. case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
  607. this.queueData.errorMsg += '\nThe file "' + file.name + '" exceeds the size limit (' + settings.fileSizeLimit + ').';
  608. break;
  609. case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
  610. this.queueData.errorMsg += '\nThe file "' + file.name + '" is empty.';
  611. break;
  612. case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
  613. this.queueData.errorMsg += '\nThe file "' + file.name + '" is not an accepted file type (' + settings.fileTypeDesc + ').';
  614. break;
  615. }
  616. }
  617. if (errorCode != SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED) {
  618. delete this.queueData.files[file.id];
  619. }
  620. // Call the user-defined event handler
  621. if (settings.onSelectError) settings.onSelectError.apply(this, arguments);
  622. },
  623. // Triggered when all the files in the queue have been processed
  624. onQueueComplete : function() {
  625. if (this.settings.onQueueComplete) this.settings.onQueueComplete.call(this, this.settings.queueData);
  626. },
  627. // Triggered when a file upload successfully completes
  628. onUploadComplete : function(file) {
  629. // Load the swfupload settings
  630. var settings = this.settings,
  631. swfuploadify = this;
  632. // Check if all the files have completed uploading
  633. var stats = this.getStats();
  634. this.queueData.queueLength = stats.files_queued;
  635. if (this.queueData.uploadQueue[0] == '*') {
  636. if (this.queueData.queueLength > 0) {
  637. this.startUpload();
  638. } else {
  639. this.queueData.uploadQueue = [];
  640. // Call the user-defined event handler for queue complete
  641. if (settings.onQueueComplete) settings.onQueueComplete.call(this, this.queueData);
  642. }
  643. } else {
  644. if (this.queueData.uploadQueue.length > 0) {
  645. this.startUpload(this.queueData.uploadQueue.shift());
  646. } else {
  647. this.queueData.uploadQueue = [];
  648. // Call the user-defined event handler for queue complete
  649. if (settings.onQueueComplete) settings.onQueueComplete.call(this, this.queueData);
  650. }
  651. }
  652. // Call the default event handler
  653. if ($.inArray('onUploadComplete', settings.overrideEvents) < 0) {
  654. if (settings.removeCompleted) {
  655. switch (file.filestatus) {
  656. case SWFUpload.FILE_STATUS.COMPLETE:
  657. setTimeout(function() {
  658. if ($('#' + file.id)) {
  659. swfuploadify.queueData.queueSize -= file.size;
  660. delete swfuploadify.queueData.files[file.id]
  661. $('#' + file.id).fadeOut(500, function() {
  662. $(this).remove();
  663. });
  664. }
  665. }, settings.removeTimeout * 1000);
  666. break;
  667. case SWFUpload.FILE_STATUS.ERROR:
  668. if (!settings.requeueErrors) {
  669. setTimeout(function() {
  670. if ($('#' + file.id)) {
  671. swfuploadify.queueData.queueSize -= file.size;
  672. delete swfuploadify.queueData.files[file.id];
  673. $('#' + file.id).fadeOut(500, function() {
  674. $(this).remove();
  675. });
  676. }
  677. }, settings.removeTimeout * 1000);
  678. }
  679. break;
  680. }
  681. } else {
  682. file.uploaded = true;
  683. }
  684. }
  685. // Call the user-defined event handler
  686. if (settings.onUploadComplete) settings.onUploadComplete.call(this, file);
  687. },
  688. // Triggered when a file upload returns an error
  689. onUploadError : function(file, errorCode, errorMsg) {
  690. // Load the swfupload settings
  691. var settings = this.settings;
  692. // Set the error string
  693. var errorString = 'Error';
  694. switch(errorCode) {
  695. case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:
  696. errorString = 'HTTP Error (' + errorMsg + ')';
  697. break;
  698. case SWFUpload.UPLOAD_ERROR.MISSING_UPLOAD_URL:
  699. errorString = 'Missing Upload URL';
  700. break;
  701. case SWFUpload.UPLOAD_ERROR.IO_ERROR:
  702. errorString = 'IO Error';
  703. break;
  704. case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR:
  705. errorString = 'Security Error';
  706. break;
  707. case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
  708. alert('The upload limit has been reached (' + errorMsg + ').');
  709. errorString = 'Exceeds Upload Limit';
  710. break;
  711. case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED:
  712. errorString = 'Failed';
  713. break;
  714. case SWFUpload.UPLOAD_ERROR.SPECIFIED_FILE_ID_NOT_FOUND:
  715. break;
  716. case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED:
  717. errorString = 'Validation Error';
  718. break;
  719. case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
  720. errorString = 'Cancelled';
  721. this.queueData.queueSize -= file.size;
  722. if (file.status == SWFUpload.FILE_STATUS.IN_PROGRESS || $.inArray(file.id, this.queueData.uploadQueue) >= 0) {
  723. this.queueData.uploadSize -= file.size;
  724. }
  725. // Trigger the onCancel event
  726. if (settings.onCancel) settings.onCancel.call(this, file);
  727. delete this.queueData.files[file.id];
  728. break;
  729. case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
  730. errorString = 'Stopped';
  731. break;
  732. }
  733. // Call the default event handler
  734. if ($.inArray('onUploadError', settings.overrideEvents) < 0) {
  735. if (errorCode != SWFUpload.UPLOAD_ERROR.FILE_CANCELLED && errorCode != SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED) {
  736. $('#' + file.id).addClass('uploadify-error');
  737. }
  738. // Reset the progress bar
  739. $('#' + file.id).find('.uploadify-progress-bar').css('width','1px');
  740. // Add the error message to the queue item
  741. if (errorCode != SWFUpload.UPLOAD_ERROR.SPECIFIED_FILE_ID_NOT_FOUND && file.status != SWFUpload.FILE_STATUS.COMPLETE) {
  742. $('#' + file.id).find('.data').html(' - ' + errorString);
  743. }
  744. }
  745. var stats = this.getStats();
  746. this.queueData.uploadsErrored = stats.upload_errors;
  747. // Call the user-defined event handler
  748. if (settings.onUploadError) settings.onUploadError.call(this, file, errorCode, errorMsg, errorString);
  749. },
  750. // Triggered periodically during a file upload
  751. onUploadProgress : function(file, fileBytesLoaded, fileTotalBytes) {
  752. // Load the swfupload settings
  753. var settings = this.settings;
  754. // Setup all the variables
  755. var timer = new Date();
  756. var newTime = timer.getTime();
  757. var lapsedTime = newTime - this.timer;
  758. if (lapsedTime > 500) {
  759. this.timer = newTime;
  760. }
  761. var lapsedBytes = fileBytesLoaded - this.bytesLoaded;
  762. this.bytesLoaded = fileBytesLoaded;
  763. var queueBytesLoaded = this.queueData.queueBytesUploaded + fileBytesLoaded;
  764. var percentage = Math.round(fileBytesLoaded / fileTotalBytes * 100);
  765. // Calculate the average speed
  766. var suffix = 'KB/s';
  767. var mbs = 0;
  768. var kbs = (lapsedBytes / 1024) / (lapsedTime / 1000);
  769. kbs = Math.floor(kbs * 10) / 10;
  770. if (this.queueData.averageSpeed > 0) {
  771. this.queueData.averageSpeed = Math.floor((this.queueData.averageSpeed + kbs) / 2);
  772. } else {
  773. this.queueData.averageSpeed = Math.floor(kbs);
  774. }
  775. if (kbs > 1000) {
  776. mbs = (kbs * .001);
  777. this.queueData.averageSpeed = Math.floor(mbs);
  778. suffix = 'MB/s';
  779. }
  780. // Call the default event handler
  781. if ($.inArray('onUploadProgress', settings.overrideEvents) < 0) {
  782. if (settings.progressData == 'percentage') {
  783. $('#' + file.id).find('.data').html(' - ' + percentage + '%');
  784. } else if (settings.progressData == 'speed' && lapsedTime > 500) {
  785. $('#' + file.id).find('.data').html(' - ' + this.queueData.averageSpeed + suffix);
  786. }
  787. $('#' + file.id).find('.uploadify-progress-bar').css('width', percentage + '%');
  788. }
  789. // Call the user-defined event handler
  790. if (settings.onUploadProgress) settings.onUploadProgress.call(this, file, fileBytesLoaded, fileTotalBytes, queueBytesLoaded, this.queueData.uploadSize);
  791. },
  792. // Triggered right before a file is uploaded
  793. onUploadStart : function(file) {
  794. // Load the swfupload settings
  795. var settings = this.settings;
  796. var timer = new Date();
  797. this.timer = timer.getTime();
  798. this.bytesLoaded = 0;
  799. if (this.queueData.uploadQueue.length == 0) {
  800. this.queueData.uploadSize = file.size;
  801. }
  802. if (settings.checkExisting) {
  803. $.ajax({
  804. type : 'POST',
  805. async : false,
  806. url : settings.checkExisting,
  807. data : {filename: file.name},
  808. success : function(data) {
  809. if (data == 1) {
  810. var overwrite = confirm('A file with the name "' + file.name + '" already exists on the server.\nWould you like to replace the existing file?');
  811. if (!overwrite) {
  812. this.cancelUpload(file.id);
  813. $('#' + file.id).remove();
  814. if (this.queueData.uploadQueue.length > 0 && this.queueData.queueLength > 0) {
  815. if (this.queueData.uploadQueue[0] == '*') {
  816. this.startUpload();
  817. } else {
  818. this.startUpload(this.queueData.uploadQueue.shift());
  819. }
  820. }
  821. }
  822. }
  823. }
  824. });
  825. }
  826. // Call the user-defined event handler
  827. if (settings.onUploadStart) settings.onUploadStart.call(this, file);
  828. },
  829. // Triggered when a file upload returns a successful code
  830. onUploadSuccess : function(file, data, response) {
  831. // Load the swfupload settings
  832. var settings = this.settings;
  833. var stats = this.getStats();
  834. this.queueData.uploadsSuccessful = stats.successful_uploads;
  835. this.queueData.queueBytesUploaded += file.size;
  836. // Call the default event handler
  837. if ($.inArray('onUploadSuccess', settings.overrideEvents) < 0) {
  838. $('#' + file.id).find('.data').html(' - Complete');
  839. }
  840. // Call the user-defined event handler
  841. if (settings.onUploadSuccess) settings.onUploadSuccess.call(this, file, data, response);
  842. }
  843. }
  844. $.fn.uploadify = function(method) {
  845. if (methods[method]) {
  846. return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
  847. } else if (typeof method === 'object' || !method) {
  848. return methods.init.apply(this, arguments);
  849. } else {
  850. $.error('The method ' + method + ' does not exist in $.uploadify');
  851. }
  852. }
  853. })($);