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