| // JavaScript Document | 
| jQuery | 
|         .extend({ | 
|   | 
|             createUploadIframe : function(id, uri) { | 
|                 // create frame | 
|                 var frameId = 'jUploadFrame' + id; | 
|   | 
|                 if (window.ActiveXObject) { | 
|                     if (jQuery.browser.version == "9.0" | 
|                             || jQuery.browser.version == "10.0") { | 
|                         var io = document.createElement('iframe'); | 
|                         io.id = frameId; | 
|                         io.name = frameId; | 
|                     } else if (jQuery.browser.version == "6.0" | 
|                             || jQuery.browser.version == "7.0" | 
|                             || jQuery.browser.version == "8.0") { | 
|                         var io = document.createElement('<iframe id="' | 
|                                 + frameId + '" name="' + frameId + '" />'); | 
|                         if (typeof uri == 'boolean') { | 
|                             io.src = 'javascript:false'; | 
|                         } else if (typeof uri == 'string') { | 
|                             io.src = uri; | 
|                         } | 
|                     } | 
|                 } else { | 
|                     var io = document.createElement('iframe'); | 
|                     io.id = frameId; | 
|                     io.name = frameId; | 
|                 } | 
|                 io.style.position = 'absolute'; | 
|                 io.style.top = '-1000px'; | 
|                 io.style.left = '-1000px'; | 
|   | 
|                 document.body.appendChild(io); | 
|   | 
|                 return io; | 
|             }, | 
|             createUploadForm : function(id, fileElementId) { | 
|                 // create form | 
|                 var formId = 'jUploadForm' + id; | 
|                 var fileId = 'jUploadFile' + id; | 
|                 var form = jQuery('<form  action="" method="POST" name="' | 
|                         + formId + '" id="' + formId | 
|                         + '" enctype="multipart/form-data"></form>'); | 
|                 var oldElement = jQuery('#' + fileElementId); | 
|                 var newElement = jQuery(oldElement).clone(); | 
|                 jQuery(oldElement).attr('id', fileId); | 
|                 jQuery(oldElement).before(newElement); | 
|                 jQuery(oldElement).appendTo(form); | 
|                 // set attributes | 
|                 jQuery(form).css('position', 'absolute'); | 
|                 jQuery(form).css('top', '-1200px'); | 
|                 jQuery(form).css('left', '-1200px'); | 
|                 jQuery(form).appendTo('body'); | 
|                 return form; | 
|             }, | 
|   | 
|             ajaxFileUpload : function(s) { | 
|                 // TODO introduce global settings, allowing the client to modify | 
|                 // them for all requests, not only timeout | 
|                 s = jQuery.extend({}, jQuery.ajaxSettings, s); | 
|                 var id = s.fileElementId; | 
|                 var form = jQuery.createUploadForm(id, s.fileElementId); | 
|                 var io = jQuery.createUploadIframe(id, s.secureuri); | 
|                 var frameId = 'jUploadFrame' + id; | 
|                 var formId = 'jUploadForm' + id; | 
|   | 
|                 if (s.global && !jQuery.active++) { | 
|                     // Watch for a new set of requests | 
|                     jQuery.event.trigger("ajaxStart"); | 
|                 } | 
|                 var requestDone = false; | 
|                 // Create the request object | 
|                 var xml = {}; | 
|                 if (s.global) { | 
|                     jQuery.event.trigger("ajaxSend", [ xml, s ]); | 
|                 } | 
|   | 
|                 var uploadCallback = function(isTimeout) { | 
|                     // Wait for a response to come back | 
|                     var io = document.getElementById(frameId); | 
|                     try { | 
|                         if (io.contentWindow) { | 
|                             xml.responseText = io.contentWindow.document.body ? io.contentWindow.document.body.innerHTML | 
|                                     : null; | 
|                             xml.responseXML = io.contentWindow.document.XMLDocument ? io.contentWindow.document.XMLDocument | 
|                                     : io.contentWindow.document; | 
|   | 
|                         } else if (io.contentDocument) { | 
|                             xml.responseText = io.contentDocument.document.body ? io.contentDocument.document.body.innerHTML | 
|                                     : null; | 
|                             xml.responseXML = io.contentDocument.document.XMLDocument ? io.contentDocument.document.XMLDocument | 
|                                     : io.contentDocument.document; | 
|                         } | 
|                     } catch (e) { | 
|                         jQuery.handleError(s, xml, null, e); | 
|                     } | 
|                     if (xml || isTimeout == "timeout") { | 
|                         requestDone = true; | 
|                         var status; | 
|                         try { | 
|                             status = isTimeout != "timeout" ? "success" | 
|                                     : "error"; | 
|                             // Make sure that the request was successful or | 
|                             // notmodified | 
|                             if (status != "error") { | 
|                                 // process the data (runs the xml through | 
|                                 // httpData regardless of callback) | 
|                                 var data = jQuery.uploadHttpData(xml, | 
|                                         s.dataType); | 
|                                 if (s.success) { | 
|                                     // ifa local callback was specified, fire it | 
|                                     // and pass it the data | 
|                                     s.success(data, status); | 
|                                 } | 
|                                 ; | 
|                                 if (s.global) { | 
|                                     // Fire the global callback | 
|                                     jQuery.event.trigger("ajaxSuccess", [ xml, | 
|                                             s ]); | 
|                                 } | 
|                                 ; | 
|                             } else { | 
|                                 jQuery.handleError(s, xml, status); | 
|                             } | 
|   | 
|                         } catch (e) { | 
|                             status = "error"; | 
|                             jQuery.handleError(s, xml, status, e); | 
|                         } | 
|                         ; | 
|                         if (s.global) { | 
|                             // The request was completed | 
|                             jQuery.event.trigger("ajaxComplete", [ xml, s ]); | 
|                         } | 
|                         ; | 
|   | 
|                         // Handle the global AJAX counter | 
|                         if (s.global && !--jQuery.active) { | 
|                             jQuery.event.trigger("ajaxStop"); | 
|                         } | 
|                         ; | 
|                         if (s.complete) { | 
|                             s.complete(xml, status); | 
|                         } | 
|                         ; | 
|   | 
|                         jQuery(io).unbind(); | 
|   | 
|                         setTimeout(function() { | 
|                             try { | 
|                                 jQuery(io).remove(); | 
|                                 jQuery(form).remove(); | 
|   | 
|                             } catch (e) { | 
|                                 jQuery.handleError(s, xml, null, e); | 
|                             } | 
|   | 
|                         }, 100); | 
|   | 
|                         xml = null; | 
|   | 
|                     } | 
|                     ; | 
|                 } | 
|                 // Timeout checker | 
|                 if (s.timeout > 0) { | 
|                     setTimeout(function() { | 
|   | 
|                         if (!requestDone) { | 
|                             // Check to see ifthe request is still happening | 
|                             uploadCallback("timeout"); | 
|                         } | 
|   | 
|                     }, s.timeout); | 
|                 } | 
|                 try { | 
|                     var form = jQuery('#' + formId); | 
|                     jQuery(form).attr('action', s.url); | 
|                     jQuery(form).attr('method', 'POST'); | 
|                     jQuery(form).attr('target', frameId); | 
|                     if (form.encoding) { | 
|                         form.encoding = 'multipart/form-data'; | 
|                     } else { | 
|                         form.enctype = 'multipart/form-data'; | 
|                     } | 
|                     jQuery(form).submit(); | 
|   | 
|                 } catch (e) { | 
|                     jQuery.handleError(s, xml, null, e); | 
|                 } | 
|                 if (window.attachEvent) { | 
|                     document.getElementById(frameId).attachEvent('onload', | 
|                             uploadCallback); | 
|                 } else { | 
|                     document.getElementById(frameId).addEventListener('load', | 
|                             uploadCallback, false); | 
|                 } | 
|                 return { | 
|                     abort : function() { | 
|                     } | 
|                 }; | 
|   | 
|             }, | 
|   | 
|             uploadHttpData : function(r, type) { | 
|                 var data = !type; | 
|                 data = type == "xml" || data ? r.responseXML : r.responseText; | 
|                 // ifthe type is "script", eval it in global context | 
|                 if (type == "script") { | 
|                     jQuery.globalEval(data); | 
|                 } | 
|   | 
|                 // Get the JavaScript object, ifJSON is used. | 
|                 if (type == "json") { | 
|                     var start = data.indexOf(">"); | 
|                     if (start != -1) { | 
|                         var end = data.indexOf("<", start + 1); | 
|                         if (end != -1) { | 
|                             data = data.substring(start + 1, end); | 
|                         } | 
|                     } | 
|                     eval("data = " + data); | 
|                 } | 
|   | 
|                 // evaluate scripts within html | 
|                 if (type == "html") { | 
|                     jQuery("<div>").html(data).evalScripts(); | 
|                 } | 
|   | 
|                 return data; | 
|             } | 
|         }); |