/* SWFObject v2.2 is released under the MIT License */ 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; 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; 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); 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"); 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 }; }(), 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(); } 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); 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; } 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")); 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); } 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; 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); 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(","); 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(); })(); } 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); 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; 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"); } 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"); } } 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; 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); } 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"; } 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"; 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; } 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"; (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"); 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); } })(); } 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]; 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)); } } } } } 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]; } 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 += ''; } } aa.outerHTML = '" + af + ""; N[N.length] = ai.id; X = c(ai.id); } else { var Z = C(r); Z.setAttribute("type", q); 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]); } } } } 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"); 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"; (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; } } 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); 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; } 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; 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]; } 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 + "}")); } } } 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 = /[\\\"<>\.;]/; 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; 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; } 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; 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 }; 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; 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]; } 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); 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] }; }, 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); } }, 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; 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))); } } } 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"; } } if (E) { E(B); } } a = false; } } }; }(); /* * SWFUpload: http://www.swfupload.org, http://swfupload.googlecode.com * * mmSWFUpload 1.0: Flash upload dialog - http://profandesign.se/swfupload/, * http://www.vinterwebb.se/ * * SWFUpload is (c) 2006-2007 Lars Huring, Olov Nilzén and Mammon Media and is * released under the MIT License: * http://www.opensource.org/licenses/mit-license.php * * SWFUpload 2 is (c) 2007-2008 Jake Roberts and is released under the MIT * License: http://www.opensource.org/licenses/mit-license.php */ 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 [ '', '', '', '', '', '', '', "" ].join("") }; SWFUpload.prototype.getFlashVars = function() { var b = this.buildParamString(); var a = this.settings.http_success.join(","); return [ "movieName=", encodeURIComponent(this.movieName), "&uploadURL=", encodeURIComponent(this.settings.upload_url), "&useQueryString=", encodeURIComponent(this.settings.use_query_string), "&requeueOnError=", encodeURIComponent(this.settings.requeue_on_error), "&httpSuccess=", encodeURIComponent(a), "&assumeSuccessTimeout=", encodeURIComponent(this.settings.assume_success_timeout), "&params=", encodeURIComponent(b), "&filePostName=", encodeURIComponent(this.settings.file_post_name), "&fileTypes=", encodeURIComponent(this.settings.file_types), "&fileTypesDescription=", encodeURIComponent(this.settings.file_types_description), "&fileSizeLimit=", encodeURIComponent(this.settings.file_size_limit), "&fileUploadLimit=", encodeURIComponent(this.settings.file_upload_limit), "&fileQueueLimit=", encodeURIComponent(this.settings.file_queue_limit), "&debugEnabled=", encodeURIComponent(this.settings.debug_enabled), "&buttonImageURL=", encodeURIComponent(this.settings.button_image_url), "&buttonWidth=", encodeURIComponent(this.settings.button_width), "&buttonHeight=", encodeURIComponent(this.settings.button_height), "&buttonText=", encodeURIComponent(this.settings.button_text), "&buttonTextTopPadding=", encodeURIComponent(this.settings.button_text_top_padding), "&buttonTextLeftPadding=", encodeURIComponent(this.settings.button_text_left_padding), "&buttonTextStyle=", encodeURIComponent(this.settings.button_text_style), "&buttonAction=", encodeURIComponent(this.settings.button_action), "&buttonDisabled=", encodeURIComponent(this.settings.button_disabled), "&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("&") }; 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('' + __flash__argumentsToXML(argumentArray, 0) + ""); 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) } }; /* * Uploadify v3.1.1 Copyright (c) 2012 Reactive Apps, Ronnie Garcia Released * under the MIT License */ (function($) { // These methods can be called by adding them as the first argument in the // uploadify plugin call var methods = { init : function(options, swfUploadOptions) { return this .each(function() { // Create a reference to the jQuery DOM object var $this = $(this); // Clone the original DOM object var $clone = $this.clone(); // Setup the default options var settings = $.extend({ // Required Settings id : $this.attr('id'), // The ID of the DOM object swf : 'uploadify.swf', // The path to the uploadify // SWF file uploader : 'uploadify.php', // The path to the // server-side upload // script // Options auto : true, // Automatically upload files when // added to the queue buttonClass : '', // A class name to add to the // browse button DOM object buttonCursor : 'hand', // The cursor to use with // the browse button 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 buttonText : 'SELECT FILES', // The text to use // for the browse // button checkExisting : false, // The path to a server-side // script that checks for // existing files on the // server debug : false, // Turn on swfUpload debugging mode fileObjName : 'Filedata', // The name of the file // object to use in your // server-side script fileSizeLimit : 0, // The maximum size of an // uploadable file in KB // (Accepts units B KB MB GB if // string, 0 for no limit) fileTypeDesc : 'All Files', // The description for // file types in the // browse dialog fileTypeExts : '*.*', // Allowed extensions in the // browse dialog // (server-side validation // should also be used) height : 30, // The height of the browse button method : 'post', // The method to use when // sending files to the // server-side upload script multi : true, // Allow multiple file selection in // the browse dialog formData : {}, // An object with additional data to // send to the server-side upload // script with every file upload preventCaching : true, // Adds a random value to // the Flash URL to prevent // caching of it (conflicts // with existing parameters) progressData : 'percentage', // ('percentage' or // 'speed') Data to // show in the queue // item during a // file upload queueID : false, // The ID of the DOM object to // use as a file queue (without // the #) queueSizeLimit : 999, // The maximum number of // files that can be in the // queue at one time removeCompleted : true, // Remove queue items from // the queue when they are // done uploading removeTimeout : 3, // The delay in seconds before // removing a queue item if // removeCompleted is set to // true requeueErrors : false, // Keep errored files in the // queue and keep trying to // upload them successTimeout : 30, // The number of seconds to // wait for Flash to detect // the server's response // after the file has // finished uploading uploadLimit : 0, // The maximum number of files // you can upload width : 120, // The width of the browse button // Events overrideEvents : [] // (Array) A list of default event handlers to skip /* * onCancel // Triggered when a file is cancelled from * the queue onClearQueue // Triggered during the 'clear * queue' method onDestroy // Triggered when the * uploadify object is destroyed onDialogClose // * Triggered when the browse dialog is closed * onDialogOpen // Triggered when the browse dialog is * opened onDisable // Triggered when the browse button * gets disabled onEnable // Triggered when the browse * button gets enabled onFallback // Triggered is Flash * is not detected onInit // Triggered when Uploadify is * initialized onQueueComplete // Triggered when all * files in the queue have been uploaded onSelectError // * Triggered when an error occurs while selecting a file * (file size, queue size limit, etc.) onSelect // * Triggered for each file that is selected onSWFReady // * Triggered when the SWF button is loaded * onUploadComplete // Triggered when a file upload * completes (success or error) onUploadError // * Triggered when a file upload returns an error * onUploadSuccess // Triggered when a file is uploaded * successfully onUploadProgress // Triggered every time * a file progress is updated onUploadStart // Triggered * immediately before a file upload starts */ }, options); // Prepare settings for SWFUpload var swfUploadSettings = { assume_success_timeout : settings.successTimeout, button_placeholder_id : settings.id, button_width : settings.width, button_height : settings.height, button_text : null, button_text_style : null, button_text_top_padding : 0, button_text_left_padding : 0, button_action : (settings.multi ? SWFUpload.BUTTON_ACTION.SELECT_FILES : SWFUpload.BUTTON_ACTION.SELECT_FILE), button_disabled : false, button_cursor : (settings.buttonCursor == 'arrow' ? SWFUpload.CURSOR.ARROW : SWFUpload.CURSOR.HAND), button_window_mode : SWFUpload.WINDOW_MODE.TRANSPARENT, debug : settings.debug, requeue_on_error : settings.requeueErrors, file_post_name : settings.fileObjName, file_size_limit : settings.fileSizeLimit, file_types : settings.fileTypeExts, file_types_description : settings.fileTypeDesc, file_queue_limit : settings.queueSizeLimit, file_upload_limit : settings.uploadLimit, flash_url : settings.swf, prevent_swf_caching : settings.preventCaching, post_params : settings.formData, upload_url : settings.uploader, use_query_string : (settings.method == 'get'), // Event Handlers file_dialog_complete_handler : handlers.onDialogClose, file_dialog_start_handler : handlers.onDialogOpen, file_queued_handler : handlers.onSelect, file_queue_error_handler : handlers.onSelectError, swfupload_loaded_handler : settings.onSWFReady, upload_complete_handler : handlers.onUploadComplete, upload_error_handler : handlers.onUploadError, upload_progress_handler : handlers.onUploadProgress, upload_start_handler : handlers.onUploadStart, upload_success_handler : handlers.onUploadSuccess } // Merge the user-defined options with the defaults if (swfUploadOptions) { swfUploadSettings = $.extend(swfUploadSettings, swfUploadOptions); } // Add the user-defined settings to the swfupload object swfUploadSettings = $.extend(swfUploadSettings, settings); // Detect if Flash is available var playerVersion = swfobject.getFlashPlayerVersion(); var flashInstalled = (playerVersion.major >= 9); if (flashInstalled) { // Create the swfUpload instance window['uploadify_' + settings.id] = new SWFUpload( swfUploadSettings); var swfuploadify = window['uploadify_' + settings.id]; // Add the SWFUpload object to the elements data // object $this.data('uploadify', swfuploadify); // Wrap the instance var $wrapper = $('
', { 'id' : settings.id, 'class' : 'uploadify', 'css' : { 'height' : settings.height + 'px', 'width' : settings.width + 'px' } }); $('#' + swfuploadify.movieName).wrap($wrapper); // Recreate the reference to wrapper $wrapper = $('#' + settings.id); // Add the data object to the wrapper $wrapper.data('uploadify', swfuploadify); // Create the button var $button = $('
', { 'id' : settings.id + '-button', 'class' : 'uploadify-button ' + settings.buttonClass }); if (settings.buttonImage) { $button.css({ 'background-image' : "url('" + settings.buttonImage + "')", 'text-indent' : '-9999px' }); } $button.html( '' + settings.buttonText + '') .css({ 'height' : settings.height + 'px', 'line-height' : settings.height + 'px', 'width' : settings.width + 'px' }); // Append the button to the wrapper $wrapper.append($button); // Adjust the styles of the movie $('#' + swfuploadify.movieName).css({ 'position' : 'absolute', 'z-index' : 1 }); // Create the file queue if (!settings.queueID) { var $queue = $('
', { 'id' : settings.id + '-queue', 'class' : 'uploadify-queue' }); $wrapper.after($queue); swfuploadify.settings.queueID = settings.id + '-queue'; swfuploadify.settings.defaultQueue = true; } // Create some queue related objects and variables swfuploadify.queueData = { files : {}, // The files in the queue filesSelected : 0, // The number of files // selected in the last // select operation filesQueued : 0, // The number of files added // to the queue in the last // select operation filesReplaced : 0, // The number of files // replaced in the last // select operation filesCancelled : 0, // The number of files that // were cancelled instead of // replaced filesErrored : 0, // The number of files that // caused error in the last // select operation uploadsSuccessful : 0, // The number of files // that were // successfully uploaded uploadsErrored : 0, // The number of files that // returned errors during // upload averageSpeed : 0, // The average speed of the // uploads in KB queueLength : 0, // The number of files in // the queue queueSize : 0, // The size in bytes of the // entire queue uploadSize : 0, // The size in bytes of the // upload queue queueBytesUploaded : 0, // The size in bytes // that have been // uploaded for the // current upload queue uploadQueue : [], // The files currently to be // uploaded errorMsg : 'Some files were not added to the queue:' }; // Save references to all the objects swfuploadify.original = $clone; swfuploadify.wrapper = $wrapper; swfuploadify.button = $button; swfuploadify.queue = $queue; // Call the user-defined init event handler if (settings.onInit) settings.onInit.call($this, swfuploadify); } else { // Call the fallback function if (settings.onFallback) settings.onFallback.call($this); } }); }, // Stop a file upload and remove it from the queue cancel : function(fileID, supressEvent) { var args = arguments; this .each(function() { // Create a reference to the jQuery DOM object var $this = $(this), swfuploadify = $this .data('uploadify'), settings = swfuploadify.settings, delay = -1; if (args[0]) { // Clear the queue if (args[0] == '*') { var queueItemCount = swfuploadify.queueData.queueLength; $('#' + settings.queueID).find( '.uploadify-queue-item').each( function() { delay++; if (args[1] === true) { swfuploadify .cancelUpload($(this) .attr('id'), false); } else { swfuploadify.cancelUpload($( this).attr('id')); } $(this).find('.data').removeClass( 'data') .html(' - 已取消'); $(this).find( '.uploadify-progress-bar') .remove(); $(this).delay(1000 + 100 * delay) .fadeOut(500, function() { $(this).remove(); }); }); swfuploadify.queueData.queueSize = 0; swfuploadify.queueData.queueLength = 0; // Trigger the onClearQueue event if (settings.onClearQueue) settings.onClearQueue.call($this, queueItemCount); } else { for ( var n = 0; n < args.length; n++) { swfuploadify.cancelUpload(args[n]); $('#' + args[n]).find('.data').removeClass( 'data').html(' - 已取消'); $('#' + args[n]).find( '.uploadify-progress-bar').remove(); $('#' + args[n]).delay(1000 + 100 * n) .fadeOut(500, function() { $(this).remove(); }); } } } else { var item = $('#' + settings.queueID).find( '.uploadify-queue-item').get(0); $item = $(item); swfuploadify.cancelUpload($item.attr('id')); $item.find('.data').removeClass('data').html( ' - Cancelled'); $item.find('.uploadify-progress-bar').remove(); $item.delay(1000).fadeOut(500, function() { $(this).remove(); }); } }); }, // Revert the DOM object back to its original state destroy : function() { this .each(function() { // Create a reference to the jQuery DOM object var $this = $(this), swfuploadify = $this .data('uploadify'), settings = swfuploadify.settings; // Destroy the SWF object and swfuploadify.destroy(); // Destroy the queue if (settings.defaultQueue) { $('#' + settings.queueID).remove(); } // Reload the original DOM element $('#' + settings.id).replaceWith(swfuploadify.original); // Call the user-defined event handler if (settings.onDestroy) settings.onDestroy.call(this); delete swfuploadify; }); }, // Disable the select button disable : function(isDisabled) { this .each(function() { // Create a reference to the $uery DOM object var $this = $(this), swfuploadify = $this .data('uploadify'), settings = swfuploadify.settings; // Call the user-defined event handlers if (isDisabled) { swfuploadify.button.addClass('disabled'); if (settings.onDisable) settings.onDisable.call(this); } else { swfuploadify.button.removeClass('disabled'); if (settings.onEnable) settings.onEnable.call(this); } // Enable/disable the browse button swfuploadify.setButtonDisabled(isDisabled); }); }, // Get or set the settings data settings : function(name, value, resetObjects) { var args = arguments; var returnValue = value; this .each(function() { // Create a reference to the jQuery DOM object var $this = $(this), swfuploadify = $this .data('uploadify'), settings = swfuploadify.settings; if (typeof (args[0]) == 'object') { for ( var n in value) { setData(n, value[n]); } } if (args.length === 1) { returnValue = settings[name]; } else { switch (name) { case 'uploader': swfuploadify.setUploadURL(value); break; case 'formData': if (!resetObjects) { value = $.extend(settings.formData, value); } swfuploadify.setPostParams(settings.formData); break; case 'method': if (value == 'get') { swfuploadify.setUseQueryString(true); } else { swfuploadify.setUseQueryString(false); } break; case 'fileObjName': swfuploadify.setFilePostName(value); break; case 'fileTypeExts': swfuploadify.setFileTypes(value, settings.fileTypeDesc); break; case 'fileTypeDesc': swfuploadify.setFileTypes( settings.fileTypeExts, value); break; case 'fileSizeLimit': swfuploadify.setFileSizeLimit(value); break; case 'uploadLimit': swfuploadify.setFileUploadLimit(value); break; case 'queueSizeLimit': swfuploadify.setFileQueueLimit(value); break; case 'buttonImage': swfuploadify.button.css('background-image', settingValue); break; case 'buttonCursor': if (value == 'arrow') { swfuploadify .setButtonCursor(SWFUpload.CURSOR.ARROW); } else { swfuploadify .setButtonCursor(SWFUpload.CURSOR.HAND); } break; case 'buttonText': $('#' + settings.id + '-button').find( '.uploadify-button-text').html(value); break; case 'width': swfuploadify.setButtonDimensions(value, settings.height); break; case 'height': swfuploadify.setButtonDimensions( settings.width, value); break; case 'multi': if (value) { swfuploadify .setButtonAction(SWFUpload.BUTTON_ACTION.SELECT_FILES); } else { swfuploadify .setButtonAction(SWFUpload.BUTTON_ACTION.SELECT_FILE); } break; } settings[name] = value; } }); if (args.length === 1) { return returnValue; } }, // Stop the current uploads and requeue what is in progress stop : function() { this.each(function() { // Create a reference to the jQuery DOM object var $this = $(this), swfuploadify = $this.data('uploadify'); // Reset the queue information swfuploadify.queueData.averageSpeed = 0; swfuploadify.queueData.uploadSize = 0; swfuploadify.queueData.bytesUploaded = 0; swfuploadify.queueData.uploadQueue = []; swfuploadify.stopUpload(); }); }, // Start uploading files in the queue upload : function() { var args = arguments; this .each(function() { // Create a reference to the jQuery DOM object var $this = $(this), swfuploadify = $this .data('uploadify'); // Reset the queue information swfuploadify.queueData.averageSpeed = 0; swfuploadify.queueData.uploadSize = 0; swfuploadify.queueData.bytesUploaded = 0; swfuploadify.queueData.uploadQueue = []; // Upload the files if (args[0]) { if (args[0] == '*') { swfuploadify.queueData.uploadSize = swfuploadify.queueData.queueSize; swfuploadify.queueData.uploadQueue.push('*'); swfuploadify.startUpload(); } else { for ( var n = 0; n < args.length; n++) { swfuploadify.queueData.uploadSize += swfuploadify.queueData.files[args[n]].size; swfuploadify.queueData.uploadQueue .push(args[n]); } swfuploadify .startUpload(swfuploadify.queueData.uploadQueue .shift()); } } else { swfuploadify.startUpload(); } }); } } // These functions handle all the events that occur with the file uploader var handlers = { // Triggered when the file dialog is opened onDialogOpen : function() { // Load the swfupload settings var settings = this.settings; // Reset some queue info this.queueData.errorMsg = 'Some files were not added to the queue:'; this.queueData.filesReplaced = 0; this.queueData.filesCancelled = 0; // Call the user-defined event handler if (settings.onDialogOpen) settings.onDialogOpen.call(this); }, // Triggered when the browse dialog is closed onDialogClose : function(filesSelected, filesQueued, queueLength) { // Load the swfupload settings var settings = this.settings; // Update the queue information this.queueData.filesErrored = filesSelected - filesQueued; this.queueData.filesSelected = filesSelected; this.queueData.filesQueued = filesQueued - this.queueData.filesCancelled; this.queueData.queueLength = queueLength; // Run the default event handler if ($.inArray('onDialogClose', settings.overrideEvents) < 0) { if (this.queueData.filesErrored > 0) { alert(this.queueData.errorMsg); } } // Call the user-defined event handler if (settings.onDialogClose) settings.onDialogClose.call(this, this.queueData); // Upload the files if auto is true if (settings.auto) $('#' + settings.id).uploadify('upload', '*'); }, // Triggered once for each file added to the queue onSelect : function(file) { // Load the swfupload settings var settings = this.settings; // Check if a file with the same name exists in the queue var queuedFile = {}; for ( var n in this.queueData.files) { queuedFile = this.queueData.files[n]; if (queuedFile.uploaded != true && queuedFile.name == file.name) { /*update-begin--Author:gengjiajia Date:20160720 for:[1200]多附件上传,当上传的文件为同一个文件时,页面会被卡住*/ // var replaceQueueItem = confirm('The file named "' // + file.name // + '" is already in the queue.\nDo you want to replace the existing item in the queue?'); // if (!replaceQueueItem) { // this.cancelUpload(file.id); // this.queueData.filesCancelled++; // return false; // } else { $('#' + queuedFile.id).remove(); this.cancelUpload(queuedFile.id); this.queueData.filesReplaced++; // } /*update-begin--Author:gengjiajia Date:20160720 for:[1200]多附件上传,当上传的文件为同一个文件时,页面会被卡住*/ } } // Get the size of the file /*update-begin--Author:gengjiajia Date:20160720 for:[1200]当文件大小为 1kb 时候,录入界面显示为 0kb*/ var fileSize ; if(file.size < 1024){ fileSize = Math.round(1024 / 1024); }else{ fileSize = Math.round(file.size / 1024); } //var fileSize = Math.round(file.size / 1024); /*update-begin--Author:gengjiajia Date:20160720 for:[1200]当文件大小为 1kb 时候,录入界面显示为 0kb*/ var suffix = 'KB'; if (fileSize > 1000) { fileSize = Math.round(fileSize / 1000); suffix = 'MB'; } var fileSizeParts = fileSize.toString().split('.'); fileSize = fileSizeParts[0]; if (fileSizeParts.length > 1) { fileSize += '.' + fileSizeParts[1].substr(0, 2); } fileSize += suffix; // Truncate the filename if it's too long var fileName = file.name; if (fileName.length > 25) { fileName = fileName.substr(0, 25) + '...'; } // Run the default event handler if ($.inArray('onSelect', settings.overrideEvents) < 0) { // Add the file item to the queue $('#' + settings.queueID) .append( '
\
\ X\
\ ' + fileName + ' (' + fileSize + ')\
\
\
\
'); } this.queueData.queueSize += file.size; this.queueData.files[file.id] = file; // Call the user-defined event handler if (settings.onSelect) settings.onSelect.apply(this, arguments); }, // Triggered when a file is not added to the queue onSelectError : function(file, errorCode, errorMsg) { // Load the swfupload settings var settings = this.settings; // Run the default event handler if ($.inArray('onSelectError', settings.overrideEvents) < 0) { switch (errorCode) { case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED: if (settings.queueSizeLimit > errorMsg) { this.queueData.errorMsg += '\nThe number of files selected exceeds the remaining upload limit (' + errorMsg + ').'; } else { this.queueData.errorMsg += '\nThe number of files selected exceeds the queue size limit (' + settings.queueSizeLimit + ').'; } break; case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT: this.queueData.errorMsg += '\nThe file "' + file.name + '" exceeds the size limit (' + settings.fileSizeLimit + ').'; break; case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE: this.queueData.errorMsg += '\nThe file "' + file.name + '" is empty.'; break; case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT: this.queueData.errorMsg += '\nThe file "' + file.name + '" is not an accepted file type (' + settings.fileTypeDesc + ').'; break; } } if (errorCode != SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED) { delete this.queueData.files[file.id]; } // Call the user-defined event handler if (settings.onSelectError) settings.onSelectError.apply(this, arguments); }, // Triggered when all the files in the queue have been processed onQueueComplete : function() { if (this.settings.onQueueComplete) this.settings.onQueueComplete.call(this, this.settings.queueData); }, // Triggered when a file upload successfully completes onUploadComplete : function(file) { // Load the swfupload settings var settings = this.settings, swfuploadify = this; // Check if all the files have completed uploading var stats = this.getStats(); this.queueData.queueLength = stats.files_queued; if (this.queueData.uploadQueue[0] == '*') { if (this.queueData.queueLength > 0) { this.startUpload(); } else { this.queueData.uploadQueue = []; // Call the user-defined event handler for queue complete if (settings.onQueueComplete) settings.onQueueComplete.call(this, this.queueData); } } else { if (this.queueData.uploadQueue.length > 0) { this.startUpload(this.queueData.uploadQueue.shift()); } else { this.queueData.uploadQueue = []; // Call the user-defined event handler for queue complete if (settings.onQueueComplete) settings.onQueueComplete.call(this, this.queueData); } } // Call the default event handler if ($.inArray('onUploadComplete', settings.overrideEvents) < 0) { if (settings.removeCompleted) { switch (file.filestatus) { case SWFUpload.FILE_STATUS.COMPLETE: setTimeout(function() { if ($('#' + file.id)) { swfuploadify.queueData.queueSize -= file.size; swfuploadify.queueData.queueLength -= 1; delete swfuploadify.queueData.files[file.id] $('#' + file.id).fadeOut(500, function() { $(this).remove(); }); } }, settings.removeTimeout * 1000); break; case SWFUpload.FILE_STATUS.ERROR: if (!settings.requeueErrors) { setTimeout( function() { if ($('#' + file.id)) { swfuploadify.queueData.queueSize -= file.size; swfuploadify.queueData.queueLength -= 1; delete swfuploadify.queueData.files[file.id]; $('#' + file.id).fadeOut(500, function() { $(this).remove(); }); } }, settings.removeTimeout * 1000); } break; } } else { file.uploaded = true; } } // Call the user-defined event handler if (settings.onUploadComplete) settings.onUploadComplete.call(this, file); }, // Triggered when a file upload returns an error onUploadError : function(file, errorCode, errorMsg) { // Load the swfupload settings var settings = this.settings; // Set the error string var errorString = 'Error'; switch (errorCode) { case SWFUpload.UPLOAD_ERROR.HTTP_ERROR: errorString = 'HTTP Error (' + errorMsg + ')'; break; case SWFUpload.UPLOAD_ERROR.MISSING_UPLOAD_URL: errorString = 'Missing Upload URL'; break; case SWFUpload.UPLOAD_ERROR.IO_ERROR: errorString = 'IO Error'; break; case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR: errorString = 'Security Error'; break; case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED: alert('The upload limit has been reached (' + errorMsg + ').'); errorString = 'Exceeds Upload Limit'; break; case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED: errorString = 'Failed'; break; case SWFUpload.UPLOAD_ERROR.SPECIFIED_FILE_ID_NOT_FOUND: break; case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED: errorString = 'Validation Error'; break; case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED: errorString = 'Cancelled'; this.queueData.queueSize -= file.size; this.queueData.queueLength -= 1; if (file.status == SWFUpload.FILE_STATUS.IN_PROGRESS || $.inArray(file.id, this.queueData.uploadQueue) >= 0) { this.queueData.uploadSize -= file.size; } // Trigger the onCancel event if (settings.onCancel) settings.onCancel.call(this, file); delete this.queueData.files[file.id]; break; case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED: errorString = 'Stopped'; break; } // Call the default event handler if ($.inArray('onUploadError', settings.overrideEvents) < 0) { if (errorCode != SWFUpload.UPLOAD_ERROR.FILE_CANCELLED && errorCode != SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED) { $('#' + file.id).addClass('uploadify-error'); } // Reset the progress bar $('#' + file.id).find('.uploadify-progress-bar').css('width', '1px'); // Add the error message to the queue item if (errorCode != SWFUpload.UPLOAD_ERROR.SPECIFIED_FILE_ID_NOT_FOUND && file.status != SWFUpload.FILE_STATUS.COMPLETE) { $('#' + file.id).find('.data').html(' - ' + errorString); } } var stats = this.getStats(); this.queueData.uploadsErrored = stats.upload_errors; // Call the user-defined event handler if (settings.onUploadError) settings.onUploadError.call(this, file, errorCode, errorMsg, errorString); }, // Triggered periodically during a file upload onUploadProgress : function(file, fileBytesLoaded, fileTotalBytes) { // Load the swfupload settings var settings = this.settings; // Setup all the variables var timer = new Date(); var newTime = timer.getTime(); var lapsedTime = newTime - this.timer; if (lapsedTime > 500) { this.timer = newTime; } var lapsedBytes = fileBytesLoaded - this.bytesLoaded; this.bytesLoaded = fileBytesLoaded; var queueBytesLoaded = this.queueData.queueBytesUploaded + fileBytesLoaded; var percentage = Math.round(fileBytesLoaded / fileTotalBytes * 100); // Calculate the average speed var suffix = 'KB/s'; var mbs = 0; var kbs = (lapsedBytes / 1024) / (lapsedTime / 1000); kbs = Math.floor(kbs * 10) / 10; if (this.queueData.averageSpeed > 0) { this.queueData.averageSpeed = Math .floor((this.queueData.averageSpeed + kbs) / 2); } else { this.queueData.averageSpeed = Math.floor(kbs); } if (kbs > 1000) { mbs = (kbs * .001); this.queueData.averageSpeed = Math.floor(mbs); suffix = 'MB/s'; } // Call the default event handler if ($.inArray('onUploadProgress', settings.overrideEvents) < 0) { if (settings.progressData == 'percentage') { $('#' + file.id).find('.data').html( ' - ' + percentage + '%'); } else if (settings.progressData == 'speed' && lapsedTime > 500) { $('#' + file.id).find('.data').html( ' - ' + this.queueData.averageSpeed + suffix); } $('#' + file.id).find('.uploadify-progress-bar').css('width', percentage + '%'); } // Call the user-defined event handler if (settings.onUploadProgress) settings.onUploadProgress.call(this, file, fileBytesLoaded, fileTotalBytes, queueBytesLoaded, this.queueData.uploadSize); }, // Triggered right before a file is uploaded onUploadStart : function(file) { // Load the swfupload settings var settings = this.settings; var timer = new Date(); this.timer = timer.getTime(); this.bytesLoaded = 0; if (this.queueData.uploadQueue.length == 0) { this.queueData.uploadSize = file.size; } if (settings.checkExisting) { $ .ajax({ type : 'POST', async : false, url : settings.checkExisting, data : { filename : file.name }, success : function(data) { if (data == 1) { var overwrite = confirm('A file with the name "' + file.name + '" already exists on the server.\nWould you like to replace the existing file?'); if (!overwrite) { this.cancelUpload(file.id); $('#' + file.id).remove(); if (this.queueData.uploadQueue.length > 0 && this.queueData.queueLength > 0) { if (this.queueData.uploadQueue[0] == '*') { this.startUpload(); } else { this .startUpload(this.queueData.uploadQueue .shift()); } } } } } }); } // Call the user-defined event handler if (settings.onUploadStart) settings.onUploadStart.call(this, file); }, // Triggered when a file upload returns a successful code onUploadSuccess : function(file, data, response) { // Load the swfupload settings var settings = this.settings; var stats = this.getStats(); this.queueData.uploadsSuccessful = stats.successful_uploads; this.queueData.queueBytesUploaded += file.size; // Call the default event handler if ($.inArray('onUploadSuccess', settings.overrideEvents) < 0) { $('#' + file.id).find('.data').html(' - Complete'); } // Call the user-defined event handler if (settings.onUploadSuccess) settings.onUploadSuccess.call(this, file, data, response); } } $.fn.uploadify = function(method) { if (methods[method]) { return methods[method].apply(this, Array.prototype.slice.call( arguments, 1)); } else if (typeof method === 'object' || !method) { return methods.init.apply(this, arguments); } else { $.error('The method ' + method + ' does not exist in $.uploadify'); } } })($);