// Global variables for progress bar
var ASPUpload_xmlHttp;
var ASPUpload_timeoutID;
var ASPUpload_timeoutTime = 750; // timeout time in ms
var ASPUpload_sessionID;
var ASPUpload_containerID;
var ASPUpload_asyncRequest; // asynchronous request
var ASPUpload_percentComplete = 0;
var ASPUpload_ProgressUrl = "aspupload-progress.asp?pid=%p";
var ASPUpload_ProgressBar = "<div class=\"ewProgressBarContainer\"><div id=\"aspupload_progress\" style=\"width:%pc%\" class=\"ewProgressBar\"></div></div><div class=\"ewProgressText\">"+ewLanguage.Phrase("UploadProgress")+"</div>";
var ASPUpload_ProgressBarComplete = "<div class=\"ewProgressBarContainer\"><div id=\"aspupload_progress\" class=\"ewProgressBar\" style=\"width:100%\"></div></div><div class=\"ewProgressText\">"+ewLanguage.Phrase("UploadComplete")+"</div>";

// Get xmlHttp Object
function ASPUpload_GetXmlHttp() {
	var xmlHttp, success, i;
	success = false;
	try {
		// Firefox, Opera, Safari
		xmlHttp = new XMLHttpRequest();
		success = true;
	} catch (e) {
		// Internet Explorer
		var XMLHTTP_IDS = ['MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
		for (i = 0; i < XMLHTTP_IDS.length && !success; i++) {
			try {
				xmlHttp = new ActiveXObject(XMLHTTP_IDS[i]);
				success = true;
			}
			catch (e2) {}
		}
		if (!success) {
			throw new Error('Unable to create XMLHttpRequest!');
		}
	}
	return xmlHttp;
}

// Show upload progress
function ASPUpload_ShowProgress(f, pid, cid) {
	if (f && f.a_confirm) return; // Skip progress bar for confirm
	ASPUpload_xmlHttp = ASPUpload_GetXmlHttp();
	if (ASPUpload_xmlHttp==null) {
		alert('Your browser does not support AJAX!');
		return;
	}
	ASPUpload_xmlHttp.onreadystatechange = ASPUpload_StateChanged;
	// Async request for IE/Firefox
	ASPUpload_asyncRequest = (ewEnv.ua.ie || ewEnv.ua.gecko);
	ASPUpload_sessionID = pid;
	ASPUpload_containerID = cid;
	ASPUpload_UpdateProgress();
	ewProgressBar.show();
}

// Update upload progress
function ASPUpload_UpdateProgress() {
	var url = ASPUpload_ProgressUrl;
	url = url.replace("%p", ASPUpload_sessionID);
	ASPUpload_xmlHttp.open('GET', url, ASPUpload_asyncRequest);
	ASPUpload_xmlHttp.onreadystatechange = ASPUpload_StateChanged;
	ASPUpload_xmlHttp.send(null);
}

// Handle Ajax response
function ASPUpload_StateChanged() {

	if (ASPUpload_xmlHttp.readyState == 4) {
		var div = document.getElementById(ASPUpload_containerID);
		// Empty response, try again
		if (ASPUpload_xmlHttp.responseText == "") {
			clearTimeout(ASPUpload_timeoutID);
			ASPUpload_timeoutID = setTimeout('ASPUpload_UpdateProgress()', ASPUpload_timeoutTime);
			return;
		}

		var xml = ASPUpload_xmlHttp.responseXML;
//alert(ASPUpload_xmlHttp.responseText);
		var percentComplete = parseInt(xml.getElementsByTagName('PercentComplete')[0].firstChild.nodeValue);
		var remainingTime = xml.getElementsByTagName('RemainingTime')[0].firstChild.nodeValue;
		var transferSpeed = xml.getElementsByTagName('TransferSpeed')[0].firstChild.nodeValue;
		var totalBytes = xml.getElementsByTagName('TotalBytes')[0].firstChild.nodeValue;
		var uploadedBytes = xml.getElementsByTagName('UploadedBytes')[0].firstChild.nodeValue;

		var bar = ASPUpload_ProgressBar;
		bar = bar.replace(/%pc/g, percentComplete);
		bar = bar.replace(/%rt/g, remainingTime);
		bar = bar.replace(/%ts/g, transferSpeed);
		bar = bar.replace(/%tb/g, totalBytes);
		bar = bar.replace(/%ub/g, uploadedBytes);

		if (div) {
			if (percentComplete == 0 && transferSpeed == 0 && totalBytes == 0 && uploadedBytes == 0) { // Empty response, completed?
				// Confirm complete
				if (ASPUpload_percentComplete > 0) {
					ewProgressBar.setBody(ASPUpload_ProgressBarComplete);
					clearTimeout(ASPUpload_timeoutID);
					return;
				}
				ASPUpload_percentComplete = 100; // Set to complete for first empty response
			}
			if (percentComplete > 0) {
				ASPUpload_percentComplete = percentComplete;
				ewProgressBar.setBody(bar);
			}
			// schedule next update
			clearTimeout(ASPUpload_timeoutID);
			ASPUpload_timeoutID = setTimeout('ASPUpload_UpdateProgress()', ASPUpload_timeoutTime);
		}

	}
}
