function doFileUpload(fileField, convertFunction, convertScope) {
	httpRequestFileUpload = new JsHttpRequest();
	httpRequestFileUpload.convertFunction = convertFunction;
	httpRequestFileUpload.convertScope = convertScope;
	httpRequestFileUpload.onreadystatechange = fileUploadCallback;
	httpRequestFileUpload.open(null, 'uploaddc?form=' + currentForm, true);
	httpRequestFileUpload.send( { 'file': fileField } );
}

function fileUploadCallback() {
	if (httpRequestFileUpload.readyState == 4) {
		var xmltext = httpRequestFileUpload.responseXML;
		var xmldoc = false;
		if (window.ActiveXObject) { // IE
			xmldoc = new ActiveXObject("Microsoft.XMLDOM");
			xmldoc.async = "false";
			xmldoc.loadXML(xmltext);
		} else { // Mozilla, Firefox, Opera, etc.
			var parser = new DOMParser();
			xmldoc = parser.parseFromString(xmltext,"text/xml");
		}
		var error = xmldoc.getElementsByTagName('error').item(0);
		if (error) {
			var codeEl = error.getElementsByTagName('code').item(0);
			var formEl = error.getElementsByTagName('form').item(0);
			var toEl = error.getElementsByTagName('toVersion').item(0);
			var fromEl = error.getElementsByTagName('fromVersion').item(0);
			var msg = '';
			var archForm = '';
			var archVersion = '';
			var currVersion = '';
			if (codeEl && (codeEl.textContent || codeEl.firstChild)) {
				msg = (codeEl.textContent ? codeEl.textContent : codeEl.firstChild.data);
			}
			if (formEl && (formEl.textContent || formEl.firstChild)) {
				archForm = (formEl.textContent ? formEl.textContent : formEl.firstChild.data);
			}
			if (toEl && (toEl.textContent || toEl.firstChild)) {
				archVersion = (toEl.textContent ? toEl.textContent : toEl.firstChild.data);
			}
			if (fromEl && (fromEl.textContent || fromEl.firstChild)) {
				currVersion = (fromEl.textContent ? fromEl.textContent : fromEl.firstChild.data);
			}
			if (archForm) {
				var handled = false;
				if (httpRequestFileUpload.convertFunction) {
					handled = httpRequestFileUpload.convertFunction.apply(httpRequestFileUpload.convertScope, [archForm, archVersion, currVersion]);
					httpRequestFileUpload.convertFunction = null;
					httpRequestFileUpload.convertScope = null;
				}
				if (!handled && showMessage) showMessage(msg, [archForm, archVersion]);
			} else {
				if (showMessage) showMessage(msg);
			}
		} else {
			// TODO? Seems to need a small delay to give a good response?
			setTimeout("showForm('"+currentForm+"', -2)",10);
		}
	}
}

