/*
|
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');
|
}
|