//xjxSWFup = xajax.ext.SWFupload; xajax.ext.SWFupload.swf = null; xajax.ext.SWFupload.forms = {}; xajax.ext.SWFupload.fields = {}; xajax.ext.SWFupload.queues = {}; xajax.ext.SWFupload.tools = {}; /* default upload settings */ xajax.ext.SWFupload.settings = { flash_url : xajax.ext.SWFupload.config.javascript_URI+"swfupload.swf", file_size_limit : "0", file_types : "*.*", file_types_description : "All Files", file_upload_limit : 0, file_queue_limit : 0, file_queue_error_handler : xajax.ext.SWFupload.tools.fileQueueError, debug: false, button_image_url : "img/button_500x22.gif", button_width : 270, button_height : 22, button_action : SWFUpload.BUTTON_ACTION.SELECT_FILES, button_window_mode: SWFUpload.WINDOW_MODE.TRANSPARENT, button_placeholder_id :'' , button_text : 'Select Files...', button_text_style : ".btnText { font-size: 10; font-weight: bold; font-family: MS Shell Dlg; }", button_text_top_padding : 3, button_text_left_padding : 100, post_params : {} } if ('undefined' == typeof xajax.ext.SWFupload.lang) { xajax.ext.SWFupload.lang = {}; xajax.ext.SWFupload.lang.browseFiles = 'Browse Files'; xajax.ext.SWFupload.lang.browseFile = 'Browse File'; } /* ------------------------------------------------------------------------------------------------------------------------ */ /* function: xajax.ext.SWFupload.init arguments: config [object] Creates the SWFupload instance */ xajax.ext.SWFupload.configure = function (config) { if ("object" == typeof config) return xajax.ext.SWFupload.tools.mergeObj(this.settings,config); return this.settings; } /* ------------------------------------------------------------------------------------------------------------------------ */ /* function: xajax.ext.SWFupload.addQueue arguments: child [object], parent [object], config [objeect ,multiple [bool] Creates a new a new file queue and stores the reference in this.queues */ xajax.ext.SWFupload.addQueue = function (child,parent,config,multiple) { var id = xajax.ext.SWFupload.tools.getId(); this.queues[id] = new xajax.ext.SWFupload.tools.fileQueue(id,child,parent,config,multiple); return id; } /* ------------------------------------------------------------------------------------------------------------------------ */ /* function: xajax.ext.SWFupload.applyConfig arguments: oQueue [object] Applies the queue's config on the SWFupload instance */ xajax.ext.SWFupload.applyConfig = function(oQueue) { var conf = oQueue.getConfig(); var swf = xajax.ext.SWFupload.getInstance(); if ( 'undefined' != typeof conf.file_types ) swf.setFileTypes(conf.file_types, conf.file_types_description); if ( 'undefined' != typeof conf.file_size_limit ) swf.setFileSizeLimit(conf.file_size_limit); if ( 'object' == typeof conf.post_params) { for (a in conf.post_params) swf.addPostParam(a,conf.post_params[a]); } swf.settings.file_queued_handler = function(oFile) {oQueue.addFile(oFile)};; swf.settings.file_queue_error_handler = oQueue.fileQueueError; } /* ------------------------------------------------------------------------------------------------------------------------ */ /* function: xajax.ext.SWFupload.selectFile arguments: oQueue [object] Onclick handler for selecting file */ xajax.ext.SWFupload.selectFile = function(oQueue) { this.applyConfig(oQueue); if (oQueue.getConfig().file_queue_limit > 0 && oQueue.getConfig().file_queue_limit <= oQueue.queued) return; xajax.ext.SWFupload.getInstance().selectFile(); } /* ------------------------------------------------------------------------------------------------------------------------ */ /* function: xajax.ext.SWFupload.selectFiles arguments: oQueue [object] Onclick handler for selecting files */ xajax.ext.SWFupload.selectFiles = function(oQueue) { this.applyConfig(oQueue); if (oQueue.getConfig().file_queue_limit > 0 && oQueue.getConfig().file_queue_limit <= oQueue.queued) return; xajax.ext.SWFupload.getInstance().selectFiles(); } /* ------------------------------------------------------------------------------------------------------------------------ */ /* function: xajax.ext.SWFupload.getInstance arguments: Return the SWFupload instance. If there's no instance available it creates a new one with default settings. */ xajax.ext.SWFupload.getInstance = function() { if (null == this.swf) this.swf = new SWFUpload(this.settings); return this.swf; } /* ------------------------------------------------------------------------------------------------------------------------ */ /* function: xajax.ext.SWFupload.removeFile arguments: QueueId [integer] , FileId [integer] Removes the file (FileID) from queue (QueueId) */ xajax.ext.SWFupload.removeFile = function(QueueId,FileId,finished) { this.queues[QueueId].removeFile(FileId,finished); } /* ------------------------------------------------------------------------------------------------------------------------ */ xajax.ext.SWFupload.request = {}; /* function: xajax.ext.SWFupload.request.getFileFromQueue arguments: oRequest [object] Returns the first file from first available queue. Returns false if no files were selected */ xajax.ext.SWFupload.request.getFileFromQueue = function(oRequest) { var instances = {}; var queued = 0; if ("string" == typeof oRequest.SWFform) { if ('object' != typeof xajax.ext.SWFupload.forms[oRequest.SWFform]) { return false; } for (a in xajax.ext.SWFupload.forms[oRequest.SWFform]) { var field = xajax.ext.SWFupload.forms[oRequest.SWFform][a]; if (0 < xajax.ext.SWFupload.queues[field].queued) { oRequest.currentFile = xajax.ext.SWFupload.queues[field].getFile(); oRequest.swf = xajax.ext.SWFupload.queues[field].getSWF(); return true ; }; } } else if ("string" == typeof oRequest.SWFfield) { if ('string' != typeof xajax.ext.SWFupload.fields[oRequest.SWFfield]) { return false; } var qId = xajax.ext.SWFupload.fields[oRequest.SWFfield]; if (0 < xajax.ext.SWFupload.queues[qId].queued) { oRequest.currentFile = xajax.ext.SWFupload.queues[qId].getFile(); oRequest.swf = xajax.ext.SWFupload.queues[qId].getSWF(); return true ; }; } else { for (var a in xajax.ext.SWFupload.queues) { if (0 < xajax.ext.SWFupload.queues[a].queued) { oRequest.currentFile = xajax.ext.SWFupload.queues[a].getFile(); oRequest.swf = xajax.ext.SWFupload.queues[a].getSWF(); return true; }; } } return false; } /* ------------------------------------------------------------------------------------------------------------------------ */ /* function: xajax.ext.SWFupload.request. xajax.ext.SWFupload.request.processParameters = function(oRequest) arguments: oRequest [object] Processes the parameters */ xajax.ext.SWFupload.request.processParameters = function(oRequest) { if ("SWFupload" == oRequest.mode) { oRequest.currentFile = false; xajax.ext.SWFupload.request.getFileFromQueue(oRequest); if (oRequest.currentFile) oRequest.method='GET'; } return xajax.ext.SWFupload.bak.processParameters(oRequest); } /* ------------------------------------------------------------------------------------------------------------------------ */ /* function: xajax.ext.SWFupload.request. xajax.ext.SWFupload.request.prepareRequest = function(oRequest) arguments: oRequest [object] doesn't to anything at all when there's a file selected for upload */ xajax.ext.SWFupload.request.prepareRequest = function (oRequest) { if ("SWFupload" == oRequest.mode && false != oRequest.currentFile) return; return xajax.ext.SWFupload.bak.prepareRequest(oRequest); } /* ------------------------------------------------------------------------------------------------------------------------ */ /* function: xajax.ext.SWFupload.request. xajax.ext.SWFupload.request.submitRequest = function(oRequest) arguments: oRequest [object] Submits the request either via SWFupload or XHR */ xajax.ext.SWFupload.request.submitRequest = function(oRequest) { if ( "SWFupload" == oRequest.mode && false != oRequest.currentFile ) { if (oRequest.requestURI) { //backup requestURI, otherwise xajax.responseReceived() is going to delete our url oRequest.bak_requestURI = oRequest.requestURI; } else if (oRequest.bak_requestURI) { oRequest.requestURI = oRequest.bak_requestURI; } var swf = oRequest.swf; var fileQueue = xajax.ext.SWFupload.queues[oRequest.currentFile.QueueId]; swf.customSettings.currentFile = oRequest.currentFile; swf.setFilePostName(swf.customSettings.currentFile.name); swf.customSettings.oRequest = oRequest; swf.setUploadURL(oRequest.requestURI); swf.settings.upload_success_handler = function ( oFile, response ) { var xx = xajax; var xt = xx.tools; var xcb = xx.callback; var gcb = xcb.global; var lcb = oRequest.callback; var oRet = oRequest.returnValue; var FileId = swf.customSettings.currentFile; if ( 'function' == typeof this.old_upload_success_handler ) this.old_upload_success_handler( oFile ); xcb.execute([gcb, lcb], 'onSuccess', oRequest); var seq = 0; if (response) { var responseXML = (new DOMParser()).parseFromString(response, "text/xml"); if (responseXML.documentElement) { oRequest.status.onProcessing(); var child = responseXML.documentElement.firstChild; oRet = xt.xml.processFragment(child, seq, oRet, oRequest); } } var obj = {}; obj.fullName = 'Response Complete'; obj.sequence = seq; obj.request = oRequest; obj.context = oRequest.context; obj.cmd = 'rcmplt'; xt.queue.push(xx.response, obj); // do not re-start the queue if a timeout is set if (null == xx.response.timeout) xt.queue.process(xx.response); } swf.settings.upload_complete_handler = function(oFile) { var qFile = this.customSettings.currentFile; xajax.ext.SWFupload.removeFile(qFile.QueueId,qFile.id,true); if ( !xajax.ext.SWFupload.request.getFileFromQueue(oRequest) ) { if ('function' == typeof oRequest.onUploadComplete) oRequest.onUploadComplete(); return; } xajax.ext.SWFupload.request.submitRequest(oRequest); } swf.settings.upload_start_handler = function(oFile) { if ('function' == typeof this.old_upload_start_handler) this.old_upload_start_handler(oFile); oRequest.startTime = new Date(); } swf.settings.upload_progress_handler = function (oFile, bytesLoaded, bytesTotal) { upload = {}; upload.received=bytesLoaded; upload.total=bytesTotal; upload.state="uploading"; var reqTime = new Date(); upload.lastbytes = oRequest.lastbytes; upload.now = reqTime.getTime() / 1000; upload.start = oRequest.startTime.getTime()/ 1000; var step = upload.received / (upload.total / 100); var progressbar = xajax.$('SWFup_progress_'+oFile.id); var w = Math.round(220 * step / 100); progressbar.style.width=w+'px'; var progress = xajax.$("swf_queued_filesize_"+oFile.id); var elapsed = upload.now-upload.start; var rate = xajax.ext.SWFupload.tools.formatBytes(upload.received/ elapsed).toString() + '/s'; progress.innerHTML = ""+rate + " "+xajax.ext.SWFupload.tools.formatBytes(upload.received)+"/"+xajax.ext.SWFupload.tools.formatBytes(upload.total); oRequest.lastbytes = upload.received; } swf.settings.upload_error_handler = function(file, errorCode, message) { // Skipe error when a file is removed from queue (abort) if (-280 == errorCode) return; if (file == null) {fileName = '';} else { fileName = file.name; } alert("Error Code: "+errorCode+", File name: " + fileName + ", Message: " + message); }; swf.startUpload(swf.customSettings.currentFile.id); return; } return xajax.ext.SWFupload.bak.submitRequest(oRequest); } /* ------------------------------------------------------------------------------------------------------------------------ */ /* function: xajax.ext.SWFupload.tools.queueFile arguments: oFile,QueueId,QueueContainer */ xajax.ext.SWFupload.tools.queueFile = function(oFile,name,QueueId,QueueContainer) { this.id = oFile.id; this.name = name; this.QueueId = QueueId; var container = document.createElement('div'); container.id = "SWFup_"+this.id; container.className="swf_queued_file"; this.elm = container; var remove = document.createElement('div'); remove.className="swf_queued_file_remove"; remove.innerHTML=" "; var id = this.id; var QueueId = this.QueueId; remove.onclick= function () { xajax.ext.SWFupload.removeFile(QueueId,id); } container.appendChild(remove); var label = document.createElement('div'); label.className="swf_queued_filename"; label.innerHTML = oFile.name; container.appendChild(label); var progress_container = document.createElement('div'); progress_container.className="swf_queued_file_progress_container"; container.appendChild(progress_container); var progress = document.createElement('div'); progress.className="swf_queued_file_progress_bar"; progress.style.width='1px'; progress.id='SWFup_progress_'+oFile.id; progress_container.appendChild(progress); var fSize = document.createElement('div'); fSize.className="swf_queued_filesize"; fSize.id="swf_queued_filesize_"+this.id; fSize.innerHTML = xajax.ext.SWFupload.tools.formatBytes(oFile.size); container.appendChild(fSize); var fClear= document.createElement('div'); fClear.style.clear='both'; container.appendChild(fClear); QueueContainer.appendChild(container); this.container = container; this.oFile = oFile; this.destroy = function() { QueueContainer.removeChild(container); } return; } /* ------------------------------------------------------------------------------------------------------------------------ */ /* function: xajax.ext.SWFupload.tools.fileQueue arguments: id [integer],child [object], parent [object], multiple [bool] parses the form for fields */ xajax.ext.SWFupload.tools.fileQueue = function (id,child,parent,config,multiple) { this.id = id; var config = 'object' == typeof config ? xajax.ext.SWFupload.tools.mergeObj(xajax.ext.SWFupload.settings,config) : xajax.ext.SWFupload.settings; this.queued = 0; this.files = {}; this.queue = null; this.getConfig = function() {return config;} var tmpName = child.name; var container = document.createElement('div'); container.id = 'SWFbuttonContainer_'+tmpName; container.className='swf_browse_button'; parent.appendChild(container); var container2 = document.createElement('div'); container2.id = 'SWFbutton_'+tmpName; container.appendChild(container2); parent.removeChild(child); var oQueue = this; if (true === multiple) { config.button_action = SWFUpload.BUTTON_ACTION.SELECT_FILES; } else { config.button_action = SWFUpload.BUTTON_ACTION.SELECT_FILE; } var QueueContainer = document.createElement('div'); QueueContainer.id = 'SWFqueue_'+ this.id; QueueContainer.className = 'swf_queue_container'; parent.appendChild(QueueContainer); config.button_placeholder_id=container2.id; var foo = this; var fieldname = child.name; this.addFile = function (oFile) { foo.files[oFile.id] = new xajax.ext.SWFupload.tools.queueFile(oFile,fieldname,foo.id,QueueContainer); foo.queued++; if (foo.queued == config.file_queue_limit) foo.swf.setButtonDisabled(true); } this.getFile = function (FileId) { if ("undefined" != typeof FileId) return foo.files[FileId]; for (a in foo.files) return foo.files[a]; return false; } this.purge = function (d) { var a = d.attributes, i, l, n; if (a) { l = a.length; for (i = 0; i < l; i += 1) { n = a[i].name; if (typeof d[n] === 'function') { d[n] = null; } } } a = d.childNodes; if (a) { l = a.length; for (i = 0; i < l; i += 1) { this.purge(d.childNodes[i]); } } } this.removeFile = function(FileId,finished) { foo.swf.cancelUpload(FileId); foo.queued--; if (foo.queued <= config.file_queue_limit) foo.swf.setButtonDisabled(false); var filediv = xajax.$("SWFup_"+foo.files[FileId].id); filediv.className = true === finished ? 'swf_queued_file_finished' : 'swf_queued_file_removed'; setTimeout(function () { xajax.ext.SWFupload.tools.FadeOut(filediv,100); }, xajax.ext.SWFupload.config.FadeTimeOut); foo.files[FileId] = null; delete foo.files[FileId]; } this.destroy = function() { this.swf.destroy(); delete(this.swf); for (a in foo.files) { foo.files[a].destroy(); delete (foo.files[a]); } foo.queued=0; delete(foo); } this.fileQueueError = function(swf,code,msg) { if (-110 == code) { msg = "Die gewählte Datei ist zu groß!"; alert(msg); } } this.getSWF = function() { return this.swf; } config.file_queued_handler=this.addFile; config.file_queue_error_handler=this.fileQueueError; this.swf = new SWFUpload(config); } /* ------------------------------------------------------------------------------------------------------------------------ */ /* function: xajax.ext.SWFupload.tools._parseFields arguments: children [array],parent [object], config [object], multiple [bool] parses the form for fields */ xajax.ext.SWFupload.tools._parseFields = function(children,parent,config,multiple) { var result={}; var iLen = children.length; for (var i = 0; i < iLen; ++i) { var child = children[i]; if ('undefined' != typeof child.childNodes) var res2 = xajax.ext.SWFupload.tools._parseFields(child.childNodes,child,config,multiple); result = xajax.ext.SWFupload.tools.mergeObj(result,res2); if (child.name) { if ('file' == child.type) { result[child.name] = xajax.ext.SWFupload.addQueue(child,parent,config,multiple); } } } return result; } /* ------------------------------------------------------------------------------------------------------------------------ */ /* function: xajax.ext.SWFupload.tools.transForm arguments: form_id [integer] ,config [object] ,multiple [bool] transforms the all fields of the given form into fileQueue instances */ xajax.ext.SWFupload.tools.transForm = function(form_id,config,multiple) { var oForm = xajax.$(form_id); if (oForm) if (oForm.childNodes) { var fields = xajax.ext.SWFupload.tools._parseFields(oForm.childNodes,oForm,config,multiple); xajax.ext.SWFupload.forms[form_id] = fields; } return; } /* ------------------------------------------------------------------------------------------------------------------------ */ /* function: xajax.ext.SWFupload.tools.transField arguments: field_id [integer] ,config [object] ,multiple [bool] transforms the given field into a fileQueue instance */ xajax.ext.SWFupload.tools.transField = function(field_id,config,multiple) { try { var oField = xajax.$(field_id); if ('undefined' != typeof oField) return xajax.ext.SWFupload.fields[field_id] = xajax.ext.SWFupload.addQueue(oField,oField.parentNode,config,multiple); }catch(ex) {} return; } /* ------------------------------------------------------------------------------------------------------------------------ */ /* function: xajax.ext.SWFupload.tools.destroyForm arguments: form_id [integer] destroys the given form */ xajax.ext.SWFupload.tools.destroyForm = function(form_id) { if ("undefined" == typeof xajax.ext.SWFupload.forms[form_id]) return; for (a in xajax.ext.SWFupload.forms[form_id]) { var key = xajax.ext.SWFupload.forms[form_id][a]; xajax.ext.SWFupload.queues[key].destroy(); delete xajax.ext.SWFupload.queues[key]; } delete xajax.ext.SWFupload.forms[form_id]; return; } /* ------------------------------------------------------------------------------------------------------------------------ */ /* function: xajax.ext.SWFupload.tools.destroyField arguments: field_id [integer] destroys the given field */ xajax.ext.SWFupload.tools.destroyField = function(field_id) { if ("undefined" == typeof xajax.ext.SWFupload.fields[field_id]) return; var key = xajax.ext.SWFupload.fields[field_id]; xajax.ext.SWFupload.queues[key].destroy(); delete(xajax.ext.SWFupload.queues[key]); delete xajax.ext.SWFupload.fields[field_id]; return true; } /* ------------------------------------------------------------------------------------------------------------------------ */ /* function: xajax.ext.SWFupload.tools.FadeOut arguments: elm [object], opacity [integer] fades a div */ xajax.ext.SWFupload.tools.FadeOut = function(elm,opacity) { var reduceOpacityBy = 15; var rate = 40; if (opacity > 0) { opacity -= reduceOpacityBy; if (opacity < 0) { opacity = 0; } if (elm.filters) { try { elm.filters.item("DXImageTransform.Microsoft.Alpha").opacity = opacity; } catch (e) { // If it is not set initially, the browser will throw an error. This will set it if it is not set yet. elm.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=" + opacity + ")"; } } else { elm.style.opacity = opacity / 100; } } if ( opacity > 0) { var oSelf = this; setTimeout(function () { xajax.ext.SWFupload.tools.FadeOut(elm,opacity); }, rate); } else { var parent = elm.parentNode; parent.removeChild(elm); } } /* ------------------------------------------------------------------------------------------------------------------------ */ /* function: xajax.ext.SWFupload.tools.formatBytes arguments: bytes [integer] returns string with formatted size (kB / MB) */ xajax.ext.SWFupload.tools.formatBytes = function(bytes) { var ret = {}; if (bytes / 1204 < 1024) { return (Math.round(bytes / 1024 * 100)/100).toString()+ " kB"; } else { return (Math.round(bytes / 1024 / 1024 * 100)/100).toString()+ " MB"; } return ret; } /* ------------------------------------------------------------------------------------------------------------------------ */ /* function: xajax.ext.SWFupload.tools.mergeObj arguments: n objects Merges all objects and returns a single object. Newrt keys override existing keys. */ xajax.ext.SWFupload.tools.mergeObj = function() { if ('object' != typeof arguments) return; var res = {}; var len = arguments.length; for (var i=0;i