/* NeatUpload - an HttpModule and User Controls for uploading large files Copyright (C) 2005 Dean Brettle This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ function NeatUploadGetMainWindow() { var mainWindow; if (window.opener) mainWindow = window.opener; else mainWindow = window.parent; return mainWindow; }; NeatUploadCancelled = false; function NeatUploadCancel() { NeatUploadCancelled = true; var mainWindow = NeatUploadGetMainWindow(); if (mainWindow && mainWindow.stop) mainWindow.stop(); else if (mainWindow && mainWindow.document && mainWindow.document.execCommand) mainWindow.document.execCommand('Stop'); } function NeatUpload_CombineHandlers(origHandler, newHandler) { if (!origHandler || typeof(origHandler) == 'undefined') return newHandler; return function(e) { origHandler(e); newHandler(e); }; } NeatUploadReq = null; function NeatUploadRefreshWithAjax(url) { NeatUploadReq = null; var req = null; try { req = new ActiveXObject('Microsoft.XMLHTTP'); } catch (ex) { req = null; } if (!req && typeof(XMLHttpRequest) != 'undefined') { req = new XMLHttpRequest(); } if (req) { NeatUploadReq = req; } if (NeatUploadReq) { NeatUploadReq.onreadystatechange = NeatUploadUpdateHtml; NeatUploadReq.open('GET', url); NeatUploadReq.send(null); } else { return false; } return true; } function NeatUploadUpdateHtml() { if (typeof(NeatUploadReq) != 'undefined' && NeatUploadReq != null && NeatUploadReq.readyState == 4) { try { var responseXmlDoc = NeatUploadReq.responseXML; if (responseXmlDoc.parseError && responseXmlDoc.parseError.errorCode != 0) { // window.alert('parse error: ' + responseXmlDoc.parseError.reason); } // window.alert(new XMLSerializer().serializeToString(responseXmlDoc)); var templates = responseXmlDoc.getElementsByTagName('neatUploadDetails'); var status = templates.item(0).getAttribute('status'); for (var t = 0; t < templates.length; t++) { var srcElem = templates.item(t); var innerXml = ''; for (var i = 0; i < srcElem.childNodes.length; i++) { var childNode = srcElem.childNodes.item(i); var xml = childNode.xml; if (xml == null) xml = new XMLSerializer().serializeToString(childNode); if (typeof(xml) == 'undefined') throw "serializeToString() returned 'undefined' (probably due to a Safari bug) so no AJAX."; innerXml += xml; } var id = srcElem.getAttribute('id'); var destElem = document.getElementById(id); destElem.innerHTML = innerXml; for (var a=0; a < srcElem.attributes.length; a++) { var attr = srcElem.attributes.item(a); if (attr.specified) { if (attr.name == 'style' && destElem.style && destElem.style.cssText) destElem.style.cssText = attr.value; else destElem.setAttribute(attr.name, attr.value); } } } if (status != 'NormalInProgress' && status != 'ChunkedInProgress' && status != 'Unknown') { NeatUploadRefreshPage(); } var lastMillis = NeatUploadLastUpdate.getTime(); NeatUploadLastUpdate = new Date(); var delay = Math.max(lastMillis + 1000 - NeatUploadLastUpdate.getTime(), 1); NeatUploadReloadTimeoutId = setTimeout('NeatUploadRefresh()', delay); } catch (ex) { NeatUploadRefreshPage(); } } } NeatUploadLastUpdate = new Date(); NeatUploadReloadTimeoutId = null; window.onunload = NeatUpload_CombineHandlers(window.onunload, function () { if (NeatUploadReq && NeatUploadReq.readystate && NeatUploadReq.readystate >= 1 && NeatUploadReq.readystate <=3) { NeatUploadReq.abort(); } NeatUploadReq = null; if (NeatUploadReloadTimeoutId) clearTimeout(NeatUploadReloadTimeoutId); }); NeatUploadMainWindow = NeatUploadGetMainWindow(); function NeatUploadRefresh() { if (!NeatUploadRefreshWithAjax(NeatUploadRefreshUrl + '&useXml=true')) { NeatUploadRefreshPage(); } } function NeatUploadRefreshPage() { if (!NeatUploadCancelled) { window.location.replace(NeatUploadRefreshUrl); } } function NeatUpload_CancelClicked() { NeatUploadCancel(); window.location.replace(NeatUploadRefreshUrl + '&cancelled=true'); }